differential code coverage report with master
Current view: top level - source/detail/cryptography - aes.cpp (source / functions) Coverage Total Hit UBC CBC
Current: coverage.info Lines: 85.5 % 256 219 37 219
Current Date: 2025-12-15 23:01:28 Functions: 87.5 % 8 7 1 7
Baseline: coverage_master.info Branches: 52.3 % 86 45 82 90
Baseline Date: 2025-12-15 23:01:27

             Branch data    TLA  Line data    Source code
       1                 :                : // Copyright (c) 2017-2022 Thomas Fussell
       2                 :                : // Copyright (c) 2024-2025 xlnt-community
       3                 :                : //
       4                 :                : // Permission is hereby granted, free of charge, to any person obtaining a copy
       5                 :                : // of this software and associated documentation files (the "Software"), to deal
       6                 :                : // in the Software without restriction, including without limitation the rights
       7                 :                : // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
       8                 :                : // copies of the Software, and to permit persons to whom the Software is
       9                 :                : // furnished to do so, subject to the following conditions:
      10                 :                : //
      11                 :                : // The above copyright notice and this permission notice shall be included in
      12                 :                : // all copies or substantial portions of the Software.
      13                 :                : //
      14                 :                : // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      15                 :                : // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      16                 :                : // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      17                 :                : // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      18                 :                : // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      19                 :                : // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      20                 :                : // THE SOFTWARE
      21                 :                : //
      22                 :                : // @license: http://www.opensource.org/licenses/mit-license.php
      23                 :                : // @author: see AUTHORS file
      24                 :                : 
      25                 :                : // Adapted from LibTomCrypt AES implementation
      26                 :                : // https://github.com/libtom/libtomcrypt/blob/develop/src/ciphers/aes/aes_tab.c
      27                 :                : // https://github.com/libtom/libtomcrypt/blob/develop/src/ciphers/aes/aes.c
      28                 :                : 
      29                 :                : #include <array>
      30                 :                : #include <assert.h>
      31                 :                : #include <stdlib.h>
      32                 :                : 
      33                 :                : #include <xlnt/utils/exceptions.hpp>
      34                 :                : #include <detail/cryptography/aes.hpp>
      35                 :                : 
      36                 :                : namespace {
      37                 :                : 
      38                 :                : static const std::uint32_t TE0[256] = {
      39                 :                :     0xc66363a5UL,
      40                 :                :     0xf87c7c84UL,
      41                 :                :     0xee777799UL,
      42                 :                :     0xf67b7b8dUL,
      43                 :                :     0xfff2f20dUL,
      44                 :                :     0xd66b6bbdUL,
      45                 :                :     0xde6f6fb1UL,
      46                 :                :     0x91c5c554UL,
      47                 :                :     0x60303050UL,
      48                 :                :     0x02010103UL,
      49                 :                :     0xce6767a9UL,
      50                 :                :     0x562b2b7dUL,
      51                 :                :     0xe7fefe19UL,
      52                 :                :     0xb5d7d762UL,
      53                 :                :     0x4dababe6UL,
      54                 :                :     0xec76769aUL,
      55                 :                :     0x8fcaca45UL,
      56                 :                :     0x1f82829dUL,
      57                 :                :     0x89c9c940UL,
      58                 :                :     0xfa7d7d87UL,
      59                 :                :     0xeffafa15UL,
      60                 :                :     0xb25959ebUL,
      61                 :                :     0x8e4747c9UL,
      62                 :                :     0xfbf0f00bUL,
      63                 :                :     0x41adadecUL,
      64                 :                :     0xb3d4d467UL,
      65                 :                :     0x5fa2a2fdUL,
      66                 :                :     0x45afafeaUL,
      67                 :                :     0x239c9cbfUL,
      68                 :                :     0x53a4a4f7UL,
      69                 :                :     0xe4727296UL,
      70                 :                :     0x9bc0c05bUL,
      71                 :                :     0x75b7b7c2UL,
      72                 :                :     0xe1fdfd1cUL,
      73                 :                :     0x3d9393aeUL,
      74                 :                :     0x4c26266aUL,
      75                 :                :     0x6c36365aUL,
      76                 :                :     0x7e3f3f41UL,
      77                 :                :     0xf5f7f702UL,
      78                 :                :     0x83cccc4fUL,
      79                 :                :     0x6834345cUL,
      80                 :                :     0x51a5a5f4UL,
      81                 :                :     0xd1e5e534UL,
      82                 :                :     0xf9f1f108UL,
      83                 :                :     0xe2717193UL,
      84                 :                :     0xabd8d873UL,
      85                 :                :     0x62313153UL,
      86                 :                :     0x2a15153fUL,
      87                 :                :     0x0804040cUL,
      88                 :                :     0x95c7c752UL,
      89                 :                :     0x46232365UL,
      90                 :                :     0x9dc3c35eUL,
      91                 :                :     0x30181828UL,
      92                 :                :     0x379696a1UL,
      93                 :                :     0x0a05050fUL,
      94                 :                :     0x2f9a9ab5UL,
      95                 :                :     0x0e070709UL,
      96                 :                :     0x24121236UL,
      97                 :                :     0x1b80809bUL,
      98                 :                :     0xdfe2e23dUL,
      99                 :                :     0xcdebeb26UL,
     100                 :                :     0x4e272769UL,
     101                 :                :     0x7fb2b2cdUL,
     102                 :                :     0xea75759fUL,
     103                 :                :     0x1209091bUL,
     104                 :                :     0x1d83839eUL,
     105                 :                :     0x582c2c74UL,
     106                 :                :     0x341a1a2eUL,
     107                 :                :     0x361b1b2dUL,
     108                 :                :     0xdc6e6eb2UL,
     109                 :                :     0xb45a5aeeUL,
     110                 :                :     0x5ba0a0fbUL,
     111                 :                :     0xa45252f6UL,
     112                 :                :     0x763b3b4dUL,
     113                 :                :     0xb7d6d661UL,
     114                 :                :     0x7db3b3ceUL,
     115                 :                :     0x5229297bUL,
     116                 :                :     0xdde3e33eUL,
     117                 :                :     0x5e2f2f71UL,
     118                 :                :     0x13848497UL,
     119                 :                :     0xa65353f5UL,
     120                 :                :     0xb9d1d168UL,
     121                 :                :     0x00000000UL,
     122                 :                :     0xc1eded2cUL,
     123                 :                :     0x40202060UL,
     124                 :                :     0xe3fcfc1fUL,
     125                 :                :     0x79b1b1c8UL,
     126                 :                :     0xb65b5bedUL,
     127                 :                :     0xd46a6abeUL,
     128                 :                :     0x8dcbcb46UL,
     129                 :                :     0x67bebed9UL,
     130                 :                :     0x7239394bUL,
     131                 :                :     0x944a4adeUL,
     132                 :                :     0x984c4cd4UL,
     133                 :                :     0xb05858e8UL,
     134                 :                :     0x85cfcf4aUL,
     135                 :                :     0xbbd0d06bUL,
     136                 :                :     0xc5efef2aUL,
     137                 :                :     0x4faaaae5UL,
     138                 :                :     0xedfbfb16UL,
     139                 :                :     0x864343c5UL,
     140                 :                :     0x9a4d4dd7UL,
     141                 :                :     0x66333355UL,
     142                 :                :     0x11858594UL,
     143                 :                :     0x8a4545cfUL,
     144                 :                :     0xe9f9f910UL,
     145                 :                :     0x04020206UL,
     146                 :                :     0xfe7f7f81UL,
     147                 :                :     0xa05050f0UL,
     148                 :                :     0x783c3c44UL,
     149                 :                :     0x259f9fbaUL,
     150                 :                :     0x4ba8a8e3UL,
     151                 :                :     0xa25151f3UL,
     152                 :                :     0x5da3a3feUL,
     153                 :                :     0x804040c0UL,
     154                 :                :     0x058f8f8aUL,
     155                 :                :     0x3f9292adUL,
     156                 :                :     0x219d9dbcUL,
     157                 :                :     0x70383848UL,
     158                 :                :     0xf1f5f504UL,
     159                 :                :     0x63bcbcdfUL,
     160                 :                :     0x77b6b6c1UL,
     161                 :                :     0xafdada75UL,
     162                 :                :     0x42212163UL,
     163                 :                :     0x20101030UL,
     164                 :                :     0xe5ffff1aUL,
     165                 :                :     0xfdf3f30eUL,
     166                 :                :     0xbfd2d26dUL,
     167                 :                :     0x81cdcd4cUL,
     168                 :                :     0x180c0c14UL,
     169                 :                :     0x26131335UL,
     170                 :                :     0xc3ecec2fUL,
     171                 :                :     0xbe5f5fe1UL,
     172                 :                :     0x359797a2UL,
     173                 :                :     0x884444ccUL,
     174                 :                :     0x2e171739UL,
     175                 :                :     0x93c4c457UL,
     176                 :                :     0x55a7a7f2UL,
     177                 :                :     0xfc7e7e82UL,
     178                 :                :     0x7a3d3d47UL,
     179                 :                :     0xc86464acUL,
     180                 :                :     0xba5d5de7UL,
     181                 :                :     0x3219192bUL,
     182                 :                :     0xe6737395UL,
     183                 :                :     0xc06060a0UL,
     184                 :                :     0x19818198UL,
     185                 :                :     0x9e4f4fd1UL,
     186                 :                :     0xa3dcdc7fUL,
     187                 :                :     0x44222266UL,
     188                 :                :     0x542a2a7eUL,
     189                 :                :     0x3b9090abUL,
     190                 :                :     0x0b888883UL,
     191                 :                :     0x8c4646caUL,
     192                 :                :     0xc7eeee29UL,
     193                 :                :     0x6bb8b8d3UL,
     194                 :                :     0x2814143cUL,
     195                 :                :     0xa7dede79UL,
     196                 :                :     0xbc5e5ee2UL,
     197                 :                :     0x160b0b1dUL,
     198                 :                :     0xaddbdb76UL,
     199                 :                :     0xdbe0e03bUL,
     200                 :                :     0x64323256UL,
     201                 :                :     0x743a3a4eUL,
     202                 :                :     0x140a0a1eUL,
     203                 :                :     0x924949dbUL,
     204                 :                :     0x0c06060aUL,
     205                 :                :     0x4824246cUL,
     206                 :                :     0xb85c5ce4UL,
     207                 :                :     0x9fc2c25dUL,
     208                 :                :     0xbdd3d36eUL,
     209                 :                :     0x43acacefUL,
     210                 :                :     0xc46262a6UL,
     211                 :                :     0x399191a8UL,
     212                 :                :     0x319595a4UL,
     213                 :                :     0xd3e4e437UL,
     214                 :                :     0xf279798bUL,
     215                 :                :     0xd5e7e732UL,
     216                 :                :     0x8bc8c843UL,
     217                 :                :     0x6e373759UL,
     218                 :                :     0xda6d6db7UL,
     219                 :                :     0x018d8d8cUL,
     220                 :                :     0xb1d5d564UL,
     221                 :                :     0x9c4e4ed2UL,
     222                 :                :     0x49a9a9e0UL,
     223                 :                :     0xd86c6cb4UL,
     224                 :                :     0xac5656faUL,
     225                 :                :     0xf3f4f407UL,
     226                 :                :     0xcfeaea25UL,
     227                 :                :     0xca6565afUL,
     228                 :                :     0xf47a7a8eUL,
     229                 :                :     0x47aeaee9UL,
     230                 :                :     0x10080818UL,
     231                 :                :     0x6fbabad5UL,
     232                 :                :     0xf0787888UL,
     233                 :                :     0x4a25256fUL,
     234                 :                :     0x5c2e2e72UL,
     235                 :                :     0x381c1c24UL,
     236                 :                :     0x57a6a6f1UL,
     237                 :                :     0x73b4b4c7UL,
     238                 :                :     0x97c6c651UL,
     239                 :                :     0xcbe8e823UL,
     240                 :                :     0xa1dddd7cUL,
     241                 :                :     0xe874749cUL,
     242                 :                :     0x3e1f1f21UL,
     243                 :                :     0x964b4bddUL,
     244                 :                :     0x61bdbddcUL,
     245                 :                :     0x0d8b8b86UL,
     246                 :                :     0x0f8a8a85UL,
     247                 :                :     0xe0707090UL,
     248                 :                :     0x7c3e3e42UL,
     249                 :                :     0x71b5b5c4UL,
     250                 :                :     0xcc6666aaUL,
     251                 :                :     0x904848d8UL,
     252                 :                :     0x06030305UL,
     253                 :                :     0xf7f6f601UL,
     254                 :                :     0x1c0e0e12UL,
     255                 :                :     0xc26161a3UL,
     256                 :                :     0x6a35355fUL,
     257                 :                :     0xae5757f9UL,
     258                 :                :     0x69b9b9d0UL,
     259                 :                :     0x17868691UL,
     260                 :                :     0x99c1c158UL,
     261                 :                :     0x3a1d1d27UL,
     262                 :                :     0x279e9eb9UL,
     263                 :                :     0xd9e1e138UL,
     264                 :                :     0xebf8f813UL,
     265                 :                :     0x2b9898b3UL,
     266                 :                :     0x22111133UL,
     267                 :                :     0xd26969bbUL,
     268                 :                :     0xa9d9d970UL,
     269                 :                :     0x078e8e89UL,
     270                 :                :     0x339494a7UL,
     271                 :                :     0x2d9b9bb6UL,
     272                 :                :     0x3c1e1e22UL,
     273                 :                :     0x15878792UL,
     274                 :                :     0xc9e9e920UL,
     275                 :                :     0x87cece49UL,
     276                 :                :     0xaa5555ffUL,
     277                 :                :     0x50282878UL,
     278                 :                :     0xa5dfdf7aUL,
     279                 :                :     0x038c8c8fUL,
     280                 :                :     0x59a1a1f8UL,
     281                 :                :     0x09898980UL,
     282                 :                :     0x1a0d0d17UL,
     283                 :                :     0x65bfbfdaUL,
     284                 :                :     0xd7e6e631UL,
     285                 :                :     0x844242c6UL,
     286                 :                :     0xd06868b8UL,
     287                 :                :     0x824141c3UL,
     288                 :                :     0x299999b0UL,
     289                 :                :     0x5a2d2d77UL,
     290                 :                :     0x1e0f0f11UL,
     291                 :                :     0x7bb0b0cbUL,
     292                 :                :     0xa85454fcUL,
     293                 :                :     0x6dbbbbd6UL,
     294                 :                :     0x2c16163aUL,
     295                 :                : };
     296                 :                : 
     297                 :                : static const std::uint32_t TD0[256] = {
     298                 :                :     0x51f4a750UL,
     299                 :                :     0x7e416553UL,
     300                 :                :     0x1a17a4c3UL,
     301                 :                :     0x3a275e96UL,
     302                 :                :     0x3bab6bcbUL,
     303                 :                :     0x1f9d45f1UL,
     304                 :                :     0xacfa58abUL,
     305                 :                :     0x4be30393UL,
     306                 :                :     0x2030fa55UL,
     307                 :                :     0xad766df6UL,
     308                 :                :     0x88cc7691UL,
     309                 :                :     0xf5024c25UL,
     310                 :                :     0x4fe5d7fcUL,
     311                 :                :     0xc52acbd7UL,
     312                 :                :     0x26354480UL,
     313                 :                :     0xb562a38fUL,
     314                 :                :     0xdeb15a49UL,
     315                 :                :     0x25ba1b67UL,
     316                 :                :     0x45ea0e98UL,
     317                 :                :     0x5dfec0e1UL,
     318                 :                :     0xc32f7502UL,
     319                 :                :     0x814cf012UL,
     320                 :                :     0x8d4697a3UL,
     321                 :                :     0x6bd3f9c6UL,
     322                 :                :     0x038f5fe7UL,
     323                 :                :     0x15929c95UL,
     324                 :                :     0xbf6d7aebUL,
     325                 :                :     0x955259daUL,
     326                 :                :     0xd4be832dUL,
     327                 :                :     0x587421d3UL,
     328                 :                :     0x49e06929UL,
     329                 :                :     0x8ec9c844UL,
     330                 :                :     0x75c2896aUL,
     331                 :                :     0xf48e7978UL,
     332                 :                :     0x99583e6bUL,
     333                 :                :     0x27b971ddUL,
     334                 :                :     0xbee14fb6UL,
     335                 :                :     0xf088ad17UL,
     336                 :                :     0xc920ac66UL,
     337                 :                :     0x7dce3ab4UL,
     338                 :                :     0x63df4a18UL,
     339                 :                :     0xe51a3182UL,
     340                 :                :     0x97513360UL,
     341                 :                :     0x62537f45UL,
     342                 :                :     0xb16477e0UL,
     343                 :                :     0xbb6bae84UL,
     344                 :                :     0xfe81a01cUL,
     345                 :                :     0xf9082b94UL,
     346                 :                :     0x70486858UL,
     347                 :                :     0x8f45fd19UL,
     348                 :                :     0x94de6c87UL,
     349                 :                :     0x527bf8b7UL,
     350                 :                :     0xab73d323UL,
     351                 :                :     0x724b02e2UL,
     352                 :                :     0xe31f8f57UL,
     353                 :                :     0x6655ab2aUL,
     354                 :                :     0xb2eb2807UL,
     355                 :                :     0x2fb5c203UL,
     356                 :                :     0x86c57b9aUL,
     357                 :                :     0xd33708a5UL,
     358                 :                :     0x302887f2UL,
     359                 :                :     0x23bfa5b2UL,
     360                 :                :     0x02036abaUL,
     361                 :                :     0xed16825cUL,
     362                 :                :     0x8acf1c2bUL,
     363                 :                :     0xa779b492UL,
     364                 :                :     0xf307f2f0UL,
     365                 :                :     0x4e69e2a1UL,
     366                 :                :     0x65daf4cdUL,
     367                 :                :     0x0605bed5UL,
     368                 :                :     0xd134621fUL,
     369                 :                :     0xc4a6fe8aUL,
     370                 :                :     0x342e539dUL,
     371                 :                :     0xa2f355a0UL,
     372                 :                :     0x058ae132UL,
     373                 :                :     0xa4f6eb75UL,
     374                 :                :     0x0b83ec39UL,
     375                 :                :     0x4060efaaUL,
     376                 :                :     0x5e719f06UL,
     377                 :                :     0xbd6e1051UL,
     378                 :                :     0x3e218af9UL,
     379                 :                :     0x96dd063dUL,
     380                 :                :     0xdd3e05aeUL,
     381                 :                :     0x4de6bd46UL,
     382                 :                :     0x91548db5UL,
     383                 :                :     0x71c45d05UL,
     384                 :                :     0x0406d46fUL,
     385                 :                :     0x605015ffUL,
     386                 :                :     0x1998fb24UL,
     387                 :                :     0xd6bde997UL,
     388                 :                :     0x894043ccUL,
     389                 :                :     0x67d99e77UL,
     390                 :                :     0xb0e842bdUL,
     391                 :                :     0x07898b88UL,
     392                 :                :     0xe7195b38UL,
     393                 :                :     0x79c8eedbUL,
     394                 :                :     0xa17c0a47UL,
     395                 :                :     0x7c420fe9UL,
     396                 :                :     0xf8841ec9UL,
     397                 :                :     0x00000000UL,
     398                 :                :     0x09808683UL,
     399                 :                :     0x322bed48UL,
     400                 :                :     0x1e1170acUL,
     401                 :                :     0x6c5a724eUL,
     402                 :                :     0xfd0efffbUL,
     403                 :                :     0x0f853856UL,
     404                 :                :     0x3daed51eUL,
     405                 :                :     0x362d3927UL,
     406                 :                :     0x0a0fd964UL,
     407                 :                :     0x685ca621UL,
     408                 :                :     0x9b5b54d1UL,
     409                 :                :     0x24362e3aUL,
     410                 :                :     0x0c0a67b1UL,
     411                 :                :     0x9357e70fUL,
     412                 :                :     0xb4ee96d2UL,
     413                 :                :     0x1b9b919eUL,
     414                 :                :     0x80c0c54fUL,
     415                 :                :     0x61dc20a2UL,
     416                 :                :     0x5a774b69UL,
     417                 :                :     0x1c121a16UL,
     418                 :                :     0xe293ba0aUL,
     419                 :                :     0xc0a02ae5UL,
     420                 :                :     0x3c22e043UL,
     421                 :                :     0x121b171dUL,
     422                 :                :     0x0e090d0bUL,
     423                 :                :     0xf28bc7adUL,
     424                 :                :     0x2db6a8b9UL,
     425                 :                :     0x141ea9c8UL,
     426                 :                :     0x57f11985UL,
     427                 :                :     0xaf75074cUL,
     428                 :                :     0xee99ddbbUL,
     429                 :                :     0xa37f60fdUL,
     430                 :                :     0xf701269fUL,
     431                 :                :     0x5c72f5bcUL,
     432                 :                :     0x44663bc5UL,
     433                 :                :     0x5bfb7e34UL,
     434                 :                :     0x8b432976UL,
     435                 :                :     0xcb23c6dcUL,
     436                 :                :     0xb6edfc68UL,
     437                 :                :     0xb8e4f163UL,
     438                 :                :     0xd731dccaUL,
     439                 :                :     0x42638510UL,
     440                 :                :     0x13972240UL,
     441                 :                :     0x84c61120UL,
     442                 :                :     0x854a247dUL,
     443                 :                :     0xd2bb3df8UL,
     444                 :                :     0xaef93211UL,
     445                 :                :     0xc729a16dUL,
     446                 :                :     0x1d9e2f4bUL,
     447                 :                :     0xdcb230f3UL,
     448                 :                :     0x0d8652ecUL,
     449                 :                :     0x77c1e3d0UL,
     450                 :                :     0x2bb3166cUL,
     451                 :                :     0xa970b999UL,
     452                 :                :     0x119448faUL,
     453                 :                :     0x47e96422UL,
     454                 :                :     0xa8fc8cc4UL,
     455                 :                :     0xa0f03f1aUL,
     456                 :                :     0x567d2cd8UL,
     457                 :                :     0x223390efUL,
     458                 :                :     0x87494ec7UL,
     459                 :                :     0xd938d1c1UL,
     460                 :                :     0x8ccaa2feUL,
     461                 :                :     0x98d40b36UL,
     462                 :                :     0xa6f581cfUL,
     463                 :                :     0xa57ade28UL,
     464                 :                :     0xdab78e26UL,
     465                 :                :     0x3fadbfa4UL,
     466                 :                :     0x2c3a9de4UL,
     467                 :                :     0x5078920dUL,
     468                 :                :     0x6a5fcc9bUL,
     469                 :                :     0x547e4662UL,
     470                 :                :     0xf68d13c2UL,
     471                 :                :     0x90d8b8e8UL,
     472                 :                :     0x2e39f75eUL,
     473                 :                :     0x82c3aff5UL,
     474                 :                :     0x9f5d80beUL,
     475                 :                :     0x69d0937cUL,
     476                 :                :     0x6fd52da9UL,
     477                 :                :     0xcf2512b3UL,
     478                 :                :     0xc8ac993bUL,
     479                 :                :     0x10187da7UL,
     480                 :                :     0xe89c636eUL,
     481                 :                :     0xdb3bbb7bUL,
     482                 :                :     0xcd267809UL,
     483                 :                :     0x6e5918f4UL,
     484                 :                :     0xec9ab701UL,
     485                 :                :     0x834f9aa8UL,
     486                 :                :     0xe6956e65UL,
     487                 :                :     0xaaffe67eUL,
     488                 :                :     0x21bccf08UL,
     489                 :                :     0xef15e8e6UL,
     490                 :                :     0xbae79bd9UL,
     491                 :                :     0x4a6f36ceUL,
     492                 :                :     0xea9f09d4UL,
     493                 :                :     0x29b07cd6UL,
     494                 :                :     0x31a4b2afUL,
     495                 :                :     0x2a3f2331UL,
     496                 :                :     0xc6a59430UL,
     497                 :                :     0x35a266c0UL,
     498                 :                :     0x744ebc37UL,
     499                 :                :     0xfc82caa6UL,
     500                 :                :     0xe090d0b0UL,
     501                 :                :     0x33a7d815UL,
     502                 :                :     0xf104984aUL,
     503                 :                :     0x41ecdaf7UL,
     504                 :                :     0x7fcd500eUL,
     505                 :                :     0x1791f62fUL,
     506                 :                :     0x764dd68dUL,
     507                 :                :     0x43efb04dUL,
     508                 :                :     0xccaa4d54UL,
     509                 :                :     0xe49604dfUL,
     510                 :                :     0x9ed1b5e3UL,
     511                 :                :     0x4c6a881bUL,
     512                 :                :     0xc12c1fb8UL,
     513                 :                :     0x4665517fUL,
     514                 :                :     0x9d5eea04UL,
     515                 :                :     0x018c355dUL,
     516                 :                :     0xfa877473UL,
     517                 :                :     0xfb0b412eUL,
     518                 :                :     0xb3671d5aUL,
     519                 :                :     0x92dbd252UL,
     520                 :                :     0xe9105633UL,
     521                 :                :     0x6dd64713UL,
     522                 :                :     0x9ad7618cUL,
     523                 :                :     0x37a10c7aUL,
     524                 :                :     0x59f8148eUL,
     525                 :                :     0xeb133c89UL,
     526                 :                :     0xcea927eeUL,
     527                 :                :     0xb761c935UL,
     528                 :                :     0xe11ce5edUL,
     529                 :                :     0x7a47b13cUL,
     530                 :                :     0x9cd2df59UL,
     531                 :                :     0x55f2733fUL,
     532                 :                :     0x1814ce79UL,
     533                 :                :     0x73c737bfUL,
     534                 :                :     0x53f7cdeaUL,
     535                 :                :     0x5ffdaa5bUL,
     536                 :                :     0xdf3d6f14UL,
     537                 :                :     0x7844db86UL,
     538                 :                :     0xcaaff381UL,
     539                 :                :     0xb968c43eUL,
     540                 :                :     0x3824342cUL,
     541                 :                :     0xc2a3405fUL,
     542                 :                :     0x161dc372UL,
     543                 :                :     0xbce2250cUL,
     544                 :                :     0x283c498bUL,
     545                 :                :     0xff0d9541UL,
     546                 :                :     0x39a80171UL,
     547                 :                :     0x080cb3deUL,
     548                 :                :     0xd8b4e49cUL,
     549                 :                :     0x6456c190UL,
     550                 :                :     0x7bcb8461UL,
     551                 :                :     0xd532b670UL,
     552                 :                :     0x486c5c74UL,
     553                 :                :     0xd0b85742UL,
     554                 :                : };
     555                 :                : 
     556                 :                : static const std::uint32_t Td4[256] = {
     557                 :                :     0x52525252UL,
     558                 :                :     0x09090909UL,
     559                 :                :     0x6a6a6a6aUL,
     560                 :                :     0xd5d5d5d5UL,
     561                 :                :     0x30303030UL,
     562                 :                :     0x36363636UL,
     563                 :                :     0xa5a5a5a5UL,
     564                 :                :     0x38383838UL,
     565                 :                :     0xbfbfbfbfUL,
     566                 :                :     0x40404040UL,
     567                 :                :     0xa3a3a3a3UL,
     568                 :                :     0x9e9e9e9eUL,
     569                 :                :     0x81818181UL,
     570                 :                :     0xf3f3f3f3UL,
     571                 :                :     0xd7d7d7d7UL,
     572                 :                :     0xfbfbfbfbUL,
     573                 :                :     0x7c7c7c7cUL,
     574                 :                :     0xe3e3e3e3UL,
     575                 :                :     0x39393939UL,
     576                 :                :     0x82828282UL,
     577                 :                :     0x9b9b9b9bUL,
     578                 :                :     0x2f2f2f2fUL,
     579                 :                :     0xffffffffUL,
     580                 :                :     0x87878787UL,
     581                 :                :     0x34343434UL,
     582                 :                :     0x8e8e8e8eUL,
     583                 :                :     0x43434343UL,
     584                 :                :     0x44444444UL,
     585                 :                :     0xc4c4c4c4UL,
     586                 :                :     0xdedededeUL,
     587                 :                :     0xe9e9e9e9UL,
     588                 :                :     0xcbcbcbcbUL,
     589                 :                :     0x54545454UL,
     590                 :                :     0x7b7b7b7bUL,
     591                 :                :     0x94949494UL,
     592                 :                :     0x32323232UL,
     593                 :                :     0xa6a6a6a6UL,
     594                 :                :     0xc2c2c2c2UL,
     595                 :                :     0x23232323UL,
     596                 :                :     0x3d3d3d3dUL,
     597                 :                :     0xeeeeeeeeUL,
     598                 :                :     0x4c4c4c4cUL,
     599                 :                :     0x95959595UL,
     600                 :                :     0x0b0b0b0bUL,
     601                 :                :     0x42424242UL,
     602                 :                :     0xfafafafaUL,
     603                 :                :     0xc3c3c3c3UL,
     604                 :                :     0x4e4e4e4eUL,
     605                 :                :     0x08080808UL,
     606                 :                :     0x2e2e2e2eUL,
     607                 :                :     0xa1a1a1a1UL,
     608                 :                :     0x66666666UL,
     609                 :                :     0x28282828UL,
     610                 :                :     0xd9d9d9d9UL,
     611                 :                :     0x24242424UL,
     612                 :                :     0xb2b2b2b2UL,
     613                 :                :     0x76767676UL,
     614                 :                :     0x5b5b5b5bUL,
     615                 :                :     0xa2a2a2a2UL,
     616                 :                :     0x49494949UL,
     617                 :                :     0x6d6d6d6dUL,
     618                 :                :     0x8b8b8b8bUL,
     619                 :                :     0xd1d1d1d1UL,
     620                 :                :     0x25252525UL,
     621                 :                :     0x72727272UL,
     622                 :                :     0xf8f8f8f8UL,
     623                 :                :     0xf6f6f6f6UL,
     624                 :                :     0x64646464UL,
     625                 :                :     0x86868686UL,
     626                 :                :     0x68686868UL,
     627                 :                :     0x98989898UL,
     628                 :                :     0x16161616UL,
     629                 :                :     0xd4d4d4d4UL,
     630                 :                :     0xa4a4a4a4UL,
     631                 :                :     0x5c5c5c5cUL,
     632                 :                :     0xccccccccUL,
     633                 :                :     0x5d5d5d5dUL,
     634                 :                :     0x65656565UL,
     635                 :                :     0xb6b6b6b6UL,
     636                 :                :     0x92929292UL,
     637                 :                :     0x6c6c6c6cUL,
     638                 :                :     0x70707070UL,
     639                 :                :     0x48484848UL,
     640                 :                :     0x50505050UL,
     641                 :                :     0xfdfdfdfdUL,
     642                 :                :     0xededededUL,
     643                 :                :     0xb9b9b9b9UL,
     644                 :                :     0xdadadadaUL,
     645                 :                :     0x5e5e5e5eUL,
     646                 :                :     0x15151515UL,
     647                 :                :     0x46464646UL,
     648                 :                :     0x57575757UL,
     649                 :                :     0xa7a7a7a7UL,
     650                 :                :     0x8d8d8d8dUL,
     651                 :                :     0x9d9d9d9dUL,
     652                 :                :     0x84848484UL,
     653                 :                :     0x90909090UL,
     654                 :                :     0xd8d8d8d8UL,
     655                 :                :     0xababababUL,
     656                 :                :     0x00000000UL,
     657                 :                :     0x8c8c8c8cUL,
     658                 :                :     0xbcbcbcbcUL,
     659                 :                :     0xd3d3d3d3UL,
     660                 :                :     0x0a0a0a0aUL,
     661                 :                :     0xf7f7f7f7UL,
     662                 :                :     0xe4e4e4e4UL,
     663                 :                :     0x58585858UL,
     664                 :                :     0x05050505UL,
     665                 :                :     0xb8b8b8b8UL,
     666                 :                :     0xb3b3b3b3UL,
     667                 :                :     0x45454545UL,
     668                 :                :     0x06060606UL,
     669                 :                :     0xd0d0d0d0UL,
     670                 :                :     0x2c2c2c2cUL,
     671                 :                :     0x1e1e1e1eUL,
     672                 :                :     0x8f8f8f8fUL,
     673                 :                :     0xcacacacaUL,
     674                 :                :     0x3f3f3f3fUL,
     675                 :                :     0x0f0f0f0fUL,
     676                 :                :     0x02020202UL,
     677                 :                :     0xc1c1c1c1UL,
     678                 :                :     0xafafafafUL,
     679                 :                :     0xbdbdbdbdUL,
     680                 :                :     0x03030303UL,
     681                 :                :     0x01010101UL,
     682                 :                :     0x13131313UL,
     683                 :                :     0x8a8a8a8aUL,
     684                 :                :     0x6b6b6b6bUL,
     685                 :                :     0x3a3a3a3aUL,
     686                 :                :     0x91919191UL,
     687                 :                :     0x11111111UL,
     688                 :                :     0x41414141UL,
     689                 :                :     0x4f4f4f4fUL,
     690                 :                :     0x67676767UL,
     691                 :                :     0xdcdcdcdcUL,
     692                 :                :     0xeaeaeaeaUL,
     693                 :                :     0x97979797UL,
     694                 :                :     0xf2f2f2f2UL,
     695                 :                :     0xcfcfcfcfUL,
     696                 :                :     0xcecececeUL,
     697                 :                :     0xf0f0f0f0UL,
     698                 :                :     0xb4b4b4b4UL,
     699                 :                :     0xe6e6e6e6UL,
     700                 :                :     0x73737373UL,
     701                 :                :     0x96969696UL,
     702                 :                :     0xacacacacUL,
     703                 :                :     0x74747474UL,
     704                 :                :     0x22222222UL,
     705                 :                :     0xe7e7e7e7UL,
     706                 :                :     0xadadadadUL,
     707                 :                :     0x35353535UL,
     708                 :                :     0x85858585UL,
     709                 :                :     0xe2e2e2e2UL,
     710                 :                :     0xf9f9f9f9UL,
     711                 :                :     0x37373737UL,
     712                 :                :     0xe8e8e8e8UL,
     713                 :                :     0x1c1c1c1cUL,
     714                 :                :     0x75757575UL,
     715                 :                :     0xdfdfdfdfUL,
     716                 :                :     0x6e6e6e6eUL,
     717                 :                :     0x47474747UL,
     718                 :                :     0xf1f1f1f1UL,
     719                 :                :     0x1a1a1a1aUL,
     720                 :                :     0x71717171UL,
     721                 :                :     0x1d1d1d1dUL,
     722                 :                :     0x29292929UL,
     723                 :                :     0xc5c5c5c5UL,
     724                 :                :     0x89898989UL,
     725                 :                :     0x6f6f6f6fUL,
     726                 :                :     0xb7b7b7b7UL,
     727                 :                :     0x62626262UL,
     728                 :                :     0x0e0e0e0eUL,
     729                 :                :     0xaaaaaaaaUL,
     730                 :                :     0x18181818UL,
     731                 :                :     0xbebebebeUL,
     732                 :                :     0x1b1b1b1bUL,
     733                 :                :     0xfcfcfcfcUL,
     734                 :                :     0x56565656UL,
     735                 :                :     0x3e3e3e3eUL,
     736                 :                :     0x4b4b4b4bUL,
     737                 :                :     0xc6c6c6c6UL,
     738                 :                :     0xd2d2d2d2UL,
     739                 :                :     0x79797979UL,
     740                 :                :     0x20202020UL,
     741                 :                :     0x9a9a9a9aUL,
     742                 :                :     0xdbdbdbdbUL,
     743                 :                :     0xc0c0c0c0UL,
     744                 :                :     0xfefefefeUL,
     745                 :                :     0x78787878UL,
     746                 :                :     0xcdcdcdcdUL,
     747                 :                :     0x5a5a5a5aUL,
     748                 :                :     0xf4f4f4f4UL,
     749                 :                :     0x1f1f1f1fUL,
     750                 :                :     0xddddddddUL,
     751                 :                :     0xa8a8a8a8UL,
     752                 :                :     0x33333333UL,
     753                 :                :     0x88888888UL,
     754                 :                :     0x07070707UL,
     755                 :                :     0xc7c7c7c7UL,
     756                 :                :     0x31313131UL,
     757                 :                :     0xb1b1b1b1UL,
     758                 :                :     0x12121212UL,
     759                 :                :     0x10101010UL,
     760                 :                :     0x59595959UL,
     761                 :                :     0x27272727UL,
     762                 :                :     0x80808080UL,
     763                 :                :     0xececececUL,
     764                 :                :     0x5f5f5f5fUL,
     765                 :                :     0x60606060UL,
     766                 :                :     0x51515151UL,
     767                 :                :     0x7f7f7f7fUL,
     768                 :                :     0xa9a9a9a9UL,
     769                 :                :     0x19191919UL,
     770                 :                :     0xb5b5b5b5UL,
     771                 :                :     0x4a4a4a4aUL,
     772                 :                :     0x0d0d0d0dUL,
     773                 :                :     0x2d2d2d2dUL,
     774                 :                :     0xe5e5e5e5UL,
     775                 :                :     0x7a7a7a7aUL,
     776                 :                :     0x9f9f9f9fUL,
     777                 :                :     0x93939393UL,
     778                 :                :     0xc9c9c9c9UL,
     779                 :                :     0x9c9c9c9cUL,
     780                 :                :     0xefefefefUL,
     781                 :                :     0xa0a0a0a0UL,
     782                 :                :     0xe0e0e0e0UL,
     783                 :                :     0x3b3b3b3bUL,
     784                 :                :     0x4d4d4d4dUL,
     785                 :                :     0xaeaeaeaeUL,
     786                 :                :     0x2a2a2a2aUL,
     787                 :                :     0xf5f5f5f5UL,
     788                 :                :     0xb0b0b0b0UL,
     789                 :                :     0xc8c8c8c8UL,
     790                 :                :     0xebebebebUL,
     791                 :                :     0xbbbbbbbbUL,
     792                 :                :     0x3c3c3c3cUL,
     793                 :                :     0x83838383UL,
     794                 :                :     0x53535353UL,
     795                 :                :     0x99999999UL,
     796                 :                :     0x61616161UL,
     797                 :                :     0x17171717UL,
     798                 :                :     0x2b2b2b2bUL,
     799                 :                :     0x04040404UL,
     800                 :                :     0x7e7e7e7eUL,
     801                 :                :     0xbabababaUL,
     802                 :                :     0x77777777UL,
     803                 :                :     0xd6d6d6d6UL,
     804                 :                :     0x26262626UL,
     805                 :                :     0xe1e1e1e1UL,
     806                 :                :     0x69696969UL,
     807                 :                :     0x14141414UL,
     808                 :                :     0x63636363UL,
     809                 :                :     0x55555555UL,
     810                 :                :     0x21212121UL,
     811                 :                :     0x0c0c0c0cUL,
     812                 :                :     0x7d7d7d7dUL,
     813                 :                : };
     814                 :                : 
     815                 :                : static const std::uint32_t TE1[256] = {
     816                 :                :     0xa5c66363UL,
     817                 :                :     0x84f87c7cUL,
     818                 :                :     0x99ee7777UL,
     819                 :                :     0x8df67b7bUL,
     820                 :                :     0x0dfff2f2UL,
     821                 :                :     0xbdd66b6bUL,
     822                 :                :     0xb1de6f6fUL,
     823                 :                :     0x5491c5c5UL,
     824                 :                :     0x50603030UL,
     825                 :                :     0x03020101UL,
     826                 :                :     0xa9ce6767UL,
     827                 :                :     0x7d562b2bUL,
     828                 :                :     0x19e7fefeUL,
     829                 :                :     0x62b5d7d7UL,
     830                 :                :     0xe64dababUL,
     831                 :                :     0x9aec7676UL,
     832                 :                :     0x458fcacaUL,
     833                 :                :     0x9d1f8282UL,
     834                 :                :     0x4089c9c9UL,
     835                 :                :     0x87fa7d7dUL,
     836                 :                :     0x15effafaUL,
     837                 :                :     0xebb25959UL,
     838                 :                :     0xc98e4747UL,
     839                 :                :     0x0bfbf0f0UL,
     840                 :                :     0xec41adadUL,
     841                 :                :     0x67b3d4d4UL,
     842                 :                :     0xfd5fa2a2UL,
     843                 :                :     0xea45afafUL,
     844                 :                :     0xbf239c9cUL,
     845                 :                :     0xf753a4a4UL,
     846                 :                :     0x96e47272UL,
     847                 :                :     0x5b9bc0c0UL,
     848                 :                :     0xc275b7b7UL,
     849                 :                :     0x1ce1fdfdUL,
     850                 :                :     0xae3d9393UL,
     851                 :                :     0x6a4c2626UL,
     852                 :                :     0x5a6c3636UL,
     853                 :                :     0x417e3f3fUL,
     854                 :                :     0x02f5f7f7UL,
     855                 :                :     0x4f83ccccUL,
     856                 :                :     0x5c683434UL,
     857                 :                :     0xf451a5a5UL,
     858                 :                :     0x34d1e5e5UL,
     859                 :                :     0x08f9f1f1UL,
     860                 :                :     0x93e27171UL,
     861                 :                :     0x73abd8d8UL,
     862                 :                :     0x53623131UL,
     863                 :                :     0x3f2a1515UL,
     864                 :                :     0x0c080404UL,
     865                 :                :     0x5295c7c7UL,
     866                 :                :     0x65462323UL,
     867                 :                :     0x5e9dc3c3UL,
     868                 :                :     0x28301818UL,
     869                 :                :     0xa1379696UL,
     870                 :                :     0x0f0a0505UL,
     871                 :                :     0xb52f9a9aUL,
     872                 :                :     0x090e0707UL,
     873                 :                :     0x36241212UL,
     874                 :                :     0x9b1b8080UL,
     875                 :                :     0x3ddfe2e2UL,
     876                 :                :     0x26cdebebUL,
     877                 :                :     0x694e2727UL,
     878                 :                :     0xcd7fb2b2UL,
     879                 :                :     0x9fea7575UL,
     880                 :                :     0x1b120909UL,
     881                 :                :     0x9e1d8383UL,
     882                 :                :     0x74582c2cUL,
     883                 :                :     0x2e341a1aUL,
     884                 :                :     0x2d361b1bUL,
     885                 :                :     0xb2dc6e6eUL,
     886                 :                :     0xeeb45a5aUL,
     887                 :                :     0xfb5ba0a0UL,
     888                 :                :     0xf6a45252UL,
     889                 :                :     0x4d763b3bUL,
     890                 :                :     0x61b7d6d6UL,
     891                 :                :     0xce7db3b3UL,
     892                 :                :     0x7b522929UL,
     893                 :                :     0x3edde3e3UL,
     894                 :                :     0x715e2f2fUL,
     895                 :                :     0x97138484UL,
     896                 :                :     0xf5a65353UL,
     897                 :                :     0x68b9d1d1UL,
     898                 :                :     0x00000000UL,
     899                 :                :     0x2cc1ededUL,
     900                 :                :     0x60402020UL,
     901                 :                :     0x1fe3fcfcUL,
     902                 :                :     0xc879b1b1UL,
     903                 :                :     0xedb65b5bUL,
     904                 :                :     0xbed46a6aUL,
     905                 :                :     0x468dcbcbUL,
     906                 :                :     0xd967bebeUL,
     907                 :                :     0x4b723939UL,
     908                 :                :     0xde944a4aUL,
     909                 :                :     0xd4984c4cUL,
     910                 :                :     0xe8b05858UL,
     911                 :                :     0x4a85cfcfUL,
     912                 :                :     0x6bbbd0d0UL,
     913                 :                :     0x2ac5efefUL,
     914                 :                :     0xe54faaaaUL,
     915                 :                :     0x16edfbfbUL,
     916                 :                :     0xc5864343UL,
     917                 :                :     0xd79a4d4dUL,
     918                 :                :     0x55663333UL,
     919                 :                :     0x94118585UL,
     920                 :                :     0xcf8a4545UL,
     921                 :                :     0x10e9f9f9UL,
     922                 :                :     0x06040202UL,
     923                 :                :     0x81fe7f7fUL,
     924                 :                :     0xf0a05050UL,
     925                 :                :     0x44783c3cUL,
     926                 :                :     0xba259f9fUL,
     927                 :                :     0xe34ba8a8UL,
     928                 :                :     0xf3a25151UL,
     929                 :                :     0xfe5da3a3UL,
     930                 :                :     0xc0804040UL,
     931                 :                :     0x8a058f8fUL,
     932                 :                :     0xad3f9292UL,
     933                 :                :     0xbc219d9dUL,
     934                 :                :     0x48703838UL,
     935                 :                :     0x04f1f5f5UL,
     936                 :                :     0xdf63bcbcUL,
     937                 :                :     0xc177b6b6UL,
     938                 :                :     0x75afdadaUL,
     939                 :                :     0x63422121UL,
     940                 :                :     0x30201010UL,
     941                 :                :     0x1ae5ffffUL,
     942                 :                :     0x0efdf3f3UL,
     943                 :                :     0x6dbfd2d2UL,
     944                 :                :     0x4c81cdcdUL,
     945                 :                :     0x14180c0cUL,
     946                 :                :     0x35261313UL,
     947                 :                :     0x2fc3ececUL,
     948                 :                :     0xe1be5f5fUL,
     949                 :                :     0xa2359797UL,
     950                 :                :     0xcc884444UL,
     951                 :                :     0x392e1717UL,
     952                 :                :     0x5793c4c4UL,
     953                 :                :     0xf255a7a7UL,
     954                 :                :     0x82fc7e7eUL,
     955                 :                :     0x477a3d3dUL,
     956                 :                :     0xacc86464UL,
     957                 :                :     0xe7ba5d5dUL,
     958                 :                :     0x2b321919UL,
     959                 :                :     0x95e67373UL,
     960                 :                :     0xa0c06060UL,
     961                 :                :     0x98198181UL,
     962                 :                :     0xd19e4f4fUL,
     963                 :                :     0x7fa3dcdcUL,
     964                 :                :     0x66442222UL,
     965                 :                :     0x7e542a2aUL,
     966                 :                :     0xab3b9090UL,
     967                 :                :     0x830b8888UL,
     968                 :                :     0xca8c4646UL,
     969                 :                :     0x29c7eeeeUL,
     970                 :                :     0xd36bb8b8UL,
     971                 :                :     0x3c281414UL,
     972                 :                :     0x79a7dedeUL,
     973                 :                :     0xe2bc5e5eUL,
     974                 :                :     0x1d160b0bUL,
     975                 :                :     0x76addbdbUL,
     976                 :                :     0x3bdbe0e0UL,
     977                 :                :     0x56643232UL,
     978                 :                :     0x4e743a3aUL,
     979                 :                :     0x1e140a0aUL,
     980                 :                :     0xdb924949UL,
     981                 :                :     0x0a0c0606UL,
     982                 :                :     0x6c482424UL,
     983                 :                :     0xe4b85c5cUL,
     984                 :                :     0x5d9fc2c2UL,
     985                 :                :     0x6ebdd3d3UL,
     986                 :                :     0xef43acacUL,
     987                 :                :     0xa6c46262UL,
     988                 :                :     0xa8399191UL,
     989                 :                :     0xa4319595UL,
     990                 :                :     0x37d3e4e4UL,
     991                 :                :     0x8bf27979UL,
     992                 :                :     0x32d5e7e7UL,
     993                 :                :     0x438bc8c8UL,
     994                 :                :     0x596e3737UL,
     995                 :                :     0xb7da6d6dUL,
     996                 :                :     0x8c018d8dUL,
     997                 :                :     0x64b1d5d5UL,
     998                 :                :     0xd29c4e4eUL,
     999                 :                :     0xe049a9a9UL,
    1000                 :                :     0xb4d86c6cUL,
    1001                 :                :     0xfaac5656UL,
    1002                 :                :     0x07f3f4f4UL,
    1003                 :                :     0x25cfeaeaUL,
    1004                 :                :     0xafca6565UL,
    1005                 :                :     0x8ef47a7aUL,
    1006                 :                :     0xe947aeaeUL,
    1007                 :                :     0x18100808UL,
    1008                 :                :     0xd56fbabaUL,
    1009                 :                :     0x88f07878UL,
    1010                 :                :     0x6f4a2525UL,
    1011                 :                :     0x725c2e2eUL,
    1012                 :                :     0x24381c1cUL,
    1013                 :                :     0xf157a6a6UL,
    1014                 :                :     0xc773b4b4UL,
    1015                 :                :     0x5197c6c6UL,
    1016                 :                :     0x23cbe8e8UL,
    1017                 :                :     0x7ca1ddddUL,
    1018                 :                :     0x9ce87474UL,
    1019                 :                :     0x213e1f1fUL,
    1020                 :                :     0xdd964b4bUL,
    1021                 :                :     0xdc61bdbdUL,
    1022                 :                :     0x860d8b8bUL,
    1023                 :                :     0x850f8a8aUL,
    1024                 :                :     0x90e07070UL,
    1025                 :                :     0x427c3e3eUL,
    1026                 :                :     0xc471b5b5UL,
    1027                 :                :     0xaacc6666UL,
    1028                 :                :     0xd8904848UL,
    1029                 :                :     0x05060303UL,
    1030                 :                :     0x01f7f6f6UL,
    1031                 :                :     0x121c0e0eUL,
    1032                 :                :     0xa3c26161UL,
    1033                 :                :     0x5f6a3535UL,
    1034                 :                :     0xf9ae5757UL,
    1035                 :                :     0xd069b9b9UL,
    1036                 :                :     0x91178686UL,
    1037                 :                :     0x5899c1c1UL,
    1038                 :                :     0x273a1d1dUL,
    1039                 :                :     0xb9279e9eUL,
    1040                 :                :     0x38d9e1e1UL,
    1041                 :                :     0x13ebf8f8UL,
    1042                 :                :     0xb32b9898UL,
    1043                 :                :     0x33221111UL,
    1044                 :                :     0xbbd26969UL,
    1045                 :                :     0x70a9d9d9UL,
    1046                 :                :     0x89078e8eUL,
    1047                 :                :     0xa7339494UL,
    1048                 :                :     0xb62d9b9bUL,
    1049                 :                :     0x223c1e1eUL,
    1050                 :                :     0x92158787UL,
    1051                 :                :     0x20c9e9e9UL,
    1052                 :                :     0x4987ceceUL,
    1053                 :                :     0xffaa5555UL,
    1054                 :                :     0x78502828UL,
    1055                 :                :     0x7aa5dfdfUL,
    1056                 :                :     0x8f038c8cUL,
    1057                 :                :     0xf859a1a1UL,
    1058                 :                :     0x80098989UL,
    1059                 :                :     0x171a0d0dUL,
    1060                 :                :     0xda65bfbfUL,
    1061                 :                :     0x31d7e6e6UL,
    1062                 :                :     0xc6844242UL,
    1063                 :                :     0xb8d06868UL,
    1064                 :                :     0xc3824141UL,
    1065                 :                :     0xb0299999UL,
    1066                 :                :     0x775a2d2dUL,
    1067                 :                :     0x111e0f0fUL,
    1068                 :                :     0xcb7bb0b0UL,
    1069                 :                :     0xfca85454UL,
    1070                 :                :     0xd66dbbbbUL,
    1071                 :                :     0x3a2c1616UL,
    1072                 :                : };
    1073                 :                : static const std::uint32_t TE2[256] = {
    1074                 :                :     0x63a5c663UL,
    1075                 :                :     0x7c84f87cUL,
    1076                 :                :     0x7799ee77UL,
    1077                 :                :     0x7b8df67bUL,
    1078                 :                :     0xf20dfff2UL,
    1079                 :                :     0x6bbdd66bUL,
    1080                 :                :     0x6fb1de6fUL,
    1081                 :                :     0xc55491c5UL,
    1082                 :                :     0x30506030UL,
    1083                 :                :     0x01030201UL,
    1084                 :                :     0x67a9ce67UL,
    1085                 :                :     0x2b7d562bUL,
    1086                 :                :     0xfe19e7feUL,
    1087                 :                :     0xd762b5d7UL,
    1088                 :                :     0xabe64dabUL,
    1089                 :                :     0x769aec76UL,
    1090                 :                :     0xca458fcaUL,
    1091                 :                :     0x829d1f82UL,
    1092                 :                :     0xc94089c9UL,
    1093                 :                :     0x7d87fa7dUL,
    1094                 :                :     0xfa15effaUL,
    1095                 :                :     0x59ebb259UL,
    1096                 :                :     0x47c98e47UL,
    1097                 :                :     0xf00bfbf0UL,
    1098                 :                :     0xadec41adUL,
    1099                 :                :     0xd467b3d4UL,
    1100                 :                :     0xa2fd5fa2UL,
    1101                 :                :     0xafea45afUL,
    1102                 :                :     0x9cbf239cUL,
    1103                 :                :     0xa4f753a4UL,
    1104                 :                :     0x7296e472UL,
    1105                 :                :     0xc05b9bc0UL,
    1106                 :                :     0xb7c275b7UL,
    1107                 :                :     0xfd1ce1fdUL,
    1108                 :                :     0x93ae3d93UL,
    1109                 :                :     0x266a4c26UL,
    1110                 :                :     0x365a6c36UL,
    1111                 :                :     0x3f417e3fUL,
    1112                 :                :     0xf702f5f7UL,
    1113                 :                :     0xcc4f83ccUL,
    1114                 :                :     0x345c6834UL,
    1115                 :                :     0xa5f451a5UL,
    1116                 :                :     0xe534d1e5UL,
    1117                 :                :     0xf108f9f1UL,
    1118                 :                :     0x7193e271UL,
    1119                 :                :     0xd873abd8UL,
    1120                 :                :     0x31536231UL,
    1121                 :                :     0x153f2a15UL,
    1122                 :                :     0x040c0804UL,
    1123                 :                :     0xc75295c7UL,
    1124                 :                :     0x23654623UL,
    1125                 :                :     0xc35e9dc3UL,
    1126                 :                :     0x18283018UL,
    1127                 :                :     0x96a13796UL,
    1128                 :                :     0x050f0a05UL,
    1129                 :                :     0x9ab52f9aUL,
    1130                 :                :     0x07090e07UL,
    1131                 :                :     0x12362412UL,
    1132                 :                :     0x809b1b80UL,
    1133                 :                :     0xe23ddfe2UL,
    1134                 :                :     0xeb26cdebUL,
    1135                 :                :     0x27694e27UL,
    1136                 :                :     0xb2cd7fb2UL,
    1137                 :                :     0x759fea75UL,
    1138                 :                :     0x091b1209UL,
    1139                 :                :     0x839e1d83UL,
    1140                 :                :     0x2c74582cUL,
    1141                 :                :     0x1a2e341aUL,
    1142                 :                :     0x1b2d361bUL,
    1143                 :                :     0x6eb2dc6eUL,
    1144                 :                :     0x5aeeb45aUL,
    1145                 :                :     0xa0fb5ba0UL,
    1146                 :                :     0x52f6a452UL,
    1147                 :                :     0x3b4d763bUL,
    1148                 :                :     0xd661b7d6UL,
    1149                 :                :     0xb3ce7db3UL,
    1150                 :                :     0x297b5229UL,
    1151                 :                :     0xe33edde3UL,
    1152                 :                :     0x2f715e2fUL,
    1153                 :                :     0x84971384UL,
    1154                 :                :     0x53f5a653UL,
    1155                 :                :     0xd168b9d1UL,
    1156                 :                :     0x00000000UL,
    1157                 :                :     0xed2cc1edUL,
    1158                 :                :     0x20604020UL,
    1159                 :                :     0xfc1fe3fcUL,
    1160                 :                :     0xb1c879b1UL,
    1161                 :                :     0x5bedb65bUL,
    1162                 :                :     0x6abed46aUL,
    1163                 :                :     0xcb468dcbUL,
    1164                 :                :     0xbed967beUL,
    1165                 :                :     0x394b7239UL,
    1166                 :                :     0x4ade944aUL,
    1167                 :                :     0x4cd4984cUL,
    1168                 :                :     0x58e8b058UL,
    1169                 :                :     0xcf4a85cfUL,
    1170                 :                :     0xd06bbbd0UL,
    1171                 :                :     0xef2ac5efUL,
    1172                 :                :     0xaae54faaUL,
    1173                 :                :     0xfb16edfbUL,
    1174                 :                :     0x43c58643UL,
    1175                 :                :     0x4dd79a4dUL,
    1176                 :                :     0x33556633UL,
    1177                 :                :     0x85941185UL,
    1178                 :                :     0x45cf8a45UL,
    1179                 :                :     0xf910e9f9UL,
    1180                 :                :     0x02060402UL,
    1181                 :                :     0x7f81fe7fUL,
    1182                 :                :     0x50f0a050UL,
    1183                 :                :     0x3c44783cUL,
    1184                 :                :     0x9fba259fUL,
    1185                 :                :     0xa8e34ba8UL,
    1186                 :                :     0x51f3a251UL,
    1187                 :                :     0xa3fe5da3UL,
    1188                 :                :     0x40c08040UL,
    1189                 :                :     0x8f8a058fUL,
    1190                 :                :     0x92ad3f92UL,
    1191                 :                :     0x9dbc219dUL,
    1192                 :                :     0x38487038UL,
    1193                 :                :     0xf504f1f5UL,
    1194                 :                :     0xbcdf63bcUL,
    1195                 :                :     0xb6c177b6UL,
    1196                 :                :     0xda75afdaUL,
    1197                 :                :     0x21634221UL,
    1198                 :                :     0x10302010UL,
    1199                 :                :     0xff1ae5ffUL,
    1200                 :                :     0xf30efdf3UL,
    1201                 :                :     0xd26dbfd2UL,
    1202                 :                :     0xcd4c81cdUL,
    1203                 :                :     0x0c14180cUL,
    1204                 :                :     0x13352613UL,
    1205                 :                :     0xec2fc3ecUL,
    1206                 :                :     0x5fe1be5fUL,
    1207                 :                :     0x97a23597UL,
    1208                 :                :     0x44cc8844UL,
    1209                 :                :     0x17392e17UL,
    1210                 :                :     0xc45793c4UL,
    1211                 :                :     0xa7f255a7UL,
    1212                 :                :     0x7e82fc7eUL,
    1213                 :                :     0x3d477a3dUL,
    1214                 :                :     0x64acc864UL,
    1215                 :                :     0x5de7ba5dUL,
    1216                 :                :     0x192b3219UL,
    1217                 :                :     0x7395e673UL,
    1218                 :                :     0x60a0c060UL,
    1219                 :                :     0x81981981UL,
    1220                 :                :     0x4fd19e4fUL,
    1221                 :                :     0xdc7fa3dcUL,
    1222                 :                :     0x22664422UL,
    1223                 :                :     0x2a7e542aUL,
    1224                 :                :     0x90ab3b90UL,
    1225                 :                :     0x88830b88UL,
    1226                 :                :     0x46ca8c46UL,
    1227                 :                :     0xee29c7eeUL,
    1228                 :                :     0xb8d36bb8UL,
    1229                 :                :     0x143c2814UL,
    1230                 :                :     0xde79a7deUL,
    1231                 :                :     0x5ee2bc5eUL,
    1232                 :                :     0x0b1d160bUL,
    1233                 :                :     0xdb76addbUL,
    1234                 :                :     0xe03bdbe0UL,
    1235                 :                :     0x32566432UL,
    1236                 :                :     0x3a4e743aUL,
    1237                 :                :     0x0a1e140aUL,
    1238                 :                :     0x49db9249UL,
    1239                 :                :     0x060a0c06UL,
    1240                 :                :     0x246c4824UL,
    1241                 :                :     0x5ce4b85cUL,
    1242                 :                :     0xc25d9fc2UL,
    1243                 :                :     0xd36ebdd3UL,
    1244                 :                :     0xacef43acUL,
    1245                 :                :     0x62a6c462UL,
    1246                 :                :     0x91a83991UL,
    1247                 :                :     0x95a43195UL,
    1248                 :                :     0xe437d3e4UL,
    1249                 :                :     0x798bf279UL,
    1250                 :                :     0xe732d5e7UL,
    1251                 :                :     0xc8438bc8UL,
    1252                 :                :     0x37596e37UL,
    1253                 :                :     0x6db7da6dUL,
    1254                 :                :     0x8d8c018dUL,
    1255                 :                :     0xd564b1d5UL,
    1256                 :                :     0x4ed29c4eUL,
    1257                 :                :     0xa9e049a9UL,
    1258                 :                :     0x6cb4d86cUL,
    1259                 :                :     0x56faac56UL,
    1260                 :                :     0xf407f3f4UL,
    1261                 :                :     0xea25cfeaUL,
    1262                 :                :     0x65afca65UL,
    1263                 :                :     0x7a8ef47aUL,
    1264                 :                :     0xaee947aeUL,
    1265                 :                :     0x08181008UL,
    1266                 :                :     0xbad56fbaUL,
    1267                 :                :     0x7888f078UL,
    1268                 :                :     0x256f4a25UL,
    1269                 :                :     0x2e725c2eUL,
    1270                 :                :     0x1c24381cUL,
    1271                 :                :     0xa6f157a6UL,
    1272                 :                :     0xb4c773b4UL,
    1273                 :                :     0xc65197c6UL,
    1274                 :                :     0xe823cbe8UL,
    1275                 :                :     0xdd7ca1ddUL,
    1276                 :                :     0x749ce874UL,
    1277                 :                :     0x1f213e1fUL,
    1278                 :                :     0x4bdd964bUL,
    1279                 :                :     0xbddc61bdUL,
    1280                 :                :     0x8b860d8bUL,
    1281                 :                :     0x8a850f8aUL,
    1282                 :                :     0x7090e070UL,
    1283                 :                :     0x3e427c3eUL,
    1284                 :                :     0xb5c471b5UL,
    1285                 :                :     0x66aacc66UL,
    1286                 :                :     0x48d89048UL,
    1287                 :                :     0x03050603UL,
    1288                 :                :     0xf601f7f6UL,
    1289                 :                :     0x0e121c0eUL,
    1290                 :                :     0x61a3c261UL,
    1291                 :                :     0x355f6a35UL,
    1292                 :                :     0x57f9ae57UL,
    1293                 :                :     0xb9d069b9UL,
    1294                 :                :     0x86911786UL,
    1295                 :                :     0xc15899c1UL,
    1296                 :                :     0x1d273a1dUL,
    1297                 :                :     0x9eb9279eUL,
    1298                 :                :     0xe138d9e1UL,
    1299                 :                :     0xf813ebf8UL,
    1300                 :                :     0x98b32b98UL,
    1301                 :                :     0x11332211UL,
    1302                 :                :     0x69bbd269UL,
    1303                 :                :     0xd970a9d9UL,
    1304                 :                :     0x8e89078eUL,
    1305                 :                :     0x94a73394UL,
    1306                 :                :     0x9bb62d9bUL,
    1307                 :                :     0x1e223c1eUL,
    1308                 :                :     0x87921587UL,
    1309                 :                :     0xe920c9e9UL,
    1310                 :                :     0xce4987ceUL,
    1311                 :                :     0x55ffaa55UL,
    1312                 :                :     0x28785028UL,
    1313                 :                :     0xdf7aa5dfUL,
    1314                 :                :     0x8c8f038cUL,
    1315                 :                :     0xa1f859a1UL,
    1316                 :                :     0x89800989UL,
    1317                 :                :     0x0d171a0dUL,
    1318                 :                :     0xbfda65bfUL,
    1319                 :                :     0xe631d7e6UL,
    1320                 :                :     0x42c68442UL,
    1321                 :                :     0x68b8d068UL,
    1322                 :                :     0x41c38241UL,
    1323                 :                :     0x99b02999UL,
    1324                 :                :     0x2d775a2dUL,
    1325                 :                :     0x0f111e0fUL,
    1326                 :                :     0xb0cb7bb0UL,
    1327                 :                :     0x54fca854UL,
    1328                 :                :     0xbbd66dbbUL,
    1329                 :                :     0x163a2c16UL,
    1330                 :                : };
    1331                 :                : static const std::uint32_t TE3[256] = {
    1332                 :                : 
    1333                 :                :     0x6363a5c6UL,
    1334                 :                :     0x7c7c84f8UL,
    1335                 :                :     0x777799eeUL,
    1336                 :                :     0x7b7b8df6UL,
    1337                 :                :     0xf2f20dffUL,
    1338                 :                :     0x6b6bbdd6UL,
    1339                 :                :     0x6f6fb1deUL,
    1340                 :                :     0xc5c55491UL,
    1341                 :                :     0x30305060UL,
    1342                 :                :     0x01010302UL,
    1343                 :                :     0x6767a9ceUL,
    1344                 :                :     0x2b2b7d56UL,
    1345                 :                :     0xfefe19e7UL,
    1346                 :                :     0xd7d762b5UL,
    1347                 :                :     0xababe64dUL,
    1348                 :                :     0x76769aecUL,
    1349                 :                :     0xcaca458fUL,
    1350                 :                :     0x82829d1fUL,
    1351                 :                :     0xc9c94089UL,
    1352                 :                :     0x7d7d87faUL,
    1353                 :                :     0xfafa15efUL,
    1354                 :                :     0x5959ebb2UL,
    1355                 :                :     0x4747c98eUL,
    1356                 :                :     0xf0f00bfbUL,
    1357                 :                :     0xadadec41UL,
    1358                 :                :     0xd4d467b3UL,
    1359                 :                :     0xa2a2fd5fUL,
    1360                 :                :     0xafafea45UL,
    1361                 :                :     0x9c9cbf23UL,
    1362                 :                :     0xa4a4f753UL,
    1363                 :                :     0x727296e4UL,
    1364                 :                :     0xc0c05b9bUL,
    1365                 :                :     0xb7b7c275UL,
    1366                 :                :     0xfdfd1ce1UL,
    1367                 :                :     0x9393ae3dUL,
    1368                 :                :     0x26266a4cUL,
    1369                 :                :     0x36365a6cUL,
    1370                 :                :     0x3f3f417eUL,
    1371                 :                :     0xf7f702f5UL,
    1372                 :                :     0xcccc4f83UL,
    1373                 :                :     0x34345c68UL,
    1374                 :                :     0xa5a5f451UL,
    1375                 :                :     0xe5e534d1UL,
    1376                 :                :     0xf1f108f9UL,
    1377                 :                :     0x717193e2UL,
    1378                 :                :     0xd8d873abUL,
    1379                 :                :     0x31315362UL,
    1380                 :                :     0x15153f2aUL,
    1381                 :                :     0x04040c08UL,
    1382                 :                :     0xc7c75295UL,
    1383                 :                :     0x23236546UL,
    1384                 :                :     0xc3c35e9dUL,
    1385                 :                :     0x18182830UL,
    1386                 :                :     0x9696a137UL,
    1387                 :                :     0x05050f0aUL,
    1388                 :                :     0x9a9ab52fUL,
    1389                 :                :     0x0707090eUL,
    1390                 :                :     0x12123624UL,
    1391                 :                :     0x80809b1bUL,
    1392                 :                :     0xe2e23ddfUL,
    1393                 :                :     0xebeb26cdUL,
    1394                 :                :     0x2727694eUL,
    1395                 :                :     0xb2b2cd7fUL,
    1396                 :                :     0x75759feaUL,
    1397                 :                :     0x09091b12UL,
    1398                 :                :     0x83839e1dUL,
    1399                 :                :     0x2c2c7458UL,
    1400                 :                :     0x1a1a2e34UL,
    1401                 :                :     0x1b1b2d36UL,
    1402                 :                :     0x6e6eb2dcUL,
    1403                 :                :     0x5a5aeeb4UL,
    1404                 :                :     0xa0a0fb5bUL,
    1405                 :                :     0x5252f6a4UL,
    1406                 :                :     0x3b3b4d76UL,
    1407                 :                :     0xd6d661b7UL,
    1408                 :                :     0xb3b3ce7dUL,
    1409                 :                :     0x29297b52UL,
    1410                 :                :     0xe3e33eddUL,
    1411                 :                :     0x2f2f715eUL,
    1412                 :                :     0x84849713UL,
    1413                 :                :     0x5353f5a6UL,
    1414                 :                :     0xd1d168b9UL,
    1415                 :                :     0x00000000UL,
    1416                 :                :     0xeded2cc1UL,
    1417                 :                :     0x20206040UL,
    1418                 :                :     0xfcfc1fe3UL,
    1419                 :                :     0xb1b1c879UL,
    1420                 :                :     0x5b5bedb6UL,
    1421                 :                :     0x6a6abed4UL,
    1422                 :                :     0xcbcb468dUL,
    1423                 :                :     0xbebed967UL,
    1424                 :                :     0x39394b72UL,
    1425                 :                :     0x4a4ade94UL,
    1426                 :                :     0x4c4cd498UL,
    1427                 :                :     0x5858e8b0UL,
    1428                 :                :     0xcfcf4a85UL,
    1429                 :                :     0xd0d06bbbUL,
    1430                 :                :     0xefef2ac5UL,
    1431                 :                :     0xaaaae54fUL,
    1432                 :                :     0xfbfb16edUL,
    1433                 :                :     0x4343c586UL,
    1434                 :                :     0x4d4dd79aUL,
    1435                 :                :     0x33335566UL,
    1436                 :                :     0x85859411UL,
    1437                 :                :     0x4545cf8aUL,
    1438                 :                :     0xf9f910e9UL,
    1439                 :                :     0x02020604UL,
    1440                 :                :     0x7f7f81feUL,
    1441                 :                :     0x5050f0a0UL,
    1442                 :                :     0x3c3c4478UL,
    1443                 :                :     0x9f9fba25UL,
    1444                 :                :     0xa8a8e34bUL,
    1445                 :                :     0x5151f3a2UL,
    1446                 :                :     0xa3a3fe5dUL,
    1447                 :                :     0x4040c080UL,
    1448                 :                :     0x8f8f8a05UL,
    1449                 :                :     0x9292ad3fUL,
    1450                 :                :     0x9d9dbc21UL,
    1451                 :                :     0x38384870UL,
    1452                 :                :     0xf5f504f1UL,
    1453                 :                :     0xbcbcdf63UL,
    1454                 :                :     0xb6b6c177UL,
    1455                 :                :     0xdada75afUL,
    1456                 :                :     0x21216342UL,
    1457                 :                :     0x10103020UL,
    1458                 :                :     0xffff1ae5UL,
    1459                 :                :     0xf3f30efdUL,
    1460                 :                :     0xd2d26dbfUL,
    1461                 :                :     0xcdcd4c81UL,
    1462                 :                :     0x0c0c1418UL,
    1463                 :                :     0x13133526UL,
    1464                 :                :     0xecec2fc3UL,
    1465                 :                :     0x5f5fe1beUL,
    1466                 :                :     0x9797a235UL,
    1467                 :                :     0x4444cc88UL,
    1468                 :                :     0x1717392eUL,
    1469                 :                :     0xc4c45793UL,
    1470                 :                :     0xa7a7f255UL,
    1471                 :                :     0x7e7e82fcUL,
    1472                 :                :     0x3d3d477aUL,
    1473                 :                :     0x6464acc8UL,
    1474                 :                :     0x5d5de7baUL,
    1475                 :                :     0x19192b32UL,
    1476                 :                :     0x737395e6UL,
    1477                 :                :     0x6060a0c0UL,
    1478                 :                :     0x81819819UL,
    1479                 :                :     0x4f4fd19eUL,
    1480                 :                :     0xdcdc7fa3UL,
    1481                 :                :     0x22226644UL,
    1482                 :                :     0x2a2a7e54UL,
    1483                 :                :     0x9090ab3bUL,
    1484                 :                :     0x8888830bUL,
    1485                 :                :     0x4646ca8cUL,
    1486                 :                :     0xeeee29c7UL,
    1487                 :                :     0xb8b8d36bUL,
    1488                 :                :     0x14143c28UL,
    1489                 :                :     0xdede79a7UL,
    1490                 :                :     0x5e5ee2bcUL,
    1491                 :                :     0x0b0b1d16UL,
    1492                 :                :     0xdbdb76adUL,
    1493                 :                :     0xe0e03bdbUL,
    1494                 :                :     0x32325664UL,
    1495                 :                :     0x3a3a4e74UL,
    1496                 :                :     0x0a0a1e14UL,
    1497                 :                :     0x4949db92UL,
    1498                 :                :     0x06060a0cUL,
    1499                 :                :     0x24246c48UL,
    1500                 :                :     0x5c5ce4b8UL,
    1501                 :                :     0xc2c25d9fUL,
    1502                 :                :     0xd3d36ebdUL,
    1503                 :                :     0xacacef43UL,
    1504                 :                :     0x6262a6c4UL,
    1505                 :                :     0x9191a839UL,
    1506                 :                :     0x9595a431UL,
    1507                 :                :     0xe4e437d3UL,
    1508                 :                :     0x79798bf2UL,
    1509                 :                :     0xe7e732d5UL,
    1510                 :                :     0xc8c8438bUL,
    1511                 :                :     0x3737596eUL,
    1512                 :                :     0x6d6db7daUL,
    1513                 :                :     0x8d8d8c01UL,
    1514                 :                :     0xd5d564b1UL,
    1515                 :                :     0x4e4ed29cUL,
    1516                 :                :     0xa9a9e049UL,
    1517                 :                :     0x6c6cb4d8UL,
    1518                 :                :     0x5656faacUL,
    1519                 :                :     0xf4f407f3UL,
    1520                 :                :     0xeaea25cfUL,
    1521                 :                :     0x6565afcaUL,
    1522                 :                :     0x7a7a8ef4UL,
    1523                 :                :     0xaeaee947UL,
    1524                 :                :     0x08081810UL,
    1525                 :                :     0xbabad56fUL,
    1526                 :                :     0x787888f0UL,
    1527                 :                :     0x25256f4aUL,
    1528                 :                :     0x2e2e725cUL,
    1529                 :                :     0x1c1c2438UL,
    1530                 :                :     0xa6a6f157UL,
    1531                 :                :     0xb4b4c773UL,
    1532                 :                :     0xc6c65197UL,
    1533                 :                :     0xe8e823cbUL,
    1534                 :                :     0xdddd7ca1UL,
    1535                 :                :     0x74749ce8UL,
    1536                 :                :     0x1f1f213eUL,
    1537                 :                :     0x4b4bdd96UL,
    1538                 :                :     0xbdbddc61UL,
    1539                 :                :     0x8b8b860dUL,
    1540                 :                :     0x8a8a850fUL,
    1541                 :                :     0x707090e0UL,
    1542                 :                :     0x3e3e427cUL,
    1543                 :                :     0xb5b5c471UL,
    1544                 :                :     0x6666aaccUL,
    1545                 :                :     0x4848d890UL,
    1546                 :                :     0x03030506UL,
    1547                 :                :     0xf6f601f7UL,
    1548                 :                :     0x0e0e121cUL,
    1549                 :                :     0x6161a3c2UL,
    1550                 :                :     0x35355f6aUL,
    1551                 :                :     0x5757f9aeUL,
    1552                 :                :     0xb9b9d069UL,
    1553                 :                :     0x86869117UL,
    1554                 :                :     0xc1c15899UL,
    1555                 :                :     0x1d1d273aUL,
    1556                 :                :     0x9e9eb927UL,
    1557                 :                :     0xe1e138d9UL,
    1558                 :                :     0xf8f813ebUL,
    1559                 :                :     0x9898b32bUL,
    1560                 :                :     0x11113322UL,
    1561                 :                :     0x6969bbd2UL,
    1562                 :                :     0xd9d970a9UL,
    1563                 :                :     0x8e8e8907UL,
    1564                 :                :     0x9494a733UL,
    1565                 :                :     0x9b9bb62dUL,
    1566                 :                :     0x1e1e223cUL,
    1567                 :                :     0x87879215UL,
    1568                 :                :     0xe9e920c9UL,
    1569                 :                :     0xcece4987UL,
    1570                 :                :     0x5555ffaaUL,
    1571                 :                :     0x28287850UL,
    1572                 :                :     0xdfdf7aa5UL,
    1573                 :                :     0x8c8c8f03UL,
    1574                 :                :     0xa1a1f859UL,
    1575                 :                :     0x89898009UL,
    1576                 :                :     0x0d0d171aUL,
    1577                 :                :     0xbfbfda65UL,
    1578                 :                :     0xe6e631d7UL,
    1579                 :                :     0x4242c684UL,
    1580                 :                :     0x6868b8d0UL,
    1581                 :                :     0x4141c382UL,
    1582                 :                :     0x9999b029UL,
    1583                 :                :     0x2d2d775aUL,
    1584                 :                :     0x0f0f111eUL,
    1585                 :                :     0xb0b0cb7bUL,
    1586                 :                :     0x5454fca8UL,
    1587                 :                :     0xbbbbd66dUL,
    1588                 :                :     0x16163a2cUL,
    1589                 :                : };
    1590                 :                : 
    1591                 :                : static const std::uint32_t Te4_0[] = {
    1592                 :                :     0x00000063UL, 0x0000007cUL, 0x00000077UL, 0x0000007bUL, 0x000000f2UL, 0x0000006bUL, 0x0000006fUL, 0x000000c5UL,
    1593                 :                :     0x00000030UL, 0x00000001UL, 0x00000067UL, 0x0000002bUL, 0x000000feUL, 0x000000d7UL, 0x000000abUL, 0x00000076UL,
    1594                 :                :     0x000000caUL, 0x00000082UL, 0x000000c9UL, 0x0000007dUL, 0x000000faUL, 0x00000059UL, 0x00000047UL, 0x000000f0UL,
    1595                 :                :     0x000000adUL, 0x000000d4UL, 0x000000a2UL, 0x000000afUL, 0x0000009cUL, 0x000000a4UL, 0x00000072UL, 0x000000c0UL,
    1596                 :                :     0x000000b7UL, 0x000000fdUL, 0x00000093UL, 0x00000026UL, 0x00000036UL, 0x0000003fUL, 0x000000f7UL, 0x000000ccUL,
    1597                 :                :     0x00000034UL, 0x000000a5UL, 0x000000e5UL, 0x000000f1UL, 0x00000071UL, 0x000000d8UL, 0x00000031UL, 0x00000015UL,
    1598                 :                :     0x00000004UL, 0x000000c7UL, 0x00000023UL, 0x000000c3UL, 0x00000018UL, 0x00000096UL, 0x00000005UL, 0x0000009aUL,
    1599                 :                :     0x00000007UL, 0x00000012UL, 0x00000080UL, 0x000000e2UL, 0x000000ebUL, 0x00000027UL, 0x000000b2UL, 0x00000075UL,
    1600                 :                :     0x00000009UL, 0x00000083UL, 0x0000002cUL, 0x0000001aUL, 0x0000001bUL, 0x0000006eUL, 0x0000005aUL, 0x000000a0UL,
    1601                 :                :     0x00000052UL, 0x0000003bUL, 0x000000d6UL, 0x000000b3UL, 0x00000029UL, 0x000000e3UL, 0x0000002fUL, 0x00000084UL,
    1602                 :                :     0x00000053UL, 0x000000d1UL, 0x00000000UL, 0x000000edUL, 0x00000020UL, 0x000000fcUL, 0x000000b1UL, 0x0000005bUL,
    1603                 :                :     0x0000006aUL, 0x000000cbUL, 0x000000beUL, 0x00000039UL, 0x0000004aUL, 0x0000004cUL, 0x00000058UL, 0x000000cfUL,
    1604                 :                :     0x000000d0UL, 0x000000efUL, 0x000000aaUL, 0x000000fbUL, 0x00000043UL, 0x0000004dUL, 0x00000033UL, 0x00000085UL,
    1605                 :                :     0x00000045UL, 0x000000f9UL, 0x00000002UL, 0x0000007fUL, 0x00000050UL, 0x0000003cUL, 0x0000009fUL, 0x000000a8UL,
    1606                 :                :     0x00000051UL, 0x000000a3UL, 0x00000040UL, 0x0000008fUL, 0x00000092UL, 0x0000009dUL, 0x00000038UL, 0x000000f5UL,
    1607                 :                :     0x000000bcUL, 0x000000b6UL, 0x000000daUL, 0x00000021UL, 0x00000010UL, 0x000000ffUL, 0x000000f3UL, 0x000000d2UL,
    1608                 :                :     0x000000cdUL, 0x0000000cUL, 0x00000013UL, 0x000000ecUL, 0x0000005fUL, 0x00000097UL, 0x00000044UL, 0x00000017UL,
    1609                 :                :     0x000000c4UL, 0x000000a7UL, 0x0000007eUL, 0x0000003dUL, 0x00000064UL, 0x0000005dUL, 0x00000019UL, 0x00000073UL,
    1610                 :                :     0x00000060UL, 0x00000081UL, 0x0000004fUL, 0x000000dcUL, 0x00000022UL, 0x0000002aUL, 0x00000090UL, 0x00000088UL,
    1611                 :                :     0x00000046UL, 0x000000eeUL, 0x000000b8UL, 0x00000014UL, 0x000000deUL, 0x0000005eUL, 0x0000000bUL, 0x000000dbUL,
    1612                 :                :     0x000000e0UL, 0x00000032UL, 0x0000003aUL, 0x0000000aUL, 0x00000049UL, 0x00000006UL, 0x00000024UL, 0x0000005cUL,
    1613                 :                :     0x000000c2UL, 0x000000d3UL, 0x000000acUL, 0x00000062UL, 0x00000091UL, 0x00000095UL, 0x000000e4UL, 0x00000079UL,
    1614                 :                :     0x000000e7UL, 0x000000c8UL, 0x00000037UL, 0x0000006dUL, 0x0000008dUL, 0x000000d5UL, 0x0000004eUL, 0x000000a9UL,
    1615                 :                :     0x0000006cUL, 0x00000056UL, 0x000000f4UL, 0x000000eaUL, 0x00000065UL, 0x0000007aUL, 0x000000aeUL, 0x00000008UL,
    1616                 :                :     0x000000baUL, 0x00000078UL, 0x00000025UL, 0x0000002eUL, 0x0000001cUL, 0x000000a6UL, 0x000000b4UL, 0x000000c6UL,
    1617                 :                :     0x000000e8UL, 0x000000ddUL, 0x00000074UL, 0x0000001fUL, 0x0000004bUL, 0x000000bdUL, 0x0000008bUL, 0x0000008aUL,
    1618                 :                :     0x00000070UL, 0x0000003eUL, 0x000000b5UL, 0x00000066UL, 0x00000048UL, 0x00000003UL, 0x000000f6UL, 0x0000000eUL,
    1619                 :                :     0x00000061UL, 0x00000035UL, 0x00000057UL, 0x000000b9UL, 0x00000086UL, 0x000000c1UL, 0x0000001dUL, 0x0000009eUL,
    1620                 :                :     0x000000e1UL, 0x000000f8UL, 0x00000098UL, 0x00000011UL, 0x00000069UL, 0x000000d9UL, 0x0000008eUL, 0x00000094UL,
    1621                 :                :     0x0000009bUL, 0x0000001eUL, 0x00000087UL, 0x000000e9UL, 0x000000ceUL, 0x00000055UL, 0x00000028UL, 0x000000dfUL,
    1622                 :                :     0x0000008cUL, 0x000000a1UL, 0x00000089UL, 0x0000000dUL, 0x000000bfUL, 0x000000e6UL, 0x00000042UL, 0x00000068UL,
    1623                 :                :     0x00000041UL, 0x00000099UL, 0x0000002dUL, 0x0000000fUL, 0x000000b0UL, 0x00000054UL, 0x000000bbUL, 0x00000016UL};
    1624                 :                : 
    1625                 :                : static const std::uint32_t Te4_1[] = {
    1626                 :                :     0x00006300UL, 0x00007c00UL, 0x00007700UL, 0x00007b00UL, 0x0000f200UL, 0x00006b00UL, 0x00006f00UL, 0x0000c500UL,
    1627                 :                :     0x00003000UL, 0x00000100UL, 0x00006700UL, 0x00002b00UL, 0x0000fe00UL, 0x0000d700UL, 0x0000ab00UL, 0x00007600UL,
    1628                 :                :     0x0000ca00UL, 0x00008200UL, 0x0000c900UL, 0x00007d00UL, 0x0000fa00UL, 0x00005900UL, 0x00004700UL, 0x0000f000UL,
    1629                 :                :     0x0000ad00UL, 0x0000d400UL, 0x0000a200UL, 0x0000af00UL, 0x00009c00UL, 0x0000a400UL, 0x00007200UL, 0x0000c000UL,
    1630                 :                :     0x0000b700UL, 0x0000fd00UL, 0x00009300UL, 0x00002600UL, 0x00003600UL, 0x00003f00UL, 0x0000f700UL, 0x0000cc00UL,
    1631                 :                :     0x00003400UL, 0x0000a500UL, 0x0000e500UL, 0x0000f100UL, 0x00007100UL, 0x0000d800UL, 0x00003100UL, 0x00001500UL,
    1632                 :                :     0x00000400UL, 0x0000c700UL, 0x00002300UL, 0x0000c300UL, 0x00001800UL, 0x00009600UL, 0x00000500UL, 0x00009a00UL,
    1633                 :                :     0x00000700UL, 0x00001200UL, 0x00008000UL, 0x0000e200UL, 0x0000eb00UL, 0x00002700UL, 0x0000b200UL, 0x00007500UL,
    1634                 :                :     0x00000900UL, 0x00008300UL, 0x00002c00UL, 0x00001a00UL, 0x00001b00UL, 0x00006e00UL, 0x00005a00UL, 0x0000a000UL,
    1635                 :                :     0x00005200UL, 0x00003b00UL, 0x0000d600UL, 0x0000b300UL, 0x00002900UL, 0x0000e300UL, 0x00002f00UL, 0x00008400UL,
    1636                 :                :     0x00005300UL, 0x0000d100UL, 0x00000000UL, 0x0000ed00UL, 0x00002000UL, 0x0000fc00UL, 0x0000b100UL, 0x00005b00UL,
    1637                 :                :     0x00006a00UL, 0x0000cb00UL, 0x0000be00UL, 0x00003900UL, 0x00004a00UL, 0x00004c00UL, 0x00005800UL, 0x0000cf00UL,
    1638                 :                :     0x0000d000UL, 0x0000ef00UL, 0x0000aa00UL, 0x0000fb00UL, 0x00004300UL, 0x00004d00UL, 0x00003300UL, 0x00008500UL,
    1639                 :                :     0x00004500UL, 0x0000f900UL, 0x00000200UL, 0x00007f00UL, 0x00005000UL, 0x00003c00UL, 0x00009f00UL, 0x0000a800UL,
    1640                 :                :     0x00005100UL, 0x0000a300UL, 0x00004000UL, 0x00008f00UL, 0x00009200UL, 0x00009d00UL, 0x00003800UL, 0x0000f500UL,
    1641                 :                :     0x0000bc00UL, 0x0000b600UL, 0x0000da00UL, 0x00002100UL, 0x00001000UL, 0x0000ff00UL, 0x0000f300UL, 0x0000d200UL,
    1642                 :                :     0x0000cd00UL, 0x00000c00UL, 0x00001300UL, 0x0000ec00UL, 0x00005f00UL, 0x00009700UL, 0x00004400UL, 0x00001700UL,
    1643                 :                :     0x0000c400UL, 0x0000a700UL, 0x00007e00UL, 0x00003d00UL, 0x00006400UL, 0x00005d00UL, 0x00001900UL, 0x00007300UL,
    1644                 :                :     0x00006000UL, 0x00008100UL, 0x00004f00UL, 0x0000dc00UL, 0x00002200UL, 0x00002a00UL, 0x00009000UL, 0x00008800UL,
    1645                 :                :     0x00004600UL, 0x0000ee00UL, 0x0000b800UL, 0x00001400UL, 0x0000de00UL, 0x00005e00UL, 0x00000b00UL, 0x0000db00UL,
    1646                 :                :     0x0000e000UL, 0x00003200UL, 0x00003a00UL, 0x00000a00UL, 0x00004900UL, 0x00000600UL, 0x00002400UL, 0x00005c00UL,
    1647                 :                :     0x0000c200UL, 0x0000d300UL, 0x0000ac00UL, 0x00006200UL, 0x00009100UL, 0x00009500UL, 0x0000e400UL, 0x00007900UL,
    1648                 :                :     0x0000e700UL, 0x0000c800UL, 0x00003700UL, 0x00006d00UL, 0x00008d00UL, 0x0000d500UL, 0x00004e00UL, 0x0000a900UL,
    1649                 :                :     0x00006c00UL, 0x00005600UL, 0x0000f400UL, 0x0000ea00UL, 0x00006500UL, 0x00007a00UL, 0x0000ae00UL, 0x00000800UL,
    1650                 :                :     0x0000ba00UL, 0x00007800UL, 0x00002500UL, 0x00002e00UL, 0x00001c00UL, 0x0000a600UL, 0x0000b400UL, 0x0000c600UL,
    1651                 :                :     0x0000e800UL, 0x0000dd00UL, 0x00007400UL, 0x00001f00UL, 0x00004b00UL, 0x0000bd00UL, 0x00008b00UL, 0x00008a00UL,
    1652                 :                :     0x00007000UL, 0x00003e00UL, 0x0000b500UL, 0x00006600UL, 0x00004800UL, 0x00000300UL, 0x0000f600UL, 0x00000e00UL,
    1653                 :                :     0x00006100UL, 0x00003500UL, 0x00005700UL, 0x0000b900UL, 0x00008600UL, 0x0000c100UL, 0x00001d00UL, 0x00009e00UL,
    1654                 :                :     0x0000e100UL, 0x0000f800UL, 0x00009800UL, 0x00001100UL, 0x00006900UL, 0x0000d900UL, 0x00008e00UL, 0x00009400UL,
    1655                 :                :     0x00009b00UL, 0x00001e00UL, 0x00008700UL, 0x0000e900UL, 0x0000ce00UL, 0x00005500UL, 0x00002800UL, 0x0000df00UL,
    1656                 :                :     0x00008c00UL, 0x0000a100UL, 0x00008900UL, 0x00000d00UL, 0x0000bf00UL, 0x0000e600UL, 0x00004200UL, 0x00006800UL,
    1657                 :                :     0x00004100UL, 0x00009900UL, 0x00002d00UL, 0x00000f00UL, 0x0000b000UL, 0x00005400UL, 0x0000bb00UL, 0x00001600UL};
    1658                 :                : 
    1659                 :                : static const std::uint32_t Te4_2[] = {
    1660                 :                :     0x00630000UL, 0x007c0000UL, 0x00770000UL, 0x007b0000UL, 0x00f20000UL, 0x006b0000UL, 0x006f0000UL, 0x00c50000UL,
    1661                 :                :     0x00300000UL, 0x00010000UL, 0x00670000UL, 0x002b0000UL, 0x00fe0000UL, 0x00d70000UL, 0x00ab0000UL, 0x00760000UL,
    1662                 :                :     0x00ca0000UL, 0x00820000UL, 0x00c90000UL, 0x007d0000UL, 0x00fa0000UL, 0x00590000UL, 0x00470000UL, 0x00f00000UL,
    1663                 :                :     0x00ad0000UL, 0x00d40000UL, 0x00a20000UL, 0x00af0000UL, 0x009c0000UL, 0x00a40000UL, 0x00720000UL, 0x00c00000UL,
    1664                 :                :     0x00b70000UL, 0x00fd0000UL, 0x00930000UL, 0x00260000UL, 0x00360000UL, 0x003f0000UL, 0x00f70000UL, 0x00cc0000UL,
    1665                 :                :     0x00340000UL, 0x00a50000UL, 0x00e50000UL, 0x00f10000UL, 0x00710000UL, 0x00d80000UL, 0x00310000UL, 0x00150000UL,
    1666                 :                :     0x00040000UL, 0x00c70000UL, 0x00230000UL, 0x00c30000UL, 0x00180000UL, 0x00960000UL, 0x00050000UL, 0x009a0000UL,
    1667                 :                :     0x00070000UL, 0x00120000UL, 0x00800000UL, 0x00e20000UL, 0x00eb0000UL, 0x00270000UL, 0x00b20000UL, 0x00750000UL,
    1668                 :                :     0x00090000UL, 0x00830000UL, 0x002c0000UL, 0x001a0000UL, 0x001b0000UL, 0x006e0000UL, 0x005a0000UL, 0x00a00000UL,
    1669                 :                :     0x00520000UL, 0x003b0000UL, 0x00d60000UL, 0x00b30000UL, 0x00290000UL, 0x00e30000UL, 0x002f0000UL, 0x00840000UL,
    1670                 :                :     0x00530000UL, 0x00d10000UL, 0x00000000UL, 0x00ed0000UL, 0x00200000UL, 0x00fc0000UL, 0x00b10000UL, 0x005b0000UL,
    1671                 :                :     0x006a0000UL, 0x00cb0000UL, 0x00be0000UL, 0x00390000UL, 0x004a0000UL, 0x004c0000UL, 0x00580000UL, 0x00cf0000UL,
    1672                 :                :     0x00d00000UL, 0x00ef0000UL, 0x00aa0000UL, 0x00fb0000UL, 0x00430000UL, 0x004d0000UL, 0x00330000UL, 0x00850000UL,
    1673                 :                :     0x00450000UL, 0x00f90000UL, 0x00020000UL, 0x007f0000UL, 0x00500000UL, 0x003c0000UL, 0x009f0000UL, 0x00a80000UL,
    1674                 :                :     0x00510000UL, 0x00a30000UL, 0x00400000UL, 0x008f0000UL, 0x00920000UL, 0x009d0000UL, 0x00380000UL, 0x00f50000UL,
    1675                 :                :     0x00bc0000UL, 0x00b60000UL, 0x00da0000UL, 0x00210000UL, 0x00100000UL, 0x00ff0000UL, 0x00f30000UL, 0x00d20000UL,
    1676                 :                :     0x00cd0000UL, 0x000c0000UL, 0x00130000UL, 0x00ec0000UL, 0x005f0000UL, 0x00970000UL, 0x00440000UL, 0x00170000UL,
    1677                 :                :     0x00c40000UL, 0x00a70000UL, 0x007e0000UL, 0x003d0000UL, 0x00640000UL, 0x005d0000UL, 0x00190000UL, 0x00730000UL,
    1678                 :                :     0x00600000UL, 0x00810000UL, 0x004f0000UL, 0x00dc0000UL, 0x00220000UL, 0x002a0000UL, 0x00900000UL, 0x00880000UL,
    1679                 :                :     0x00460000UL, 0x00ee0000UL, 0x00b80000UL, 0x00140000UL, 0x00de0000UL, 0x005e0000UL, 0x000b0000UL, 0x00db0000UL,
    1680                 :                :     0x00e00000UL, 0x00320000UL, 0x003a0000UL, 0x000a0000UL, 0x00490000UL, 0x00060000UL, 0x00240000UL, 0x005c0000UL,
    1681                 :                :     0x00c20000UL, 0x00d30000UL, 0x00ac0000UL, 0x00620000UL, 0x00910000UL, 0x00950000UL, 0x00e40000UL, 0x00790000UL,
    1682                 :                :     0x00e70000UL, 0x00c80000UL, 0x00370000UL, 0x006d0000UL, 0x008d0000UL, 0x00d50000UL, 0x004e0000UL, 0x00a90000UL,
    1683                 :                :     0x006c0000UL, 0x00560000UL, 0x00f40000UL, 0x00ea0000UL, 0x00650000UL, 0x007a0000UL, 0x00ae0000UL, 0x00080000UL,
    1684                 :                :     0x00ba0000UL, 0x00780000UL, 0x00250000UL, 0x002e0000UL, 0x001c0000UL, 0x00a60000UL, 0x00b40000UL, 0x00c60000UL,
    1685                 :                :     0x00e80000UL, 0x00dd0000UL, 0x00740000UL, 0x001f0000UL, 0x004b0000UL, 0x00bd0000UL, 0x008b0000UL, 0x008a0000UL,
    1686                 :                :     0x00700000UL, 0x003e0000UL, 0x00b50000UL, 0x00660000UL, 0x00480000UL, 0x00030000UL, 0x00f60000UL, 0x000e0000UL,
    1687                 :                :     0x00610000UL, 0x00350000UL, 0x00570000UL, 0x00b90000UL, 0x00860000UL, 0x00c10000UL, 0x001d0000UL, 0x009e0000UL,
    1688                 :                :     0x00e10000UL, 0x00f80000UL, 0x00980000UL, 0x00110000UL, 0x00690000UL, 0x00d90000UL, 0x008e0000UL, 0x00940000UL,
    1689                 :                :     0x009b0000UL, 0x001e0000UL, 0x00870000UL, 0x00e90000UL, 0x00ce0000UL, 0x00550000UL, 0x00280000UL, 0x00df0000UL,
    1690                 :                :     0x008c0000UL, 0x00a10000UL, 0x00890000UL, 0x000d0000UL, 0x00bf0000UL, 0x00e60000UL, 0x00420000UL, 0x00680000UL,
    1691                 :                :     0x00410000UL, 0x00990000UL, 0x002d0000UL, 0x000f0000UL, 0x00b00000UL, 0x00540000UL, 0x00bb0000UL, 0x00160000UL};
    1692                 :                : 
    1693                 :                : static const std::uint32_t Te4_3[] = {
    1694                 :                :     0x63000000UL, 0x7c000000UL, 0x77000000UL, 0x7b000000UL, 0xf2000000UL, 0x6b000000UL, 0x6f000000UL, 0xc5000000UL,
    1695                 :                :     0x30000000UL, 0x01000000UL, 0x67000000UL, 0x2b000000UL, 0xfe000000UL, 0xd7000000UL, 0xab000000UL, 0x76000000UL,
    1696                 :                :     0xca000000UL, 0x82000000UL, 0xc9000000UL, 0x7d000000UL, 0xfa000000UL, 0x59000000UL, 0x47000000UL, 0xf0000000UL,
    1697                 :                :     0xad000000UL, 0xd4000000UL, 0xa2000000UL, 0xaf000000UL, 0x9c000000UL, 0xa4000000UL, 0x72000000UL, 0xc0000000UL,
    1698                 :                :     0xb7000000UL, 0xfd000000UL, 0x93000000UL, 0x26000000UL, 0x36000000UL, 0x3f000000UL, 0xf7000000UL, 0xcc000000UL,
    1699                 :                :     0x34000000UL, 0xa5000000UL, 0xe5000000UL, 0xf1000000UL, 0x71000000UL, 0xd8000000UL, 0x31000000UL, 0x15000000UL,
    1700                 :                :     0x04000000UL, 0xc7000000UL, 0x23000000UL, 0xc3000000UL, 0x18000000UL, 0x96000000UL, 0x05000000UL, 0x9a000000UL,
    1701                 :                :     0x07000000UL, 0x12000000UL, 0x80000000UL, 0xe2000000UL, 0xeb000000UL, 0x27000000UL, 0xb2000000UL, 0x75000000UL,
    1702                 :                :     0x09000000UL, 0x83000000UL, 0x2c000000UL, 0x1a000000UL, 0x1b000000UL, 0x6e000000UL, 0x5a000000UL, 0xa0000000UL,
    1703                 :                :     0x52000000UL, 0x3b000000UL, 0xd6000000UL, 0xb3000000UL, 0x29000000UL, 0xe3000000UL, 0x2f000000UL, 0x84000000UL,
    1704                 :                :     0x53000000UL, 0xd1000000UL, 0x00000000UL, 0xed000000UL, 0x20000000UL, 0xfc000000UL, 0xb1000000UL, 0x5b000000UL,
    1705                 :                :     0x6a000000UL, 0xcb000000UL, 0xbe000000UL, 0x39000000UL, 0x4a000000UL, 0x4c000000UL, 0x58000000UL, 0xcf000000UL,
    1706                 :                :     0xd0000000UL, 0xef000000UL, 0xaa000000UL, 0xfb000000UL, 0x43000000UL, 0x4d000000UL, 0x33000000UL, 0x85000000UL,
    1707                 :                :     0x45000000UL, 0xf9000000UL, 0x02000000UL, 0x7f000000UL, 0x50000000UL, 0x3c000000UL, 0x9f000000UL, 0xa8000000UL,
    1708                 :                :     0x51000000UL, 0xa3000000UL, 0x40000000UL, 0x8f000000UL, 0x92000000UL, 0x9d000000UL, 0x38000000UL, 0xf5000000UL,
    1709                 :                :     0xbc000000UL, 0xb6000000UL, 0xda000000UL, 0x21000000UL, 0x10000000UL, 0xff000000UL, 0xf3000000UL, 0xd2000000UL,
    1710                 :                :     0xcd000000UL, 0x0c000000UL, 0x13000000UL, 0xec000000UL, 0x5f000000UL, 0x97000000UL, 0x44000000UL, 0x17000000UL,
    1711                 :                :     0xc4000000UL, 0xa7000000UL, 0x7e000000UL, 0x3d000000UL, 0x64000000UL, 0x5d000000UL, 0x19000000UL, 0x73000000UL,
    1712                 :                :     0x60000000UL, 0x81000000UL, 0x4f000000UL, 0xdc000000UL, 0x22000000UL, 0x2a000000UL, 0x90000000UL, 0x88000000UL,
    1713                 :                :     0x46000000UL, 0xee000000UL, 0xb8000000UL, 0x14000000UL, 0xde000000UL, 0x5e000000UL, 0x0b000000UL, 0xdb000000UL,
    1714                 :                :     0xe0000000UL, 0x32000000UL, 0x3a000000UL, 0x0a000000UL, 0x49000000UL, 0x06000000UL, 0x24000000UL, 0x5c000000UL,
    1715                 :                :     0xc2000000UL, 0xd3000000UL, 0xac000000UL, 0x62000000UL, 0x91000000UL, 0x95000000UL, 0xe4000000UL, 0x79000000UL,
    1716                 :                :     0xe7000000UL, 0xc8000000UL, 0x37000000UL, 0x6d000000UL, 0x8d000000UL, 0xd5000000UL, 0x4e000000UL, 0xa9000000UL,
    1717                 :                :     0x6c000000UL, 0x56000000UL, 0xf4000000UL, 0xea000000UL, 0x65000000UL, 0x7a000000UL, 0xae000000UL, 0x08000000UL,
    1718                 :                :     0xba000000UL, 0x78000000UL, 0x25000000UL, 0x2e000000UL, 0x1c000000UL, 0xa6000000UL, 0xb4000000UL, 0xc6000000UL,
    1719                 :                :     0xe8000000UL, 0xdd000000UL, 0x74000000UL, 0x1f000000UL, 0x4b000000UL, 0xbd000000UL, 0x8b000000UL, 0x8a000000UL,
    1720                 :                :     0x70000000UL, 0x3e000000UL, 0xb5000000UL, 0x66000000UL, 0x48000000UL, 0x03000000UL, 0xf6000000UL, 0x0e000000UL,
    1721                 :                :     0x61000000UL, 0x35000000UL, 0x57000000UL, 0xb9000000UL, 0x86000000UL, 0xc1000000UL, 0x1d000000UL, 0x9e000000UL,
    1722                 :                :     0xe1000000UL, 0xf8000000UL, 0x98000000UL, 0x11000000UL, 0x69000000UL, 0xd9000000UL, 0x8e000000UL, 0x94000000UL,
    1723                 :                :     0x9b000000UL, 0x1e000000UL, 0x87000000UL, 0xe9000000UL, 0xce000000UL, 0x55000000UL, 0x28000000UL, 0xdf000000UL,
    1724                 :                :     0x8c000000UL, 0xa1000000UL, 0x89000000UL, 0x0d000000UL, 0xbf000000UL, 0xe6000000UL, 0x42000000UL, 0x68000000UL,
    1725                 :                :     0x41000000UL, 0x99000000UL, 0x2d000000UL, 0x0f000000UL, 0xb0000000UL, 0x54000000UL, 0xbb000000UL, 0x16000000UL};
    1726                 :                : 
    1727                 :                : static const std::uint32_t TD1[256] = {
    1728                 :                :     0x5051f4a7UL,
    1729                 :                :     0x537e4165UL,
    1730                 :                :     0xc31a17a4UL,
    1731                 :                :     0x963a275eUL,
    1732                 :                :     0xcb3bab6bUL,
    1733                 :                :     0xf11f9d45UL,
    1734                 :                :     0xabacfa58UL,
    1735                 :                :     0x934be303UL,
    1736                 :                :     0x552030faUL,
    1737                 :                :     0xf6ad766dUL,
    1738                 :                :     0x9188cc76UL,
    1739                 :                :     0x25f5024cUL,
    1740                 :                :     0xfc4fe5d7UL,
    1741                 :                :     0xd7c52acbUL,
    1742                 :                :     0x80263544UL,
    1743                 :                :     0x8fb562a3UL,
    1744                 :                :     0x49deb15aUL,
    1745                 :                :     0x6725ba1bUL,
    1746                 :                :     0x9845ea0eUL,
    1747                 :                :     0xe15dfec0UL,
    1748                 :                :     0x02c32f75UL,
    1749                 :                :     0x12814cf0UL,
    1750                 :                :     0xa38d4697UL,
    1751                 :                :     0xc66bd3f9UL,
    1752                 :                :     0xe7038f5fUL,
    1753                 :                :     0x9515929cUL,
    1754                 :                :     0xebbf6d7aUL,
    1755                 :                :     0xda955259UL,
    1756                 :                :     0x2dd4be83UL,
    1757                 :                :     0xd3587421UL,
    1758                 :                :     0x2949e069UL,
    1759                 :                :     0x448ec9c8UL,
    1760                 :                :     0x6a75c289UL,
    1761                 :                :     0x78f48e79UL,
    1762                 :                :     0x6b99583eUL,
    1763                 :                :     0xdd27b971UL,
    1764                 :                :     0xb6bee14fUL,
    1765                 :                :     0x17f088adUL,
    1766                 :                :     0x66c920acUL,
    1767                 :                :     0xb47dce3aUL,
    1768                 :                :     0x1863df4aUL,
    1769                 :                :     0x82e51a31UL,
    1770                 :                :     0x60975133UL,
    1771                 :                :     0x4562537fUL,
    1772                 :                :     0xe0b16477UL,
    1773                 :                :     0x84bb6baeUL,
    1774                 :                :     0x1cfe81a0UL,
    1775                 :                :     0x94f9082bUL,
    1776                 :                :     0x58704868UL,
    1777                 :                :     0x198f45fdUL,
    1778                 :                :     0x8794de6cUL,
    1779                 :                :     0xb7527bf8UL,
    1780                 :                :     0x23ab73d3UL,
    1781                 :                :     0xe2724b02UL,
    1782                 :                :     0x57e31f8fUL,
    1783                 :                :     0x2a6655abUL,
    1784                 :                :     0x07b2eb28UL,
    1785                 :                :     0x032fb5c2UL,
    1786                 :                :     0x9a86c57bUL,
    1787                 :                :     0xa5d33708UL,
    1788                 :                :     0xf2302887UL,
    1789                 :                :     0xb223bfa5UL,
    1790                 :                :     0xba02036aUL,
    1791                 :                :     0x5ced1682UL,
    1792                 :                :     0x2b8acf1cUL,
    1793                 :                :     0x92a779b4UL,
    1794                 :                :     0xf0f307f2UL,
    1795                 :                :     0xa14e69e2UL,
    1796                 :                :     0xcd65daf4UL,
    1797                 :                :     0xd50605beUL,
    1798                 :                :     0x1fd13462UL,
    1799                 :                :     0x8ac4a6feUL,
    1800                 :                :     0x9d342e53UL,
    1801                 :                :     0xa0a2f355UL,
    1802                 :                :     0x32058ae1UL,
    1803                 :                :     0x75a4f6ebUL,
    1804                 :                :     0x390b83ecUL,
    1805                 :                :     0xaa4060efUL,
    1806                 :                :     0x065e719fUL,
    1807                 :                :     0x51bd6e10UL,
    1808                 :                :     0xf93e218aUL,
    1809                 :                :     0x3d96dd06UL,
    1810                 :                :     0xaedd3e05UL,
    1811                 :                :     0x464de6bdUL,
    1812                 :                :     0xb591548dUL,
    1813                 :                :     0x0571c45dUL,
    1814                 :                :     0x6f0406d4UL,
    1815                 :                :     0xff605015UL,
    1816                 :                :     0x241998fbUL,
    1817                 :                :     0x97d6bde9UL,
    1818                 :                :     0xcc894043UL,
    1819                 :                :     0x7767d99eUL,
    1820                 :                :     0xbdb0e842UL,
    1821                 :                :     0x8807898bUL,
    1822                 :                :     0x38e7195bUL,
    1823                 :                :     0xdb79c8eeUL,
    1824                 :                :     0x47a17c0aUL,
    1825                 :                :     0xe97c420fUL,
    1826                 :                :     0xc9f8841eUL,
    1827                 :                :     0x00000000UL,
    1828                 :                :     0x83098086UL,
    1829                 :                :     0x48322bedUL,
    1830                 :                :     0xac1e1170UL,
    1831                 :                :     0x4e6c5a72UL,
    1832                 :                :     0xfbfd0effUL,
    1833                 :                :     0x560f8538UL,
    1834                 :                :     0x1e3daed5UL,
    1835                 :                :     0x27362d39UL,
    1836                 :                :     0x640a0fd9UL,
    1837                 :                :     0x21685ca6UL,
    1838                 :                :     0xd19b5b54UL,
    1839                 :                :     0x3a24362eUL,
    1840                 :                :     0xb10c0a67UL,
    1841                 :                :     0x0f9357e7UL,
    1842                 :                :     0xd2b4ee96UL,
    1843                 :                :     0x9e1b9b91UL,
    1844                 :                :     0x4f80c0c5UL,
    1845                 :                :     0xa261dc20UL,
    1846                 :                :     0x695a774bUL,
    1847                 :                :     0x161c121aUL,
    1848                 :                :     0x0ae293baUL,
    1849                 :                :     0xe5c0a02aUL,
    1850                 :                :     0x433c22e0UL,
    1851                 :                :     0x1d121b17UL,
    1852                 :                :     0x0b0e090dUL,
    1853                 :                :     0xadf28bc7UL,
    1854                 :                :     0xb92db6a8UL,
    1855                 :                :     0xc8141ea9UL,
    1856                 :                :     0x8557f119UL,
    1857                 :                :     0x4caf7507UL,
    1858                 :                :     0xbbee99ddUL,
    1859                 :                :     0xfda37f60UL,
    1860                 :                :     0x9ff70126UL,
    1861                 :                :     0xbc5c72f5UL,
    1862                 :                :     0xc544663bUL,
    1863                 :                :     0x345bfb7eUL,
    1864                 :                :     0x768b4329UL,
    1865                 :                :     0xdccb23c6UL,
    1866                 :                :     0x68b6edfcUL,
    1867                 :                :     0x63b8e4f1UL,
    1868                 :                :     0xcad731dcUL,
    1869                 :                :     0x10426385UL,
    1870                 :                :     0x40139722UL,
    1871                 :                :     0x2084c611UL,
    1872                 :                :     0x7d854a24UL,
    1873                 :                :     0xf8d2bb3dUL,
    1874                 :                :     0x11aef932UL,
    1875                 :                :     0x6dc729a1UL,
    1876                 :                :     0x4b1d9e2fUL,
    1877                 :                :     0xf3dcb230UL,
    1878                 :                :     0xec0d8652UL,
    1879                 :                :     0xd077c1e3UL,
    1880                 :                :     0x6c2bb316UL,
    1881                 :                :     0x99a970b9UL,
    1882                 :                :     0xfa119448UL,
    1883                 :                :     0x2247e964UL,
    1884                 :                :     0xc4a8fc8cUL,
    1885                 :                :     0x1aa0f03fUL,
    1886                 :                :     0xd8567d2cUL,
    1887                 :                :     0xef223390UL,
    1888                 :                :     0xc787494eUL,
    1889                 :                :     0xc1d938d1UL,
    1890                 :                :     0xfe8ccaa2UL,
    1891                 :                :     0x3698d40bUL,
    1892                 :                :     0xcfa6f581UL,
    1893                 :                :     0x28a57adeUL,
    1894                 :                :     0x26dab78eUL,
    1895                 :                :     0xa43fadbfUL,
    1896                 :                :     0xe42c3a9dUL,
    1897                 :                :     0x0d507892UL,
    1898                 :                :     0x9b6a5fccUL,
    1899                 :                :     0x62547e46UL,
    1900                 :                :     0xc2f68d13UL,
    1901                 :                :     0xe890d8b8UL,
    1902                 :                :     0x5e2e39f7UL,
    1903                 :                :     0xf582c3afUL,
    1904                 :                :     0xbe9f5d80UL,
    1905                 :                :     0x7c69d093UL,
    1906                 :                :     0xa96fd52dUL,
    1907                 :                :     0xb3cf2512UL,
    1908                 :                :     0x3bc8ac99UL,
    1909                 :                :     0xa710187dUL,
    1910                 :                :     0x6ee89c63UL,
    1911                 :                :     0x7bdb3bbbUL,
    1912                 :                :     0x09cd2678UL,
    1913                 :                :     0xf46e5918UL,
    1914                 :                :     0x01ec9ab7UL,
    1915                 :                :     0xa8834f9aUL,
    1916                 :                :     0x65e6956eUL,
    1917                 :                :     0x7eaaffe6UL,
    1918                 :                :     0x0821bccfUL,
    1919                 :                :     0xe6ef15e8UL,
    1920                 :                :     0xd9bae79bUL,
    1921                 :                :     0xce4a6f36UL,
    1922                 :                :     0xd4ea9f09UL,
    1923                 :                :     0xd629b07cUL,
    1924                 :                :     0xaf31a4b2UL,
    1925                 :                :     0x312a3f23UL,
    1926                 :                :     0x30c6a594UL,
    1927                 :                :     0xc035a266UL,
    1928                 :                :     0x37744ebcUL,
    1929                 :                :     0xa6fc82caUL,
    1930                 :                :     0xb0e090d0UL,
    1931                 :                :     0x1533a7d8UL,
    1932                 :                :     0x4af10498UL,
    1933                 :                :     0xf741ecdaUL,
    1934                 :                :     0x0e7fcd50UL,
    1935                 :                :     0x2f1791f6UL,
    1936                 :                :     0x8d764dd6UL,
    1937                 :                :     0x4d43efb0UL,
    1938                 :                :     0x54ccaa4dUL,
    1939                 :                :     0xdfe49604UL,
    1940                 :                :     0xe39ed1b5UL,
    1941                 :                :     0x1b4c6a88UL,
    1942                 :                :     0xb8c12c1fUL,
    1943                 :                :     0x7f466551UL,
    1944                 :                :     0x049d5eeaUL,
    1945                 :                :     0x5d018c35UL,
    1946                 :                :     0x73fa8774UL,
    1947                 :                :     0x2efb0b41UL,
    1948                 :                :     0x5ab3671dUL,
    1949                 :                :     0x5292dbd2UL,
    1950                 :                :     0x33e91056UL,
    1951                 :                :     0x136dd647UL,
    1952                 :                :     0x8c9ad761UL,
    1953                 :                :     0x7a37a10cUL,
    1954                 :                :     0x8e59f814UL,
    1955                 :                :     0x89eb133cUL,
    1956                 :                :     0xeecea927UL,
    1957                 :                :     0x35b761c9UL,
    1958                 :                :     0xede11ce5UL,
    1959                 :                :     0x3c7a47b1UL,
    1960                 :                :     0x599cd2dfUL,
    1961                 :                :     0x3f55f273UL,
    1962                 :                :     0x791814ceUL,
    1963                 :                :     0xbf73c737UL,
    1964                 :                :     0xea53f7cdUL,
    1965                 :                :     0x5b5ffdaaUL,
    1966                 :                :     0x14df3d6fUL,
    1967                 :                :     0x867844dbUL,
    1968                 :                :     0x81caaff3UL,
    1969                 :                :     0x3eb968c4UL,
    1970                 :                :     0x2c382434UL,
    1971                 :                :     0x5fc2a340UL,
    1972                 :                :     0x72161dc3UL,
    1973                 :                :     0x0cbce225UL,
    1974                 :                :     0x8b283c49UL,
    1975                 :                :     0x41ff0d95UL,
    1976                 :                :     0x7139a801UL,
    1977                 :                :     0xde080cb3UL,
    1978                 :                :     0x9cd8b4e4UL,
    1979                 :                :     0x906456c1UL,
    1980                 :                :     0x617bcb84UL,
    1981                 :                :     0x70d532b6UL,
    1982                 :                :     0x74486c5cUL,
    1983                 :                :     0x42d0b857UL,
    1984                 :                : };
    1985                 :                : static const std::uint32_t TD2[256] = {
    1986                 :                :     0xa75051f4UL,
    1987                 :                :     0x65537e41UL,
    1988                 :                :     0xa4c31a17UL,
    1989                 :                :     0x5e963a27UL,
    1990                 :                :     0x6bcb3babUL,
    1991                 :                :     0x45f11f9dUL,
    1992                 :                :     0x58abacfaUL,
    1993                 :                :     0x03934be3UL,
    1994                 :                :     0xfa552030UL,
    1995                 :                :     0x6df6ad76UL,
    1996                 :                :     0x769188ccUL,
    1997                 :                :     0x4c25f502UL,
    1998                 :                :     0xd7fc4fe5UL,
    1999                 :                :     0xcbd7c52aUL,
    2000                 :                :     0x44802635UL,
    2001                 :                :     0xa38fb562UL,
    2002                 :                :     0x5a49deb1UL,
    2003                 :                :     0x1b6725baUL,
    2004                 :                :     0x0e9845eaUL,
    2005                 :                :     0xc0e15dfeUL,
    2006                 :                :     0x7502c32fUL,
    2007                 :                :     0xf012814cUL,
    2008                 :                :     0x97a38d46UL,
    2009                 :                :     0xf9c66bd3UL,
    2010                 :                :     0x5fe7038fUL,
    2011                 :                :     0x9c951592UL,
    2012                 :                :     0x7aebbf6dUL,
    2013                 :                :     0x59da9552UL,
    2014                 :                :     0x832dd4beUL,
    2015                 :                :     0x21d35874UL,
    2016                 :                :     0x692949e0UL,
    2017                 :                :     0xc8448ec9UL,
    2018                 :                :     0x896a75c2UL,
    2019                 :                :     0x7978f48eUL,
    2020                 :                :     0x3e6b9958UL,
    2021                 :                :     0x71dd27b9UL,
    2022                 :                :     0x4fb6bee1UL,
    2023                 :                :     0xad17f088UL,
    2024                 :                :     0xac66c920UL,
    2025                 :                :     0x3ab47dceUL,
    2026                 :                :     0x4a1863dfUL,
    2027                 :                :     0x3182e51aUL,
    2028                 :                :     0x33609751UL,
    2029                 :                :     0x7f456253UL,
    2030                 :                :     0x77e0b164UL,
    2031                 :                :     0xae84bb6bUL,
    2032                 :                :     0xa01cfe81UL,
    2033                 :                :     0x2b94f908UL,
    2034                 :                :     0x68587048UL,
    2035                 :                :     0xfd198f45UL,
    2036                 :                :     0x6c8794deUL,
    2037                 :                :     0xf8b7527bUL,
    2038                 :                :     0xd323ab73UL,
    2039                 :                :     0x02e2724bUL,
    2040                 :                :     0x8f57e31fUL,
    2041                 :                :     0xab2a6655UL,
    2042                 :                :     0x2807b2ebUL,
    2043                 :                :     0xc2032fb5UL,
    2044                 :                :     0x7b9a86c5UL,
    2045                 :                :     0x08a5d337UL,
    2046                 :                :     0x87f23028UL,
    2047                 :                :     0xa5b223bfUL,
    2048                 :                :     0x6aba0203UL,
    2049                 :                :     0x825ced16UL,
    2050                 :                :     0x1c2b8acfUL,
    2051                 :                :     0xb492a779UL,
    2052                 :                :     0xf2f0f307UL,
    2053                 :                :     0xe2a14e69UL,
    2054                 :                :     0xf4cd65daUL,
    2055                 :                :     0xbed50605UL,
    2056                 :                :     0x621fd134UL,
    2057                 :                :     0xfe8ac4a6UL,
    2058                 :                :     0x539d342eUL,
    2059                 :                :     0x55a0a2f3UL,
    2060                 :                :     0xe132058aUL,
    2061                 :                :     0xeb75a4f6UL,
    2062                 :                :     0xec390b83UL,
    2063                 :                :     0xefaa4060UL,
    2064                 :                :     0x9f065e71UL,
    2065                 :                :     0x1051bd6eUL,
    2066                 :                :     0x8af93e21UL,
    2067                 :                :     0x063d96ddUL,
    2068                 :                :     0x05aedd3eUL,
    2069                 :                :     0xbd464de6UL,
    2070                 :                :     0x8db59154UL,
    2071                 :                :     0x5d0571c4UL,
    2072                 :                :     0xd46f0406UL,
    2073                 :                :     0x15ff6050UL,
    2074                 :                :     0xfb241998UL,
    2075                 :                :     0xe997d6bdUL,
    2076                 :                :     0x43cc8940UL,
    2077                 :                :     0x9e7767d9UL,
    2078                 :                :     0x42bdb0e8UL,
    2079                 :                :     0x8b880789UL,
    2080                 :                :     0x5b38e719UL,
    2081                 :                :     0xeedb79c8UL,
    2082                 :                :     0x0a47a17cUL,
    2083                 :                :     0x0fe97c42UL,
    2084                 :                :     0x1ec9f884UL,
    2085                 :                :     0x00000000UL,
    2086                 :                :     0x86830980UL,
    2087                 :                :     0xed48322bUL,
    2088                 :                :     0x70ac1e11UL,
    2089                 :                :     0x724e6c5aUL,
    2090                 :                :     0xfffbfd0eUL,
    2091                 :                :     0x38560f85UL,
    2092                 :                :     0xd51e3daeUL,
    2093                 :                :     0x3927362dUL,
    2094                 :                :     0xd9640a0fUL,
    2095                 :                :     0xa621685cUL,
    2096                 :                :     0x54d19b5bUL,
    2097                 :                :     0x2e3a2436UL,
    2098                 :                :     0x67b10c0aUL,
    2099                 :                :     0xe70f9357UL,
    2100                 :                :     0x96d2b4eeUL,
    2101                 :                :     0x919e1b9bUL,
    2102                 :                :     0xc54f80c0UL,
    2103                 :                :     0x20a261dcUL,
    2104                 :                :     0x4b695a77UL,
    2105                 :                :     0x1a161c12UL,
    2106                 :                :     0xba0ae293UL,
    2107                 :                :     0x2ae5c0a0UL,
    2108                 :                :     0xe0433c22UL,
    2109                 :                :     0x171d121bUL,
    2110                 :                :     0x0d0b0e09UL,
    2111                 :                :     0xc7adf28bUL,
    2112                 :                :     0xa8b92db6UL,
    2113                 :                :     0xa9c8141eUL,
    2114                 :                :     0x198557f1UL,
    2115                 :                :     0x074caf75UL,
    2116                 :                :     0xddbbee99UL,
    2117                 :                :     0x60fda37fUL,
    2118                 :                :     0x269ff701UL,
    2119                 :                :     0xf5bc5c72UL,
    2120                 :                :     0x3bc54466UL,
    2121                 :                :     0x7e345bfbUL,
    2122                 :                :     0x29768b43UL,
    2123                 :                :     0xc6dccb23UL,
    2124                 :                :     0xfc68b6edUL,
    2125                 :                :     0xf163b8e4UL,
    2126                 :                :     0xdccad731UL,
    2127                 :                :     0x85104263UL,
    2128                 :                :     0x22401397UL,
    2129                 :                :     0x112084c6UL,
    2130                 :                :     0x247d854aUL,
    2131                 :                :     0x3df8d2bbUL,
    2132                 :                :     0x3211aef9UL,
    2133                 :                :     0xa16dc729UL,
    2134                 :                :     0x2f4b1d9eUL,
    2135                 :                :     0x30f3dcb2UL,
    2136                 :                :     0x52ec0d86UL,
    2137                 :                :     0xe3d077c1UL,
    2138                 :                :     0x166c2bb3UL,
    2139                 :                :     0xb999a970UL,
    2140                 :                :     0x48fa1194UL,
    2141                 :                :     0x642247e9UL,
    2142                 :                :     0x8cc4a8fcUL,
    2143                 :                :     0x3f1aa0f0UL,
    2144                 :                :     0x2cd8567dUL,
    2145                 :                :     0x90ef2233UL,
    2146                 :                :     0x4ec78749UL,
    2147                 :                :     0xd1c1d938UL,
    2148                 :                :     0xa2fe8ccaUL,
    2149                 :                :     0x0b3698d4UL,
    2150                 :                :     0x81cfa6f5UL,
    2151                 :                :     0xde28a57aUL,
    2152                 :                :     0x8e26dab7UL,
    2153                 :                :     0xbfa43fadUL,
    2154                 :                :     0x9de42c3aUL,
    2155                 :                :     0x920d5078UL,
    2156                 :                :     0xcc9b6a5fUL,
    2157                 :                :     0x4662547eUL,
    2158                 :                :     0x13c2f68dUL,
    2159                 :                :     0xb8e890d8UL,
    2160                 :                :     0xf75e2e39UL,
    2161                 :                :     0xaff582c3UL,
    2162                 :                :     0x80be9f5dUL,
    2163                 :                :     0x937c69d0UL,
    2164                 :                :     0x2da96fd5UL,
    2165                 :                :     0x12b3cf25UL,
    2166                 :                :     0x993bc8acUL,
    2167                 :                :     0x7da71018UL,
    2168                 :                :     0x636ee89cUL,
    2169                 :                :     0xbb7bdb3bUL,
    2170                 :                :     0x7809cd26UL,
    2171                 :                :     0x18f46e59UL,
    2172                 :                :     0xb701ec9aUL,
    2173                 :                :     0x9aa8834fUL,
    2174                 :                :     0x6e65e695UL,
    2175                 :                :     0xe67eaaffUL,
    2176                 :                :     0xcf0821bcUL,
    2177                 :                :     0xe8e6ef15UL,
    2178                 :                :     0x9bd9bae7UL,
    2179                 :                :     0x36ce4a6fUL,
    2180                 :                :     0x09d4ea9fUL,
    2181                 :                :     0x7cd629b0UL,
    2182                 :                :     0xb2af31a4UL,
    2183                 :                :     0x23312a3fUL,
    2184                 :                :     0x9430c6a5UL,
    2185                 :                :     0x66c035a2UL,
    2186                 :                :     0xbc37744eUL,
    2187                 :                :     0xcaa6fc82UL,
    2188                 :                :     0xd0b0e090UL,
    2189                 :                :     0xd81533a7UL,
    2190                 :                :     0x984af104UL,
    2191                 :                :     0xdaf741ecUL,
    2192                 :                :     0x500e7fcdUL,
    2193                 :                :     0xf62f1791UL,
    2194                 :                :     0xd68d764dUL,
    2195                 :                :     0xb04d43efUL,
    2196                 :                :     0x4d54ccaaUL,
    2197                 :                :     0x04dfe496UL,
    2198                 :                :     0xb5e39ed1UL,
    2199                 :                :     0x881b4c6aUL,
    2200                 :                :     0x1fb8c12cUL,
    2201                 :                :     0x517f4665UL,
    2202                 :                :     0xea049d5eUL,
    2203                 :                :     0x355d018cUL,
    2204                 :                :     0x7473fa87UL,
    2205                 :                :     0x412efb0bUL,
    2206                 :                :     0x1d5ab367UL,
    2207                 :                :     0xd25292dbUL,
    2208                 :                :     0x5633e910UL,
    2209                 :                :     0x47136dd6UL,
    2210                 :                :     0x618c9ad7UL,
    2211                 :                :     0x0c7a37a1UL,
    2212                 :                :     0x148e59f8UL,
    2213                 :                :     0x3c89eb13UL,
    2214                 :                :     0x27eecea9UL,
    2215                 :                :     0xc935b761UL,
    2216                 :                :     0xe5ede11cUL,
    2217                 :                :     0xb13c7a47UL,
    2218                 :                :     0xdf599cd2UL,
    2219                 :                :     0x733f55f2UL,
    2220                 :                :     0xce791814UL,
    2221                 :                :     0x37bf73c7UL,
    2222                 :                :     0xcdea53f7UL,
    2223                 :                :     0xaa5b5ffdUL,
    2224                 :                :     0x6f14df3dUL,
    2225                 :                :     0xdb867844UL,
    2226                 :                :     0xf381caafUL,
    2227                 :                :     0xc43eb968UL,
    2228                 :                :     0x342c3824UL,
    2229                 :                :     0x405fc2a3UL,
    2230                 :                :     0xc372161dUL,
    2231                 :                :     0x250cbce2UL,
    2232                 :                :     0x498b283cUL,
    2233                 :                :     0x9541ff0dUL,
    2234                 :                :     0x017139a8UL,
    2235                 :                :     0xb3de080cUL,
    2236                 :                :     0xe49cd8b4UL,
    2237                 :                :     0xc1906456UL,
    2238                 :                :     0x84617bcbUL,
    2239                 :                :     0xb670d532UL,
    2240                 :                :     0x5c74486cUL,
    2241                 :                :     0x5742d0b8UL,
    2242                 :                : };
    2243                 :                : static const std::uint32_t TD3[256] = {
    2244                 :                :     0xf4a75051UL,
    2245                 :                :     0x4165537eUL,
    2246                 :                :     0x17a4c31aUL,
    2247                 :                :     0x275e963aUL,
    2248                 :                :     0xab6bcb3bUL,
    2249                 :                :     0x9d45f11fUL,
    2250                 :                :     0xfa58abacUL,
    2251                 :                :     0xe303934bUL,
    2252                 :                :     0x30fa5520UL,
    2253                 :                :     0x766df6adUL,
    2254                 :                :     0xcc769188UL,
    2255                 :                :     0x024c25f5UL,
    2256                 :                :     0xe5d7fc4fUL,
    2257                 :                :     0x2acbd7c5UL,
    2258                 :                :     0x35448026UL,
    2259                 :                :     0x62a38fb5UL,
    2260                 :                :     0xb15a49deUL,
    2261                 :                :     0xba1b6725UL,
    2262                 :                :     0xea0e9845UL,
    2263                 :                :     0xfec0e15dUL,
    2264                 :                :     0x2f7502c3UL,
    2265                 :                :     0x4cf01281UL,
    2266                 :                :     0x4697a38dUL,
    2267                 :                :     0xd3f9c66bUL,
    2268                 :                :     0x8f5fe703UL,
    2269                 :                :     0x929c9515UL,
    2270                 :                :     0x6d7aebbfUL,
    2271                 :                :     0x5259da95UL,
    2272                 :                :     0xbe832dd4UL,
    2273                 :                :     0x7421d358UL,
    2274                 :                :     0xe0692949UL,
    2275                 :                :     0xc9c8448eUL,
    2276                 :                :     0xc2896a75UL,
    2277                 :                :     0x8e7978f4UL,
    2278                 :                :     0x583e6b99UL,
    2279                 :                :     0xb971dd27UL,
    2280                 :                :     0xe14fb6beUL,
    2281                 :                :     0x88ad17f0UL,
    2282                 :                :     0x20ac66c9UL,
    2283                 :                :     0xce3ab47dUL,
    2284                 :                :     0xdf4a1863UL,
    2285                 :                :     0x1a3182e5UL,
    2286                 :                :     0x51336097UL,
    2287                 :                :     0x537f4562UL,
    2288                 :                :     0x6477e0b1UL,
    2289                 :                :     0x6bae84bbUL,
    2290                 :                :     0x81a01cfeUL,
    2291                 :                :     0x082b94f9UL,
    2292                 :                :     0x48685870UL,
    2293                 :                :     0x45fd198fUL,
    2294                 :                :     0xde6c8794UL,
    2295                 :                :     0x7bf8b752UL,
    2296                 :                :     0x73d323abUL,
    2297                 :                :     0x4b02e272UL,
    2298                 :                :     0x1f8f57e3UL,
    2299                 :                :     0x55ab2a66UL,
    2300                 :                :     0xeb2807b2UL,
    2301                 :                :     0xb5c2032fUL,
    2302                 :                :     0xc57b9a86UL,
    2303                 :                :     0x3708a5d3UL,
    2304                 :                :     0x2887f230UL,
    2305                 :                :     0xbfa5b223UL,
    2306                 :                :     0x036aba02UL,
    2307                 :                :     0x16825cedUL,
    2308                 :                :     0xcf1c2b8aUL,
    2309                 :                :     0x79b492a7UL,
    2310                 :                :     0x07f2f0f3UL,
    2311                 :                :     0x69e2a14eUL,
    2312                 :                :     0xdaf4cd65UL,
    2313                 :                :     0x05bed506UL,
    2314                 :                :     0x34621fd1UL,
    2315                 :                :     0xa6fe8ac4UL,
    2316                 :                :     0x2e539d34UL,
    2317                 :                :     0xf355a0a2UL,
    2318                 :                :     0x8ae13205UL,
    2319                 :                :     0xf6eb75a4UL,
    2320                 :                :     0x83ec390bUL,
    2321                 :                :     0x60efaa40UL,
    2322                 :                :     0x719f065eUL,
    2323                 :                :     0x6e1051bdUL,
    2324                 :                :     0x218af93eUL,
    2325                 :                :     0xdd063d96UL,
    2326                 :                :     0x3e05aeddUL,
    2327                 :                :     0xe6bd464dUL,
    2328                 :                :     0x548db591UL,
    2329                 :                :     0xc45d0571UL,
    2330                 :                :     0x06d46f04UL,
    2331                 :                :     0x5015ff60UL,
    2332                 :                :     0x98fb2419UL,
    2333                 :                :     0xbde997d6UL,
    2334                 :                :     0x4043cc89UL,
    2335                 :                :     0xd99e7767UL,
    2336                 :                :     0xe842bdb0UL,
    2337                 :                :     0x898b8807UL,
    2338                 :                :     0x195b38e7UL,
    2339                 :                :     0xc8eedb79UL,
    2340                 :                :     0x7c0a47a1UL,
    2341                 :                :     0x420fe97cUL,
    2342                 :                :     0x841ec9f8UL,
    2343                 :                :     0x00000000UL,
    2344                 :                :     0x80868309UL,
    2345                 :                :     0x2bed4832UL,
    2346                 :                :     0x1170ac1eUL,
    2347                 :                :     0x5a724e6cUL,
    2348                 :                :     0x0efffbfdUL,
    2349                 :                :     0x8538560fUL,
    2350                 :                :     0xaed51e3dUL,
    2351                 :                :     0x2d392736UL,
    2352                 :                :     0x0fd9640aUL,
    2353                 :                :     0x5ca62168UL,
    2354                 :                :     0x5b54d19bUL,
    2355                 :                :     0x362e3a24UL,
    2356                 :                :     0x0a67b10cUL,
    2357                 :                :     0x57e70f93UL,
    2358                 :                :     0xee96d2b4UL,
    2359                 :                :     0x9b919e1bUL,
    2360                 :                :     0xc0c54f80UL,
    2361                 :                :     0xdc20a261UL,
    2362                 :                :     0x774b695aUL,
    2363                 :                :     0x121a161cUL,
    2364                 :                :     0x93ba0ae2UL,
    2365                 :                :     0xa02ae5c0UL,
    2366                 :                :     0x22e0433cUL,
    2367                 :                :     0x1b171d12UL,
    2368                 :                :     0x090d0b0eUL,
    2369                 :                :     0x8bc7adf2UL,
    2370                 :                :     0xb6a8b92dUL,
    2371                 :                :     0x1ea9c814UL,
    2372                 :                :     0xf1198557UL,
    2373                 :                :     0x75074cafUL,
    2374                 :                :     0x99ddbbeeUL,
    2375                 :                :     0x7f60fda3UL,
    2376                 :                :     0x01269ff7UL,
    2377                 :                :     0x72f5bc5cUL,
    2378                 :                :     0x663bc544UL,
    2379                 :                :     0xfb7e345bUL,
    2380                 :                :     0x4329768bUL,
    2381                 :                :     0x23c6dccbUL,
    2382                 :                :     0xedfc68b6UL,
    2383                 :                :     0xe4f163b8UL,
    2384                 :                :     0x31dccad7UL,
    2385                 :                :     0x63851042UL,
    2386                 :                :     0x97224013UL,
    2387                 :                :     0xc6112084UL,
    2388                 :                :     0x4a247d85UL,
    2389                 :                :     0xbb3df8d2UL,
    2390                 :                :     0xf93211aeUL,
    2391                 :                :     0x29a16dc7UL,
    2392                 :                :     0x9e2f4b1dUL,
    2393                 :                :     0xb230f3dcUL,
    2394                 :                :     0x8652ec0dUL,
    2395                 :                :     0xc1e3d077UL,
    2396                 :                :     0xb3166c2bUL,
    2397                 :                :     0x70b999a9UL,
    2398                 :                :     0x9448fa11UL,
    2399                 :                :     0xe9642247UL,
    2400                 :                :     0xfc8cc4a8UL,
    2401                 :                :     0xf03f1aa0UL,
    2402                 :                :     0x7d2cd856UL,
    2403                 :                :     0x3390ef22UL,
    2404                 :                :     0x494ec787UL,
    2405                 :                :     0x38d1c1d9UL,
    2406                 :                :     0xcaa2fe8cUL,
    2407                 :                :     0xd40b3698UL,
    2408                 :                :     0xf581cfa6UL,
    2409                 :                :     0x7ade28a5UL,
    2410                 :                :     0xb78e26daUL,
    2411                 :                :     0xadbfa43fUL,
    2412                 :                :     0x3a9de42cUL,
    2413                 :                :     0x78920d50UL,
    2414                 :                :     0x5fcc9b6aUL,
    2415                 :                :     0x7e466254UL,
    2416                 :                :     0x8d13c2f6UL,
    2417                 :                :     0xd8b8e890UL,
    2418                 :                :     0x39f75e2eUL,
    2419                 :                :     0xc3aff582UL,
    2420                 :                :     0x5d80be9fUL,
    2421                 :                :     0xd0937c69UL,
    2422                 :                :     0xd52da96fUL,
    2423                 :                :     0x2512b3cfUL,
    2424                 :                :     0xac993bc8UL,
    2425                 :                :     0x187da710UL,
    2426                 :                :     0x9c636ee8UL,
    2427                 :                :     0x3bbb7bdbUL,
    2428                 :                :     0x267809cdUL,
    2429                 :                :     0x5918f46eUL,
    2430                 :                :     0x9ab701ecUL,
    2431                 :                :     0x4f9aa883UL,
    2432                 :                :     0x956e65e6UL,
    2433                 :                :     0xffe67eaaUL,
    2434                 :                :     0xbccf0821UL,
    2435                 :                :     0x15e8e6efUL,
    2436                 :                :     0xe79bd9baUL,
    2437                 :                :     0x6f36ce4aUL,
    2438                 :                :     0x9f09d4eaUL,
    2439                 :                :     0xb07cd629UL,
    2440                 :                :     0xa4b2af31UL,
    2441                 :                :     0x3f23312aUL,
    2442                 :                :     0xa59430c6UL,
    2443                 :                :     0xa266c035UL,
    2444                 :                :     0x4ebc3774UL,
    2445                 :                :     0x82caa6fcUL,
    2446                 :                :     0x90d0b0e0UL,
    2447                 :                :     0xa7d81533UL,
    2448                 :                :     0x04984af1UL,
    2449                 :                :     0xecdaf741UL,
    2450                 :                :     0xcd500e7fUL,
    2451                 :                :     0x91f62f17UL,
    2452                 :                :     0x4dd68d76UL,
    2453                 :                :     0xefb04d43UL,
    2454                 :                :     0xaa4d54ccUL,
    2455                 :                :     0x9604dfe4UL,
    2456                 :                :     0xd1b5e39eUL,
    2457                 :                :     0x6a881b4cUL,
    2458                 :                :     0x2c1fb8c1UL,
    2459                 :                :     0x65517f46UL,
    2460                 :                :     0x5eea049dUL,
    2461                 :                :     0x8c355d01UL,
    2462                 :                :     0x877473faUL,
    2463                 :                :     0x0b412efbUL,
    2464                 :                :     0x671d5ab3UL,
    2465                 :                :     0xdbd25292UL,
    2466                 :                :     0x105633e9UL,
    2467                 :                :     0xd647136dUL,
    2468                 :                :     0xd7618c9aUL,
    2469                 :                :     0xa10c7a37UL,
    2470                 :                :     0xf8148e59UL,
    2471                 :                :     0x133c89ebUL,
    2472                 :                :     0xa927eeceUL,
    2473                 :                :     0x61c935b7UL,
    2474                 :                :     0x1ce5ede1UL,
    2475                 :                :     0x47b13c7aUL,
    2476                 :                :     0xd2df599cUL,
    2477                 :                :     0xf2733f55UL,
    2478                 :                :     0x14ce7918UL,
    2479                 :                :     0xc737bf73UL,
    2480                 :                :     0xf7cdea53UL,
    2481                 :                :     0xfdaa5b5fUL,
    2482                 :                :     0x3d6f14dfUL,
    2483                 :                :     0x44db8678UL,
    2484                 :                :     0xaff381caUL,
    2485                 :                :     0x68c43eb9UL,
    2486                 :                :     0x24342c38UL,
    2487                 :                :     0xa3405fc2UL,
    2488                 :                :     0x1dc37216UL,
    2489                 :                :     0xe2250cbcUL,
    2490                 :                :     0x3c498b28UL,
    2491                 :                :     0x0d9541ffUL,
    2492                 :                :     0xa8017139UL,
    2493                 :                :     0x0cb3de08UL,
    2494                 :                :     0xb4e49cd8UL,
    2495                 :                :     0x56c19064UL,
    2496                 :                :     0xcb84617bUL,
    2497                 :                :     0x32b670d5UL,
    2498                 :                :     0x6c5c7448UL,
    2499                 :                :     0xb85742d0UL,
    2500                 :                : };
    2501                 :                : 
    2502                 :                : static const std::uint32_t Tks0[] = {
    2503                 :                :     0x00000000UL, 0x0e090d0bUL, 0x1c121a16UL, 0x121b171dUL, 0x3824342cUL, 0x362d3927UL, 0x24362e3aUL, 0x2a3f2331UL,
    2504                 :                :     0x70486858UL, 0x7e416553UL, 0x6c5a724eUL, 0x62537f45UL, 0x486c5c74UL, 0x4665517fUL, 0x547e4662UL, 0x5a774b69UL,
    2505                 :                :     0xe090d0b0UL, 0xee99ddbbUL, 0xfc82caa6UL, 0xf28bc7adUL, 0xd8b4e49cUL, 0xd6bde997UL, 0xc4a6fe8aUL, 0xcaaff381UL,
    2506                 :                :     0x90d8b8e8UL, 0x9ed1b5e3UL, 0x8ccaa2feUL, 0x82c3aff5UL, 0xa8fc8cc4UL, 0xa6f581cfUL, 0xb4ee96d2UL, 0xbae79bd9UL,
    2507                 :                :     0xdb3bbb7bUL, 0xd532b670UL, 0xc729a16dUL, 0xc920ac66UL, 0xe31f8f57UL, 0xed16825cUL, 0xff0d9541UL, 0xf104984aUL,
    2508                 :                :     0xab73d323UL, 0xa57ade28UL, 0xb761c935UL, 0xb968c43eUL, 0x9357e70fUL, 0x9d5eea04UL, 0x8f45fd19UL, 0x814cf012UL,
    2509                 :                :     0x3bab6bcbUL, 0x35a266c0UL, 0x27b971ddUL, 0x29b07cd6UL, 0x038f5fe7UL, 0x0d8652ecUL, 0x1f9d45f1UL, 0x119448faUL,
    2510                 :                :     0x4be30393UL, 0x45ea0e98UL, 0x57f11985UL, 0x59f8148eUL, 0x73c737bfUL, 0x7dce3ab4UL, 0x6fd52da9UL, 0x61dc20a2UL,
    2511                 :                :     0xad766df6UL, 0xa37f60fdUL, 0xb16477e0UL, 0xbf6d7aebUL, 0x955259daUL, 0x9b5b54d1UL, 0x894043ccUL, 0x87494ec7UL,
    2512                 :                :     0xdd3e05aeUL, 0xd33708a5UL, 0xc12c1fb8UL, 0xcf2512b3UL, 0xe51a3182UL, 0xeb133c89UL, 0xf9082b94UL, 0xf701269fUL,
    2513                 :                :     0x4de6bd46UL, 0x43efb04dUL, 0x51f4a750UL, 0x5ffdaa5bUL, 0x75c2896aUL, 0x7bcb8461UL, 0x69d0937cUL, 0x67d99e77UL,
    2514                 :                :     0x3daed51eUL, 0x33a7d815UL, 0x21bccf08UL, 0x2fb5c203UL, 0x058ae132UL, 0x0b83ec39UL, 0x1998fb24UL, 0x1791f62fUL,
    2515                 :                :     0x764dd68dUL, 0x7844db86UL, 0x6a5fcc9bUL, 0x6456c190UL, 0x4e69e2a1UL, 0x4060efaaUL, 0x527bf8b7UL, 0x5c72f5bcUL,
    2516                 :                :     0x0605bed5UL, 0x080cb3deUL, 0x1a17a4c3UL, 0x141ea9c8UL, 0x3e218af9UL, 0x302887f2UL, 0x223390efUL, 0x2c3a9de4UL,
    2517                 :                :     0x96dd063dUL, 0x98d40b36UL, 0x8acf1c2bUL, 0x84c61120UL, 0xaef93211UL, 0xa0f03f1aUL, 0xb2eb2807UL, 0xbce2250cUL,
    2518                 :                :     0xe6956e65UL, 0xe89c636eUL, 0xfa877473UL, 0xf48e7978UL, 0xdeb15a49UL, 0xd0b85742UL, 0xc2a3405fUL, 0xccaa4d54UL,
    2519                 :                :     0x41ecdaf7UL, 0x4fe5d7fcUL, 0x5dfec0e1UL, 0x53f7cdeaUL, 0x79c8eedbUL, 0x77c1e3d0UL, 0x65daf4cdUL, 0x6bd3f9c6UL,
    2520                 :                :     0x31a4b2afUL, 0x3fadbfa4UL, 0x2db6a8b9UL, 0x23bfa5b2UL, 0x09808683UL, 0x07898b88UL, 0x15929c95UL, 0x1b9b919eUL,
    2521                 :                :     0xa17c0a47UL, 0xaf75074cUL, 0xbd6e1051UL, 0xb3671d5aUL, 0x99583e6bUL, 0x97513360UL, 0x854a247dUL, 0x8b432976UL,
    2522                 :                :     0xd134621fUL, 0xdf3d6f14UL, 0xcd267809UL, 0xc32f7502UL, 0xe9105633UL, 0xe7195b38UL, 0xf5024c25UL, 0xfb0b412eUL,
    2523                 :                :     0x9ad7618cUL, 0x94de6c87UL, 0x86c57b9aUL, 0x88cc7691UL, 0xa2f355a0UL, 0xacfa58abUL, 0xbee14fb6UL, 0xb0e842bdUL,
    2524                 :                :     0xea9f09d4UL, 0xe49604dfUL, 0xf68d13c2UL, 0xf8841ec9UL, 0xd2bb3df8UL, 0xdcb230f3UL, 0xcea927eeUL, 0xc0a02ae5UL,
    2525                 :                :     0x7a47b13cUL, 0x744ebc37UL, 0x6655ab2aUL, 0x685ca621UL, 0x42638510UL, 0x4c6a881bUL, 0x5e719f06UL, 0x5078920dUL,
    2526                 :                :     0x0a0fd964UL, 0x0406d46fUL, 0x161dc372UL, 0x1814ce79UL, 0x322bed48UL, 0x3c22e043UL, 0x2e39f75eUL, 0x2030fa55UL,
    2527                 :                :     0xec9ab701UL, 0xe293ba0aUL, 0xf088ad17UL, 0xfe81a01cUL, 0xd4be832dUL, 0xdab78e26UL, 0xc8ac993bUL, 0xc6a59430UL,
    2528                 :                :     0x9cd2df59UL, 0x92dbd252UL, 0x80c0c54fUL, 0x8ec9c844UL, 0xa4f6eb75UL, 0xaaffe67eUL, 0xb8e4f163UL, 0xb6edfc68UL,
    2529                 :                :     0x0c0a67b1UL, 0x02036abaUL, 0x10187da7UL, 0x1e1170acUL, 0x342e539dUL, 0x3a275e96UL, 0x283c498bUL, 0x26354480UL,
    2530                 :                :     0x7c420fe9UL, 0x724b02e2UL, 0x605015ffUL, 0x6e5918f4UL, 0x44663bc5UL, 0x4a6f36ceUL, 0x587421d3UL, 0x567d2cd8UL,
    2531                 :                :     0x37a10c7aUL, 0x39a80171UL, 0x2bb3166cUL, 0x25ba1b67UL, 0x0f853856UL, 0x018c355dUL, 0x13972240UL, 0x1d9e2f4bUL,
    2532                 :                :     0x47e96422UL, 0x49e06929UL, 0x5bfb7e34UL, 0x55f2733fUL, 0x7fcd500eUL, 0x71c45d05UL, 0x63df4a18UL, 0x6dd64713UL,
    2533                 :                :     0xd731dccaUL, 0xd938d1c1UL, 0xcb23c6dcUL, 0xc52acbd7UL, 0xef15e8e6UL, 0xe11ce5edUL, 0xf307f2f0UL, 0xfd0efffbUL,
    2534                 :                :     0xa779b492UL, 0xa970b999UL, 0xbb6bae84UL, 0xb562a38fUL, 0x9f5d80beUL, 0x91548db5UL, 0x834f9aa8UL, 0x8d4697a3UL};
    2535                 :                : 
    2536                 :                : static const std::uint32_t Tks1[] = {
    2537                 :                :     0x00000000UL, 0x0b0e090dUL, 0x161c121aUL, 0x1d121b17UL, 0x2c382434UL, 0x27362d39UL, 0x3a24362eUL, 0x312a3f23UL,
    2538                 :                :     0x58704868UL, 0x537e4165UL, 0x4e6c5a72UL, 0x4562537fUL, 0x74486c5cUL, 0x7f466551UL, 0x62547e46UL, 0x695a774bUL,
    2539                 :                :     0xb0e090d0UL, 0xbbee99ddUL, 0xa6fc82caUL, 0xadf28bc7UL, 0x9cd8b4e4UL, 0x97d6bde9UL, 0x8ac4a6feUL, 0x81caaff3UL,
    2540                 :                :     0xe890d8b8UL, 0xe39ed1b5UL, 0xfe8ccaa2UL, 0xf582c3afUL, 0xc4a8fc8cUL, 0xcfa6f581UL, 0xd2b4ee96UL, 0xd9bae79bUL,
    2541                 :                :     0x7bdb3bbbUL, 0x70d532b6UL, 0x6dc729a1UL, 0x66c920acUL, 0x57e31f8fUL, 0x5ced1682UL, 0x41ff0d95UL, 0x4af10498UL,
    2542                 :                :     0x23ab73d3UL, 0x28a57adeUL, 0x35b761c9UL, 0x3eb968c4UL, 0x0f9357e7UL, 0x049d5eeaUL, 0x198f45fdUL, 0x12814cf0UL,
    2543                 :                :     0xcb3bab6bUL, 0xc035a266UL, 0xdd27b971UL, 0xd629b07cUL, 0xe7038f5fUL, 0xec0d8652UL, 0xf11f9d45UL, 0xfa119448UL,
    2544                 :                :     0x934be303UL, 0x9845ea0eUL, 0x8557f119UL, 0x8e59f814UL, 0xbf73c737UL, 0xb47dce3aUL, 0xa96fd52dUL, 0xa261dc20UL,
    2545                 :                :     0xf6ad766dUL, 0xfda37f60UL, 0xe0b16477UL, 0xebbf6d7aUL, 0xda955259UL, 0xd19b5b54UL, 0xcc894043UL, 0xc787494eUL,
    2546                 :                :     0xaedd3e05UL, 0xa5d33708UL, 0xb8c12c1fUL, 0xb3cf2512UL, 0x82e51a31UL, 0x89eb133cUL, 0x94f9082bUL, 0x9ff70126UL,
    2547                 :                :     0x464de6bdUL, 0x4d43efb0UL, 0x5051f4a7UL, 0x5b5ffdaaUL, 0x6a75c289UL, 0x617bcb84UL, 0x7c69d093UL, 0x7767d99eUL,
    2548                 :                :     0x1e3daed5UL, 0x1533a7d8UL, 0x0821bccfUL, 0x032fb5c2UL, 0x32058ae1UL, 0x390b83ecUL, 0x241998fbUL, 0x2f1791f6UL,
    2549                 :                :     0x8d764dd6UL, 0x867844dbUL, 0x9b6a5fccUL, 0x906456c1UL, 0xa14e69e2UL, 0xaa4060efUL, 0xb7527bf8UL, 0xbc5c72f5UL,
    2550                 :                :     0xd50605beUL, 0xde080cb3UL, 0xc31a17a4UL, 0xc8141ea9UL, 0xf93e218aUL, 0xf2302887UL, 0xef223390UL, 0xe42c3a9dUL,
    2551                 :                :     0x3d96dd06UL, 0x3698d40bUL, 0x2b8acf1cUL, 0x2084c611UL, 0x11aef932UL, 0x1aa0f03fUL, 0x07b2eb28UL, 0x0cbce225UL,
    2552                 :                :     0x65e6956eUL, 0x6ee89c63UL, 0x73fa8774UL, 0x78f48e79UL, 0x49deb15aUL, 0x42d0b857UL, 0x5fc2a340UL, 0x54ccaa4dUL,
    2553                 :                :     0xf741ecdaUL, 0xfc4fe5d7UL, 0xe15dfec0UL, 0xea53f7cdUL, 0xdb79c8eeUL, 0xd077c1e3UL, 0xcd65daf4UL, 0xc66bd3f9UL,
    2554                 :                :     0xaf31a4b2UL, 0xa43fadbfUL, 0xb92db6a8UL, 0xb223bfa5UL, 0x83098086UL, 0x8807898bUL, 0x9515929cUL, 0x9e1b9b91UL,
    2555                 :                :     0x47a17c0aUL, 0x4caf7507UL, 0x51bd6e10UL, 0x5ab3671dUL, 0x6b99583eUL, 0x60975133UL, 0x7d854a24UL, 0x768b4329UL,
    2556                 :                :     0x1fd13462UL, 0x14df3d6fUL, 0x09cd2678UL, 0x02c32f75UL, 0x33e91056UL, 0x38e7195bUL, 0x25f5024cUL, 0x2efb0b41UL,
    2557                 :                :     0x8c9ad761UL, 0x8794de6cUL, 0x9a86c57bUL, 0x9188cc76UL, 0xa0a2f355UL, 0xabacfa58UL, 0xb6bee14fUL, 0xbdb0e842UL,
    2558                 :                :     0xd4ea9f09UL, 0xdfe49604UL, 0xc2f68d13UL, 0xc9f8841eUL, 0xf8d2bb3dUL, 0xf3dcb230UL, 0xeecea927UL, 0xe5c0a02aUL,
    2559                 :                :     0x3c7a47b1UL, 0x37744ebcUL, 0x2a6655abUL, 0x21685ca6UL, 0x10426385UL, 0x1b4c6a88UL, 0x065e719fUL, 0x0d507892UL,
    2560                 :                :     0x640a0fd9UL, 0x6f0406d4UL, 0x72161dc3UL, 0x791814ceUL, 0x48322bedUL, 0x433c22e0UL, 0x5e2e39f7UL, 0x552030faUL,
    2561                 :                :     0x01ec9ab7UL, 0x0ae293baUL, 0x17f088adUL, 0x1cfe81a0UL, 0x2dd4be83UL, 0x26dab78eUL, 0x3bc8ac99UL, 0x30c6a594UL,
    2562                 :                :     0x599cd2dfUL, 0x5292dbd2UL, 0x4f80c0c5UL, 0x448ec9c8UL, 0x75a4f6ebUL, 0x7eaaffe6UL, 0x63b8e4f1UL, 0x68b6edfcUL,
    2563                 :                :     0xb10c0a67UL, 0xba02036aUL, 0xa710187dUL, 0xac1e1170UL, 0x9d342e53UL, 0x963a275eUL, 0x8b283c49UL, 0x80263544UL,
    2564                 :                :     0xe97c420fUL, 0xe2724b02UL, 0xff605015UL, 0xf46e5918UL, 0xc544663bUL, 0xce4a6f36UL, 0xd3587421UL, 0xd8567d2cUL,
    2565                 :                :     0x7a37a10cUL, 0x7139a801UL, 0x6c2bb316UL, 0x6725ba1bUL, 0x560f8538UL, 0x5d018c35UL, 0x40139722UL, 0x4b1d9e2fUL,
    2566                 :                :     0x2247e964UL, 0x2949e069UL, 0x345bfb7eUL, 0x3f55f273UL, 0x0e7fcd50UL, 0x0571c45dUL, 0x1863df4aUL, 0x136dd647UL,
    2567                 :                :     0xcad731dcUL, 0xc1d938d1UL, 0xdccb23c6UL, 0xd7c52acbUL, 0xe6ef15e8UL, 0xede11ce5UL, 0xf0f307f2UL, 0xfbfd0effUL,
    2568                 :                :     0x92a779b4UL, 0x99a970b9UL, 0x84bb6baeUL, 0x8fb562a3UL, 0xbe9f5d80UL, 0xb591548dUL, 0xa8834f9aUL, 0xa38d4697UL};
    2569                 :                : 
    2570                 :                : static const std::uint32_t Tks2[] = {
    2571                 :                :     0x00000000UL, 0x0d0b0e09UL, 0x1a161c12UL, 0x171d121bUL, 0x342c3824UL, 0x3927362dUL, 0x2e3a2436UL, 0x23312a3fUL,
    2572                 :                :     0x68587048UL, 0x65537e41UL, 0x724e6c5aUL, 0x7f456253UL, 0x5c74486cUL, 0x517f4665UL, 0x4662547eUL, 0x4b695a77UL,
    2573                 :                :     0xd0b0e090UL, 0xddbbee99UL, 0xcaa6fc82UL, 0xc7adf28bUL, 0xe49cd8b4UL, 0xe997d6bdUL, 0xfe8ac4a6UL, 0xf381caafUL,
    2574                 :                :     0xb8e890d8UL, 0xb5e39ed1UL, 0xa2fe8ccaUL, 0xaff582c3UL, 0x8cc4a8fcUL, 0x81cfa6f5UL, 0x96d2b4eeUL, 0x9bd9bae7UL,
    2575                 :                :     0xbb7bdb3bUL, 0xb670d532UL, 0xa16dc729UL, 0xac66c920UL, 0x8f57e31fUL, 0x825ced16UL, 0x9541ff0dUL, 0x984af104UL,
    2576                 :                :     0xd323ab73UL, 0xde28a57aUL, 0xc935b761UL, 0xc43eb968UL, 0xe70f9357UL, 0xea049d5eUL, 0xfd198f45UL, 0xf012814cUL,
    2577                 :                :     0x6bcb3babUL, 0x66c035a2UL, 0x71dd27b9UL, 0x7cd629b0UL, 0x5fe7038fUL, 0x52ec0d86UL, 0x45f11f9dUL, 0x48fa1194UL,
    2578                 :                :     0x03934be3UL, 0x0e9845eaUL, 0x198557f1UL, 0x148e59f8UL, 0x37bf73c7UL, 0x3ab47dceUL, 0x2da96fd5UL, 0x20a261dcUL,
    2579                 :                :     0x6df6ad76UL, 0x60fda37fUL, 0x77e0b164UL, 0x7aebbf6dUL, 0x59da9552UL, 0x54d19b5bUL, 0x43cc8940UL, 0x4ec78749UL,
    2580                 :                :     0x05aedd3eUL, 0x08a5d337UL, 0x1fb8c12cUL, 0x12b3cf25UL, 0x3182e51aUL, 0x3c89eb13UL, 0x2b94f908UL, 0x269ff701UL,
    2581                 :                :     0xbd464de6UL, 0xb04d43efUL, 0xa75051f4UL, 0xaa5b5ffdUL, 0x896a75c2UL, 0x84617bcbUL, 0x937c69d0UL, 0x9e7767d9UL,
    2582                 :                :     0xd51e3daeUL, 0xd81533a7UL, 0xcf0821bcUL, 0xc2032fb5UL, 0xe132058aUL, 0xec390b83UL, 0xfb241998UL, 0xf62f1791UL,
    2583                 :                :     0xd68d764dUL, 0xdb867844UL, 0xcc9b6a5fUL, 0xc1906456UL, 0xe2a14e69UL, 0xefaa4060UL, 0xf8b7527bUL, 0xf5bc5c72UL,
    2584                 :                :     0xbed50605UL, 0xb3de080cUL, 0xa4c31a17UL, 0xa9c8141eUL, 0x8af93e21UL, 0x87f23028UL, 0x90ef2233UL, 0x9de42c3aUL,
    2585                 :                :     0x063d96ddUL, 0x0b3698d4UL, 0x1c2b8acfUL, 0x112084c6UL, 0x3211aef9UL, 0x3f1aa0f0UL, 0x2807b2ebUL, 0x250cbce2UL,
    2586                 :                :     0x6e65e695UL, 0x636ee89cUL, 0x7473fa87UL, 0x7978f48eUL, 0x5a49deb1UL, 0x5742d0b8UL, 0x405fc2a3UL, 0x4d54ccaaUL,
    2587                 :                :     0xdaf741ecUL, 0xd7fc4fe5UL, 0xc0e15dfeUL, 0xcdea53f7UL, 0xeedb79c8UL, 0xe3d077c1UL, 0xf4cd65daUL, 0xf9c66bd3UL,
    2588                 :                :     0xb2af31a4UL, 0xbfa43fadUL, 0xa8b92db6UL, 0xa5b223bfUL, 0x86830980UL, 0x8b880789UL, 0x9c951592UL, 0x919e1b9bUL,
    2589                 :                :     0x0a47a17cUL, 0x074caf75UL, 0x1051bd6eUL, 0x1d5ab367UL, 0x3e6b9958UL, 0x33609751UL, 0x247d854aUL, 0x29768b43UL,
    2590                 :                :     0x621fd134UL, 0x6f14df3dUL, 0x7809cd26UL, 0x7502c32fUL, 0x5633e910UL, 0x5b38e719UL, 0x4c25f502UL, 0x412efb0bUL,
    2591                 :                :     0x618c9ad7UL, 0x6c8794deUL, 0x7b9a86c5UL, 0x769188ccUL, 0x55a0a2f3UL, 0x58abacfaUL, 0x4fb6bee1UL, 0x42bdb0e8UL,
    2592                 :                :     0x09d4ea9fUL, 0x04dfe496UL, 0x13c2f68dUL, 0x1ec9f884UL, 0x3df8d2bbUL, 0x30f3dcb2UL, 0x27eecea9UL, 0x2ae5c0a0UL,
    2593                 :                :     0xb13c7a47UL, 0xbc37744eUL, 0xab2a6655UL, 0xa621685cUL, 0x85104263UL, 0x881b4c6aUL, 0x9f065e71UL, 0x920d5078UL,
    2594                 :                :     0xd9640a0fUL, 0xd46f0406UL, 0xc372161dUL, 0xce791814UL, 0xed48322bUL, 0xe0433c22UL, 0xf75e2e39UL, 0xfa552030UL,
    2595                 :                :     0xb701ec9aUL, 0xba0ae293UL, 0xad17f088UL, 0xa01cfe81UL, 0x832dd4beUL, 0x8e26dab7UL, 0x993bc8acUL, 0x9430c6a5UL,
    2596                 :                :     0xdf599cd2UL, 0xd25292dbUL, 0xc54f80c0UL, 0xc8448ec9UL, 0xeb75a4f6UL, 0xe67eaaffUL, 0xf163b8e4UL, 0xfc68b6edUL,
    2597                 :                :     0x67b10c0aUL, 0x6aba0203UL, 0x7da71018UL, 0x70ac1e11UL, 0x539d342eUL, 0x5e963a27UL, 0x498b283cUL, 0x44802635UL,
    2598                 :                :     0x0fe97c42UL, 0x02e2724bUL, 0x15ff6050UL, 0x18f46e59UL, 0x3bc54466UL, 0x36ce4a6fUL, 0x21d35874UL, 0x2cd8567dUL,
    2599                 :                :     0x0c7a37a1UL, 0x017139a8UL, 0x166c2bb3UL, 0x1b6725baUL, 0x38560f85UL, 0x355d018cUL, 0x22401397UL, 0x2f4b1d9eUL,
    2600                 :                :     0x642247e9UL, 0x692949e0UL, 0x7e345bfbUL, 0x733f55f2UL, 0x500e7fcdUL, 0x5d0571c4UL, 0x4a1863dfUL, 0x47136dd6UL,
    2601                 :                :     0xdccad731UL, 0xd1c1d938UL, 0xc6dccb23UL, 0xcbd7c52aUL, 0xe8e6ef15UL, 0xe5ede11cUL, 0xf2f0f307UL, 0xfffbfd0eUL,
    2602                 :                :     0xb492a779UL, 0xb999a970UL, 0xae84bb6bUL, 0xa38fb562UL, 0x80be9f5dUL, 0x8db59154UL, 0x9aa8834fUL, 0x97a38d46UL};
    2603                 :                : 
    2604                 :                : static const std::uint32_t Tks3[] = {
    2605                 :                :     0x00000000UL, 0x090d0b0eUL, 0x121a161cUL, 0x1b171d12UL, 0x24342c38UL, 0x2d392736UL, 0x362e3a24UL, 0x3f23312aUL,
    2606                 :                :     0x48685870UL, 0x4165537eUL, 0x5a724e6cUL, 0x537f4562UL, 0x6c5c7448UL, 0x65517f46UL, 0x7e466254UL, 0x774b695aUL,
    2607                 :                :     0x90d0b0e0UL, 0x99ddbbeeUL, 0x82caa6fcUL, 0x8bc7adf2UL, 0xb4e49cd8UL, 0xbde997d6UL, 0xa6fe8ac4UL, 0xaff381caUL,
    2608                 :                :     0xd8b8e890UL, 0xd1b5e39eUL, 0xcaa2fe8cUL, 0xc3aff582UL, 0xfc8cc4a8UL, 0xf581cfa6UL, 0xee96d2b4UL, 0xe79bd9baUL,
    2609                 :                :     0x3bbb7bdbUL, 0x32b670d5UL, 0x29a16dc7UL, 0x20ac66c9UL, 0x1f8f57e3UL, 0x16825cedUL, 0x0d9541ffUL, 0x04984af1UL,
    2610                 :                :     0x73d323abUL, 0x7ade28a5UL, 0x61c935b7UL, 0x68c43eb9UL, 0x57e70f93UL, 0x5eea049dUL, 0x45fd198fUL, 0x4cf01281UL,
    2611                 :                :     0xab6bcb3bUL, 0xa266c035UL, 0xb971dd27UL, 0xb07cd629UL, 0x8f5fe703UL, 0x8652ec0dUL, 0x9d45f11fUL, 0x9448fa11UL,
    2612                 :                :     0xe303934bUL, 0xea0e9845UL, 0xf1198557UL, 0xf8148e59UL, 0xc737bf73UL, 0xce3ab47dUL, 0xd52da96fUL, 0xdc20a261UL,
    2613                 :                :     0x766df6adUL, 0x7f60fda3UL, 0x6477e0b1UL, 0x6d7aebbfUL, 0x5259da95UL, 0x5b54d19bUL, 0x4043cc89UL, 0x494ec787UL,
    2614                 :                :     0x3e05aeddUL, 0x3708a5d3UL, 0x2c1fb8c1UL, 0x2512b3cfUL, 0x1a3182e5UL, 0x133c89ebUL, 0x082b94f9UL, 0x01269ff7UL,
    2615                 :                :     0xe6bd464dUL, 0xefb04d43UL, 0xf4a75051UL, 0xfdaa5b5fUL, 0xc2896a75UL, 0xcb84617bUL, 0xd0937c69UL, 0xd99e7767UL,
    2616                 :                :     0xaed51e3dUL, 0xa7d81533UL, 0xbccf0821UL, 0xb5c2032fUL, 0x8ae13205UL, 0x83ec390bUL, 0x98fb2419UL, 0x91f62f17UL,
    2617                 :                :     0x4dd68d76UL, 0x44db8678UL, 0x5fcc9b6aUL, 0x56c19064UL, 0x69e2a14eUL, 0x60efaa40UL, 0x7bf8b752UL, 0x72f5bc5cUL,
    2618                 :                :     0x05bed506UL, 0x0cb3de08UL, 0x17a4c31aUL, 0x1ea9c814UL, 0x218af93eUL, 0x2887f230UL, 0x3390ef22UL, 0x3a9de42cUL,
    2619                 :                :     0xdd063d96UL, 0xd40b3698UL, 0xcf1c2b8aUL, 0xc6112084UL, 0xf93211aeUL, 0xf03f1aa0UL, 0xeb2807b2UL, 0xe2250cbcUL,
    2620                 :                :     0x956e65e6UL, 0x9c636ee8UL, 0x877473faUL, 0x8e7978f4UL, 0xb15a49deUL, 0xb85742d0UL, 0xa3405fc2UL, 0xaa4d54ccUL,
    2621                 :                :     0xecdaf741UL, 0xe5d7fc4fUL, 0xfec0e15dUL, 0xf7cdea53UL, 0xc8eedb79UL, 0xc1e3d077UL, 0xdaf4cd65UL, 0xd3f9c66bUL,
    2622                 :                :     0xa4b2af31UL, 0xadbfa43fUL, 0xb6a8b92dUL, 0xbfa5b223UL, 0x80868309UL, 0x898b8807UL, 0x929c9515UL, 0x9b919e1bUL,
    2623                 :                :     0x7c0a47a1UL, 0x75074cafUL, 0x6e1051bdUL, 0x671d5ab3UL, 0x583e6b99UL, 0x51336097UL, 0x4a247d85UL, 0x4329768bUL,
    2624                 :                :     0x34621fd1UL, 0x3d6f14dfUL, 0x267809cdUL, 0x2f7502c3UL, 0x105633e9UL, 0x195b38e7UL, 0x024c25f5UL, 0x0b412efbUL,
    2625                 :                :     0xd7618c9aUL, 0xde6c8794UL, 0xc57b9a86UL, 0xcc769188UL, 0xf355a0a2UL, 0xfa58abacUL, 0xe14fb6beUL, 0xe842bdb0UL,
    2626                 :                :     0x9f09d4eaUL, 0x9604dfe4UL, 0x8d13c2f6UL, 0x841ec9f8UL, 0xbb3df8d2UL, 0xb230f3dcUL, 0xa927eeceUL, 0xa02ae5c0UL,
    2627                 :                :     0x47b13c7aUL, 0x4ebc3774UL, 0x55ab2a66UL, 0x5ca62168UL, 0x63851042UL, 0x6a881b4cUL, 0x719f065eUL, 0x78920d50UL,
    2628                 :                :     0x0fd9640aUL, 0x06d46f04UL, 0x1dc37216UL, 0x14ce7918UL, 0x2bed4832UL, 0x22e0433cUL, 0x39f75e2eUL, 0x30fa5520UL,
    2629                 :                :     0x9ab701ecUL, 0x93ba0ae2UL, 0x88ad17f0UL, 0x81a01cfeUL, 0xbe832dd4UL, 0xb78e26daUL, 0xac993bc8UL, 0xa59430c6UL,
    2630                 :                :     0xd2df599cUL, 0xdbd25292UL, 0xc0c54f80UL, 0xc9c8448eUL, 0xf6eb75a4UL, 0xffe67eaaUL, 0xe4f163b8UL, 0xedfc68b6UL,
    2631                 :                :     0x0a67b10cUL, 0x036aba02UL, 0x187da710UL, 0x1170ac1eUL, 0x2e539d34UL, 0x275e963aUL, 0x3c498b28UL, 0x35448026UL,
    2632                 :                :     0x420fe97cUL, 0x4b02e272UL, 0x5015ff60UL, 0x5918f46eUL, 0x663bc544UL, 0x6f36ce4aUL, 0x7421d358UL, 0x7d2cd856UL,
    2633                 :                :     0xa10c7a37UL, 0xa8017139UL, 0xb3166c2bUL, 0xba1b6725UL, 0x8538560fUL, 0x8c355d01UL, 0x97224013UL, 0x9e2f4b1dUL,
    2634                 :                :     0xe9642247UL, 0xe0692949UL, 0xfb7e345bUL, 0xf2733f55UL, 0xcd500e7fUL, 0xc45d0571UL, 0xdf4a1863UL, 0xd647136dUL,
    2635                 :                :     0x31dccad7UL, 0x38d1c1d9UL, 0x23c6dccbUL, 0x2acbd7c5UL, 0x15e8e6efUL, 0x1ce5ede1UL, 0x07f2f0f3UL, 0x0efffbfdUL,
    2636                 :                :     0x79b492a7UL, 0x70b999a9UL, 0x6bae84bbUL, 0x62a38fb5UL, 0x5d80be9fUL, 0x548db591UL, 0x4f9aa883UL, 0x4697a38dUL};
    2637                 :                : 
    2638                 :                : static const std::uint32_t rcon[] = {
    2639                 :                :     0x01000000UL, 0x02000000UL, 0x04000000UL, 0x08000000UL,
    2640                 :                :     0x10000000UL, 0x20000000UL, 0x40000000UL, 0x80000000UL,
    2641                 :                :     0x1B000000UL, 0x36000000UL, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
    2642                 :                : };
    2643                 :                : 
    2644                 :                : /* extract a byte portably */
    2645                 :                : #ifdef _MSC_VER
    2646                 :                : #define byte(x, n) ((unsigned char)((x) >> (8 * (n))))
    2647                 :                : #else
    2648                 :                : #define byte(x, n) (((x) >> (8 * (n))) & 255)
    2649                 :                : #endif
    2650                 :                : 
    2651                 :CBC        5062 : static std::uint32_t setup_mix(std::uint32_t temp)
    2652                 :                : {
    2653                 :           5062 :     return (Te4_3[byte(temp, 2)])
    2654                 :           5062 :         ^ (Te4_2[byte(temp, 1)])
    2655                 :           5062 :         ^ (Te4_1[byte(temp, 0)])
    2656                 :           5062 :         ^ (Te4_0[byte(temp, 3)]);
    2657                 :                : }
    2658                 :                : 
    2659                 :                : #define LOAD32H(x, y)                                                                                                                                                                                           \
    2660                 :                :     do                                                                                                                                                                                                          \
    2661                 :                :     {                                                                                                                                                                                                           \
    2662                 :                :         x = (static_cast<std::uint32_t>((y)[0] & 255) << 24) | (static_cast<std::uint32_t>((y)[1] & 255) << 16) | (static_cast<std::uint32_t>((y)[2] & 255) << 8) | (static_cast<std::uint32_t>((y)[3] & 255)); \
    2663                 :                :     } while (0)
    2664                 :                : 
    2665                 :                : #define RORc(x, y) ((((static_cast<std::uint32_t>(x) & 0xFFFFFFFFUL) >> static_cast<std::uint32_t>((y)&31)) | (static_cast<std::uint32_t>(x) << static_cast<std::uint32_t>((32 - ((y)&31)) & 31))) & 0xFFFFFFFFUL)
    2666                 :                : 
    2667                 :                : struct rijndael_key
    2668                 :                : {
    2669                 :                :     std::uint32_t eK[60], dK[60];
    2670                 :                :     int Nr;
    2671                 :                : };
    2672                 :                : 
    2673                 :            460 : rijndael_key rijndael_setup(const std::vector<std::uint8_t> &key_data)
    2674                 :                : {
    2675                 :                :     rijndael_key skey;
    2676                 :                : 
    2677                 :                :     int i;
    2678                 :                :     std::uint32_t temp, *rk;
    2679                 :                :     std::uint32_t *rrk;
    2680                 :                : 
    2681   [ +  +  +  -  :            460 :     if (key_data.size() != 16 && key_data.size() != 24 && key_data.size() != 32)
             -  +  -  + ]
    2682                 :                :     {
    2683                 :                :         throw xlnt::exception("Invalid AES key length ("
    2684         [ #  # ]:UBC           0 :             + std::to_string(key_data.size())
    2685         [ #  # ]:              0 :             + " bytes). Must be 16, 24 or 32 bytes.");
    2686                 :                :     }
    2687                 :                : 
    2688                 :CBC         460 :     skey.Nr = 10 + ((static_cast<int>(key_data.size()) / 8) - 2) * 2;
    2689                 :            460 :     auto key = key_data.data();
    2690                 :                : 
    2691                 :                :     /* setup the forward key */
    2692                 :            460 :     i = 0;
    2693                 :            460 :     rk = skey.eK;
    2694                 :            460 :     LOAD32H(rk[0], key);
    2695                 :            460 :     LOAD32H(rk[1], key + 4);
    2696                 :            460 :     LOAD32H(rk[2], key + 8);
    2697                 :            460 :     LOAD32H(rk[3], key + 12);
    2698         [ +  + ]:            460 :     if (key_data.size() == 16)
    2699                 :                :     {
    2700                 :                :         for (;;)
    2701                 :                :         {
    2702                 :           3060 :             temp = rk[3];
    2703                 :           3060 :             rk[4] = rk[0] ^ setup_mix(temp) ^ rcon[i];
    2704                 :           3060 :             rk[5] = rk[1] ^ rk[4];
    2705                 :           3060 :             rk[6] = rk[2] ^ rk[5];
    2706                 :           3060 :             rk[7] = rk[3] ^ rk[6];
    2707         [ +  + ]:           3060 :             if (++i == 10)
    2708                 :                :             {
    2709                 :            306 :                 break;
    2710                 :                :             }
    2711                 :           2754 :             rk += 4;
    2712                 :                :         }
    2713                 :                :     }
    2714         [ -  + ]:            154 :     else if (key_data.size() == 24)
    2715                 :                :     {
    2716                 :UBC           0 :         LOAD32H(rk[4], key + 16);
    2717                 :              0 :         LOAD32H(rk[5], key + 20);
    2718                 :                :         for (;;)
    2719                 :                :         {
    2720                 :                : #ifdef _MSC_VER
    2721                 :                :             temp = skey.eK[rk - skey.eK + 5];
    2722                 :                : #else
    2723                 :              0 :             temp = rk[5];
    2724                 :                : #endif
    2725                 :              0 :             rk[6] = rk[0] ^ setup_mix(temp) ^ rcon[i];
    2726                 :              0 :             rk[7] = rk[1] ^ rk[6];
    2727                 :              0 :             rk[8] = rk[2] ^ rk[7];
    2728                 :              0 :             rk[9] = rk[3] ^ rk[8];
    2729         [ #  # ]:              0 :             if (++i == 8)
    2730                 :                :             {
    2731                 :              0 :                 break;
    2732                 :                :             }
    2733                 :              0 :             rk[10] = rk[4] ^ rk[9];
    2734                 :              0 :             rk[11] = rk[5] ^ rk[10];
    2735                 :              0 :             rk += 6;
    2736                 :                :         }
    2737                 :                :     }
    2738         [ +  - ]:CBC         154 :     else if (key_data.size() == 32)
    2739                 :                :     {
    2740                 :            154 :         LOAD32H(rk[4], key + 16);
    2741                 :            154 :         LOAD32H(rk[5], key + 20);
    2742                 :            154 :         LOAD32H(rk[6], key + 24);
    2743                 :            154 :         LOAD32H(rk[7], key + 28);
    2744                 :                :         for (;;)
    2745                 :                :         {
    2746                 :                : #ifdef _MSC_VER
    2747                 :                :             temp = skey.eK[rk - skey.eK + 7];
    2748                 :                : #else
    2749                 :           1078 :             temp = rk[7];
    2750                 :                : #endif
    2751                 :           1078 :             rk[8] = rk[0] ^ setup_mix(temp) ^ rcon[i];
    2752                 :           1078 :             rk[9] = rk[1] ^ rk[8];
    2753                 :           1078 :             rk[10] = rk[2] ^ rk[9];
    2754                 :           1078 :             rk[11] = rk[3] ^ rk[10];
    2755         [ +  + ]:           1078 :             if (++i == 7)
    2756                 :                :             {
    2757                 :            154 :                 break;
    2758                 :                :             }
    2759                 :            924 :             temp = rk[11];
    2760                 :            924 :             rk[12] = rk[4] ^ setup_mix(RORc(temp, 8));
    2761                 :            924 :             rk[13] = rk[5] ^ rk[12];
    2762                 :            924 :             rk[14] = rk[6] ^ rk[13];
    2763                 :            924 :             rk[15] = rk[7] ^ rk[14];
    2764                 :            924 :             rk += 8;
    2765                 :                :         }
    2766                 :                :     }
    2767                 :                : 
    2768                 :                :     /* setup the inverse key now */
    2769                 :            460 :     rk = skey.dK;
    2770                 :            460 :     rrk = skey.eK + (28 + key_data.size()) - 4;
    2771                 :                : 
    2772                 :                :     /* apply the inverse MixColumn transform to all round keys but the first and the last: */
    2773                 :                :     /* copy first */
    2774                 :            460 :     *rk++ = *rrk++;
    2775                 :            460 :     *rk++ = *rrk++;
    2776                 :            460 :     *rk++ = *rrk++;
    2777                 :            460 :     *rk = *rrk;
    2778                 :            460 :     rk -= 3;
    2779                 :            460 :     rrk -= 3;
    2780                 :                : 
    2781         [ +  + ]:           5216 :     for (i = 1; i < skey.Nr; i++)
    2782                 :                :     {
    2783                 :           4756 :         rrk -= 4;
    2784                 :           4756 :         rk += 4;
    2785                 :                : 
    2786                 :           4756 :         temp = rrk[0];
    2787                 :           4756 :         rk[0] =
    2788                 :           4756 :             Tks0[byte(temp, 3)] ^ Tks1[byte(temp, 2)] ^ Tks2[byte(temp, 1)] ^ Tks3[byte(temp, 0)];
    2789                 :           4756 :         temp = rrk[1];
    2790                 :           4756 :         rk[1] =
    2791                 :           4756 :             Tks0[byte(temp, 3)] ^ Tks1[byte(temp, 2)] ^ Tks2[byte(temp, 1)] ^ Tks3[byte(temp, 0)];
    2792                 :           4756 :         temp = rrk[2];
    2793                 :           4756 :         rk[2] =
    2794                 :           4756 :             Tks0[byte(temp, 3)] ^ Tks1[byte(temp, 2)] ^ Tks2[byte(temp, 1)] ^ Tks3[byte(temp, 0)];
    2795                 :           4756 :         temp = rrk[3];
    2796                 :           4756 :         rk[3] =
    2797                 :           4756 :             Tks0[byte(temp, 3)] ^ Tks1[byte(temp, 2)] ^ Tks2[byte(temp, 1)] ^ Tks3[byte(temp, 0)];
    2798                 :                :     }
    2799                 :                : 
    2800                 :                :     /* copy last */
    2801                 :            460 :     rrk -= 4;
    2802                 :            460 :     rk += 4;
    2803                 :            460 :     *rk++ = *rrk++;
    2804                 :            460 :     *rk++ = *rrk++;
    2805                 :            460 :     *rk++ = *rrk++;
    2806                 :            460 :     *rk = *rrk;
    2807                 :                : 
    2808                 :            460 :     return skey;
    2809                 :                : }
    2810                 :                : 
    2811                 :                : #define STORE32H(x, y)                                         \
    2812                 :                :     do                                                         \
    2813                 :                :     {                                                          \
    2814                 :                :         (y)[0] = static_cast<std::uint8_t>(((x) >> 24) & 255); \
    2815                 :                :         (y)[1] = static_cast<std::uint8_t>(((x) >> 16) & 255); \
    2816                 :                :         (y)[2] = static_cast<std::uint8_t>(((x) >> 8) & 255);  \
    2817                 :                :         (y)[3] = static_cast<std::uint8_t>((x)&255);           \
    2818                 :                :     } while (0)
    2819                 :                : 
    2820                 :                : #define Te0(x) TE0[x]
    2821                 :                : #define Te1(x) TE1[x]
    2822                 :                : #define Te2(x) TE2[x]
    2823                 :                : #define Te3(x) TE3[x]
    2824                 :                : 
    2825                 :                : #define Td0(x) TD0[x]
    2826                 :                : #define Td1(x) TD1[x]
    2827                 :                : #define Td2(x) TD2[x]
    2828                 :                : #define Td3(x) TD3[x]
    2829                 :                : 
    2830                 :          32768 : void rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, rijndael_key &skey)
    2831                 :                : {
    2832                 :                :     std::uint32_t s0, s1, s2, s3, t0, t1, t2, t3, *rk;
    2833                 :                :     int Nr, r;
    2834                 :                : 
    2835                 :          32768 :     Nr = skey.Nr;
    2836                 :          32768 :     rk = skey.eK;
    2837                 :                : 
    2838                 :                :     /*
    2839                 :                :      * map byte array block to cipher state
    2840                 :                :      * and add initial round key:
    2841                 :                :      */
    2842                 :          32768 :     LOAD32H(s0, pt);
    2843                 :          32768 :     s0 ^= rk[0];
    2844                 :          32768 :     LOAD32H(s1, pt + 4);
    2845                 :          32768 :     s1 ^= rk[1];
    2846                 :          32768 :     LOAD32H(s2, pt + 8);
    2847                 :          32768 :     s2 ^= rk[2];
    2848                 :          32768 :     LOAD32H(s3, pt + 12);
    2849                 :          32768 :     s3 ^= rk[3];
    2850                 :                : 
    2851                 :                :     /*
    2852                 :                :      * Nr - 1 full rounds:
    2853                 :                :      */
    2854                 :          32768 :     r = Nr >> 1;
    2855                 :                :     for (;;)
    2856                 :                :     {
    2857                 :         229376 :         t0 =
    2858                 :         229376 :             Te0(byte(s0, 3)) ^ Te1(byte(s1, 2)) ^ Te2(byte(s2, 1)) ^ Te3(byte(s3, 0)) ^ rk[4];
    2859                 :         229376 :         t1 =
    2860                 :         229376 :             Te0(byte(s1, 3)) ^ Te1(byte(s2, 2)) ^ Te2(byte(s3, 1)) ^ Te3(byte(s0, 0)) ^ rk[5];
    2861                 :         229376 :         t2 =
    2862                 :         229376 :             Te0(byte(s2, 3)) ^ Te1(byte(s3, 2)) ^ Te2(byte(s0, 1)) ^ Te3(byte(s1, 0)) ^ rk[6];
    2863                 :         229376 :         t3 =
    2864                 :         229376 :             Te0(byte(s3, 3)) ^ Te1(byte(s0, 2)) ^ Te2(byte(s1, 1)) ^ Te3(byte(s2, 0)) ^ rk[7];
    2865                 :                : 
    2866                 :         229376 :         rk += 8;
    2867         [ +  + ]:         229376 :         if (--r == 0)
    2868                 :                :         {
    2869                 :          32768 :             break;
    2870                 :                :         }
    2871                 :                : 
    2872                 :         196608 :         s0 =
    2873                 :         196608 :             Te0(byte(t0, 3)) ^ Te1(byte(t1, 2)) ^ Te2(byte(t2, 1)) ^ Te3(byte(t3, 0)) ^ rk[0];
    2874                 :         196608 :         s1 =
    2875                 :         196608 :             Te0(byte(t1, 3)) ^ Te1(byte(t2, 2)) ^ Te2(byte(t3, 1)) ^ Te3(byte(t0, 0)) ^ rk[1];
    2876                 :         196608 :         s2 =
    2877                 :         196608 :             Te0(byte(t2, 3)) ^ Te1(byte(t3, 2)) ^ Te2(byte(t0, 1)) ^ Te3(byte(t1, 0)) ^ rk[2];
    2878                 :         196608 :         s3 =
    2879                 :         196608 :             Te0(byte(t3, 3)) ^ Te1(byte(t0, 2)) ^ Te2(byte(t1, 1)) ^ Te3(byte(t2, 0)) ^ rk[3];
    2880                 :                :     }
    2881                 :                : 
    2882                 :                :     /*
    2883                 :                :      * apply last round and
    2884                 :                :      * map cipher state to byte array block:
    2885                 :                :      */
    2886                 :          32768 :     s0 =
    2887                 :          32768 :         (Te4_3[byte(t0, 3)]) ^ (Te4_2[byte(t1, 2)]) ^ (Te4_1[byte(t2, 1)]) ^ (Te4_0[byte(t3, 0)]) ^ rk[0];
    2888                 :          32768 :     STORE32H(s0, ct);
    2889                 :          32768 :     s1 =
    2890                 :          32768 :         (Te4_3[byte(t1, 3)]) ^ (Te4_2[byte(t2, 2)]) ^ (Te4_1[byte(t3, 1)]) ^ (Te4_0[byte(t0, 0)]) ^ rk[1];
    2891                 :          32768 :     STORE32H(s1, ct + 4);
    2892                 :          32768 :     s2 =
    2893                 :          32768 :         (Te4_3[byte(t2, 3)]) ^ (Te4_2[byte(t3, 2)]) ^ (Te4_1[byte(t0, 1)]) ^ (Te4_0[byte(t1, 0)]) ^ rk[2];
    2894                 :          32768 :     STORE32H(s2, ct + 8);
    2895                 :          32768 :     s3 =
    2896                 :          32768 :         (Te4_3[byte(t3, 3)]) ^ (Te4_2[byte(t0, 2)]) ^ (Te4_1[byte(t1, 1)]) ^ (Te4_0[byte(t2, 0)]) ^ rk[3];
    2897                 :          32768 :     STORE32H(s3, ct + 12);
    2898                 :          32768 : }
    2899                 :                : 
    2900                 :          70247 : void rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, rijndael_key &skey)
    2901                 :                : {
    2902                 :                :     std::uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
    2903                 :                : 
    2904                 :          70247 :     auto Nr = skey.Nr;
    2905                 :          70247 :     auto rk = skey.dK;
    2906                 :                : 
    2907                 :                :     /*
    2908                 :                :      * map byte array block to cipher state
    2909                 :                :      * and add initial round key:
    2910                 :                :      */
    2911                 :          70247 :     LOAD32H(s0, ct);
    2912                 :          70247 :     s0 ^= rk[0];
    2913                 :          70247 :     LOAD32H(s1, ct + 4);
    2914                 :          70247 :     s1 ^= rk[1];
    2915                 :          70247 :     LOAD32H(s2, ct + 8);
    2916                 :          70247 :     s2 ^= rk[2];
    2917                 :          70247 :     LOAD32H(s3, ct + 12);
    2918                 :          70247 :     s3 ^= rk[3];
    2919                 :                : 
    2920                 :                :     /*
    2921                 :                :      * Nr - 1 full rounds:
    2922                 :                :      */
    2923                 :          70247 :     auto r = Nr >> 1;
    2924                 :                : 
    2925                 :                :     for (;;)
    2926                 :                :     {
    2927                 :         354401 :         t0 =
    2928                 :         354401 :             Td0(byte(s0, 3)) ^ Td1(byte(s3, 2)) ^ Td2(byte(s2, 1)) ^ Td3(byte(s1, 0)) ^ rk[4];
    2929                 :         354401 :         t1 =
    2930                 :         354401 :             Td0(byte(s1, 3)) ^ Td1(byte(s0, 2)) ^ Td2(byte(s3, 1)) ^ Td3(byte(s2, 0)) ^ rk[5];
    2931                 :         354401 :         t2 =
    2932                 :         354401 :             Td0(byte(s2, 3)) ^ Td1(byte(s1, 2)) ^ Td2(byte(s0, 1)) ^ Td3(byte(s3, 0)) ^ rk[6];
    2933                 :         354401 :         t3 =
    2934                 :         354401 :             Td0(byte(s3, 3)) ^ Td1(byte(s2, 2)) ^ Td2(byte(s1, 1)) ^ Td3(byte(s0, 0)) ^ rk[7];
    2935                 :                : 
    2936                 :         354401 :         rk += 8;
    2937         [ +  + ]:         354401 :         if (--r == 0)
    2938                 :                :         {
    2939                 :          70247 :             break;
    2940                 :                :         }
    2941                 :                : 
    2942                 :         284154 :         s0 =
    2943                 :         284154 :             Td0(byte(t0, 3)) ^ Td1(byte(t3, 2)) ^ Td2(byte(t2, 1)) ^ Td3(byte(t1, 0)) ^ rk[0];
    2944                 :         284154 :         s1 =
    2945                 :         284154 :             Td0(byte(t1, 3)) ^ Td1(byte(t0, 2)) ^ Td2(byte(t3, 1)) ^ Td3(byte(t2, 0)) ^ rk[1];
    2946                 :         284154 :         s2 =
    2947                 :         284154 :             Td0(byte(t2, 3)) ^ Td1(byte(t1, 2)) ^ Td2(byte(t0, 1)) ^ Td3(byte(t3, 0)) ^ rk[2];
    2948                 :         284154 :         s3 =
    2949                 :         284154 :             Td0(byte(t3, 3)) ^ Td1(byte(t2, 2)) ^ Td2(byte(t1, 1)) ^ Td3(byte(t0, 0)) ^ rk[3];
    2950                 :                :     }
    2951                 :                : 
    2952                 :                :     /*
    2953                 :                :      * apply last round and
    2954                 :                :      * map cipher state to byte array block:
    2955                 :                :      */
    2956                 :          70247 :     s0 =
    2957                 :          70247 :         (Td4[byte(t0, 3)] & 0xff000000) ^ (Td4[byte(t3, 2)] & 0x00ff0000) ^ (Td4[byte(t2, 1)] & 0x0000ff00) ^ (Td4[byte(t1, 0)] & 0x000000ff) ^ rk[0];
    2958                 :          70247 :     STORE32H(s0, pt);
    2959                 :          70247 :     s1 =
    2960                 :          70247 :         (Td4[byte(t1, 3)] & 0xff000000) ^ (Td4[byte(t0, 2)] & 0x00ff0000) ^ (Td4[byte(t3, 1)] & 0x0000ff00) ^ (Td4[byte(t2, 0)] & 0x000000ff) ^ rk[1];
    2961                 :          70247 :     STORE32H(s1, pt + 4);
    2962                 :          70247 :     s2 =
    2963                 :          70247 :         (Td4[byte(t2, 3)] & 0xff000000) ^ (Td4[byte(t1, 2)] & 0x00ff0000) ^ (Td4[byte(t0, 1)] & 0x0000ff00) ^ (Td4[byte(t3, 0)] & 0x000000ff) ^ rk[2];
    2964                 :          70247 :     STORE32H(s2, pt + 8);
    2965                 :          70247 :     s3 =
    2966                 :          70247 :         (Td4[byte(t3, 3)] & 0xff000000) ^ (Td4[byte(t2, 2)] & 0x00ff0000) ^ (Td4[byte(t1, 1)] & 0x0000ff00) ^ (Td4[byte(t0, 0)] & 0x000000ff) ^ rk[3];
    2967                 :          70247 :     STORE32H(s3, pt + 12);
    2968                 :          70247 : }
    2969                 :                : 
    2970                 :                : #undef byte
    2971                 :                : #undef LOAD32H
    2972                 :                : #undef STORE32H
    2973                 :                : #undef RORc
    2974                 :                : 
    2975                 :                : } // namespace
    2976                 :                : 
    2977                 :                : namespace xlnt {
    2978                 :                : namespace detail {
    2979                 :                : 
    2980                 :UBC           0 : std::vector<std::uint8_t> aes_ecb_encrypt(
    2981                 :                :     const std::vector<std::uint8_t> &plaintext,
    2982                 :                :     const std::vector<std::uint8_t> &key,
    2983                 :                :     const std::size_t offset)
    2984                 :                : {
    2985         [ #  # ]:              0 :     if (plaintext.empty()) return {};
    2986                 :                : 
    2987                 :              0 :     auto len = plaintext.size() - offset;
    2988                 :                : 
    2989         [ #  # ]:              0 :     if (len % 16 != 0)
    2990                 :                :     {
    2991                 :                :         throw xlnt::exception("Invalid ECB plaintext length ("
    2992            [ # ]:              0 :             + std::to_string(len)
    2993      [ #  #  # ]:              0 :             + " bytes). Must be a multiple of 16 bytes.");
    2994                 :                :     }
    2995                 :                : 
    2996            [ # ]:              0 :     auto ciphertext = std::vector<std::uint8_t>(len);
    2997            [ # ]:              0 :     auto expanded_key = rijndael_setup(key);
    2998                 :              0 :     auto pt = plaintext.data() + offset;
    2999                 :              0 :     auto ct = ciphertext.data();
    3000                 :                : 
    3001         [ #  # ]:              0 :     while (len)
    3002                 :                :     {
    3003                 :              0 :         rijndael_ecb_encrypt(pt, ct, expanded_key);
    3004                 :                : 
    3005                 :              0 :         pt += 16;
    3006                 :              0 :         ct += 16;
    3007                 :              0 :         len -= 16;
    3008                 :                :     }
    3009                 :                : 
    3010                 :              0 :     return ciphertext;
    3011                 :              0 : }
    3012                 :                : 
    3013                 :CBC          56 : std::vector<std::uint8_t> aes_ecb_decrypt(
    3014                 :                :     const std::vector<std::uint8_t> &ciphertext,
    3015                 :                :     const std::vector<std::uint8_t> &key,
    3016                 :                :     const std::size_t offset)
    3017                 :                : {
    3018         [ -  + ]:             56 :     if (ciphertext.empty()) return {};
    3019                 :                : 
    3020                 :             56 :     auto len = ciphertext.size() - offset;
    3021                 :                : 
    3022         [ -  + ]:             56 :     if (len % 16 != 0)
    3023                 :                :     {
    3024                 :                :         throw xlnt::exception("Invalid ECB ciphertext length ("
    3025            [ # ]:UBC           0 :             + std::to_string(len)
    3026      [ #  #  # ]:              0 :             + " bytes). Must be a multiple of 16 bytes.");
    3027                 :                :     }
    3028                 :                : 
    3029            [ + ]:CBC          56 :     auto plaintext = std::vector<std::uint8_t>(len);
    3030            [ + ]:             56 :     auto expanded_key = rijndael_setup(key);
    3031                 :             56 :     auto ct = ciphertext.data() + offset;
    3032                 :             56 :     auto pt = plaintext.data();
    3033                 :                : 
    3034         [ +  + ]:           6757 :     while (len)
    3035                 :                :     {
    3036                 :           6701 :         rijndael_ecb_decrypt(ct, pt, expanded_key);
    3037                 :                : 
    3038                 :           6701 :         pt += 16;
    3039                 :           6701 :         ct += 16;
    3040                 :           6701 :         len -= 16;
    3041                 :                :     }
    3042                 :                : 
    3043                 :             56 :     return plaintext;
    3044                 :             56 : }
    3045                 :                : 
    3046                 :            128 : std::vector<std::uint8_t> aes_cbc_encrypt(
    3047                 :                :     const std::vector<std::uint8_t> &plaintext,
    3048                 :                :     const std::vector<std::uint8_t> &key,
    3049                 :                :     const std::vector<std::uint8_t> &original_iv,
    3050                 :                :     const std::size_t offset)
    3051                 :                : {
    3052         [ -  + ]:            128 :     if (plaintext.empty()) return {};
    3053                 :                : 
    3054                 :            128 :     auto len = plaintext.size() - offset;
    3055                 :                : 
    3056         [ -  + ]:            128 :     if (len % 16 != 0)
    3057                 :                :     {
    3058                 :                :         throw xlnt::exception("Invalid CBC plaintext length ("
    3059            [ # ]:UBC           0 :             + std::to_string(len)
    3060      [ #  #  # ]:              0 :             + " bytes). Must be a multiple of 16 bytes.");
    3061                 :                :     }
    3062                 :                : 
    3063            [ + ]:CBC         128 :     auto ciphertext = std::vector<std::uint8_t>(len);
    3064            [ + ]:            128 :     auto expanded_key = rijndael_setup(key);
    3065                 :            128 :     auto ct = ciphertext.data();
    3066                 :            128 :     auto pt = plaintext.data() + offset;
    3067            [ + ]:            128 :     auto iv_vec = original_iv;
    3068                 :            128 :     auto iv = iv_vec.data();
    3069                 :                : 
    3070         [ +  + ]:          32896 :     while (len)
    3071                 :                :     {
    3072         [ +  + ]:         557056 :         for (auto x = 0; x < 16; x++)
    3073                 :                :         {
    3074                 :         524288 :             iv[x] ^= pt[x];
    3075                 :                :         }
    3076                 :                : 
    3077                 :          32768 :         rijndael_ecb_encrypt(iv, ct, expanded_key);
    3078                 :                : 
    3079         [ +  + ]:         557056 :         for (auto x = 0; x < 16; x++)
    3080                 :                :         {
    3081                 :         524288 :             iv[x] = ct[x];
    3082                 :                :         }
    3083                 :                : 
    3084                 :          32768 :         pt += 16;
    3085                 :          32768 :         ct += 16;
    3086                 :          32768 :         len -= 16;
    3087                 :                :     }
    3088                 :                : 
    3089                 :            128 :     return ciphertext;
    3090                 :            128 : }
    3091                 :                : 
    3092                 :            276 : std::vector<std::uint8_t> aes_cbc_decrypt(
    3093                 :                :     const std::vector<std::uint8_t> &ciphertext,
    3094                 :                :     const std::vector<std::uint8_t> &key,
    3095                 :                :     const std::vector<std::uint8_t> &original_iv,
    3096                 :                :     const std::size_t offset)
    3097                 :                : {
    3098         [ -  + ]:            276 :     if (ciphertext.empty()) return {};
    3099                 :                : 
    3100                 :            276 :     auto len = ciphertext.size() - offset;
    3101                 :                : 
    3102         [ -  + ]:            276 :     if (ciphertext.size() % 16 != 0)
    3103                 :                :     {
    3104                 :                :         throw xlnt::exception("Invalid ECB ciphertext length ("
    3105            [ # ]:UBC           0 :             + std::to_string(len)
    3106      [ #  #  # ]:              0 :             + " bytes). Must be a multiple of 16 bytes.");
    3107                 :                :     }
    3108                 :                : 
    3109                 :CBC         276 :     std::array<std::uint8_t, 16> temporary{{0}};
    3110                 :                : 
    3111            [ + ]:            276 :     auto plaintext = std::vector<std::uint8_t>(len);
    3112            [ + ]:            276 :     auto expanded_key = rijndael_setup(key);
    3113                 :            276 :     auto ct = ciphertext.data() + offset;
    3114                 :            276 :     auto pt = plaintext.data();
    3115            [ + ]:            276 :     auto iv_vec = original_iv;
    3116                 :            276 :     auto iv = iv_vec.data();
    3117                 :                : 
    3118         [ +  + ]:          63822 :     while (len)
    3119                 :                :     {
    3120                 :          63546 :         rijndael_ecb_decrypt(ct, temporary.data(), expanded_key);
    3121                 :                : 
    3122         [ +  + ]:        1080282 :         for (auto x = std::size_t(0); x < 16; x++)
    3123                 :                :         {
    3124                 :        1016736 :             auto tmpy = static_cast<std::uint8_t>(temporary[x] ^ iv[x]);
    3125                 :        1016736 :             iv[x] = ct[x];
    3126                 :        1016736 :             pt[x] = tmpy;
    3127                 :                :         }
    3128                 :                : 
    3129                 :          63546 :         pt += 16;
    3130                 :          63546 :         ct += 16;
    3131                 :          63546 :         len -= 16;
    3132                 :                :     }
    3133                 :                : 
    3134                 :            276 :     return plaintext;
    3135                 :            276 : }
    3136                 :                : 
    3137                 :                : } // namespace detail
    3138                 :                : } // namespace xlnt
        

Generated by: LCOV version 2.3.1-beta