Hex Artifact Content
Not logged in

Artifact 28f3c1fb5ca0c379e358aeda9e6dc02962ad9864:


0000: 2f 2a 20 67 6f 73 74 2e 63 20 2d 20 61 6e 20 69  /* gost.c - an i
0010: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
0020: 20 47 4f 53 54 20 48 61 73 68 20 46 75 6e 63 74   GOST Hash Funct
0030: 69 6f 6e 0a 20 2a 20 62 61 73 65 64 20 6f 6e 20  ion. * based on 
0040: 74 68 65 20 52 75 73 73 69 61 6e 20 53 74 61 6e  the Russian Stan
0050: 64 61 72 64 20 47 4f 53 54 20 52 20 33 34 2e 31  dard GOST R 34.1
0060: 31 2d 39 34 2e 0a 20 2a 20 53 65 65 20 61 6c 73  1-94.. * See als
0070: 6f 20 52 46 43 20 34 33 35 37 2e 0a 20 2a 0a 20  o RFC 4357.. *. 
0080: 2a 20 43 6f 70 79 72 69 67 68 74 3a 20 32 30 30  * Copyright: 200
0090: 39 2d 32 30 31 32 20 41 6c 65 6b 73 65 79 20 4b  9-2012 Aleksey K
00a0: 72 61 76 63 68 65 6e 6b 6f 20 3c 72 68 61 73 68  ravchenko <rhash
00b0: 2e 61 64 6d 69 6e 40 67 6d 61 69 6c 2e 63 6f 6d  .admin@gmail.com
00c0: 3e 0a 20 2a 0a 20 2a 20 50 65 72 6d 69 73 73 69  >. *. * Permissi
00d0: 6f 6e 20 69 73 20 68 65 72 65 62 79 20 67 72 61  on is hereby gra
00e0: 6e 74 65 64 2c 20 20 66 72 65 65 20 6f 66 20 63  nted,  free of c
00f0: 68 61 72 67 65 2c 20 20 74 6f 20 61 6e 79 20 70  harge,  to any p
0100: 65 72 73 6f 6e 20 20 6f 62 74 61 69 6e 69 6e 67  erson  obtaining
0110: 20 61 0a 20 2a 20 63 6f 70 79 20 6f 66 20 74 68   a. * copy of th
0120: 69 73 20 73 6f 66 74 77 61 72 65 20 61 6e 64 20  is software and 
0130: 61 73 73 6f 63 69 61 74 65 64 20 64 6f 63 75 6d  associated docum
0140: 65 6e 74 61 74 69 6f 6e 20 66 69 6c 65 73 20 28  entation files (
0150: 74 68 65 20 22 53 6f 66 74 77 61 72 65 22 29 2c  the "Software"),
0160: 0a 20 2a 20 74 6f 20 64 65 61 6c 20 69 6e 20 74  . * to deal in t
0170: 68 65 20 53 6f 66 74 77 61 72 65 20 77 69 74 68  he Software with
0180: 6f 75 74 20 72 65 73 74 72 69 63 74 69 6f 6e 2c  out restriction,
0190: 20 20 69 6e 63 6c 75 64 69 6e 67 20 77 69 74 68    including with
01a0: 6f 75 74 20 6c 69 6d 69 74 61 74 69 6f 6e 0a 20  out limitation. 
01b0: 2a 20 74 68 65 20 72 69 67 68 74 73 20 74 6f 20  * the rights to 
01c0: 20 75 73 65 2c 20 63 6f 70 79 2c 20 6d 6f 64 69   use, copy, modi
01d0: 66 79 2c 20 20 6d 65 72 67 65 2c 20 70 75 62 6c  fy,  merge, publ
01e0: 69 73 68 2c 20 64 69 73 74 72 69 62 75 74 65 2c  ish, distribute,
01f0: 20 73 75 62 6c 69 63 65 6e 73 65 2c 0a 20 2a 20   sublicense,. * 
0200: 61 6e 64 2f 6f 72 20 73 65 6c 6c 20 63 6f 70 69  and/or sell copi
0210: 65 73 20 20 6f 66 20 20 74 68 65 20 53 6f 66 74  es  of  the Soft
0220: 77 61 72 65 2c 20 20 61 6e 64 20 74 6f 20 70 65  ware,  and to pe
0230: 72 6d 69 74 20 20 70 65 72 73 6f 6e 73 20 20 74  rmit  persons  t
0240: 6f 20 77 68 6f 6d 20 74 68 65 0a 20 2a 20 53 6f  o whom the. * So
0250: 66 74 77 61 72 65 20 69 73 20 66 75 72 6e 69 73  ftware is furnis
0260: 68 65 64 20 74 6f 20 64 6f 20 73 6f 2e 0a 20 2a  hed to do so.. *
0270: 0a 20 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d  . * This program
0280: 20 20 69 73 20 20 64 69 73 74 72 69 62 75 74 65    is  distribute
0290: 64 20 20 69 6e 20 20 74 68 65 20 20 68 6f 70 65  d  in  the  hope
02a0: 20 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62    that it will b
02b0: 65 20 75 73 65 66 75 6c 2c 20 20 62 75 74 0a 20  e useful,  but. 
02c0: 2a 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41  * WITHOUT ANY WA
02d0: 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20  RRANTY; without 
02e0: 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  even the implied
02f0: 20 77 61 72 72 61 6e 74 79 20 6f 66 20 4d 45 52   warranty of MER
0300: 43 48 41 4e 54 41 42 49 4c 49 54 59 0a 20 2a 20  CHANTABILITY. * 
0310: 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41  or FITNESS FOR A
0320: 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50   PARTICULAR PURP
0330: 4f 53 45 2e 20 20 55 73 65 20 74 68 69 73 20 70  OSE.  Use this p
0340: 72 6f 67 72 61 6d 20 20 61 74 20 20 79 6f 75 72  rogram  at  your
0350: 20 6f 77 6e 20 72 69 73 6b 21 0a 20 2a 2f 0a 0a   own risk!. */..
0360: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67  #include <string
0370: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 62 79  .h>.#include "by
0380: 74 65 5f 6f 72 64 65 72 2e 68 22 0a 23 69 6e 63  te_order.h".#inc
0390: 6c 75 64 65 20 22 67 6f 73 74 2e 68 22 0a 0a 65  lude "gost.h"..e
03a0: 78 74 65 72 6e 20 75 6e 73 69 67 6e 65 64 20 72  xtern unsigned r
03b0: 68 61 73 68 5f 67 6f 73 74 5f 73 62 6f 78 5b 34  hash_gost_sbox[4
03c0: 5d 5b 32 35 36 5d 3b 0a 65 78 74 65 72 6e 20 75  ][256];.extern u
03d0: 6e 73 69 67 6e 65 64 20 72 68 61 73 68 5f 67 6f  nsigned rhash_go
03e0: 73 74 5f 73 62 6f 78 5f 63 72 79 70 74 70 72 6f  st_sbox_cryptpro
03f0: 5b 34 5d 5b 32 35 36 5d 3b 0a 0a 2f 2a 2a 0a 20  [4][256];../**. 
0400: 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6c 67  * Initialize alg
0410: 6f 72 69 74 68 6d 20 63 6f 6e 74 65 78 74 20 62  orithm context b
0420: 65 66 6f 72 65 20 63 61 6c 63 75 6c 61 69 6e 67  efore calculaing
0430: 20 68 61 73 68 0a 20 2a 20 77 69 74 68 20 74 65   hash. * with te
0440: 73 74 20 70 61 72 61 6d 65 74 65 72 73 20 73 65  st parameters se
0450: 74 2e 0a 20 2a 0a 20 2a 20 40 70 61 72 61 6d 20  t.. *. * @param 
0460: 63 74 78 20 63 6f 6e 74 65 78 74 20 74 6f 20 69  ctx context to i
0470: 6e 69 74 69 61 6c 69 7a 65 0a 20 2a 2f 0a 76 6f  nitialize. */.vo
0480: 69 64 20 72 68 61 73 68 5f 67 6f 73 74 5f 69 6e  id rhash_gost_in
0490: 69 74 28 67 6f 73 74 5f 63 74 78 20 2a 63 74 78  it(gost_ctx *ctx
04a0: 29 0a 7b 0a 09 6d 65 6d 73 65 74 28 63 74 78 2c  ).{..memset(ctx,
04b0: 20 30 2c 20 73 69 7a 65 6f 66 28 67 6f 73 74 5f   0, sizeof(gost_
04c0: 63 74 78 29 29 3b 0a 7d 0a 0a 2f 2a 2a 0a 20 2a  ctx));.}../**. *
04d0: 20 49 6e 69 74 69 61 6c 69 7a 65 20 47 4f 53 54   Initialize GOST
04e0: 20 61 6c 67 6f 72 69 74 68 6d 20 63 6f 6e 74 65   algorithm conte
04f0: 78 74 20 77 69 74 68 20 43 72 79 70 74 6f 50 72  xt with CryptoPr
0500: 6f 20 70 61 72 61 6d 65 74 65 72 20 73 65 74 2e  o parameter set.
0510: 0a 20 2a 0a 20 2a 20 40 70 61 72 61 6d 20 63 74  . *. * @param ct
0520: 78 20 63 6f 6e 74 65 78 74 20 74 6f 20 69 6e 69  x context to ini
0530: 74 69 61 6c 69 7a 65 0a 20 2a 2f 0a 76 6f 69 64  tialize. */.void
0540: 20 72 68 61 73 68 5f 67 6f 73 74 5f 63 72 79 70   rhash_gost_cryp
0550: 74 6f 70 72 6f 5f 69 6e 69 74 28 67 6f 73 74 5f  topro_init(gost_
0560: 63 74 78 20 2a 63 74 78 29 0a 7b 0a 09 72 68 61  ctx *ctx).{..rha
0570: 73 68 5f 67 6f 73 74 5f 69 6e 69 74 28 63 74 78  sh_gost_init(ctx
0580: 29 3b 0a 09 63 74 78 2d 3e 63 72 79 70 74 70 72  );..ctx->cryptpr
0590: 6f 20 3d 20 31 3b 0a 7d 0a 0a 23 69 66 20 64 65  o = 1;.}..#if de
05a0: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
05b0: 26 26 20 64 65 66 69 6e 65 64 28 43 50 55 5f 49  && defined(CPU_I
05c0: 41 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64  A32) && !defined
05d0: 28 5f 5f 63 6c 61 6e 67 5f 5f 29 20 26 26 20 21  (__clang__) && !
05e0: 64 65 66 69 6e 65 64 28 52 48 41 53 48 5f 4e 4f  defined(RHASH_NO
05f0: 5f 41 53 4d 29 0a 23 20 64 65 66 69 6e 65 20 55  _ASM).# define U
0600: 53 45 5f 47 43 43 5f 41 53 4d 5f 49 41 33 32 0a  SE_GCC_ASM_IA32.
0610: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  #elif defined(__
0620: 47 4e 55 43 5f 5f 29 20 26 26 20 64 65 66 69 6e  GNUC__) && defin
0630: 65 64 28 43 50 55 5f 58 36 34 29 20 26 26 20 21  ed(CPU_X64) && !
0640: 64 65 66 69 6e 65 64 28 52 48 41 53 48 5f 4e 4f  defined(RHASH_NO
0650: 5f 41 53 4d 29 0a 23 20 64 65 66 69 6e 65 20 55  _ASM).# define U
0660: 53 45 5f 47 43 43 5f 41 53 4d 5f 58 36 34 0a 23  SE_GCC_ASM_X64.#
0670: 65 6e 64 69 66 0a 0a 2f 2a 0a 20 2a 20 20 41 20  endif../*. *  A 
0680: 6d 61 63 72 6f 20 74 68 61 74 20 70 65 72 66 6f  macro that perfo
0690: 72 6d 73 20 61 20 66 75 6c 6c 20 65 6e 63 72 79  rms a full encry
06a0: 70 74 69 6f 6e 20 72 6f 75 6e 64 20 6f 66 20 47  ption round of G
06b0: 4f 53 54 20 32 38 31 34 37 2d 38 39 2e 0a 20 2a  OST 28147-89.. *
06c0: 20 20 54 65 6d 70 6f 72 61 72 79 20 76 61 72 69    Temporary vari
06d0: 61 62 6c 65 73 20 74 6d 70 20 61 73 73 75 6d 65  ables tmp assume
06e0: 64 20 61 6e 64 20 76 61 72 69 61 62 6c 65 73 20  d and variables 
06f0: 72 20 61 6e 64 20 6c 20 66 6f 72 20 6c 65 66 74  r and l for left
0700: 20 61 6e 64 20 72 69 67 68 74 0a 20 2a 20 20 62   and right. *  b
0710: 6c 6f 63 6b 73 2e 0a 20 2a 2f 0a 23 69 66 6e 64  locks.. */.#ifnd
0720: 65 66 20 55 53 45 5f 47 43 43 5f 41 53 4d 5f 49  ef USE_GCC_ASM_I
0730: 41 33 32 0a 23 20 64 65 66 69 6e 65 20 47 4f 53  A32.# define GOS
0740: 54 5f 45 4e 43 52 59 50 54 5f 52 4f 55 4e 44 28  T_ENCRYPT_ROUND(
0750: 6b 65 79 31 2c 20 6b 65 79 32 2c 20 73 62 6f 78  key1, key2, sbox
0760: 29 20 5c 0a 09 74 6d 70 20 3d 20 28 6b 65 79 31  ) \..tmp = (key1
0770: 29 20 2b 20 72 3b 20 5c 0a 09 6c 20 5e 3d 20 28  ) + r; \..l ^= (
0780: 73 62 6f 78 29 5b 74 6d 70 20 26 20 30 78 66 66  sbox)[tmp & 0xff
0790: 5d 20 5e 20 28 28 73 62 6f 78 29 20 2b 20 32 35  ] ^ ((sbox) + 25
07a0: 36 29 5b 28 74 6d 70 20 3e 3e 20 38 29 20 26 20  6)[(tmp >> 8) & 
07b0: 30 78 66 66 5d 20 5e 20 5c 0a 09 09 28 28 73 62  0xff] ^ \...((sb
07c0: 6f 78 29 20 2b 20 35 31 32 29 5b 28 74 6d 70 20  ox) + 512)[(tmp 
07d0: 3e 3e 20 31 36 29 20 26 20 30 78 66 66 5d 20 5e  >> 16) & 0xff] ^
07e0: 20 28 28 73 62 6f 78 29 20 2b 20 37 36 38 29 5b   ((sbox) + 768)[
07f0: 74 6d 70 20 3e 3e 20 32 34 5d 3b 20 5c 0a 09 74  tmp >> 24]; \..t
0800: 6d 70 20 3d 20 28 6b 65 79 32 29 20 2b 20 6c 3b  mp = (key2) + l;
0810: 20 5c 0a 09 72 20 5e 3d 20 28 73 62 6f 78 29 5b   \..r ^= (sbox)[
0820: 74 6d 70 20 26 20 30 78 66 66 5d 20 5e 20 28 28  tmp & 0xff] ^ ((
0830: 73 62 6f 78 29 20 2b 20 32 35 36 29 5b 28 74 6d  sbox) + 256)[(tm
0840: 70 20 3e 3e 20 38 29 20 26 20 30 78 66 66 5d 20  p >> 8) & 0xff] 
0850: 5e 20 5c 0a 09 09 28 28 73 62 6f 78 29 20 2b 20  ^ \...((sbox) + 
0860: 35 31 32 29 5b 28 74 6d 70 20 3e 3e 20 31 36 29  512)[(tmp >> 16)
0870: 20 26 20 30 78 66 66 5d 20 5e 20 28 28 73 62 6f   & 0xff] ^ ((sbo
0880: 78 29 20 2b 20 37 36 38 29 5b 74 6d 70 20 3e 3e  x) + 768)[tmp >>
0890: 20 32 34 5d 3b 0a 0a 2f 2a 20 65 6e 63 72 79 70   24];../* encryp
08a0: 74 20 61 20 62 6c 6f 63 6b 20 77 69 74 68 20 74  t a block with t
08b0: 68 65 20 67 69 76 65 6e 20 6b 65 79 20 2a 2f 0a  he given key */.
08c0: 23 20 64 65 66 69 6e 65 20 47 4f 53 54 5f 45 4e  # define GOST_EN
08d0: 43 52 59 50 54 28 72 65 73 75 6c 74 2c 20 69 2c  CRYPT(result, i,
08e0: 20 6b 65 79 2c 20 68 61 73 68 2c 20 73 62 6f 78   key, hash, sbox
08f0: 29 20 5c 0a 09 72 20 3d 20 68 61 73 68 5b 69 5d  ) \..r = hash[i]
0900: 2c 20 6c 20 3d 20 68 61 73 68 5b 69 20 2b 20 31  , l = hash[i + 1
0910: 5d 3b 20 5c 0a 09 47 4f 53 54 5f 45 4e 43 52 59  ]; \..GOST_ENCRY
0920: 50 54 5f 52 4f 55 4e 44 28 6b 65 79 5b 30 5d 2c  PT_ROUND(key[0],
0930: 20 6b 65 79 5b 31 5d 2c 20 73 62 6f 78 29 20 5c   key[1], sbox) \
0940: 0a 09 47 4f 53 54 5f 45 4e 43 52 59 50 54 5f 52  ..GOST_ENCRYPT_R
0950: 4f 55 4e 44 28 6b 65 79 5b 32 5d 2c 20 6b 65 79  OUND(key[2], key
0960: 5b 33 5d 2c 20 73 62 6f 78 29 20 5c 0a 09 47 4f  [3], sbox) \..GO
0970: 53 54 5f 45 4e 43 52 59 50 54 5f 52 4f 55 4e 44  ST_ENCRYPT_ROUND
0980: 28 6b 65 79 5b 34 5d 2c 20 6b 65 79 5b 35 5d 2c  (key[4], key[5],
0990: 20 73 62 6f 78 29 20 5c 0a 09 47 4f 53 54 5f 45   sbox) \..GOST_E
09a0: 4e 43 52 59 50 54 5f 52 4f 55 4e 44 28 6b 65 79  NCRYPT_ROUND(key
09b0: 5b 36 5d 2c 20 6b 65 79 5b 37 5d 2c 20 73 62 6f  [6], key[7], sbo
09c0: 78 29 20 5c 0a 09 47 4f 53 54 5f 45 4e 43 52 59  x) \..GOST_ENCRY
09d0: 50 54 5f 52 4f 55 4e 44 28 6b 65 79 5b 30 5d 2c  PT_ROUND(key[0],
09e0: 20 6b 65 79 5b 31 5d 2c 20 73 62 6f 78 29 20 5c   key[1], sbox) \
09f0: 0a 09 47 4f 53 54 5f 45 4e 43 52 59 50 54 5f 52  ..GOST_ENCRYPT_R
0a00: 4f 55 4e 44 28 6b 65 79 5b 32 5d 2c 20 6b 65 79  OUND(key[2], key
0a10: 5b 33 5d 2c 20 73 62 6f 78 29 20 5c 0a 09 47 4f  [3], sbox) \..GO
0a20: 53 54 5f 45 4e 43 52 59 50 54 5f 52 4f 55 4e 44  ST_ENCRYPT_ROUND
0a30: 28 6b 65 79 5b 34 5d 2c 20 6b 65 79 5b 35 5d 2c  (key[4], key[5],
0a40: 20 73 62 6f 78 29 20 5c 0a 09 47 4f 53 54 5f 45   sbox) \..GOST_E
0a50: 4e 43 52 59 50 54 5f 52 4f 55 4e 44 28 6b 65 79  NCRYPT_ROUND(key
0a60: 5b 36 5d 2c 20 6b 65 79 5b 37 5d 2c 20 73 62 6f  [6], key[7], sbo
0a70: 78 29 20 5c 0a 09 47 4f 53 54 5f 45 4e 43 52 59  x) \..GOST_ENCRY
0a80: 50 54 5f 52 4f 55 4e 44 28 6b 65 79 5b 30 5d 2c  PT_ROUND(key[0],
0a90: 20 6b 65 79 5b 31 5d 2c 20 73 62 6f 78 29 20 5c   key[1], sbox) \
0aa0: 0a 09 47 4f 53 54 5f 45 4e 43 52 59 50 54 5f 52  ..GOST_ENCRYPT_R
0ab0: 4f 55 4e 44 28 6b 65 79 5b 32 5d 2c 20 6b 65 79  OUND(key[2], key
0ac0: 5b 33 5d 2c 20 73 62 6f 78 29 20 5c 0a 09 47 4f  [3], sbox) \..GO
0ad0: 53 54 5f 45 4e 43 52 59 50 54 5f 52 4f 55 4e 44  ST_ENCRYPT_ROUND
0ae0: 28 6b 65 79 5b 34 5d 2c 20 6b 65 79 5b 35 5d 2c  (key[4], key[5],
0af0: 20 73 62 6f 78 29 20 5c 0a 09 47 4f 53 54 5f 45   sbox) \..GOST_E
0b00: 4e 43 52 59 50 54 5f 52 4f 55 4e 44 28 6b 65 79  NCRYPT_ROUND(key
0b10: 5b 36 5d 2c 20 6b 65 79 5b 37 5d 2c 20 73 62 6f  [6], key[7], sbo
0b20: 78 29 20 5c 0a 09 47 4f 53 54 5f 45 4e 43 52 59  x) \..GOST_ENCRY
0b30: 50 54 5f 52 4f 55 4e 44 28 6b 65 79 5b 37 5d 2c  PT_ROUND(key[7],
0b40: 20 6b 65 79 5b 36 5d 2c 20 73 62 6f 78 29 20 5c   key[6], sbox) \
0b50: 0a 09 47 4f 53 54 5f 45 4e 43 52 59 50 54 5f 52  ..GOST_ENCRYPT_R
0b60: 4f 55 4e 44 28 6b 65 79 5b 35 5d 2c 20 6b 65 79  OUND(key[5], key
0b70: 5b 34 5d 2c 20 73 62 6f 78 29 20 5c 0a 09 47 4f  [4], sbox) \..GO
0b80: 53 54 5f 45 4e 43 52 59 50 54 5f 52 4f 55 4e 44  ST_ENCRYPT_ROUND
0b90: 28 6b 65 79 5b 33 5d 2c 20 6b 65 79 5b 32 5d 2c  (key[3], key[2],
0ba0: 20 73 62 6f 78 29 20 5c 0a 09 47 4f 53 54 5f 45   sbox) \..GOST_E
0bb0: 4e 43 52 59 50 54 5f 52 4f 55 4e 44 28 6b 65 79  NCRYPT_ROUND(key
0bc0: 5b 31 5d 2c 20 6b 65 79 5b 30 5d 2c 20 73 62 6f  [1], key[0], sbo
0bd0: 78 29 20 5c 0a 09 72 65 73 75 6c 74 5b 69 5d 20  x) \..result[i] 
0be0: 3d 20 6c 2c 20 72 65 73 75 6c 74 5b 69 20 2b 20  = l, result[i + 
0bf0: 31 5d 20 3d 20 72 3b 0a 0a 23 65 6c 73 65 20 2f  1] = r;..#else /
0c00: 2a 20 55 53 45 5f 47 43 43 5f 41 53 4d 5f 49 41  * USE_GCC_ASM_IA
0c10: 33 32 20 2a 2f 0a 0a 2f 2a 20 61 20 66 61 73 74  32 */../* a fast
0c20: 65 72 20 78 38 36 20 76 65 72 73 69 6f 6e 20 6f  er x86 version o
0c30: 66 20 47 4f 53 54 5f 45 4e 43 52 59 50 54 28 29  f GOST_ENCRYPT()
0c40: 20 2a 2f 0a 2f 2a 20 69 74 20 73 75 70 70 6f 73   */./* it suppos
0c50: 65 73 20 65 64 69 3d 72 2c 20 65 73 69 3d 6c 2c  es edi=r, esi=l,
0c60: 20 65 64 78 3d 73 62 6f 78 20 3b 20 2a 2f 0a 23   edx=sbox ; */.#
0c70: 20 64 65 66 69 6e 65 20 45 4e 43 5f 52 4f 55 4e   define ENC_ROUN
0c80: 44 5f 41 53 4d 78 38 36 28 6b 65 79 2c 20 72 65  D_ASMx86(key, re
0c90: 67 31 2c 20 72 65 67 32 29 20 5c 0a 09 22 6d 6f  g1, reg2) \.."mo
0ca0: 76 6c 20 25 22 20 23 6b 65 79 20 22 2c 20 25 25  vl %" #key ", %%
0cb0: 65 61 78 5c 6e 5c 74 22 20 5c 0a 09 22 61 64 64  eax\n\t" \.."add
0cc0: 6c 20 25 25 22 20 23 72 65 67 31 20 22 2c 20 25  l %%" #reg1 ", %
0cd0: 25 65 61 78 5c 6e 5c 74 22 20 5c 0a 09 22 6d 6f  %eax\n\t" \.."mo
0ce0: 76 7a 78 20 25 25 61 6c 2c 20 25 25 65 62 78 5c  vzx %%al, %%ebx\
0cf0: 6e 5c 74 22 20 5c 0a 09 22 6d 6f 76 7a 78 20 25  n\t" \.."movzx %
0d00: 25 61 68 2c 20 25 25 65 63 78 5c 6e 5c 74 22 20  %ah, %%ecx\n\t" 
0d10: 5c 0a 09 22 78 6f 72 6c 20 28 25 25 65 64 78 2c  \.."xorl (%%edx,
0d20: 20 25 25 65 62 78 2c 20 34 29 2c 20 25 25 22 20   %%ebx, 4), %%" 
0d30: 23 72 65 67 32 20 22 5c 6e 5c 74 22 20 5c 0a 09  #reg2 "\n\t" \..
0d40: 22 78 6f 72 6c 20 31 30 32 34 28 25 25 65 64 78  "xorl 1024(%%edx
0d50: 2c 20 25 25 65 63 78 2c 20 34 29 2c 20 25 25 22  , %%ecx, 4), %%"
0d60: 20 23 72 65 67 32 20 22 5c 6e 5c 74 22 20 5c 0a   #reg2 "\n\t" \.
0d70: 09 22 73 68 72 6c 20 24 31 36 2c 20 25 25 65 61  ."shrl $16, %%ea
0d80: 78 5c 6e 5c 74 22 20 5c 0a 09 22 6d 6f 76 7a 78  x\n\t" \.."movzx
0d90: 20 25 25 61 6c 2c 20 25 25 65 62 78 5c 6e 5c 74   %%al, %%ebx\n\t
0da0: 22 20 5c 0a 09 22 73 68 72 6c 20 24 38 2c 20 25  " \.."shrl $8, %
0db0: 25 65 61 78 5c 6e 5c 74 22 20 5c 0a 09 22 78 6f  %eax\n\t" \.."xo
0dc0: 72 6c 20 32 30 34 38 28 25 25 65 64 78 2c 20 25  rl 2048(%%edx, %
0dd0: 25 65 62 78 2c 20 34 29 2c 20 25 25 22 20 23 72  %ebx, 4), %%" #r
0de0: 65 67 32 20 22 5c 6e 5c 74 22 20 5c 0a 09 22 78  eg2 "\n\t" \.."x
0df0: 6f 72 6c 20 33 30 37 32 28 25 25 65 64 78 2c 20  orl 3072(%%edx, 
0e00: 25 25 65 61 78 2c 20 34 29 2c 20 25 25 22 20 23  %%eax, 4), %%" #
0e10: 72 65 67 32 20 22 5c 6e 5c 74 22 0a 0a 23 20 64  reg2 "\n\t"..# d
0e20: 65 66 69 6e 65 20 45 4e 43 5f 41 53 4d 28 6b 65  efine ENC_ASM(ke
0e30: 79 31 2c 20 6b 65 79 32 29 20 45 4e 43 5f 52 4f  y1, key2) ENC_RO
0e40: 55 4e 44 5f 41 53 4d 78 38 36 28 6b 65 79 31 2c  UND_ASMx86(key1,
0e50: 20 65 64 69 2c 20 65 73 69 29 20 45 4e 43 5f 52   edi, esi) ENC_R
0e60: 4f 55 4e 44 5f 41 53 4d 78 38 36 28 6b 65 79 32  OUND_ASMx86(key2
0e70: 2c 20 65 73 69 2c 20 65 64 69 29 0a 23 20 64 65  , esi, edi).# de
0e80: 66 69 6e 65 20 47 4f 53 54 5f 45 4e 43 52 59 50  fine GOST_ENCRYP
0e90: 54 5f 47 43 43 5f 41 53 4d 5f 58 38 36 28 29 20  T_GCC_ASM_X86() 
0ea0: 5c 0a 09 45 4e 43 5f 41 53 4d 28 20 35 2c 20 20  \..ENC_ASM( 5,  
0eb0: 36 29 20 45 4e 43 5f 41 53 4d 28 20 37 2c 20 20  6) ENC_ASM( 7,  
0ec0: 38 29 20 45 4e 43 5f 41 53 4d 28 20 39 2c 20 31  8) ENC_ASM( 9, 1
0ed0: 30 29 20 45 4e 43 5f 41 53 4d 28 31 31 2c 20 31  0) ENC_ASM(11, 1
0ee0: 32 29 20 5c 0a 09 45 4e 43 5f 41 53 4d 28 20 35  2) \..ENC_ASM( 5
0ef0: 2c 20 20 36 29 20 45 4e 43 5f 41 53 4d 28 20 37  ,  6) ENC_ASM( 7
0f00: 2c 20 20 38 29 20 45 4e 43 5f 41 53 4d 28 20 39  ,  8) ENC_ASM( 9
0f10: 2c 20 31 30 29 20 45 4e 43 5f 41 53 4d 28 31 31  , 10) ENC_ASM(11
0f20: 2c 20 31 32 29 20 5c 0a 09 45 4e 43 5f 41 53 4d  , 12) \..ENC_ASM
0f30: 28 20 35 2c 20 20 36 29 20 45 4e 43 5f 41 53 4d  ( 5,  6) ENC_ASM
0f40: 28 20 37 2c 20 20 38 29 20 45 4e 43 5f 41 53 4d  ( 7,  8) ENC_ASM
0f50: 28 20 39 2c 20 31 30 29 20 45 4e 43 5f 41 53 4d  ( 9, 10) ENC_ASM
0f60: 28 31 31 2c 20 31 32 29 20 5c 0a 09 45 4e 43 5f  (11, 12) \..ENC_
0f70: 41 53 4d 28 31 32 2c 20 31 31 29 20 45 4e 43 5f  ASM(12, 11) ENC_
0f80: 41 53 4d 28 31 30 2c 20 20 39 29 20 45 4e 43 5f  ASM(10,  9) ENC_
0f90: 41 53 4d 28 20 38 2c 20 20 37 29 20 45 4e 43 5f  ASM( 8,  7) ENC_
0fa0: 41 53 4d 28 20 36 2c 20 20 35 29 0a 23 65 6e 64  ASM( 6,  5).#end
0fb0: 69 66 20 2f 2a 20 55 53 45 5f 47 43 43 5f 41 53  if /* USE_GCC_AS
0fc0: 4d 5f 49 41 33 32 20 2a 2f 0a 0a 2f 2a 2a 0a 20  M_IA32 */../**. 
0fd0: 2a 20 54 68 65 20 63 6f 72 65 20 74 72 61 6e 73  * The core trans
0fe0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 50 72 6f 63 65  formation. Proce
0ff0: 73 73 20 61 20 35 31 32 2d 62 69 74 20 62 6c 6f  ss a 512-bit blo
1000: 63 6b 2e 0a 20 2a 0a 20 2a 20 40 70 61 72 61 6d  ck.. *. * @param
1010: 20 68 61 73 68 20 69 6e 74 65 72 6d 65 64 69 61   hash intermedia
1020: 74 65 20 6d 65 73 73 61 67 65 20 68 61 73 68 0a  te message hash.
1030: 20 2a 20 40 70 61 72 61 6d 20 62 6c 6f 63 6b 20   * @param block 
1040: 74 68 65 20 6d 65 73 73 61 67 65 20 62 6c 6f 63  the message bloc
1050: 6b 20 74 6f 20 70 72 6f 63 65 73 73 0a 20 2a 2f  k to process. */
1060: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 68 61  .static void rha
1070: 73 68 5f 67 6f 73 74 5f 62 6c 6f 63 6b 5f 63 6f  sh_gost_block_co
1080: 6d 70 72 65 73 73 28 67 6f 73 74 5f 63 74 78 20  mpress(gost_ctx 
1090: 2a 63 74 78 2c 20 63 6f 6e 73 74 20 75 6e 73 69  *ctx, const unsi
10a0: 67 6e 65 64 2a 20 62 6c 6f 63 6b 29 0a 7b 0a 09  gned* block).{..
10b0: 75 6e 73 69 67 6e 65 64 20 69 3b 0a 09 75 6e 73  unsigned i;..uns
10c0: 69 67 6e 65 64 20 6b 65 79 5b 38 5d 2c 20 75 5b  igned key[8], u[
10d0: 38 5d 2c 20 76 5b 38 5d 2c 20 77 5b 38 5d 2c 20  8], v[8], w[8], 
10e0: 73 5b 38 5d 3b 0a 09 75 6e 73 69 67 6e 65 64 20  s[8];..unsigned 
10f0: 2a 73 62 6f 78 20 3d 20 28 63 74 78 2d 3e 63 72  *sbox = (ctx->cr
1100: 79 70 74 70 72 6f 20 3f 20 28 75 6e 73 69 67 6e  yptpro ? (unsign
1110: 65 64 2a 29 72 68 61 73 68 5f 67 6f 73 74 5f 73  ed*)rhash_gost_s
1120: 62 6f 78 5f 63 72 79 70 74 70 72 6f 20 3a 20 28  box_cryptpro : (
1130: 75 6e 73 69 67 6e 65 64 2a 29 72 68 61 73 68 5f  unsigned*)rhash_
1140: 67 6f 73 74 5f 73 62 6f 78 29 3b 0a 0a 09 2f 2a  gost_sbox);.../*
1150: 20 75 20 3a 3d 20 68 61 73 68 2c 20 76 20 3a 3d   u := hash, v :=
1160: 20 3c 32 35 36 2d 62 69 74 20 6d 65 73 73 61 67   <256-bit messag
1170: 65 20 62 6c 6f 63 6b 3e 20 2a 2f 0a 09 6d 65 6d  e block> */..mem
1180: 63 70 79 28 75 2c 20 63 74 78 2d 3e 68 61 73 68  cpy(u, ctx->hash
1190: 2c 20 73 69 7a 65 6f 66 28 75 29 29 3b 0a 09 6d  , sizeof(u));..m
11a0: 65 6d 63 70 79 28 76 2c 20 62 6c 6f 63 6b 2c 20  emcpy(v, block, 
11b0: 73 69 7a 65 6f 66 28 76 29 29 3b 0a 0a 09 2f 2a  sizeof(v));.../*
11c0: 20 77 20 3a 3d 20 75 20 78 6f 72 20 76 20 2a 2f   w := u xor v */
11d0: 0a 09 77 5b 30 5d 20 3d 20 75 5b 30 5d 20 5e 20  ..w[0] = u[0] ^ 
11e0: 76 5b 30 5d 2c 20 77 5b 31 5d 20 3d 20 75 5b 31  v[0], w[1] = u[1
11f0: 5d 20 5e 20 76 5b 31 5d 3b 0a 09 77 5b 32 5d 20  ] ^ v[1];..w[2] 
1200: 3d 20 75 5b 32 5d 20 5e 20 76 5b 32 5d 2c 20 77  = u[2] ^ v[2], w
1210: 5b 33 5d 20 3d 20 75 5b 33 5d 20 5e 20 76 5b 33  [3] = u[3] ^ v[3
1220: 5d 3b 0a 09 77 5b 34 5d 20 3d 20 75 5b 34 5d 20  ];..w[4] = u[4] 
1230: 5e 20 76 5b 34 5d 2c 20 77 5b 35 5d 20 3d 20 75  ^ v[4], w[5] = u
1240: 5b 35 5d 20 5e 20 76 5b 35 5d 3b 0a 09 77 5b 36  [5] ^ v[5];..w[6
1250: 5d 20 3d 20 75 5b 36 5d 20 5e 20 76 5b 36 5d 2c  ] = u[6] ^ v[6],
1260: 20 77 5b 37 5d 20 3d 20 75 5b 37 5d 20 5e 20 76   w[7] = u[7] ^ v
1270: 5b 37 5d 3b 0a 0a 09 2f 2a 20 63 61 6c 63 75 6c  [7];.../* calcul
1280: 61 74 65 20 6b 65 79 73 2c 20 65 6e 63 72 79 70  ate keys, encryp
1290: 74 20 68 61 73 68 20 61 6e 64 20 73 74 6f 72 65  t hash and store
12a0: 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20 73   result to the s
12b0: 5b 5d 20 61 72 72 61 79 20 2a 2f 0a 09 66 6f 72  [] array */..for
12c0: 20 28 69 20 3d 20 30 3b 3b 20 69 20 2b 3d 20 32   (i = 0;; i += 2
12d0: 29 20 7b 0a 09 09 2f 2a 20 6b 65 79 20 67 65 6e  ) {.../* key gen
12e0: 65 72 61 74 69 6f 6e 3a 20 6b 65 79 5f 69 20 3a  eration: key_i :
12f0: 3d 20 50 28 77 29 20 2a 2f 0a 09 09 6b 65 79 5b  = P(w) */...key[
1300: 30 5d 20 3d 20 28 77 5b 30 5d 20 26 20 30 78 30  0] = (w[0] & 0x0
1310: 30 30 30 30 30 66 66 29 20 7c 20 28 28 77 5b 32  00000ff) | ((w[2
1320: 5d 20 26 20 30 78 30 30 30 30 30 30 66 66 29 20  ] & 0x000000ff) 
1330: 3c 3c 20 38 29 20 7c 20 28 28 77 5b 34 5d 20 26  << 8) | ((w[4] &
1340: 20 30 78 30 30 30 30 30 30 66 66 29 20 3c 3c 20   0x000000ff) << 
1350: 31 36 29 20 7c 20 28 28 77 5b 36 5d 20 26 20 30  16) | ((w[6] & 0
1360: 78 30 30 30 30 30 30 66 66 29 20 3c 3c 20 32 34  x000000ff) << 24
1370: 29 3b 0a 09 09 6b 65 79 5b 31 5d 20 3d 20 28 28  );...key[1] = ((
1380: 77 5b 30 5d 20 26 20 30 78 30 30 30 30 66 66 30  w[0] & 0x0000ff0
1390: 30 29 20 3e 3e 20 38 29 20 7c 20 28 77 5b 32 5d  0) >> 8) | (w[2]
13a0: 20 26 20 30 78 30 30 30 30 66 66 30 30 29 20 7c   & 0x0000ff00) |
13b0: 20 28 28 77 5b 34 5d 20 26 20 30 78 30 30 30 30   ((w[4] & 0x0000
13c0: 66 66 30 30 29 20 3c 3c 20 38 29 20 20 7c 20 28  ff00) << 8)  | (
13d0: 28 77 5b 36 5d 20 26 20 30 78 30 30 30 30 66 66  (w[6] & 0x0000ff
13e0: 30 30 29 20 3c 3c 20 31 36 29 3b 0a 09 09 6b 65  00) << 16);...ke
13f0: 79 5b 32 5d 20 3d 20 28 28 77 5b 30 5d 20 26 20  y[2] = ((w[0] & 
1400: 30 78 30 30 66 66 30 30 30 30 29 20 3e 3e 20 31  0x00ff0000) >> 1
1410: 36 29 20 7c 20 28 28 77 5b 32 5d 20 26 20 30 78  6) | ((w[2] & 0x
1420: 30 30 66 66 30 30 30 30 29 20 3e 3e 20 38 29 20  00ff0000) >> 8) 
1430: 7c 20 28 77 5b 34 5d 20 26 20 30 78 30 30 66 66  | (w[4] & 0x00ff
1440: 30 30 30 30 29 20 7c 20 28 28 77 5b 36 5d 20 26  0000) | ((w[6] &
1450: 20 30 78 30 30 66 66 30 30 30 30 29 20 3c 3c 20   0x00ff0000) << 
1460: 38 29 3b 0a 09 09 6b 65 79 5b 33 5d 20 3d 20 28  8);...key[3] = (
1470: 28 77 5b 30 5d 20 26 20 30 78 66 66 30 30 30 30  (w[0] & 0xff0000
1480: 30 30 29 20 3e 3e 20 32 34 29 20 7c 20 28 28 77  00) >> 24) | ((w
1490: 5b 32 5d 20 26 20 30 78 66 66 30 30 30 30 30 30  [2] & 0xff000000
14a0: 29 20 3e 3e 20 31 36 29 20 7c 20 28 28 77 5b 34  ) >> 16) | ((w[4
14b0: 5d 20 26 20 30 78 66 66 30 30 30 30 30 30 29 20  ] & 0xff000000) 
14c0: 3e 3e 20 38 29 20 7c 20 28 77 5b 36 5d 20 26 20  >> 8) | (w[6] & 
14d0: 30 78 66 66 30 30 30 30 30 30 29 3b 0a 09 09 6b  0xff000000);...k
14e0: 65 79 5b 34 5d 20 3d 20 28 77 5b 31 5d 20 26 20  ey[4] = (w[1] & 
14f0: 30 78 30 30 30 30 30 30 66 66 29 20 7c 20 28 28  0x000000ff) | ((
1500: 77 5b 33 5d 20 26 20 30 78 30 30 30 30 30 30 66  w[3] & 0x000000f
1510: 66 29 20 3c 3c 20 38 29 20 7c 20 28 28 77 5b 35  f) << 8) | ((w[5
1520: 5d 20 26 20 30 78 30 30 30 30 30 30 66 66 29 20  ] & 0x000000ff) 
1530: 3c 3c 20 31 36 29 20 7c 20 28 28 77 5b 37 5d 20  << 16) | ((w[7] 
1540: 26 20 30 78 30 30 30 30 30 30 66 66 29 20 3c 3c  & 0x000000ff) <<
1550: 20 32 34 29 3b 0a 09 09 6b 65 79 5b 35 5d 20 3d   24);...key[5] =
1560: 20 28 28 77 5b 31 5d 20 26 20 30 78 30 30 30 30   ((w[1] & 0x0000
1570: 66 66 30 30 29 20 3e 3e 20 38 29 20 7c 20 28 77  ff00) >> 8) | (w
1580: 5b 33 5d 20 26 20 30 78 30 30 30 30 66 66 30 30  [3] & 0x0000ff00
1590: 29 20 7c 20 28 28 77 5b 35 5d 20 26 20 30 78 30  ) | ((w[5] & 0x0
15a0: 30 30 30 66 66 30 30 29 20 3c 3c 20 38 29 20 20  000ff00) << 8)  
15b0: 7c 20 28 28 77 5b 37 5d 20 26 20 30 78 30 30 30  | ((w[7] & 0x000
15c0: 30 66 66 30 30 29 20 3c 3c 20 31 36 29 3b 0a 09  0ff00) << 16);..
15d0: 09 6b 65 79 5b 36 5d 20 3d 20 28 28 77 5b 31 5d  .key[6] = ((w[1]
15e0: 20 26 20 30 78 30 30 66 66 30 30 30 30 29 20 3e   & 0x00ff0000) >
15f0: 3e 20 31 36 29 20 7c 20 28 28 77 5b 33 5d 20 26  > 16) | ((w[3] &
1600: 20 30 78 30 30 66 66 30 30 30 30 29 20 3e 3e 20   0x00ff0000) >> 
1610: 38 29 20 7c 20 28 77 5b 35 5d 20 26 20 30 78 30  8) | (w[5] & 0x0
1620: 30 66 66 30 30 30 30 29 20 7c 20 28 28 77 5b 37  0ff0000) | ((w[7
1630: 5d 20 26 20 30 78 30 30 66 66 30 30 30 30 29 20  ] & 0x00ff0000) 
1640: 3c 3c 20 38 29 3b 0a 09 09 6b 65 79 5b 37 5d 20  << 8);...key[7] 
1650: 3d 20 28 28 77 5b 31 5d 20 26 20 30 78 66 66 30  = ((w[1] & 0xff0
1660: 30 30 30 30 30 29 20 3e 3e 20 32 34 29 20 7c 20  00000) >> 24) | 
1670: 28 28 77 5b 33 5d 20 26 20 30 78 66 66 30 30 30  ((w[3] & 0xff000
1680: 30 30 30 29 20 3e 3e 20 31 36 29 20 7c 20 28 28  000) >> 16) | ((
1690: 77 5b 35 5d 20 26 20 30 78 66 66 30 30 30 30 30  w[5] & 0xff00000
16a0: 30 29 20 3e 3e 20 38 29 20 7c 20 28 77 5b 37 5d  0) >> 8) | (w[7]
16b0: 20 26 20 30 78 66 66 30 30 30 30 30 30 29 3b 0a   & 0xff000000);.
16c0: 0a 09 09 2f 2a 20 65 6e 63 72 79 70 74 69 6f 6e  .../* encryption
16d0: 3a 20 73 5f 69 20 3a 3d 20 45 5f 7b 6b 65 79 5f  : s_i := E_{key_
16e0: 69 7d 20 28 68 5f 69 29 20 2a 2f 0a 23 69 66 6e  i} (h_i) */.#ifn
16f0: 64 65 66 20 55 53 45 5f 47 43 43 5f 41 53 4d 5f  def USE_GCC_ASM_
1700: 49 41 33 32 0a 09 09 7b 0a 09 09 09 75 6e 73 69  IA32...{....unsi
1710: 67 6e 65 64 20 6c 2c 20 72 2c 20 74 6d 70 3b 0a  gned l, r, tmp;.
1720: 09 09 09 47 4f 53 54 5f 45 4e 43 52 59 50 54 28  ...GOST_ENCRYPT(
1730: 73 2c 20 69 2c 20 6b 65 79 2c 20 63 74 78 2d 3e  s, i, key, ctx->
1740: 68 61 73 68 2c 20 73 62 6f 78 29 3b 0a 09 09 7d  hash, sbox);...}
1750: 0a 23 65 6c 73 65 20 2f 2a 20 55 53 45 5f 47 43  .#else /* USE_GC
1760: 43 5f 41 53 4d 5f 49 41 33 32 20 2a 2f 0a 09 09  C_ASM_IA32 */...
1770: 5f 5f 61 73 6d 20 5f 5f 76 6f 6c 61 74 69 6c 65  __asm __volatile
1780: 28 0a 09 09 09 22 6d 6f 76 6c 20 25 25 65 62 78  (...."movl %%ebx
1790: 2c 20 25 31 33 5c 6e 5c 74 22 0a 09 09 09 47 4f  , %13\n\t"....GO
17a0: 53 54 5f 45 4e 43 52 59 50 54 5f 47 43 43 5f 41  ST_ENCRYPT_GCC_A
17b0: 53 4d 5f 58 38 36 28 29 20 2f 2a 20 6f 70 74 69  SM_X86() /* opti
17c0: 6d 69 7a 65 64 20 66 6f 72 20 78 38 36 20 49 6e  mized for x86 In
17d0: 74 65 6c 20 43 6f 72 65 20 32 20 2a 2f 0a 09 09  tel Core 2 */...
17e0: 09 22 6d 6f 76 6c 20 25 31 33 2c 20 25 25 65 62  ."movl %13, %%eb
17f0: 78 5c 6e 5c 74 22 0a 09 09 09 3a 20 22 3d 53 22  x\n\t"....: "=S"
1800: 20 28 73 5b 69 5d 29 2c 20 22 3d 44 22 20 28 73   (s[i]), "=D" (s
1810: 5b 69 20 2b 20 31 5d 29 20 2f 2a 20 30 2c 31 3a  [i + 1]) /* 0,1:
1820: 20 73 5b 69 5d 3d 65 73 69 2c 20 73 5b 69 20 2b   s[i]=esi, s[i +
1830: 20 31 5d 3d 65 64 69 20 2a 2f 0a 09 09 09 3a 20   1]=edi */....: 
1840: 22 64 22 20 28 73 62 6f 78 29 2c 20 22 44 22 20  "d" (sbox), "D" 
1850: 28 63 74 78 2d 3e 68 61 73 68 5b 69 5d 29 2c 20  (ctx->hash[i]), 
1860: 22 53 22 20 28 63 74 78 2d 3e 68 61 73 68 5b 69  "S" (ctx->hash[i
1870: 20 2b 20 31 5d 29 2c 20 2f 2a 20 32 2c 33 2c 34   + 1]), /* 2,3,4
1880: 3a 20 65 64 78 3d 73 62 6f 78 2c 65 64 69 3d 72  : edx=sbox,edi=r
1890: 2c 65 73 69 3d 6c 20 2a 2f 0a 09 09 09 22 6d 22  ,esi=l */...."m"
18a0: 20 28 6b 65 79 5b 30 5d 29 2c 20 22 6d 22 20 28   (key[0]), "m" (
18b0: 6b 65 79 5b 31 5d 29 2c 20 22 6d 22 20 28 6b 65  key[1]), "m" (ke
18c0: 79 5b 32 5d 29 2c 20 22 6d 22 20 28 6b 65 79 5b  y[2]), "m" (key[
18d0: 33 5d 29 2c 20 2f 2a 20 35 2c 20 36 2c 20 37 2c  3]), /* 5, 6, 7,
18e0: 20 38 20 2a 2f 0a 09 09 09 22 6d 22 20 28 6b 65   8 */...."m" (ke
18f0: 79 5b 34 5d 29 2c 20 22 6d 22 20 28 6b 65 79 5b  y[4]), "m" (key[
1900: 35 5d 29 2c 20 22 6d 22 20 28 6b 65 79 5b 36 5d  5]), "m" (key[6]
1910: 29 2c 20 22 6d 22 20 28 6b 65 79 5b 37 5d 29 2c  ), "m" (key[7]),
1920: 20 2f 2a 20 39 2c 31 30 2c 31 31 2c 31 32 20 2a   /* 9,10,11,12 *
1930: 2f 0a 09 09 09 22 6d 22 20 28 77 5b 30 5d 29 20  /...."m" (w[0]) 
1940: 20 2f 2a 20 73 74 6f 72 65 20 45 42 58 20 69 6e   /* store EBX in
1950: 20 77 5b 30 5d 2c 20 63 61 75 73 65 20 69 74 27   w[0], cause it'
1960: 73 20 75 73 65 64 20 66 6f 72 20 50 49 43 20 6f  s used for PIC o
1970: 6e 20 2a 42 53 44 2e 20 2a 2f 0a 09 09 09 2f 2a  n *BSD. */..../*
1980: 20 57 65 20 61 76 6f 69 64 20 70 75 73 68 2f 70   We avoid push/p
1990: 6f 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  op instructions 
19a0: 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  incompatible wit
19b0: 68 20 67 63 63 20 2d 66 6f 6d 69 74 2d 66 72 61  h gcc -fomit-fra
19c0: 6d 65 2d 70 6f 69 6e 74 65 72 20 2a 2f 0a 09 09  me-pointer */...
19d0: 09 3a 20 22 63 63 22 2c 20 22 65 61 78 22 2c 20  .: "cc", "eax", 
19e0: 22 65 63 78 22 29 3b 0a 23 65 6e 64 69 66 20 2f  "ecx");.#endif /
19f0: 2a 20 55 53 45 5f 47 43 43 5f 41 53 4d 5f 49 41  * USE_GCC_ASM_IA
1a00: 33 32 20 2a 2f 0a 0a 09 09 69 66 20 28 69 20 3d  32 */....if (i =
1a10: 3d 20 30 29 20 7b 0a 09 09 09 2f 2a 20 77 3a 3d  = 0) {..../* w:=
1a20: 20 41 28 75 29 20 5e 20 41 5e 32 28 76 29 20 2a   A(u) ^ A^2(v) *
1a30: 2f 0a 09 09 09 77 5b 30 5d 20 3d 20 75 5b 32 5d  /....w[0] = u[2]
1a40: 20 5e 20 76 5b 34 5d 2c 20 77 5b 31 5d 20 3d 20   ^ v[4], w[1] = 
1a50: 75 5b 33 5d 20 5e 20 76 5b 35 5d 3b 0a 09 09 09  u[3] ^ v[5];....
1a60: 77 5b 32 5d 20 3d 20 75 5b 34 5d 20 5e 20 76 5b  w[2] = u[4] ^ v[
1a70: 36 5d 2c 20 77 5b 33 5d 20 3d 20 75 5b 35 5d 20  6], w[3] = u[5] 
1a80: 5e 20 76 5b 37 5d 3b 0a 09 09 09 77 5b 34 5d 20  ^ v[7];....w[4] 
1a90: 3d 20 75 5b 36 5d 20 5e 20 28 76 5b 30 5d 20 5e  = u[6] ^ (v[0] ^
1aa0: 3d 20 76 5b 32 5d 29 3b 0a 09 09 09 77 5b 35 5d  = v[2]);....w[5]
1ab0: 20 3d 20 75 5b 37 5d 20 5e 20 28 76 5b 31 5d 20   = u[7] ^ (v[1] 
1ac0: 5e 3d 20 76 5b 33 5d 29 3b 0a 09 09 09 77 5b 36  ^= v[3]);....w[6
1ad0: 5d 20 3d 20 28 75 5b 30 5d 20 5e 3d 20 75 5b 32  ] = (u[0] ^= u[2
1ae0: 5d 29 20 5e 20 28 76 5b 32 5d 20 5e 3d 20 76 5b  ]) ^ (v[2] ^= v[
1af0: 34 5d 29 3b 0a 09 09 09 77 5b 37 5d 20 3d 20 28  4]);....w[7] = (
1b00: 75 5b 31 5d 20 5e 3d 20 75 5b 33 5d 29 20 5e 20  u[1] ^= u[3]) ^ 
1b10: 28 76 5b 33 5d 20 5e 3d 20 76 5b 35 5d 29 3b 0a  (v[3] ^= v[5]);.
1b20: 09 09 7d 20 65 6c 73 65 20 69 66 20 28 28 69 20  ..} else if ((i 
1b30: 26 20 32 29 20 21 3d 20 30 29 20 7b 0a 09 09 09  & 2) != 0) {....
1b40: 69 66 20 28 69 20 3d 3d 20 36 29 20 62 72 65 61  if (i == 6) brea
1b50: 6b 3b 0a 0a 09 09 09 2f 2a 20 77 20 3a 3d 20 41  k;...../* w := A
1b60: 5e 32 28 75 29 20 78 6f 72 20 41 5e 34 28 76 29  ^2(u) xor A^4(v)
1b70: 20 78 6f 72 20 43 5f 33 3b 20 75 20 3a 3d 20 41   xor C_3; u := A
1b80: 28 75 29 20 78 6f 72 20 43 5f 33 20 2a 2f 0a 09  (u) xor C_3 */..
1b90: 09 09 2f 2a 20 43 5f 33 3d 30 78 66 66 30 30 66  ../* C_3=0xff00f
1ba0: 66 66 66 30 30 30 30 30 30 66 66 66 66 30 30 30  fff000000ffff000
1bb0: 30 66 66 30 30 66 66 66 66 30 30 30 30 66 66 30  0ff00ffff0000ff0
1bc0: 30 66 66 30 30 66 66 30 30 66 66 66 66 30 30 66  0ff00ff00ffff00f
1bd0: 66 30 30 66 66 30 30 66 66 30 30 20 2a 2f 0a 09  f00ff00ff00 */..
1be0: 09 09 75 5b 32 5d 20 5e 3d 20 75 5b 34 5d 20 5e  ..u[2] ^= u[4] ^
1bf0: 20 30 78 30 30 30 30 30 30 66 66 3b 0a 09 09 09   0x000000ff;....
1c00: 75 5b 33 5d 20 5e 3d 20 75 5b 35 5d 20 5e 20 30  u[3] ^= u[5] ^ 0
1c10: 78 66 66 30 30 66 66 66 66 3b 0a 09 09 09 75 5b  xff00ffff;....u[
1c20: 34 5d 20 5e 3d 20 30 78 66 66 30 30 66 66 30 30  4] ^= 0xff00ff00
1c30: 3b 0a 09 09 09 75 5b 35 5d 20 5e 3d 20 30 78 66  ;....u[5] ^= 0xf
1c40: 66 30 30 66 66 30 30 3b 0a 09 09 09 75 5b 36 5d  f00ff00;....u[6]
1c50: 20 5e 3d 20 30 78 30 30 66 66 30 30 66 66 3b 0a   ^= 0x00ff00ff;.
1c60: 09 09 09 75 5b 37 5d 20 5e 3d 20 30 78 30 30 66  ...u[7] ^= 0x00f
1c70: 66 30 30 66 66 3b 0a 09 09 09 75 5b 30 5d 20 5e  f00ff;....u[0] ^
1c80: 3d 20 30 78 30 30 66 66 66 66 30 30 3b 0a 09 09  = 0x00ffff00;...
1c90: 09 75 5b 31 5d 20 5e 3d 20 30 78 66 66 30 30 30  .u[1] ^= 0xff000
1ca0: 30 66 66 3b 0a 0a 09 09 09 77 5b 30 5d 20 3d 20  0ff;.....w[0] = 
1cb0: 75 5b 34 5d 20 5e 20 76 5b 30 5d 3b 0a 09 09 09  u[4] ^ v[0];....
1cc0: 77 5b 32 5d 20 3d 20 75 5b 36 5d 20 5e 20 76 5b  w[2] = u[6] ^ v[
1cd0: 32 5d 3b 0a 09 09 09 77 5b 34 5d 20 3d 20 75 5b  2];....w[4] = u[
1ce0: 30 5d 20 5e 20 28 76 5b 34 5d 20 5e 3d 20 76 5b  0] ^ (v[4] ^= v[
1cf0: 36 5d 29 3b 0a 09 09 09 77 5b 36 5d 20 3d 20 75  6]);....w[6] = u
1d00: 5b 32 5d 20 5e 20 28 76 5b 36 5d 20 5e 3d 20 76  [2] ^ (v[6] ^= v
1d10: 5b 30 5d 29 3b 0a 09 09 09 77 5b 31 5d 20 3d 20  [0]);....w[1] = 
1d20: 75 5b 35 5d 20 5e 20 76 5b 31 5d 3b 0a 09 09 09  u[5] ^ v[1];....
1d30: 77 5b 33 5d 20 3d 20 75 5b 37 5d 20 5e 20 76 5b  w[3] = u[7] ^ v[
1d40: 33 5d 3b 0a 09 09 09 77 5b 35 5d 20 3d 20 75 5b  3];....w[5] = u[
1d50: 31 5d 20 5e 20 28 76 5b 35 5d 20 5e 3d 20 76 5b  1] ^ (v[5] ^= v[
1d60: 37 5d 29 3b 0a 09 09 09 77 5b 37 5d 20 3d 20 75  7]);....w[7] = u
1d70: 5b 33 5d 20 5e 20 28 76 5b 37 5d 20 5e 3d 20 76  [3] ^ (v[7] ^= v
1d80: 5b 31 5d 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b  [1]);...} else {
1d90: 0a 09 09 09 2f 2a 20 69 3d 3d 34 20 68 65 72 65  ..../* i==4 here
1da0: 20 2a 2f 0a 09 09 09 2f 2a 20 77 3a 3d 20 41 28   */..../* w:= A(
1db0: 20 41 5e 32 28 75 29 20 78 6f 72 20 43 5f 33 20   A^2(u) xor C_3 
1dc0: 29 20 78 6f 72 20 41 5e 36 28 76 29 20 2a 2f 0a  ) xor A^6(v) */.
1dd0: 09 09 09 77 5b 30 5d 20 3d 20 75 5b 36 5d 20 5e  ...w[0] = u[6] ^
1de0: 20 76 5b 34 5d 2c 20 77 5b 31 5d 20 3d 20 75 5b   v[4], w[1] = u[
1df0: 37 5d 20 5e 20 76 5b 35 5d 3b 0a 09 09 09 77 5b  7] ^ v[5];....w[
1e00: 32 5d 20 3d 20 75 5b 30 5d 20 5e 20 76 5b 36 5d  2] = u[0] ^ v[6]
1e10: 2c 20 77 5b 33 5d 20 3d 20 75 5b 31 5d 20 5e 20  , w[3] = u[1] ^ 
1e20: 76 5b 37 5d 3b 0a 09 09 09 77 5b 34 5d 20 3d 20  v[7];....w[4] = 
1e30: 75 5b 32 5d 20 5e 20 28 76 5b 30 5d 20 5e 3d 20  u[2] ^ (v[0] ^= 
1e40: 76 5b 32 5d 29 3b 0a 09 09 09 77 5b 35 5d 20 3d  v[2]);....w[5] =
1e50: 20 75 5b 33 5d 20 5e 20 28 76 5b 31 5d 20 5e 3d   u[3] ^ (v[1] ^=
1e60: 20 76 5b 33 5d 29 3b 0a 09 09 09 77 5b 36 5d 20   v[3]);....w[6] 
1e70: 3d 20 28 75 5b 34 5d 20 5e 3d 20 75 5b 36 5d 29  = (u[4] ^= u[6])
1e80: 20 5e 20 28 76 5b 32 5d 20 5e 3d 20 76 5b 34 5d   ^ (v[2] ^= v[4]
1e90: 29 3b 0a 09 09 09 77 5b 37 5d 20 3d 20 28 75 5b  );....w[7] = (u[
1ea0: 35 5d 20 5e 3d 20 75 5b 37 5d 29 20 5e 20 28 76  5] ^= u[7]) ^ (v
1eb0: 5b 33 5d 20 5e 3d 20 76 5b 35 5d 29 3b 0a 09 09  [3] ^= v[5]);...
1ec0: 7d 0a 09 7d 0a 0a 09 2f 2a 20 73 74 65 70 20 68  }..}.../* step h
1ed0: 61 73 68 20 66 75 6e 63 74 69 6f 6e 3a 20 78 28  ash function: x(
1ee0: 62 6c 6f 63 6b 2c 20 68 61 73 68 29 20 3a 3d 20  block, hash) := 
1ef0: 70 73 69 5e 36 31 28 68 61 73 68 20 78 6f 72 20  psi^61(hash xor 
1f00: 70 73 69 28 62 6c 6f 63 6b 20 78 6f 72 20 70 73  psi(block xor ps
1f10: 69 5e 31 32 28 53 29 29 29 20 2a 2f 0a 0a 09 2f  i^12(S))) */.../
1f20: 2a 20 31 32 20 72 6f 75 6e 64 73 20 6f 66 20 74  * 12 rounds of t
1f30: 68 65 20 4c 46 53 52 20 61 6e 64 20 78 6f 72 20  he LFSR and xor 
1f40: 69 6e 20 3c 6d 65 73 73 61 67 65 20 62 6c 6f 63  in <message bloc
1f50: 6b 3e 20 2a 2f 0a 09 75 5b 30 5d 20 3d 20 62 6c  k> */..u[0] = bl
1f60: 6f 63 6b 5b 30 5d 20 5e 20 73 5b 36 5d 3b 0a 09  ock[0] ^ s[6];..
1f70: 75 5b 31 5d 20 3d 20 62 6c 6f 63 6b 5b 31 5d 20  u[1] = block[1] 
1f80: 5e 20 73 5b 37 5d 3b 0a 09 75 5b 32 5d 20 3d 20  ^ s[7];..u[2] = 
1f90: 62 6c 6f 63 6b 5b 32 5d 20 5e 20 28 73 5b 30 5d  block[2] ^ (s[0]
1fa0: 20 3c 3c 20 31 36 29 20 5e 20 28 73 5b 30 5d 20   << 16) ^ (s[0] 
1fb0: 3e 3e 20 31 36 29 20 5e 20 28 73 5b 30 5d 20 26  >> 16) ^ (s[0] &
1fc0: 20 30 78 66 66 66 66 29 20 5e 20 28 73 5b 31 5d   0xffff) ^ (s[1]
1fd0: 20 26 20 30 78 66 66 66 66 29 20 5e 20 28 73 5b   & 0xffff) ^ (s[
1fe0: 31 5d 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b 32  1] >> 16) ^ (s[2
1ff0: 5d 20 3c 3c 20 31 36 29 20 5e 20 73 5b 36 5d 20  ] << 16) ^ s[6] 
2000: 5e 20 28 73 5b 36 5d 20 3c 3c 20 31 36 29 20 5e  ^ (s[6] << 16) ^
2010: 20 28 73 5b 37 5d 20 26 20 30 78 66 66 66 66 30   (s[7] & 0xffff0
2020: 30 30 30 29 20 5e 20 28 73 5b 37 5d 20 3e 3e 20  000) ^ (s[7] >> 
2030: 31 36 29 3b 0a 09 75 5b 33 5d 20 3d 20 62 6c 6f  16);..u[3] = blo
2040: 63 6b 5b 33 5d 20 5e 20 28 73 5b 30 5d 20 26 20  ck[3] ^ (s[0] & 
2050: 30 78 66 66 66 66 29 20 5e 20 28 73 5b 30 5d 20  0xffff) ^ (s[0] 
2060: 3c 3c 20 31 36 29 20 5e 20 28 73 5b 31 5d 20 26  << 16) ^ (s[1] &
2070: 20 30 78 66 66 66 66 29 20 5e 20 28 73 5b 31 5d   0xffff) ^ (s[1]
2080: 20 3c 3c 20 31 36 29 20 5e 20 28 73 5b 31 5d 20   << 16) ^ (s[1] 
2090: 3e 3e 20 31 36 29 20 5e 0a 09 09 28 73 5b 32 5d  >> 16) ^...(s[2]
20a0: 20 3c 3c 20 31 36 29 20 5e 20 28 73 5b 32 5d 20   << 16) ^ (s[2] 
20b0: 3e 3e 20 31 36 29 20 5e 20 28 73 5b 33 5d 20 3c  >> 16) ^ (s[3] <
20c0: 3c 20 31 36 29 20 5e 20 73 5b 36 5d 20 5e 20 28  < 16) ^ s[6] ^ (
20d0: 73 5b 36 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73  s[6] << 16) ^ (s
20e0: 5b 36 5d 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b  [6] >> 16) ^ (s[
20f0: 37 5d 20 26 20 30 78 66 66 66 66 29 20 5e 20 28  7] & 0xffff) ^ (
2100: 73 5b 37 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73  s[7] << 16) ^ (s
2110: 5b 37 5d 20 3e 3e 20 31 36 29 3b 0a 09 75 5b 34  [7] >> 16);..u[4
2120: 5d 20 3d 20 62 6c 6f 63 6b 5b 34 5d 20 5e 20 28  ] = block[4] ^ (
2130: 73 5b 30 5d 20 26 20 30 78 66 66 66 66 30 30 30  s[0] & 0xffff000
2140: 30 29 20 5e 20 28 73 5b 30 5d 20 3c 3c 20 31 36  0) ^ (s[0] << 16
2150: 29 20 5e 20 28 73 5b 30 5d 20 3e 3e 20 31 36 29  ) ^ (s[0] >> 16)
2160: 20 5e 0a 09 09 28 73 5b 31 5d 20 26 20 30 78 66   ^...(s[1] & 0xf
2170: 66 66 66 30 30 30 30 29 20 5e 20 28 73 5b 31 5d  fff0000) ^ (s[1]
2180: 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b 32 5d 20   >> 16) ^ (s[2] 
2190: 3c 3c 20 31 36 29 20 5e 20 28 73 5b 32 5d 20 3e  << 16) ^ (s[2] >
21a0: 3e 20 31 36 29 20 5e 20 28 73 5b 33 5d 20 3c 3c  > 16) ^ (s[3] <<
21b0: 20 31 36 29 20 5e 20 28 73 5b 33 5d 20 3e 3e 20   16) ^ (s[3] >> 
21c0: 31 36 29 20 5e 20 28 73 5b 34 5d 20 3c 3c 20 31  16) ^ (s[4] << 1
21d0: 36 29 20 5e 20 28 73 5b 36 5d 20 3c 3c 20 31 36  6) ^ (s[6] << 16
21e0: 29 20 5e 20 28 73 5b 36 5d 20 3e 3e 20 31 36 29  ) ^ (s[6] >> 16)
21f0: 20 5e 20 28 73 5b 37 5d 20 26 20 30 78 66 66 66   ^ (s[7] & 0xfff
2200: 66 29 20 5e 20 28 73 5b 37 5d 20 3c 3c 20 31 36  f) ^ (s[7] << 16
2210: 29 20 5e 20 28 73 5b 37 5d 20 3e 3e 20 31 36 29  ) ^ (s[7] >> 16)
2220: 3b 0a 09 75 5b 35 5d 20 3d 20 62 6c 6f 63 6b 5b  ;..u[5] = block[
2230: 35 5d 20 5e 20 28 73 5b 30 5d 20 3c 3c 20 31 36  5] ^ (s[0] << 16
2240: 29 20 5e 20 28 73 5b 30 5d 20 3e 3e 20 31 36 29  ) ^ (s[0] >> 16)
2250: 20 5e 20 28 73 5b 30 5d 20 26 20 30 78 66 66 66   ^ (s[0] & 0xfff
2260: 66 30 30 30 30 29 20 5e 0a 09 09 28 73 5b 31 5d  f0000) ^...(s[1]
2270: 20 26 20 30 78 66 66 66 66 29 20 5e 20 73 5b 32   & 0xffff) ^ s[2
2280: 5d 20 5e 20 28 73 5b 32 5d 20 3e 3e 20 31 36 29  ] ^ (s[2] >> 16)
2290: 20 5e 20 28 73 5b 33 5d 20 3c 3c 20 31 36 29 20   ^ (s[3] << 16) 
22a0: 5e 20 28 73 5b 33 5d 20 3e 3e 20 31 36 29 20 5e  ^ (s[3] >> 16) ^
22b0: 20 28 73 5b 34 5d 20 3c 3c 20 31 36 29 20 5e 20   (s[4] << 16) ^ 
22c0: 28 73 5b 34 5d 20 3e 3e 20 31 36 29 20 5e 20 28  (s[4] >> 16) ^ (
22d0: 73 5b 35 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73  s[5] << 16) ^ (s
22e0: 5b 36 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73 5b  [6] << 16) ^ (s[
22f0: 36 5d 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b 37  6] >> 16) ^ (s[7
2300: 5d 20 26 20 30 78 66 66 66 66 30 30 30 30 29 20  ] & 0xffff0000) 
2310: 5e 20 28 73 5b 37 5d 20 3c 3c 20 31 36 29 20 5e  ^ (s[7] << 16) ^
2320: 20 28 73 5b 37 5d 20 3e 3e 20 31 36 29 3b 0a 09   (s[7] >> 16);..
2330: 75 5b 36 5d 20 3d 20 62 6c 6f 63 6b 5b 36 5d 20  u[6] = block[6] 
2340: 5e 20 73 5b 30 5d 20 5e 20 28 73 5b 31 5d 20 3e  ^ s[0] ^ (s[1] >
2350: 3e 20 31 36 29 20 5e 20 28 73 5b 32 5d 20 3c 3c  > 16) ^ (s[2] <<
2360: 20 31 36 29 20 5e 20 73 5b 33 5d 20 5e 20 28 73   16) ^ s[3] ^ (s
2370: 5b 33 5d 20 3e 3e 20 31 36 29 0a 09 09 5e 20 28  [3] >> 16)...^ (
2380: 73 5b 34 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73  s[4] << 16) ^ (s
2390: 5b 34 5d 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b  [4] >> 16) ^ (s[
23a0: 35 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73 5b 35  5] << 16) ^ (s[5
23b0: 5d 20 3e 3e 20 31 36 29 20 5e 20 73 5b 36 5d 20  ] >> 16) ^ s[6] 
23c0: 5e 20 28 73 5b 36 5d 20 3c 3c 20 31 36 29 20 5e  ^ (s[6] << 16) ^
23d0: 20 28 73 5b 36 5d 20 3e 3e 20 31 36 29 20 5e 20   (s[6] >> 16) ^ 
23e0: 28 73 5b 37 5d 20 3c 3c 20 31 36 29 3b 0a 09 75  (s[7] << 16);..u
23f0: 5b 37 5d 20 3d 20 62 6c 6f 63 6b 5b 37 5d 20 5e  [7] = block[7] ^
2400: 20 28 73 5b 30 5d 20 26 20 30 78 66 66 66 66 30   (s[0] & 0xffff0
2410: 30 30 30 29 20 5e 20 28 73 5b 30 5d 20 3c 3c 20  000) ^ (s[0] << 
2420: 31 36 29 20 5e 20 28 73 5b 31 5d 20 26 20 30 78  16) ^ (s[1] & 0x
2430: 66 66 66 66 29 20 5e 0a 09 09 28 73 5b 31 5d 20  ffff) ^...(s[1] 
2440: 3c 3c 20 31 36 29 20 5e 20 28 73 5b 32 5d 20 3e  << 16) ^ (s[2] >
2450: 3e 20 31 36 29 20 5e 20 28 73 5b 33 5d 20 3c 3c  > 16) ^ (s[3] <<
2460: 20 31 36 29 20 5e 20 73 5b 34 5d 20 5e 20 28 73   16) ^ s[4] ^ (s
2470: 5b 34 5d 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b  [4] >> 16) ^ (s[
2480: 35 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73 5b 35  5] << 16) ^ (s[5
2490: 5d 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b 36 5d  ] >> 16) ^ (s[6]
24a0: 20 3e 3e 20 31 36 29 20 5e 20 28 73 5b 37 5d 20   >> 16) ^ (s[7] 
24b0: 26 20 30 78 66 66 66 66 29 20 5e 20 28 73 5b 37  & 0xffff) ^ (s[7
24c0: 5d 20 3c 3c 20 31 36 29 20 5e 20 28 73 5b 37 5d  ] << 16) ^ (s[7]
24d0: 20 3e 3e 20 31 36 29 3b 0a 0a 09 2f 2a 20 31 20   >> 16);.../* 1 
24e0: 72 6f 75 6e 64 20 6f 66 20 74 68 65 20 4c 46 53  round of the LFS
24f0: 52 20 28 61 20 6d 69 78 69 6e 67 20 74 72 61 6e  R (a mixing tran
2500: 73 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20  sformation) and 
2510: 78 6f 72 20 77 69 74 68 20 3c 68 61 73 68 3e 20  xor with <hash> 
2520: 2a 2f 0a 09 76 5b 30 5d 20 3d 20 63 74 78 2d 3e  */..v[0] = ctx->
2530: 68 61 73 68 5b 30 5d 20 5e 20 28 75 5b 31 5d 20  hash[0] ^ (u[1] 
2540: 3c 3c 20 31 36 29 20 5e 20 28 75 5b 30 5d 20 3e  << 16) ^ (u[0] >
2550: 3e 20 31 36 29 3b 0a 09 76 5b 31 5d 20 3d 20 63  > 16);..v[1] = c
2560: 74 78 2d 3e 68 61 73 68 5b 31 5d 20 5e 20 28 75  tx->hash[1] ^ (u
2570: 5b 32 5d 20 3c 3c 20 31 36 29 20 5e 20 28 75 5b  [2] << 16) ^ (u[
2580: 31 5d 20 3e 3e 20 31 36 29 3b 0a 09 76 5b 32 5d  1] >> 16);..v[2]
2590: 20 3d 20 63 74 78 2d 3e 68 61 73 68 5b 32 5d 20   = ctx->hash[2] 
25a0: 5e 20 28 75 5b 33 5d 20 3c 3c 20 31 36 29 20 5e  ^ (u[3] << 16) ^
25b0: 20 28 75 5b 32 5d 20 3e 3e 20 31 36 29 3b 0a 09   (u[2] >> 16);..
25c0: 76 5b 33 5d 20 3d 20 63 74 78 2d 3e 68 61 73 68  v[3] = ctx->hash
25d0: 5b 33 5d 20 5e 20 28 75 5b 34 5d 20 3c 3c 20 31  [3] ^ (u[4] << 1
25e0: 36 29 20 5e 20 28 75 5b 33 5d 20 3e 3e 20 31 36  6) ^ (u[3] >> 16
25f0: 29 3b 0a 09 76 5b 34 5d 20 3d 20 63 74 78 2d 3e  );..v[4] = ctx->
2600: 68 61 73 68 5b 34 5d 20 5e 20 28 75 5b 35 5d 20  hash[4] ^ (u[5] 
2610: 3c 3c 20 31 36 29 20 5e 20 28 75 5b 34 5d 20 3e  << 16) ^ (u[4] >
2620: 3e 20 31 36 29 3b 0a 09 76 5b 35 5d 20 3d 20 63  > 16);..v[5] = c
2630: 74 78 2d 3e 68 61 73 68 5b 35 5d 20 5e 20 28 75  tx->hash[5] ^ (u
2640: 5b 36 5d 20 3c 3c 20 31 36 29 20 5e 20 28 75 5b  [6] << 16) ^ (u[
2650: 35 5d 20 3e 3e 20 31 36 29 3b 0a 09 76 5b 36 5d  5] >> 16);..v[6]
2660: 20 3d 20 63 74 78 2d 3e 68 61 73 68 5b 36 5d 20   = ctx->hash[6] 
2670: 5e 20 28 75 5b 37 5d 20 3c 3c 20 31 36 29 20 5e  ^ (u[7] << 16) ^
2680: 20 28 75 5b 36 5d 20 3e 3e 20 31 36 29 3b 0a 09   (u[6] >> 16);..
2690: 76 5b 37 5d 20 3d 20 63 74 78 2d 3e 68 61 73 68  v[7] = ctx->hash
26a0: 5b 37 5d 20 5e 20 28 75 5b 30 5d 20 26 20 30 78  [7] ^ (u[0] & 0x
26b0: 66 66 66 66 30 30 30 30 29 20 5e 20 28 75 5b 30  ffff0000) ^ (u[0
26c0: 5d 20 3c 3c 20 31 36 29 20 5e 20 28 75 5b 31 5d  ] << 16) ^ (u[1]
26d0: 20 26 20 30 78 66 66 66 66 30 30 30 30 29 20 5e   & 0xffff0000) ^
26e0: 20 28 75 5b 31 5d 20 3c 3c 20 31 36 29 20 5e 20   (u[1] << 16) ^ 
26f0: 28 75 5b 36 5d 20 3c 3c 20 31 36 29 20 5e 20 28  (u[6] << 16) ^ (
2700: 75 5b 37 5d 20 26 20 30 78 66 66 66 66 30 30 30  u[7] & 0xffff000
2710: 30 29 20 5e 20 28 75 5b 37 5d 20 3e 3e 20 31 36  0) ^ (u[7] >> 16
2720: 29 3b 0a 0a 09 2f 2a 20 36 31 20 72 6f 75 6e 64  );.../* 61 round
2730: 73 20 6f 66 20 4c 46 53 52 2c 20 6d 69 78 69 6e  s of LFSR, mixin
2740: 67 20 75 70 20 68 61 73 68 20 2a 2f 0a 09 63 74  g up hash */..ct
2750: 78 2d 3e 68 61 73 68 5b 30 5d 20 3d 20 28 76 5b  x->hash[0] = (v[
2760: 30 5d 20 26 20 30 78 66 66 66 66 30 30 30 30 29  0] & 0xffff0000)
2770: 20 5e 20 28 76 5b 30 5d 20 3c 3c 20 31 36 29 20   ^ (v[0] << 16) 
2780: 5e 20 28 76 5b 30 5d 20 3e 3e 20 31 36 29 20 5e  ^ (v[0] >> 16) ^
2790: 0a 09 09 28 76 5b 31 5d 20 3e 3e 20 31 36 29 20  ...(v[1] >> 16) 
27a0: 5e 20 28 76 5b 31 5d 20 26 20 30 78 66 66 66 66  ^ (v[1] & 0xffff
27b0: 30 30 30 30 29 20 5e 20 28 76 5b 32 5d 20 3c 3c  0000) ^ (v[2] <<
27c0: 20 31 36 29 20 5e 0a 09 09 28 76 5b 33 5d 20 3e   16) ^...(v[3] >
27d0: 3e 20 31 36 29 20 5e 20 28 76 5b 34 5d 20 3c 3c  > 16) ^ (v[4] <<
27e0: 20 31 36 29 20 5e 20 28 76 5b 35 5d 20 3e 3e 20   16) ^ (v[5] >> 
27f0: 31 36 29 20 5e 20 76 5b 35 5d 20 5e 0a 09 09 28  16) ^ v[5] ^...(
2800: 76 5b 36 5d 20 3e 3e 20 31 36 29 20 5e 20 28 76  v[6] >> 16) ^ (v
2810: 5b 37 5d 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b  [7] << 16) ^ (v[
2820: 37 5d 20 3e 3e 20 31 36 29 20 5e 20 28 76 5b 37  7] >> 16) ^ (v[7
2830: 5d 20 26 20 30 78 66 66 66 66 29 3b 0a 09 63 74  ] & 0xffff);..ct
2840: 78 2d 3e 68 61 73 68 5b 31 5d 20 3d 20 28 76 5b  x->hash[1] = (v[
2850: 30 5d 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b 30  0] << 16) ^ (v[0
2860: 5d 20 3e 3e 20 31 36 29 20 5e 20 28 76 5b 30 5d  ] >> 16) ^ (v[0]
2870: 20 26 20 30 78 66 66 66 66 30 30 30 30 29 20 5e   & 0xffff0000) ^
2880: 0a 09 09 28 76 5b 31 5d 20 26 20 30 78 66 66 66  ...(v[1] & 0xfff
2890: 66 29 20 5e 20 76 5b 32 5d 20 5e 20 28 76 5b 32  f) ^ v[2] ^ (v[2
28a0: 5d 20 3e 3e 20 31 36 29 20 5e 20 28 76 5b 33 5d  ] >> 16) ^ (v[3]
28b0: 20 3c 3c 20 31 36 29 20 5e 0a 09 09 28 76 5b 34   << 16) ^...(v[4
28c0: 5d 20 3e 3e 20 31 36 29 20 5e 20 28 76 5b 35 5d  ] >> 16) ^ (v[5]
28d0: 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b 36 5d 20   << 16) ^ (v[6] 
28e0: 3c 3c 20 31 36 29 20 5e 20 76 5b 36 5d 20 5e 0a  << 16) ^ v[6] ^.
28f0: 09 09 28 76 5b 37 5d 20 26 20 30 78 66 66 66 66  ..(v[7] & 0xffff
2900: 30 30 30 30 29 20 5e 20 28 76 5b 37 5d 20 3e 3e  0000) ^ (v[7] >>
2910: 20 31 36 29 3b 0a 09 63 74 78 2d 3e 68 61 73 68   16);..ctx->hash
2920: 5b 32 5d 20 3d 20 28 76 5b 30 5d 20 26 20 30 78  [2] = (v[0] & 0x
2930: 66 66 66 66 29 20 5e 20 28 76 5b 30 5d 20 3c 3c  ffff) ^ (v[0] <<
2940: 20 31 36 29 20 5e 20 28 76 5b 31 5d 20 3c 3c 20   16) ^ (v[1] << 
2950: 31 36 29 20 5e 0a 09 09 28 76 5b 31 5d 20 3e 3e  16) ^...(v[1] >>
2960: 20 31 36 29 20 5e 20 28 76 5b 31 5d 20 26 20 30   16) ^ (v[1] & 0
2970: 78 66 66 66 66 30 30 30 30 29 20 5e 20 28 76 5b  xffff0000) ^ (v[
2980: 32 5d 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b 33  2] << 16) ^ (v[3
2990: 5d 20 3e 3e 20 31 36 29 20 5e 0a 09 09 76 5b 33  ] >> 16) ^...v[3
29a0: 5d 20 5e 20 28 76 5b 34 5d 20 3c 3c 20 31 36 29  ] ^ (v[4] << 16)
29b0: 20 5e 20 28 76 5b 35 5d 20 3e 3e 20 31 36 29 20   ^ (v[5] >> 16) 
29c0: 5e 20 76 5b 36 5d 20 5e 20 28 76 5b 36 5d 20 3e  ^ v[6] ^ (v[6] >
29d0: 3e 20 31 36 29 20 5e 0a 09 09 28 76 5b 37 5d 20  > 16) ^...(v[7] 
29e0: 26 20 30 78 66 66 66 66 29 20 5e 20 28 76 5b 37  & 0xffff) ^ (v[7
29f0: 5d 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b 37 5d  ] << 16) ^ (v[7]
2a00: 20 3e 3e 20 31 36 29 3b 0a 09 63 74 78 2d 3e 68   >> 16);..ctx->h
2a10: 61 73 68 5b 33 5d 20 3d 20 28 76 5b 30 5d 20 3c  ash[3] = (v[0] <
2a20: 3c 20 31 36 29 20 5e 20 28 76 5b 30 5d 20 3e 3e  < 16) ^ (v[0] >>
2a30: 20 31 36 29 20 5e 20 28 76 5b 30 5d 20 26 20 30   16) ^ (v[0] & 0
2a40: 78 66 66 66 66 30 30 30 30 29 20 5e 0a 09 09 28  xffff0000) ^...(
2a50: 76 5b 31 5d 20 26 20 30 78 66 66 66 66 30 30 30  v[1] & 0xffff000
2a60: 30 29 20 5e 20 28 76 5b 31 5d 20 3e 3e 20 31 36  0) ^ (v[1] >> 16
2a70: 29 20 5e 20 28 76 5b 32 5d 20 3c 3c 20 31 36 29  ) ^ (v[2] << 16)
2a80: 20 5e 0a 09 09 28 76 5b 32 5d 20 3e 3e 20 31 36   ^...(v[2] >> 16
2a90: 29 20 5e 20 76 5b 32 5d 20 5e 20 28 76 5b 33 5d  ) ^ v[2] ^ (v[3]
2aa0: 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b 34 5d 20   << 16) ^ (v[4] 
2ab0: 3e 3e 20 31 36 29 20 5e 20 76 5b 34 5d 20 5e 0a  >> 16) ^ v[4] ^.
2ac0: 09 09 28 76 5b 35 5d 20 3c 3c 20 31 36 29 20 5e  ..(v[5] << 16) ^
2ad0: 20 28 76 5b 36 5d 20 3c 3c 20 31 36 29 20 5e 20   (v[6] << 16) ^ 
2ae0: 28 76 5b 37 5d 20 26 20 30 78 66 66 66 66 29 20  (v[7] & 0xffff) 
2af0: 5e 20 28 76 5b 37 5d 20 3e 3e 20 31 36 29 3b 0a  ^ (v[7] >> 16);.
2b00: 09 63 74 78 2d 3e 68 61 73 68 5b 34 5d 20 3d 20  .ctx->hash[4] = 
2b10: 28 76 5b 30 5d 20 3e 3e 20 31 36 29 20 5e 20 28  (v[0] >> 16) ^ (
2b20: 76 5b 31 5d 20 3c 3c 20 31 36 29 20 5e 20 76 5b  v[1] << 16) ^ v[
2b30: 31 5d 20 5e 20 28 76 5b 32 5d 20 3e 3e 20 31 36  1] ^ (v[2] >> 16
2b40: 29 20 5e 20 76 5b 32 5d 20 5e 0a 09 09 28 76 5b  ) ^ v[2] ^...(v[
2b50: 33 5d 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b 33  3] << 16) ^ (v[3
2b60: 5d 20 3e 3e 20 31 36 29 20 5e 20 76 5b 33 5d 20  ] >> 16) ^ v[3] 
2b70: 5e 20 28 76 5b 34 5d 20 3c 3c 20 31 36 29 20 5e  ^ (v[4] << 16) ^
2b80: 0a 09 09 28 76 5b 35 5d 20 3e 3e 20 31 36 29 20  ...(v[5] >> 16) 
2b90: 5e 20 76 5b 35 5d 20 5e 20 28 76 5b 36 5d 20 3c  ^ v[5] ^ (v[6] <
2ba0: 3c 20 31 36 29 20 5e 20 28 76 5b 36 5d 20 3e 3e  < 16) ^ (v[6] >>
2bb0: 20 31 36 29 20 5e 20 28 76 5b 37 5d 20 3c 3c 20   16) ^ (v[7] << 
2bc0: 31 36 29 3b 0a 09 63 74 78 2d 3e 68 61 73 68 5b  16);..ctx->hash[
2bd0: 35 5d 20 3d 20 28 76 5b 30 5d 20 3c 3c 20 31 36  5] = (v[0] << 16
2be0: 29 20 5e 20 28 76 5b 30 5d 20 26 20 30 78 66 66  ) ^ (v[0] & 0xff
2bf0: 66 66 30 30 30 30 29 20 5e 20 28 76 5b 31 5d 20  ff0000) ^ (v[1] 
2c00: 3c 3c 20 31 36 29 20 5e 0a 09 09 28 76 5b 31 5d  << 16) ^...(v[1]
2c10: 20 3e 3e 20 31 36 29 20 5e 20 28 76 5b 31 5d 20   >> 16) ^ (v[1] 
2c20: 26 20 30 78 66 66 66 66 30 30 30 30 29 20 5e 20  & 0xffff0000) ^ 
2c30: 28 76 5b 32 5d 20 3c 3c 20 31 36 29 20 5e 20 76  (v[2] << 16) ^ v
2c40: 5b 32 5d 20 5e 0a 09 09 28 76 5b 33 5d 20 3e 3e  [2] ^...(v[3] >>
2c50: 20 31 36 29 20 5e 20 76 5b 33 5d 20 5e 20 28 76   16) ^ v[3] ^ (v
2c60: 5b 34 5d 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b  [4] << 16) ^ (v[
2c70: 34 5d 20 3e 3e 20 31 36 29 20 5e 20 76 5b 34 5d  4] >> 16) ^ v[4]
2c80: 20 5e 0a 09 09 28 76 5b 35 5d 20 3c 3c 20 31 36   ^...(v[5] << 16
2c90: 29 20 5e 20 28 76 5b 36 5d 20 3c 3c 20 31 36 29  ) ^ (v[6] << 16)
2ca0: 20 5e 20 28 76 5b 36 5d 20 3e 3e 20 31 36 29 20   ^ (v[6] >> 16) 
2cb0: 5e 20 76 5b 36 5d 20 5e 0a 09 09 28 76 5b 37 5d  ^ v[6] ^...(v[7]
2cc0: 20 3c 3c 20 31 36 29 20 5e 20 28 76 5b 37 5d 20   << 16) ^ (v[7] 
2cd0: 3e 3e 20 31 36 29 20 5e 20 28 76 5b 37 5d 20 26  >> 16) ^ (v[7] &
2ce0: 20 30 78 66 66 66 66 30 30 30 30 29 3b 0a 09 63   0xffff0000);..c
2cf0: 74 78 2d 3e 68 61 73 68 5b 36 5d 20 3d 20 76 5b  tx->hash[6] = v[
2d00: 30 5d 20 5e 20 76 5b 32 5d 20 5e 20 28 76 5b 32  0] ^ v[2] ^ (v[2
2d10: 5d 20 3e 3e 20 31 36 29 20 5e 20 76 5b 33 5d 20  ] >> 16) ^ v[3] 
2d20: 5e 20 28 76 5b 33 5d 20 3c 3c 20 31 36 29 20 5e  ^ (v[3] << 16) ^
2d30: 20 76 5b 34 5d 20 5e 0a 09 09 28 76 5b 34 5d 20   v[4] ^...(v[4] 
2d40: 3e 3e 20 31 36 29 20 5e 20 28 76 5b 35 5d 20 3c  >> 16) ^ (v[5] <
2d50: 3c 20 31 36 29 20 5e 20 28 76 5b 35 5d 20 3e 3e  < 16) ^ (v[5] >>
2d60: 20 31 36 29 20 5e 20 76 5b 35 5d 20 5e 0a 09 09   16) ^ v[5] ^...
2d70: 28 76 5b 36 5d 20 3c 3c 20 31 36 29 20 5e 20 28  (v[6] << 16) ^ (
2d80: 76 5b 36 5d 20 3e 3e 20 31 36 29 20 5e 20 76 5b  v[6] >> 16) ^ v[
2d90: 36 5d 20 5e 20 28 76 5b 37 5d 20 3c 3c 20 31 36  6] ^ (v[7] << 16
2da0: 29 20 5e 20 76 5b 37 5d 3b 0a 09 63 74 78 2d 3e  ) ^ v[7];..ctx->
2db0: 68 61 73 68 5b 37 5d 20 3d 20 76 5b 30 5d 20 5e  hash[7] = v[0] ^
2dc0: 20 28 76 5b 30 5d 20 3e 3e 20 31 36 29 20 5e 20   (v[0] >> 16) ^ 
2dd0: 28 76 5b 31 5d 20 3c 3c 20 31 36 29 20 5e 20 28  (v[1] << 16) ^ (
2de0: 76 5b 31 5d 20 3e 3e 20 31 36 29 20 5e 0a 09 09  v[1] >> 16) ^...
2df0: 28 76 5b 32 5d 20 3c 3c 20 31 36 29 20 5e 20 28  (v[2] << 16) ^ (
2e00: 76 5b 33 5d 20 3e 3e 20 31 36 29 20 5e 20 76 5b  v[3] >> 16) ^ v[
2e10: 33 5d 20 5e 20 28 76 5b 34 5d 20 3c 3c 20 31 36  3] ^ (v[4] << 16
2e20: 29 20 5e 20 76 5b 34 5d 20 5e 0a 09 09 28 76 5b  ) ^ v[4] ^...(v[
2e30: 35 5d 20 3e 3e 20 31 36 29 20 5e 20 76 5b 35 5d  5] >> 16) ^ v[5]
2e40: 20 5e 20 28 76 5b 36 5d 20 3c 3c 20 31 36 29 20   ^ (v[6] << 16) 
2e50: 5e 20 28 76 5b 36 5d 20 3e 3e 20 31 36 29 20 5e  ^ (v[6] >> 16) ^
2e60: 20 28 76 5b 37 5d 20 3c 3c 20 31 36 29 20 5e 20   (v[7] << 16) ^ 
2e70: 76 5b 37 5d 3b 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20  v[7];.}../**. * 
2e80: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 61  This function ca
2e90: 6c 63 75 6c 61 74 65 73 20 68 61 73 68 20 76 61  lculates hash va
2ea0: 6c 75 65 20 62 79 20 32 35 36 2d 62 69 74 20 62  lue by 256-bit b
2eb0: 6c 6f 63 6b 73 2e 0a 20 2a 20 49 74 20 75 70 64  locks.. * It upd
2ec0: 61 74 65 73 20 32 35 36 2d 62 69 74 20 63 68 65  ates 256-bit che
2ed0: 63 6b 20 73 75 6d 20 61 73 20 66 6f 6c 6c 6f 77  ck sum as follow
2ee0: 73 3a 0a 20 2a 20 20 20 20 2a 28 75 69 6e 74 32  s:. *    *(uint2
2ef0: 35 36 5f 74 29 28 63 74 78 2d 3e 73 75 6d 29 20  56_t)(ctx->sum) 
2f00: 2b 3d 20 2a 28 75 69 6e 74 32 35 36 5f 74 2a 29  += *(uint256_t*)
2f10: 62 6c 6f 63 6b 3b 0a 20 2a 20 61 6e 64 20 74 68  block;. * and th
2f20: 65 6e 20 75 70 64 61 74 65 73 20 69 6e 74 65 72  en updates inter
2f30: 6d 65 64 69 61 74 65 20 68 61 73 68 20 76 61 6c  mediate hash val
2f40: 75 65 20 63 74 78 2d 3e 68 61 73 68 0a 20 2a 20  ue ctx->hash. * 
2f50: 62 79 20 63 61 6c 6c 69 6e 67 20 72 68 61 73 68  by calling rhash
2f60: 5f 67 6f 73 74 5f 62 6c 6f 63 6b 5f 63 6f 6d 70  _gost_block_comp
2f70: 72 65 73 73 28 29 2e 0a 20 2a 0a 20 2a 20 40 70  ress().. *. * @p
2f80: 61 72 61 6d 20 63 74 78 20 61 6c 67 6f 72 69 74  aram ctx algorit
2f90: 68 6d 20 63 6f 6e 74 65 78 74 0a 20 2a 20 40 70  hm context. * @p
2fa0: 61 72 61 6d 20 62 6c 6f 63 6b 20 74 68 65 20 32  aram block the 2
2fb0: 35 36 2d 62 69 74 20 6d 65 73 73 61 67 65 20 62  56-bit message b
2fc0: 6c 6f 63 6b 20 74 6f 20 70 72 6f 63 65 73 73 0a  lock to process.
2fd0: 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20   */.static void 
2fe0: 72 68 61 73 68 5f 67 6f 73 74 5f 63 6f 6d 70 75  rhash_gost_compu
2ff0: 74 65 5f 73 75 6d 5f 61 6e 64 5f 68 61 73 68 28  te_sum_and_hash(
3000: 67 6f 73 74 5f 63 74 78 20 2a 20 63 74 78 2c 20  gost_ctx * ctx, 
3010: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 2a 20  const unsigned* 
3020: 62 6c 6f 63 6b 29 0a 7b 0a 23 69 66 20 49 53 5f  block).{.#if IS_
3030: 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 0a 23 20  LITTLE_ENDIAN.# 
3040: 64 65 66 69 6e 65 20 62 6c 6f 63 6b 5f 6c 65 20  define block_le 
3050: 62 6c 6f 63 6b 0a 23 20 64 65 66 69 6e 65 20 4c  block.# define L
3060: 4f 41 44 5f 42 4c 4f 43 4b 5f 4c 45 28 69 29 0a  OAD_BLOCK_LE(i).
3070: 23 65 6c 73 65 0a 09 75 6e 73 69 67 6e 65 64 20  #else..unsigned 
3080: 62 6c 6f 63 6b 5f 6c 65 5b 38 5d 3b 20 2f 2a 20  block_le[8]; /* 
3090: 74 6d 70 20 62 75 66 66 65 72 20 66 6f 72 20 6c  tmp buffer for l
30a0: 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75 6d  ittle endian num
30b0: 62 65 72 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  ber */.# define 
30c0: 4c 4f 41 44 5f 42 4c 4f 43 4b 5f 4c 45 28 69 29  LOAD_BLOCK_LE(i)
30d0: 20 28 62 6c 6f 63 6b 5f 6c 65 5b 69 5d 20 3d 20   (block_le[i] = 
30e0: 6c 65 32 6d 65 5f 33 32 28 62 6c 6f 63 6b 5b 69  le2me_32(block[i
30f0: 5d 29 29 0a 23 65 6e 64 69 66 0a 0a 09 2f 2a 20  ])).#endif.../* 
3100: 54 68 69 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  This optimizatio
3110: 6e 20 64 6f 65 73 6e 27 74 20 69 6d 70 72 6f 76  n doesn't improv
3120: 65 20 73 70 65 65 64 20 6d 75 63 68 2c 0a 09 2a  e speed much,..*
3130: 20 61 6e 64 20 73 61 76 65 73 20 74 6f 6f 20 6c   and saves too l
3140: 69 74 74 6c 65 20 6d 65 6d 6f 72 79 2c 20 62 75  ittle memory, bu
3150: 74 20 69 74 20 77 61 73 20 66 75 6e 20 74 6f 20  t it was fun to 
3160: 77 72 69 74 65 21 20 3d 29 20 20 2a 2f 0a 23 69  write! =)  */.#i
3170: 66 64 65 66 20 55 53 45 5f 47 43 43 5f 41 53 4d  fdef USE_GCC_ASM
3180: 5f 49 41 33 32 0a 09 5f 5f 61 73 6d 20 5f 5f 76  _IA32..__asm __v
3190: 6f 6c 61 74 69 6c 65 28 0a 09 09 22 61 64 64 6c  olatile(..."addl
31a0: 20 25 30 2c 20 28 25 31 29 5c 6e 5c 74 22 0a 09   %0, (%1)\n\t"..
31b0: 09 22 6d 6f 76 6c 20 34 28 25 32 29 2c 20 25 30  ."movl 4(%2), %0
31c0: 5c 6e 5c 74 22 0a 09 09 22 61 64 63 6c 20 25 30  \n\t"..."adcl %0
31d0: 2c 20 34 28 25 31 29 5c 6e 5c 74 22 0a 09 09 22  , 4(%1)\n\t"..."
31e0: 6d 6f 76 6c 20 38 28 25 32 29 2c 20 25 30 5c 6e  movl 8(%2), %0\n
31f0: 5c 74 22 0a 09 09 22 61 64 63 6c 20 25 30 2c 20  \t"..."adcl %0, 
3200: 38 28 25 31 29 5c 6e 5c 74 22 0a 09 09 22 6d 6f  8(%1)\n\t"..."mo
3210: 76 6c 20 31 32 28 25 32 29 2c 20 25 30 5c 6e 5c  vl 12(%2), %0\n\
3220: 74 22 0a 09 09 22 61 64 63 6c 20 25 30 2c 20 31  t"..."adcl %0, 1
3230: 32 28 25 31 29 5c 6e 5c 74 22 0a 09 09 22 6d 6f  2(%1)\n\t"..."mo
3240: 76 6c 20 31 36 28 25 32 29 2c 20 25 30 5c 6e 5c  vl 16(%2), %0\n\
3250: 74 22 0a 09 09 22 61 64 63 6c 20 25 30 2c 20 31  t"..."adcl %0, 1
3260: 36 28 25 31 29 5c 6e 5c 74 22 0a 09 09 22 6d 6f  6(%1)\n\t"..."mo
3270: 76 6c 20 32 30 28 25 32 29 2c 20 25 30 5c 6e 5c  vl 20(%2), %0\n\
3280: 74 22 0a 09 09 22 61 64 63 6c 20 25 30 2c 20 32  t"..."adcl %0, 2
3290: 30 28 25 31 29 5c 6e 5c 74 22 0a 09 09 22 6d 6f  0(%1)\n\t"..."mo
32a0: 76 6c 20 32 34 28 25 32 29 2c 20 25 30 5c 6e 5c  vl 24(%2), %0\n\
32b0: 74 22 0a 09 09 22 61 64 63 6c 20 25 30 2c 20 32  t"..."adcl %0, 2
32c0: 34 28 25 31 29 5c 6e 5c 74 22 0a 09 09 22 6d 6f  4(%1)\n\t"..."mo
32d0: 76 6c 20 32 38 28 25 32 29 2c 20 25 30 5c 6e 5c  vl 28(%2), %0\n\
32e0: 74 22 0a 09 09 22 61 64 63 6c 20 25 30 2c 20 32  t"..."adcl %0, 2
32f0: 38 28 25 31 29 5c 6e 5c 74 22 0a 09 09 3a 20 3a  8(%1)\n\t"...: :
3300: 20 22 72 22 20 28 62 6c 6f 63 6b 5b 30 5d 29 2c   "r" (block[0]),
3310: 20 22 72 22 20 28 63 74 78 2d 3e 73 75 6d 29 2c   "r" (ctx->sum),
3320: 20 22 72 22 20 28 62 6c 6f 63 6b 29 0a 09 09 3a   "r" (block)...:
3330: 20 22 30 22 2c 20 22 6d 65 6d 6f 72 79 22 2c 20   "0", "memory", 
3340: 22 63 63 22 20 29 3b 0a 23 65 6c 69 66 20 64 65  "cc" );.#elif de
3350: 66 69 6e 65 64 28 55 53 45 5f 47 43 43 5f 41 53  fined(USE_GCC_AS
3360: 4d 5f 58 36 34 29 0a 09 63 6f 6e 73 74 20 75 69  M_X64)..const ui
3370: 6e 74 36 34 5f 74 2a 20 62 6c 6f 63 6b 36 34 20  nt64_t* block64 
3380: 3d 20 28 63 6f 6e 73 74 20 75 69 6e 74 36 34 5f  = (const uint64_
3390: 74 2a 29 62 6c 6f 63 6b 3b 0a 09 75 69 6e 74 36  t*)block;..uint6
33a0: 34 5f 74 2a 20 73 75 6d 36 34 20 3d 20 28 75 69  4_t* sum64 = (ui
33b0: 6e 74 36 34 5f 74 2a 29 63 74 78 2d 3e 73 75 6d  nt64_t*)ctx->sum
33c0: 3b 0a 09 5f 5f 61 73 6d 20 5f 5f 76 6f 6c 61 74  ;..__asm __volat
33d0: 69 6c 65 28 0a 09 09 22 61 64 64 71 20 25 34 2c  ile(..."addq %4,
33e0: 20 25 30 5c 6e 5c 74 22 0a 09 09 22 61 64 63 71   %0\n\t"..."adcq
33f0: 20 25 35 2c 20 25 31 5c 6e 5c 74 22 0a 09 09 22   %5, %1\n\t"..."
3400: 61 64 63 71 20 25 36 2c 20 25 32 5c 6e 5c 74 22  adcq %6, %2\n\t"
3410: 0a 09 09 22 61 64 63 71 20 25 37 2c 20 25 33 5c  ..."adcq %7, %3\
3420: 6e 5c 74 22 0a 09 09 3a 20 22 2b 6d 22 20 28 73  n\t"...: "+m" (s
3430: 75 6d 36 34 5b 30 5d 29 2c 20 22 2b 6d 22 20 28  um64[0]), "+m" (
3440: 73 75 6d 36 34 5b 31 5d 29 2c 20 22 2b 6d 22 20  sum64[1]), "+m" 
3450: 28 73 75 6d 36 34 5b 32 5d 29 2c 20 22 2b 6d 22  (sum64[2]), "+m"
3460: 20 28 73 75 6d 36 34 5b 33 5d 29 0a 09 09 3a 20   (sum64[3])...: 
3470: 22 72 22 20 28 62 6c 6f 63 6b 36 34 5b 30 5d 29  "r" (block64[0])
3480: 2c 20 22 72 22 20 28 62 6c 6f 63 6b 36 34 5b 31  , "r" (block64[1
3490: 5d 29 2c 20 22 72 22 20 28 62 6c 6f 63 6b 36 34  ]), "r" (block64
34a0: 5b 32 5d 29 2c 20 22 72 22 20 28 62 6c 6f 63 6b  [2]), "r" (block
34b0: 36 34 5b 33 5d 29 0a 09 09 3a 20 22 63 63 22 20  64[3])...: "cc" 
34c0: 29 3b 0a 23 65 6c 73 65 20 2f 2a 20 55 53 45 5f  );.#else /* USE_
34d0: 47 43 43 5f 41 53 4d 5f 49 41 33 32 20 2a 2f 0a  GCC_ASM_IA32 */.
34e0: 0a 09 75 6e 73 69 67 6e 65 64 20 69 2c 20 63 61  ..unsigned i, ca
34f0: 72 72 79 20 3d 20 30 3b 0a 0a 09 2f 2a 20 63 6f  rry = 0;.../* co
3500: 6d 70 75 74 65 20 74 68 65 20 32 35 36 2d 62 69  mpute the 256-bi
3510: 74 20 73 75 6d 20 2a 2f 0a 09 66 6f 72 20 28 69  t sum */..for (i
3520: 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69 2b 2b   = 0; i < 8; i++
3530: 29 20 7b 0a 09 09 4c 4f 41 44 5f 42 4c 4f 43 4b  ) {...LOAD_BLOCK
3540: 5f 4c 45 28 69 29 3b 0a 09 09 63 74 78 2d 3e 73  _LE(i);...ctx->s
3550: 75 6d 5b 69 5d 20 2b 3d 20 62 6c 6f 63 6b 5f 6c  um[i] += block_l
3560: 65 5b 69 5d 20 2b 20 63 61 72 72 79 3b 0a 09 09  e[i] + carry;...
3570: 63 61 72 72 79 20 3d 20 28 63 74 78 2d 3e 73 75  carry = (ctx->su
3580: 6d 5b 69 5d 20 3c 20 62 6c 6f 63 6b 5f 6c 65 5b  m[i] < block_le[
3590: 69 5d 20 3f 20 31 20 3a 0a 09 09 09 63 74 78 2d  i] ? 1 :....ctx-
35a0: 3e 73 75 6d 5b 69 5d 20 3d 3d 20 62 6c 6f 63 6b  >sum[i] == block
35b0: 5f 6c 65 5b 69 5d 20 3f 20 63 61 72 72 79 20 3a  _le[i] ? carry :
35c0: 20 30 29 3b 0a 09 7d 0a 23 65 6e 64 69 66 20 2f   0);..}.#endif /
35d0: 2a 20 55 53 45 5f 47 43 43 5f 41 53 4d 5f 49 41  * USE_GCC_ASM_IA
35e0: 33 32 20 2a 2f 0a 0a 09 2f 2a 20 75 70 64 61 74  32 */.../* updat
35f0: 65 20 6d 65 73 73 61 67 65 20 68 61 73 68 20 2a  e message hash *
3600: 2f 0a 09 72 68 61 73 68 5f 67 6f 73 74 5f 62 6c  /..rhash_gost_bl
3610: 6f 63 6b 5f 63 6f 6d 70 72 65 73 73 28 63 74 78  ock_compress(ctx
3620: 2c 20 62 6c 6f 63 6b 5f 6c 65 29 3b 0a 7d 0a 0a  , block_le);.}..
3630: 2f 2a 2a 0a 20 2a 20 43 61 6c 63 75 6c 61 74 65  /**. * Calculate
3640: 20 6d 65 73 73 61 67 65 20 68 61 73 68 2e 0a 20   message hash.. 
3650: 2a 20 43 61 6e 20 62 65 20 63 61 6c 6c 65 64 20  * Can be called 
3660: 72 65 70 65 61 74 65 64 6c 79 20 77 69 74 68 20  repeatedly with 
3670: 63 68 75 6e 6b 73 20 6f 66 20 74 68 65 20 6d 65  chunks of the me
3680: 73 73 61 67 65 20 74 6f 20 62 65 20 68 61 73 68  ssage to be hash
3690: 65 64 2e 0a 20 2a 0a 20 2a 20 40 70 61 72 61 6d  ed.. *. * @param
36a0: 20 63 74 78 20 74 68 65 20 61 6c 67 6f 72 69 74   ctx the algorit
36b0: 68 6d 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  hm context conta
36c0: 69 6e 69 6e 67 20 63 75 72 72 65 6e 74 20 68 61  ining current ha
36d0: 73 68 69 6e 67 20 73 74 61 74 65 0a 20 2a 20 40  shing state. * @
36e0: 70 61 72 61 6d 20 6d 73 67 20 6d 65 73 73 61 67  param msg messag
36f0: 65 20 63 68 75 6e 6b 0a 20 2a 20 40 70 61 72 61  e chunk. * @para
3700: 6d 20 73 69 7a 65 20 6c 65 6e 67 74 68 20 6f 66  m size length of
3710: 20 74 68 65 20 6d 65 73 73 61 67 65 20 63 68 75   the message chu
3720: 6e 6b 0a 20 2a 2f 0a 76 6f 69 64 20 72 68 61 73  nk. */.void rhas
3730: 68 5f 67 6f 73 74 5f 75 70 64 61 74 65 28 67 6f  h_gost_update(go
3740: 73 74 5f 63 74 78 20 2a 63 74 78 2c 20 63 6f 6e  st_ctx *ctx, con
3750: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
3760: 2a 20 6d 73 67 2c 20 73 69 7a 65 5f 74 20 73 69  * msg, size_t si
3770: 7a 65 29 0a 7b 0a 09 75 6e 73 69 67 6e 65 64 20  ze).{..unsigned 
3780: 69 6e 64 65 78 20 3d 20 28 75 6e 73 69 67 6e 65  index = (unsigne
3790: 64 29 63 74 78 2d 3e 6c 65 6e 67 74 68 20 26 20  d)ctx->length & 
37a0: 33 31 3b 0a 09 63 74 78 2d 3e 6c 65 6e 67 74 68  31;..ctx->length
37b0: 20 2b 3d 20 73 69 7a 65 3b 0a 0a 09 2f 2a 20 66   += size;.../* f
37c0: 69 6c 6c 20 70 61 72 74 69 61 6c 20 62 6c 6f 63  ill partial bloc
37d0: 6b 20 2a 2f 0a 09 69 66 20 28 69 6e 64 65 78 29  k */..if (index)
37e0: 20 7b 0a 09 09 75 6e 73 69 67 6e 65 64 20 6c 65   {...unsigned le
37f0: 66 74 20 3d 20 67 6f 73 74 5f 62 6c 6f 63 6b 5f  ft = gost_block_
3800: 73 69 7a 65 20 2d 20 69 6e 64 65 78 3b 0a 09 09  size - index;...
3810: 6d 65 6d 63 70 79 28 63 74 78 2d 3e 6d 65 73 73  memcpy(ctx->mess
3820: 61 67 65 20 2b 20 69 6e 64 65 78 2c 20 6d 73 67  age + index, msg
3830: 2c 20 28 73 69 7a 65 20 3c 20 6c 65 66 74 20 3f  , (size < left ?
3840: 20 73 69 7a 65 20 3a 20 6c 65 66 74 29 29 3b 0a   size : left));.
3850: 09 09 69 66 20 28 73 69 7a 65 20 3c 20 6c 65 66  ..if (size < lef
3860: 74 29 20 72 65 74 75 72 6e 3b 0a 0a 09 09 2f 2a  t) return;..../*
3870: 20 70 72 6f 63 65 73 73 20 70 61 72 74 69 61 6c   process partial
3880: 20 62 6c 6f 63 6b 20 2a 2f 0a 09 09 72 68 61 73   block */...rhas
3890: 68 5f 67 6f 73 74 5f 63 6f 6d 70 75 74 65 5f 73  h_gost_compute_s
38a0: 75 6d 5f 61 6e 64 5f 68 61 73 68 28 63 74 78 2c  um_and_hash(ctx,
38b0: 20 28 75 6e 73 69 67 6e 65 64 2a 29 63 74 78 2d   (unsigned*)ctx-
38c0: 3e 6d 65 73 73 61 67 65 29 3b 0a 09 09 6d 73 67  >message);...msg
38d0: 20 2b 3d 20 6c 65 66 74 3b 0a 09 09 73 69 7a 65   += left;...size
38e0: 20 2d 3d 20 6c 65 66 74 3b 0a 09 7d 0a 09 77 68   -= left;..}..wh
38f0: 69 6c 65 20 28 73 69 7a 65 20 3e 3d 20 67 6f 73  ile (size >= gos
3900: 74 5f 62 6c 6f 63 6b 5f 73 69 7a 65 29 20 7b 0a  t_block_size) {.
3910: 09 09 75 6e 73 69 67 6e 65 64 2a 20 61 6c 69 67  ..unsigned* alig
3920: 6e 65 64 5f 6d 65 73 73 61 67 65 5f 62 6c 6f 63  ned_message_bloc
3930: 6b 3b 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28  k;.#if (defined(
3940: 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 64 65 66  __GNUC__) && def
3950: 69 6e 65 64 28 43 50 55 5f 58 36 34 29 29 0a 09  ined(CPU_X64))..
3960: 09 69 66 20 28 49 53 5f 41 4c 49 47 4e 45 44 5f  .if (IS_ALIGNED_
3970: 36 34 28 6d 73 67 29 29 20 7b 0a 23 65 6c 73 65  64(msg)) {.#else
3980: 0a 09 09 69 66 20 28 49 53 5f 41 4c 49 47 4e 45  ...if (IS_ALIGNE
3990: 44 5f 33 32 28 6d 73 67 29 29 20 7b 0a 23 65 6e  D_32(msg)) {.#en
39a0: 64 69 66 0a 09 09 09 2f 2a 20 74 68 65 20 6d 6f  dif..../* the mo
39b0: 73 74 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  st common case i
39c0: 73 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  s processing of 
39d0: 61 6e 20 61 6c 72 65 61 64 79 20 61 6c 69 67 6e  an already align
39e0: 65 64 20 6d 65 73 73 61 67 65 0a 09 09 09 6f 6e  ed message....on
39f0: 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 43   little-endian C
3a00: 50 55 20 77 69 74 68 6f 75 74 20 63 6f 70 79 69  PU without copyi
3a10: 6e 67 20 69 74 20 2a 2f 0a 09 09 09 61 6c 69 67  ng it */....alig
3a20: 6e 65 64 5f 6d 65 73 73 61 67 65 5f 62 6c 6f 63  ned_message_bloc
3a30: 6b 20 3d 20 28 75 6e 73 69 67 6e 65 64 2a 29 6d  k = (unsigned*)m
3a40: 73 67 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09  sg;...} else {..
3a50: 09 09 6d 65 6d 63 70 79 28 63 74 78 2d 3e 6d 65  ..memcpy(ctx->me
3a60: 73 73 61 67 65 2c 20 6d 73 67 2c 20 67 6f 73 74  ssage, msg, gost
3a70: 5f 62 6c 6f 63 6b 5f 73 69 7a 65 29 3b 0a 09 09  _block_size);...
3a80: 09 61 6c 69 67 6e 65 64 5f 6d 65 73 73 61 67 65  .aligned_message
3a90: 5f 62 6c 6f 63 6b 20 3d 20 28 75 6e 73 69 67 6e  _block = (unsign
3aa0: 65 64 2a 29 63 74 78 2d 3e 6d 65 73 73 61 67 65  ed*)ctx->message
3ab0: 3b 0a 09 09 7d 0a 0a 09 09 72 68 61 73 68 5f 67  ;...}....rhash_g
3ac0: 6f 73 74 5f 63 6f 6d 70 75 74 65 5f 73 75 6d 5f  ost_compute_sum_
3ad0: 61 6e 64 5f 68 61 73 68 28 63 74 78 2c 20 61 6c  and_hash(ctx, al
3ae0: 69 67 6e 65 64 5f 6d 65 73 73 61 67 65 5f 62 6c  igned_message_bl
3af0: 6f 63 6b 29 3b 0a 09 09 6d 73 67 20 2b 3d 20 67  ock);...msg += g
3b00: 6f 73 74 5f 62 6c 6f 63 6b 5f 73 69 7a 65 3b 0a  ost_block_size;.
3b10: 09 09 73 69 7a 65 20 2d 3d 20 67 6f 73 74 5f 62  ..size -= gost_b
3b20: 6c 6f 63 6b 5f 73 69 7a 65 3b 0a 09 7d 0a 09 69  lock_size;..}..i
3b30: 66 20 28 73 69 7a 65 29 20 7b 0a 09 09 2f 2a 20  f (size) {.../* 
3b40: 73 61 76 65 20 6c 65 66 74 6f 76 65 72 73 20 2a  save leftovers *
3b50: 2f 0a 09 09 6d 65 6d 63 70 79 28 63 74 78 2d 3e  /...memcpy(ctx->
3b60: 6d 65 73 73 61 67 65 2c 20 6d 73 67 2c 20 73 69  message, msg, si
3b70: 7a 65 29 3b 0a 09 7d 0a 7d 0a 0a 2f 2a 2a 0a 20  ze);..}.}../**. 
3b80: 2a 20 46 69 6e 69 73 68 20 68 61 73 68 69 6e 67  * Finish hashing
3b90: 20 61 6e 64 20 73 74 6f 72 65 20 6d 65 73 73 61   and store messa
3ba0: 67 65 20 64 69 67 65 73 74 20 69 6e 74 6f 20 67  ge digest into g
3bb0: 69 76 65 6e 20 61 72 72 61 79 2e 0a 20 2a 0a 20  iven array.. *. 
3bc0: 2a 20 40 70 61 72 61 6d 20 63 74 78 20 74 68 65  * @param ctx the
3bd0: 20 61 6c 67 6f 72 69 74 68 6d 20 63 6f 6e 74 65   algorithm conte
3be0: 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 75  xt containing cu
3bf0: 72 72 65 6e 74 20 68 61 73 68 69 6e 67 20 73 74  rrent hashing st
3c00: 61 74 65 0a 20 2a 20 40 70 61 72 61 6d 20 72 65  ate. * @param re
3c10: 73 75 6c 74 20 63 61 6c 63 75 6c 61 74 65 64 20  sult calculated 
3c20: 68 61 73 68 20 69 6e 20 62 69 6e 61 72 79 20 66  hash in binary f
3c30: 6f 72 6d 0a 20 2a 2f 0a 76 6f 69 64 20 72 68 61  orm. */.void rha
3c40: 73 68 5f 67 6f 73 74 5f 66 69 6e 61 6c 28 67 6f  sh_gost_final(go
3c50: 73 74 5f 63 74 78 20 2a 63 74 78 2c 20 75 6e 73  st_ctx *ctx, uns
3c60: 69 67 6e 65 64 20 63 68 61 72 20 72 65 73 75 6c  igned char resul
3c70: 74 5b 33 32 5d 29 0a 7b 0a 09 75 6e 73 69 67 6e  t[32]).{..unsign
3c80: 65 64 20 20 69 6e 64 65 78 20 3d 20 28 75 6e 73  ed  index = (uns
3c90: 69 67 6e 65 64 29 63 74 78 2d 3e 6c 65 6e 67 74  igned)ctx->lengt
3ca0: 68 20 26 20 33 31 3b 0a 09 75 6e 73 69 67 6e 65  h & 31;..unsigne
3cb0: 64 2a 20 6d 73 67 33 32 20 3d 20 28 75 6e 73 69  d* msg32 = (unsi
3cc0: 67 6e 65 64 2a 29 63 74 78 2d 3e 6d 65 73 73 61  gned*)ctx->messa
3cd0: 67 65 3b 0a 0a 09 2f 2a 20 70 61 64 20 74 68 65  ge;.../* pad the
3ce0: 20 6c 61 73 74 20 62 6c 6f 63 6b 20 77 69 74 68   last block with
3cf0: 20 7a 65 72 6f 65 73 20 61 6e 64 20 68 61 73 68   zeroes and hash
3d00: 20 69 74 20 2a 2f 0a 09 69 66 20 28 69 6e 64 65   it */..if (inde
3d10: 78 20 3e 20 30 29 20 7b 0a 09 09 6d 65 6d 73 65  x > 0) {...memse
3d20: 74 28 63 74 78 2d 3e 6d 65 73 73 61 67 65 20 2b  t(ctx->message +
3d30: 20 69 6e 64 65 78 2c 20 30 2c 20 33 32 20 2d 20   index, 0, 32 - 
3d40: 69 6e 64 65 78 29 3b 0a 09 09 72 68 61 73 68 5f  index);...rhash_
3d50: 67 6f 73 74 5f 63 6f 6d 70 75 74 65 5f 73 75 6d  gost_compute_sum
3d60: 5f 61 6e 64 5f 68 61 73 68 28 63 74 78 2c 20 6d  _and_hash(ctx, m
3d70: 73 67 33 32 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 68  sg32);..}.../* h
3d80: 61 73 68 20 74 68 65 20 6d 65 73 73 61 67 65 20  ash the message 
3d90: 6c 65 6e 67 74 68 20 61 6e 64 20 74 68 65 20 73  length and the s
3da0: 75 6d 20 2a 2f 0a 09 6d 73 67 33 32 5b 30 5d 20  um */..msg32[0] 
3db0: 3d 20 28 75 6e 73 69 67 6e 65 64 29 28 63 74 78  = (unsigned)(ctx
3dc0: 2d 3e 6c 65 6e 67 74 68 20 3c 3c 20 33 29 3b 0a  ->length << 3);.
3dd0: 09 6d 73 67 33 32 5b 31 5d 20 3d 20 28 75 6e 73  .msg32[1] = (uns
3de0: 69 67 6e 65 64 29 28 63 74 78 2d 3e 6c 65 6e 67  igned)(ctx->leng
3df0: 74 68 20 3e 3e 20 32 39 29 3b 0a 09 6d 65 6d 73  th >> 29);..mems
3e00: 65 74 28 6d 73 67 33 32 20 2b 20 32 2c 20 30 2c  et(msg32 + 2, 0,
3e10: 20 73 69 7a 65 6f 66 28 75 6e 73 69 67 6e 65 64   sizeof(unsigned
3e20: 29 2a 36 29 3b 0a 0a 09 72 68 61 73 68 5f 67 6f  )*6);...rhash_go
3e30: 73 74 5f 62 6c 6f 63 6b 5f 63 6f 6d 70 72 65 73  st_block_compres
3e40: 73 28 63 74 78 2c 20 6d 73 67 33 32 29 3b 0a 09  s(ctx, msg32);..
3e50: 72 68 61 73 68 5f 67 6f 73 74 5f 62 6c 6f 63 6b  rhash_gost_block
3e60: 5f 63 6f 6d 70 72 65 73 73 28 63 74 78 2c 20 63  _compress(ctx, c
3e70: 74 78 2d 3e 73 75 6d 29 3b 0a 0a 09 2f 2a 20 63  tx->sum);.../* c
3e80: 6f 6e 76 65 72 74 20 68 61 73 68 20 73 74 61 74  onvert hash stat
3e90: 65 20 74 6f 20 72 65 73 75 6c 74 20 62 79 74 65  e to result byte
3ea0: 73 20 2a 2f 0a 09 6c 65 33 32 5f 63 6f 70 79 28  s */..le32_copy(
3eb0: 72 65 73 75 6c 74 2c 20 30 2c 20 63 74 78 2d 3e  result, 0, ctx->
3ec0: 68 61 73 68 2c 20 67 6f 73 74 5f 68 61 73 68 5f  hash, gost_hash_
3ed0: 6c 65 6e 67 74 68 29 3b 0a 7d 0a 0a 23 69 66 64  length);.}..#ifd
3ee0: 65 66 20 47 45 4e 45 52 41 54 45 5f 47 4f 53 54  ef GENERATE_GOST
3ef0: 5f 4c 4f 4f 4b 55 50 5f 54 41 42 4c 45 0a 75 6e  _LOOKUP_TABLE.un
3f00: 73 69 67 6e 65 64 20 72 68 61 73 68 5f 67 6f 73  signed rhash_gos
3f10: 74 5f 73 62 6f 78 5b 34 5d 5b 32 35 36 5d 3b 0a  t_sbox[4][256];.
3f20: 75 6e 73 69 67 6e 65 64 20 72 68 61 73 68 5f 67  unsigned rhash_g
3f30: 6f 73 74 5f 73 62 6f 78 5f 63 72 79 70 74 70 72  ost_sbox_cryptpr
3f40: 6f 5b 34 5d 5b 32 35 36 5d 3b 0a 0a 2f 2a 2a 0a  o[4][256];../**.
3f50: 20 2a 20 43 61 6c 63 75 6c 61 74 65 20 61 20 6c   * Calculate a l
3f60: 6f 6f 6b 75 70 20 74 61 62 6c 65 20 66 72 6f 6d  ookup table from
3f70: 20 53 2d 42 6f 78 65 73 2e 0a 20 2a 20 41 20 73   S-Boxes.. * A s
3f80: 75 62 73 74 69 74 75 74 69 6f 6e 20 74 61 62 6c  ubstitution tabl
3f90: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 70 65  e is used to spe
3fa0: 65 64 20 75 70 20 68 61 73 68 20 63 61 6c 63 75  ed up hash calcu
3fb0: 6c 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 40 70  lation.. *. * @p
3fc0: 61 72 61 6d 20 6f 75 74 20 70 6f 69 6e 74 65 72  aram out pointer
3fd0: 20 74 6f 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74   to the lookup t
3fe0: 61 62 6c 65 20 74 6f 20 66 69 6c 6c 0a 20 2a 20  able to fill. * 
3ff0: 40 70 61 72 61 6d 20 73 72 63 20 70 6f 69 6e 74  @param src point
4000: 65 72 20 74 6f 20 65 69 67 68 74 20 53 2d 42 6f  er to eight S-Bo
4010: 78 65 73 20 74 6f 20 66 69 6c 6c 20 74 68 65 20  xes to fill the 
4020: 74 61 62 6c 65 20 66 72 6f 6d 0a 20 2a 2f 0a 73  table from. */.s
4030: 74 61 74 69 63 20 76 6f 69 64 20 72 68 61 73 68  tatic void rhash
4040: 5f 67 6f 73 74 5f 66 69 6c 6c 5f 73 62 6f 78 28  _gost_fill_sbox(
4050: 75 6e 73 69 67 6e 65 64 20 6f 75 74 5b 34 5d 5b  unsigned out[4][
4060: 32 35 36 5d 2c 20 63 6f 6e 73 74 20 75 6e 73 69  256], const unsi
4070: 67 6e 65 64 20 63 68 61 72 20 73 72 63 5b 38 5d  gned char src[8]
4080: 5b 31 36 5d 29 0a 7b 0a 09 69 6e 74 20 61 2c 20  [16]).{..int a, 
4090: 62 2c 20 69 3b 0a 09 75 6e 73 69 67 6e 65 64 20  b, i;..unsigned 
40a0: 6c 6f 6e 67 20 61 78 2c 20 62 78 2c 20 63 78 2c  long ax, bx, cx,
40b0: 20 64 78 3b 0a 0a 09 66 6f 72 20 28 69 20 3d 20   dx;...for (i = 
40c0: 30 2c 20 61 20 3d 20 30 3b 20 61 20 3c 20 31 36  0, a = 0; a < 16
40d0: 3b 20 61 2b 2b 29 20 7b 0a 09 09 61 78 20 3d 20  ; a++) {...ax = 
40e0: 28 75 6e 73 69 67 6e 65 64 29 73 72 63 5b 31 5d  (unsigned)src[1]
40f0: 5b 61 5d 20 3c 3c 20 31 35 3b 0a 09 09 62 78 20  [a] << 15;...bx 
4100: 3d 20 28 75 6e 73 69 67 6e 65 64 29 73 72 63 5b  = (unsigned)src[
4110: 33 5d 5b 61 5d 20 3c 3c 20 32 33 3b 0a 09 09 63  3][a] << 23;...c
4120: 78 20 3d 20 52 4f 54 4c 33 32 28 28 75 6e 73 69  x = ROTL32((unsi
4130: 67 6e 65 64 29 73 72 63 5b 35 5d 5b 61 5d 2c 20  gned)src[5][a], 
4140: 33 31 29 3b 0a 09 09 64 78 20 3d 20 28 75 6e 73  31);...dx = (uns
4150: 69 67 6e 65 64 29 73 72 63 5b 37 5d 5b 61 5d 20  igned)src[7][a] 
4160: 3c 3c 20 37 3b 0a 0a 09 09 66 6f 72 20 28 62 20  << 7;....for (b 
4170: 3d 20 30 3b 20 62 20 3c 20 31 36 3b 20 62 2b 2b  = 0; b < 16; b++
4180: 2c 20 69 2b 2b 29 20 7b 0a 09 09 09 6f 75 74 5b  , i++) {....out[
4190: 30 5d 5b 69 5d 20 3d 20 61 78 20 7c 20 28 28 75  0][i] = ax | ((u
41a0: 6e 73 69 67 6e 65 64 29 73 72 63 5b 30 5d 5b 62  nsigned)src[0][b
41b0: 5d 20 3c 3c 20 31 31 29 3b 0a 09 09 09 6f 75 74  ] << 11);....out
41c0: 5b 31 5d 5b 69 5d 20 3d 20 62 78 20 7c 20 28 28  [1][i] = bx | ((
41d0: 75 6e 73 69 67 6e 65 64 29 73 72 63 5b 32 5d 5b  unsigned)src[2][
41e0: 62 5d 20 3c 3c 20 31 39 29 3b 0a 09 09 09 6f 75  b] << 19);....ou
41f0: 74 5b 32 5d 5b 69 5d 20 3d 20 63 78 20 7c 20 28  t[2][i] = cx | (
4200: 28 75 6e 73 69 67 6e 65 64 29 73 72 63 5b 34 5d  (unsigned)src[4]
4210: 5b 62 5d 20 3c 3c 20 32 37 29 3b 0a 09 09 09 6f  [b] << 27);....o
4220: 75 74 5b 33 5d 5b 69 5d 20 3d 20 64 78 20 7c 20  ut[3][i] = dx | 
4230: 28 28 75 6e 73 69 67 6e 65 64 29 73 72 63 5b 36  ((unsigned)src[6
4240: 5d 5b 62 5d 20 3c 3c 20 33 29 3b 0a 09 09 7d 0a  ][b] << 3);...}.
4250: 09 7d 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 49 6e 69  .}.}../**. * Ini
4260: 74 69 61 6c 69 7a 65 20 74 68 65 20 47 4f 53 54  tialize the GOST
4270: 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 73 20 66   lookup tables f
4280: 6f 72 20 62 6f 74 68 20 70 61 72 61 6d 65 74 65  or both paramete
4290: 72 73 20 73 65 74 73 2e 0a 20 2a 20 54 77 6f 20  rs sets.. * Two 
42a0: 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 73 20 63 6f  lookup tables co
42b0: 6e 74 61 69 6e 20 38 20 4b 69 42 20 69 6e 20 74  ntain 8 KiB in t
42c0: 6f 74 61 6c 2c 20 73 6f 20 63 61 6c 63 75 6c 61  otal, so calcula
42d0: 74 69 6e 67 0a 20 2a 20 74 68 65 6d 20 61 74 20  ting. * them at 
42e0: 72 69 6e 65 2d 74 69 6d 65 20 63 61 6e 20 73 61  rine-time can sa
42f0: 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63  ve a little spac
4300: 65 20 69 6e 20 74 68 65 20 65 78 75 74 61 62 6c  e in the exutabl
4310: 65 20 66 69 6c 65 0a 20 2a 20 69 6e 20 74 72 61  e file. * in tra
4320: 64 65 20 6f 66 20 63 6f 6e 73 75 6d 69 6e 67 20  de of consuming 
4330: 73 6f 6d 65 20 74 69 6d 65 20 61 74 20 70 6f 67  some time at pog
4340: 72 61 6d 20 73 74 61 72 74 2e 0a 20 2a 2f 0a 76  ram start.. */.v
4350: 6f 69 64 20 72 68 61 73 68 5f 67 6f 73 74 5f 69  oid rhash_gost_i
4360: 6e 69 74 5f 74 61 62 6c 65 28 76 6f 69 64 29 0a  nit_table(void).
4370: 7b 0a 09 2f 2a 20 54 65 73 74 20 70 61 72 61 6d  {../* Test param
4380: 65 74 65 72 73 20 73 65 74 2e 20 45 69 67 68 74  eters set. Eight
4390: 20 34 2d 62 69 74 20 53 2d 42 6f 78 65 73 20 64   4-bit S-Boxes d
43a0: 65 66 69 6e 65 64 20 62 79 20 47 4f 53 54 20 52  efined by GOST R
43b0: 20 33 34 2e 31 30 2d 39 34 0a 09 20 2a 20 73 74   34.10-94.. * st
43c0: 61 6e 64 61 72 64 20 66 6f 72 20 74 65 73 74 69  andard for testi
43d0: 6e 67 20 74 68 65 20 68 61 73 68 20 66 75 6e 63  ng the hash func
43e0: 74 69 6f 6e 2e 0a 09 20 2a 20 41 6c 73 6f 20 67  tion... * Also g
43f0: 69 76 65 6e 20 62 79 20 52 46 43 20 34 33 35 37  iven by RFC 4357
4400: 20 73 65 63 74 69 6f 6e 20 31 31 2e 32 20 2a 2f   section 11.2 */
4410: 0a 09 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75  ..static const u
4420: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 62 6f  nsigned char sbo
4430: 78 5b 38 5d 5b 31 36 5d 20 3d 20 7b 0a 09 09 7b  x[8][16] = {...{
4440: 20 20 34 2c 20 31 30 2c 20 20 39 2c 20 20 32 2c    4, 10,  9,  2,
4450: 20 31 33 2c 20 20 38 2c 20 20 30 2c 20 31 34 2c   13,  8,  0, 14,
4460: 20 20 36 2c 20 31 31 2c 20 20 31 2c 20 31 32 2c    6, 11,  1, 12,
4470: 20 20 37 2c 20 31 35 2c 20 20 35 2c 20 20 33 20    7, 15,  5,  3 
4480: 7d 2c 0a 09 09 7b 20 31 34 2c 20 31 31 2c 20 20  },...{ 14, 11,  
4490: 34 2c 20 31 32 2c 20 20 36 2c 20 31 33 2c 20 31  4, 12,  6, 13, 1
44a0: 35 2c 20 31 30 2c 20 20 32 2c 20 20 33 2c 20 20  5, 10,  2,  3,  
44b0: 38 2c 20 20 31 2c 20 20 30 2c 20 20 37 2c 20 20  8,  1,  0,  7,  
44c0: 35 2c 20 20 39 20 7d 2c 0a 09 09 7b 20 20 35 2c  5,  9 },...{  5,
44d0: 20 20 38 2c 20 20 31 2c 20 31 33 2c 20 31 30 2c    8,  1, 13, 10,
44e0: 20 20 33 2c 20 20 34 2c 20 20 32 2c 20 31 34 2c    3,  4,  2, 14,
44f0: 20 31 35 2c 20 31 32 2c 20 20 37 2c 20 20 36 2c   15, 12,  7,  6,
4500: 20 20 30 2c 20 20 39 2c 20 31 31 20 7d 2c 0a 09    0,  9, 11 },..
4510: 09 7b 20 20 37 2c 20 31 33 2c 20 31 30 2c 20 20  .{  7, 13, 10,  
4520: 31 2c 20 20 30 2c 20 20 38 2c 20 20 39 2c 20 31  1,  0,  8,  9, 1
4530: 35 2c 20 31 34 2c 20 20 34 2c 20 20 36 2c 20 31  5, 14,  4,  6, 1
4540: 32 2c 20 31 31 2c 20 20 32 2c 20 20 35 2c 20 20  2, 11,  2,  5,  
4550: 33 20 7d 2c 0a 09 09 7b 20 20 36 2c 20 31 32 2c  3 },...{  6, 12,
4560: 20 20 37 2c 20 20 31 2c 20 20 35 2c 20 31 35 2c    7,  1,  5, 15,
4570: 20 31 33 2c 20 20 38 2c 20 20 34 2c 20 31 30 2c   13,  8,  4, 10,
4580: 20 20 39 2c 20 31 34 2c 20 20 30 2c 20 20 33 2c    9, 14,  0,  3,
4590: 20 31 31 2c 20 20 32 20 7d 2c 0a 09 09 7b 20 20   11,  2 },...{  
45a0: 34 2c 20 31 31 2c 20 31 30 2c 20 20 30 2c 20 20  4, 11, 10,  0,  
45b0: 37 2c 20 20 32 2c 20 20 31 2c 20 31 33 2c 20 20  7,  2,  1, 13,  
45c0: 33 2c 20 20 36 2c 20 20 38 2c 20 20 35 2c 20 20  3,  6,  8,  5,  
45d0: 39 2c 20 31 32 2c 20 31 35 2c 20 31 34 20 7d 2c  9, 12, 15, 14 },
45e0: 0a 09 09 7b 20 31 33 2c 20 31 31 2c 20 20 34 2c  ...{ 13, 11,  4,
45f0: 20 20 31 2c 20 20 33 2c 20 31 35 2c 20 20 35 2c    1,  3, 15,  5,
4600: 20 20 39 2c 20 20 30 2c 20 31 30 2c 20 31 34 2c    9,  0, 10, 14,
4610: 20 20 37 2c 20 20 36 2c 20 20 38 2c 20 20 32 2c    7,  6,  8,  2,
4620: 20 31 32 20 7d 2c 0a 09 09 7b 20 20 31 2c 20 31   12 },...{  1, 1
4630: 35 2c 20 31 33 2c 20 20 30 2c 20 20 35 2c 20 20  5, 13,  0,  5,  
4640: 37 2c 20 31 30 2c 20 20 34 2c 20 20 39 2c 20 20  7, 10,  4,  9,  
4650: 32 2c 20 20 33 2c 20 31 34 2c 20 20 36 2c 20 31  2,  3, 14,  6, 1
4660: 31 2c 20 20 38 2c 20 31 32 20 7d 0a 09 7d 3b 0a  1,  8, 12 }..};.
4670: 0a 09 2f 2a 20 50 61 72 61 6d 65 74 65 72 20 73  ../* Parameter s
4680: 65 74 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 62  et recommended b
4690: 79 20 52 46 43 20 34 33 35 37 2e 0a 09 20 2a 20  y RFC 4357... * 
46a0: 45 69 67 68 74 20 34 2d 62 69 74 20 53 2d 42 6f  Eight 4-bit S-Bo
46b0: 78 65 73 20 61 73 20 64 65 66 69 6e 65 64 20 62  xes as defined b
46c0: 79 20 52 46 43 20 34 33 35 37 20 73 65 63 74 69  y RFC 4357 secti
46d0: 6f 6e 20 31 31 2e 32 20 2a 2f 0a 09 73 74 61 74  on 11.2 */..stat
46e0: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
46f0: 64 20 63 68 61 72 20 73 62 6f 78 5f 63 72 79 70  d char sbox_cryp
4700: 74 70 72 6f 5b 38 5d 5b 31 36 5d 20 3d 20 7b 0a  tpro[8][16] = {.
4710: 09 09 7b 20 31 30 2c 20 20 34 2c 20 20 35 2c 20  ..{ 10,  4,  5, 
4720: 20 36 2c 20 20 38 2c 20 20 31 2c 20 20 33 2c 20   6,  8,  1,  3, 
4730: 20 37 2c 20 31 33 2c 20 31 32 2c 20 31 34 2c 20   7, 13, 12, 14, 
4740: 20 30 2c 20 20 39 2c 20 20 32 2c 20 31 31 2c 20   0,  9,  2, 11, 
4750: 31 35 20 7d 2c 0a 09 09 7b 20 20 35 2c 20 31 35  15 },...{  5, 15
4760: 2c 20 20 34 2c 20 20 30 2c 20 20 32 2c 20 31 33  ,  4,  0,  2, 13
4770: 2c 20 31 31 2c 20 20 39 2c 20 20 31 2c 20 20 37  , 11,  9,  1,  7
4780: 2c 20 20 36 2c 20 20 33 2c 20 31 32 2c 20 31 34  ,  6,  3, 12, 14
4790: 2c 20 31 30 2c 20 20 38 20 7d 2c 0a 09 09 7b 20  , 10,  8 },...{ 
47a0: 20 37 2c 20 31 35 2c 20 31 32 2c 20 31 34 2c 20   7, 15, 12, 14, 
47b0: 20 39 2c 20 20 34 2c 20 20 31 2c 20 20 30 2c 20   9,  4,  1,  0, 
47c0: 20 33 2c 20 31 31 2c 20 20 35 2c 20 20 32 2c 20   3, 11,  5,  2, 
47d0: 20 36 2c 20 31 30 2c 20 20 38 2c 20 31 33 20 7d   6, 10,  8, 13 }
47e0: 2c 0a 09 09 7b 20 20 34 2c 20 31 30 2c 20 20 37  ,...{  4, 10,  7
47f0: 2c 20 31 32 2c 20 20 30 2c 20 31 35 2c 20 20 32  , 12,  0, 15,  2
4800: 2c 20 20 38 2c 20 31 34 2c 20 20 31 2c 20 20 36  ,  8, 14,  1,  6
4810: 2c 20 20 35 2c 20 31 33 2c 20 31 31 2c 20 20 39  ,  5, 13, 11,  9
4820: 2c 20 20 33 20 7d 2c 0a 09 09 7b 20 20 37 2c 20  ,  3 },...{  7, 
4830: 20 36 2c 20 20 34 2c 20 31 31 2c 20 20 39 2c 20   6,  4, 11,  9, 
4840: 31 32 2c 20 20 32 2c 20 31 30 2c 20 20 31 2c 20  12,  2, 10,  1, 
4850: 20 38 2c 20 20 30 2c 20 31 34 2c 20 31 35 2c 20   8,  0, 14, 15, 
4860: 31 33 2c 20 20 33 2c 20 20 35 20 7d 2c 0a 09 09  13,  3,  5 },...
4870: 7b 20 20 37 2c 20 20 36 2c 20 20 32 2c 20 20 34  {  7,  6,  2,  4
4880: 2c 20 31 33 2c 20 20 39 2c 20 31 35 2c 20 20 30  , 13,  9, 15,  0
4890: 2c 20 31 30 2c 20 20 31 2c 20 20 35 2c 20 31 31  , 10,  1,  5, 11
48a0: 2c 20 20 38 2c 20 31 34 2c 20 31 32 2c 20 20 33  ,  8, 14, 12,  3
48b0: 20 7d 2c 0a 09 09 7b 20 31 33 2c 20 31 34 2c 20   },...{ 13, 14, 
48c0: 20 34 2c 20 20 31 2c 20 20 37 2c 20 20 30 2c 20   4,  1,  7,  0, 
48d0: 20 35 2c 20 31 30 2c 20 20 33 2c 20 31 32 2c 20   5, 10,  3, 12, 
48e0: 20 38 2c 20 31 35 2c 20 20 36 2c 20 20 32 2c 20   8, 15,  6,  2, 
48f0: 20 39 2c 20 31 31 20 7d 2c 0a 09 09 7b 20 20 31   9, 11 },...{  1
4900: 2c 20 20 33 2c 20 31 30 2c 20 20 39 2c 20 20 35  ,  3, 10,  9,  5
4910: 2c 20 31 31 2c 20 20 34 2c 20 31 35 2c 20 20 38  , 11,  4, 15,  8
4920: 2c 20 20 36 2c 20 20 37 2c 20 31 34 2c 20 31 33  ,  6,  7, 14, 13
4930: 2c 20 20 30 2c 20 20 32 2c 20 31 32 20 7d 0a 09  ,  0,  2, 12 }..
4940: 7d 3b 0a 0a 09 72 68 61 73 68 5f 67 6f 73 74 5f  };...rhash_gost_
4950: 66 69 6c 6c 5f 73 62 6f 78 28 72 68 61 73 68 5f  fill_sbox(rhash_
4960: 67 6f 73 74 5f 73 62 6f 78 2c 20 73 62 6f 78 29  gost_sbox, sbox)
4970: 3b 0a 09 72 68 61 73 68 5f 67 6f 73 74 5f 66 69  ;..rhash_gost_fi
4980: 6c 6c 5f 73 62 6f 78 28 72 68 61 73 68 5f 67 6f  ll_sbox(rhash_go
4990: 73 74 5f 73 62 6f 78 5f 63 72 79 70 74 70 72 6f  st_sbox_cryptpro
49a0: 2c 20 73 62 6f 78 5f 63 72 79 70 74 70 72 6f 29  , sbox_cryptpro)
49b0: 3b 0a 7d 0a 0a 23 65 6c 73 65 20 2f 2a 20 47 45  ;.}..#else /* GE
49c0: 4e 45 52 41 54 45 5f 47 4f 53 54 5f 4c 4f 4f 4b  NERATE_GOST_LOOK
49d0: 55 50 5f 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 20  UP_TABLE */../* 
49e0: 70 72 65 2d 69 6e 69 74 69 61 6c 69 7a 65 64 20  pre-initialized 
49f0: 47 4f 53 54 20 6c 6f 6f 6b 75 70 20 74 61 62 6c  GOST lookup tabl
4a00: 65 73 20 62 61 73 65 64 20 6f 6e 20 72 6f 74 61  es based on rota
4a10: 74 65 64 20 53 2d 42 6f 78 20 2a 2f 0a 75 6e 73  ted S-Box */.uns
4a20: 69 67 6e 65 64 20 72 68 61 73 68 5f 67 6f 73 74  igned rhash_gost
4a30: 5f 73 62 6f 78 5b 34 5d 5b 32 35 36 5d 20 3d 20  _sbox[4][256] = 
4a40: 7b 0a 09 7b 0a 09 09 30 78 37 32 30 30 30 2c 20  {..{...0x72000, 
4a50: 30 78 37 35 30 30 30 2c 20 30 78 37 34 38 30 30  0x75000, 0x74800
4a60: 2c 20 30 78 37 31 30 30 30 2c 20 30 78 37 36 38  , 0x71000, 0x768
4a70: 30 30 2c 0a 09 09 30 78 37 34 30 30 30 2c 20 30  00,...0x74000, 0
4a80: 78 37 30 30 30 30 2c 20 30 78 37 37 30 30 30 2c  x70000, 0x77000,
4a90: 20 30 78 37 33 30 30 30 2c 20 30 78 37 35 38 30   0x73000, 0x7580
4aa0: 30 2c 0a 09 09 30 78 37 30 38 30 30 2c 20 30 78  0,...0x70800, 0x
4ab0: 37 36 30 30 30 2c 20 30 78 37 33 38 30 30 2c 20  76000, 0x73800, 
4ac0: 30 78 37 37 38 30 30 2c 20 30 78 37 32 38 30 30  0x77800, 0x72800
4ad0: 2c 0a 09 09 30 78 37 31 38 30 30 2c 20 30 78 35  ,...0x71800, 0x5
4ae0: 41 30 30 30 2c 20 30 78 35 44 30 30 30 2c 20 30  A000, 0x5D000, 0
4af0: 78 35 43 38 30 30 2c 20 30 78 35 39 30 30 30 2c  x5C800, 0x59000,
4b00: 0a 09 09 30 78 35 45 38 30 30 2c 20 30 78 35 43  ...0x5E800, 0x5C
4b10: 30 30 30 2c 20 30 78 35 38 30 30 30 2c 20 30 78  000, 0x58000, 0x
4b20: 35 46 30 30 30 2c 20 30 78 35 42 30 30 30 2c 0a  5F000, 0x5B000,.
4b30: 09 09 30 78 35 44 38 30 30 2c 20 30 78 35 38 38  ..0x5D800, 0x588
4b40: 30 30 2c 20 30 78 35 45 30 30 30 2c 20 30 78 35  00, 0x5E000, 0x5
4b50: 42 38 30 30 2c 20 30 78 35 46 38 30 30 2c 0a 09  B800, 0x5F800,..
4b60: 09 30 78 35 41 38 30 30 2c 20 30 78 35 39 38 30  .0x5A800, 0x5980
4b70: 30 2c 20 30 78 32 32 30 30 30 2c 20 30 78 32 35  0, 0x22000, 0x25
4b80: 30 30 30 2c 20 30 78 32 34 38 30 30 2c 0a 09 09  000, 0x24800,...
4b90: 30 78 32 31 30 30 30 2c 20 30 78 32 36 38 30 30  0x21000, 0x26800
4ba0: 2c 20 30 78 32 34 30 30 30 2c 20 30 78 32 30 30  , 0x24000, 0x200
4bb0: 30 30 2c 20 30 78 32 37 30 30 30 2c 0a 09 09 30  00, 0x27000,...0
4bc0: 78 32 33 30 30 30 2c 20 30 78 32 35 38 30 30 2c  x23000, 0x25800,
4bd0: 20 30 78 32 30 38 30 30 2c 20 30 78 32 36 30 30   0x20800, 0x2600
4be0: 30 2c 20 30 78 32 33 38 30 30 2c 0a 09 09 30 78  0, 0x23800,...0x
4bf0: 32 37 38 30 30 2c 20 30 78 32 32 38 30 30 2c 20  27800, 0x22800, 
4c00: 30 78 32 31 38 30 30 2c 20 30 78 36 32 30 30 30  0x21800, 0x62000
4c10: 2c 20 30 78 36 35 30 30 30 2c 0a 09 09 30 78 36  , 0x65000,...0x6
4c20: 34 38 30 30 2c 20 30 78 36 31 30 30 30 2c 20 30  4800, 0x61000, 0
4c30: 78 36 36 38 30 30 2c 20 30 78 36 34 30 30 30 2c  x66800, 0x64000,
4c40: 20 30 78 36 30 30 30 30 2c 0a 09 09 30 78 36 37   0x60000,...0x67
4c50: 30 30 30 2c 20 30 78 36 33 30 30 30 2c 20 30 78  000, 0x63000, 0x
4c60: 36 35 38 30 30 2c 20 30 78 36 30 38 30 30 2c 20  65800, 0x60800, 
4c70: 30 78 36 36 30 30 30 2c 0a 09 09 30 78 36 33 38  0x66000,...0x638
4c80: 30 30 2c 20 30 78 36 37 38 30 30 2c 20 30 78 36  00, 0x67800, 0x6
4c90: 32 38 30 30 2c 20 30 78 36 31 38 30 30 2c 20 30  2800, 0x61800, 0
4ca0: 78 33 32 30 30 30 2c 0a 09 09 30 78 33 35 30 30  x32000,...0x3500
4cb0: 30 2c 20 30 78 33 34 38 30 30 2c 20 30 78 33 31  0, 0x34800, 0x31
4cc0: 30 30 30 2c 20 30 78 33 36 38 30 30 2c 20 30 78  000, 0x36800, 0x
4cd0: 33 34 30 30 30 2c 0a 09 09 30 78 33 30 30 30 30  34000,...0x30000
4ce0: 2c 20 30 78 33 37 30 30 30 2c 20 30 78 33 33 30  , 0x37000, 0x330
4cf0: 30 30 2c 20 30 78 33 35 38 30 30 2c 20 30 78 33  00, 0x35800, 0x3
4d00: 30 38 30 30 2c 0a 09 09 30 78 33 36 30 30 30 2c  0800,...0x36000,
4d10: 20 30 78 33 33 38 30 30 2c 20 30 78 33 37 38 30   0x33800, 0x3780
4d20: 30 2c 20 30 78 33 32 38 30 30 2c 20 30 78 33 31  0, 0x32800, 0x31
4d30: 38 30 30 2c 0a 09 09 30 78 36 41 30 30 30 2c 20  800,...0x6A000, 
4d40: 30 78 36 44 30 30 30 2c 20 30 78 36 43 38 30 30  0x6D000, 0x6C800
4d50: 2c 20 30 78 36 39 30 30 30 2c 20 30 78 36 45 38  , 0x69000, 0x6E8
4d60: 30 30 2c 0a 09 09 30 78 36 43 30 30 30 2c 20 30  00,...0x6C000, 0
4d70: 78 36 38 30 30 30 2c 20 30 78 36 46 30 30 30 2c  x68000, 0x6F000,
4d80: 20 30 78 36 42 30 30 30 2c 20 30 78 36 44 38 30   0x6B000, 0x6D80
4d90: 30 2c 0a 09 09 30 78 36 38 38 30 30 2c 20 30 78  0,...0x68800, 0x
4da0: 36 45 30 30 30 2c 20 30 78 36 42 38 30 30 2c 20  6E000, 0x6B800, 
4db0: 30 78 36 46 38 30 30 2c 20 30 78 36 41 38 30 30  0x6F800, 0x6A800
4dc0: 2c 0a 09 09 30 78 36 39 38 30 30 2c 20 30 78 37  ,...0x69800, 0x7
4dd0: 41 30 30 30 2c 20 30 78 37 44 30 30 30 2c 20 30  A000, 0x7D000, 0
4de0: 78 37 43 38 30 30 2c 20 30 78 37 39 30 30 30 2c  x7C800, 0x79000,
4df0: 0a 09 09 30 78 37 45 38 30 30 2c 20 30 78 37 43  ...0x7E800, 0x7C
4e00: 30 30 30 2c 20 30 78 37 38 30 30 30 2c 20 30 78  000, 0x78000, 0x
4e10: 37 46 30 30 30 2c 20 30 78 37 42 30 30 30 2c 0a  7F000, 0x7B000,.
4e20: 09 09 30 78 37 44 38 30 30 2c 20 30 78 37 38 38  ..0x7D800, 0x788
4e30: 30 30 2c 20 30 78 37 45 30 30 30 2c 20 30 78 37  00, 0x7E000, 0x7
4e40: 42 38 30 30 2c 20 30 78 37 46 38 30 30 2c 0a 09  B800, 0x7F800,..
4e50: 09 30 78 37 41 38 30 30 2c 20 30 78 37 39 38 30  .0x7A800, 0x7980
4e60: 30 2c 20 30 78 35 32 30 30 30 2c 20 30 78 35 35  0, 0x52000, 0x55
4e70: 30 30 30 2c 20 30 78 35 34 38 30 30 2c 0a 09 09  000, 0x54800,...
4e80: 30 78 35 31 30 30 30 2c 20 30 78 35 36 38 30 30  0x51000, 0x56800
4e90: 2c 20 30 78 35 34 30 30 30 2c 20 30 78 35 30 30  , 0x54000, 0x500
4ea0: 30 30 2c 20 30 78 35 37 30 30 30 2c 0a 09 09 30  00, 0x57000,...0
4eb0: 78 35 33 30 30 30 2c 20 30 78 35 35 38 30 30 2c  x53000, 0x55800,
4ec0: 20 30 78 35 30 38 30 30 2c 20 30 78 35 36 30 30   0x50800, 0x5600
4ed0: 30 2c 20 30 78 35 33 38 30 30 2c 0a 09 09 30 78  0, 0x53800,...0x
4ee0: 35 37 38 30 30 2c 20 30 78 35 32 38 30 30 2c 20  57800, 0x52800, 
4ef0: 30 78 35 31 38 30 30 2c 20 30 78 31 32 30 30 30  0x51800, 0x12000
4f00: 2c 20 30 78 31 35 30 30 30 2c 0a 09 09 30 78 31  , 0x15000,...0x1
4f10: 34 38 30 30 2c 20 30 78 31 31 30 30 30 2c 20 30  4800, 0x11000, 0
4f20: 78 31 36 38 30 30 2c 20 30 78 31 34 30 30 30 2c  x16800, 0x14000,
4f30: 20 30 78 31 30 30 30 30 2c 0a 09 09 30 78 31 37   0x10000,...0x17
4f40: 30 30 30 2c 20 30 78 31 33 30 30 30 2c 20 30 78  000, 0x13000, 0x
4f50: 31 35 38 30 30 2c 20 30 78 31 30 38 30 30 2c 20  15800, 0x10800, 
4f60: 30 78 31 36 30 30 30 2c 0a 09 09 30 78 31 33 38  0x16000,...0x138
4f70: 30 30 2c 20 30 78 31 37 38 30 30 2c 20 30 78 31  00, 0x17800, 0x1
4f80: 32 38 30 30 2c 20 30 78 31 31 38 30 30 2c 20 30  2800, 0x11800, 0
4f90: 78 31 41 30 30 30 2c 0a 09 09 30 78 31 44 30 30  x1A000,...0x1D00
4fa0: 30 2c 20 30 78 31 43 38 30 30 2c 20 30 78 31 39  0, 0x1C800, 0x19
4fb0: 30 30 30 2c 20 30 78 31 45 38 30 30 2c 20 30 78  000, 0x1E800, 0x
4fc0: 31 43 30 30 30 2c 0a 09 09 30 78 31 38 30 30 30  1C000,...0x18000
4fd0: 2c 20 30 78 31 46 30 30 30 2c 20 30 78 31 42 30  , 0x1F000, 0x1B0
4fe0: 30 30 2c 20 30 78 31 44 38 30 30 2c 20 30 78 31  00, 0x1D800, 0x1
4ff0: 38 38 30 30 2c 0a 09 09 30 78 31 45 30 30 30 2c  8800,...0x1E000,
5000: 20 30 78 31 42 38 30 30 2c 20 30 78 31 46 38 30   0x1B800, 0x1F80
5010: 30 2c 20 30 78 31 41 38 30 30 2c 20 30 78 31 39  0, 0x1A800, 0x19
5020: 38 30 30 2c 0a 09 09 30 78 34 32 30 30 30 2c 20  800,...0x42000, 
5030: 30 78 34 35 30 30 30 2c 20 30 78 34 34 38 30 30  0x45000, 0x44800
5040: 2c 20 30 78 34 31 30 30 30 2c 20 30 78 34 36 38  , 0x41000, 0x468
5050: 30 30 2c 0a 09 09 30 78 34 34 30 30 30 2c 20 30  00,...0x44000, 0
5060: 78 34 30 30 30 30 2c 20 30 78 34 37 30 30 30 2c  x40000, 0x47000,
5070: 20 30 78 34 33 30 30 30 2c 20 30 78 34 35 38 30   0x43000, 0x4580
5080: 30 2c 0a 09 09 30 78 34 30 38 30 30 2c 20 30 78  0,...0x40800, 0x
5090: 34 36 30 30 30 2c 20 30 78 34 33 38 30 30 2c 20  46000, 0x43800, 
50a0: 30 78 34 37 38 30 30 2c 20 30 78 34 32 38 30 30  0x47800, 0x42800
50b0: 2c 0a 09 09 30 78 34 31 38 30 30 2c 20 30 78 41  ,...0x41800, 0xA
50c0: 30 30 30 2c 20 20 30 78 44 30 30 30 2c 20 20 30  000,  0xD000,  0
50d0: 78 43 38 30 30 2c 20 20 30 78 39 30 30 30 2c 0a  xC800,  0x9000,.
50e0: 09 09 30 78 45 38 30 30 2c 20 20 30 78 43 30 30  ..0xE800,  0xC00
50f0: 30 2c 20 20 30 78 38 30 30 30 2c 20 20 30 78 46  0,  0x8000,  0xF
5100: 30 30 30 2c 20 20 30 78 42 30 30 30 2c 0a 09 09  000,  0xB000,...
5110: 30 78 44 38 30 30 2c 20 20 30 78 38 38 30 30 2c  0xD800,  0x8800,
5120: 20 20 30 78 45 30 30 30 2c 20 20 30 78 42 38 30    0xE000,  0xB80
5130: 30 2c 20 20 30 78 46 38 30 30 2c 0a 09 09 30 78  0,  0xF800,...0x
5140: 41 38 30 30 2c 20 20 30 78 39 38 30 30 2c 20 20  A800,  0x9800,  
5150: 30 78 32 30 30 30 2c 20 20 30 78 35 30 30 30 2c  0x2000,  0x5000,
5160: 20 20 30 78 34 38 30 30 2c 0a 09 09 30 78 31 30    0x4800,...0x10
5170: 30 30 2c 20 20 30 78 36 38 30 30 2c 20 20 30 78  00,  0x6800,  0x
5180: 34 30 30 30 2c 20 20 30 78 30 2c 20 20 20 20 20  4000,  0x0,     
5190: 30 78 37 30 30 30 2c 0a 09 09 30 78 33 30 30 30  0x7000,...0x3000
51a0: 2c 20 20 30 78 35 38 30 30 2c 20 20 30 78 38 30  ,  0x5800,  0x80
51b0: 30 2c 20 20 20 30 78 36 30 30 30 2c 20 20 30 78  0,   0x6000,  0x
51c0: 33 38 30 30 2c 0a 09 09 30 78 37 38 30 30 2c 20  3800,...0x7800, 
51d0: 20 30 78 32 38 30 30 2c 20 20 30 78 31 38 30 30   0x2800,  0x1800
51e0: 2c 20 20 30 78 33 41 30 30 30 2c 20 30 78 33 44  ,  0x3A000, 0x3D
51f0: 30 30 30 2c 0a 09 09 30 78 33 43 38 30 30 2c 20  000,...0x3C800, 
5200: 30 78 33 39 30 30 30 2c 20 30 78 33 45 38 30 30  0x39000, 0x3E800
5210: 2c 20 30 78 33 43 30 30 30 2c 20 30 78 33 38 30  , 0x3C000, 0x380
5220: 30 30 2c 0a 09 09 30 78 33 46 30 30 30 2c 20 30  00,...0x3F000, 0
5230: 78 33 42 30 30 30 2c 20 30 78 33 44 38 30 30 2c  x3B000, 0x3D800,
5240: 20 30 78 33 38 38 30 30 2c 20 30 78 33 45 30 30   0x38800, 0x3E00
5250: 30 2c 0a 09 09 30 78 33 42 38 30 30 2c 20 30 78  0,...0x3B800, 0x
5260: 33 46 38 30 30 2c 20 30 78 33 41 38 30 30 2c 20  3F800, 0x3A800, 
5270: 30 78 33 39 38 30 30 2c 20 30 78 32 41 30 30 30  0x39800, 0x2A000
5280: 2c 0a 09 09 30 78 32 44 30 30 30 2c 20 30 78 32  ,...0x2D000, 0x2
5290: 43 38 30 30 2c 20 30 78 32 39 30 30 30 2c 20 30  C800, 0x29000, 0
52a0: 78 32 45 38 30 30 2c 20 30 78 32 43 30 30 30 2c  x2E800, 0x2C000,
52b0: 0a 09 09 30 78 32 38 30 30 30 2c 20 30 78 32 46  ...0x28000, 0x2F
52c0: 30 30 30 2c 20 30 78 32 42 30 30 30 2c 20 30 78  000, 0x2B000, 0x
52d0: 32 44 38 30 30 2c 20 30 78 32 38 38 30 30 2c 0a  2D800, 0x28800,.
52e0: 09 09 30 78 32 45 30 30 30 2c 20 30 78 32 42 38  ..0x2E000, 0x2B8
52f0: 30 30 2c 20 30 78 32 46 38 30 30 2c 20 30 78 32  00, 0x2F800, 0x2
5300: 41 38 30 30 2c 20 30 78 32 39 38 30 30 2c 0a 09  A800, 0x29800,..
5310: 09 30 78 34 41 30 30 30 2c 20 30 78 34 44 30 30  .0x4A000, 0x4D00
5320: 30 2c 20 30 78 34 43 38 30 30 2c 20 30 78 34 39  0, 0x4C800, 0x49
5330: 30 30 30 2c 20 30 78 34 45 38 30 30 2c 0a 09 09  000, 0x4E800,...
5340: 30 78 34 43 30 30 30 2c 20 30 78 34 38 30 30 30  0x4C000, 0x48000
5350: 2c 20 30 78 34 46 30 30 30 2c 20 30 78 34 42 30  , 0x4F000, 0x4B0
5360: 30 30 2c 20 30 78 34 44 38 30 30 2c 0a 09 09 30  00, 0x4D800,...0
5370: 78 34 38 38 30 30 2c 20 30 78 34 45 30 30 30 2c  x48800, 0x4E000,
5380: 20 30 78 34 42 38 30 30 2c 20 30 78 34 46 38 30   0x4B800, 0x4F80
5390: 30 2c 20 30 78 34 41 38 30 30 2c 0a 09 09 30 78  0, 0x4A800,...0x
53a0: 34 39 38 30 30 0a 09 7d 2c 20 7b 0a 09 09 30 78  49800..}, {...0x
53b0: 33 41 38 30 30 30 30 2c 20 30 78 33 43 30 30 30  3A80000, 0x3C000
53c0: 30 30 2c 20 30 78 33 38 38 30 30 30 30 2c 20 30  00, 0x3880000, 0
53d0: 78 33 45 38 30 30 30 30 2c 20 30 78 33 44 30 30  x3E80000, 0x3D00
53e0: 30 30 30 2c 0a 09 09 30 78 33 39 38 30 30 30 30  000,...0x3980000
53f0: 2c 20 30 78 33 41 30 30 30 30 30 2c 20 30 78 33  , 0x3A00000, 0x3
5400: 39 30 30 30 30 30 2c 20 30 78 33 46 30 30 30 30  900000, 0x3F0000
5410: 30 2c 20 30 78 33 46 38 30 30 30 30 2c 0a 09 09  0, 0x3F80000,...
5420: 30 78 33 45 30 30 30 30 30 2c 20 30 78 33 42 38  0x3E00000, 0x3B8
5430: 30 30 30 30 2c 20 30 78 33 42 30 30 30 30 30 2c  0000, 0x3B00000,
5440: 20 30 78 33 38 30 30 30 30 30 2c 20 30 78 33 43   0x3800000, 0x3C
5450: 38 30 30 30 30 2c 0a 09 09 30 78 33 44 38 30 30  80000,...0x3D800
5460: 30 30 2c 20 30 78 36 41 38 30 30 30 30 2c 20 30  00, 0x6A80000, 0
5470: 78 36 43 30 30 30 30 30 2c 20 30 78 36 38 38 30  x6C00000, 0x6880
5480: 30 30 30 2c 20 30 78 36 45 38 30 30 30 30 2c 0a  000, 0x6E80000,.
5490: 09 09 30 78 36 44 30 30 30 30 30 2c 20 30 78 36  ..0x6D00000, 0x6
54a0: 39 38 30 30 30 30 2c 20 30 78 36 41 30 30 30 30  980000, 0x6A0000
54b0: 30 2c 20 30 78 36 39 30 30 30 30 30 2c 20 30 78  0, 0x6900000, 0x
54c0: 36 46 30 30 30 30 30 2c 0a 09 09 30 78 36 46 38  6F00000,...0x6F8
54d0: 30 30 30 30 2c 20 30 78 36 45 30 30 30 30 30 2c  0000, 0x6E00000,
54e0: 20 30 78 36 42 38 30 30 30 30 2c 20 30 78 36 42   0x6B80000, 0x6B
54f0: 30 30 30 30 30 2c 20 30 78 36 38 30 30 30 30 30  00000, 0x6800000
5500: 2c 0a 09 09 30 78 36 43 38 30 30 30 30 2c 20 30  ,...0x6C80000, 0
5510: 78 36 44 38 30 30 30 30 2c 20 30 78 35 32 38 30  x6D80000, 0x5280
5520: 30 30 30 2c 20 30 78 35 34 30 30 30 30 30 2c 20  000, 0x5400000, 
5530: 30 78 35 30 38 30 30 30 30 2c 0a 09 09 30 78 35  0x5080000,...0x5
5540: 36 38 30 30 30 30 2c 20 30 78 35 35 30 30 30 30  680000, 0x550000
5550: 30 2c 20 30 78 35 31 38 30 30 30 30 2c 20 30 78  0, 0x5180000, 0x
5560: 35 32 30 30 30 30 30 2c 20 30 78 35 31 30 30 30  5200000, 0x51000
5570: 30 30 2c 0a 09 09 30 78 35 37 30 30 30 30 30 2c  00,...0x5700000,
5580: 20 30 78 35 37 38 30 30 30 30 2c 20 30 78 35 36   0x5780000, 0x56
5590: 30 30 30 30 30 2c 20 30 78 35 33 38 30 30 30 30  00000, 0x5380000
55a0: 2c 20 30 78 35 33 30 30 30 30 30 2c 0a 09 09 30  , 0x5300000,...0
55b0: 78 35 30 30 30 30 30 30 2c 20 30 78 35 34 38 30  x5000000, 0x5480
55c0: 30 30 30 2c 20 30 78 35 35 38 30 30 30 30 2c 20  000, 0x5580000, 
55d0: 30 78 41 38 30 30 30 30 2c 20 20 30 78 43 30 30  0xA80000,  0xC00
55e0: 30 30 30 2c 0a 09 09 30 78 38 38 30 30 30 30 2c  000,...0x880000,
55f0: 20 20 30 78 45 38 30 30 30 30 2c 20 20 30 78 44    0xE80000,  0xD
5600: 30 30 30 30 30 2c 20 20 30 78 39 38 30 30 30 30  00000,  0x980000
5610: 2c 20 20 30 78 41 30 30 30 30 30 2c 0a 09 09 30  ,  0xA00000,...0
5620: 78 39 30 30 30 30 30 2c 20 20 30 78 46 30 30 30  x900000,  0xF000
5630: 30 30 2c 20 20 30 78 46 38 30 30 30 30 2c 20 20  00,  0xF80000,  
5640: 30 78 45 30 30 30 30 30 2c 20 20 30 78 42 38 30  0xE00000,  0xB80
5650: 30 30 30 2c 0a 09 09 30 78 42 30 30 30 30 30 2c  000,...0xB00000,
5660: 20 20 30 78 38 30 30 30 30 30 2c 20 20 30 78 43    0x800000,  0xC
5670: 38 30 30 30 30 2c 20 20 30 78 44 38 30 30 30 30  80000,  0xD80000
5680: 2c 20 20 30 78 32 38 30 30 30 30 2c 0a 09 09 30  ,  0x280000,...0
5690: 78 34 30 30 30 30 30 2c 20 20 30 78 38 30 30 30  x400000,  0x8000
56a0: 30 2c 20 20 20 30 78 36 38 30 30 30 30 2c 20 20  0,   0x680000,  
56b0: 30 78 35 30 30 30 30 30 2c 20 20 30 78 31 38 30  0x500000,  0x180
56c0: 30 30 30 2c 0a 09 09 30 78 32 30 30 30 30 30 2c  000,...0x200000,
56d0: 20 20 30 78 31 30 30 30 30 30 2c 20 20 30 78 37    0x100000,  0x7
56e0: 30 30 30 30 30 2c 20 20 30 78 37 38 30 30 30 30  00000,  0x780000
56f0: 2c 20 20 30 78 36 30 30 30 30 30 2c 0a 09 09 30  ,  0x600000,...0
5700: 78 33 38 30 30 30 30 2c 20 20 30 78 33 30 30 30  x380000,  0x3000
5710: 30 30 2c 20 20 30 78 30 2c 20 20 20 20 20 20 20  00,  0x0,       
5720: 30 78 34 38 30 30 30 30 2c 20 20 30 78 35 38 30  0x480000,  0x580
5730: 30 30 30 2c 0a 09 09 30 78 34 32 38 30 30 30 30  000,...0x4280000
5740: 2c 20 30 78 34 34 30 30 30 30 30 2c 20 30 78 34  , 0x4400000, 0x4
5750: 30 38 30 30 30 30 2c 20 30 78 34 36 38 30 30 30  080000, 0x468000
5760: 30 2c 20 30 78 34 35 30 30 30 30 30 2c 0a 09 09  0, 0x4500000,...
5770: 30 78 34 31 38 30 30 30 30 2c 20 30 78 34 32 30  0x4180000, 0x420
5780: 30 30 30 30 2c 20 30 78 34 31 30 30 30 30 30 2c  0000, 0x4100000,
5790: 20 30 78 34 37 30 30 30 30 30 2c 20 30 78 34 37   0x4700000, 0x47
57a0: 38 30 30 30 30 2c 0a 09 09 30 78 34 36 30 30 30  80000,...0x46000
57b0: 30 30 2c 20 30 78 34 33 38 30 30 30 30 2c 20 30  00, 0x4380000, 0
57c0: 78 34 33 30 30 30 30 30 2c 20 30 78 34 30 30 30  x4300000, 0x4000
57d0: 30 30 30 2c 20 30 78 34 34 38 30 30 30 30 2c 0a  000, 0x4480000,.
57e0: 09 09 30 78 34 35 38 30 30 30 30 2c 20 30 78 34  ..0x4580000, 0x4
57f0: 41 38 30 30 30 30 2c 20 30 78 34 43 30 30 30 30  A80000, 0x4C0000
5800: 30 2c 20 30 78 34 38 38 30 30 30 30 2c 20 30 78  0, 0x4880000, 0x
5810: 34 45 38 30 30 30 30 2c 0a 09 09 30 78 34 44 30  4E80000,...0x4D0
5820: 30 30 30 30 2c 20 30 78 34 39 38 30 30 30 30 2c  0000, 0x4980000,
5830: 20 30 78 34 41 30 30 30 30 30 2c 20 30 78 34 39   0x4A00000, 0x49
5840: 30 30 30 30 30 2c 20 30 78 34 46 30 30 30 30 30  00000, 0x4F00000
5850: 2c 0a 09 09 30 78 34 46 38 30 30 30 30 2c 20 30  ,...0x4F80000, 0
5860: 78 34 45 30 30 30 30 30 2c 20 30 78 34 42 38 30  x4E00000, 0x4B80
5870: 30 30 30 2c 20 30 78 34 42 30 30 30 30 30 2c 20  000, 0x4B00000, 
5880: 30 78 34 38 30 30 30 30 30 2c 0a 09 09 30 78 34  0x4800000,...0x4
5890: 43 38 30 30 30 30 2c 20 30 78 34 44 38 30 30 30  C80000, 0x4D8000
58a0: 30 2c 20 30 78 37 41 38 30 30 30 30 2c 20 30 78  0, 0x7A80000, 0x
58b0: 37 43 30 30 30 30 30 2c 20 30 78 37 38 38 30 30  7C00000, 0x78800
58c0: 30 30 2c 0a 09 09 30 78 37 45 38 30 30 30 30 2c  00,...0x7E80000,
58d0: 20 30 78 37 44 30 30 30 30 30 2c 20 30 78 37 39   0x7D00000, 0x79
58e0: 38 30 30 30 30 2c 20 30 78 37 41 30 30 30 30 30  80000, 0x7A00000
58f0: 2c 20 30 78 37 39 30 30 30 30 30 2c 0a 09 09 30  , 0x7900000,...0
5900: 78 37 46 30 30 30 30 30 2c 20 30 78 37 46 38 30  x7F00000, 0x7F80
5910: 30 30 30 2c 20 30 78 37 45 30 30 30 30 30 2c 20  000, 0x7E00000, 
5920: 30 78 37 42 38 30 30 30 30 2c 20 30 78 37 42 30  0x7B80000, 0x7B0
5930: 30 30 30 30 2c 0a 09 09 30 78 37 38 30 30 30 30  0000,...0x780000
5940: 30 2c 20 30 78 37 43 38 30 30 30 30 2c 20 30 78  0, 0x7C80000, 0x
5950: 37 44 38 30 30 30 30 2c 20 30 78 37 32 38 30 30  7D80000, 0x72800
5960: 30 30 2c 20 30 78 37 34 30 30 30 30 30 2c 0a 09  00, 0x7400000,..
5970: 09 30 78 37 30 38 30 30 30 30 2c 20 30 78 37 36  .0x7080000, 0x76
5980: 38 30 30 30 30 2c 20 30 78 37 35 30 30 30 30 30  80000, 0x7500000
5990: 2c 20 30 78 37 31 38 30 30 30 30 2c 20 30 78 37  , 0x7180000, 0x7
59a0: 32 30 30 30 30 30 2c 0a 09 09 30 78 37 31 30 30  200000,...0x7100
59b0: 30 30 30 2c 20 30 78 37 37 30 30 30 30 30 2c 20  000, 0x7700000, 
59c0: 30 78 37 37 38 30 30 30 30 2c 20 30 78 37 36 30  0x7780000, 0x760
59d0: 30 30 30 30 2c 20 30 78 37 33 38 30 30 30 30 2c  0000, 0x7380000,
59e0: 0a 09 09 30 78 37 33 30 30 30 30 30 2c 20 30 78  ...0x7300000, 0x
59f0: 37 30 30 30 30 30 30 2c 20 30 78 37 34 38 30 30  7000000, 0x74800
5a00: 30 30 2c 20 30 78 37 35 38 30 30 30 30 2c 20 30  00, 0x7580000, 0
5a10: 78 32 32 38 30 30 30 30 2c 0a 09 09 30 78 32 34  x2280000,...0x24
5a20: 30 30 30 30 30 2c 20 30 78 32 30 38 30 30 30 30  00000, 0x2080000
5a30: 2c 20 30 78 32 36 38 30 30 30 30 2c 20 30 78 32  , 0x2680000, 0x2
5a40: 35 30 30 30 30 30 2c 20 30 78 32 31 38 30 30 30  500000, 0x218000
5a50: 30 2c 0a 09 09 30 78 32 32 30 30 30 30 30 2c 20  0,...0x2200000, 
5a60: 30 78 32 31 30 30 30 30 30 2c 20 30 78 32 37 30  0x2100000, 0x270
5a70: 30 30 30 30 2c 20 30 78 32 37 38 30 30 30 30 2c  0000, 0x2780000,
5a80: 20 30 78 32 36 30 30 30 30 30 2c 0a 09 09 30 78   0x2600000,...0x
5a90: 32 33 38 30 30 30 30 2c 20 30 78 32 33 30 30 30  2380000, 0x23000
5aa0: 30 30 2c 20 30 78 32 30 30 30 30 30 30 2c 20 30  00, 0x2000000, 0
5ab0: 78 32 34 38 30 30 30 30 2c 20 30 78 32 35 38 30  x2480000, 0x2580
5ac0: 30 30 30 2c 0a 09 09 30 78 33 32 38 30 30 30 30  000,...0x3280000
5ad0: 2c 20 30 78 33 34 30 30 30 30 30 2c 20 30 78 33  , 0x3400000, 0x3
5ae0: 30 38 30 30 30 30 2c 20 30 78 33 36 38 30 30 30  080000, 0x368000
5af0: 30 2c 20 30 78 33 35 30 30 30 30 30 2c 0a 09 09  0, 0x3500000,...
5b00: 30 78 33 31 38 30 30 30 30 2c 20 30 78 33 32 30  0x3180000, 0x320
5b10: 30 30 30 30 2c 20 30 78 33 31 30 30 30 30 30 2c  0000, 0x3100000,
5b20: 20 30 78 33 37 30 30 30 30 30 2c 20 30 78 33 37   0x3700000, 0x37
5b30: 38 30 30 30 30 2c 0a 09 09 30 78 33 36 30 30 30  80000,...0x36000
5b40: 30 30 2c 20 30 78 33 33 38 30 30 30 30 2c 20 30  00, 0x3380000, 0
5b50: 78 33 33 30 30 30 30 30 2c 20 30 78 33 30 30 30  x3300000, 0x3000
5b60: 30 30 30 2c 20 30 78 33 34 38 30 30 30 30 2c 0a  000, 0x3480000,.
5b70: 09 09 30 78 33 35 38 30 30 30 30 2c 20 30 78 36  ..0x3580000, 0x6
5b80: 32 38 30 30 30 30 2c 20 30 78 36 34 30 30 30 30  280000, 0x640000
5b90: 30 2c 20 30 78 36 30 38 30 30 30 30 2c 20 30 78  0, 0x6080000, 0x
5ba0: 36 36 38 30 30 30 30 2c 0a 09 09 30 78 36 35 30  6680000,...0x650
5bb0: 30 30 30 30 2c 20 30 78 36 31 38 30 30 30 30 2c  0000, 0x6180000,
5bc0: 20 30 78 36 32 30 30 30 30 30 2c 20 30 78 36 31   0x6200000, 0x61
5bd0: 30 30 30 30 30 2c 20 30 78 36 37 30 30 30 30 30  00000, 0x6700000
5be0: 2c 0a 09 09 30 78 36 37 38 30 30 30 30 2c 20 30  ,...0x6780000, 0
5bf0: 78 36 36 30 30 30 30 30 2c 20 30 78 36 33 38 30  x6600000, 0x6380
5c00: 30 30 30 2c 20 30 78 36 33 30 30 30 30 30 2c 20  000, 0x6300000, 
5c10: 30 78 36 30 30 30 30 30 30 2c 0a 09 09 30 78 36  0x6000000,...0x6
5c20: 34 38 30 30 30 30 2c 20 30 78 36 35 38 30 30 30  480000, 0x658000
5c30: 30 2c 20 30 78 35 41 38 30 30 30 30 2c 20 30 78  0, 0x5A80000, 0x
5c40: 35 43 30 30 30 30 30 2c 20 30 78 35 38 38 30 30  5C00000, 0x58800
5c50: 30 30 2c 0a 09 09 30 78 35 45 38 30 30 30 30 2c  00,...0x5E80000,
5c60: 20 30 78 35 44 30 30 30 30 30 2c 20 30 78 35 39   0x5D00000, 0x59
5c70: 38 30 30 30 30 2c 20 30 78 35 41 30 30 30 30 30  80000, 0x5A00000
5c80: 2c 20 30 78 35 39 30 30 30 30 30 2c 0a 09 09 30  , 0x5900000,...0
5c90: 78 35 46 30 30 30 30 30 2c 20 30 78 35 46 38 30  x5F00000, 0x5F80
5ca0: 30 30 30 2c 20 30 78 35 45 30 30 30 30 30 2c 20  000, 0x5E00000, 
5cb0: 30 78 35 42 38 30 30 30 30 2c 20 30 78 35 42 30  0x5B80000, 0x5B0
5cc0: 30 30 30 30 2c 0a 09 09 30 78 35 38 30 30 30 30  0000,...0x580000
5cd0: 30 2c 20 30 78 35 43 38 30 30 30 30 2c 20 30 78  0, 0x5C80000, 0x
5ce0: 35 44 38 30 30 30 30 2c 20 30 78 31 32 38 30 30  5D80000, 0x12800
5cf0: 30 30 2c 20 30 78 31 34 30 30 30 30 30 2c 0a 09  00, 0x1400000,..
5d00: 09 30 78 31 30 38 30 30 30 30 2c 20 30 78 31 36  .0x1080000, 0x16
5d10: 38 30 30 30 30 2c 20 30 78 31 35 30 30 30 30 30  80000, 0x1500000
5d20: 2c 20 30 78 31 31 38 30 30 30 30 2c 20 30 78 31  , 0x1180000, 0x1
5d30: 32 30 30 30 30 30 2c 0a 09 09 30 78 31 31 30 30  200000,...0x1100
5d40: 30 30 30 2c 20 30 78 31 37 30 30 30 30 30 2c 20  000, 0x1700000, 
5d50: 30 78 31 37 38 30 30 30 30 2c 20 30 78 31 36 30  0x1780000, 0x160
5d60: 30 30 30 30 2c 20 30 78 31 33 38 30 30 30 30 2c  0000, 0x1380000,
5d70: 0a 09 09 30 78 31 33 30 30 30 30 30 2c 20 30 78  ...0x1300000, 0x
5d80: 31 30 30 30 30 30 30 2c 20 30 78 31 34 38 30 30  1000000, 0x14800
5d90: 30 30 2c 20 30 78 31 35 38 30 30 30 30 2c 20 30  00, 0x1580000, 0
5da0: 78 32 41 38 30 30 30 30 2c 0a 09 09 30 78 32 43  x2A80000,...0x2C
5db0: 30 30 30 30 30 2c 20 30 78 32 38 38 30 30 30 30  00000, 0x2880000
5dc0: 2c 20 30 78 32 45 38 30 30 30 30 2c 20 30 78 32  , 0x2E80000, 0x2
5dd0: 44 30 30 30 30 30 2c 20 30 78 32 39 38 30 30 30  D00000, 0x298000
5de0: 30 2c 0a 09 09 30 78 32 41 30 30 30 30 30 2c 20  0,...0x2A00000, 
5df0: 30 78 32 39 30 30 30 30 30 2c 20 30 78 32 46 30  0x2900000, 0x2F0
5e00: 30 30 30 30 2c 20 30 78 32 46 38 30 30 30 30 2c  0000, 0x2F80000,
5e10: 20 30 78 32 45 30 30 30 30 30 2c 0a 09 09 30 78   0x2E00000,...0x
5e20: 32 42 38 30 30 30 30 2c 20 30 78 32 42 30 30 30  2B80000, 0x2B000
5e30: 30 30 2c 20 30 78 32 38 30 30 30 30 30 2c 20 30  00, 0x2800000, 0
5e40: 78 32 43 38 30 30 30 30 2c 20 30 78 32 44 38 30  x2C80000, 0x2D80
5e50: 30 30 30 2c 0a 09 09 30 78 31 41 38 30 30 30 30  000,...0x1A80000
5e60: 2c 20 30 78 31 43 30 30 30 30 30 2c 20 30 78 31  , 0x1C00000, 0x1
5e70: 38 38 30 30 30 30 2c 20 30 78 31 45 38 30 30 30  880000, 0x1E8000
5e80: 30 2c 20 30 78 31 44 30 30 30 30 30 2c 0a 09 09  0, 0x1D00000,...
5e90: 30 78 31 39 38 30 30 30 30 2c 20 30 78 31 41 30  0x1980000, 0x1A0
5ea0: 30 30 30 30 2c 20 30 78 31 39 30 30 30 30 30 2c  0000, 0x1900000,
5eb0: 20 30 78 31 46 30 30 30 30 30 2c 20 30 78 31 46   0x1F00000, 0x1F
5ec0: 38 30 30 30 30 2c 0a 09 09 30 78 31 45 30 30 30  80000,...0x1E000
5ed0: 30 30 2c 20 30 78 31 42 38 30 30 30 30 2c 20 30  00, 0x1B80000, 0
5ee0: 78 31 42 30 30 30 30 30 2c 20 30 78 31 38 30 30  x1B00000, 0x1800
5ef0: 30 30 30 2c 20 30 78 31 43 38 30 30 30 30 2c 0a  000, 0x1C80000,.
5f00: 09 09 30 78 31 44 38 30 30 30 30 0a 09 7d 2c 20  ..0x1D80000..}, 
5f10: 7b 0a 09 09 30 78 33 30 30 30 30 30 30 32 2c 20  {...0x30000002, 
5f20: 30 78 36 30 30 30 30 30 30 32 2c 20 30 78 33 38  0x60000002, 0x38
5f30: 30 30 30 30 30 32 2c 20 30 78 38 30 30 30 30 30  000002, 0x800000
5f40: 32 2c 0a 09 09 30 78 32 38 30 30 30 30 30 32 2c  2,...0x28000002,
5f50: 20 30 78 37 38 30 30 30 30 30 32 2c 20 30 78 36   0x78000002, 0x6
5f60: 38 30 30 30 30 30 32 2c 20 30 78 34 30 30 30 30  8000002, 0x40000
5f70: 30 30 32 2c 0a 09 09 30 78 32 30 30 30 30 30 30  002,...0x2000000
5f80: 32 2c 20 30 78 35 30 30 30 30 30 30 32 2c 20 30  2, 0x50000002, 0
5f90: 78 34 38 30 30 30 30 30 32 2c 20 30 78 37 30 30  x48000002, 0x700
5fa0: 30 30 30 30 32 2c 0a 09 09 30 78 32 2c 20 20 20  00002,...0x2,   
5fb0: 20 20 20 20 20 30 78 31 38 30 30 30 30 30 32 2c       0x18000002,
5fc0: 20 30 78 35 38 30 30 30 30 30 32 2c 20 30 78 31   0x58000002, 0x1
5fd0: 30 30 30 30 30 30 32 2c 0a 09 09 30 78 42 30 30  0000002,...0xB00
5fe0: 30 30 30 30 35 2c 20 30 78 45 30 30 30 30 30 30  00005, 0xE000000
5ff0: 35 2c 20 30 78 42 38 30 30 30 30 30 35 2c 20 30  5, 0xB8000005, 0
6000: 78 38 38 30 30 30 30 30 35 2c 0a 09 09 30 78 41  x88000005,...0xA
6010: 38 30 30 30 30 30 35 2c 20 30 78 46 38 30 30 30  8000005, 0xF8000
6020: 30 30 35 2c 20 30 78 45 38 30 30 30 30 30 35 2c  005, 0xE8000005,
6030: 20 30 78 43 30 30 30 30 30 30 35 2c 0a 09 09 30   0xC0000005,...0
6040: 78 41 30 30 30 30 30 30 35 2c 20 30 78 44 30 30  xA0000005, 0xD00
6050: 30 30 30 30 35 2c 20 30 78 43 38 30 30 30 30 30  00005, 0xC800000
6060: 35 2c 20 30 78 46 30 30 30 30 30 30 35 2c 0a 09  5, 0xF0000005,..
6070: 09 30 78 38 30 30 30 30 30 30 35 2c 20 30 78 39  .0x80000005, 0x9
6080: 38 30 30 30 30 30 35 2c 20 30 78 44 38 30 30 30  8000005, 0xD8000
6090: 30 30 35 2c 20 30 78 39 30 30 30 30 30 30 35 2c  005, 0x90000005,
60a0: 0a 09 09 30 78 33 30 30 30 30 30 30 35 2c 20 30  ...0x30000005, 0
60b0: 78 36 30 30 30 30 30 30 35 2c 20 30 78 33 38 30  x60000005, 0x380
60c0: 30 30 30 30 35 2c 20 30 78 38 30 30 30 30 30 35  00005, 0x8000005
60d0: 2c 0a 09 09 30 78 32 38 30 30 30 30 30 35 2c 20  ,...0x28000005, 
60e0: 30 78 37 38 30 30 30 30 30 35 2c 20 30 78 36 38  0x78000005, 0x68
60f0: 30 30 30 30 30 35 2c 20 30 78 34 30 30 30 30 30  000005, 0x400000
6100: 30 35 2c 0a 09 09 30 78 32 30 30 30 30 30 30 35  05,...0x20000005
6110: 2c 20 30 78 35 30 30 30 30 30 30 35 2c 20 30 78  , 0x50000005, 0x
6120: 34 38 30 30 30 30 30 35 2c 20 30 78 37 30 30 30  48000005, 0x7000
6130: 30 30 30 35 2c 0a 09 09 30 78 35 2c 20 20 20 20  0005,...0x5,    
6140: 20 20 20 20 30 78 31 38 30 30 30 30 30 35 2c 20      0x18000005, 
6150: 30 78 35 38 30 30 30 30 30 35 2c 20 30 78 31 30  0x58000005, 0x10
6160: 30 30 30 30 30 35 2c 0a 09 09 30 78 33 30 30 30  000005,...0x3000
6170: 30 30 30 30 2c 20 30 78 36 30 30 30 30 30 30 30  0000, 0x60000000
6180: 2c 20 30 78 33 38 30 30 30 30 30 30 2c 20 30 78  , 0x38000000, 0x
6190: 38 30 30 30 30 30 30 2c 0a 09 09 30 78 32 38 30  8000000,...0x280
61a0: 30 30 30 30 30 2c 20 30 78 37 38 30 30 30 30 30  00000, 0x7800000
61b0: 30 2c 20 30 78 36 38 30 30 30 30 30 30 2c 20 30  0, 0x68000000, 0
61c0: 78 34 30 30 30 30 30 30 30 2c 0a 09 09 30 78 32  x40000000,...0x2
61d0: 30 30 30 30 30 30 30 2c 20 30 78 35 30 30 30 30  0000000, 0x50000
61e0: 30 30 30 2c 20 30 78 34 38 30 30 30 30 30 30 2c  000, 0x48000000,
61f0: 20 30 78 37 30 30 30 30 30 30 30 2c 0a 09 09 30   0x70000000,...0
6200: 78 30 2c 20 20 20 20 20 20 20 20 30 78 31 38 30  x0,        0x180
6210: 30 30 30 30 30 2c 20 30 78 35 38 30 30 30 30 30  00000, 0x5800000
6220: 30 2c 20 30 78 31 30 30 30 30 30 30 30 2c 0a 09  0, 0x10000000,..
6230: 09 30 78 42 30 30 30 30 30 30 33 2c 20 30 78 45  .0xB0000003, 0xE
6240: 30 30 30 30 30 30 33 2c 20 30 78 42 38 30 30 30  0000003, 0xB8000
6250: 30 30 33 2c 20 30 78 38 38 30 30 30 30 30 33 2c  003, 0x88000003,
6260: 0a 09 09 30 78 41 38 30 30 30 30 30 33 2c 20 30  ...0xA8000003, 0
6270: 78 46 38 30 30 30 30 30 33 2c 20 30 78 45 38 30  xF8000003, 0xE80
6280: 30 30 30 30 33 2c 20 30 78 43 30 30 30 30 30 30  00003, 0xC000000
6290: 33 2c 0a 09 09 30 78 41 30 30 30 30 30 30 33 2c  3,...0xA0000003,
62a0: 20 30 78 44 30 30 30 30 30 30 33 2c 20 30 78 43   0xD0000003, 0xC
62b0: 38 30 30 30 30 30 33 2c 20 30 78 46 30 30 30 30  8000003, 0xF0000
62c0: 30 30 33 2c 0a 09 09 30 78 38 30 30 30 30 30 30  003,...0x8000000
62d0: 33 2c 20 30 78 39 38 30 30 30 30 30 33 2c 20 30  3, 0x98000003, 0
62e0: 78 44 38 30 30 30 30 30 33 2c 20 30 78 39 30 30  xD8000003, 0x900
62f0: 30 30 30 30 33 2c 0a 09 09 30 78 33 30 30 30 30  00003,...0x30000
6300: 30 30 31 2c 20 30 78 36 30 30 30 30 30 30 31 2c  001, 0x60000001,
6310: 20 30 78 33 38 30 30 30 30 30 31 2c 20 30 78 38   0x38000001, 0x8
6320: 30 30 30 30 30 31 2c 0a 09 09 30 78 32 38 30 30  000001,...0x2800
6330: 30 30 30 31 2c 20 30 78 37 38 30 30 30 30 30 31  0001, 0x78000001
6340: 2c 20 30 78 36 38 30 30 30 30 30 31 2c 20 30 78  , 0x68000001, 0x
6350: 34 30 30 30 30 30 30 31 2c 0a 09 09 30 78 32 30  40000001,...0x20
6360: 30 30 30 30 30 31 2c 20 30 78 35 30 30 30 30 30  000001, 0x500000
6370: 30 31 2c 20 30 78 34 38 30 30 30 30 30 31 2c 20  01, 0x48000001, 
6380: 30 78 37 30 30 30 30 30 30 31 2c 0a 09 09 30 78  0x70000001,...0x
6390: 31 2c 20 20 20 20 20 20 20 20 30 78 31 38 30 30  1,        0x1800
63a0: 30 30 30 31 2c 20 30 78 35 38 30 30 30 30 30 31  0001, 0x58000001
63b0: 2c 20 30 78 31 30 30 30 30 30 30 31 2c 0a 09 09  , 0x10000001,...
63c0: 30 78 42 30 30 30 30 30 30 30 2c 20 30 78 45 30  0xB0000000, 0xE0
63d0: 30 30 30 30 30 30 2c 20 30 78 42 38 30 30 30 30  000000, 0xB80000
63e0: 30 30 2c 20 30 78 38 38 30 30 30 30 30 30 2c 0a  00, 0x88000000,.
63f0: 09 09 30 78 41 38 30 30 30 30 30 30 2c 20 30 78  ..0xA8000000, 0x
6400: 46 38 30 30 30 30 30 30 2c 20 30 78 45 38 30 30  F8000000, 0xE800
6410: 30 30 30 30 2c 20 30 78 43 30 30 30 30 30 30 30  0000, 0xC0000000
6420: 2c 0a 09 09 30 78 41 30 30 30 30 30 30 30 2c 20  ,...0xA0000000, 
6430: 30 78 44 30 30 30 30 30 30 30 2c 20 30 78 43 38  0xD0000000, 0xC8
6440: 30 30 30 30 30 30 2c 20 30 78 46 30 30 30 30 30  000000, 0xF00000
6450: 30 30 2c 0a 09 09 30 78 38 30 30 30 30 30 30 30  00,...0x80000000
6460: 2c 20 30 78 39 38 30 30 30 30 30 30 2c 20 30 78  , 0x98000000, 0x
6470: 44 38 30 30 30 30 30 30 2c 20 30 78 39 30 30 30  D8000000, 0x9000
6480: 30 30 30 30 2c 0a 09 09 30 78 42 30 30 30 30 30  0000,...0xB00000
6490: 30 36 2c 20 30 78 45 30 30 30 30 30 30 36 2c 20  06, 0xE0000006, 
64a0: 30 78 42 38 30 30 30 30 30 36 2c 20 30 78 38 38  0xB8000006, 0x88
64b0: 30 30 30 30 30 36 2c 0a 09 09 30 78 41 38 30 30  000006,...0xA800
64c0: 30 30 30 36 2c 20 30 78 46 38 30 30 30 30 30 36  0006, 0xF8000006
64d0: 2c 20 30 78 45 38 30 30 30 30 30 36 2c 20 30 78  , 0xE8000006, 0x
64e0: 43 30 30 30 30 30 30 36 2c 0a 09 09 30 78 41 30  C0000006,...0xA0
64f0: 30 30 30 30 30 36 2c 20 30 78 44 30 30 30 30 30  000006, 0xD00000
6500: 30 36 2c 20 30 78 43 38 30 30 30 30 30 36 2c 20  06, 0xC8000006, 
6510: 30 78 46 30 30 30 30 30 30 36 2c 0a 09 09 30 78  0xF0000006,...0x
6520: 38 30 30 30 30 30 30 36 2c 20 30 78 39 38 30 30  80000006, 0x9800
6530: 30 30 30 36 2c 20 30 78 44 38 30 30 30 30 30 36  0006, 0xD8000006
6540: 2c 20 30 78 39 30 30 30 30 30 30 36 2c 0a 09 09  , 0x90000006,...
6550: 30 78 42 30 30 30 30 30 30 31 2c 20 30 78 45 30  0xB0000001, 0xE0
6560: 30 30 30 30 30 31 2c 20 30 78 42 38 30 30 30 30  000001, 0xB80000
6570: 30 31 2c 20 30 78 38 38 30 30 30 30 30 31 2c 0a  01, 0x88000001,.
6580: 09 09 30 78 41 38 30 30 30 30 30 31 2c 20 30 78  ..0xA8000001, 0x
6590: 46 38 30 30 30 30 30 31 2c 20 30 78 45 38 30 30  F8000001, 0xE800
65a0: 30 30 30 31 2c 20 30 78 43 30 30 30 30 30 30 31  0001, 0xC0000001
65b0: 2c 0a 09 09 30 78 41 30 30 30 30 30 30 31 2c 20  ,...0xA0000001, 
65c0: 30 78 44 30 30 30 30 30 30 31 2c 20 30 78 43 38  0xD0000001, 0xC8
65d0: 30 30 30 30 30 31 2c 20 30 78 46 30 30 30 30 30  000001, 0xF00000
65e0: 30 31 2c 0a 09 09 30 78 38 30 30 30 30 30 30 31  01,...0x80000001
65f0: 2c 20 30 78 39 38 30 30 30 30 30 31 2c 20 30 78  , 0x98000001, 0x
6600: 44 38 30 30 30 30 30 31 2c 20 30 78 39 30 30 30  D8000001, 0x9000
6610: 30 30 30 31 2c 0a 09 09 30 78 33 30 30 30 30 30  0001,...0x300000
6620: 30 33 2c 20 30 78 36 30 30 30 30 30 30 33 2c 20  03, 0x60000003, 
6630: 30 78 33 38 30 30 30 30 30 33 2c 20 30 78 38 30  0x38000003, 0x80
6640: 30 30 30 30 33 2c 0a 09 09 30 78 32 38 30 30 30  00003,...0x28000
6650: 30 30 33 2c 20 30 78 37 38 30 30 30 30 30 33 2c  003, 0x78000003,
6660: 20 30 78 36 38 30 30 30 30 30 33 2c 20 30 78 34   0x68000003, 0x4
6670: 30 30 30 30 30 30 33 2c 0a 09 09 30 78 32 30 30  0000003,...0x200
6680: 30 30 30 30 33 2c 20 30 78 35 30 30 30 30 30 30  00003, 0x5000000
6690: 33 2c 20 30 78 34 38 30 30 30 30 30 33 2c 20 30  3, 0x48000003, 0
66a0: 78 37 30 30 30 30 30 30 33 2c 0a 09 09 30 78 33  x70000003,...0x3
66b0: 2c 20 20 20 20 20 20 20 20 30 78 31 38 30 30 30  ,        0x18000
66c0: 30 30 33 2c 20 30 78 35 38 30 30 30 30 30 33 2c  003, 0x58000003,
66d0: 20 30 78 31 30 30 30 30 30 30 33 2c 0a 09 09 30   0x10000003,...0
66e0: 78 33 30 30 30 30 30 30 34 2c 20 30 78 36 30 30  x30000004, 0x600
66f0: 30 30 30 30 34 2c 20 30 78 33 38 30 30 30 30 30  00004, 0x3800000
6700: 34 2c 20 30 78 38 30 30 30 30 30 34 2c 0a 09 09  4, 0x8000004,...
6710: 30 78 32 38 30 30 30 30 30 34 2c 20 30 78 37 38  0x28000004, 0x78
6720: 30 30 30 30 30 34 2c 20 30 78 36 38 30 30 30 30  000004, 0x680000
6730: 30 34 2c 20 30 78 34 30 30 30 30 30 30 34 2c 0a  04, 0x40000004,.
6740: 09 09 30 78 32 30 30 30 30 30 30 34 2c 20 30 78  ..0x20000004, 0x
6750: 35 30 30 30 30 30 30 34 2c 20 30 78 34 38 30 30  50000004, 0x4800
6760: 30 30 30 34 2c 20 30 78 37 30 30 30 30 30 30 34  0004, 0x70000004
6770: 2c 0a 09 09 30 78 34 2c 20 20 20 20 20 20 20 20  ,...0x4,        
6780: 30 78 31 38 30 30 30 30 30 34 2c 20 30 78 35 38  0x18000004, 0x58
6790: 30 30 30 30 30 34 2c 20 30 78 31 30 30 30 30 30  000004, 0x100000
67a0: 30 34 2c 0a 09 09 30 78 42 30 30 30 30 30 30 32  04,...0xB0000002
67b0: 2c 20 30 78 45 30 30 30 30 30 30 32 2c 20 30 78  , 0xE0000002, 0x
67c0: 42 38 30 30 30 30 30 32 2c 20 30 78 38 38 30 30  B8000002, 0x8800
67d0: 30 30 30 32 2c 0a 09 09 30 78 41 38 30 30 30 30  0002,...0xA80000
67e0: 30 32 2c 20 30 78 46 38 30 30 30 30 30 32 2c 20  02, 0xF8000002, 
67f0: 30 78 45 38 30 30 30 30 30 32 2c 20 30 78 43 30  0xE8000002, 0xC0
6800: 30 30 30 30 30 32 2c 0a 09 09 30 78 41 30 30 30  000002,...0xA000
6810: 30 30 30 32 2c 20 30 78 44 30 30 30 30 30 30 32  0002, 0xD0000002
6820: 2c 20 30 78 43 38 30 30 30 30 30 32 2c 20 30 78  , 0xC8000002, 0x
6830: 46 30 30 30 30 30 30 32 2c 0a 09 09 30 78 38 30  F0000002,...0x80
6840: 30 30 30 30 30 32 2c 20 30 78 39 38 30 30 30 30  000002, 0x980000
6850: 30 32 2c 20 30 78 44 38 30 30 30 30 30 32 2c 20  02, 0xD8000002, 
6860: 30 78 39 30 30 30 30 30 30 32 2c 0a 09 09 30 78  0x90000002,...0x
6870: 42 30 30 30 30 30 30 34 2c 20 30 78 45 30 30 30  B0000004, 0xE000
6880: 30 30 30 34 2c 20 30 78 42 38 30 30 30 30 30 34  0004, 0xB8000004
6890: 2c 20 30 78 38 38 30 30 30 30 30 34 2c 0a 09 09  , 0x88000004,...
68a0: 30 78 41 38 30 30 30 30 30 34 2c 20 30 78 46 38  0xA8000004, 0xF8
68b0: 30 30 30 30 30 34 2c 20 30 78 45 38 30 30 30 30  000004, 0xE80000
68c0: 30 34 2c 20 30 78 43 30 30 30 30 30 30 34 2c 0a  04, 0xC0000004,.
68d0: 09 09 30 78 41 30 30 30 30 30 30 34 2c 20 30 78  ..0xA0000004, 0x
68e0: 44 30 30 30 30 30 30 34 2c 20 30 78 43 38 30 30  D0000004, 0xC800
68f0: 30 30 30 34 2c 20 30 78 46 30 30 30 30 30 30 34  0004, 0xF0000004
6900: 2c 0a 09 09 30 78 38 30 30 30 30 30 30 34 2c 20  ,...0x80000004, 
6910: 30 78 39 38 30 30 30 30 30 34 2c 20 30 78 44 38  0x98000004, 0xD8
6920: 30 30 30 30 30 34 2c 20 30 78 39 30 30 30 30 30  000004, 0x900000
6930: 30 34 2c 0a 09 09 30 78 33 30 30 30 30 30 30 36  04,...0x30000006
6940: 2c 20 30 78 36 30 30 30 30 30 30 36 2c 20 30 78  , 0x60000006, 0x
6950: 33 38 30 30 30 30 30 36 2c 20 30 78 38 30 30 30  38000006, 0x8000
6960: 30 30 36 2c 0a 09 09 30 78 32 38 30 30 30 30 30  006,...0x2800000
6970: 36 2c 20 30 78 37 38 30 30 30 30 30 36 2c 20 30  6, 0x78000006, 0
6980: 78 36 38 30 30 30 30 30 36 2c 20 30 78 34 30 30  x68000006, 0x400
6990: 30 30 30 30 36 2c 0a 09 09 30 78 32 30 30 30 30  00006,...0x20000
69a0: 30 30 36 2c 20 30 78 35 30 30 30 30 30 30 36 2c  006, 0x50000006,
69b0: 20 30 78 34 38 30 30 30 30 30 36 2c 20 30 78 37   0x48000006, 0x7
69c0: 30 30 30 30 30 30 36 2c 0a 09 09 30 78 36 2c 20  0000006,...0x6, 
69d0: 20 20 20 20 20 20 20 30 78 31 38 30 30 30 30 30         0x1800000
69e0: 36 2c 20 30 78 35 38 30 30 30 30 30 36 2c 20 30  6, 0x58000006, 0
69f0: 78 31 30 30 30 30 30 30 36 2c 0a 09 09 30 78 42  x10000006,...0xB
6a00: 30 30 30 30 30 30 37 2c 20 30 78 45 30 30 30 30  0000007, 0xE0000
6a10: 30 30 37 2c 20 30 78 42 38 30 30 30 30 30 37 2c  007, 0xB8000007,
6a20: 20 30 78 38 38 30 30 30 30 30 37 2c 0a 09 09 30   0x88000007,...0
6a30: 78 41 38 30 30 30 30 30 37 2c 20 30 78 46 38 30  xA8000007, 0xF80
6a40: 30 30 30 30 37 2c 20 30 78 45 38 30 30 30 30 30  00007, 0xE800000
6a50: 37 2c 20 30 78 43 30 30 30 30 30 30 37 2c 0a 09  7, 0xC0000007,..
6a60: 09 30 78 41 30 30 30 30 30 30 37 2c 20 30 78 44  .0xA0000007, 0xD
6a70: 30 30 30 30 30 30 37 2c 20 30 78 43 38 30 30 30  0000007, 0xC8000
6a80: 30 30 37 2c 20 30 78 46 30 30 30 30 30 30 37 2c  007, 0xF0000007,
6a90: 0a 09 09 30 78 38 30 30 30 30 30 30 37 2c 20 30  ...0x80000007, 0
6aa0: 78 39 38 30 30 30 30 30 37 2c 20 30 78 44 38 30  x98000007, 0xD80
6ab0: 30 30 30 30 37 2c 20 30 78 39 30 30 30 30 30 30  00007, 0x9000000
6ac0: 37 2c 0a 09 09 30 78 33 30 30 30 30 30 30 37 2c  7,...0x30000007,
6ad0: 20 30 78 36 30 30 30 30 30 30 37 2c 20 30 78 33   0x60000007, 0x3
6ae0: 38 30 30 30 30 30 37 2c 20 30 78 38 30 30 30 30  8000007, 0x80000
6af0: 30 37 2c 0a 09 09 30 78 32 38 30 30 30 30 30 37  07,...0x28000007
6b00: 2c 20 30 78 37 38 30 30 30 30 30 37 2c 20 30 78  , 0x78000007, 0x
6b10: 36 38 30 30 30 30 30 37 2c 20 30 78 34 30 30 30  68000007, 0x4000
6b20: 30 30 30 37 2c 0a 09 09 30 78 32 30 30 30 30 30  0007,...0x200000
6b30: 30 37 2c 20 30 78 35 30 30 30 30 30 30 37 2c 20  07, 0x50000007, 
6b40: 30 78 34 38 30 30 30 30 30 37 2c 20 30 78 37 30  0x48000007, 0x70
6b50: 30 30 30 30 30 37 2c 0a 09 09 30 78 37 2c 20 20  000007,...0x7,  
6b60: 20 20 20 20 20 20 30 78 31 38 30 30 30 30 30 37        0x18000007
6b70: 2c 20 30 78 35 38 30 30 30 30 30 37 2c 20 30 78  , 0x58000007, 0x
6b80: 31 30 30 30 30 30 30 37 0a 09 7d 2c 20 7b 0a 09  10000007..}, {..
6b90: 09 30 78 45 38 2c 20 20 30 78 44 38 2c 20 20 30  .0xE8,  0xD8,  0
6ba0: 78 41 30 2c 20 20 30 78 38 38 2c 20 20 30 78 39  xA0,  0x88,  0x9
6bb0: 38 2c 20 20 30 78 46 38 2c 20 20 30 78 41 38 2c  8,  0xF8,  0xA8,
6bc0: 20 20 30 78 43 38 2c 20 20 30 78 38 30 2c 20 20    0xC8,  0x80,  
6bd0: 30 78 44 30 2c 0a 09 09 30 78 46 30 2c 20 20 30  0xD0,...0xF0,  0
6be0: 78 42 38 2c 20 20 30 78 42 30 2c 20 20 30 78 43  xB8,  0xB0,  0xC
6bf0: 30 2c 20 20 30 78 39 30 2c 20 20 30 78 45 30 2c  0,  0x90,  0xE0,
6c00: 20 20 30 78 37 45 38 2c 20 30 78 37 44 38 2c 20    0x7E8, 0x7D8, 
6c10: 30 78 37 41 30 2c 20 30 78 37 38 38 2c 0a 09 09  0x7A0, 0x788,...
6c20: 30 78 37 39 38 2c 20 30 78 37 46 38 2c 20 30 78  0x798, 0x7F8, 0x
6c30: 37 41 38 2c 20 30 78 37 43 38 2c 20 30 78 37 38  7A8, 0x7C8, 0x78
6c40: 30 2c 20 30 78 37 44 30 2c 20 30 78 37 46 30 2c  0, 0x7D0, 0x7F0,
6c50: 20 30 78 37 42 38 2c 20 30 78 37 42 30 2c 20 30   0x7B8, 0x7B0, 0
6c60: 78 37 43 30 2c 0a 09 09 30 78 37 39 30 2c 20 30  x7C0,...0x790, 0
6c70: 78 37 45 30 2c 20 30 78 36 45 38 2c 20 30 78 36  x7E0, 0x6E8, 0x6
6c80: 44 38 2c 20 30 78 36 41 30 2c 20 30 78 36 38 38  D8, 0x6A0, 0x688
6c90: 2c 20 30 78 36 39 38 2c 20 30 78 36 46 38 2c 20  , 0x698, 0x6F8, 
6ca0: 30 78 36 41 38 2c 20 30 78 36 43 38 2c 0a 09 09  0x6A8, 0x6C8,...
6cb0: 30 78 36 38 30 2c 20 30 78 36 44 30 2c 20 30 78  0x680, 0x6D0, 0x
6cc0: 36 46 30 2c 20 30 78 36 42 38 2c 20 30 78 36 42  6F0, 0x6B8, 0x6B
6cd0: 30 2c 20 30 78 36 43 30 2c 20 30 78 36 39 30 2c  0, 0x6C0, 0x690,
6ce0: 20 30 78 36 45 30 2c 20 30 78 36 38 2c 20 20 30   0x6E0, 0x68,  0
6cf0: 78 35 38 2c 0a 09 09 30 78 32 30 2c 20 20 30 78  x58,...0x20,  0x
6d00: 38 2c 20 20 20 30 78 31 38 2c 20 20 30 78 37 38  8,   0x18,  0x78
6d10: 2c 20 20 30 78 32 38 2c 20 20 30 78 34 38 2c 20  ,  0x28,  0x48, 
6d20: 20 30 78 30 2c 20 20 20 30 78 35 30 2c 20 20 30   0x0,   0x50,  0
6d30: 78 37 30 2c 20 20 30 78 33 38 2c 0a 09 09 30 78  x70,  0x38,...0x
6d40: 33 30 2c 20 20 30 78 34 30 2c 20 20 30 78 31 30  30,  0x40,  0x10
6d50: 2c 20 20 30 78 36 30 2c 20 20 30 78 32 45 38 2c  ,  0x60,  0x2E8,
6d60: 20 30 78 32 44 38 2c 20 30 78 32 41 30 2c 20 30   0x2D8, 0x2A0, 0
6d70: 78 32 38 38 2c 20 30 78 32 39 38 2c 20 30 78 32  x288, 0x298, 0x2
6d80: 46 38 2c 0a 09 09 30 78 32 41 38 2c 20 30 78 32  F8,...0x2A8, 0x2
6d90: 43 38 2c 20 30 78 32 38 30 2c 20 30 78 32 44 30  C8, 0x280, 0x2D0
6da0: 2c 20 30 78 32 46 30 2c 20 30 78 32 42 38 2c 20  , 0x2F0, 0x2B8, 
6db0: 30 78 32 42 30 2c 20 30 78 32 43 30 2c 20 30 78  0x2B0, 0x2C0, 0x
6dc0: 32 39 30 2c 20 30 78 32 45 30 2c 0a 09 09 30 78  290, 0x2E0,...0x
6dd0: 33 45 38 2c 20 30 78 33 44 38 2c 20 30 78 33 41  3E8, 0x3D8, 0x3A
6de0: 30 2c 20 30 78 33 38 38 2c 20 30 78 33 39 38 2c  0, 0x388, 0x398,
6df0: 20 30 78 33 46 38 2c 20 30 78 33 41 38 2c 20 30   0x3F8, 0x3A8, 0
6e00: 78 33 43 38 2c 20 30 78 33 38 30 2c 20 30 78 33  x3C8, 0x380, 0x3
6e10: 44 30 2c 0a 09 09 30 78 33 46 30 2c 20 30 78 33  D0,...0x3F0, 0x3
6e20: 42 38 2c 20 30 78 33 42 30 2c 20 30 78 33 43 30  B8, 0x3B0, 0x3C0
6e30: 2c 20 30 78 33 39 30 2c 20 30 78 33 45 30 2c 20  , 0x390, 0x3E0, 
6e40: 30 78 35 36 38 2c 20 30 78 35 35 38 2c 20 30 78  0x568, 0x558, 0x
6e50: 35 32 30 2c 20 30 78 35 30 38 2c 0a 09 09 30 78  520, 0x508,...0x
6e60: 35 31 38 2c 20 30 78 35 37 38 2c 20 30 78 35 32  518, 0x578, 0x52
6e70: 38 2c 20 30 78 35 34 38 2c 20 30 78 35 30 30 2c  8, 0x548, 0x500,
6e80: 20 30 78 35 35 30 2c 20 30 78 35 37 30 2c 20 30   0x550, 0x570, 0
6e90: 78 35 33 38 2c 20 30 78 35 33 30 2c 20 30 78 35  x538, 0x530, 0x5
6ea0: 34 30 2c 0a 09 09 30 78 35 31 30 2c 20 30 78 35  40,...0x510, 0x5
6eb0: 36 30 2c 20 30 78 32 36 38 2c 20 30 78 32 35 38  60, 0x268, 0x258
6ec0: 2c 20 30 78 32 32 30 2c 20 30 78 32 30 38 2c 20  , 0x220, 0x208, 
6ed0: 30 78 32 31 38 2c 20 30 78 32 37 38 2c 20 30 78  0x218, 0x278, 0x
6ee0: 32 32 38 2c 20 30 78 32 34 38 2c 0a 09 09 30 78  228, 0x248,...0x
6ef0: 32 30 30 2c 20 30 78 32 35 30 2c 20 30 78 32 37  200, 0x250, 0x27
6f00: 30 2c 20 30 78 32 33 38 2c 20 30 78 32 33 30 2c  0, 0x238, 0x230,
6f10: 20 30 78 32 34 30 2c 20 30 78 32 31 30 2c 20 30   0x240, 0x210, 0
6f20: 78 32 36 30 2c 20 30 78 34 45 38 2c 20 30 78 34  x260, 0x4E8, 0x4
6f30: 44 38 2c 0a 09 09 30 78 34 41 30 2c 20 30 78 34  D8,...0x4A0, 0x4
6f40: 38 38 2c 20 30 78 34 39 38 2c 20 30 78 34 46 38  88, 0x498, 0x4F8
6f50: 2c 20 30 78 34 41 38 2c 20 30 78 34 43 38 2c 20  , 0x4A8, 0x4C8, 
6f60: 30 78 34 38 30 2c 20 30 78 34 44 30 2c 20 30 78  0x480, 0x4D0, 0x
6f70: 34 46 30 2c 20 30 78 34 42 38 2c 0a 09 09 30 78  4F0, 0x4B8,...0x
6f80: 34 42 30 2c 20 30 78 34 43 30 2c 20 30 78 34 39  4B0, 0x4C0, 0x49
6f90: 30 2c 20 30 78 34 45 30 2c 20 30 78 31 36 38 2c  0, 0x4E0, 0x168,
6fa0: 20 30 78 31 35 38 2c 20 30 78 31 32 30 2c 20 30   0x158, 0x120, 0
6fb0: 78 31 30 38 2c 20 30 78 31 31 38 2c 20 30 78 31  x108, 0x118, 0x1
6fc0: 37 38 2c 0a 09 09 30 78 31 32 38 2c 20 30 78 31  78,...0x128, 0x1
6fd0: 34 38 2c 20 30 78 31 30 30 2c 20 30 78 31 35 30  48, 0x100, 0x150
6fe0: 2c 20 30 78 31 37 30 2c 20 30 78 31 33 38 2c 20  , 0x170, 0x138, 
6ff0: 30 78 31 33 30 2c 20 30 78 31 34 30 2c 20 30 78  0x130, 0x140, 0x
7000: 31 31 30 2c 20 30 78 31 36 30 2c 0a 09 09 30 78  110, 0x160,...0x
7010: 31 45 38 2c 20 30 78 31 44 38 2c 20 30 78 31 41  1E8, 0x1D8, 0x1A
7020: 30 2c 20 30 78 31 38 38 2c 20 30 78 31 39 38 2c  0, 0x188, 0x198,
7030: 20 30 78 31 46 38 2c 20 30 78 31 41 38 2c 20 30   0x1F8, 0x1A8, 0
7040: 78 31 43 38 2c 20 30 78 31 38 30 2c 20 30 78 31  x1C8, 0x180, 0x1
7050: 44 30 2c 0a 09 09 30 78 31 46 30 2c 20 30 78 31  D0,...0x1F0, 0x1
7060: 42 38 2c 20 30 78 31 42 30 2c 20 30 78 31 43 30  B8, 0x1B0, 0x1C0
7070: 2c 20 30 78 31 39 30 2c 20 30 78 31 45 30 2c 20  , 0x190, 0x1E0, 
7080: 30 78 37 36 38 2c 20 30 78 37 35 38 2c 20 30 78  0x768, 0x758, 0x
7090: 37 32 30 2c 20 30 78 37 30 38 2c 0a 09 09 30 78  720, 0x708,...0x
70a0: 37 31 38 2c 20 30 78 37 37 38 2c 20 30 78 37 32  718, 0x778, 0x72
70b0: 38 2c 20 30 78 37 34 38 2c 20 30 78 37 30 30 2c  8, 0x748, 0x700,
70c0: 20 30 78 37 35 30 2c 20 30 78 37 37 30 2c 20 30   0x750, 0x770, 0
70d0: 78 37 33 38 2c 20 30 78 37 33 30 2c 20 30 78 37  x738, 0x730, 0x7
70e0: 34 30 2c 0a 09 09 30 78 37 31 30 2c 20 30 78 37  40,...0x710, 0x7
70f0: 36 30 2c 20 30 78 33 36 38 2c 20 30 78 33 35 38  60, 0x368, 0x358
7100: 2c 20 30 78 33 32 30 2c 20 30 78 33 30 38 2c 20  , 0x320, 0x308, 
7110: 30 78 33 31 38 2c 20 30 78 33 37 38 2c 20 30 78  0x318, 0x378, 0x
7120: 33 32 38 2c 20 30 78 33 34 38 2c 0a 09 09 30 78  328, 0x348,...0x
7130: 33 30 30 2c 20 30 78 33 35 30 2c 20 30 78 33 37  300, 0x350, 0x37
7140: 30 2c 20 30 78 33 33 38 2c 20 30 78 33 33 30 2c  0, 0x338, 0x330,
7150: 20 30 78 33 34 30 2c 20 30 78 33 31 30 2c 20 30   0x340, 0x310, 0
7160: 78 33 36 30 2c 20 30 78 35 45 38 2c 20 30 78 35  x360, 0x5E8, 0x5
7170: 44 38 2c 0a 09 09 30 78 35 41 30 2c 20 30 78 35  D8,...0x5A0, 0x5
7180: 38 38 2c 20 30 78 35 39 38 2c 20 30 78 35 46 38  88, 0x598, 0x5F8
7190: 2c 20 30 78 35 41 38 2c 20 30 78 35 43 38 2c 20  , 0x5A8, 0x5C8, 
71a0: 30 78 35 38 30 2c 20 30 78 35 44 30 2c 20 30 78  0x580, 0x5D0, 0x
71b0: 35 46 30 2c 20 30 78 35 42 38 2c 0a 09 09 30 78  5F0, 0x5B8,...0x
71c0: 35 42 30 2c 20 30 78 35 43 30 2c 20 30 78 35 39  5B0, 0x5C0, 0x59
71d0: 30 2c 20 30 78 35 45 30 2c 20 30 78 34 36 38 2c  0, 0x5E0, 0x468,
71e0: 20 30 78 34 35 38 2c 20 30 78 34 32 30 2c 20 30   0x458, 0x420, 0
71f0: 78 34 30 38 2c 20 30 78 34 31 38 2c 20 30 78 34  x408, 0x418, 0x4
7200: 37 38 2c 0a 09 09 30 78 34 32 38 2c 20 30 78 34  78,...0x428, 0x4
7210: 34 38 2c 20 30 78 34 30 30 2c 20 30 78 34 35 30  48, 0x400, 0x450
7220: 2c 20 30 78 34 37 30 2c 20 30 78 34 33 38 2c 20  , 0x470, 0x438, 
7230: 30 78 34 33 30 2c 20 30 78 34 34 30 2c 20 30 78  0x430, 0x440, 0x
7240: 34 31 30 2c 20 30 78 34 36 30 2c 0a 09 09 30 78  410, 0x460,...0x
7250: 36 36 38 2c 20 30 78 36 35 38 2c 20 30 78 36 32  668, 0x658, 0x62
7260: 30 2c 20 30 78 36 30 38 2c 20 30 78 36 31 38 2c  0, 0x608, 0x618,
7270: 20 30 78 36 37 38 2c 20 30 78 36 32 38 2c 20 30   0x678, 0x628, 0
7280: 78 36 34 38 2c 20 30 78 36 30 30 2c 20 30 78 36  x648, 0x600, 0x6
7290: 35 30 2c 0a 09 09 30 78 36 37 30 2c 20 30 78 36  50,...0x670, 0x6
72a0: 33 38 2c 20 30 78 36 33 30 2c 20 30 78 36 34 30  38, 0x630, 0x640
72b0: 2c 20 30 78 36 31 30 2c 20 30 78 36 36 30 0a 09  , 0x610, 0x660..
72c0: 7d 0a 7d 3b 0a 0a 2f 2a 20 70 72 65 2d 69 6e 69  }.};../* pre-ini
72d0: 74 69 61 6c 69 7a 65 64 20 47 4f 53 54 20 6c 6f  tialized GOST lo
72e0: 6f 6b 75 70 20 74 61 62 6c 65 73 20 62 61 73 65  okup tables base
72f0: 64 20 6f 6e 20 72 6f 74 61 74 65 64 20 53 2d 42  d on rotated S-B
7300: 6f 78 20 2a 2f 0a 75 6e 73 69 67 6e 65 64 20 72  ox */.unsigned r
7310: 68 61 73 68 5f 67 6f 73 74 5f 73 62 6f 78 5f 63  hash_gost_sbox_c
7320: 72 79 70 74 70 72 6f 5b 34 5d 5b 32 35 36 5d 20  ryptpro[4][256] 
7330: 3d 20 7b 0a 09 7b 0a 09 09 30 78 32 64 30 30 30  = {..{...0x2d000
7340: 2c 20 30 78 32 61 30 30 30 2c 20 30 78 32 61 38  , 0x2a000, 0x2a8
7350: 30 30 2c 20 30 78 32 62 30 30 30 2c 20 30 78 32  00, 0x2b000, 0x2
7360: 63 30 30 30 2c 0a 09 09 30 78 32 38 38 30 30 2c  c000,...0x28800,
7370: 20 30 78 32 39 38 30 30 2c 20 30 78 32 62 38 30   0x29800, 0x2b80
7380: 30 2c 20 30 78 32 65 38 30 30 2c 20 30 78 32 65  0, 0x2e800, 0x2e
7390: 30 30 30 2c 0a 09 09 30 78 32 66 30 30 30 2c 20  000,...0x2f000, 
73a0: 30 78 32 38 30 30 30 2c 20 30 78 32 63 38 30 30  0x28000, 0x2c800
73b0: 2c 20 30 78 32 39 30 30 30 2c 20 30 78 32 64 38  , 0x29000, 0x2d8
73c0: 30 30 2c 0a 09 09 30 78 32 66 38 30 30 2c 20 30  00,...0x2f800, 0
73d0: 78 37 64 30 30 30 2c 20 30 78 37 61 30 30 30 2c  x7d000, 0x7a000,
73e0: 20 30 78 37 61 38 30 30 2c 20 30 78 37 62 30 30   0x7a800, 0x7b00
73f0: 30 2c 0a 09 09 30 78 37 63 30 30 30 2c 20 30 78  0,...0x7c000, 0x
7400: 37 38 38 30 30 2c 20 30 78 37 39 38 30 30 2c 20  78800, 0x79800, 
7410: 30 78 37 62 38 30 30 2c 20 30 78 37 65 38 30 30  0x7b800, 0x7e800
7420: 2c 0a 09 09 30 78 37 65 30 30 30 2c 20 30 78 37  ,...0x7e000, 0x7
7430: 66 30 30 30 2c 20 30 78 37 38 30 30 30 2c 20 30  f000, 0x78000, 0
7440: 78 37 63 38 30 30 2c 20 30 78 37 39 30 30 30 2c  x7c800, 0x79000,
7450: 0a 09 09 30 78 37 64 38 30 30 2c 20 30 78 37 66  ...0x7d800, 0x7f
7460: 38 30 30 2c 20 30 78 32 35 30 30 30 2c 20 30 78  800, 0x25000, 0x
7470: 32 32 30 30 30 2c 20 30 78 32 32 38 30 30 2c 0a  22000, 0x22800,.
7480: 09 09 30 78 32 33 30 30 30 2c 20 30 78 32 34 30  ..0x23000, 0x240
7490: 30 30 2c 20 30 78 32 30 38 30 30 2c 20 30 78 32  00, 0x20800, 0x2
74a0: 31 38 30 30 2c 20 30 78 32 33 38 30 30 2c 0a 09  1800, 0x23800,..
74b0: 09 30 78 32 36 38 30 30 2c 20 30 78 32 36 30 30  .0x26800, 0x2600
74c0: 30 2c 20 30 78 32 37 30 30 30 2c 20 30 78 32 30  0, 0x27000, 0x20
74d0: 30 30 30 2c 20 30 78 32 34 38 30 30 2c 0a 09 09  000, 0x24800,...
74e0: 30 78 32 31 30 30 30 2c 20 30 78 32 35 38 30 30  0x21000, 0x25800
74f0: 2c 20 30 78 32 37 38 30 30 2c 20 30 78 35 30 30  , 0x27800, 0x500
7500: 30 2c 20 20 30 78 32 30 30 30 2c 0a 09 09 30 78  0,  0x2000,...0x
7510: 32 38 30 30 2c 20 20 30 78 33 30 30 30 2c 20 20  2800,  0x3000,  
7520: 30 78 34 30 30 30 2c 20 20 30 78 38 30 30 2c 20  0x4000,  0x800, 
7530: 20 20 30 78 31 38 30 30 2c 0a 09 09 30 78 33 38    0x1800,...0x38
7540: 30 30 2c 20 20 30 78 36 38 30 30 2c 20 20 30 78  00,  0x6800,  0x
7550: 36 30 30 30 2c 20 20 30 78 37 30 30 30 2c 20 20  6000,  0x7000,  
7560: 30 78 30 2c 0a 09 09 30 78 34 38 30 30 2c 20 20  0x0,...0x4800,  
7570: 30 78 31 30 30 30 2c 20 20 30 78 35 38 30 30 2c  0x1000,  0x5800,
7580: 20 20 30 78 37 38 30 30 2c 20 20 30 78 31 35 30    0x7800,  0x150
7590: 30 30 2c 0a 09 09 30 78 31 32 30 30 30 2c 20 30  00,...0x12000, 0
75a0: 78 31 32 38 30 30 2c 20 30 78 31 33 30 30 30 2c  x12800, 0x13000,
75b0: 20 30 78 31 34 30 30 30 2c 20 30 78 31 30 38 30   0x14000, 0x1080
75c0: 30 2c 0a 09 09 30 78 31 31 38 30 30 2c 20 30 78  0,...0x11800, 0x
75d0: 31 33 38 30 30 2c 20 30 78 31 36 38 30 30 2c 20  13800, 0x16800, 
75e0: 30 78 31 36 30 30 30 2c 20 30 78 31 37 30 30 30  0x16000, 0x17000
75f0: 2c 0a 09 09 30 78 31 30 30 30 30 2c 20 30 78 31  ,...0x10000, 0x1
7600: 34 38 30 30 2c 20 30 78 31 31 30 30 30 2c 20 30  4800, 0x11000, 0
7610: 78 31 35 38 30 30 2c 20 30 78 31 37 38 30 30 2c  x15800, 0x17800,
7620: 0a 09 09 30 78 36 64 30 30 30 2c 20 30 78 36 61  ...0x6d000, 0x6a
7630: 30 30 30 2c 20 30 78 36 61 38 30 30 2c 20 30 78  000, 0x6a800, 0x
7640: 36 62 30 30 30 2c 20 30 78 36 63 30 30 30 2c 0a  6b000, 0x6c000,.
7650: 09 09 30 78 36 38 38 30 30 2c 20 30 78 36 39 38  ..0x68800, 0x698
7660: 30 30 2c 20 30 78 36 62 38 30 30 2c 20 30 78 36  00, 0x6b800, 0x6
7670: 65 38 30 30 2c 20 30 78 36 65 30 30 30 2c 0a 09  e800, 0x6e000,..
7680: 09 30 78 36 66 30 30 30 2c 20 30 78 36 38 30 30  .0x6f000, 0x6800
7690: 30 2c 20 30 78 36 63 38 30 30 2c 20 30 78 36 39  0, 0x6c800, 0x69
76a0: 30 30 30 2c 20 30 78 36 64 38 30 30 2c 0a 09 09  000, 0x6d800,...
76b0: 30 78 36 66 38 30 30 2c 20 30 78 35 64 30 30 30  0x6f800, 0x5d000
76c0: 2c 20 30 78 35 61 30 30 30 2c 20 30 78 35 61 38  , 0x5a000, 0x5a8
76d0: 30 30 2c 20 30 78 35 62 30 30 30 2c 0a 09 09 30  00, 0x5b000,...0
76e0: 78 35 63 30 30 30 2c 20 30 78 35 38 38 30 30 2c  x5c000, 0x58800,
76f0: 20 30 78 35 39 38 30 30 2c 20 30 78 35 62 38 30   0x59800, 0x5b80
7700: 30 2c 20 30 78 35 65 38 30 30 2c 0a 09 09 30 78  0, 0x5e800,...0x
7710: 35 65 30 30 30 2c 20 30 78 35 66 30 30 30 2c 20  5e000, 0x5f000, 
7720: 30 78 35 38 30 30 30 2c 20 30 78 35 63 38 30 30  0x58000, 0x5c800
7730: 2c 20 30 78 35 39 30 30 30 2c 0a 09 09 30 78 35  , 0x59000,...0x5
7740: 64 38 30 30 2c 20 30 78 35 66 38 30 30 2c 20 30  d800, 0x5f800, 0
7750: 78 34 64 30 30 30 2c 20 30 78 34 61 30 30 30 2c  x4d000, 0x4a000,
7760: 20 30 78 34 61 38 30 30 2c 0a 09 09 30 78 34 62   0x4a800,...0x4b
7770: 30 30 30 2c 20 30 78 34 63 30 30 30 2c 20 30 78  000, 0x4c000, 0x
7780: 34 38 38 30 30 2c 20 30 78 34 39 38 30 30 2c 20  48800, 0x49800, 
7790: 30 78 34 62 38 30 30 2c 0a 09 09 30 78 34 65 38  0x4b800,...0x4e8
77a0: 30 30 2c 20 30 78 34 65 30 30 30 2c 20 30 78 34  00, 0x4e000, 0x4
77b0: 66 30 30 30 2c 20 30 78 34 38 30 30 30 2c 20 30  f000, 0x48000, 0
77c0: 78 34 63 38 30 30 2c 0a 09 09 30 78 34 39 30 30  x4c800,...0x4900
77d0: 30 2c 20 30 78 34 64 38 30 30 2c 20 30 78 34 66  0, 0x4d800, 0x4f
77e0: 38 30 30 2c 20 30 78 64 30 30 30 2c 20 20 30 78  800, 0xd000,  0x
77f0: 61 30 30 30 2c 0a 09 09 30 78 61 38 30 30 2c 20  a000,...0xa800, 
7800: 20 30 78 62 30 30 30 2c 20 20 30 78 63 30 30 30   0xb000,  0xc000
7810: 2c 20 20 30 78 38 38 30 30 2c 20 20 30 78 39 38  ,  0x8800,  0x98
7820: 30 30 2c 0a 09 09 30 78 62 38 30 30 2c 20 20 30  00,...0xb800,  0
7830: 78 65 38 30 30 2c 20 20 30 78 65 30 30 30 2c 20  xe800,  0xe000, 
7840: 20 30 78 66 30 30 30 2c 20 20 30 78 38 30 30 30   0xf000,  0x8000
7850: 2c 0a 09 09 30 78 63 38 30 30 2c 20 20 30 78 39  ,...0xc800,  0x9
7860: 30 30 30 2c 20 20 30 78 64 38 30 30 2c 20 20 30  000,  0xd800,  0
7870: 78 66 38 30 30 2c 20 20 30 78 33 64 30 30 30 2c  xf800,  0x3d000,
7880: 0a 09 09 30 78 33 61 30 30 30 2c 20 30 78 33 61  ...0x3a000, 0x3a
7890: 38 30 30 2c 20 30 78 33 62 30 30 30 2c 20 30 78  800, 0x3b000, 0x
78a0: 33 63 30 30 30 2c 20 30 78 33 38 38 30 30 2c 0a  3c000, 0x38800,.
78b0: 09 09 30 78 33 39 38 30 30 2c 20 30 78 33 62 38  ..0x39800, 0x3b8
78c0: 30 30 2c 20 30 78 33 65 38 30 30 2c 20 30 78 33  00, 0x3e800, 0x3
78d0: 65 30 30 30 2c 20 30 78 33 66 30 30 30 2c 0a 09  e000, 0x3f000,..
78e0: 09 30 78 33 38 30 30 30 2c 20 30 78 33 63 38 30  .0x38000, 0x3c80
78f0: 30 2c 20 30 78 33 39 30 30 30 2c 20 30 78 33 64  0, 0x39000, 0x3d
7900: 38 30 30 2c 20 30 78 33 66 38 30 30 2c 0a 09 09  800, 0x3f800,...
7910: 30 78 33 35 30 30 30 2c 20 30 78 33 32 30 30 30  0x35000, 0x32000
7920: 2c 20 30 78 33 32 38 30 30 2c 20 30 78 33 33 30  , 0x32800, 0x330
7930: 30 30 2c 20 30 78 33 34 30 30 30 2c 0a 09 09 30  00, 0x34000,...0
7940: 78 33 30 38 30 30 2c 20 30 78 33 31 38 30 30 2c  x30800, 0x31800,
7950: 20 30 78 33 33 38 30 30 2c 20 30 78 33 36 38 30   0x33800, 0x3680
7960: 30 2c 20 30 78 33 36 30 30 30 2c 0a 09 09 30 78  0, 0x36000,...0x
7970: 33 37 30 30 30 2c 20 30 78 33 30 30 30 30 2c 20  37000, 0x30000, 
7980: 30 78 33 34 38 30 30 2c 20 30 78 33 31 30 30 30  0x34800, 0x31000
7990: 2c 20 30 78 33 35 38 30 30 2c 0a 09 09 30 78 33  , 0x35800,...0x3
79a0: 37 38 30 30 2c 20 30 78 31 64 30 30 30 2c 20 30  7800, 0x1d000, 0
79b0: 78 31 61 30 30 30 2c 20 30 78 31 61 38 30 30 2c  x1a000, 0x1a800,
79c0: 20 30 78 31 62 30 30 30 2c 0a 09 09 30 78 31 63   0x1b000,...0x1c
79d0: 30 30 30 2c 20 30 78 31 38 38 30 30 2c 20 30 78  000, 0x18800, 0x
79e0: 31 39 38 30 30 2c 20 30 78 31 62 38 30 30 2c 20  19800, 0x1b800, 
79f0: 30 78 31 65 38 30 30 2c 0a 09 09 30 78 31 65 30  0x1e800,...0x1e0
7a00: 30 30 2c 20 30 78 31 66 30 30 30 2c 20 30 78 31  00, 0x1f000, 0x1
7a10: 38 30 30 30 2c 20 30 78 31 63 38 30 30 2c 20 30  8000, 0x1c800, 0
7a20: 78 31 39 30 30 30 2c 0a 09 09 30 78 31 64 38 30  x19000,...0x1d80
7a30: 30 2c 20 30 78 31 66 38 30 30 2c 20 30 78 36 35  0, 0x1f800, 0x65
7a40: 30 30 30 2c 20 30 78 36 32 30 30 30 2c 20 30 78  000, 0x62000, 0x
7a50: 36 32 38 30 30 2c 0a 09 09 30 78 36 33 30 30 30  62800,...0x63000
7a60: 2c 20 30 78 36 34 30 30 30 2c 20 30 78 36 30 38  , 0x64000, 0x608
7a70: 30 30 2c 20 30 78 36 31 38 30 30 2c 20 30 78 36  00, 0x61800, 0x6
7a80: 33 38 30 30 2c 0a 09 09 30 78 36 36 38 30 30 2c  3800,...0x66800,
7a90: 20 30 78 36 36 30 30 30 2c 20 30 78 36 37 30 30   0x66000, 0x6700
7aa0: 30 2c 20 30 78 36 30 30 30 30 2c 20 30 78 36 34  0, 0x60000, 0x64
7ab0: 38 30 30 2c 0a 09 09 30 78 36 31 30 30 30 2c 20  800,...0x61000, 
7ac0: 30 78 36 35 38 30 30 2c 20 30 78 36 37 38 30 30  0x65800, 0x67800
7ad0: 2c 20 30 78 37 35 30 30 30 2c 20 30 78 37 32 30  , 0x75000, 0x720
7ae0: 30 30 2c 0a 09 09 30 78 37 32 38 30 30 2c 20 30  00,...0x72800, 0
7af0: 78 37 33 30 30 30 2c 20 30 78 37 34 30 30 30 2c  x73000, 0x74000,
7b00: 20 30 78 37 30 38 30 30 2c 20 30 78 37 31 38 30   0x70800, 0x7180
7b10: 30 2c 0a 09 09 30 78 37 33 38 30 30 2c 20 30 78  0,...0x73800, 0x
7b20: 37 36 38 30 30 2c 20 30 78 37 36 30 30 30 2c 20  76800, 0x76000, 
7b30: 30 78 37 37 30 30 30 2c 20 30 78 37 30 30 30 30  0x77000, 0x70000
7b40: 2c 0a 09 09 30 78 37 34 38 30 30 2c 20 30 78 37  ,...0x74800, 0x7
7b50: 31 30 30 30 2c 20 30 78 37 35 38 30 30 2c 20 30  1000, 0x75800, 0
7b60: 78 37 37 38 30 30 2c 20 30 78 35 35 30 30 30 2c  x77800, 0x55000,
7b70: 0a 09 09 30 78 35 32 30 30 30 2c 20 30 78 35 32  ...0x52000, 0x52
7b80: 38 30 30 2c 20 30 78 35 33 30 30 30 2c 20 30 78  800, 0x53000, 0x
7b90: 35 34 30 30 30 2c 20 30 78 35 30 38 30 30 2c 0a  54000, 0x50800,.
7ba0: 09 09 30 78 35 31 38 30 30 2c 20 30 78 35 33 38  ..0x51800, 0x538
7bb0: 30 30 2c 20 30 78 35 36 38 30 30 2c 20 30 78 35  00, 0x56800, 0x5
7bc0: 36 30 30 30 2c 20 30 78 35 37 30 30 30 2c 0a 09  6000, 0x57000,..
7bd0: 09 30 78 35 30 30 30 30 2c 20 30 78 35 34 38 30  .0x50000, 0x5480
7be0: 30 2c 20 30 78 35 31 30 30 30 2c 20 30 78 35 35  0, 0x51000, 0x55
7bf0: 38 30 30 2c 20 30 78 35 37 38 30 30 2c 0a 09 09  800, 0x57800,...
7c00: 30 78 34 35 30 30 30 2c 20 30 78 34 32 30 30 30  0x45000, 0x42000
7c10: 2c 20 30 78 34 32 38 30 30 2c 20 30 78 34 33 30  , 0x42800, 0x430
7c20: 30 30 2c 20 30 78 34 34 30 30 30 2c 0a 09 09 30  00, 0x44000,...0
7c30: 78 34 30 38 30 30 2c 20 30 78 34 31 38 30 30 2c  x40800, 0x41800,
7c40: 20 30 78 34 33 38 30 30 2c 20 30 78 34 36 38 30   0x43800, 0x4680
7c50: 30 2c 20 30 78 34 36 30 30 30 2c 0a 09 09 30 78  0, 0x46000,...0x
7c60: 34 37 30 30 30 2c 20 30 78 34 30 30 30 30 2c 20  47000, 0x40000, 
7c70: 30 78 34 34 38 30 30 2c 20 30 78 34 31 30 30 30  0x44800, 0x41000
7c80: 2c 20 30 78 34 35 38 30 30 2c 20 30 78 34 37 38  , 0x45800, 0x478
7c90: 30 30 0a 09 7d 2c 20 7b 0a 09 09 30 78 32 33 38  00..}, {...0x238
7ca0: 30 30 30 30 2c 20 30 78 32 37 38 30 30 30 30 2c  0000, 0x2780000,
7cb0: 20 30 78 32 36 30 30 30 30 30 2c 20 30 78 32 37   0x2600000, 0x27
7cc0: 30 30 30 30 30 2c 20 30 78 32 34 38 30 30 30 30  00000, 0x2480000
7cd0: 2c 0a 09 09 30 78 32 32 30 30 30 30 30 2c 20 30  ,...0x2200000, 0
7ce0: 78 32 30 38 30 30 30 30 2c 20 30 78 32 30 30 30  x2080000, 0x2000
7cf0: 30 30 30 2c 20 30 78 32 31 38 30 30 30 30 2c 20  000, 0x2180000, 
7d00: 30 78 32 35 38 30 30 30 30 2c 0a 09 09 30 78 32  0x2580000,...0x2
7d10: 32 38 30 30 30 30 2c 20 30 78 32 31 30 30 30 30  280000, 0x210000
7d20: 30 2c 20 30 78 32 33 30 30 30 30 30 2c 20 30 78  0, 0x2300000, 0x
7d30: 32 35 30 30 30 30 30 2c 20 30 78 32 34 30 30 30  2500000, 0x24000
7d40: 30 30 2c 0a 09 09 30 78 32 36 38 30 30 30 30 2c  00,...0x2680000,
7d50: 20 30 78 35 33 38 30 30 30 30 2c 20 30 78 35 37   0x5380000, 0x57
7d60: 38 30 30 30 30 2c 20 30 78 35 36 30 30 30 30 30  80000, 0x5600000
7d70: 2c 20 30 78 35 37 30 30 30 30 30 2c 0a 09 09 30  , 0x5700000,...0
7d80: 78 35 34 38 30 30 30 30 2c 20 30 78 35 32 30 30  x5480000, 0x5200
7d90: 30 30 30 2c 20 30 78 35 30 38 30 30 30 30 2c 20  000, 0x5080000, 
7da0: 30 78 35 30 30 30 30 30 30 2c 20 30 78 35 31 38  0x5000000, 0x518
7db0: 30 30 30 30 2c 0a 09 09 30 78 35 35 38 30 30 30  0000,...0x558000
7dc0: 30 2c 20 30 78 35 32 38 30 30 30 30 2c 20 30 78  0, 0x5280000, 0x
7dd0: 35 31 30 30 30 30 30 2c 20 30 78 35 33 30 30 30  5100000, 0x53000
7de0: 30 30 2c 20 30 78 35 35 30 30 30 30 30 2c 0a 09  00, 0x5500000,..
7df0: 09 30 78 35 34 30 30 30 30 30 2c 20 30 78 35 36  .0x5400000, 0x56
7e00: 38 30 30 30 30 2c 20 30 78 33 62 38 30 30 30 30  80000, 0x3b80000
7e10: 2c 20 30 78 33 66 38 30 30 30 30 2c 20 30 78 33  , 0x3f80000, 0x3
7e20: 65 30 30 30 30 30 2c 0a 09 09 30 78 33 66 30 30  e00000,...0x3f00
7e30: 30 30 30 2c 20 30 78 33 63 38 30 30 30 30 2c 20  000, 0x3c80000, 
7e40: 30 78 33 61 30 30 30 30 30 2c 20 30 78 33 38 38  0x3a00000, 0x388
7e50: 30 30 30 30 2c 20 30 78 33 38 30 30 30 30 30 2c  0000, 0x3800000,
7e60: 0a 09 09 30 78 33 39 38 30 30 30 30 2c 20 30 78  ...0x3980000, 0x
7e70: 33 64 38 30 30 30 30 2c 20 30 78 33 61 38 30 30  3d80000, 0x3a800
7e80: 30 30 2c 20 30 78 33 39 30 30 30 30 30 2c 20 30  00, 0x3900000, 0
7e90: 78 33 62 30 30 30 30 30 2c 0a 09 09 30 78 33 64  x3b00000,...0x3d
7ea0: 30 30 30 30 30 2c 20 30 78 33 63 30 30 30 30 30  00000, 0x3c00000
7eb0: 2c 20 30 78 33 65 38 30 30 30 30 2c 20 30 78 36  , 0x3e80000, 0x6
7ec0: 33 38 30 30 30 30 2c 20 30 78 36 37 38 30 30 30  380000, 0x678000
7ed0: 30 2c 0a 09 09 30 78 36 36 30 30 30 30 30 2c 20  0,...0x6600000, 
7ee0: 30 78 36 37 30 30 30 30 30 2c 20 30 78 36 34 38  0x6700000, 0x648
7ef0: 30 30 30 30 2c 20 30 78 36 32 30 30 30 30 30 2c  0000, 0x6200000,
7f00: 20 30 78 36 30 38 30 30 30 30 2c 0a 09 09 30 78   0x6080000,...0x
7f10: 36 30 30 30 30 30 30 2c 20 30 78 36 31 38 30 30  6000000, 0x61800
7f20: 30 30 2c 20 30 78 36 35 38 30 30 30 30 2c 20 30  00, 0x6580000, 0
7f30: 78 36 32 38 30 30 30 30 2c 20 30 78 36 31 30 30  x6280000, 0x6100
7f40: 30 30 30 2c 0a 09 09 30 78 36 33 30 30 30 30 30  000,...0x6300000
7f50: 2c 20 30 78 36 35 30 30 30 30 30 2c 20 30 78 36  , 0x6500000, 0x6
7f60: 34 30 30 30 30 30 2c 20 30 78 36 36 38 30 30 30  400000, 0x668000
7f70: 30 2c 20 30 78 33 38 30 30 30 30 2c 0a 09 09 30  0, 0x380000,...0
7f80: 78 37 38 30 30 30 30 2c 20 20 30 78 36 30 30 30  x780000,  0x6000
7f90: 30 30 2c 20 20 30 78 37 30 30 30 30 30 2c 20 20  00,  0x700000,  
7fa0: 30 78 34 38 30 30 30 30 2c 20 20 30 78 32 30 30  0x480000,  0x200
7fb0: 30 30 30 2c 0a 09 09 30 78 38 30 30 30 30 2c 20  000,...0x80000, 
7fc0: 20 20 30 78 30 2c 20 20 20 20 20 20 20 30 78 31    0x0,       0x1
7fd0: 38 30 30 30 30 2c 20 20 30 78 35 38 30 30 30 30  80000,  0x580000
7fe0: 2c 20 20 30 78 32 38 30 30 30 30 2c 0a 09 09 30  ,  0x280000,...0
7ff0: 78 31 30 30 30 30 30 2c 20 20 30 78 33 30 30 30  x100000,  0x3000
8000: 30 30 2c 20 20 30 78 35 30 30 30 30 30 2c 20 20  00,  0x500000,  
8010: 30 78 34 30 30 30 30 30 2c 20 20 30 78 36 38 30  0x400000,  0x680
8020: 30 30 30 2c 0a 09 09 30 78 37 62 38 30 30 30 30  000,...0x7b80000
8030: 2c 20 30 78 37 66 38 30 30 30 30 2c 20 30 78 37  , 0x7f80000, 0x7
8040: 65 30 30 30 30 30 2c 20 30 78 37 66 30 30 30 30  e00000, 0x7f0000
8050: 30 2c 20 30 78 37 63 38 30 30 30 30 2c 0a 09 09  0, 0x7c80000,...
8060: 30 78 37 61 30 30 30 30 30 2c 20 30 78 37 38 38  0x7a00000, 0x788
8070: 30 30 30 30 2c 20 30 78 37 38 30 30 30 30 30 2c  0000, 0x7800000,
8080: 20 30 78 37 39 38 30 30 30 30 2c 20 30 78 37 64   0x7980000, 0x7d
8090: 38 30 30 30 30 2c 0a 09 09 30 78 37 61 38 30 30  80000,...0x7a800
80a0: 30 30 2c 20 30 78 37 39 30 30 30 30 30 2c 20 30  00, 0x7900000, 0
80b0: 78 37 62 30 30 30 30 30 2c 20 30 78 37 64 30 30  x7b00000, 0x7d00
80c0: 30 30 30 2c 20 30 78 37 63 30 30 30 30 30 2c 0a  000, 0x7c00000,.
80d0: 09 09 30 78 37 65 38 30 30 30 30 2c 20 30 78 31  ..0x7e80000, 0x1
80e0: 33 38 30 30 30 30 2c 20 30 78 31 37 38 30 30 30  380000, 0x178000
80f0: 30 2c 20 30 78 31 36 30 30 30 30 30 2c 20 30 78  0, 0x1600000, 0x
8100: 31 37 30 30 30 30 30 2c 0a 09 09 30 78 31 34 38  1700000,...0x148
8110: 30 30 30 30 2c 20 30 78 31 32 30 30 30 30 30 2c  0000, 0x1200000,
8120: 20 30 78 31 30 38 30 30 30 30 2c 20 30 78 31 30   0x1080000, 0x10
8130: 30 30 30 30 30 2c 20 30 78 31 31 38 30 30 30 30  00000, 0x1180000
8140: 2c 0a 09 09 30 78 31 35 38 30 30 30 30 2c 20 30  ,...0x1580000, 0
8150: 78 31 32 38 30 30 30 30 2c 20 30 78 31 31 30 30  x1280000, 0x1100
8160: 30 30 30 2c 20 30 78 31 33 30 30 30 30 30 2c 20  000, 0x1300000, 
8170: 30 78 31 35 30 30 30 30 30 2c 0a 09 09 30 78 31  0x1500000,...0x1
8180: 34 30 30 30 30 30 2c 20 30 78 31 36 38 30 30 30  400000, 0x168000
8190: 30 2c 20 30 78 34 33 38 30 30 30 30 2c 20 30 78  0, 0x4380000, 0x
81a0: 34 37 38 30 30 30 30 2c 20 30 78 34 36 30 30 30  4780000, 0x46000
81b0: 30 30 2c 0a 09 09 30 78 34 37 30 30 30 30 30 2c  00,...0x4700000,
81c0: 20 30 78 34 34 38 30 30 30 30 2c 20 30 78 34 32   0x4480000, 0x42
81d0: 30 30 30 30 30 2c 20 30 78 34 30 38 30 30 30 30  00000, 0x4080000
81e0: 2c 20 30 78 34 30 30 30 30 30 30 2c 0a 09 09 30  , 0x4000000,...0
81f0: 78 34 31 38 30 30 30 30 2c 20 30 78 34 35 38 30  x4180000, 0x4580
8200: 30 30 30 2c 20 30 78 34 32 38 30 30 30 30 2c 20  000, 0x4280000, 
8210: 30 78 34 31 30 30 30 30 30 2c 20 30 78 34 33 30  0x4100000, 0x430
8220: 30 30 30 30 2c 0a 09 09 30 78 34 35 30 30 30 30  0000,...0x450000
8230: 30 2c 20 30 78 34 34 30 30 30 30 30 2c 20 30 78  0, 0x4400000, 0x
8240: 34 36 38 30 30 30 30 2c 20 30 78 37 33 38 30 30  4680000, 0x73800
8250: 30 30 2c 20 30 78 37 37 38 30 30 30 30 2c 0a 09  00, 0x7780000,..
8260: 09 30 78 37 36 30 30 30 30 30 2c 20 30 78 37 37  .0x7600000, 0x77
8270: 30 30 30 30 30 2c 20 30 78 37 34 38 30 30 30 30  00000, 0x7480000
8280: 2c 20 30 78 37 32 30 30 30 30 30 2c 20 30 78 37  , 0x7200000, 0x7
8290: 30 38 30 30 30 30 2c 0a 09 09 30 78 37 30 30 30  080000,...0x7000
82a0: 30 30 30 2c 20 30 78 37 31 38 30 30 30 30 2c 20  000, 0x7180000, 
82b0: 30 78 37 35 38 30 30 30 30 2c 20 30 78 37 32 38  0x7580000, 0x728
82c0: 30 30 30 30 2c 20 30 78 37 31 30 30 30 30 30 2c  0000, 0x7100000,
82d0: 0a 09 09 30 78 37 33 30 30 30 30 30 2c 20 30 78  ...0x7300000, 0x
82e0: 37 35 30 30 30 30 30 2c 20 30 78 37 34 30 30 30  7500000, 0x74000
82f0: 30 30 2c 20 30 78 37 36 38 30 30 30 30 2c 20 30  00, 0x7680000, 0
8300: 78 62 38 30 30 30 30 2c 0a 09 09 30 78 66 38 30  xb80000,...0xf80
8310: 30 30 30 2c 20 20 30 78 65 30 30 30 30 30 2c 20  000,  0xe00000, 
8320: 20 30 78 66 30 30 30 30 30 2c 20 20 30 78 63 38   0xf00000,  0xc8
8330: 30 30 30 30 2c 20 20 30 78 61 30 30 30 30 30 2c  0000,  0xa00000,
8340: 0a 09 09 30 78 38 38 30 30 30 30 2c 20 20 30 78  ...0x880000,  0x
8350: 38 30 30 30 30 30 2c 20 20 30 78 39 38 30 30 30  800000,  0x98000
8360: 30 2c 20 20 30 78 64 38 30 30 30 30 2c 20 20 30  0,  0xd80000,  0
8370: 78 61 38 30 30 30 30 2c 0a 09 09 30 78 39 30 30  xa80000,...0x900
8380: 30 30 30 2c 20 20 30 78 62 30 30 30 30 30 2c 20  000,  0xb00000, 
8390: 20 30 78 64 30 30 30 30 30 2c 20 20 30 78 63 30   0xd00000,  0xc0
83a0: 30 30 30 30 2c 20 20 30 78 65 38 30 30 30 30 2c  0000,  0xe80000,
83b0: 0a 09 09 30 78 33 33 38 30 30 30 30 2c 20 30 78  ...0x3380000, 0x
83c0: 33 37 38 30 30 30 30 2c 20 30 78 33 36 30 30 30  3780000, 0x36000
83d0: 30 30 2c 20 30 78 33 37 30 30 30 30 30 2c 20 30  00, 0x3700000, 0
83e0: 78 33 34 38 30 30 30 30 2c 0a 09 09 30 78 33 32  x3480000,...0x32
83f0: 30 30 30 30 30 2c 20 30 78 33 30 38 30 30 30 30  00000, 0x3080000
8400: 2c 20 30 78 33 30 30 30 30 30 30 2c 20 30 78 33  , 0x3000000, 0x3
8410: 31 38 30 30 30 30 2c 20 30 78 33 35 38 30 30 30  180000, 0x358000
8420: 30 2c 0a 09 09 30 78 33 32 38 30 30 30 30 2c 20  0,...0x3280000, 
8430: 30 78 33 31 30 30 30 30 30 2c 20 30 78 33 33 30  0x3100000, 0x330
8440: 30 30 30 30 2c 20 30 78 33 35 30 30 30 30 30 2c  0000, 0x3500000,
8450: 20 30 78 33 34 30 30 30 30 30 2c 0a 09 09 30 78   0x3400000,...0x
8460: 33 36 38 30 30 30 30 2c 20 30 78 32 62 38 30 30  3680000, 0x2b800
8470: 30 30 2c 20 30 78 32 66 38 30 30 30 30 2c 20 30  00, 0x2f80000, 0
8480: 78 32 65 30 30 30 30 30 2c 20 30 78 32 66 30 30  x2e00000, 0x2f00
8490: 30 30 30 2c 0a 09 09 30 78 32 63 38 30 30 30 30  000,...0x2c80000
84a0: 2c 20 30 78 32 61 30 30 30 30 30 2c 20 30 78 32  , 0x2a00000, 0x2
84b0: 38 38 30 30 30 30 2c 20 30 78 32 38 30 30 30 30  880000, 0x280000
84c0: 30 2c 20 30 78 32 39 38 30 30 30 30 2c 0a 09 09  0, 0x2980000,...
84d0: 30 78 32 64 38 30 30 30 30 2c 20 30 78 32 61 38  0x2d80000, 0x2a8
84e0: 30 30 30 30 2c 20 30 78 32 39 30 30 30 30 30 2c  0000, 0x2900000,
84f0: 20 30 78 32 62 30 30 30 30 30 2c 20 30 78 32 64   0x2b00000, 0x2d
8500: 30 30 30 30 30 2c 0a 09 09 30 78 32 63 30 30 30  00000,...0x2c000
8510: 30 30 2c 20 30 78 32 65 38 30 30 30 30 2c 20 30  00, 0x2e80000, 0
8520: 78 36 62 38 30 30 30 30 2c 20 30 78 36 66 38 30  x6b80000, 0x6f80
8530: 30 30 30 2c 20 30 78 36 65 30 30 30 30 30 2c 0a  000, 0x6e00000,.
8540: 09 09 30 78 36 66 30 30 30 30 30 2c 20 30 78 36  ..0x6f00000, 0x6
8550: 63 38 30 30 30 30 2c 20 30 78 36 61 30 30 30 30  c80000, 0x6a0000
8560: 30 2c 20 30 78 36 38 38 30 30 30 30 2c 20 30 78  0, 0x6880000, 0x
8570: 36 38 30 30 30 30 30 2c 0a 09 09 30 78 36 39 38  6800000,...0x698
8580: 30 30 30 30 2c 20 30 78 36 64 38 30 30 30 30 2c  0000, 0x6d80000,
8590: 20 30 78 36 61 38 30 30 30 30 2c 20 30 78 36 39   0x6a80000, 0x69
85a0: 30 30 30 30 30 2c 20 30 78 36 62 30 30 30 30 30  00000, 0x6b00000
85b0: 2c 0a 09 09 30 78 36 64 30 30 30 30 30 2c 20 30  ,...0x6d00000, 0
85c0: 78 36 63 30 30 30 30 30 2c 20 30 78 36 65 38 30  x6c00000, 0x6e80
85d0: 30 30 30 2c 20 30 78 35 62 38 30 30 30 30 2c 20  000, 0x5b80000, 
85e0: 30 78 35 66 38 30 30 30 30 2c 0a 09 09 30 78 35  0x5f80000,...0x5
85f0: 65 30 30 30 30 30 2c 20 30 78 35 66 30 30 30 30  e00000, 0x5f0000
8600: 30 2c 20 30 78 35 63 38 30 30 30 30 2c 20 30 78  0, 0x5c80000, 0x
8610: 35 61 30 30 30 30 30 2c 20 30 78 35 38 38 30 30  5a00000, 0x58800
8620: 30 30 2c 0a 09 09 30 78 35 38 30 30 30 30 30 2c  00,...0x5800000,
8630: 20 30 78 35 39 38 30 30 30 30 2c 20 30 78 35 64   0x5980000, 0x5d
8640: 38 30 30 30 30 2c 20 30 78 35 61 38 30 30 30 30  80000, 0x5a80000
8650: 2c 20 30 78 35 39 30 30 30 30 30 2c 0a 09 09 30  , 0x5900000,...0
8660: 78 35 62 30 30 30 30 30 2c 20 30 78 35 64 30 30  x5b00000, 0x5d00
8670: 30 30 30 2c 20 30 78 35 63 30 30 30 30 30 2c 20  000, 0x5c00000, 
8680: 30 78 35 65 38 30 30 30 30 2c 20 30 78 34 62 38  0x5e80000, 0x4b8
8690: 30 30 30 30 2c 0a 09 09 30 78 34 66 38 30 30 30  0000,...0x4f8000
86a0: 30 2c 20 30 78 34 65 30 30 30 30 30 2c 20 30 78  0, 0x4e00000, 0x
86b0: 34 66 30 30 30 30 30 2c 20 30 78 34 63 38 30 30  4f00000, 0x4c800
86c0: 30 30 2c 20 30 78 34 61 30 30 30 30 30 2c 0a 09  00, 0x4a00000,..
86d0: 09 30 78 34 38 38 30 30 30 30 2c 20 30 78 34 38  .0x4880000, 0x48
86e0: 30 30 30 30 30 2c 20 30 78 34 39 38 30 30 30 30  00000, 0x4980000
86f0: 2c 20 30 78 34 64 38 30 30 30 30 2c 20 30 78 34  , 0x4d80000, 0x4
8700: 61 38 30 30 30 30 2c 0a 09 09 30 78 34 39 30 30  a80000,...0x4900
8710: 30 30 30 2c 20 30 78 34 62 30 30 30 30 30 2c 20  000, 0x4b00000, 
8720: 30 78 34 64 30 30 30 30 30 2c 20 30 78 34 63 30  0x4d00000, 0x4c0
8730: 30 30 30 30 2c 20 30 78 34 65 38 30 30 30 30 2c  0000, 0x4e80000,
8740: 0a 09 09 30 78 31 62 38 30 30 30 30 2c 20 30 78  ...0x1b80000, 0x
8750: 31 66 38 30 30 30 30 2c 20 30 78 31 65 30 30 30  1f80000, 0x1e000
8760: 30 30 2c 20 30 78 31 66 30 30 30 30 30 2c 20 30  00, 0x1f00000, 0
8770: 78 31 63 38 30 30 30 30 2c 0a 09 09 30 78 31 61  x1c80000,...0x1a
8780: 30 30 30 30 30 2c 20 30 78 31 38 38 30 30 30 30  00000, 0x1880000
8790: 2c 20 30 78 31 38 30 30 30 30 30 2c 20 30 78 31  , 0x1800000, 0x1
87a0: 39 38 30 30 30 30 2c 20 30 78 31 64 38 30 30 30  980000, 0x1d8000
87b0: 30 2c 0a 09 09 30 78 31 61 38 30 30 30 30 2c 20  0,...0x1a80000, 
87c0: 30 78 31 39 30 30 30 30 30 2c 20 30 78 31 62 30  0x1900000, 0x1b0
87d0: 30 30 30 30 2c 20 30 78 31 64 30 30 30 30 30 2c  0000, 0x1d00000,
87e0: 20 30 78 31 63 30 30 30 30 30 2c 0a 09 09 30 78   0x1c00000,...0x
87f0: 31 65 38 30 30 30 30 0a 09 7d 2c 20 7b 0a 09 09  1e80000..}, {...
8800: 30 78 62 38 30 30 30 30 30 33 2c 20 30 78 62 30  0xb8000003, 0xb0
8810: 30 30 30 30 30 33 2c 20 30 78 61 30 30 30 30 30  000003, 0xa00000
8820: 30 33 2c 20 30 78 64 38 30 30 30 30 30 33 2c 20  03, 0xd8000003, 
8830: 30 78 63 38 30 30 30 30 30 33 2c 0a 09 09 30 78  0xc8000003,...0x
8840: 65 30 30 30 30 30 30 33 2c 20 30 78 39 30 30 30  e0000003, 0x9000
8850: 30 30 30 33 2c 20 30 78 64 30 30 30 30 30 30 33  0003, 0xd0000003
8860: 2c 20 30 78 38 38 30 30 30 30 30 33 2c 20 30 78  , 0x88000003, 0x
8870: 63 30 30 30 30 30 30 33 2c 0a 09 09 30 78 38 30  c0000003,...0x80
8880: 30 30 30 30 30 33 2c 20 30 78 66 30 30 30 30 30  000003, 0xf00000
8890: 30 33 2c 20 30 78 66 38 30 30 30 30 30 33 2c 20  03, 0xf8000003, 
88a0: 30 78 65 38 30 30 30 30 30 33 2c 20 30 78 39 38  0xe8000003, 0x98
88b0: 30 30 30 30 30 33 2c 0a 09 09 30 78 61 38 30 30  000003,...0xa800
88c0: 30 30 30 33 2c 20 30 78 33 38 30 30 30 30 30 33  0003, 0x38000003
88d0: 2c 20 30 78 33 30 30 30 30 30 30 33 2c 20 30 78  , 0x30000003, 0x
88e0: 32 30 30 30 30 30 30 33 2c 20 30 78 35 38 30 30  20000003, 0x5800
88f0: 30 30 30 33 2c 0a 09 09 30 78 34 38 30 30 30 30  0003,...0x480000
8900: 30 33 2c 20 30 78 36 30 30 30 30 30 30 33 2c 20  03, 0x60000003, 
8910: 30 78 31 30 30 30 30 30 30 33 2c 20 30 78 35 30  0x10000003, 0x50
8920: 30 30 30 30 30 33 2c 20 30 78 38 30 30 30 30 30  000003, 0x800000
8930: 33 2c 0a 09 09 30 78 34 30 30 30 30 30 30 33 2c  3,...0x40000003,
8940: 20 30 78 33 2c 20 20 20 20 20 20 20 20 30 78 37   0x3,        0x7
8950: 30 30 30 30 30 30 33 2c 20 30 78 37 38 30 30 30  0000003, 0x78000
8960: 30 30 33 2c 20 30 78 36 38 30 30 30 30 30 33 2c  003, 0x68000003,
8970: 0a 09 09 30 78 31 38 30 30 30 30 30 33 2c 20 30  ...0x18000003, 0
8980: 78 32 38 30 30 30 30 30 33 2c 20 30 78 33 38 30  x28000003, 0x380
8990: 30 30 30 30 31 2c 20 30 78 33 30 30 30 30 30 30  00001, 0x3000000
89a0: 31 2c 20 30 78 32 30 30 30 30 30 30 31 2c 0a 09  1, 0x20000001,..
89b0: 09 30 78 35 38 30 30 30 30 30 31 2c 20 30 78 34  .0x58000001, 0x4
89c0: 38 30 30 30 30 30 31 2c 20 30 78 36 30 30 30 30  8000001, 0x60000
89d0: 30 30 31 2c 20 30 78 31 30 30 30 30 30 30 31 2c  001, 0x10000001,
89e0: 20 30 78 35 30 30 30 30 30 30 31 2c 0a 09 09 30   0x50000001,...0
89f0: 78 38 30 30 30 30 30 31 2c 20 20 30 78 34 30 30  x8000001,  0x400
8a00: 30 30 30 30 31 2c 20 30 78 31 2c 20 20 20 20 20  00001, 0x1,     
8a10: 20 20 20 30 78 37 30 30 30 30 30 30 31 2c 20 30     0x70000001, 0
8a20: 78 37 38 30 30 30 30 30 31 2c 0a 09 09 30 78 36  x78000001,...0x6
8a30: 38 30 30 30 30 30 31 2c 20 30 78 31 38 30 30 30  8000001, 0x18000
8a40: 30 30 31 2c 20 30 78 32 38 30 30 30 30 30 31 2c  001, 0x28000001,
8a50: 20 30 78 33 38 30 30 30 30 30 32 2c 20 30 78 33   0x38000002, 0x3
8a60: 30 30 30 30 30 30 32 2c 0a 09 09 30 78 32 30 30  0000002,...0x200
8a70: 30 30 30 30 32 2c 20 30 78 35 38 30 30 30 30 30  00002, 0x5800000
8a80: 32 2c 20 30 78 34 38 30 30 30 30 30 32 2c 20 30  2, 0x48000002, 0
8a90: 78 36 30 30 30 30 30 30 32 2c 20 30 78 31 30 30  x60000002, 0x100
8aa0: 30 30 30 30 32 2c 0a 09 09 30 78 35 30 30 30 30  00002,...0x50000
8ab0: 30 30 32 2c 20 30 78 38 30 30 30 30 30 32 2c 20  002, 0x8000002, 
8ac0: 20 30 78 34 30 30 30 30 30 30 32 2c 20 30 78 32   0x40000002, 0x2
8ad0: 2c 20 20 20 20 20 20 20 20 30 78 37 30 30 30 30  ,        0x70000
8ae0: 30 30 32 2c 0a 09 09 30 78 37 38 30 30 30 30 30  002,...0x7800000
8af0: 32 2c 20 30 78 36 38 30 30 30 30 30 32 2c 20 30  2, 0x68000002, 0
8b00: 78 31 38 30 30 30 30 30 32 2c 20 30 78 32 38 30  x18000002, 0x280
8b10: 30 30 30 30 32 2c 20 30 78 62 38 30 30 30 30 30  00002, 0xb800000
8b20: 36 2c 0a 09 09 30 78 62 30 30 30 30 30 30 36 2c  6,...0xb0000006,
8b30: 20 30 78 61 30 30 30 30 30 30 36 2c 20 30 78 64   0xa0000006, 0xd
8b40: 38 30 30 30 30 30 36 2c 20 30 78 63 38 30 30 30  8000006, 0xc8000
8b50: 30 30 36 2c 20 30 78 65 30 30 30 30 30 30 36 2c  006, 0xe0000006,
8b60: 0a 09 09 30 78 39 30 30 30 30 30 30 36 2c 20 30  ...0x90000006, 0
8b70: 78 64 30 30 30 30 30 30 36 2c 20 30 78 38 38 30  xd0000006, 0x880
8b80: 30 30 30 30 36 2c 20 30 78 63 30 30 30 30 30 30  00006, 0xc000000
8b90: 36 2c 20 30 78 38 30 30 30 30 30 30 36 2c 0a 09  6, 0x80000006,..
8ba0: 09 30 78 66 30 30 30 30 30 30 36 2c 20 30 78 66  .0xf0000006, 0xf
8bb0: 38 30 30 30 30 30 36 2c 20 30 78 65 38 30 30 30  8000006, 0xe8000
8bc0: 30 30 36 2c 20 30 78 39 38 30 30 30 30 30 36 2c  006, 0x98000006,
8bd0: 20 30 78 61 38 30 30 30 30 30 36 2c 0a 09 09 30   0xa8000006,...0
8be0: 78 62 38 30 30 30 30 30 34 2c 20 30 78 62 30 30  xb8000004, 0xb00
8bf0: 30 30 30 30 34 2c 20 30 78 61 30 30 30 30 30 30  00004, 0xa000000
8c00: 34 2c 20 30 78 64 38 30 30 30 30 30 34 2c 20 30  4, 0xd8000004, 0
8c10: 78 63 38 30 30 30 30 30 34 2c 0a 09 09 30 78 65  xc8000004,...0xe
8c20: 30 30 30 30 30 30 34 2c 20 30 78 39 30 30 30 30  0000004, 0x90000
8c30: 30 30 34 2c 20 30 78 64 30 30 30 30 30 30 34 2c  004, 0xd0000004,
8c40: 20 30 78 38 38 30 30 30 30 30 34 2c 20 30 78 63   0x88000004, 0xc
8c50: 30 30 30 30 30 30 34 2c 0a 09 09 30 78 38 30 30  0000004,...0x800
8c60: 30 30 30 30 34 2c 20 30 78 66 30 30 30 30 30 30  00004, 0xf000000
8c70: 34 2c 20 30 78 66 38 30 30 30 30 30 34 2c 20 30  4, 0xf8000004, 0
8c80: 78 65 38 30 30 30 30 30 34 2c 20 30 78 39 38 30  xe8000004, 0x980
8c90: 30 30 30 30 34 2c 0a 09 09 30 78 61 38 30 30 30  00004,...0xa8000
8ca0: 30 30 34 2c 20 30 78 62 38 30 30 30 30 30 37 2c  004, 0xb8000007,
8cb0: 20 30 78 62 30 30 30 30 30 30 37 2c 20 30 78 61   0xb0000007, 0xa
8cc0: 30 30 30 30 30 30 37 2c 20 30 78 64 38 30 30 30  0000007, 0xd8000
8cd0: 30 30 37 2c 0a 09 09 30 78 63 38 30 30 30 30 30  007,...0xc800000
8ce0: 37 2c 20 30 78 65 30 30 30 30 30 30 37 2c 20 30  7, 0xe0000007, 0
8cf0: 78 39 30 30 30 30 30 30 37 2c 20 30 78 64 30 30  x90000007, 0xd00
8d00: 30 30 30 30 37 2c 20 30 78 38 38 30 30 30 30 30  00007, 0x8800000
8d10: 37 2c 0a 09 09 30 78 63 30 30 30 30 30 30 37 2c  7,...0xc0000007,
8d20: 20 30 78 38 30 30 30 30 30 30 37 2c 20 30 78 66   0x80000007, 0xf
8d30: 30 30 30 30 30 30 37 2c 20 30 78 66 38 30 30 30  0000007, 0xf8000
8d40: 30 30 37 2c 20 30 78 65 38 30 30 30 30 30 37 2c  007, 0xe8000007,
8d50: 0a 09 09 30 78 39 38 30 30 30 30 30 37 2c 20 30  ...0x98000007, 0
8d60: 78 61 38 30 30 30 30 30 37 2c 20 30 78 33 38 30  xa8000007, 0x380
8d70: 30 30 30 30 30 2c 20 30 78 33 30 30 30 30 30 30  00000, 0x3000000
8d80: 30 2c 20 30 78 32 30 30 30 30 30 30 30 2c 0a 09  0, 0x20000000,..
8d90: 09 30 78 35 38 30 30 30 30 30 30 2c 20 30 78 34  .0x58000000, 0x4
8da0: 38 30 30 30 30 30 30 2c 20 30 78 36 30 30 30 30  8000000, 0x60000
8db0: 30 30 30 2c 20 30 78 31 30 30 30 30 30 30 30 2c  000, 0x10000000,
8dc0: 20 30 78 35 30 30 30 30 30 30 30 2c 0a 09 09 30   0x50000000,...0
8dd0: 78 38 30 30 30 30 30 30 2c 20 20 30 78 34 30 30  x8000000,  0x400
8de0: 30 30 30 30 30 2c 20 30 78 30 2c 20 20 20 20 20  00000, 0x0,     
8df0: 20 20 20 30 78 37 30 30 30 30 30 30 30 2c 20 30     0x70000000, 0
8e00: 78 37 38 30 30 30 30 30 30 2c 0a 09 09 30 78 36  x78000000,...0x6
8e10: 38 30 30 30 30 30 30 2c 20 30 78 31 38 30 30 30  8000000, 0x18000
8e20: 30 30 30 2c 20 30 78 32 38 30 30 30 30 30 30 2c  000, 0x28000000,
8e30: 20 30 78 33 38 30 30 30 30 30 35 2c 20 30 78 33   0x38000005, 0x3
8e40: 30 30 30 30 30 30 35 2c 0a 09 09 30 78 32 30 30  0000005,...0x200
8e50: 30 30 30 30 35 2c 20 30 78 35 38 30 30 30 30 30  00005, 0x5800000
8e60: 35 2c 20 30 78 34 38 30 30 30 30 30 35 2c 20 30  5, 0x48000005, 0
8e70: 78 36 30 30 30 30 30 30 35 2c 20 30 78 31 30 30  x60000005, 0x100
8e80: 30 30 30 30 35 2c 0a 09 09 30 78 35 30 30 30 30  00005,...0x50000
8e90: 30 30 35 2c 20 30 78 38 30 30 30 30 30 35 2c 20  005, 0x8000005, 
8ea0: 20 30 78 34 30 30 30 30 30 30 35 2c 20 30 78 35   0x40000005, 0x5
8eb0: 2c 20 20 20 20 20 20 20 20 30 78 37 30 30 30 30  ,        0x70000
8ec0: 30 30 35 2c 0a 09 09 30 78 37 38 30 30 30 30 30  005,...0x7800000
8ed0: 35 2c 20 30 78 36 38 30 30 30 30 30 35 2c 20 30  5, 0x68000005, 0
8ee0: 78 31 38 30 30 30 30 30 35 2c 20 30 78 32 38 30  x18000005, 0x280
8ef0: 30 30 30 30 35 2c 20 30 78 62 38 30 30 30 30 30  00005, 0xb800000
8f00: 30 2c 0a 09 09 30 78 62 30 30 30 30 30 30 30 2c  0,...0xb0000000,
8f10: 20 30 78 61 30 30 30 30 30 30 30 2c 20 30 78 64   0xa0000000, 0xd
8f20: 38 30 30 30 30 30 30 2c 20 30 78 63 38 30 30 30  8000000, 0xc8000
8f30: 30 30 30 2c 20 30 78 65 30 30 30 30 30 30 30 2c  000, 0xe0000000,
8f40: 0a 09 09 30 78 39 30 30 30 30 30 30 30 2c 20 30  ...0x90000000, 0
8f50: 78 64 30 30 30 30 30 30 30 2c 20 30 78 38 38 30  xd0000000, 0x880
8f60: 30 30 30 30 30 2c 20 30 78 63 30 30 30 30 30 30  00000, 0xc000000
8f70: 30 2c 20 30 78 38 30 30 30 30 30 30 30 2c 0a 09  0, 0x80000000,..
8f80: 09 30 78 66 30 30 30 30 30 30 30 2c 20 30 78 66  .0xf0000000, 0xf
8f90: 38 30 30 30 30 30 30 2c 20 30 78 65 38 30 30 30  8000000, 0xe8000
8fa0: 30 30 30 2c 20 30 78 39 38 30 30 30 30 30 30 2c  000, 0x98000000,
8fb0: 20 30 78 61 38 30 30 30 30 30 30 2c 0a 09 09 30   0xa8000000,...0
8fc0: 78 62 38 30 30 30 30 30 32 2c 20 30 78 62 30 30  xb8000002, 0xb00
8fd0: 30 30 30 30 32 2c 20 30 78 61 30 30 30 30 30 30  00002, 0xa000000
8fe0: 32 2c 20 30 78 64 38 30 30 30 30 30 32 2c 20 30  2, 0xd8000002, 0
8ff0: 78 63 38 30 30 30 30 30 32 2c 0a 09 09 30 78 65  xc8000002,...0xe
9000: 30 30 30 30 30 30 32 2c 20 30 78 39 30 30 30 30  0000002, 0x90000
9010: 30 30 32 2c 20 30 78 64 30 30 30 30 30 30 32 2c  002, 0xd0000002,
9020: 20 30 78 38 38 30 30 30 30 30 32 2c 20 30 78 63   0x88000002, 0xc
9030: 30 30 30 30 30 30 32 2c 0a 09 09 30 78 38 30 30  0000002,...0x800
9040: 30 30 30 30 32 2c 20 30 78 66 30 30 30 30 30 30  00002, 0xf000000
9050: 32 2c 20 30 78 66 38 30 30 30 30 30 32 2c 20 30  2, 0xf8000002, 0
9060: 78 65 38 30 30 30 30 30 32 2c 20 30 78 39 38 30  xe8000002, 0x980
9070: 30 30 30 30 32 2c 0a 09 09 30 78 61 38 30 30 30  00002,...0xa8000
9080: 30 30 32 2c 20 30 78 62 38 30 30 30 30 30 35 2c  002, 0xb8000005,
9090: 20 30 78 62 30 30 30 30 30 30 35 2c 20 30 78 61   0xb0000005, 0xa
90a0: 30 30 30 30 30 30 35 2c 20 30 78 64 38 30 30 30  0000005, 0xd8000
90b0: 30 30 35 2c 0a 09 09 30 78 63 38 30 30 30 30 30  005,...0xc800000
90c0: 35 2c 20 30 78 65 30 30 30 30 30 30 35 2c 20 30  5, 0xe0000005, 0
90d0: 78 39 30 30 30 30 30 30 35 2c 20 30 78 64 30 30  x90000005, 0xd00
90e0: 30 30 30 30 35 2c 20 30 78 38 38 30 30 30 30 30  00005, 0x8800000
90f0: 35 2c 0a 09 09 30 78 63 30 30 30 30 30 30 35 2c  5,...0xc0000005,
9100: 20 30 78 38 30 30 30 30 30 30 35 2c 20 30 78 66   0x80000005, 0xf
9110: 30 30 30 30 30 30 35 2c 20 30 78 66 38 30 30 30  0000005, 0xf8000
9120: 30 30 35 2c 20 30 78 65 38 30 30 30 30 30 35 2c  005, 0xe8000005,
9130: 0a 09 09 30 78 39 38 30 30 30 30 30 35 2c 20 30  ...0x98000005, 0
9140: 78 61 38 30 30 30 30 30 35 2c 20 30 78 33 38 30  xa8000005, 0x380
9150: 30 30 30 30 34 2c 20 30 78 33 30 30 30 30 30 30  00004, 0x3000000
9160: 34 2c 20 30 78 32 30 30 30 30 30 30 34 2c 0a 09  4, 0x20000004,..
9170: 09 30 78 35 38 30 30 30 30 30 34 2c 20 30 78 34  .0x58000004, 0x4
9180: 38 30 30 30 30 30 34 2c 20 30 78 36 30 30 30 30  8000004, 0x60000
9190: 30 30 34 2c 20 30 78 31 30 30 30 30 30 30 34 2c  004, 0x10000004,
91a0: 20 30 78 35 30 30 30 30 30 30 34 2c 0a 09 09 30   0x50000004,...0
91b0: 78 38 30 30 30 30 30 34 2c 20 20 30 78 34 30 30  x8000004,  0x400
91c0: 30 30 30 30 34 2c 20 30 78 34 2c 20 20 20 20 20  00004, 0x4,     
91d0: 20 20 20 30 78 37 30 30 30 30 30 30 34 2c 20 30     0x70000004, 0
91e0: 78 37 38 30 30 30 30 30 34 2c 0a 09 09 30 78 36  x78000004,...0x6
91f0: 38 30 30 30 30 30 34 2c 20 30 78 31 38 30 30 30  8000004, 0x18000
9200: 30 30 34 2c 20 30 78 32 38 30 30 30 30 30 34 2c  004, 0x28000004,
9210: 20 30 78 33 38 30 30 30 30 30 37 2c 20 30 78 33   0x38000007, 0x3
9220: 30 30 30 30 30 30 37 2c 0a 09 09 30 78 32 30 30  0000007,...0x200
9230: 30 30 30 30 37 2c 20 30 78 35 38 30 30 30 30 30  00007, 0x5800000
9240: 37 2c 20 30 78 34 38 30 30 30 30 30 37 2c 20 30  7, 0x48000007, 0
9250: 78 36 30 30 30 30 30 30 37 2c 20 30 78 31 30 30  x60000007, 0x100
9260: 30 30 30 30 37 2c 0a 09 09 30 78 35 30 30 30 30  00007,...0x50000
9270: 30 30 37 2c 20 30 78 38 30 30 30 30 30 37 2c 20  007, 0x8000007, 
9280: 20 30 78 34 30 30 30 30 30 30 37 2c 20 30 78 37   0x40000007, 0x7
9290: 2c 20 20 20 20 20 20 20 20 30 78 37 30 30 30 30  ,        0x70000
92a0: 30 30 37 2c 0a 09 09 30 78 37 38 30 30 30 30 30  007,...0x7800000
92b0: 37 2c 20 30 78 36 38 30 30 30 30 30 37 2c 20 30  7, 0x68000007, 0
92c0: 78 31 38 30 30 30 30 30 37 2c 20 30 78 32 38 30  x18000007, 0x280
92d0: 30 30 30 30 37 2c 20 30 78 33 38 30 30 30 30 30  00007, 0x3800000
92e0: 36 2c 0a 09 09 30 78 33 30 30 30 30 30 30 36 2c  6,...0x30000006,
92f0: 20 30 78 32 30 30 30 30 30 30 36 2c 20 30 78 35   0x20000006, 0x5
9300: 38 30 30 30 30 30 36 2c 20 30 78 34 38 30 30 30  8000006, 0x48000
9310: 30 30 36 2c 20 30 78 36 30 30 30 30 30 30 36 2c  006, 0x60000006,
9320: 0a 09 09 30 78 31 30 30 30 30 30 30 36 2c 20 30  ...0x10000006, 0
9330: 78 35 30 30 30 30 30 30 36 2c 20 30 78 38 30 30  x50000006, 0x800
9340: 30 30 30 36 2c 20 20 30 78 34 30 30 30 30 30 30  0006,  0x4000000
9350: 36 2c 20 30 78 36 2c 0a 09 09 30 78 37 30 30 30  6, 0x6,...0x7000
9360: 30 30 30 36 2c 20 30 78 37 38 30 30 30 30 30 36  0006, 0x78000006
9370: 2c 20 30 78 36 38 30 30 30 30 30 36 2c 20 30 78  , 0x68000006, 0x
9380: 31 38 30 30 30 30 30 36 2c 20 30 78 32 38 30 30  18000006, 0x2800
9390: 30 30 30 36 2c 0a 09 09 30 78 62 38 30 30 30 30  0006,...0xb80000
93a0: 30 31 2c 20 30 78 62 30 30 30 30 30 30 31 2c 20  01, 0xb0000001, 
93b0: 30 78 61 30 30 30 30 30 30 31 2c 20 30 78 64 38  0xa0000001, 0xd8
93c0: 30 30 30 30 30 31 2c 20 30 78 63 38 30 30 30 30  000001, 0xc80000
93d0: 30 31 2c 0a 09 09 30 78 65 30 30 30 30 30 30 31  01,...0xe0000001
93e0: 2c 20 30 78 39 30 30 30 30 30 30 31 2c 20 30 78  , 0x90000001, 0x
93f0: 64 30 30 30 30 30 30 31 2c 20 30 78 38 38 30 30  d0000001, 0x8800
9400: 30 30 30 31 2c 20 30 78 63 30 30 30 30 30 30 31  0001, 0xc0000001
9410: 2c 0a 09 09 30 78 38 30 30 30 30 30 30 31 2c 20  ,...0x80000001, 
9420: 30 78 66 30 30 30 30 30 30 31 2c 20 30 78 66 38  0xf0000001, 0xf8
9430: 30 30 30 30 30 31 2c 20 30 78 65 38 30 30 30 30  000001, 0xe80000
9440: 30 31 2c 20 30 78 39 38 30 30 30 30 30 31 2c 0a  01, 0x98000001,.
9450: 09 09 30 78 61 38 30 30 30 30 30 31 0a 09 7d 2c  ..0xa8000001..},
9460: 20 7b 0a 09 09 30 78 65 38 2c 20 20 30 78 66 30   {...0xe8,  0xf0
9470: 2c 20 20 30 78 61 30 2c 20 20 30 78 38 38 2c 20  ,  0xa0,  0x88, 
9480: 20 30 78 62 38 2c 20 20 30 78 38 30 2c 20 20 30   0xb8,  0x80,  0
9490: 78 61 38 2c 20 20 30 78 64 30 2c 20 20 30 78 39  xa8,  0xd0,  0x9
94a0: 38 2c 20 20 30 78 65 30 2c 0a 09 09 30 78 63 30  8,  0xe0,...0xc0
94b0: 2c 20 20 30 78 66 38 2c 20 20 30 78 62 30 2c 20  ,  0xf8,  0xb0, 
94c0: 20 30 78 39 30 2c 20 20 30 78 63 38 2c 20 20 30   0x90,  0xc8,  0
94d0: 78 64 38 2c 20 20 30 78 31 65 38 2c 20 30 78 31  xd8,  0x1e8, 0x1
94e0: 66 30 2c 20 30 78 31 61 30 2c 20 30 78 31 38 38  f0, 0x1a0, 0x188
94f0: 2c 0a 09 09 30 78 31 62 38 2c 20 30 78 31 38 30  ,...0x1b8, 0x180
9500: 2c 20 30 78 31 61 38 2c 20 30 78 31 64 30 2c 20  , 0x1a8, 0x1d0, 
9510: 30 78 31 39 38 2c 20 30 78 31 65 30 2c 20 30 78  0x198, 0x1e0, 0x
9520: 31 63 30 2c 20 30 78 31 66 38 2c 20 30 78 31 62  1c0, 0x1f8, 0x1b
9530: 30 2c 20 30 78 31 39 30 2c 0a 09 09 30 78 31 63  0, 0x190,...0x1c
9540: 38 2c 20 30 78 31 64 38 2c 20 30 78 35 36 38 2c  8, 0x1d8, 0x568,
9550: 20 30 78 35 37 30 2c 20 30 78 35 32 30 2c 20 30   0x570, 0x520, 0
9560: 78 35 30 38 2c 20 30 78 35 33 38 2c 20 30 78 35  x508, 0x538, 0x5
9570: 30 30 2c 20 30 78 35 32 38 2c 20 30 78 35 35 30  00, 0x528, 0x550
9580: 2c 0a 09 09 30 78 35 31 38 2c 20 30 78 35 36 30  ,...0x518, 0x560
9590: 2c 20 30 78 35 34 30 2c 20 30 78 35 37 38 2c 20  , 0x540, 0x578, 
95a0: 30 78 35 33 30 2c 20 30 78 35 31 30 2c 20 30 78  0x530, 0x510, 0x
95b0: 35 34 38 2c 20 30 78 35 35 38 2c 20 30 78 34 65  548, 0x558, 0x4e
95c0: 38 2c 20 30 78 34 66 30 2c 0a 09 09 30 78 34 61  8, 0x4f0,...0x4a
95d0: 30 2c 20 30 78 34 38 38 2c 20 30 78 34 62 38 2c  0, 0x488, 0x4b8,
95e0: 20 30 78 34 38 30 2c 20 30 78 34 61 38 2c 20 30   0x480, 0x4a8, 0
95f0: 78 34 64 30 2c 20 30 78 34 39 38 2c 20 30 78 34  x4d0, 0x498, 0x4
9600: 65 30 2c 20 30 78 34 63 30 2c 20 30 78 34 66 38  e0, 0x4c0, 0x4f8
9610: 2c 0a 09 09 30 78 34 62 30 2c 20 30 78 34 39 30  ,...0x4b0, 0x490
9620: 2c 20 30 78 34 63 38 2c 20 30 78 34 64 38 2c 20  , 0x4c8, 0x4d8, 
9630: 30 78 32 65 38 2c 20 30 78 32 66 30 2c 20 30 78  0x2e8, 0x2f0, 0x
9640: 32 61 30 2c 20 30 78 32 38 38 2c 20 30 78 32 62  2a0, 0x288, 0x2b
9650: 38 2c 20 30 78 32 38 30 2c 0a 09 09 30 78 32 61  8, 0x280,...0x2a
9660: 38 2c 20 30 78 32 64 30 2c 20 30 78 32 39 38 2c  8, 0x2d0, 0x298,
9670: 20 30 78 32 65 30 2c 20 30 78 32 63 30 2c 20 30   0x2e0, 0x2c0, 0
9680: 78 32 66 38 2c 20 30 78 32 62 30 2c 20 30 78 32  x2f8, 0x2b0, 0x2
9690: 39 30 2c 20 30 78 32 63 38 2c 20 30 78 32 64 38  90, 0x2c8, 0x2d8
96a0: 2c 0a 09 09 30 78 35 65 38 2c 20 30 78 35 66 30  ,...0x5e8, 0x5f0
96b0: 2c 20 30 78 35 61 30 2c 20 30 78 35 38 38 2c 20  , 0x5a0, 0x588, 
96c0: 30 78 35 62 38 2c 20 30 78 35 38 30 2c 20 30 78  0x5b8, 0x580, 0x
96d0: 35 61 38 2c 20 30 78 35 64 30 2c 20 30 78 35 39  5a8, 0x5d0, 0x59
96e0: 38 2c 20 30 78 35 65 30 2c 0a 09 09 30 78 35 63  8, 0x5e0,...0x5c
96f0: 30 2c 20 30 78 35 66 38 2c 20 30 78 35 62 30 2c  0, 0x5f8, 0x5b0,
9700: 20 30 78 35 39 30 2c 20 30 78 35 63 38 2c 20 30   0x590, 0x5c8, 0
9710: 78 35 64 38 2c 20 30 78 32 36 38 2c 20 30 78 32  x5d8, 0x268, 0x2
9720: 37 30 2c 20 30 78 32 32 30 2c 20 30 78 32 30 38  70, 0x220, 0x208
9730: 2c 0a 09 09 30 78 32 33 38 2c 20 30 78 32 30 30  ,...0x238, 0x200
9740: 2c 20 30 78 32 32 38 2c 20 30 78 32 35 30 2c 20  , 0x228, 0x250, 
9750: 30 78 32 31 38 2c 20 30 78 32 36 30 2c 20 30 78  0x218, 0x260, 0x
9760: 32 34 30 2c 20 30 78 32 37 38 2c 20 30 78 32 33  240, 0x278, 0x23
9770: 30 2c 20 30 78 32 31 30 2c 0a 09 09 30 78 32 34  0, 0x210,...0x24
9780: 38 2c 20 30 78 32 35 38 2c 20 30 78 37 65 38 2c  8, 0x258, 0x7e8,
9790: 20 30 78 37 66 30 2c 20 30 78 37 61 30 2c 20 30   0x7f0, 0x7a0, 0
97a0: 78 37 38 38 2c 20 30 78 37 62 38 2c 20 30 78 37  x788, 0x7b8, 0x7
97b0: 38 30 2c 20 30 78 37 61 38 2c 20 30 78 37 64 30  80, 0x7a8, 0x7d0
97c0: 2c 0a 09 09 30 78 37 39 38 2c 20 30 78 37 65 30  ,...0x798, 0x7e0
97d0: 2c 20 30 78 37 63 30 2c 20 30 78 37 66 38 2c 20  , 0x7c0, 0x7f8, 
97e0: 30 78 37 62 30 2c 20 30 78 37 39 30 2c 20 30 78  0x7b0, 0x790, 0x
97f0: 37 63 38 2c 20 30 78 37 64 38 2c 20 30 78 34 36  7c8, 0x7d8, 0x46
9800: 38 2c 20 30 78 34 37 30 2c 0a 09 09 30 78 34 32  8, 0x470,...0x42
9810: 30 2c 20 30 78 34 30 38 2c 20 30 78 34 33 38 2c  0, 0x408, 0x438,
9820: 20 30 78 34 30 30 2c 20 30 78 34 32 38 2c 20 30   0x400, 0x428, 0
9830: 78 34 35 30 2c 20 30 78 34 31 38 2c 20 30 78 34  x450, 0x418, 0x4
9840: 36 30 2c 20 30 78 34 34 30 2c 20 30 78 34 37 38  60, 0x440, 0x478
9850: 2c 0a 09 09 30 78 34 33 30 2c 20 30 78 34 31 30  ,...0x430, 0x410
9860: 2c 20 30 78 34 34 38 2c 20 30 78 34 35 38 2c 20  , 0x448, 0x458, 
9870: 30 78 33 36 38 2c 20 30 78 33 37 30 2c 20 30 78  0x368, 0x370, 0x
9880: 33 32 30 2c 20 30 78 33 30 38 2c 20 30 78 33 33  320, 0x308, 0x33
9890: 38 2c 20 30 78 33 30 30 2c 0a 09 09 30 78 33 32  8, 0x300,...0x32
98a0: 38 2c 20 30 78 33 35 30 2c 20 30 78 33 31 38 2c  8, 0x350, 0x318,
98b0: 20 30 78 33 36 30 2c 20 30 78 33 34 30 2c 20 30   0x360, 0x340, 0
98c0: 78 33 37 38 2c 20 30 78 33 33 30 2c 20 30 78 33  x378, 0x330, 0x3
98d0: 31 30 2c 20 30 78 33 34 38 2c 20 30 78 33 35 38  10, 0x348, 0x358
98e0: 2c 0a 09 09 30 78 33 65 38 2c 20 30 78 33 66 30  ,...0x3e8, 0x3f0
98f0: 2c 20 30 78 33 61 30 2c 20 30 78 33 38 38 2c 20  , 0x3a0, 0x388, 
9900: 30 78 33 62 38 2c 20 30 78 33 38 30 2c 20 30 78  0x3b8, 0x380, 0x
9910: 33 61 38 2c 20 30 78 33 64 30 2c 20 30 78 33 39  3a8, 0x3d0, 0x39
9920: 38 2c 20 30 78 33 65 30 2c 0a 09 09 30 78 33 63  8, 0x3e0,...0x3c
9930: 30 2c 20 30 78 33 66 38 2c 20 30 78 33 62 30 2c  0, 0x3f8, 0x3b0,
9940: 20 30 78 33 39 30 2c 20 30 78 33 63 38 2c 20 30   0x390, 0x3c8, 0
9950: 78 33 64 38 2c 20 30 78 37 36 38 2c 20 30 78 37  x3d8, 0x768, 0x7
9960: 37 30 2c 20 30 78 37 32 30 2c 20 30 78 37 30 38  70, 0x720, 0x708
9970: 2c 0a 09 09 30 78 37 33 38 2c 20 30 78 37 30 30  ,...0x738, 0x700
9980: 2c 20 30 78 37 32 38 2c 20 30 78 37 35 30 2c 20  , 0x728, 0x750, 
9990: 30 78 37 31 38 2c 20 30 78 37 36 30 2c 20 30 78  0x718, 0x760, 0x
99a0: 37 34 30 2c 20 30 78 37 37 38 2c 20 30 78 37 33  740, 0x778, 0x73
99b0: 30 2c 20 30 78 37 31 30 2c 0a 09 09 30 78 37 34  0, 0x710,...0x74
99c0: 38 2c 20 30 78 37 35 38 2c 20 30 78 36 65 38 2c  8, 0x758, 0x6e8,
99d0: 20 30 78 36 66 30 2c 20 30 78 36 61 30 2c 20 30   0x6f0, 0x6a0, 0
99e0: 78 36 38 38 2c 20 30 78 36 62 38 2c 20 30 78 36  x688, 0x6b8, 0x6
99f0: 38 30 2c 20 30 78 36 61 38 2c 20 30 78 36 64 30  80, 0x6a8, 0x6d0
9a00: 2c 0a 09 09 30 78 36 39 38 2c 20 30 78 36 65 30  ,...0x698, 0x6e0
9a10: 2c 20 30 78 36 63 30 2c 20 30 78 36 66 38 2c 20  , 0x6c0, 0x6f8, 
9a20: 30 78 36 62 30 2c 20 30 78 36 39 30 2c 20 30 78  0x6b0, 0x690, 0x
9a30: 36 63 38 2c 20 30 78 36 64 38 2c 20 30 78 36 38  6c8, 0x6d8, 0x68
9a40: 2c 20 20 30 78 37 30 2c 0a 09 09 30 78 32 30 2c  ,  0x70,...0x20,
9a50: 20 20 30 78 38 2c 20 20 20 30 78 33 38 2c 20 20    0x8,   0x38,  
9a60: 30 78 30 2c 20 20 20 30 78 32 38 2c 20 20 30 78  0x0,   0x28,  0x
9a70: 35 30 2c 20 20 30 78 31 38 2c 20 20 30 78 36 30  50,  0x18,  0x60
9a80: 2c 20 20 30 78 34 30 2c 20 20 30 78 37 38 2c 0a  ,  0x40,  0x78,.
9a90: 09 09 30 78 33 30 2c 20 20 30 78 31 30 2c 20 20  ..0x30,  0x10,  
9aa0: 30 78 34 38 2c 20 20 30 78 35 38 2c 20 20 30 78  0x48,  0x58,  0x
9ab0: 31 36 38 2c 20 30 78 31 37 30 2c 20 30 78 31 32  168, 0x170, 0x12
9ac0: 30 2c 20 30 78 31 30 38 2c 20 30 78 31 33 38 2c  0, 0x108, 0x138,
9ad0: 20 30 78 31 30 30 2c 0a 09 09 30 78 31 32 38 2c   0x100,...0x128,
9ae0: 20 30 78 31 35 30 2c 20 30 78 31 31 38 2c 20 30   0x150, 0x118, 0
9af0: 78 31 36 30 2c 20 30 78 31 34 30 2c 20 30 78 31  x160, 0x140, 0x1
9b00: 37 38 2c 20 30 78 31 33 30 2c 20 30 78 31 31 30  78, 0x130, 0x110
9b10: 2c 20 30 78 31 34 38 2c 20 30 78 31 35 38 2c 0a  , 0x148, 0x158,.
9b20: 09 09 30 78 36 36 38 2c 20 30 78 36 37 30 2c 20  ..0x668, 0x670, 
9b30: 30 78 36 32 30 2c 20 30 78 36 30 38 2c 20 30 78  0x620, 0x608, 0x
9b40: 36 33 38 2c 20 30 78 36 30 30 2c 20 30 78 36 32  638, 0x600, 0x62
9b50: 38 2c 20 30 78 36 35 30 2c 20 30 78 36 31 38 2c  8, 0x650, 0x618,
9b60: 20 30 78 36 36 30 2c 0a 09 09 30 78 36 34 30 2c   0x660,...0x640,
9b70: 20 30 78 36 37 38 2c 20 30 78 36 33 30 2c 20 30   0x678, 0x630, 0
9b80: 78 36 31 30 2c 20 30 78 36 34 38 2c 20 30 78 36  x610, 0x648, 0x6
9b90: 35 38 0a 09 7d 0a 7d 3b 0a 0a 0a 23 65 6e 64 69  58..}.};...#endi
9ba0: 66 20 2f 2a 20 47 45 4e 45 52 41 54 45 5f 47 4f  f /* GENERATE_GO
9bb0: 53 54 5f 4c 4f 4f 4b 55 50 5f 54 41 42 4c 45 20  ST_LOOKUP_TABLE 
9bc0: 2a 2f 0a                                         */.