OXYGENHUB

Strata: the cloud stores send through ureq, so every release target links 2cd40ea1c04c

object_store's own client is reqwest, whose rustls verifies through the
platform (0.13: the native root store), which on macOS means Apple
frameworks the cross build cannot link. The stores now use object_store
0.14's provider features without reqwest, with an HttpConnector over
ureq on rustls with the web roots, the client oxy-core itself uses; the
bucket's region is asked of S3 directly. Signing is with ring.

Two dependencies are patched in vendor/ (each with a PATCHED.md):
crc-fast built as a plain library (cargo builds every crate type of a
dependency, and its cdylib does not link for macOS), and iana-time-zone
reading /etc/localtime on Apple targets instead of CoreFoundation (it
comes with chrono's clock feature; the stores only use UTC).

refs #63
Author
Andy McCall @andymccall <[email protected]>
When
· 2026-10-04 00:35 UTC
Signature
✔ signed by Andy McCall
Hash
2cd40ea1c04ce736e8b99f03b5f46b8913016be4e32de748716ce42adea4b0e2
Depends on
135212de5370 2b5ee371060e 37c299cec358 750251b21a96 8d80356371c5 e993a086c13f f874dc8659c2 ff0af1ee299d
Depended on by
e5f8eb2a2006 2ddd471651cd 7026bd7dc5b8 396891fd2dda
In bookmarks
agents-in-readme bare-hashes carried-not-removed carry-identical doctor-trust identical-sides keyless-tags main merge-remote-bookmark only-help-103 paths-for-resolutions-and-amend push-notes show-stat subrepo-pin-state switch-says
In tags
v0.10.0 v0.11.0 v0.4.0 v0.4.1 v0.4.2 v0.4.3 v0.4.4 v0.4.5 v0.4.6 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
Edits
155 atoms, 150 tree operations, 124 files

Browse the tree at this change

added crates/oxy-strata/src/http.rs +140 −0
1 +
//! The HTTP client the cloud stores send their requests through: `ureq`
2 +
//! on rustls with the web roots, the client oxy-core itself uses, so the
3 +
//! stores cross-compile for every target oxy is released for. Each
4 +
//! request runs on the runtime's blocking pool; bodies are held whole,
5 +
//! which is how the stores use them (a bundle, a record, a listing).
6 +
7 +
use async_trait::async_trait;
8 +
use bytes::Bytes;
9 +
use http_body_util::{BodyExt, Full};
10 +
use object_store::client::{
11 +
    ClientOptions, HttpClient, HttpConnector, HttpError, HttpErrorKind, HttpRequest, HttpResponse,
12 +
    HttpResponseBody, HttpService,
13 +
};
14 +
use std::io::Read;
15 +
use std::time::Duration;
16 +
17 +
/// How long a request may take in all, and to connect.
18 +
const TIMEOUT: Duration = Duration::from_secs(600);
19 +
const CONNECT_TIMEOUT: Duration = Duration::from_secs(30);
20 +
21 +
/// A rustls configuration trusting the web roots.
22 +
fn tls() -> Result<std::sync::Arc<rustls::ClientConfig>, String> {
23 +
    oxy_core::protocol::tls_client_config(None).map_err(|e| e.to_string())
24 +
}
25 +
26 +
/// Make the agent every request of a store goes through.
27 +
pub fn agent() -> Result<ureq::Agent, String> {
28 +
    Ok(ureq::AgentBuilder::new()
29 +
        .tls_config(tls()?)
30 +
        .timeout_connect(CONNECT_TIMEOUT)
31 +
        .timeout(TIMEOUT)
32 +
        .build())
33 +
}
34 +
35 +
#[derive(Debug, Clone, Copy, Default)]
36 +
pub struct UreqConnector;
37 +
38 +
impl HttpConnector for UreqConnector {
39 +
    fn connect(&self, _options: &ClientOptions) -> object_store::Result<HttpClient> {
40 +
        let agent = agent().map_err(|e| object_store::Error::Generic {
41 +
            store: "ureq",
42 +
            source: e.into(),
43 +
        })?;
44 +
        Ok(HttpClient::new(UreqService { agent }))
45 +
    }
46 +
}
47 +
48 +
#[derive(Debug, Clone)]
49 +
struct UreqService {
50 +
    agent: ureq::Agent,
51 +
}
52 +
53 +
#[async_trait]
54 +
impl HttpService for UreqService {
55 +
    async fn call(&self, req: HttpRequest) -> Result<HttpResponse, HttpError> {
56 +
        let (parts, body) = req.into_parts();
57 +
        let bytes = body.collect().await?.to_bytes();
58 +
        let agent = self.agent.clone();
59 +
        tokio::task::spawn_blocking(move || send(&agent, parts, &bytes))
60 +
            .await
61 +
            .map_err(|e| HttpError::new(HttpErrorKind::Interrupted, e))?
62 +
    }
63 +
}
64 +
65 +
fn send(
66 +
    agent: &ureq::Agent,
67 +
    parts: http::request::Parts,
68 +
    bytes: &[u8],
69 +
) -> Result<HttpResponse, HttpError> {
70 +
    let url = parts.uri.to_string();
71 +
    let mut r = agent.request(parts.method.as_str(), &url);
72 +
    for (name, value) in &parts.headers {
73 +
        if let Ok(v) = value.to_str() {
74 +
            r = r.set(name.as_str(), v);
75 +
        }
76 +
    }
77 +
    let sent = if bytes.is_empty()
78 +
        && matches!(
79 +
            parts.method,
80 +
            http::Method::GET | http::Method::HEAD | http::Method::DELETE
81 +
        ) {
82 +
        r.call()
83 +
    } else {
84 +
        r.send_bytes(bytes)
85 +
    };
86 +
    let resp = match sent {
87 +
        Ok(resp) => resp,
88 +
        // A refusal is a response the store interprets (a 404, a 412).
89 +
        Err(ureq::Error::Status(_, resp)) => resp,
90 +
        Err(ureq::Error::Transport(t)) => {
91 +
            let kind = match t.kind() {
92 +
                ureq::ErrorKind::Dns
93 +
                | ureq::ErrorKind::ConnectionFailed
94 +
                | ureq::ErrorKind::ProxyConnect => HttpErrorKind::Connect,
95 +
                ureq::ErrorKind::Io => HttpErrorKind::Timeout,
96 +
                _ => HttpErrorKind::Request,
97 +
            };
98 +
            return Err(HttpError::new(kind, t));
99 +
        }
100 +
    };
101 +
    let status = http::StatusCode::from_u16(resp.status())
102 +
        .map_err(|e| HttpError::new(HttpErrorKind::Decode, e))?;
103 +
    let mut builder = http::Response::builder().status(status);
104 +
    for name in resp.headers_names() {
105 +
        for value in resp.all(&name) {
106 +
            builder = builder.header(name.as_str(), value);
107 +
        }
108 +
    }
109 +
    let mut body = Vec::new();
110 +
    resp.into_reader()
111 +
        .read_to_end(&mut body)
112 +
        .map_err(|e| HttpError::new(HttpErrorKind::Decode, e))?;
113 +
    let body = HttpResponseBody::new(
114 +
        Full::new(Bytes::from(body)).map_err(|never: std::convert::Infallible| match never {}),
115 +
    );
116 +
    builder
117 +
        .body(body)
118 +
        .map_err(|e| HttpError::new(HttpErrorKind::Decode, e))
119 +
}
120 +
121 +
/// The region that holds an S3 bucket, as S3 itself reports it in
122 +
/// `x-amz-bucket-region` on any request, even a refused one.
123 +
pub fn bucket_region(bucket: &str) -> Option<String> {
124 +
    let agent = ureq::AgentBuilder::new()
125 +
        .tls_config(tls().ok()?)
126 +
        .timeout(Duration::from_secs(30))
127 +
        .redirects(0)
128 +
        .build();
129 +
    // S3's wildcard certificate covers one label: dotted names go by path.
130 +
    let url = if bucket.contains('.') {
131 +
        format!("https://s3.amazonaws.com/{bucket}")
132 +
    } else {
133 +
        format!("https://{bucket}.s3.amazonaws.com")
134 +
    };
135 +
    let resp = match agent.head(&url).call() {
136 +
        Ok(r) | Err(ureq::Error::Status(_, r)) => r,
137 +
        Err(_) => return None,
138 +
    };
139 +
    resp.header("x-amz-bucket-region").map(str::to_string)
140 +
}
added vendor/crc-fast/.github/PULL_REQUEST_TEMPLATE.md +28 −0
1 +
## The Problem
2 +
3 +
[ What are you trying to solve? Why are you trying to solve it? ]
4 +
5 +
## The Solution
6 +
7 +
[ How are you fixing the problem? High-level explanation. ]
8 +
9 +
### Changes
10 +
11 +
[ A more detailed explanation of the solution to guide reviewers. Point out tricky or magic areas. ]
12 +
13 +
### Planned version bump
14 +
15 +
- Which: [ `MAJOR`, `MINOR`, `PATCH` ]
16 +
- Why: [ non-breaking bug fix, doc change, test coverage, formatting, debugging, profiling, security fix, internal change, experimental change, non-breaking new functionality, breaking change, etc ]
17 +
18 +
### Links
19 +
20 +
* [ Any important other PRs, Issues, PRs, etc? ]
21 +
22 +
## Notes
23 +
24 +
[ @mentions for anyone who should be alerted to this PR ]
25 +
26 +
[ **Please assign reviewers if you want someone specific to review this** ]
27 +
28 +
[ **Please do not forget to add labels specific to this PR** ]
added vendor/crc-fast/.github/workflows/release.yml +706 −0
1 +
name: Release
2 +
3 +
on:
4 +
  workflow_run:
5 +
    workflows: [Tests]
6 +
    types:
7 +
      - completed
8 +
  workflow_dispatch:
9 +
10 +
permissions:
11 +
  contents: write
12 +
13 +
jobs:
14 +
  check-trigger:
15 +
    name: Check if triggered by tag
16 +
    runs-on: ubuntu-latest
17 +
    if: github.event.workflow_run.conclusion == 'success'
18 +
    outputs:
19 +
      is_tag: ${{ steps.check.outputs.is_tag }}
20 +
      tag_name: ${{ steps.check.outputs.tag_name }}
21 +
    steps:
22 +
      - name: Check if workflow was triggered by a version tag
23 +
        id: check
24 +
        env:
25 +
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
26 +
        run: |
27 +
          echo "Workflow run event: ${{ github.event.workflow_run.event }}"
28 +
          echo "Head branch: ${{ github.event.workflow_run.head_branch }}"
29 +
          echo "Head SHA: ${{ github.event.workflow_run.head_sha }}"
30 +
          
31 +
          # Get tags for this commit
32 +
          TAGS=$(gh api repos/${{ github.repository }}/git/refs/tags --jq '.[] | select(.object.sha == "${{ github.event.workflow_run.head_sha }}") | .ref' | sed 's|refs/tags/||')
33 +
          
34 +
          if [ -z "$TAGS" ]; then
35 +
            echo "No tags found for this commit"
36 +
            echo "is_tag=false" >> $GITHUB_OUTPUT
37 +
          else
38 +
            # Check if any tag matches version pattern
39 +
            VERSION_TAG=$(echo "$TAGS" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)
40 +
            if [ -n "$VERSION_TAG" ]; then
41 +
              echo "Found version tag: $VERSION_TAG"
42 +
              echo "is_tag=true" >> $GITHUB_OUTPUT
43 +
              echo "tag_name=$VERSION_TAG" >> $GITHUB_OUTPUT
44 +
            else
45 +
              echo "Tags found but none match version pattern"
46 +
              echo "is_tag=false" >> $GITHUB_OUTPUT
47 +
            fi
48 +
          fi
49 +
50 +
  validate:
51 +
    name: Validate
52 +
    needs: check-trigger
53 +
    if: needs.check-trigger.outputs.is_tag == 'true'
54 +
    runs-on: ubuntu-latest
55 +
    timeout-minutes: 60
56 +
    outputs:
57 +
      tag_name: ${{ needs.check-trigger.outputs.tag_name }}
58 +
    steps:
59 +
      - name: Checkout code
60 +
        uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
61 +
        with:
62 +
          ref: ${{ github.event.workflow_run.head_sha }}
63 +
64 +
      - name: Setup Rust toolchain
65 +
        uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # pinned commit for 1.15.2
66 +
        with:
67 +
          toolchain: stable
68 +
          components: rustfmt, clippy
69 +
70 +
      - name: Check code formatting
71 +
        run: cargo fmt --check
72 +
73 +
      - name: Run clippy
74 +
        run: cargo clippy -- -D warnings
75 +
76 +
      - name: Run tests
77 +
        run: cargo test
78 +
79 +
  build:
80 +
    name: Build ${{ matrix.platform }}-${{ matrix.arch }}
81 +
    needs: validate
82 +
    runs-on: ${{ matrix.os }}
83 +
    env:
84 +
      TAG_NAME: ${{ needs.validate.outputs.tag_name }}
85 +
    strategy:
86 +
      fail-fast: false
87 +
      matrix:
88 +
        include:
89 +
          - target: x86_64-unknown-linux-gnu
90 +
            os: ubuntu-22.04
91 +
            platform: linux
92 +
            arch: x86_64
93 +
            ext: tar.gz
94 +
95 +
          - target: i686-unknown-linux-gnu
96 +
            os: ubuntu-22.04
97 +
            platform: linux
98 +
            arch: x86
99 +
            ext: tar.gz
100 +
101 +
          - target: aarch64-unknown-linux-gnu
102 +
            os: ubuntu-22.04-arm
103 +
            platform: linux
104 +
            arch: aarch64
105 +
            ext: tar.gz
106 +
107 +
          - target: aarch64-apple-darwin
108 +
            os: macos-14
109 +
            platform: macos
110 +
            arch: aarch64
111 +
            ext: tar.gz
112 +
113 +
          - target: x86_64-pc-windows-msvc
114 +
            os: windows-2022
115 +
            platform: windows
116 +
            arch: x86_64
117 +
            ext: zip
118 +
119 +
          - target: i686-pc-windows-msvc
120 +
            os: windows-2022
121 +
            platform: windows
122 +
            arch: x86
123 +
            ext: zip
124 +
125 +
          - target: aarch64-pc-windows-msvc
126 +
            os: windows-11-arm
127 +
            platform: windows
128 +
            arch: aarch64
129 +
            ext: zip
130 +
    steps:
131 +
      - name: Checkout code
132 +
        uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
133 +
134 +
      - name: Setup Rust toolchain
135 +
        uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # pinned commit for 1.15.2
136 +
        with:
137 +
          toolchain: stable
138 +
139 +
      - name: Install cross
140 +
        if: matrix.target == 'i686-unknown-linux-gnu'
141 +
        run: cargo install cross --git https://github.com/cross-rs/cross
142 +
143 +
      - name: Build release binaries (native)
144 +
        if: matrix.target != 'i686-unknown-linux-gnu'
145 +
        run: cargo build --all-features --release --target ${{ matrix.target }}
146 +
147 +
      - name: Build release binaries (cross)
148 +
        if: matrix.target == 'i686-unknown-linux-gnu'
149 +
        run: cross build --all-features --release --target ${{ matrix.target }}
150 +
151 +
      - name: Verify library files (Unix)
152 +
        if: runner.os != 'Windows'
153 +
        shell: bash
154 +
        run: |
155 +
          echo "Verifying library files..."
156 +
          if [ "${{ matrix.platform }}" = "linux" ]; then
157 +
            test -f target/${{ matrix.target }}/release/libcrc_fast.so || { echo "Missing libcrc_fast.so"; exit 1; }
158 +
            test -f target/${{ matrix.target }}/release/libcrc_fast.a || { echo "Missing libcrc_fast.a"; exit 1; }
159 +
            echo "✓ Found libcrc_fast.so and libcrc_fast.a"
160 +
          elif [ "${{ matrix.platform }}" = "macos" ]; then
161 +
            test -f target/${{ matrix.target }}/release/libcrc_fast.dylib || { echo "Missing libcrc_fast.dylib"; exit 1; }
162 +
            test -f target/${{ matrix.target }}/release/libcrc_fast.a || { echo "Missing libcrc_fast.a"; exit 1; }
163 +
            echo "✓ Found libcrc_fast.dylib and libcrc_fast.a"
164 +
          fi
165 +
166 +
      - name: Verify library files (Windows)
167 +
        if: runner.os == 'Windows'
168 +
        shell: pwsh
169 +
        run: |
170 +
          Write-Host "Verifying library files..."
171 +
          if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.dll")) {
172 +
            Write-Error "Missing crc_fast.dll"
173 +
            exit 1
174 +
          }
175 +
          if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.dll.lib")) {
176 +
            Write-Error "Missing crc_fast.dll.lib"
177 +
            exit 1
178 +
          }
179 +
          if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.lib")) {
180 +
            Write-Error "Missing crc_fast.lib"
181 +
            exit 1
182 +
          }
183 +
          Write-Host "✓ Found crc_fast.dll, crc_fast.dll.lib, and crc_fast.lib"
184 +
185 +
      - name: Verify CLI binaries (Unix)
186 +
        if: runner.os != 'Windows'
187 +
        shell: bash
188 +
        run: |
189 +
          echo "Verifying CLI binaries..."
190 +
          test -f target/${{ matrix.target }}/release/checksum || { echo "Missing checksum"; exit 1; }
191 +
          test -f target/${{ matrix.target }}/release/arch-check || { echo "Missing arch-check"; exit 1; }
192 +
          test -f target/${{ matrix.target }}/release/get-custom-params || { echo "Missing get-custom-params"; exit 1; }
193 +
          echo "✓ Found checksum, arch-check, and get-custom-params"
194 +
195 +
      - name: Verify CLI binaries (Windows)
196 +
        if: runner.os == 'Windows'
197 +
        shell: pwsh
198 +
        run: |
199 +
          Write-Host "Verifying CLI binaries..."
200 +
          if (-not (Test-Path "target/${{ matrix.target }}/release/checksum.exe")) {
201 +
            Write-Error "Missing checksum.exe"
202 +
            exit 1
203 +
          }
204 +
          if (-not (Test-Path "target/${{ matrix.target }}/release/arch-check.exe")) {
205 +
            Write-Error "Missing arch-check.exe"
206 +
            exit 1
207 +
          }
208 +
          if (-not (Test-Path "target/${{ matrix.target }}/release/get-custom-params.exe")) {
209 +
            Write-Error "Missing get-custom-params.exe"
210 +
            exit 1
211 +
          }
212 +
          Write-Host "✓ Found checksum.exe, arch-check.exe, and get-custom-params.exe"
213 +
214 +
      - name: Stage Linux package
215 +
        if: matrix.platform == 'linux'
216 +
        shell: bash
217 +
        run: |
218 +
          PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
219 +
          echo "Creating package directory structure for $PKG_NAME..."
220 +
          
221 +
          mkdir -p "$PKG_NAME/lib"
222 +
          mkdir -p "$PKG_NAME/include"
223 +
          mkdir -p "$PKG_NAME/bin"
224 +
          
225 +
          echo "Copying library files..."
226 +
          cp target/${{ matrix.target }}/release/libcrc_fast.so "$PKG_NAME/lib/"
227 +
          cp target/${{ matrix.target }}/release/libcrc_fast.a "$PKG_NAME/lib/"
228 +
          
229 +
          echo "Copying header file..."
230 +
          cp libcrc_fast.h "$PKG_NAME/include/"
231 +
          
232 +
          echo "Copying CLI binaries..."
233 +
          cp target/${{ matrix.target }}/release/checksum "$PKG_NAME/bin/"
234 +
          cp target/${{ matrix.target }}/release/arch-check "$PKG_NAME/bin/"
235 +
          cp target/${{ matrix.target }}/release/get-custom-params "$PKG_NAME/bin/"
236 +
          
237 +
          echo "Setting executable permissions on binaries..."
238 +
          chmod +x "$PKG_NAME/bin/checksum"
239 +
          chmod +x "$PKG_NAME/bin/arch-check"
240 +
          chmod +x "$PKG_NAME/bin/get-custom-params"
241 +
          
242 +
          echo "Creating VERSION file..."
243 +
          echo "$TAG_NAME" > "$PKG_NAME/VERSION"
244 +
          
245 +
          echo "Creating README.txt..."
246 +
          cat > "$PKG_NAME/README.txt" <<EOF
247 +
          crc-fast Binary Distribution
248 +
          Version: $TAG_NAME
249 +
          Platform: Linux ${{ matrix.arch }}
250 +
          
251 +
          CONTENTS
252 +
          ========
253 +
          This package contains:
254 +
          - Dynamic library (libcrc_fast.so) and static library (libcrc_fast.a)
255 +
          - C/C++ header file (libcrc_fast.h)
256 +
          - Command-line utilities (checksum, arch-check, get-custom-params)
257 +
          
258 +
          INSTALLATION
259 +
          ============
260 +
          1. Extract this archive to your desired location
261 +
          2. Add the lib/ directory to your library path:
262 +
             export LD_LIBRARY_PATH=/path/to/crc-fast/lib:$LD_LIBRARY_PATH
263 +
          3. Add the bin/ directory to your PATH:
264 +
             export PATH=/path/to/crc-fast/bin:$PATH
265 +
          
266 +
          For system-wide installation (requires root):
267 +
            sudo cp lib/* /usr/local/lib/
268 +
            sudo cp include/* /usr/local/include/
269 +
            sudo cp bin/* /usr/local/bin/
270 +
            sudo ldconfig
271 +
          
272 +
          LINKING
273 +
          =======
274 +
          Dynamic linking:
275 +
            gcc your_program.c -lcrc_fast -L/path/to/crc-fast/lib -I/path/to/crc-fast/include
276 +
          
277 +
          Static linking:
278 +
            gcc your_program.c /path/to/crc-fast/lib/libcrc_fast.a -I/path/to/crc-fast/include
279 +
          
280 +
          USAGE
281 +
          =====
282 +
          Command-line tools:
283 +
            checksum --help           # Calculate CRC checksums
284 +
            arch-check                # Display CPU architecture features
285 +
            get-custom-params --help  # Generate CRC parameters
286 +
          
287 +
          DOCUMENTATION
288 +
          =============
289 +
          Full documentation: https://github.com/awesomized/crc-fast-rust
290 +
          
291 +
          LICENSE
292 +
          =======
293 +
          This software is dual-licensed under MIT OR Apache-2.0.
294 +
          See LICENSE-MIT and LICENSE-Apache files for details.
295 +
          EOF
296 +
          
297 +
          echo "Copying license files..."
298 +
          cp LICENSE-MIT "$PKG_NAME/"
299 +
          cp LICENSE-Apache "$PKG_NAME/"
300 +
          
301 +
          echo "✓ Linux package staged successfully"
302 +
          ls -lR "$PKG_NAME"
303 +
304 +
      - name: Create tar.gz package (Linux)
305 +
        if: matrix.platform == 'linux'
306 +
        shell: bash
307 +
        run: |
308 +
          PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
309 +
          ARCHIVE_NAME="${PKG_NAME}.tar.gz"
310 +
          
311 +
          echo "Creating compressed archive: $ARCHIVE_NAME"
312 +
          tar -czf "$ARCHIVE_NAME" "$PKG_NAME"
313 +
          
314 +
          echo "Verifying archive was created..."
315 +
          test -f "$ARCHIVE_NAME" || { echo "Failed to create $ARCHIVE_NAME"; exit 1; }
316 +
          
317 +
          echo "Archive details:"
318 +
          ls -lh "$ARCHIVE_NAME"
319 +
          
320 +
          echo "✓ tar.gz package created successfully"
321 +
322 +
      - name: Generate SHA256 checksum (Linux)
323 +
        if: matrix.platform == 'linux'
324 +
        shell: bash
325 +
        run: |
326 +
          ARCHIVE_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}.tar.gz"
327 +
          CHECKSUM_FILE="${ARCHIVE_NAME}.sha256"
328 +
          
329 +
          echo "Generating SHA256 checksum for $ARCHIVE_NAME..."
330 +
          sha256sum "$ARCHIVE_NAME" > "$CHECKSUM_FILE"
331 +
          
332 +
          echo "Verifying checksum file was created..."
333 +
          test -f "$CHECKSUM_FILE" || { echo "Failed to create $CHECKSUM_FILE"; exit 1; }
334 +
          
335 +
          echo "Checksum file contents:"
336 +
          cat "$CHECKSUM_FILE"
337 +
          
338 +
          echo "✓ SHA256 checksum generated successfully"
339 +
340 +
      - name: Stage macOS package
341 +
        if: matrix.platform == 'macos'
342 +
        shell: bash
343 +
        run: |
344 +
          PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
345 +
          echo "Creating package directory structure for $PKG_NAME..."
346 +
          
347 +
          mkdir -p "$PKG_NAME/lib"
348 +
          mkdir -p "$PKG_NAME/include"
349 +
          mkdir -p "$PKG_NAME/bin"
350 +
          
351 +
          echo "Copying library files..."
352 +
          cp target/${{ matrix.target }}/release/libcrc_fast.dylib "$PKG_NAME/lib/"
353 +
          cp target/${{ matrix.target }}/release/libcrc_fast.a "$PKG_NAME/lib/"
354 +
          
355 +
          echo "Copying header file..."
356 +
          cp libcrc_fast.h "$PKG_NAME/include/"
357 +
          
358 +
          echo "Copying CLI binaries..."
359 +
          cp target/${{ matrix.target }}/release/checksum "$PKG_NAME/bin/"
360 +
          cp target/${{ matrix.target }}/release/arch-check "$PKG_NAME/bin/"
361 +
          cp target/${{ matrix.target }}/release/get-custom-params "$PKG_NAME/bin/"
362 +
          
363 +
          echo "Setting executable permissions on binaries..."
364 +
          chmod +x "$PKG_NAME/bin/checksum"
365 +
          chmod +x "$PKG_NAME/bin/arch-check"
366 +
          chmod +x "$PKG_NAME/bin/get-custom-params"
367 +
          
368 +
          echo "Creating VERSION file..."
369 +
          echo "$TAG_NAME" > "$PKG_NAME/VERSION"
370 +
          
371 +
          echo "Creating README.txt..."
372 +
          cat > "$PKG_NAME/README.txt" <<EOF
373 +
          crc-fast Binary Distribution
374 +
          Version: $TAG_NAME
375 +
          Platform: macOS ${{ matrix.arch }}
376 +
          
377 +
          CONTENTS
378 +
          ========
379 +
          This package contains:
380 +
          - Dynamic library (libcrc_fast.dylib) and static library (libcrc_fast.a)
381 +
          - C/C++ header file (libcrc_fast.h)
382 +
          - Command-line utilities (checksum, arch-check, get-custom-params)
383 +
          
384 +
          INSTALLATION
385 +
          ============
386 +
          1. Extract this archive to your desired location
387 +
          2. Add the lib/ directory to your library path:
388 +
             export DYLD_LIBRARY_PATH=/path/to/crc-fast/lib:$DYLD_LIBRARY_PATH
389 +
          3. Add the bin/ directory to your PATH:
390 +
             export PATH=/path/to/crc-fast/bin:$PATH
391 +
          
392 +
          For system-wide installation:
393 +
            sudo cp lib/* /usr/local/lib/
394 +
            sudo cp include/* /usr/local/include/
395 +
            sudo cp bin/* /usr/local/bin/
396 +
          
397 +
          LINKING
398 +
          =======
399 +
          Dynamic linking:
400 +
            clang your_program.c -lcrc_fast -L/path/to/crc-fast/lib -I/path/to/crc-fast/include
401 +
          
402 +
          Static linking:
403 +
            clang your_program.c /path/to/crc-fast/lib/libcrc_fast.a -I/path/to/crc-fast/include
404 +
          
405 +
          USAGE
406 +
          =====
407 +
          Command-line tools:
408 +
            checksum --help           # Calculate CRC checksums
409 +
            arch-check                # Display CPU architecture features
410 +
            get-custom-params --help  # Generate CRC parameters
411 +
          
412 +
          DOCUMENTATION
413 +
          =============
414 +
          Full documentation: https://github.com/awesomized/crc-fast-rust
415 +
          
416 +
          LICENSE
417 +
          =======
418 +
          This software is dual-licensed under MIT OR Apache-2.0.
419 +
          See LICENSE-MIT and LICENSE-Apache files for details.
420 +
          EOF
421 +
          
422 +
          echo "Copying license files..."
423 +
          cp LICENSE-MIT "$PKG_NAME/"
424 +
          cp LICENSE-Apache "$PKG_NAME/"
425 +
          
426 +
          echo "✓ macOS package staged successfully"
427 +
          ls -lR "$PKG_NAME"
428 +
429 +
      - name: Create tar.gz package (macOS)
430 +
        if: matrix.platform == 'macos'
431 +
        shell: bash
432 +
        run: |
433 +
          PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
434 +
          ARCHIVE_NAME="${PKG_NAME}.tar.gz"
435 +
          
436 +
          echo "Creating compressed archive: $ARCHIVE_NAME"
437 +
          tar -czf "$ARCHIVE_NAME" "$PKG_NAME"
438 +
          
439 +
          echo "Verifying archive was created..."
440 +
          test -f "$ARCHIVE_NAME" || { echo "Failed to create $ARCHIVE_NAME"; exit 1; }
441 +
          
442 +
          echo "Archive details:"
443 +
          ls -lh "$ARCHIVE_NAME"
444 +
          
445 +
          echo "✓ tar.gz package created successfully"
446 +
447 +
      - name: Generate SHA256 checksum (macOS)
448 +
        if: matrix.platform == 'macos'
449 +
        shell: bash
450 +
        run: |
451 +
          ARCHIVE_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}.tar.gz"
452 +
          CHECKSUM_FILE="${ARCHIVE_NAME}.sha256"
453 +
          
454 +
          echo "Generating SHA256 checksum for $ARCHIVE_NAME..."
455 +
          shasum -a 256 "$ARCHIVE_NAME" > "$CHECKSUM_FILE"
456 +
          
457 +
          echo "Verifying checksum file was created..."
458 +
          test -f "$CHECKSUM_FILE" || { echo "Failed to create $CHECKSUM_FILE"; exit 1; }
459 +
          
460 +
          echo "Checksum file contents:"
461 +
          cat "$CHECKSUM_FILE"
462 +
          
463 +
          echo "✓ SHA256 checksum generated successfully"
464 +
465 +
      - name: Stage Windows package
466 +
        if: matrix.platform == 'windows'
467 +
        shell: pwsh
468 +
        run: |
469 +
          $PKG_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
470 +
          Write-Host "Creating package directory structure for $PKG_NAME..."
471 +
          
472 +
          New-Item -ItemType Directory -Path "$PKG_NAME/bin" -Force | Out-Null
473 +
          New-Item -ItemType Directory -Path "$PKG_NAME/lib" -Force | Out-Null
474 +
          New-Item -ItemType Directory -Path "$PKG_NAME/include" -Force | Out-Null
475 +
          
476 +
          Write-Host "Copying library files..."
477 +
          Copy-Item "target/${{ matrix.target }}/release/crc_fast.dll" "$PKG_NAME/bin/"
478 +
          Copy-Item "target/${{ matrix.target }}/release/crc_fast.dll.lib" "$PKG_NAME/lib/"
479 +
          Copy-Item "target/${{ matrix.target }}/release/crc_fast.lib" "$PKG_NAME/lib/"
480 +
          
481 +
          Write-Host "Copying header file..."
482 +
          Copy-Item "libcrc_fast.h" "$PKG_NAME/include/"
483 +
          
484 +
          Write-Host "Copying CLI binaries..."
485 +
          Copy-Item "target/${{ matrix.target }}/release/checksum.exe" "$PKG_NAME/bin/"
486 +
          Copy-Item "target/${{ matrix.target }}/release/arch-check.exe" "$PKG_NAME/bin/"
487 +
          Copy-Item "target/${{ matrix.target }}/release/get-custom-params.exe" "$PKG_NAME/bin/"
488 +
          
489 +
          Write-Host "Creating VERSION file..."
490 +
          "$env:TAG_NAME" | Out-File -FilePath "$PKG_NAME/VERSION" -Encoding utf8 -NoNewline
491 +
          
492 +
          Write-Host "Creating README.txt..."
493 +
          @"
494 +
          crc-fast Binary Distribution
495 +
          Version: $env:TAG_NAME
496 +
          Platform: Windows ${{ matrix.arch }}
497 +
          
498 +
          CONTENTS
499 +
          ========
500 +
          This package contains:
501 +
          - Dynamic library (crc_fast.dll) with import library (crc_fast.dll.lib)
502 +
          - Static library (crc_fast.lib)
503 +
          - C/C++ header file (libcrc_fast.h)
504 +
          - Command-line utilities (checksum.exe, arch-check.exe, get-custom-params.exe)
505 +
          
506 +
          INSTALLATION
507 +
          ============
508 +
          1. Extract this archive to your desired location
509 +
          2. Add the bin\ directory to your PATH environment variable:
510 +
             - Open System Properties > Environment Variables
511 +
             - Edit the PATH variable and add: C:\path\to\crc-fast\bin
512 +
          
513 +
          For development:
514 +
            - Add lib\ directory to your linker library path
515 +
            - Add include\ directory to your compiler include path
516 +
          
517 +
          LINKING
518 +
          =======
519 +
          Dynamic linking (MSVC):
520 +
            cl your_program.c /I"C:\path\to\crc-fast\include" /link crc_fast.dll.lib /LIBPATH:"C:\path\to\crc-fast\lib"
521 +
            Note: crc_fast.dll must be in PATH or same directory as your executable
522 +
          
523 +
          Static linking (MSVC):
524 +
            cl your_program.c /I"C:\path\to\crc-fast\include" /link crc_fast.lib /LIBPATH:"C:\path\to\crc-fast\lib"
525 +
          
526 +
          Dynamic linking (MinGW):
527 +
            gcc your_program.c -I"C:\path\to\crc-fast\include" -L"C:\path\to\crc-fast\lib" -lcrc_fast
528 +
          
529 +
          USAGE
530 +
          =====
531 +
          Command-line tools:
532 +
            checksum.exe --help           # Calculate CRC checksums
533 +
            arch-check.exe                # Display CPU architecture features
534 +
            get-custom-params.exe --help  # Generate CRC parameters
535 +
          
536 +
          DOCUMENTATION
537 +
          =============
538 +
          Full documentation: https://github.com/awesomized/crc-fast-rust
539 +
          
540 +
          LICENSE
541 +
          =======
542 +
          This software is dual-licensed under MIT OR Apache-2.0.
543 +
          See LICENSE-MIT and LICENSE-Apache files for details.
544 +
          "@ | Out-File -FilePath "$PKG_NAME/README.txt" -Encoding utf8
545 +
          
546 +
          Write-Host "Copying license files..."
547 +
          Copy-Item "LICENSE-MIT" "$PKG_NAME/"
548 +
          Copy-Item "LICENSE-Apache" "$PKG_NAME/"
549 +
          
550 +
          Write-Host "✓ Windows package staged successfully"
551 +
          Get-ChildItem -Recurse "$PKG_NAME"
552 +
553 +
      - name: Create zip package (Windows)
554 +
        if: matrix.platform == 'windows'
555 +
        shell: pwsh
556 +
        run: |
557 +
          $PKG_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
558 +
          $ARCHIVE_NAME = "${PKG_NAME}.zip"
559 +
          
560 +
          Write-Host "Creating compressed archive: $ARCHIVE_NAME"
561 +
          Compress-Archive -Path "$PKG_NAME" -DestinationPath "$ARCHIVE_NAME" -CompressionLevel Optimal
562 +
          
563 +
          Write-Host "Verifying archive was created..."
564 +
          if (-not (Test-Path "$ARCHIVE_NAME")) {
565 +
            Write-Error "Failed to create $ARCHIVE_NAME"
566 +
            exit 1
567 +
          }
568 +
          
569 +
          Write-Host "Archive details:"
570 +
          Get-Item "$ARCHIVE_NAME" | Format-List Name, Length, LastWriteTime
571 +
          
572 +
          Write-Host "✓ zip package created successfully"
573 +
574 +
      - name: Generate SHA256 checksum (Windows)
575 +
        if: matrix.platform == 'windows'
576 +
        shell: pwsh
577 +
        run: |
578 +
          $ARCHIVE_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}.zip"
579 +
          $CHECKSUM_FILE = "${ARCHIVE_NAME}.sha256"
580 +
          
581 +
          Write-Host "Generating SHA256 checksum for $ARCHIVE_NAME..."
582 +
          $hash = (Get-FileHash -Path "$ARCHIVE_NAME" -Algorithm SHA256).Hash.ToLower()
583 +
          "$hash  $ARCHIVE_NAME" | Out-File -FilePath "$CHECKSUM_FILE" -Encoding utf8 -NoNewline
584 +
          
585 +
          Write-Host "Verifying checksum file was created..."
586 +
          if (-not (Test-Path "$CHECKSUM_FILE")) {
587 +
            Write-Error "Failed to create $CHECKSUM_FILE"
588 +
            exit 1
589 +
          }
590 +
          
591 +
          Write-Host "Checksum file contents:"
592 +
          Get-Content "$CHECKSUM_FILE"
593 +
          
594 +
          Write-Host "✓ SHA256 checksum generated successfully"
595 +
596 +
      - name: Upload package artifact
597 +
        uses: actions/upload-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust
598 +
        with:
599 +
          name: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}
600 +
          path: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}
601 +
          if-no-files-found: error
602 +
          retention-days: 90
603 +
604 +
      - name: Upload checksum artifact
605 +
        uses: actions/upload-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust
606 +
        with:
607 +
          name: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}.sha256
608 +
          path: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}.sha256
609 +
          if-no-files-found: error
610 +
          retention-days: 90
611 +
612 +
  publish:
613 +
    name: Publish
614 +
    needs: [validate, build]
615 +
    runs-on: ubuntu-latest
616 +
    env:
617 +
      TAG_NAME: ${{ needs.validate.outputs.tag_name }}
618 +
    steps:
619 +
      - name: Download all artifacts
620 +
        uses: actions/download-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust
621 +
        with:
622 +
          path: artifacts
623 +
          merge-multiple: false
624 +
625 +
      - name: Check for existing release
626 +
        id: check_release
627 +
        shell: bash
628 +
        env:
629 +
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
630 +
        run: |
631 +
          echo "Checking if release exists for tag: $TAG_NAME"
632 +
          
633 +
          RELEASE_DATA=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
634 +
            -H "Accept: application/vnd.github+json" \
635 +
            "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG_NAME")
636 +
          
637 +
          if echo "$RELEASE_DATA" | jq -e '.id' > /dev/null 2>&1; then
638 +
            RELEASE_ID=$(echo "$RELEASE_DATA" | jq -r '.id')
639 +
            echo "release_exists=true" >> $GITHUB_OUTPUT
640 +
            echo "release_id=$RELEASE_ID" >> $GITHUB_OUTPUT
641 +
            echo "✓ Release already exists with ID: $RELEASE_ID"
642 +
          else
643 +
            echo "release_exists=false" >> $GITHUB_OUTPUT
644 +
            echo "release_id=" >> $GITHUB_OUTPUT
645 +
            echo "✓ No existing release found for this tag"
646 +
          fi
647 +
648 +
      - name: Organize files for upload
649 +
        shell: bash
650 +
        run: |
651 +
          echo "Organizing downloaded artifacts..."
652 +
          
653 +
          mkdir -p release-assets
654 +
          
655 +
          echo "Moving packages and checksums to release-assets directory..."
656 +
          find artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.sha256" \) -exec mv {} release-assets/ \;
657 +
          
658 +
          echo "Release assets ready for upload:"
659 +
          ls -lh release-assets/
660 +
          
661 +
          echo "Verifying all expected files are present..."
662 +
          EXPECTED_FILES=(
663 +
            "crc-fast-$TAG_NAME-linux-x86_64.tar.gz"
664 +
            "crc-fast-$TAG_NAME-linux-x86_64.tar.gz.sha256"
665 +
            "crc-fast-$TAG_NAME-linux-x86.tar.gz"
666 +
            "crc-fast-$TAG_NAME-linux-x86.tar.gz.sha256"
667 +
            "crc-fast-$TAG_NAME-linux-aarch64.tar.gz"
668 +
            "crc-fast-$TAG_NAME-linux-aarch64.tar.gz.sha256"
669 +
            "crc-fast-$TAG_NAME-macos-aarch64.tar.gz"
670 +
            "crc-fast-$TAG_NAME-macos-aarch64.tar.gz.sha256"
671 +
            "crc-fast-$TAG_NAME-windows-x86_64.zip"
672 +
            "crc-fast-$TAG_NAME-windows-x86_64.zip.sha256"
673 +
            "crc-fast-$TAG_NAME-windows-x86.zip"
674 +
            "crc-fast-$TAG_NAME-windows-x86.zip.sha256"
675 +
            "crc-fast-$TAG_NAME-windows-aarch64.zip"
676 +
            "crc-fast-$TAG_NAME-windows-aarch64.zip.sha256"
677 +
          )
678 +
          
679 +
          MISSING_FILES=()
680 +
          for file in "${EXPECTED_FILES[@]}"; do
681 +
            if [ ! -f "release-assets/$file" ]; then
682 +
              MISSING_FILES+=("$file")
683 +
            fi
684 +
          done
685 +
          
686 +
          if [ ${#MISSING_FILES[@]} -gt 0 ]; then
687 +
            echo "ERROR: Missing expected files:"
688 +
            printf '%s\n' "${MISSING_FILES[@]}"
689 +
            exit 1
690 +
          fi
691 +
          
692 +
          echo "✓ All expected files are present"
693 +
          
694 +
          echo "Total number of files: $(ls -1 release-assets/ | wc -l)"
695 +
          echo "Total size: $(du -sh release-assets/ | cut -f1)"
696 +
697 +
      - name: Create or update GitHub release
698 +
        uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # pinned commit for 2.4.1
699 +
        with:
700 +
          files: release-assets/*
701 +
          draft: true
702 +
          prerelease: false
703 +
          fail_on_unmatched_files: true
704 +
          generate_release_notes: true
705 +
        env:
706 +
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
added vendor/crc-fast/.github/workflows/tests.yml +376 −0
1 +
name: Tests
2 +
3 +
on:
4 +
  push:
5 +
  pull_request:
6 +
  workflow_dispatch:
7 +
8 +
jobs:
9 +
  check-previous-run:
10 +
    name: Check for previous successful run
11 +
    runs-on: ubuntu-latest
12 +
    outputs:
13 +
      should_skip: ${{ steps.check.outputs.should_skip }}
14 +
    steps:
15 +
      - name: Check if commit was already tested
16 +
        id: check
17 +
        env:
18 +
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
19 +
        run: |
20 +
          echo "Current commit: ${{ github.sha }}"
21 +
          echo "Current ref: ${{ github.ref }}"
22 +
          
23 +
          # Check if there's a previous successful workflow run for this exact commit
24 +
          PREVIOUS_RUN=$(gh api \
25 +
            -H "Accept: application/vnd.github+json" \
26 +
            "/repos/${{ github.repository }}/actions/workflows/tests.yml/runs?status=success&per_page=5" \
27 +
            --jq '.workflow_runs[] | select(.head_sha == "${{ github.sha }}") | .id' \
28 +
            | head -n 1)
29 +
          
30 +
          if [ -n "$PREVIOUS_RUN" ] && [ "$PREVIOUS_RUN" != "${{ github.run_id }}" ]; then
31 +
            echo "Found previous successful run: $PREVIOUS_RUN"
32 +
            echo "should_skip=true" >> $GITHUB_OUTPUT
33 +
          else
34 +
            echo "No previous successful run found for this commit"
35 +
            echo "should_skip=false" >> $GITHUB_OUTPUT
36 +
          fi
37 +
38 +
  test-aarch64:
39 +
    name: Test aarch64
40 +
    needs: check-previous-run
41 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
42 +
    strategy:
43 +
      matrix:
44 +
        os: [ubuntu-22.04-arm, ubuntu-24.04-arm, macos-14, macos-15, macos-26, macos-latest, windows-11-arm]
45 +
        rust-toolchain:
46 +
          - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
47 +
          - "stable"
48 +
          - "nightly"
49 +
    runs-on: ${{ matrix.os }}
50 +
    steps:
51 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
52 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
53 +
        with:
54 +
          toolchain: ${{ matrix.rust-toolchain }}
55 +
          components: rustfmt, clippy
56 +
          cache-key: ${{ matrix.os }}-${{ matrix.rust-toolchain }}-v2
57 +
      - name: Check
58 +
        run: cargo check --all-features
59 +
      - name: Architecture check
60 +
        run: cargo run --features cli --bin arch-check
61 +
      - if: ${{ matrix.rust-toolchain != 'nightly' }}
62 +
        name: Format
63 +
        run: cargo fmt -- --check
64 +
      - if: ${{ matrix.rust-toolchain != 'nightly' }}
65 +
        name: Clippy
66 +
        run: cargo clippy --all-features -- -D warnings
67 +
      - name: Test
68 +
        run: cargo test --all-features
69 +
70 +
  test-x86_64:
71 +
    name: Test x86_64
72 +
    needs: check-previous-run
73 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
74 +
    strategy:
75 +
      matrix:
76 +
        os: [ ubuntu-latest, ubuntu-22.04, ubuntu-24.04, macos-15-intel, windows-2022, windows-2025, windows-latest ]
77 +
        rust-toolchain:
78 +
          - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
79 +
          - "stable"
80 +
          - "nightly"
81 +
    runs-on: ${{ matrix.os }}
82 +
    steps:
83 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
84 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
85 +
        with:
86 +
          toolchain: ${{ matrix.rust-toolchain }}
87 +
          components: rustfmt, clippy
88 +
          cache-key: ${{ matrix.os }}-${{ matrix.rust-toolchain }}-v2
89 +
      - name: Check
90 +
        run: cargo check --all-features
91 +
      - name: Architecture check
92 +
        run: cargo run --features cli --bin arch-check
93 +
      - if: ${{ matrix.rust-toolchain != 'nightly' }}
94 +
        name: Format
95 +
        run: cargo fmt -- --check
96 +
      - if: ${{ matrix.rust-toolchain != 'nightly' }}
97 +
        name: Clippy
98 +
        run: cargo clippy --all-features -- -D warnings
99 +
      - name: Test
100 +
        run: cargo test --all-features
101 +
102 +
  test-x86-linux:
103 +
    name:  Test x86 Linux
104 +
    needs: check-previous-run
105 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
106 +
    runs-on: ubuntu-latest
107 +
    strategy:
108 +
      matrix:
109 +
        target: [i586-unknown-linux-gnu, i686-unknown-linux-gnu]
110 +
        rust-toolchain:
111 +
          - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
112 +
          - "stable"
113 +
          - "nightly"
114 +
    steps:
115 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
116 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
117 +
        with:
118 +
          toolchain: ${{ matrix.rust-toolchain }}
119 +
          components: rustfmt, clippy
120 +
      - name: Set up cross
121 +
        run: cargo install cross --locked --version 0.2.5
122 +
      - name: Check
123 +
        run: cross check --all-features --target ${{ matrix.target }}
124 +
      - name: Architecture check
125 +
        run: cross run --features cli --bin arch-check --target ${{ matrix.target }}
126 +
      - name: Test
127 +
        run: cross test --all-features --target ${{ matrix.target }}
128 +
129 +
  test-x86-windows:
130 +
    name: Test x86 Windows
131 +
    needs: check-previous-run
132 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
133 +
    runs-on: windows-2022
134 +
    strategy:
135 +
      matrix:
136 +
        rust-toolchain:
137 +
          - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
138 +
          - "stable"
139 +
          - "nightly"
140 +
    steps:
141 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
142 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
143 +
        with:
144 +
          toolchain: ${{ matrix.rust-toolchain }}
145 +
          target: i686-pc-windows-msvc
146 +
          components: rustfmt, clippy
147 +
          cache-key: windows-x86-${{ matrix.rust-toolchain }}
148 +
      - name: Check
149 +
        run: cargo check --all-features --target i686-pc-windows-msvc
150 +
      - name: Architecture check
151 +
        run: cargo run --features cli --bin arch-check --target i686-pc-windows-msvc
152 +
      - if: ${{ matrix.rust-toolchain != 'nightly' }}
153 +
        name: Format
154 +
        run: cargo fmt -- --check
155 +
      - if: ${{ matrix.rust-toolchain != 'nightly' }}
156 +
        name: Clippy
157 +
        run: cargo clippy --all-features --target i686-pc-windows-msvc -- -D warnings
158 +
      - name: Test
159 +
        run: cargo test --all-features --target i686-pc-windows-msvc
160 +
161 +
  test-software:
162 +
    name: Test software fallback
163 +
    needs: check-previous-run
164 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
165 +
    runs-on: ubuntu-latest
166 +
    strategy:
167 +
      matrix:
168 +
        target: [powerpc-unknown-linux-gnu, powerpc64-unknown-linux-gnu]
169 +
        rust-toolchain:
170 +
          - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
171 +
          - "stable"
172 +
          - "nightly"
173 +
    steps:
174 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
175 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
176 +
        with:
177 +
          toolchain: ${{ matrix.rust-toolchain }}
178 +
          components: rustfmt, clippy
179 +
      - name: Set up cross
180 +
        run: cargo install cross --locked --version 0.2.5
181 +
      - name: Check
182 +
        run: cross check --all-features --target ${{ matrix.target }}
183 +
      - name: Architecture check
184 +
        run: cross run --features cli --bin arch-check --target ${{ matrix.target }}
185 +
      - name: Test
186 +
        run: cross test --all-features --target ${{ matrix.target }}
187 +
188 +
  miri-test-x86_64:
189 +
    name: Miri Test x86_64
190 +
    needs: [check-previous-run, test-x86_64]
191 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
192 +
    runs-on: ubuntu-24.04
193 +
    steps:
194 +
      - uses: actions/checkout@v4
195 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9
196 +
        with:
197 +
          toolchain: nightly
198 +
          components: miri
199 +
      - name: Detect CPU cores
200 +
        id: cores
201 +
        run: |
202 +
          CORES=$(nproc)
203 +
          echo "count=$CORES" >> $GITHUB_OUTPUT
204 +
          echo "use_nextest=$([[ $CORES -ge 2 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
205 +
      - name: Install nextest
206 +
        if: steps.cores.outputs.use_nextest == 'true'
207 +
        run: cargo install cargo-nextest --locked
208 +
      - name: Setup Miri
209 +
        run: cargo miri setup
210 +
      - name: Run Miri tests (parallel)
211 +
        if: steps.cores.outputs.use_nextest == 'true'
212 +
        run: cargo miri nextest run --all-features -j${{ steps.cores.outputs.count }}
213 +
      - name: Run Miri tests (serial)
214 +
        if: steps.cores.outputs.use_nextest == 'false'
215 +
        run: cargo miri test --all-features
216 +
217 +
  test-no-std:
218 +
    name: Test no_std
219 +
    needs: check-previous-run
220 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
221 +
    runs-on: ubuntu-latest
222 +
    strategy:
223 +
      matrix:
224 +
        target:
225 +
          - thumbv7em-none-eabihf  # ARM Cortex-M4F/M7F
226 +
          - thumbv8m.main-none-eabihf  # ARM Cortex-M33/M35P
227 +
          - riscv32imac-unknown-none-elf  # RISC-V 32-bit
228 +
        rust-toolchain:
229 +
          - "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
230 +
          - "stable"
231 +
          - "nightly"
232 +
    steps:
233 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
234 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
235 +
        with:
236 +
          toolchain: ${{ matrix.rust-toolchain }}
237 +
          target: ${{ matrix.target }}
238 +
          components: rustfmt, clippy
239 +
          cache-key: ${{ matrix.target }}-${{ matrix.rust-toolchain }}-v2
240 +
      - name: Check no_std (no features)
241 +
        run: cargo check --target ${{ matrix.target }} --no-default-features --features panic-handler --lib
242 +
      - name: Check no_std with alloc
243 +
        run: cargo check --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib
244 +
      - name: Check no_std with cache
245 +
        run: cargo check --target ${{ matrix.target }} --no-default-features --features cache,panic-handler --lib
246 +
      - name: Run no_std tests (on host with std test harness)
247 +
        run: cargo test --test no_std_tests
248 +
249 +
  test-wasm:
250 +
    name: Test WASM
251 +
    needs: check-previous-run
252 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
253 +
    runs-on: ubuntu-latest
254 +
    strategy:
255 +
      matrix:
256 +
        include:
257 +
          # WASM 1.0/2.0 (32-bit) - all toolchains
258 +
          - target: wasm32-unknown-unknown
259 +
            rust-toolchain: "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
260 +
          - target: wasm32-unknown-unknown
261 +
            rust-toolchain: "stable"
262 +
          - target: wasm32-unknown-unknown
263 +
            rust-toolchain: "nightly"
264 +
          # WASI preview 1 (32-bit) - all toolchains
265 +
          - target: wasm32-wasip1
266 +
            rust-toolchain: "1.89" # minimum for this crate, when AVX-512 VPCLMULQDQ was stabilized
267 +
          - target: wasm32-wasip1
268 +
            rust-toolchain: "stable"
269 +
          - target: wasm32-wasip1
270 +
            rust-toolchain: "nightly"
271 +
          # WASI preview 2 (32-bit) - nightly only (experimental)
272 +
          - target: wasm32-wasip2
273 +
            rust-toolchain: "nightly"
274 +
          # Note: wasm64-unknown-unknown removed - not consistently available in nightly
275 +
    steps:
276 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
277 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
278 +
        with:
279 +
          toolchain: ${{ matrix.rust-toolchain }}
280 +
          target: ${{ matrix.target }}
281 +
          components: rustfmt, clippy
282 +
          cache-key: ${{ matrix.target }}-${{ matrix.rust-toolchain }}-v2
283 +
      - name: Check WASM (no features)
284 +
        run: cargo check --target ${{ matrix.target }} --no-default-features --features panic-handler --lib
285 +
      - name: Check WASM with alloc
286 +
        run: cargo check --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib
287 +
      - name: Check WASM with cache
288 +
        run: cargo check --target ${{ matrix.target }} --no-default-features --features cache,panic-handler --lib
289 +
      - name: Build WASM release
290 +
        run: cargo build --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib --release
291 +
      - name: Run WASM tests (on host with std test harness)
292 +
        run: cargo test --test wasm_tests
293 +
      - if: ${{ matrix.target == 'wasm32-unknown-unknown' && matrix.rust-toolchain == 'stable' }}
294 +
        name: Install wasm-pack
295 +
        run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
296 +
      - if: ${{ matrix.target == 'wasm32-unknown-unknown' && matrix.rust-toolchain == 'stable' }}
297 +
        name: Build WASM package with wasm-pack
298 +
        run: wasm-pack build --target web --no-default-features --features alloc,panic-handler
299 +
300 +
  fuzz-test:
301 +
    name: Fuzz Testing
302 +
    needs: check-previous-run
303 +
    if: needs.check-previous-run.outputs.should_skip != 'true'
304 +
    runs-on: ${{ matrix.os }}
305 +
    strategy:
306 +
      fail-fast: false
307 +
      matrix:
308 +
        os: [ubuntu-24.04, ubuntu-24.04-arm]
309 +
        fuzz-target:
310 +
          - digest_crc32_autosar
311 +
          - digest_crc32_bzip2
312 +
          - digest_crc32_iscsi
313 +
          - digest_crc32_iso_hdlc
314 +
          - digest_crc64_ecma_182
315 +
          - digest_crc64_nvme
316 +
          - checksum_crc32_autosar
317 +
          - checksum_crc32_bzip2
318 +
          - checksum_crc32_iscsi
319 +
          - checksum_crc32_iso_hdlc
320 +
          - checksum_crc64_ecma_182
321 +
          - checksum_crc64_nvme
322 +
    steps:
323 +
      - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
324 +
      - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
325 +
        with:
326 +
          toolchain: nightly
327 +
          cache-key: ${{ matrix.os }}-nightly-fuzz
328 +
      - name: Install cargo-fuzz
329 +
        run: cargo install cargo-fuzz
330 +
      - name: Run fuzzer
331 +
        run: |
332 +
          cargo fuzz run ${{ matrix.fuzz-target }} -- \
333 +
            -max_total_time=60 \
334 +
            -rss_limit_mb=2048 \
335 +
            -timeout=10 \
336 +
            -print_final_stats=1
337 +
        continue-on-error: true
338 +
      - name: Upload artifacts on crash
339 +
        if: failure()
340 +
        uses: actions/upload-artifact@v4
341 +
        with:
342 +
          name: fuzz-artifacts-${{ matrix.os }}-${{ matrix.fuzz-target }}
343 +
          path: fuzz/artifacts/${{ matrix.fuzz-target }}/
344 +
345 +
  tests-complete:
346 +
    name: All tests complete
347 +
    needs: [check-previous-run, test-aarch64, test-x86_64, test-x86-linux, test-x86-windows, test-software, miri-test-x86_64, test-no-std, test-wasm, fuzz-test]
348 +
    if: always()
349 +
    runs-on: ubuntu-latest
350 +
    steps:
351 +
      - name: Check test results
352 +
        run: |
353 +
          echo "Checking test results..."
354 +
          echo "Previous run check: ${{ needs.check-previous-run.result }}"
355 +
          echo "Should skip: ${{ needs.check-previous-run.outputs.should_skip }}"
356 +
          
357 +
          if [ "${{ needs.check-previous-run.outputs.should_skip }}" == "true" ]; then
358 +
            echo "✓ Tests were skipped because this commit was already tested successfully"
359 +
            exit 0
360 +
          fi
361 +
          
362 +
          # Check if any test job failed
363 +
          if [ "${{ needs.test-aarch64.result }}" == "failure" ] || \
364 +
             [ "${{ needs.test-x86_64.result }}" == "failure" ] || \
365 +
             [ "${{ needs.test-x86-linux.result }}" == "failure" ] || \
366 +
             [ "${{ needs.test-x86-windows.result }}" == "failure" ] || \
367 +
             [ "${{ needs.test-software.result }}" == "failure" ] || \
368 +
             [ "${{ needs.miri-test-x86_64.result }}" == "failure" ] || \
369 +
             [ "${{ needs.test-no-std.result }}" == "failure" ] || \
370 +
             [ "${{ needs.test-wasm.result }}" == "failure" ] || \
371 +
             [ "${{ needs.fuzz-test.result }}" == "failure" ]; then
372 +
            echo "✗ One or more test jobs failed"
373 +
            exit 1
374 +
          fi
375 +
          
376 +
          echo "✓ All test jobs passed"
added vendor/crc-fast/.gitignore +8 −0
1 +
/target
2 +
/scratch
3 +
/test/test_*.bin
4 +
.idea
5 +
.DS_Store
6 +
.git
7 +
.vscode
8 +
/scripts
added vendor/crc-fast/.kiro/specs/checksum-benchmark-option/design.md +202 −0
1 +
# Design Document
2 +
3 +
## Overview
4 +
5 +
This design extends the existing `bin/checksum.rs` tool with benchmark functionality through a new `-b` flag. The benchmark mode will measure CRC performance using either user-provided data (files/strings) or randomly generated data, reporting throughput in GiB/s along with the acceleration target used.
6 +
7 +
The design maintains backward compatibility while adding a clean benchmark interface that leverages existing patterns from the `benches/benchmark.rs` implementation.
8 +
9 +
## Architecture
10 +
11 +
### Command Line Interface
12 +
13 +
The tool will extend the existing argument parsing to support:
14 +
- `-b`: Enable benchmark mode
15 +
- `--size <bytes>`: Specify data size for random generation (when no file/string provided)
16 +
- `--duration <seconds>`: Benchmark duration as floating-point seconds (default: 10.0)
17 +
- Existing `-a <algorithm>`: CRC algorithm (required in benchmark mode)
18 +
- Existing `-f <file>` or `-s <string>`: Optional data source for benchmarking
19 +
20 +
### Data Flow
21 +
22 +
```
23 +
User Input → Argument Parsing → Mode Detection → Benchmark Execution → Results Display
24 +
                                      ↓
25 +
                              [Normal Checksum Mode]
26 +
                                      ↓
27 +
                              [Existing Functionality]
28 +
```
29 +
30 +
In benchmark mode:
31 +
1. Parse and validate benchmark parameters
32 +
2. Determine data source (file, string, or generated)
33 +
3. For string/generated data: Load/generate test data once; For file data: use file path directly
34 +
4. Run benchmark loop for specified duration using appropriate checksum function
35 +
5. Calculate and display results
36 +
37 +
## Components and Interfaces
38 +
39 +
### Enhanced Config Structure
40 +
41 +
```rust
42 +
#[derive(Debug)]
43 +
struct Config {
44 +
    algorithm: String,
45 +
    file: Option<String>,
46 +
    string: Option<String>,
47 +
    format: OutputFormat,
48 +
    benchmark: Option<BenchmarkConfig>,
49 +
}
50 +
51 +
#[derive(Debug)]
52 +
struct BenchmarkConfig {
53 +
    size: Option<usize>,
54 +
    duration: f64,
55 +
}
56 +
```
57 +
58 +
### Benchmark Execution Module
59 +
60 +
```rust
61 +
enum BenchmarkData {
62 +
    InMemory(Vec<u8>),
63 +
    File(String),
64 +
}
65 +
66 +
struct BenchmarkRunner {
67 +
    algorithm: CrcAlgorithm,
68 +
    data: BenchmarkData,
69 +
    duration: f64,
70 +
}
71 +
72 +
impl BenchmarkRunner {
73 +
    fn new(algorithm: CrcAlgorithm, data: BenchmarkData, duration: f64) -> Self
74 +
    fn run(&self) -> BenchmarkResult
75 +
}
76 +
77 +
struct BenchmarkResult {
78 +
    iterations: u64,
79 +
    elapsed_seconds: f64,
80 +
    throughput_gibs: f64,
81 +
    time_per_iteration_nanos: f64,
82 +
    acceleration_target: String,
83 +
    data_size: u64,
84 +
}
85 +
```
86 +
87 +
### Data Generation
88 +
89 +
The benchmark will reuse the random data generation pattern from `benches/benchmark.rs`:
90 +
91 +
```rust
92 +
fn generate_random_data(size: usize) -> Vec<u8> {
93 +
    let mut rng = rand::rng();
94 +
    let mut buf = vec![0u8; size];
95 +
    rng.fill_bytes(&mut buf);
96 +
    buf
97 +
}
98 +
```
99 +
100 +
## Data Models
101 +
102 +
### Input Data Sources
103 +
104 +
1. **File Input**: Use `checksum_file()` function to benchmark the entire file I/O and checksum stack
105 +
2. **String Input**: Use string bytes directly with in-memory `checksum()` function
106 +
3. **Generated Data**: Create random data of specified size using `rand::RngCore::fill_bytes()` and use in-memory `checksum()` function
107 +
108 +
### Benchmark Metrics
109 +
110 +
- **Iterations**: Number of checksum calculations performed
111 +
- **Elapsed Time**: Actual benchmark duration in seconds
112 +
- **Throughput**: Calculated as `(data_size * iterations) / elapsed_time / (1024^3)` GiB/s
113 +
- **Acceleration Target**: Result from `crc_fast::get_calculator_target(algorithm)`
114 +
115 +
## Error Handling
116 +
117 +
### Validation Errors
118 +
119 +
- Invalid algorithm names (reuse existing validation)
120 +
- Invalid size parameters (non-positive values)
121 +
- Invalid duration parameters (non-positive values)
122 +
- File read errors (reuse existing error handling)
123 +
124 +
### Runtime Errors
125 +
126 +
- Memory allocation failures for large data sizes
127 +
- Timer precision issues (fallback to alternative timing methods)
128 +
129 +
### Error Messages
130 +
131 +
All errors will follow the existing pattern of displaying the error message followed by usage information.
132 +
133 +
## Testing Strategy
134 +
135 +
### Unit Tests
136 +
137 +
- Argument parsing validation for benchmark flags
138 +
- BenchmarkConfig creation and validation
139 +
- Data generation with various sizes
140 +
- Throughput calculation accuracy
141 +
142 +
### Integration Tests
143 +
144 +
- End-to-end benchmark execution with different algorithms
145 +
- File and string input handling in benchmark mode
146 +
- Error handling for invalid parameters
147 +
- Backward compatibility verification
148 +
149 +
### Performance Validation
150 +
151 +
- Verify benchmark results are reasonable (within expected ranges)
152 +
- Compare with existing `benches/benchmark.rs` results for consistency
153 +
- Test with various data sizes to ensure linear scaling
154 +
155 +
## Implementation Notes
156 +
157 +
### Timing Mechanism
158 +
159 +
Use `std::time::Instant` for high-precision timing, with different approaches for different data sources:
160 +
161 +
```rust
162 +
let start = std::time::Instant::now();
163 +
let mut iterations = 0u64;
164 +
165 +
while start.elapsed().as_secs_f64() < duration {
166 +
    match &self.data {
167 +
        BenchmarkData::InMemory(data) => {
168 +
            std::hint::black_box(checksum(algorithm, data));
169 +
        }
170 +
        BenchmarkData::File(filename) => {
171 +
            std::hint::black_box(checksum_file(algorithm, filename, None).unwrap());
172 +
        }
173 +
    }
174 +
    iterations += 1;
175 +
}
176 +
177 +
let elapsed = start.elapsed().as_secs_f64();
178 +
```
179 +
180 +
### Memory Considerations
181 +
182 +
- Pre-allocate test data once before benchmark loop
183 +
- Use `std::hint::black_box()` to prevent compiler optimizations
184 +
- Consider memory alignment for optimal performance (optional enhancement)
185 +
186 +
### Output Format
187 +
188 +
```
189 +
Algorithm: CRC-32/ISCSI
190 +
Acceleration Target: aarch64-neon-sha3
191 +
Data Size: 1,048,576 bytes (1.0 MiB)
192 +
Duration: 10.00 seconds
193 +
Iterations: 12,345
194 +
Throughput: 45.67 GiB/s
195 +
Time per iteration: 810.2 μs
196 +
```
197 +
198 +
### Default Values
199 +
200 +
- **Size**: 1,048,576 bytes (1 MiB)
201 +
- **Duration**: 10.0 seconds
202 +
- **Algorithm**: Must be specified via `-a` flag (no default)
added vendor/crc-fast/.kiro/specs/checksum-benchmark-option/requirements.md +52 −0
1 +
# Requirements Document
2 +
3 +
## Introduction
4 +
5 +
This feature adds a simple benchmark option to the existing `bin/checksum.rs` tool via a command-line flag. The benchmark will allow users to test performance across different platforms using a single binary, reporting throughput in GiB/s and the acceleration target used. This enables cross-platform performance comparison without requiring a full development environment checkout.
6 +
7 +
## Glossary
8 +
9 +
- **Checksum_Tool**: The existing `bin/checksum.rs` binary application
10 +
- **Benchmark_Mode**: A new operational mode that measures and reports performance metrics
11 +
- **Acceleration_Target**: The hardware-specific optimization path returned by `get_calculator_target()`
12 +
- **Throughput_Metric**: Performance measurement expressed in GiB/s (gibibytes per second)
13 +
- **Test_Data**: Randomly generated byte array used for benchmark measurements
14 +
- **Black_Box**: Rust's `std::hint::black_box()` function that prevents compiler optimizations during benchmarking
15 +
16 +
## Requirements
17 +
18 +
### Requirement 1
19 +
20 +
**User Story:** As a developer, I want to run performance benchmarks from the checksum tool, so that I can compare CRC performance across different hardware platforms without setting up a full development environment.
21 +
22 +
#### Acceptance Criteria
23 +
24 +
1. WHEN the user provides a `-b` flag, THE Checksum_Tool SHALL enter Benchmark_Mode
25 +
2. WHILE in Benchmark_Mode, THE Checksum_Tool SHALL generate Test_Data of the specified size once and reuse it for all iterations
26 +
3. THE Checksum_Tool SHALL report Throughput_Metric in GiB/s format
27 +
4. THE Checksum_Tool SHALL display the Acceleration_Target used for the benchmark
28 +
5. THE Checksum_Tool SHALL use Black_Box to prevent compiler optimizations during measurement
29 +
30 +
### Requirement 2
31 +
32 +
**User Story:** As a developer, I want to specify benchmark parameters, so that I can control the test conditions for consistent cross-platform comparisons.
33 +
34 +
#### Acceptance Criteria
35 +
36 +
1. WHEN the user provides `-a` parameter with `-b` flag, THE Checksum_Tool SHALL use the specified CRC algorithm for benchmarking
37 +
2. WHEN the user provides `--size` parameter, THE Checksum_Tool SHALL generate Test_Data of the specified byte size
38 +
3. WHEN the user provides `--duration` parameter, THE Checksum_Tool SHALL run the benchmark for the specified number of seconds
39 +
4. WHERE no benchmark parameters are provided, THE Checksum_Tool SHALL use default values of 1 MiB for size and 10 seconds for duration
40 +
5. THE Checksum_Tool SHALL validate all benchmark parameter values before starting the benchmark
41 +
42 +
### Requirement 3
43 +
44 +
**User Story:** As a developer, I want the benchmark to support both file/string input and generated data, so that I can benchmark with specific data or use random data for consistent testing.
45 +
46 +
#### Acceptance Criteria
47 +
48 +
1. WHEN the user provides `-b` with `-f` or `-s` flags, THE Checksum_Tool SHALL use the file or string content as Test_Data for benchmarking
49 +
2. WHEN the user provides `-b` with `--size` parameter but no `-f` or `-s` flags, THE Checksum_Tool SHALL generate random Test_Data of the specified size
50 +
3. IF the user provides `-b` without any data source or size specification, THEN THE Checksum_Tool SHALL generate random Test_Data using the default size
51 +
4. THE Checksum_Tool SHALL display appropriate usage information when benchmark parameters are invalid
52 +
5. THE Checksum_Tool SHALL maintain backward compatibility with existing checksum functionality
added vendor/crc-fast/.kiro/specs/checksum-benchmark-option/tasks.md +49 −0
1 +
# Implementation Plan
2 +
3 +
- [x] 1. Extend command line argument parsing for benchmark options
4 +
  - Add `-b` flag to enable benchmark mode in the argument parser
5 +
  - Add `--size` parameter for specifying random data size
6 +
  - Add `--duration` parameter for benchmark duration (floating-point seconds)
7 +
  - Update the `Config` struct to include optional `BenchmarkConfig`
8 +
  - Update usage/help text to include new benchmark options
9 +
  - _Requirements: 1.1, 2.1, 2.2, 2.3, 2.4_
10 +
11 +
- [x] 2. Implement benchmark data structures and validation
12 +
  - Create `BenchmarkConfig` struct with size and duration fields
13 +
  - Create `BenchmarkData` enum to handle in-memory vs file data sources
14 +
  - Create `BenchmarkRunner` struct with algorithm, data, and duration
15 +
  - Create `BenchmarkResult` struct with all metrics including time per iteration
16 +
  - Add validation logic for benchmark parameters (positive values)
17 +
  - _Requirements: 2.5, 3.4_
18 +
19 +
- [x] 3. Implement benchmark execution logic
20 +
  - Create benchmark runner with timing loop using `std::time::Instant`
21 +
  - Implement separate execution paths for in-memory data vs file data
22 +
  - Use `std::hint::black_box()` to prevent compiler optimizations
23 +
  - Calculate throughput in GiB/s and time per iteration with appropriate units
24 +
  - Integrate `get_calculator_target()` for acceleration target reporting
25 +
  - _Requirements: 1.2, 1.3, 1.4, 1.5_
26 +
27 +
- [x] 4. Implement data source handling
28 +
  - Add random data generation function using `rand::RngCore::fill_bytes()`
29 +
  - Implement logic to determine data source (file, string, or generated)
30 +
  - Handle file size detection for throughput calculations
31 +
  - Create `BenchmarkData` instances based on user input
32 +
  - _Requirements: 3.1, 3.2, 3.3_
33 +
34 +
- [x] 5. Integrate benchmark mode into main application flow
35 +
  - Modify main function to detect benchmark mode and route accordingly
36 +
  - Ensure mutual exclusivity validation between benchmark and normal modes
37 +
  - Add benchmark result formatting and display
38 +
  - Update error handling to include benchmark-specific errors
39 +
  - Maintain backward compatibility with existing functionality
40 +
  - _Requirements: 3.4, 3.5_
41 +
42 +
- [x] 6. Add comprehensive testing for benchmark functionality
43 +
  - Write unit tests for argument parsing with benchmark flags
44 +
  - Test benchmark parameter validation (invalid sizes, durations)
45 +
  - Test data source selection logic (file vs string vs generated)
46 +
  - Test benchmark execution with different algorithms
47 +
  - Verify throughput calculation accuracy
48 +
  - Test error handling for invalid benchmark configurations
49 +
  - _Requirements: All requirements_
added vendor/crc-fast/.kiro/specs/crc-params-caching/design.md +270 −0
1 +
# Design Document
2 +
3 +
## Overview
4 +
5 +
The CRC parameters caching system will add a thread-safe, memory-efficient cache to the `CrcParams::new()` method. The cache will store pre-computed folding keys indexed by the input parameters, eliminating redundant key generation for identical parameter sets. The design prioritizes performance, thread safety, and minimal memory overhead while maintaining complete API compatibility.
6 +
7 +
## Architecture
8 +
9 +
### Cache Structure
10 +
11 +
The caching system will use a global, thread-safe cache implemented with:
12 +
13 +
- **Cache Storage**: `std::collections::HashMap<CrcParamsCacheKey, [u64; 23]>`
14 +
- **Thread Safety**: `std::sync::RwLock` for concurrent read access with exclusive write access
15 +
- **Cache Key**: Custom struct containing all parameters that affect key generation
16 +
- **Lazy Initialization**: `std::sync::OnceLock` to initialize the cache on first use
17 +
18 +
### Cache Key Design
19 +
20 +
```rust
21 +
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
22 +
struct CrcParamsCacheKey {
23 +
    width: u8,
24 +
    poly: u64,
25 +
    reflected: bool,
26 +
}
27 +
```
28 +
29 +
The cache key includes only the parameters that directly affect key generation (`width`, `poly`, `reflected`), excluding parameters like `name`, `init`, `xorout`, and `check` which don't influence the mathematical key computation.
30 +
31 +
### Cache Access Pattern
32 +
33 +
1. **Cache Hit Path**: Read lock → HashMap lookup → Return cached keys
34 +
2. **Cache Miss Path**: Read lock → Cache miss → Generate keys → Write lock → Store in cache → Return keys
35 +
3. **Concurrent Access**: Multiple readers can access simultaneously; writers get exclusive access
36 +
37 +
## Components and Interfaces
38 +
39 +
### Core Components
40 +
41 +
#### 1. Cache Module (`src/cache.rs`)
42 +
43 +
```rust
44 +
use std::collections::HashMap;
45 +
use std::sync::{OnceLock, RwLock};
46 +
47 +
static CACHE: OnceLock<RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>>> = OnceLock::new();
48 +
49 +
pub fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23]
50 +
pub fn clear_cache()  // For testing and memory management
51 +
```
52 +
53 +
#### 2. Cache Key Structure
54 +
55 +
```rust
56 +
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
57 +
struct CrcParamsCacheKey {
58 +
    width: u8,
59 +
    poly: u64,
60 +
    reflected: bool,
61 +
}
62 +
```
63 +
64 +
#### 3. Modified CrcParams Implementation
65 +
66 +
The existing `CrcParams::new()` method will be updated to use the cache:
67 +
68 +
```rust
69 +
impl CrcParams {
70 +
    pub fn new(
71 +
        name: &'static str,
72 +
        width: u8,
73 +
        poly: u64,
74 +
        init: u64,
75 +
        reflected: bool,
76 +
        xorout: u64,
77 +
        check: u64,
78 +
    ) -> Self {
79 +
        let keys = cache::get_or_generate_keys(width, poly, reflected);
80 +
        
81 +
        let algorithm = match width {
82 +
            32 => CrcAlgorithm::Crc32Custom,
83 +
            64 => CrcAlgorithm::Crc64Custom,
84 +
            _ => panic!("Unsupported width: {}", width),
85 +
        };
86 +
87 +
        Self {
88 +
            algorithm,
89 +
            name,
90 +
            width,
91 +
            poly,
92 +
            init,
93 +
            refin: reflected,
94 +
            refout: reflected,
95 +
            xorout,
96 +
            check,
97 +
            keys,
98 +
        }
99 +
    }
100 +
}
101 +
```
102 +
103 +
### Interface Design
104 +
105 +
#### Public Interface
106 +
- No changes to existing public APIs
107 +
- `CrcParams::new()` maintains identical signature and behavior
108 +
- Cache operations are completely internal
109 +
110 +
#### Internal Interface
111 +
- `cache::get_or_generate_keys()` - Primary cache interface
112 +
- `cache::clear_cache()` - For testing and memory management
113 +
- Cache key creation and hashing handled internally
114 +
115 +
## Data Models
116 +
117 +
### Cache Key Model
118 +
```rust
119 +
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
120 +
struct CrcParamsCacheKey {
121 +
    width: u8,      // CRC width (32 or 64)
122 +
    poly: u64,      // Polynomial value
123 +
    reflected: bool, // Reflection mode
124 +
}
125 +
```
126 +
127 +
### Cache Storage Model
128 +
```rust
129 +
type CacheStorage = HashMap<CrcParamsCacheKey, [u64; 23]>;
130 +
type ThreadSafeCache = RwLock<CacheStorage>;
131 +
```
132 +
133 +
### Memory Layout Considerations
134 +
- Cache keys: ~17 bytes per entry (8 + 8 + 1 bytes + HashMap overhead)
135 +
- Cache values: 184 bytes per entry (23 × 8 bytes)
136 +
- Total per entry: ~201 bytes + HashMap overhead
137 +
- Expected usage: 1-10 unique parameter sets in typical applications (single parameter set most common)
138 +
139 +
## Error Handling
140 +
141 +
### Cache Access Errors
142 +
- **RwLock Poisoning**: If a thread panics while holding the write lock, subsequent accesses will fall back to direct key generation
143 +
- **Memory Allocation**: HashMap growth failures will be handled by Rust's standard allocation error handling
144 +
145 +
### Fallback Strategy
146 +
```rust
147 +
fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] {
148 +
    let cache_key = CrcParamsCacheKey { width, poly, reflected };
149 +
    
150 +
    // Try cache read first
151 +
    if let Ok(cache) = get_cache().read() {
152 +
        if let Some(keys) = cache.get(&cache_key) {
153 +
            return *keys;
154 +
        }
155 +
    }
156 +
    
157 +
    // Generate keys outside of write lock to minimize lock hold time
158 +
    let keys = generate::keys(width, poly, reflected);
159 +
    
160 +
    // Try to cache the result (best effort)
161 +
    if let Ok(mut cache) = get_cache().write() {
162 +
        cache.insert(cache_key, keys);
163 +
    }
164 +
    
165 +
    keys
166 +
}
167 +
```
168 +
169 +
### Error Recovery
170 +
- Lock poisoning: Continue with direct key generation
171 +
- Memory pressure: Cache operations become no-ops, functionality preserved
172 +
- Hash collisions: Handled by HashMap implementation
173 +
174 +
## Testing Strategy
175 +
176 +
### Unit Tests
177 +
1. **Cache Functionality**
178 +
   - Verify cache hits return identical keys
179 +
   - Verify cache misses generate and store keys
180 +
   - Test cache key equality and hashing
181 +
182 +
2. **Thread Safety**
183 +
   - Concurrent read access tests
184 +
   - Read-write contention tests
185 +
   - Cache consistency under concurrent access
186 +
187 +
3. **Performance Tests**
188 +
   - Benchmark cache hit vs. miss performance
189 +
   - Memory usage validation
190 +
   - Comparison with uncached implementation
191 +
192 +
4. **Edge Cases**
193 +
   - Empty cache behavior
194 +
   - Cache with single entry
195 +
   - Maximum realistic cache size
196 +
   - Lock poisoning recovery
197 +
198 +
### Integration Tests
199 +
1. **API Compatibility**
200 +
   - Existing CrcParams::new() behavior unchanged
201 +
   - All existing tests continue to pass
202 +
   - Identical results for cached vs. uncached keys
203 +
204 +
2. **Real-world Usage Patterns**
205 +
   - Multiple CrcParams instances with same parameters
206 +
   - Mixed usage with different parameters
207 +
   - Long-running application simulation
208 +
209 +
### Performance Benchmarks
210 +
1. **Cache Hit Performance**: Measure lookup time vs. key generation time
211 +
2. **Cache Miss Performance**: Measure overhead of cache check + generation
212 +
3. **Memory Usage**: Track cache memory consumption over time
213 +
4. **Concurrent Access**: Measure performance under thread contention
214 +
215 +
## Implementation Phases
216 +
217 +
### Phase 1: Core Cache Implementation
218 +
- Create cache module with basic HashMap storage
219 +
- Implement thread-safe access with RwLock
220 +
- Add cache key structure and hashing
221 +
222 +
### Phase 2: Integration
223 +
- Modify CrcParams::new() to use cache
224 +
- Add fallback error handling
225 +
- Ensure API compatibility
226 +
227 +
### Phase 3: Testing and Optimization
228 +
- Comprehensive test suite
229 +
- Performance benchmarking
230 +
- Memory usage optimization
231 +
- Documentation updates
232 +
233 +
## Performance Considerations
234 +
235 +
### Cache Hit Performance
236 +
- Expected improvement: 50-100x faster than key generation
237 +
- RwLock read access: ~10-20ns overhead
238 +
- HashMap lookup: O(1) average case, ~50-100ns
239 +
240 +
### Cache Miss Performance
241 +
- Additional overhead: ~100-200ns for cache check
242 +
- Write lock acquisition: ~50-100ns
243 +
- HashMap insertion: O(1) average case
244 +
245 +
### Memory Efficiency
246 +
- Cache overhead per entry: ~201 bytes
247 +
- Expected cache size: 200 bytes - 2KB for typical applications
248 +
- Memory growth: Linear with unique parameter combinations
249 +
250 +
### Thread Contention
251 +
- Read-heavy workload: Excellent scalability
252 +
- Write contention: Minimal impact (writes are rare after warmup)
253 +
- Lock-free reads: Multiple threads can read simultaneously
254 +
255 +
## Security Considerations
256 +
257 +
### Memory Safety
258 +
- All cache operations use safe Rust constructs
259 +
- No unsafe code in cache implementation
260 +
- HashMap provides memory safety guarantees
261 +
262 +
### Thread Safety
263 +
- RwLock prevents data races
264 +
- Cache key immutability prevents modification after creation
265 +
- Atomic operations for cache initialization
266 +
267 +
### Resource Management
268 +
- Cache growth is bounded by unique parameter combinations
269 +
- No automatic eviction policy (acceptable for typical usage)
270 +
- Manual cache clearing available for memory management
added vendor/crc-fast/.kiro/specs/crc-params-caching/requirements.md +57 −0
1 +
# Requirements Document
2 +
3 +
## Introduction
4 +
5 +
This feature adds a caching layer to the `CrcParams::new()` method to optimize performance when the same CRC parameters are used multiple times during program execution. Currently, each call to `CrcParams::new()` regenerates the folding keys through expensive mathematical operations, even when identical parameters have been used before. The caching system will store generated keys in memory and reuse them for subsequent requests with matching parameters, significantly improving performance for applications that create multiple CRC instances with the same configuration.
6 +
7 +
## Requirements
8 +
9 +
### Requirement 1
10 +
11 +
**User Story:** As a developer using the crc-fast library, I want CrcParams::new() to cache generated keys so that repeated calls with identical parameters don't regenerate keys unnecessarily.
12 +
13 +
#### Acceptance Criteria
14 +
15 +
1. WHEN CrcParams::new() is called with parameters that have been used before THEN the system SHALL return cached keys instead of regenerating them
16 +
2. WHEN CrcParams::new() is called with new parameters for the first time THEN the system SHALL generate the keys and cache them for future use
17 +
3. WHEN multiple threads call CrcParams::new() concurrently with the same parameters THEN the system SHALL handle thread safety correctly without data races
18 +
19 +
### Requirement 2
20 +
21 +
**User Story:** As a performance-conscious developer, I want the caching mechanism to have minimal overhead so that it doesn't negatively impact single-use scenarios.
22 +
23 +
#### Acceptance Criteria
24 +
25 +
1. WHEN CrcParams::new() is called for the first time with any parameters THEN the performance overhead SHALL be minimal compared to the current implementation
26 +
2. WHEN CrcParams::new() is called with cached parameters THEN the lookup SHALL be significantly faster than key generation
27 +
3. WHEN the cache is accessed THEN the lookup mechanism SHALL use efficient data structures optimized for the expected access patterns
28 +
29 +
### Requirement 3
30 +
31 +
**User Story:** As a developer working with custom CRC parameters, I want the cache to correctly identify identical parameter sets so that functionally equivalent calls are properly cached.
32 +
33 +
#### Acceptance Criteria
34 +
35 +
1. WHEN two CrcParams::new() calls use identical values for all parameters (name, width, poly, init, reflected, xorout, check) THEN the system SHALL treat them as cache hits
36 +
2. WHEN two CrcParams::new() calls differ in any parameter value THEN the system SHALL treat them as separate cache entries
37 +
3. WHEN parameter comparison is performed THEN the system SHALL use all relevant fields to determine cache key uniqueness
38 +
39 +
### Requirement 4
40 +
41 +
**User Story:** As a developer concerned about memory usage, I want the cache to have reasonable memory management so that it doesn't grow unbounded in long-running applications.
42 +
43 +
#### Acceptance Criteria
44 +
45 +
1. WHEN the cache stores parameter sets THEN it SHALL use memory-efficient storage for the cache keys and values
46 +
2. WHEN the application runs for extended periods THEN the cache SHALL not consume excessive memory for typical usage patterns
47 +
3. IF the cache grows large THEN the system SHALL provide a way to clear or manage cache size (though automatic eviction is not required for this initial implementation)
48 +
49 +
### Requirement 5
50 +
51 +
**User Story:** As a developer integrating this library, I want the caching to be transparent so that existing code continues to work without modifications.
52 +
53 +
#### Acceptance Criteria
54 +
55 +
1. WHEN existing code calls CrcParams::new() THEN it SHALL work exactly as before with no API changes required
56 +
2. WHEN CrcParams instances are created THEN they SHALL have identical behavior regardless of whether keys came from cache or generation
57 +
3. WHEN the caching system is active THEN it SHALL not affect the public interface or return values of CrcParams::new()
added vendor/crc-fast/.kiro/specs/crc-params-caching/tasks.md +78 −0
1 +
# Implementation Plan
2 +
3 +
- [x] 1. Create cache module with core data structures
4 +
  - Create `src/cache.rs` module file
5 +
  - Define `CrcParamsCacheKey` struct with `width`, `poly`, and `reflected` fields
6 +
  - Implement `Debug`, `Clone`, `PartialEq`, `Eq`, and `Hash` traits for the cache key
7 +
  - Add module declaration to `src/lib.rs`
8 +
  - _Requirements: 1.1, 3.1, 3.2_
9 +
10 +
- [x] 2. Implement thread-safe cache storage
11 +
  - Define global cache using `std::sync::OnceLock<RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>>>`
12 +
  - Implement `get_cache()` function to initialize and return cache reference
13 +
  - Add necessary imports for `std::collections::HashMap`, `std::sync::{OnceLock, RwLock}`
14 +
  - _Requirements: 1.3, 2.3_
15 +
16 +
- [x] 3. Implement cache lookup and storage functions
17 +
  - Create `get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23]` function
18 +
  - Implement cache hit path with read lock and HashMap lookup
19 +
  - Implement cache miss path with key generation followed by write lock and storage
20 +
  - Add error handling for lock poisoning with fallback to direct key generation
21 +
  - _Requirements: 1.1, 1.2, 4.1_
22 +
23 +
- [x] 4. Add cache management utilities
24 +
  - Implement `clear_cache()` function for testing and memory management
25 +
  - Add proper error handling for all cache operations
26 +
  - Ensure all cache operations are best-effort with graceful degradation
27 +
  - _Requirements: 4.3_
28 +
29 +
- [x] 5. Integrate cache into CrcParams::new()
30 +
  - Modify `CrcParams::new()` in `src/structs.rs` to use `cache::get_or_generate_keys()`
31 +
  - Replace direct call to `generate::keys()` with cache lookup
32 +
  - Ensure all existing functionality remains unchanged
33 +
  - Verify that the function signature and behavior are identical
34 +
  - _Requirements: 1.1, 1.2, 5.1, 5.2, 5.3_
35 +
36 +
- [x] 6. Create comprehensive unit tests for cache functionality
37 +
  - Add tests to `src/cache.rs`
38 +
  - Write tests for cache key creation, equality, and hashing
39 +
  - Test cache hit scenarios (same parameters return cached keys)
40 +
  - Test cache miss scenarios (new parameters generate and cache keys)
41 +
  - Test that cached keys are identical to directly generated keys
42 +
  - _Requirements: 1.1, 1.2, 3.1, 3.2_
43 +
44 +
- [x] 7. Add thread safety tests
45 +
  - Write concurrent access tests using `std::thread`
46 +
  - Test multiple threads reading from cache simultaneously
47 +
  - Test read-write contention scenarios
48 +
  - Verify cache consistency under concurrent access
49 +
  - Test lock poisoning recovery behavior
50 +
  - _Requirements: 1.3_
51 +
52 +
- [x] 8. Create integration tests for CrcParams compatibility
53 +
  - Add tests to verify `CrcParams::new()` behavior is unchanged
54 +
  - Test that all existing CRC parameter combinations work correctly
55 +
  - Verify that cached and uncached results are identical
56 +
  - Test multiple `CrcParams` instances with same parameters use cached keys
57 +
  - _Requirements: 5.1, 5.2, 5.3_
58 +
59 +
- [x] 9. Add comprehensive error handling tests
60 +
  - Test cache behavior when locks are poisoned
61 +
  - Test memory allocation failure scenarios
62 +
  - Verify fallback to direct key generation works correctly
63 +
  - Test cache operations under memory pressure
64 +
  - _Requirements: 4.1, 4.2_
65 +
66 +
- [x] 10. Update existing tests to work with caching
67 +
  - Run all existing tests to ensure no regressions
68 +
  - Update any tests that might be affected by caching behavior
69 +
  - Ensure test isolation by clearing cache between tests if needed
70 +
  - Verify all CRC algorithm tests still pass
71 +
  - _Requirements: 5.1, 5.2, 5.3_
72 +
73 +
- [x] 11. Add documentation and finalize implementation
74 +
  - Add inline documentation for all new public and internal functions
75 +
  - Update module-level documentation
76 +
  - Add usage examples in code comments
77 +
  - Ensure all code follows existing project style and conventions
78 +
  - _Requirements: 5.3_
added vendor/crc-fast/.kiro/specs/crc-width32-shared-base/design.md +358 −0
1 +
# Design Document: CRC Width-32 Shared Base
2 +
3 +
## Overview
4 +
5 +
This design refactors the CRC-16 and CRC-32 algorithm implementations to share a common base module. Since CRC-16 operates in 32-bit space (scaling 16-bit values up for processing, then down for results), both widths use nearly identical SIMD operations. By extracting this shared logic into `src/crc32/width32_ops.rs`, we eliminate ~200 lines of duplicated code and prepare the codebase for future CRC width additions.
6 +
7 +
## Architecture
8 +
9 +
### Current Structure
10 +
11 +
```
12 +
src/
13 +
├── crc16/
14 +
│   ├── algorithm.rs    # Width16 impl + process_0_to_15 (duplicated)
15 +
│   ├── consts.rs
16 +
│   └── mod.rs
17 +
├── crc32/
18 +
│   ├── algorithm.rs    # Width32 impl + process_0_to_15 (duplicated)
19 +
│   ├── consts.rs
20 +
│   └── mod.rs
21 +
├── crc64/
22 +
│   ├── algorithm.rs    # Width64 impl + process_0_to_15 (unique)
23 +
│   ├── consts.rs
24 +
│   └── mod.rs
25 +
└── algorithm.rs        # Shared algorithm infrastructure
26 +
```
27 +
28 +
### Proposed Structure
29 +
30 +
```
31 +
src/
32 +
├── crc16/
33 +
│   ├── algorithm.rs    # Width16 impl (delegates to width32_ops)
34 +
│   ├── consts.rs
35 +
│   └── mod.rs
36 +
├── crc32/
37 +
│   ├── algorithm.rs    # Width32 impl (delegates to width32_ops)
38 +
│   ├── consts.rs
39 +
│   ├── mod.rs
40 +
│   └── width32_ops.rs  # NEW: Shared 32-bit-space operations
41 +
├── crc64/
42 +
│   ├── algorithm.rs    # Width64 impl + process_0_to_15 (unchanged)
43 +
│   ├── consts.rs
44 +
│   └── mod.rs
45 +
└── algorithm.rs        # Shared algorithm infrastructure
46 +
```
47 +
48 +
## Components and Interfaces
49 +
50 +
### 1. New Module: `src/crc32/width32_ops.rs`
51 +
52 +
This module contains all shared 32-bit-space operations:
53 +
54 +
```rust
55 +
//! Shared operations for CRC widths that operate in 32-bit space (CRC-16, CRC-32).
56 +
//!
57 +
//! CRC-16 computation scales 16-bit values to 32-bit space, uses these operations,
58 +
//! then scales results back to 16 bits. CRC-32 uses these operations directly.
59 +
60 +
use crate::algorithm;
61 +
use crate::consts::CRC_CHUNK_SIZE;
62 +
use crate::crc32::consts::{PSHUFB_SHF_TABLE_FORWARD, PSHUFB_SHF_TABLE_REVERSE, SIMD_CONSTANTS};
63 +
use crate::enums::Reflector;
64 +
use crate::structs::CrcState;
65 +
use crate::traits::{ArchOps, EnhancedCrcWidth};
66 +
67 +
/// SIMD constants shared by CRC-16 and CRC-32
68 +
pub const WIDTH32_CONSTANTS_REFLECTED: [[u64; 2]; 4] = [
69 +
    [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
70 +
    [0x8080808080808080, 0x8080808080808080], // mask1
71 +
    [0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF], // mask2 reverse
72 +
    [0x0000000000000000, 0x0000000000000000], // unused
73 +
];
74 +
75 +
pub const WIDTH32_CONSTANTS_FORWARD: [[u64; 2]; 4] = [
76 +
    [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
77 +
    [0x8080808080808080, 0x8080808080808080], // mask1
78 +
    [0xffffffffffffffff, 0x00000000ffffffff], // mask2 forward
79 +
    [0x0000000000000000, 0x0000000000000000], // unused
80 +
];
81 +
82 +
/// Load constants for 32-bit-space CRC operations
83 +
#[inline(always)]
84 +
pub fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
85 +
    if reflected {
86 +
        WIDTH32_CONSTANTS_REFLECTED
87 +
    } else {
88 +
        WIDTH32_CONSTANTS_FORWARD
89 +
    }
90 +
}
91 +
92 +
/// Fold 16 bytes for 32-bit-space CRC operations
93 +
#[inline(always)]
94 +
pub unsafe fn fold_16<T: ArchOps>(
95 +
    state: &mut CrcState<T::Vector>,
96 +
    coeff: T::Vector,
97 +
    data_to_xor: T::Vector,
98 +
    ops: &T,
99 +
) where
100 +
    T::Vector: Copy,
101 +
{
102 +
    let (h, l) = if state.reflected {
103 +
        (
104 +
            ops.carryless_mul_10(state.value, coeff),
105 +
            ops.carryless_mul_01(state.value, coeff),
106 +
        )
107 +
    } else {
108 +
        (
109 +
            ops.carryless_mul_00(state.value, coeff),
110 +
            ops.carryless_mul_11(state.value, coeff),
111 +
        )
112 +
    };
113 +
    state.value = ops.xor3_vectors(h, l, data_to_xor);
114 +
}
115 +
116 +
/// Fold to width for 32-bit-space CRC operations
117 +
#[inline(always)]
118 +
pub unsafe fn fold_width<T: ArchOps>(
119 +
    state: &mut CrcState<T::Vector>,
120 +
    high: u64,
121 +
    low: u64,
122 +
    ops: &T,
123 +
) where
124 +
    T::Vector: Copy,
125 +
{
126 +
    let coeff_vector_low = ops.create_vector_from_u64_pair_non_reflected(0, low);
127 +
    let coeff_vector_high = ops.create_vector_from_u64_pair_non_reflected(high, 0);
128 +
129 +
    state.value = if state.reflected {
130 +
        ops.xor_vectors(
131 +
            ops.carryless_mul_00(state.value, coeff_vector_low),
132 +
            ops.shift_right_8(state.value),
133 +
        )
134 +
    } else {
135 +
        ops.xor_vectors(
136 +
            ops.carryless_mul_01(state.value, coeff_vector_low),
137 +
            ops.shift_left_8(state.value),
138 +
        )
139 +
    };
140 +
141 +
    let (clmul, masked) = if state.reflected {
142 +
        let mask2 = ops.load_aligned(&[0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF]);
143 +
        let masked = ops.and_vectors(state.value, mask2);
144 +
        let shifted = ops.shift_left_12(state.value);
145 +
        let clmul = ops.carryless_mul_11(shifted, coeff_vector_high);
146 +
        (clmul, masked)
147 +
    } else {
148 +
        let mask2 = ops.load_aligned(&[0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF]);
149 +
        let masked = ops.and_vectors(state.value, mask2);
150 +
        let shifted = ops.shift_right_12(state.value);
151 +
        let clmul = ops.carryless_mul_10(shifted, coeff_vector_high);
152 +
        (clmul, masked)
153 +
    };
154 +
155 +
    state.value = ops.xor_vectors(clmul, masked);
156 +
}
157 +
158 +
/// Barrett reduction for 32-bit-space CRC operations
159 +
/// Returns the full u64 result; caller extracts appropriate bits
160 +
#[inline(always)]
161 +
pub unsafe fn barrett_reduction<T: ArchOps>(
162 +
    state: &CrcState<T::Vector>,
163 +
    poly: u64,
164 +
    mu: u64,
165 +
    ops: &T,
166 +
) -> [u64; 2]
167 +
where
168 +
    T::Vector: Copy,
169 +
{
170 +
    let x = state.value;
171 +
    let mu_poly = ops.create_vector_from_u64_pair_non_reflected(poly, mu);
172 +
173 +
    if state.reflected {
174 +
        let clmul1 = ops.carryless_mul_00(x, mu_poly);
175 +
        let clmul2 = ops.carryless_mul_10(clmul1, mu_poly);
176 +
        let xorred = ops.xor_vectors(x, clmul2);
177 +
        ops.extract_u64s(xorred)
178 +
    } else {
179 +
        let clmul1 = ops.shift_left_4(ops.carryless_mul_01(x, mu_poly));
180 +
        let clmul2_shifted = ops.shift_left_4(ops.carryless_mul_11(clmul1, mu_poly));
181 +
        let final_xor = ops.xor_vectors(clmul2_shifted, x);
182 +
        ops.extract_u64s(final_xor)
183 +
    }
184 +
}
185 +
186 +
/// Create coefficient vector for 32-bit-space CRC operations
187 +
#[inline(always)]
188 +
pub unsafe fn create_coefficient<T: ArchOps>(
189 +
    high: u64,
190 +
    low: u64,
191 +
    ops: &T,
192 +
) -> T::Vector
193 +
where
194 +
    T::Vector: Copy,
195 +
{
196 +
    ops.create_vector_from_u64_pair_non_reflected(high, low)
197 +
}
198 +
199 +
/// Get shuffle table pointer for 32-bit-space CRC operations
200 +
#[inline(always)]
201 +
pub fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) {
202 +
    if reflected {
203 +
        let base_ptr = &PSHUFB_SHF_TABLE_REVERSE as *const _ as *const u8;
204 +
        (base_ptr, remaining_len)
205 +
    } else {
206 +
        let base_ptr = &PSHUFB_SHF_TABLE_FORWARD as *const _ as *const u8;
207 +
        (base_ptr, 16 - remaining_len)
208 +
    }
209 +
}
210 +
211 +
/// Process inputs smaller than 16 bytes for 32-bit-space CRC operations
212 +
#[inline]
213 +
#[cfg_attr(
214 +
    any(target_arch = "x86", target_arch = "x86_64"),
215 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
216 +
)]
217 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
218 +
pub unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(
219 +
    data: &[u8],
220 +
    state: &mut CrcState<T::Vector>,
221 +
    reflector: &Reflector<T::Vector>,
222 +
    keys: [u64; 23],
223 +
    ops: &T,
224 +
) -> W::Value
225 +
where
226 +
    T::Vector: Copy,
227 +
{
228 +
    // Implementation shared by CRC-16 and CRC-32
229 +
    // ... (full implementation)
230 +
}
231 +
```
232 +
233 +
### 2. Updated `src/crc16/algorithm.rs`
234 +
235 +
The Width16 implementation delegates to shared operations:
236 +
237 +
```rust
238 +
impl EnhancedCrcWidth for Width16 {
239 +
    #[inline(always)]
240 +
    fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
241 +
        crate::crc32::width32_ops::load_constants(reflected)
242 +
    }
243 +
244 +
    #[inline(always)]
245 +
    unsafe fn fold_16<T: ArchOps>(...) {
246 +
        crate::crc32::width32_ops::fold_16(state, coeff, data_to_xor, ops)
247 +
    }
248 +
249 +
    #[inline(always)]
250 +
    unsafe fn barrett_reduction<T: ArchOps>(...) -> Self::Value {
251 +
        let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops);
252 +
        // Extract 16-bit result
253 +
        if state.reflected {
254 +
            u64s[1] as u16
255 +
        } else {
256 +
            ((u64s[0] >> 32) >> 16) as u16
257 +
        }
258 +
    }
259 +
    
260 +
    // ... other delegating methods
261 +
}
262 +
263 +
// process_0_to_15 delegates to shared implementation
264 +
pub(crate) unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(...) -> W::Value {
265 +
    crate::crc32::width32_ops::process_0_to_15::<T, W>(data, state, reflector, keys, ops)
266 +
}
267 +
```
268 +
269 +
### 3. Updated `src/crc32/algorithm.rs`
270 +
271 +
The Width32 implementation also delegates to shared operations:
272 +
273 +
```rust
274 +
impl EnhancedCrcWidth for Width32 {
275 +
    #[inline(always)]
276 +
    fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
277 +
        crate::crc32::width32_ops::load_constants(reflected)
278 +
    }
279 +
280 +
    #[inline(always)]
281 +
    unsafe fn barrett_reduction<T: ArchOps>(...) -> Self::Value {
282 +
        let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops);
283 +
        // Extract 32-bit result
284 +
        if state.reflected {
285 +
            u64s[1] as u32
286 +
        } else {
287 +
            (u64s[0] >> 32) as u32
288 +
        }
289 +
    }
290 +
    
291 +
    // ... other delegating methods
292 +
}
293 +
294 +
// process_0_to_15 delegates to shared implementation
295 +
pub(crate) unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(...) -> W::Value {
296 +
    crate::crc32::width32_ops::process_0_to_15::<T, W>(data, state, reflector, keys, ops)
297 +
}
298 +
```
299 +
300 +
### 4. Updated `src/crc32/mod.rs`
301 +
302 +
Export the new module:
303 +
304 +
```rust
305 +
pub mod algorithm;
306 +
pub mod consts;
307 +
pub(crate) mod width32_ops;  // NEW
308 +
```
309 +
310 +
## Data Models
311 +
312 +
No changes to data models. The refactoring only affects internal implementation.
313 +
314 +
## Correctness Properties
315 +
316 +
*A property is a characteristic or behavior that should hold true across all valid executions of a system.*
317 +
318 +
### Property 1: CRC-16 Computation Unchanged
319 +
320 +
*For any* input byte sequence and any CRC-16 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring.
321 +
322 +
**Validates: Requirements 4.1**
323 +
324 +
### Property 2: CRC-32 Computation Unchanged
325 +
326 +
*For any* input byte sequence and any CRC-32 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring.
327 +
328 +
**Validates: Requirements 4.2**
329 +
330 +
### Property 3: CRC-64 Computation Unchanged
331 +
332 +
*For any* input byte sequence and any CRC-64 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring.
333 +
334 +
**Validates: Requirements 4.3**
335 +
336 +
## Error Handling
337 +
338 +
No changes to error handling. The refactoring is purely internal.
339 +
340 +
## Testing Strategy
341 +
342 +
### Existing Tests
343 +
344 +
All existing tests serve as regression tests:
345 +
- CRC-16 check value tests (0x906E, 0xD0DB)
346 +
- CRC-32 check value tests
347 +
- CRC-64 check value tests
348 +
- Property-based tests comparing against `crc` crate
349 +
- Length-based tests for various input sizes
350 +
351 +
### Verification Approach
352 +
353 +
1. Run `cargo test` before refactoring to establish baseline
354 +
2. Perform refactoring
355 +
3. Run `cargo test` after refactoring to verify no regressions
356 +
4. Run `cargo fmt --check` and `cargo clippy -- -D warnings`
357 +
358 +
No new tests are needed since this is a pure refactoring with no behavior changes.
added vendor/crc-fast/.kiro/specs/crc-width32-shared-base/prompt.md +28 −0
1 +
# CRC Width-32 Shared Base Refactoring
2 +
3 +
## Goal
4 +
5 +
Refactor the CRC-16 and CRC-32 algorithm implementations to share a common base, reducing code duplication and preparing for future CRC width additions (like CRC-8).
6 +
7 +
## Background
8 +
9 +
CRC-16 computation is performed by scaling 16-bit values to 32-bit space, using the CRC-32 algorithm infrastructure, and then scaling the result back to 16 bits. This means CRC-16 and CRC-32 share nearly identical implementations for:
10 +
11 +
- `process_0_to_15()` function (~100 lines each, nearly identical)
12 +
- `load_constants()` - identical constants
13 +
- `fold_16()` - identical logic
14 +
- `fold_width()` - identical logic
15 +
- `barrett_reduction()` - nearly identical (just different final extraction)
16 +
- `create_coefficient()` - identical
17 +
- `perform_final_reduction()` - identical
18 +
- `get_last_bytes_table_ptr()` - identical
19 +
20 +
## Approach
21 +
22 +
Create a shared module (`src/crc32/width32_ops.rs`) containing the common 32-bit-space operations that both CRC-16 and CRC-32 use. The Width16 and Width32 trait implementations will delegate to these shared functions, with Width16 performing the final 16-bit extraction where needed.
23 +
24 +
## Constraints
25 +
26 +
- Must maintain full backwards compatibility with existing CRC-16, CRC-32, and CRC-64 functionality
27 +
- All existing tests must continue to pass
28 +
- The refactoring should make it easier to add future CRC widths (like CRC-8)
added vendor/crc-fast/.kiro/specs/crc-width32-shared-base/requirements.md +81 −0
1 +
# Requirements Document
2 +
3 +
## Introduction
4 +
5 +
This feature refactors the CRC-16 and CRC-32 algorithm implementations to share a common base module, reducing code duplication. Since CRC-16 operates in 32-bit space (scaling values up and down), both widths use nearly identical SIMD operations. Extracting this shared logic into a common module improves maintainability and prepares the codebase for future CRC width additions.
6 +
7 +
## Glossary
8 +
9 +
- **Width32_Ops**: The shared module containing 32-bit-space SIMD operations used by both CRC-16 and CRC-32
10 +
- **EnhancedCrcWidth**: The trait that defines width-specific CRC operations
11 +
- **Width16**: The CRC-16 width implementation that operates in 32-bit space
12 +
- **Width32**: The CRC-32 width implementation
13 +
- **Width64**: The CRC-64 width implementation (unchanged by this refactoring)
14 +
- **process_0_to_15**: The function handling small inputs (0-15 bytes)
15 +
- **Barrett_Reduction**: The algorithm for fast modular reduction used in final CRC computation
16 +
17 +
## Requirements
18 +
19 +
### Requirement 1: Create Shared Width32 Operations Module
20 +
21 +
**User Story:** As a library maintainer, I want shared 32-bit-space operations in a common module, so that CRC-16 and CRC-32 implementations don't duplicate code.
22 +
23 +
#### Acceptance Criteria
24 +
25 +
1. THE system SHALL create a new module `src/crc32/width32_ops.rs` containing shared 32-bit-space operations
26 +
2. THE Width32_Ops module SHALL export a `process_0_to_15_width32()` function that handles small inputs for both CRC-16 and CRC-32
27 +
3. THE Width32_Ops module SHALL export helper functions for `fold_16`, `fold_width`, and `barrett_reduction` operations
28 +
4. THE Width32_Ops module SHALL export the shared `load_constants()` values
29 +
5. THE Width32_Ops module SHALL export the shared `get_last_bytes_table_ptr()` logic
30 +
31 +
### Requirement 2: Refactor Width16 Implementation
32 +
33 +
**User Story:** As a library maintainer, I want the Width16 implementation to delegate to shared operations, so that code duplication is eliminated.
34 +
35 +
#### Acceptance Criteria
36 +
37 +
1. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `fold_16()` to the shared Width32_Ops module
38 +
2. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `fold_width()` to the shared Width32_Ops module
39 +
3. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `create_coefficient()` to the shared Width32_Ops module
40 +
4. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `perform_final_reduction()` to the shared Width32_Ops module
41 +
5. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `get_last_bytes_table_ptr()` to the shared Width32_Ops module
42 +
6. THE Width16 `barrett_reduction()` SHALL call the shared implementation and extract the 16-bit result
43 +
7. THE crc16::algorithm::process_0_to_15 function SHALL be removed and replaced with a call to the shared implementation
44 +
45 +
### Requirement 3: Refactor Width32 Implementation
46 +
47 +
**User Story:** As a library maintainer, I want the Width32 implementation to use shared operations, so that code duplication is eliminated.
48 +
49 +
#### Acceptance Criteria
50 +
51 +
1. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `fold_16()` to the shared Width32_Ops module
52 +
2. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `fold_width()` to the shared Width32_Ops module
53 +
3. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `create_coefficient()` to the shared Width32_Ops module
54 +
4. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `perform_final_reduction()` to the shared Width32_Ops module
55 +
5. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `get_last_bytes_table_ptr()` to the shared Width32_Ops module
56 +
6. THE Width32 `barrett_reduction()` SHALL call the shared implementation and extract the 32-bit result
57 +
7. THE crc32::algorithm::process_0_to_15 function SHALL call the shared implementation
58 +
59 +
### Requirement 4: Backwards Compatibility
60 +
61 +
**User Story:** As an existing library user, I want all CRC functionality to remain unchanged, so that my existing code continues to work correctly.
62 +
63 +
#### Acceptance Criteria
64 +
65 +
1. WHEN computing CRC-16 checksums after refactoring, THE system SHALL produce identical results to the current implementation
66 +
2. WHEN computing CRC-32 checksums after refactoring, THE system SHALL produce identical results to the current implementation
67 +
3. WHEN computing CRC-64 checksums after refactoring, THE system SHALL produce identical results to the current implementation
68 +
4. THE public API SHALL remain unchanged with no breaking changes
69 +
5. ALL existing tests SHALL continue to pass without modification
70 +
71 +
### Requirement 5: Code Quality
72 +
73 +
**User Story:** As a library maintainer, I want the refactored code to be clean and maintainable, so that future development is easier.
74 +
75 +
#### Acceptance Criteria
76 +
77 +
1. THE refactored code SHALL pass `cargo fmt --check` without errors
78 +
2. THE refactored code SHALL pass `cargo clippy -- -D warnings` without warnings
79 +
3. THE refactored code SHALL pass all existing tests via `cargo test`
80 +
4. THE shared module SHALL have clear documentation explaining its purpose
81 +
5. THE Width16 and Width32 implementations SHALL have comments indicating delegation to shared operations where applicable
added vendor/crc-fast/.kiro/specs/crc-width32-shared-base/tasks.md +133 −0
1 +
# Implementation Plan: CRC Width-32 Shared Base
2 +
3 +
## Overview
4 +
5 +
This implementation refactors CRC-16 and CRC-32 to share common 32-bit-space operations, eliminating ~200 lines of duplicated code. The refactoring creates a new `width32_ops.rs` module and updates both Width16 and Width32 implementations to delegate to it.
6 +
7 +
## Tasks
8 +
9 +
- [x] 1. Create shared width32_ops module
10 +
  - [x] 1.1 Create src/crc32/width32_ops.rs with shared constants
11 +
    - Add module documentation explaining purpose
12 +
    - Add WIDTH32_CONSTANTS_REFLECTED and WIDTH32_CONSTANTS_FORWARD
13 +
    - Add load_constants() function
14 +
    - _Requirements: 1.1, 1.4_
15 +
16 +
  - [x] 1.2 Add shared fold operations to width32_ops
17 +
    - Implement fold_16() function
18 +
    - Implement fold_width() function
19 +
    - _Requirements: 1.3_
20 +
21 +
  - [x] 1.3 Add shared barrett_reduction to width32_ops
22 +
    - Implement barrett_reduction() returning [u64; 2] for caller to extract bits
23 +
    - _Requirements: 1.3_
24 +
25 +
  - [x] 1.4 Add shared helper functions to width32_ops
26 +
    - Implement create_coefficient() function
27 +
    - Implement get_last_bytes_table_ptr() function
28 +
    - _Requirements: 1.3, 1.5_
29 +
30 +
  - [x] 1.5 Add shared process_0_to_15 to width32_ops
31 +
    - Move the shared implementation from crc32/algorithm.rs
32 +
    - _Requirements: 1.2_
33 +
34 +
  - [x] 1.6 Update src/crc32/mod.rs to export width32_ops
35 +
    - Add `pub(crate) mod width32_ops;`
36 +
    - _Requirements: 1.1_
37 +
38 +
- [x] 2. Checkpoint - Verify module compiles
39 +
  - Ensure `cargo check` passes
40 +
41 +
- [x] 3. Refactor Width32 implementation
42 +
  - [x] 3.1 Update Width32 load_constants to delegate
43 +
    - Call width32_ops::load_constants()
44 +
    - _Requirements: 3.1_
45 +
46 +
  - [x] 3.2 Update Width32 fold_16 to delegate
47 +
    - Call width32_ops::fold_16()
48 +
    - _Requirements: 3.1_
49 +
50 +
  - [x] 3.3 Update Width32 fold_width to delegate
51 +
    - Call width32_ops::fold_width()
52 +
    - _Requirements: 3.2_
53 +
54 +
  - [x] 3.4 Update Width32 barrett_reduction to delegate
55 +
    - Call width32_ops::barrett_reduction() and extract 32-bit result
56 +
    - _Requirements: 3.6_
57 +
58 +
  - [x] 3.5 Update Width32 create_coefficient to delegate
59 +
    - Call width32_ops::create_coefficient()
60 +
    - _Requirements: 3.3_
61 +
62 +
  - [x] 3.6 Update Width32 perform_final_reduction to delegate
63 +
    - Call width32_ops::fold_width() and width32_ops::barrett_reduction()
64 +
    - _Requirements: 3.4_
65 +
66 +
  - [x] 3.7 Update Width32 get_last_bytes_table_ptr to delegate
67 +
    - Call width32_ops::get_last_bytes_table_ptr()
68 +
    - _Requirements: 3.5_
69 +
70 +
  - [x] 3.8 Update crc32::algorithm::process_0_to_15 to delegate
71 +
    - Call width32_ops::process_0_to_15()
72 +
    - _Requirements: 3.7_
73 +
74 +
- [x] 4. Checkpoint - Verify CRC-32 still works
75 +
  - Run `cargo test` to ensure CRC-32 tests pass
76 +
77 +
- [x] 5. Refactor Width16 implementation
78 +
  - [x] 5.1 Update Width16 load_constants to delegate
79 +
    - Call width32_ops::load_constants()
80 +
    - _Requirements: 2.1_
81 +
82 +
  - [x] 5.2 Update Width16 fold_16 to delegate
83 +
    - Call width32_ops::fold_16()
84 +
    - _Requirements: 2.1_
85 +
86 +
  - [x] 5.3 Update Width16 fold_width to delegate
87 +
    - Call width32_ops::fold_width()
88 +
    - _Requirements: 2.2_
89 +
90 +
  - [x] 5.4 Update Width16 barrett_reduction to delegate
91 +
    - Call width32_ops::barrett_reduction() and extract 16-bit result
92 +
    - _Requirements: 2.6_
93 +
94 +
  - [x] 5.5 Update Width16 create_coefficient to delegate
95 +
    - Call width32_ops::create_coefficient()
96 +
    - _Requirements: 2.3_
97 +
98 +
  - [x] 5.6 Update Width16 perform_final_reduction to delegate
99 +
    - Call width32_ops::fold_width() and width32_ops::barrett_reduction()
100 +
    - _Requirements: 2.4_
101 +
102 +
  - [x] 5.7 Update Width16 get_last_bytes_table_ptr to delegate
103 +
    - Call width32_ops::get_last_bytes_table_ptr()
104 +
    - _Requirements: 2.5_
105 +
106 +
  - [x] 5.8 Update crc16::algorithm::process_0_to_15 to delegate
107 +
    - Call width32_ops::process_0_to_15()
108 +
    - _Requirements: 2.7_
109 +
110 +
- [x] 6. Checkpoint - Verify CRC-16 still works
111 +
  - Run `cargo test` to ensure CRC-16 tests pass
112 +
113 +
- [x] 7. Final verification and cleanup
114 +
  - [x] 7.1 Run full test suite
115 +
    - Run `cargo test` to verify all tests pass
116 +
    - _Requirements: 4.5_
117 +
118 +
  - [x] 7.2 Run code quality checks
119 +
    - Run `cargo fmt --check`
120 +
    - Run `cargo clippy -- -D warnings`
121 +
    - _Requirements: 5.1, 5.2, 5.3_
122 +
123 +
  - [x] 7.3 Verify CRC-64 unchanged
124 +
    - Confirm CRC-64 tests still pass
125 +
    - _Requirements: 4.3_
126 +
127 +
## Notes
128 +
129 +
- This is a pure refactoring with no behavior changes
130 +
- All existing tests serve as regression tests
131 +
- The shared module is placed in crc32/ since CRC-32 is the "native" width for these operations
132 +
- CRC-16 scales to 32-bit space, uses shared ops, then scales back to 16 bits
133 +
- CRC-64 remains unchanged as it has different SIMD operations
added vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/design.md +368 −0
1 +
# Design Document: CRC-16 Hardware Acceleration
2 +
3 +
## Overview
4 +
5 +
This design extends the crc-fast library to support hardware-accelerated CRC-16 computation using the same PCLMULQDQ/PMULL-based approach already implemented for CRC-32 and CRC-64. The key insight from the reference implementations is that CRC-16 computation can be performed by scaling the 16-bit values to 32-bit space, using the existing CRC-32 algorithm infrastructure, and then scaling the result back to 16 bits.
6 +
7 +
The implementation follows a two-phase approach:
8 +
1. **Phase 1**: Extend the key generator (`generate.rs`) to produce correct CRC-16 folding keys
9 +
2. **Phase 2**: Extend the algorithm module to handle width=16 by leveraging the CRC-32 code path with appropriate scaling
10 +
11 +
## Architecture
12 +
13 +
### High-Level Design
14 +
15 +
```
16 +
┌─────────────────────────────────────────────────────────────────────┐
17 +
│                         Public API                                   │
18 +
│  checksum(), Digest, checksum_with_params(), CrcParams::new()       │
19 +
└─────────────────────────────────────────────────────────────────────┘
20 +
                                    │
21 +
                                    ▼
22 +
┌─────────────────────────────────────────────────────────────────────┐
23 +
│                      Width Dispatcher                                │
24 +
│  arch/mod.rs: routes to Width16, Width32, or Width64                │
25 +
└─────────────────────────────────────────────────────────────────────┘
26 +
                                    │
27 +
                    ┌───────────────┼───────────────┐
28 +
                    ▼               ▼               ▼
29 +
              ┌──────────┐   ┌──────────┐   ┌──────────┐
30 +
              │ Width16  │   │ Width32  │   │ Width64  │
31 +
              │ (NEW)    │   │(existing)│   │(existing)│
32 +
              └──────────┘   └──────────┘   └──────────┘
33 +
                    │               │               │
34 +
                    └───────────────┼───────────────┘
35 +
                                    ▼
36 +
┌─────────────────────────────────────────────────────────────────────┐
37 +
│                    SIMD Algorithm Core                               │
38 +
│  algorithm.rs: fold-by-8, Barrett reduction                         │
39 +
└─────────────────────────────────────────────────────────────────────┘
40 +
```
41 +
42 +
### CRC-16 Scaling Strategy
43 +
44 +
The reference assembly implementations reveal that CRC-16 uses the same PCLMULQDQ algorithm as CRC-32, but with values scaled to 32-bit space:
45 +
46 +
**Forward (non-reflected) CRC-16:**
47 +
1. Scale initial CRC: `initial_crc << 16` (shift left 16 bits)
48 +
2. Process using CRC-32 algorithm with CRC-16 polynomial scaled to 32 bits
49 +
3. Scale result: `result >> 16` (shift right 16 bits)
50 +
51 +
**Reflected CRC-16:**
52 +
1. Initial CRC used directly (no scaling needed for reflected)
53 +
2. Process using CRC-32 algorithm with reflected CRC-16 polynomial
54 +
3. Result extracted from appropriate register position
55 +
56 +
## Components and Interfaces
57 +
58 +
### 1. Key Generator Extension (`src/generate.rs`)
59 +
60 +
The key generator must be extended to handle width=16. CRC-16 uses the same exponents as CRC-32 (32*N distances) because the folding algorithm operates on 128-bit SIMD registers regardless of CRC width.
61 +
62 +
```rust
63 +
/// Exponents for CRC-16 key generation (same as CRC-32)
64 +
const CRC16_EXPONENTS: [u64; 23] = CRC32_EXPONENTS;
65 +
66 +
/// Generates folding keys for CRC-16
67 +
pub fn keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] {
68 +
    let exponents = match width {
69 +
        16 => CRC16_EXPONENTS,  // NEW
70 +
        32 => CRC32_EXPONENTS,
71 +
        64 => CRC64_EXPONENTS,
72 +
        _ => panic!("Unsupported width: {width}"),
73 +
    };
74 +
    // ... rest of implementation
75 +
}
76 +
```
77 +
78 +
**Key Generation Functions:**
79 +
80 +
```rust
81 +
/// Computes a CRC-16 folding key for a given bit distance
82 +
fn crc16_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 {
83 +
    // CRC-16 uses 17-bit polynomial (16 bits + implicit leading 1)
84 +
    // Algorithm similar to CRC-32 but with different bit positions
85 +
    if exponent < 32 {
86 +
        return 0;
87 +
    }
88 +
    
89 +
    let mut n: u64 = 0x080000000;  // Start at x^32 (same as CRC-32)
90 +
    let e = exponent - 31;
91 +
    
92 +
    for _ in 0..e {
93 +
        n <<= 1;
94 +
        if (n & 0x100000000) != 0 {
95 +
            n ^= polynomial;  // polynomial already has bit 32 set
96 +
        }
97 +
    }
98 +
    
99 +
    if reflected {
100 +
        bit_reverse_16(n) >> 31  // Reverse 16 bits, align
101 +
    } else {
102 +
        n << 32  // Shift to upper 32 bits
103 +
    }
104 +
}
105 +
106 +
/// Computes Barrett reduction constant (μ) for CRC-16
107 +
fn crc16_mu(polynomial: u64, reflected: bool) -> u64 {
108 +
    // Same algorithm as CRC-32 mu
109 +
    let mut n: u64 = 0x100000000;
110 +
    let mut q: u64 = 0;
111 +
    
112 +
    for _ in 0..33 {
113 +
        q <<= 1;
114 +
        if n & 0x100000000 != 0 {
115 +
            q |= 1;
116 +
            n ^= polynomial;
117 +
        }
118 +
        n <<= 1;
119 +
    }
120 +
    
121 +
    if reflected {
122 +
        bit_reverse(q) >> 31
123 +
    } else {
124 +
        q
125 +
    }
126 +
}
127 +
128 +
/// Formats CRC-16 polynomial for PCLMULQDQ operations
129 +
fn crc16_polynomial(polynomial: u64, reflected: bool) -> u64 {
130 +
    if !reflected {
131 +
        // Forward: polynomial << 16 with bit 32 set
132 +
        (polynomial << 16) | (1u64 << 32)
133 +
    } else {
134 +
        // Reflected: bit-reverse 16-bit poly, shift left 1, set LSB
135 +
        let reversed = bit_reverse_16(polynomial as u16);
136 +
        ((reversed as u64) << 1) | 1
137 +
    }
138 +
}
139 +
```
140 +
141 +
### 2. Width16 Implementation (`src/structs.rs`)
142 +
143 +
Add a new width type for CRC-16:
144 +
145 +
```rust
146 +
/// CRC-16 width implementation
147 +
#[derive(Clone, Copy)]
148 +
pub struct Width16;
149 +
150 +
impl CrcWidth for Width16 {
151 +
    const WIDTH: u32 = 16;
152 +
    type Value = u16;
153 +
}
154 +
```
155 +
156 +
### 3. EnhancedCrcWidth for Width16 (`src/crc16/algorithm.rs`)
157 +
158 +
The CRC-16 implementation leverages the CRC-32 infrastructure with scaling:
159 +
160 +
```rust
161 +
impl EnhancedCrcWidth for Width16 {
162 +
    fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
163 +
        // Use CRC-32 constants - same SIMD operations
164 +
        crc32::consts::SIMD_CONSTANTS
165 +
    }
166 +
167 +
    unsafe fn create_state<T: ArchOps>(
168 +
        value: Self::Value,
169 +
        reflected: bool,
170 +
        ops: &T,
171 +
    ) -> CrcState<T::Vector> {
172 +
        if reflected {
173 +
            // Reflected: value in low position
174 +
            CrcState {
175 +
                value: ops.create_vector_from_u32(value as u32, false),
176 +
                reflected,
177 +
            }
178 +
        } else {
179 +
            // Forward: scale to 32 bits, position in high bytes
180 +
            let scaled = (value as u32) << 16;
181 +
            CrcState {
182 +
                value: ops.create_vector_from_u32(scaled, true),
183 +
                reflected,
184 +
            }
185 +
        }
186 +
    }
187 +
188 +
    unsafe fn extract_result<T: ArchOps>(
189 +
        vector: T::Vector,
190 +
        reflected: bool,
191 +
        ops: &T,
192 +
    ) -> Self::Value {
193 +
        let [low, _high] = ops.extract_u64s(vector);
194 +
        if reflected {
195 +
            // Reflected: extract from appropriate position
196 +
            ((low >> 32) & 0xFFFF) as u16
197 +
        } else {
198 +
            // Forward: scale back from 32 bits
199 +
            ((low >> 48) & 0xFFFF) as u16
200 +
        }
201 +
    }
202 +
203 +
    // fold_16, fold_width, barrett_reduction delegate to CRC-32 implementations
204 +
    // with appropriate value scaling
205 +
}
206 +
```
207 +
208 +
### 4. Architecture Dispatcher Update (`src/arch/mod.rs`)
209 +
210 +
Update the dispatcher to handle width=16:
211 +
212 +
```rust
213 +
pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 {
214 +
    match params.width {
215 +
        16 => algorithm::update::<_, Width16>(state as u16, bytes, params, ops) as u64,
216 +
        32 => algorithm::update::<_, Width32>(state as u32, bytes, params, ops) as u64,
217 +
        64 => algorithm::update::<_, Width64>(state, bytes, params, ops),
218 +
        _ => panic!("Unsupported CRC width: {}", params.width),
219 +
    }
220 +
}
221 +
```
222 +
223 +
### 5. CRC-16 Constants (`src/crc16/consts.rs`)
224 +
225 +
Update the existing stub with complete constants:
226 +
227 +
```rust
228 +
pub const CRC16_IBM_SDLC: CrcParams = CrcParams {
229 +
    name: NAME_CRC16_IBM_SDLC,
230 +
    algorithm: CrcAlgorithm::Crc16IbmSdlc,
231 +
    width: 16,
232 +
    poly: 0x1021,
233 +
    init: 0xFFFF,
234 +
    refin: true,
235 +
    refout: true,
236 +
    xorout: 0xFFFF,
237 +
    check: 0x906E,
238 +
    keys: CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
239 +
};
240 +
241 +
pub const CRC16_T10_DIF: CrcParams = CrcParams {
242 +
    name: NAME_CRC16_T10_DIF,
243 +
    algorithm: CrcAlgorithm::Crc16T10Dif,
244 +
    width: 16,
245 +
    poly: 0x8BB7,
246 +
    init: 0x0000,
247 +
    refin: false,
248 +
    refout: false,
249 +
    xorout: 0x0000,
250 +
    check: 0xD0DB,
251 +
    keys: CrcKeysStorage::from_keys_fold_256(KEYS_8BB7_FORWARD),
252 +
};
253 +
```
254 +
255 +
## Data Models
256 +
257 +
### CRC-16 Polynomial Representation
258 +
259 +
| Variant | Polynomial | Scaled Polynomial (32-bit) | Reflected Polynomial |
260 +
|---------|------------|---------------------------|---------------------|
261 +
| T10-DIF | 0x8BB7 | 0x18BB70000 | N/A (forward) |
262 +
| IBM-SDLC | 0x1021 | 0x110210000 | 0x10811 |
263 +
264 +
### Key Array Structure
265 +
266 +
The 23-key array structure remains unchanged:
267 +
268 +
| Index | Purpose | CRC-16 Value |
269 +
|-------|---------|--------------|
270 +
| 0 | Unused | 0 |
271 +
| 1-2 | 16-byte fold (32*3, 32*5) | Computed |
272 +
| 3-4 | 128-byte fold (32*31, 32*33) | Computed |
273 +
| 5-6 | Short fold (32*3, 32*2) | Computed |
274 +
| 7 | μ (Barrett constant) | Computed |
275 +
| 8 | Polynomial | Scaled poly |
276 +
| 9-20 | Progressive fold distances | Computed |
277 +
| 21-22 | 256-byte fold (32*63, 32*65) | Computed |
278 +
279 +
280 +
281 +
## Correctness Properties
282 +
283 +
*A property is a characteristic or behavior that should hold true across all valid executions of a system—essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.*
284 +
285 +
### Property 1: Forward CRC-16 Polynomial Formatting
286 +
287 +
*For any* 16-bit polynomial value P, when generating the polynomial key for forward (non-reflected) CRC-16, the result SHALL equal `(P << 16) | (1 << 32)`.
288 +
289 +
**Validates: Requirements 1.5**
290 +
291 +
### Property 2: Reflected CRC-16 Polynomial Formatting
292 +
293 +
*For any* 16-bit polynomial value P, when generating the polynomial key for reflected CRC-16, the result SHALL equal `(bit_reverse_16(P) << 1) | 1`.
294 +
295 +
**Validates: Requirements 1.6**
296 +
297 +
### Property 3: CRC-16 Computation Matches Reference
298 +
299 +
*For any* valid CRC-16 parameters (polynomial, init, refin, refout, xorout) and any input byte sequence, the computed CRC-16 checksum SHALL match the result from the `crc` crate reference implementation.
300 +
301 +
**Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3**
302 +
303 +
### Property 4: CRC-32 and CRC-64 Backwards Compatibility
304 +
305 +
*For any* existing CRC-32 or CRC-64 configuration and any input byte sequence, the computed checksum SHALL match the result from the `crc` crate reference implementation, ensuring no regression from CRC-16 changes.
306 +
307 +
**Validates: Requirements 3.1, 3.2, 3.4**
308 +
309 +
### Property 5: CRC-16 Checksum Combination Round-Trip
310 +
311 +
*For any* valid CRC-16 parameters and any two input byte sequences A and B, `checksum_combine(checksum(A), checksum(B), len(B))` SHALL equal `checksum(A + B)`.
312 +
313 +
**Validates: Requirements 6.4**
314 +
315 +
## Error Handling
316 +
317 +
### Invalid Width
318 +
319 +
When `CrcParams::new()` is called with an unsupported width (not 16, 32, or 64), the function SHALL panic with a descriptive error message.
320 +
321 +
### Invalid Polynomial
322 +
323 +
CRC-16 polynomials must fit in 16 bits. If a polynomial larger than 0xFFFF is provided for width=16, the behavior is undefined (caller's responsibility to provide valid parameters).
324 +
325 +
### Empty Input
326 +
327 +
Empty input (`&[]`) is valid and SHALL return the initial CRC value XORed with xorout, consistent with existing CRC-32 and CRC-64 behavior.
328 +
329 +
## Testing Strategy
330 +
331 +
### Unit Tests
332 +
333 +
Unit tests will verify specific examples and edge cases:
334 +
335 +
1. **Check Value Tests**: Verify "123456789" produces correct check values for CRC-16/IBM-SDLC (0x906E) and CRC-16/T10-DIF (0xD0DB)
336 +
2. **Key Generation Tests**: Verify generated keys match reference values in `KEYS_8BB7_FORWARD` and `KEYS_1021_REVERSE`
337 +
3. **Empty Input Tests**: Verify empty input returns expected value
338 +
4. **Constant Definition Tests**: Verify CRC16_IBM_SDLC and CRC16_T10_DIF have correct parameter values
339 +
340 +
### Property-Based Tests
341 +
342 +
Property-based tests will use the `proptest` crate (already used in the project) with minimum 100 iterations per property:
343 +
344 +
1. **Property 1 & 2**: Generate random 16-bit polynomials and verify polynomial key formatting
345 +
2. **Property 3**: Generate random CRC-16 parameters and random byte sequences, compare against `crc` crate
346 +
3. **Property 4**: Use existing CRC-32/64 configurations with random byte sequences, compare against `crc` crate
347 +
4. **Property 5**: Generate random CRC-16 parameters and two random byte sequences, verify combination
348 +
349 +
### Test Configuration
350 +
351 +
```rust
352 +
// Property test configuration
353 +
proptest! {
354 +
    #![proptest_config(ProptestConfig::with_cases(100))]
355 +
    
356 +
    // Feature: crc16-hardware-acceleration, Property 1: Forward polynomial formatting
357 +
    #[test]
358 +
    fn prop_forward_polynomial_formatting(poly in 0u16..=0xFFFFu16) {
359 +
        let result = crc16_polynomial(poly as u64, false);
360 +
        let expected = ((poly as u64) << 16) | (1u64 << 32);
361 +
        prop_assert_eq!(result, expected);
362 +
    }
363 +
}
364 +
```
365 +
366 +
### Regression Testing
367 +
368 +
All existing tests in `src/arch/mod.rs`, `src/test/`, and `tests/` must continue to pass after CRC-16 implementation.
added vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/prompt.md +17 −0
1 +
I would like to add hardware accelerated CRC-16 calculations to this Rust library which already has working hardware accelerated CRC-32 and CRC-64 calculations, as well as a working software fallback.
2 +
3 +
There are reference implementations written in MASM in the `/reference` folder which should be useful when comparing the current algorithm implementation in Rust.
4 +
5 +
I have also stubbed out known good values in `/crc16` already for both forward and reverse CRC-16 variants, which match the values in `/reference/crc16f` (forward) and `/reference/crc16r` (reverse) exactly. Those values are missing the wide 256-byte folding keys, though, which we must generate, since the reference doesn't include them.
6 +
7 +
Step one is definitely to update `generate.rs` to properly generate all the CRC-16 folding keys, including the missing 256-byte keys for use with AVX512. The CRC-32 and CRC-64 logic for key generating is working, so we should update it to also generate CRC-16 keys, and test against the known good values in `/reference` and `/crc16`.
8 +
9 +
Once we're sure key generation is correct, including test coverage, we can begin working on the algorithm changes to support CRC-16 calculation as well. By comparing our existing, working Rust implementations of CRC-32 and CRC-16, plus the working MASM examples for CRC-16, CRC-32, and CRC-64 in the `/reference` folder, we should be able to update our Rust algorithm to also compute CRC-16.
10 +
11 +
It will be important to pay special attention to not just the algorithm, but any other constants that might differ from CRC-16, CRC-32, and CRC-64, such as the shuffling constants. 
12 +
13 +
We can use the industry standard "123456789" input string to test CRC-16, using the known good check values already established in `/crc16`, as the basis for our tests to ensure we've correctly calculated the CRC-16 values. Do not test any other input strings until the industry standard is to be correctly working.
14 +
15 +
It's very important that we do not break any of the existing functionality around CRC-32 and CRC-64 calculation while adding CRC-16 support, and that we keep the API totally backwards compatible.
16 +
17 +
It's also important that, while we focus on the two reference CRC-16 variants, we are able to support all CRC-16 variants, including ones using custom polynomials, just like we do for CRC-32 and CRC-64.
added vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/requirements.md +97 −0
1 +
# Requirements Document
2 +
3 +
## Introduction
4 +
5 +
This feature adds hardware-accelerated CRC-16 calculation support to the crc-fast library, which already has working hardware-accelerated CRC-32 and CRC-64 implementations. The implementation will leverage PCLMULQDQ/PMULL SIMD instructions for high-performance CRC-16 computation, supporting any CRC-16 variant (both forward/non-reflected and reflected). While CRC-16/IBM-SDLC and CRC-16/T10-DIF serve as reference variants for initial validation, the final implementation must support custom CRC-16 variants with arbitrary polynomials, just like the existing CRC-32 and CRC-64 support. The feature must maintain full backwards compatibility with existing CRC-32 and CRC-64 functionality.
6 +
7 +
## Glossary
8 +
9 +
- **CRC-16**: A 16-bit Cyclic Redundancy Check algorithm used for error detection
10 +
- **Key_Generator**: The module responsible for generating PCLMULQDQ folding keys from CRC polynomials
11 +
- **Folding_Keys**: Precomputed constants (x^n mod P(x)) used for parallel CRC computation via PCLMULQDQ
12 +
- **PCLMULQDQ**: Intel's carryless multiplication instruction used for hardware-accelerated CRC computation
13 +
- **PMULL**: ARM's polynomial multiplication instruction, equivalent to PCLMULQDQ
14 +
- **Forward_CRC**: A CRC variant where data is processed MSB-first (refin=false)
15 +
- **Reflected_CRC**: A CRC variant where data is processed LSB-first (refin=true)
16 +
- **CRC-16/T10-DIF**: A forward (non-reflected) CRC-16 variant with polynomial 0x8BB7
17 +
- **CRC-16/IBM-SDLC**: A reflected CRC-16 variant with polynomial 0x1021
18 +
- **Barrett_Reduction**: An algorithm for fast modular reduction without division, used in final CRC computation
19 +
- **Mu_Constant**: The Barrett reduction constant (μ = floor(x^64/P(x))) used for final reduction
20 +
- **Algorithm_Module**: The SIMD-based CRC calculation module that processes data using folding keys
21 +
- **Check_Value**: The expected CRC result for the industry standard test string "123456789"
22 +
- **256-Byte_Folding_Keys**: Extended folding keys (indices 21-22) for AVX-512 VPCLMULQDQ 256-byte chunk processing
23 +
24 +
## Requirements
25 +
26 +
### Requirement 1: CRC-16 Key Generation
27 +
28 +
**User Story:** As a library maintainer, I want the key generator to produce correct CRC-16 folding keys for any CRC-16 polynomial, so that hardware-accelerated CRC-16 computation produces correct results for all variants.
29 +
30 +
#### Acceptance Criteria
31 +
32 +
1. WHEN the Key_Generator receives a 16-bit polynomial and forward reflection mode, THE Key_Generator SHALL produce folding keys that match the reference values in KEYS_8BB7_FORWARD for CRC-16/T10-DIF
33 +
2. WHEN the Key_Generator receives a 16-bit polynomial and reflected mode, THE Key_Generator SHALL produce folding keys that match the reference values in KEYS_1021_REVERSE for CRC-16/IBM-SDLC
34 +
3. WHEN generating CRC-16 keys for any 16-bit polynomial, THE Key_Generator SHALL use exponents based on 32-bit distances (32*N) matching the CRC-32 exponent pattern
35 +
4. WHEN generating the Mu_Constant for any CRC-16 polynomial, THE Key_Generator SHALL compute floor(x^64/P(x)) where P(x) is the 17-bit polynomial (16-bit poly with implicit leading 1)
36 +
5. WHEN generating the polynomial key for any forward CRC-16, THE Key_Generator SHALL shift the polynomial left by 16 bits and set bit 32
37 +
6. WHEN generating the polynomial key for any reflected CRC-16, THE Key_Generator SHALL bit-reverse the 16-bit polynomial, shift left by 1, and set the LSB
38 +
7. WHEN generating 256-byte folding keys (indices 21-22) for any CRC-16 polynomial, THE Key_Generator SHALL compute keys for distances 32*63 and 32*65 bits
39 +
40 +
### Requirement 2: CRC-16 Algorithm Implementation
41 +
42 +
**User Story:** As a developer, I want to compute CRC-16 checksums using hardware acceleration for any CRC-16 variant, so that I can achieve high-performance CRC-16 calculations.
43 +
44 +
#### Acceptance Criteria
45 +
46 +
1. WHEN computing CRC-16 for the industry standard string "123456789", THE Algorithm_Module SHALL produce the Check_Value 0x906E for CRC-16/IBM-SDLC
47 +
2. WHEN computing CRC-16 for the industry standard string "123456789", THE Algorithm_Module SHALL produce the Check_Value 0xD0DB for CRC-16/T10-DIF
48 +
3. WHEN processing data for any forward CRC-16 variant, THE Algorithm_Module SHALL byte-reflect input data using pshufb before folding operations
49 +
4. WHEN processing data for any reflected CRC-16 variant, THE Algorithm_Module SHALL process input data without byte reflection
50 +
5. WHEN performing the final Barrett reduction for any CRC-16 variant, THE Algorithm_Module SHALL extract the 16-bit result from the appropriate register position
51 +
6. WHEN the initial CRC value is provided for any forward CRC-16 variant, THE Algorithm_Module SHALL scale it to 32 bits by shifting left 16 bits before processing
52 +
7. WHEN the final CRC is computed for any forward CRC-16 variant, THE Algorithm_Module SHALL scale the result back to 16 bits by shifting right 16 bits
53 +
54 +
### Requirement 3: Backwards Compatibility
55 +
56 +
**User Story:** As an existing library user, I want CRC-32 and CRC-64 functionality to remain unchanged, so that my existing code continues to work correctly.
57 +
58 +
#### Acceptance Criteria
59 +
60 +
1. WHEN computing CRC-32 checksums after CRC-16 support is added, THE Algorithm_Module SHALL produce identical results to the current implementation
61 +
2. WHEN computing CRC-64 checksums after CRC-16 support is added, THE Algorithm_Module SHALL produce identical results to the current implementation
62 +
3. WHEN using the existing public API functions (checksum, Digest, checksum_combine), THE API SHALL maintain the same function signatures and behavior
63 +
4. WHEN generating CRC-32 or CRC-64 keys, THE Key_Generator SHALL produce identical keys to the current implementation
64 +
65 +
### Requirement 4: Test Coverage
66 +
67 +
**User Story:** As a library maintainer, I want comprehensive tests for CRC-16 functionality, so that I can ensure correctness and prevent regressions.
68 +
69 +
#### Acceptance Criteria
70 +
71 +
1. WHEN testing CRC-16 key generation, THE Test_Suite SHALL verify generated keys match the known good reference values from the reference implementation
72 +
2. WHEN testing CRC-16 computation, THE Test_Suite SHALL verify the Check_Value for the industry standard "123456789" string for both CRC-16/IBM-SDLC and CRC-16/T10-DIF
73 +
3. WHEN testing CRC-16 computation, THE Test_Suite SHALL compare results against the `crc` crate reference implementation for various input sizes
74 +
4. WHEN testing backwards compatibility, THE Test_Suite SHALL verify all existing CRC-32 and CRC-64 tests continue to pass
75 +
76 +
### Requirement 5: CRC-16 Constants and Parameters
77 +
78 +
**User Story:** As a library maintainer, I want properly defined CRC-16 constants and parameters, so that the implementation is consistent with industry standards and supports custom variants.
79 +
80 +
#### Acceptance Criteria
81 +
82 +
1. THE CRC-16 module SHALL define CRC16_IBM_SDLC with polynomial 0x1021, init 0xFFFF, refin=true, refout=true, xorout=0xFFFF, check=0x906E
83 +
2. THE CRC-16 module SHALL define CRC16_T10_DIF with polynomial 0x8BB7, init 0x0000, refin=false, refout=false, xorout=0x0000, check=0xD0DB
84 +
3. WHEN storing CRC-16 parameters, THE CrcParams structure SHALL use width=16 to distinguish from CRC-32 and CRC-64 variants
85 +
4. THE CRC-16 module SHALL include SIMD constants (smask, mask1, mask2) appropriate for 16-bit CRC computation
86 +
5. WHEN creating custom CRC-16 parameters via CrcParams::new(), THE Key_Generator SHALL dynamically generate folding keys for the provided polynomial
87 +
88 +
### Requirement 6: Custom CRC-16 Variant Support
89 +
90 +
**User Story:** As a developer, I want to use custom CRC-16 parameters with any polynomial, so that I can compute CRC-16 checksums for non-standard variants.
91 +
92 +
#### Acceptance Criteria
93 +
94 +
1. WHEN CrcParams::new() is called with width=16 and any valid polynomial, THE system SHALL generate correct folding keys for that polynomial
95 +
2. WHEN checksum_with_params() is called with custom CRC-16 parameters, THE Algorithm_Module SHALL compute the correct CRC-16 checksum
96 +
3. WHEN Digest::new_with_params() is called with custom CRC-16 parameters, THE Digest SHALL correctly accumulate and finalize CRC-16 checksums
97 +
4. WHEN checksum_combine_with_params() is called with custom CRC-16 parameters, THE system SHALL correctly combine two CRC-16 checksums
added vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/tasks.md +137 −0
1 +
# Implementation Plan: CRC-16 Hardware Acceleration
2 +
3 +
## Overview
4 +
5 +
This implementation adds hardware-accelerated CRC-16 support to the crc-fast library in two phases: first extending the key generator, then extending the algorithm module. The implementation leverages the existing CRC-32 infrastructure by scaling CRC-16 values to 32-bit space.
6 +
7 +
## Tasks
8 +
9 +
- [x] 1. Extend Key Generator for CRC-16
10 +
  - [x] 1.1 Add CRC-16 exponents constant and update keys() function
11 +
    - Add `CRC16_EXPONENTS` constant (same as CRC32_EXPONENTS)
12 +
    - Update `keys()` function to handle width=16
13 +
    - Update `key()` function to dispatch to `crc16_key()`
14 +
    - _Requirements: 1.3_
15 +
16 +
  - [x] 1.2 Implement crc16_key() function
17 +
    - Compute x^exponent mod P(x) for 17-bit CRC-16 polynomial
18 +
    - Handle both forward and reflected modes
19 +
    - Follow the pattern from reference/crc16f/crc16fg.cpp and reference/crc16r/crc16rg.cpp
20 +
    - _Requirements: 1.1, 1.2, 1.7_
21 +
22 +
  - [x] 1.3 Implement crc16_mu() function
23 +
    - Compute Barrett reduction constant floor(x^64/P(x))
24 +
    - Handle both forward and reflected modes
25 +
    - _Requirements: 1.4_
26 +
27 +
  - [x] 1.4 Implement crc16_polynomial() function
28 +
    - Format polynomial for forward mode: (poly << 16) | (1 << 32)
29 +
    - Format polynomial for reflected mode: (bit_reverse_16(poly) << 1) | 1
30 +
    - _Requirements: 1.5, 1.6_
31 +
32 +
  - [x] 1.5 Write property tests for CRC-16 key generation
33 +
    - **Property 1: Forward polynomial formatting**
34 +
    - **Property 2: Reflected polynomial formatting**
35 +
    - **Validates: Requirements 1.5, 1.6**
36 +
37 +
  - [x] 1.6 Add unit tests for CRC-16 key generation
38 +
    - Test generated keys match KEYS_8BB7_FORWARD for CRC-16/T10-DIF
39 +
    - Test generated keys match KEYS_1021_REVERSE for CRC-16/IBM-SDLC
40 +
    - Add CRC-16 test configs to TEST_ALL_CONFIGS
41 +
    - _Requirements: 1.1, 1.2, 4.1_
42 +
43 +
- [x] 2. Checkpoint - Verify key generation
44 +
  - Ensure all tests pass, ask the user if questions arise.
45 +
46 +
- [x] 3. Update CRC-16 Constants and Parameters
47 +
  - [x] 3.1 Update src/crc16/consts.rs with complete constants
48 +
    - Update KEYS_8BB7_FORWARD with 256-byte folding keys (indices 21-22)
49 +
    - Update KEYS_1021_REVERSE with 256-byte folding keys (indices 21-22)
50 +
    - Add SIMD_CONSTANTS if different from CRC-32
51 +
    - _Requirements: 5.1, 5.2, 5.4_
52 +
53 +
  - [x] 3.2 Add Width16 struct to src/structs.rs
54 +
    - Implement CrcWidth trait for Width16
55 +
    - _Requirements: 5.3_
56 +
57 +
  - [x] 3.3 Update CrcAlgorithm enum and CrcParams::new()
58 +
    - Add Crc16Custom variant to CrcAlgorithm enum
59 +
    - Update CrcParams::new() to handle width=16
60 +
    - Update cache module if needed for CRC-16 key caching
61 +
    - _Requirements: 5.5, 6.1_
62 +
63 +
- [x] 4. Implement CRC-16 Algorithm
64 +
  - [x] 4.1 Create src/crc16/algorithm.rs with EnhancedCrcWidth implementation
65 +
    - Implement EnhancedCrcWidth for Width16
66 +
    - Implement create_state() with proper scaling for forward mode
67 +
    - Implement extract_result() with proper scaling
68 +
    - Implement fold_16(), fold_width(), barrett_reduction()
69 +
    - Implement create_coefficient() and perform_final_reduction()
70 +
    - Implement get_last_bytes_table_ptr()
71 +
    - _Requirements: 2.3, 2.4, 2.5, 2.6, 2.7_
72 +
73 +
  - [x] 4.2 Implement process_0_to_15 for CRC-16
74 +
    - Handle small inputs (0-15 bytes) for CRC-16
75 +
    - Follow pattern from crc32/algorithm.rs
76 +
    - _Requirements: 2.1, 2.2_
77 +
78 +
  - [x] 4.3 Update architecture dispatcher for CRC-16
79 +
    - Update src/arch/mod.rs to handle width=16
80 +
    - Route to Width16 implementation
81 +
    - _Requirements: 2.1, 2.2_
82 +
83 +
  - [x] 4.4 Update software fallback for CRC-16
84 +
    - Update src/arch/software.rs to handle CRC-16 algorithms
85 +
    - Add CRC-16 reference implementations from crc crate
86 +
    - _Requirements: 2.1, 2.2_
87 +
88 +
- [x] 5. Checkpoint - Verify basic CRC-16 computation
89 +
  - Ensure all tests pass, ask the user if questions arise.
90 +
91 +
- [x] 6. Add Public API Support for CRC-16
92 +
  - [x] 6.1 Update src/lib.rs checksum() function
93 +
    - Add cases for Crc16IbmSdlc and Crc16T10Dif
94 +
    - _Requirements: 2.1, 2.2_
95 +
96 +
  - [x] 6.2 Update Digest and other public APIs
97 +
    - Ensure Digest works with CRC-16 algorithms
98 +
    - Ensure checksum_combine works with CRC-16
99 +
    - _Requirements: 6.2, 6.3, 6.4_
100 +
101 +
- [-] 7. Add Comprehensive Tests
102 +
  - [x] 7.1 Add CRC-16 check value tests
103 +
    - Test "123456789" produces 0x906E for CRC-16/IBM-SDLC
104 +
    - Test "123456789" produces 0xD0DB for CRC-16/T10-DIF
105 +
    - _Requirements: 2.1, 2.2, 4.2_
106 +
107 +
  - [x] 7.2 Write property test for CRC-16 computation matches reference
108 +
    - **Property 3: CRC-16 computation matches reference**
109 +
    - **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3**
110 +
111 +
  - [x] 7.3 Write property test for backwards compatibility
112 +
    - **Property 4: CRC-32 and CRC-64 backwards compatibility**
113 +
    - **Validates: Requirements 3.1, 3.2, 3.4**
114 +
115 +
  - [x] 7.4 Write property test for CRC-16 checksum combination
116 +
    - **Property 5: CRC-16 checksum combination round-trip**
117 +
    - **Validates: Requirements 6.4**
118 +
119 +
  - [x] 7.5 Add CRC-16 to existing test suites
120 +
    - Add CRC-16 configs to TEST_ALL_CONFIGS in src/test/consts.rs
121 +
    - Ensure all length-based tests include CRC-16
122 +
    - _Requirements: 4.3, 4.4_
123 +
124 +
- [x] 8. Final Checkpoint - Ensure all tests pass
125 +
  - Ensure all tests pass, ask the user if questions arise.
126 +
  - Run cargo fmt --check
127 +
  - Run cargo clippy -- -D warnings
128 +
  - Run cargo test
129 +
130 +
## Notes
131 +
132 +
- Tasks marked with `*` are optional and can be skipped for faster MVP
133 +
- Each task references specific requirements for traceability
134 +
- Checkpoints ensure incremental validation
135 +
- Property tests validate universal correctness properties
136 +
- Unit tests validate specific examples and edge cases
137 +
- The implementation leverages existing CRC-32 infrastructure to minimize code duplication
added vendor/crc-fast/.kiro/specs/future-proof-crc-params/design.md +358 −0
1 +
# Design Document
2 +
3 +
## Overview
4 +
5 +
This design implements a future-proof CrcParams structure using an internal enum-based key storage system that can expand to support different key array sizes without breaking compatibility. The approach maintains the simplicity of const definitions while providing safe key access and zero runtime overhead through compiler optimizations.
6 +
7 +
## Architecture
8 +
9 +
### Core Components
10 +
11 +
1. **CrcKeysStorage Enum**: Internal storage that can hold different key array sizes
12 +
2. **CrcParams Structure**: Updated to use CrcKeysStorage internally while maintaining public API
13 +
3. **Safe Accessor Methods**: Bounds-checked key access methods on CrcParams
14 +
4. **Helper Functions**: Const-friendly constructors for CrcKeysStorage variants
15 +
16 +
### Design Principles
17 +
18 +
- **Zero Runtime Overhead**: Enum dispatch optimized away by compiler
19 +
- **Backwards Compatibility**: Existing const definitions require minimal changes
20 +
- **Gradual Migration**: Can be implemented in phases without breaking builds
21 +
- **Safety First**: Bounds checking prevents panics from out-of-range access
22 +
23 +
## Components and Interfaces
24 +
25 +
### CrcKeysStorage Enum
26 +
27 +
```rust
28 +
#[derive(Clone, Copy, Debug)]
29 +
enum CrcKeysStorage {
30 +
    /// Current 23-key format (for existing algorithms which includes 256 byte folding distances)
31 +
    KeysFold256([u64; 23]),
32 +
    /// Future 25-key format (for potential future expanded folding distances, for testing purposes only)
33 +
    KeysFutureTest([u64; 25]),
34 +
    // Additional variants can be added as needed
35 +
}
36 +
```
37 +
38 +
**Key Methods:**
39 +
- `get_key(index: usize) -> u64`: Safe key access with bounds checking
40 +
- `key_count() -> usize`: Returns actual number of keys available
41 +
- `from_keys_fold_256(keys: [u64; 23]) -> Self`: Const constructor for 23-key arrays
42 +
- `from_keys_fold_future_test(keys: [u64; 25]) -> Self`: Const constructor for 25-key arrays
43 +
44 +
### Updated CrcParams Structure
45 +
46 +
```rust
47 +
#[derive(Clone, Copy, Debug)]
48 +
pub struct CrcParams {
49 +
    pub algorithm: CrcAlgorithm,
50 +
    pub name: &'static str,
51 +
    pub width: u8,
52 +
    pub poly: u64,
53 +
    pub init: u64,
54 +
    pub refin: bool,
55 +
    pub refout: bool,
56 +
    pub xorout: u64,
57 +
    pub check: u64,
58 +
    pub keys: CrcKeysStorage,  // Changed from [u64; 23]
59 +
}
60 +
```
61 +
62 +
**Key Methods:**
63 +
- `get_key(index: usize) -> u64`: Delegates to CrcKeysStorage
64 +
- `get_key_checked(index: usize) -> Option<u64>`: Optional key access
65 +
- `key_count() -> usize`: Returns actual key count
66 +
67 +
### Const Definition Pattern
68 +
69 +
```rust
70 +
// Before (Phase 2):
71 +
pub const CRC32_ISCSI: CrcParams = CrcParams {
72 +
    // ... other fields unchanged ...
73 +
    keys: KEYS_1EDC6F41_REFLECTED,  // [u64; 23]
74 +
};
75 +
76 +
// After (Phase 3):
77 +
pub const CRC32_ISCSI: CrcParams = CrcParams {
78 +
    // ... other fields unchanged ...
79 +
    keys: CrcKeysStorage::from_keys_fold_256(KEYS_1EDC6F41_REFLECTED),
80 +
};
81 +
```
82 +
83 +
## Data Models
84 +
85 +
### Key Storage Variants
86 +
87 +
| Variant | Array Size | Use Case |
88 +
|---------|------------|----------|
89 +
| KeysFold256 | [u64; 23] | Current implementation (128/256-byte folding) |
90 +
| KeysFutureTest | [u64; 25] | Future expansion |
91 +
92 +
### Migration States
93 +
94 +
| Phase | CrcParams.keys Type | Architecture Code | Const Definitions |
95 +
|-------|-------------------|------------------|------------------|
96 +
| 1 | [u64; 23] | Direct access | Unchanged |
97 +
| 2 | [u64; 23] | Safe accessors | Unchanged |
98 +
| 3 | CrcKeysStorage | Safe accessors | Updated |
99 +
100 +
## Error Handling
101 +
102 +
### Bounds Checking Strategy
103 +
104 +
1. **Safe Default**: Out-of-bounds key access returns 0 instead of panicking
105 +
2. **Optional Access**: `get_key_checked()` returns `None` for invalid indices
106 +
3. **Graceful Degradation**: Code continues to function with missing keys
107 +
108 +
### Error Scenarios
109 +
110 +
| Scenario | Behavior | Rationale |
111 +
|----------|----------|-----------|
112 +
| Access key[30] with 23-key storage | Returns 0 | Allows future expansion without breaking existing code |
113 +
| Invalid key index | Returns 0 | Prevents panics, maintains stability |
114 +
| Empty key storage | Returns 0 for all indices | Defensive programming |
115 +
116 +
## Testing Strategy
117 +
118 +
### Unit Tests
119 +
120 +
1. **CrcKeysStorage Tests**:
121 +
   - Verify correct key storage and retrieval for each variant
122 +
   - Test bounds checking behavior
123 +
   - Validate const constructor functions
124 +
125 +
2. **CrcParams Integration Tests**:
126 +
   - Verify safe accessor methods work correctly
127 +
   - Test backwards compatibility with existing const definitions
128 +
   - Validate zero runtime overhead through benchmarks
129 +
130 +
3. **Migration Tests**:
131 +
   - Test each phase independently
132 +
   - Verify existing functionality remains intact
133 +
   - Validate const definition updates
134 +
135 +
### Compatibility Tests
136 +
137 +
1. **Third-Party Simulation**:
138 +
   - Create mock third-party const definitions
139 +
   - Verify they continue working through all phases
140 +
   - Test key access patterns used by external code
141 +
142 +
2. **Performance Tests**:
143 +
   - Benchmark key access performance vs direct array access
144 +
   - Verify compiler optimizations eliminate enum dispatch
145 +
   - Measure memory usage impact
146 +
147 +
### Integration Tests
148 +
149 +
1. **Architecture Code Tests**:
150 +
   - Update existing architecture tests to use safe accessors
151 +
   - Verify SIMD operations work correctly with new key access
152 +
   - Test folding operations across different key storage variants
153 +
154 +
2. **End-to-End Tests**:
155 +
   - Verify CRC calculations remain correct after migration
156 +
   - Test custom CrcParams creation and usage
157 +
   - Validate `get-custom-params` binary output
158 +
159 +
## Implementation Phases
160 +
161 +
### Phase 1: Add New Types
162 +
- Add CrcKeysStorage enum to codebase
163 +
- Add helper methods to CrcParams (delegating to existing keys field)
164 +
- Maintain existing [u64; 23] field for compatibility
165 +
- All tests continue to pass
166 +
167 +
### Phase 2: Update Architecture Code
168 +
- Replace direct key array access with safe accessor methods
169 +
- Update SIMD and folding code to use `params.get_key(index)`
170 +
- Maintain backwards compatibility
171 +
- Performance remains identical
172 +
173 +
### Phase 3: Switch to New Storage
174 +
- Change CrcParams.keys field from [u64; 23] to CrcKeysStorage
175 +
- Update all const definitions to use CrcKeysStorage::from_keys_23()
176 +
- Update `get-custom-params` binary output format
177 +
- This is the only breaking change, but minimal impact
178 +
179 +
## Performance Considerations
180 +
181 +
### Compiler Optimizations
182 +
183 +
The Rust compiler optimizes enum dispatch when:
184 +
1. All variants have the same access pattern
185 +
2. The enum is used in hot paths with predictable patterns
186 +
3. Inlining is enabled for accessor methods
187 +
188 +
Expected assembly output for `params.get_key(21)`:
189 +
```assembly
190 +
; Same as direct array access keys[21]
191 +
mov rax, qword ptr [rdi + 168 + 21*8]
192 +
```
193 +
194 +
### Memory Layout
195 +
196 +
| Storage Type | Memory Usage | Alignment |
197 +
|--------------|--------------|-----------|
198 +
| KeysFold256 | 184 bytes | 8-byte aligned |
199 +
| KeysFutureTest | 200 bytes | 8-byte aligned |
200 +
| Enum overhead | 0 bytes | (optimized away) |
201 +
202 +
## FFI Future-Proofing Design
203 +
204 +
### Problem Analysis
205 +
206 +
The current C FFI interface has several limitations:
207 +
1. **Fixed Key Array**: `CrcFastParams` struct uses `uint64_t keys[23]` hardcoded
208 +
2. **No Expansion Path**: Cannot support future key variants with different sizes
209 +
3. **Conversion Limitation**: `to_keys_array_23()` only works for current 23-key variant
210 +
211 +
### FFI Design Solution
212 +
213 +
Since the current FFI hasn't shipped yet, we can make it truly future-proof from the start using a pointer-based approach that can handle any number of keys.
214 +
215 +
#### Truly Future-Proof CrcFastParams Structure
216 +
217 +
```c
218 +
// Completely future-proof structure using pointer to keys
219 +
typedef struct CrcFastParams {
220 +
    enum CrcFastAlgorithm algorithm;
221 +
    uint8_t width;
222 +
    uint64_t poly;
223 +
    uint64_t init;
224 +
    bool refin;
225 +
    bool refout;
226 +
    uint64_t xorout;
227 +
    uint64_t check;
228 +
    uint32_t key_count;        // Number of keys available
229 +
    const uint64_t *keys;      // Pointer to keys array (managed by Rust)
230 +
} CrcFastParams;
231 +
```
232 +
233 +
#### Key Management Strategy
234 +
235 +
1. **Rust-Managed Memory**: Keys remain in Rust-managed memory
236 +
2. **Stable Pointers**: Use Box::leak or static storage for stable pointers
237 +
3. **Automatic Cleanup**: Rust handles memory management transparently
238 +
4. **No Size Limits**: Can support any number of keys (23, 25, 50, 100+)
239 +
240 +
#### Internal Implementation
241 +
242 +
```rust
243 +
// Helper to create stable key pointers
244 +
fn create_stable_key_pointer(keys: &CrcKeysStorage) -> *const u64 {
245 +
    match keys {
246 +
        CrcKeysStorage::KeysFold256(keys) => keys.as_ptr(),
247 +
        CrcKeysStorage::KeysFutureTest(keys) => keys.as_ptr(),
248 +
        // Future variants automatically supported
249 +
    }
250 +
}
251 +
252 +
impl From<CrcParams> for CrcFastParams {
253 +
    fn from(params: CrcParams) -> Self {
254 +
        CrcFastParams {
255 +
            algorithm: params.algorithm.into(),
256 +
            width: params.width,
257 +
            poly: params.poly,
258 +
            init: params.init,
259 +
            refin: params.refin,
260 +
            refout: params.refout,
261 +
            xorout: params.xorout,
262 +
            check: params.check,
263 +
            key_count: params.key_count() as u32,
264 +
            keys: create_stable_key_pointer(&params.keys),
265 +
        }
266 +
    }
267 +
}
268 +
269 +
impl From<CrcFastParams> for CrcParams {
270 +
    fn from(value: CrcFastParams) -> Self {
271 +
        // Convert C array back to appropriate CrcKeysStorage
272 +
        let keys = unsafe {
273 +
            std::slice::from_raw_parts(value.keys, value.key_count as usize)
274 +
        };
275 +
        
276 +
        let storage = match value.key_count {
277 +
            23 => CrcKeysStorage::from_keys_fold_256(
278 +
                keys.try_into().expect("Invalid key count for fold_256")
279 +
            ),
280 +
            25 => CrcKeysStorage::from_keys_fold_future_test(
281 +
                keys.try_into().expect("Invalid key count for future_test")
282 +
            ),
283 +
            _ => panic!("Unsupported key count: {}", value.key_count),
284 +
        };
285 +
        
286 +
        CrcParams {
287 +
            algorithm: value.algorithm.into(),
288 +
            name: "custom",
289 +
            width: value.width,
290 +
            poly: value.poly,
291 +
            init: value.init,
292 +
            refin: value.refin,
293 +
            refout: value.refout,
294 +
            xorout: value.xorout,
295 +
            check: value.check,
296 +
            keys: storage,
297 +
        }
298 +
    }
299 +
}
300 +
```
301 +
302 +
#### Enhanced FFI Functions
303 +
304 +
```rust
305 +
#[no_mangle]
306 +
pub extern "C" fn crc_fast_get_custom_params(...) -> CrcFastParams {
307 +
    let params = CrcParams::new(...);
308 +
    params.into()  // Automatic conversion
309 +
}
310 +
```
311 +
312 +
#### Benefits of This Approach
313 +
314 +
1. **Truly Future-Proof**: No hardcoded limits, supports any key count
315 +
2. **Zero Copy**: Keys remain in original Rust memory, just expose pointer
316 +
3. **Memory Safe**: Rust manages memory, C gets stable pointers
317 +
4. **Performance**: Direct pointer access, no copying overhead
318 +
5. **Automatic Support**: New CrcKeysStorage variants automatically work
319 +
6. **Idiomatic C**: Direct array access pattern familiar to C developers
320 +
321 +
#### C Usage Pattern
322 +
323 +
```c
324 +
// Get custom parameters
325 +
CrcFastParams params = crc_fast_get_custom_params(...);
326 +
327 +
// Direct access with bounds checking (C developer responsibility)
328 +
for (uint32_t i = 0; i < params.key_count; i++) {
329 +
    uint64_t key = params.keys[i];
330 +
    // Use key...
331 +
}
332 +
333 +
// Or access specific keys directly
334 +
uint64_t key21 = params.keys[21];  // Direct access (if bounds known)
335 +
```
336 +
337 +
## Security Considerations
338 +
339 +
### Bounds Safety
340 +
341 +
The new design eliminates array bounds panics, which could be exploited in unsafe contexts. Safe key access prevents:
342 +
- Buffer overflow attacks through malicious key indices
343 +
- Denial of service through panic-induced crashes
344 +
- Information disclosure through out-of-bounds memory access
345 +
346 +
### FFI Safety
347 +
348 +
The enhanced FFI design adds additional safety measures:
349 +
- **Key Count Validation**: V2 functions validate key_count before conversion
350 +
- **Buffer Bounds**: 32-key buffer prevents overflow while allowing future expansion
351 +
- **Graceful Degradation**: Invalid key counts return error codes instead of panicking
352 +
353 +
### Const Safety
354 +
355 +
All const definitions remain compile-time validated, preventing:
356 +
- Runtime key generation vulnerabilities
357 +
- Dynamic key modification attacks
358 +
- Timing-based side-channel attacks on key access
added vendor/crc-fast/.kiro/specs/future-proof-crc-params/requirements.md +86 −0
1 +
# Requirements Document
2 +
3 +
## Introduction
4 +
5 +
This feature implements a future-proof CrcParams structure that can expand to support additional folding keys (for example, larger folding distances) without breaking API compatibility for third-party applications. The solution maintains the simplicity of const definitions while providing safe key access and internal flexibility for future expansion.
6 +
7 +
## Requirements
8 +
9 +
### Requirement 1
10 +
11 +
**User Story:** As a library maintainer, I want to expand CRC folding key support from 23 to 24+ keys for potentially larger folding distances in the future, so that I can improve performance for large data processing.
12 +
13 +
#### Acceptance Criteria
14 +
15 +
1. WHEN I add support for larger folding distances THEN existing third-party applications with hardcoded 23-key CrcParams SHALL continue to compile and function correctly
16 +
2. WHEN I expand key arrays from 23 to 24+ elements THEN existing const definitions SHALL require minimal changes (only the keys field)
17 +
18 +
### Requirement 2
19 +
20 +
**User Story:** As a third-party application developer, I want to define custom CrcParams as const definitions, so that I can embed CRC configurations directly in my code without runtime overhead.
21 +
22 +
#### Acceptance Criteria
23 +
24 +
1. WHEN I define a custom CrcParams const THEN I SHALL be able to use the same simple struct literal syntax as currently exists
25 +
2. WHEN I access CRC keys through the CrcParams interface THEN the performance SHALL be identical to direct array access (zero runtime overhead)
26 +
3. WHEN the library expands key support THEN my existing const definitions SHALL continue to work without modification
27 +
28 +
### Requirement 3
29 +
30 +
**User Story:** As a library maintainer, I want safe key access methods that prevent array bounds panics, so that the library is robust against future expansion and misuse.
31 +
32 +
#### Acceptance Criteria
33 +
34 +
1. WHEN architecture code accesses CRC keys THEN it SHALL use bounds-checked methods instead of direct array indexing
35 +
2. WHEN code requests key count information THEN it SHALL receive the actual number of available keys for that CrcParams instance
36 +
37 +
### Requirement 4
38 +
39 +
**User Story:** As a library maintainer, I want internal flexibility to support different key array sizes, so that I can optimize different CRC algorithms with varying folding distance requirements.
40 +
41 +
#### Acceptance Criteria
42 +
43 +
1. WHEN I create CrcParams with 23 keys THEN the system SHALL store and access exactly 23 keys efficiently
44 +
2. WHEN I create CrcParams with 25 keys THEN the system SHALL store and access exactly 25 keys efficiently  
45 +
4. WHEN the compiler optimizes the code THEN enum dispatch for key access SHALL be eliminated (zero runtime overhead)
46 +
47 +
### Requirement 5
48 +
49 +
**User Story:** As a library maintainer, I want to migrate existing code gradually, so that I can implement the changes in phases without breaking the build at any point.
50 +
51 +
#### Acceptance Criteria
52 +
53 +
1. WHEN I add the new CrcKeysStorage types THEN existing code SHALL continue to compile and function
54 +
2. WHEN I update architecture code to use safe accessors THEN the change SHALL be backward compatible
55 +
3. WHEN I switch CrcParams to use CrcKeysStorage THEN the migration SHALL require only updating const definitions
56 +
4. WHEN each phase is complete THEN all existing tests SHALL continue to pass
57 +
58 +
### Requirement 6
59 +
60 +
**User Story:** As a third-party application developer, I want the `get-custom-params` binary to output the updated `CrcParams` const definition using the new key storage approach, so that I can easily generate future-proof custom CRC parameter definitions.
61 +
62 +
#### Acceptance Criteria
63 +
64 +
1. WHEN I run the `get-custom-params` binary THEN it SHALL output CrcParams const definitions using CrcKeysStorage::from_keys_fold_256()
65 +
2. WHEN I copy the generated const definition THEN it SHALL compile and work correctly with the new CrcParams structure
66 +
3. WHEN the output format changes THEN the generated code SHALL remain compatible with the current CrcParams API
67 +
68 +
### Requirement 7
69 +
70 +
**User Story:** As a C/C++ application developer, I want the FFI interface to be future-proof for key expansion, so that my applications can benefit from future performance improvements without requiring code changes.
71 +
72 +
#### Acceptance Criteria
73 +
74 +
1. WHEN the library adds support for larger key arrays THEN existing C code using CrcFastParams SHALL continue to compile and function correctly
75 +
2. WHEN I create custom CRC parameters in C THEN I SHALL be able to specify the key count and keys dynamically
76 +
3. WHEN I access CRC functionality through the C API THEN the performance SHALL remain identical to direct Rust usage
77 +
78 +
### Requirement 8
79 +
80 +
**User Story:** As a library maintainer, I want the C FFI interface to support different key array sizes internally, so that C users can benefit from future CRC algorithm improvements.
81 +
82 +
#### Acceptance Criteria
83 +
84 +
1. WHEN I add new CrcKeysStorage variants with different key counts THEN the C API SHALL automatically support them
85 +
2. WHEN C code specifies custom key arrays THEN they SHALL be automatically converted to the appropriate internal storage format
86 +
3. WHEN C code queries key information THEN it SHALL receive accurate key count and key data for the specific CRC algorithm being used
added vendor/crc-fast/.kiro/specs/future-proof-crc-params/tasks.md +122 −0
1 +
# Implementation Plan
2 +
3 +
- [x] 1. Phase 1: Add CrcKeysStorage enum and helper methods
4 +
  - Add CrcKeysStorage enum with KeysFold256 and KeysFutureTest variants
5 +
  - Implement get_key() and key_count() methods on CrcKeysStorage
6 +
  - Add const constructor methods from_keys_fold_256() and from_keys_fold_future_test()
7 +
  - Add safe accessor methods to CrcParams that delegate to existing keys field
8 +
  - Write comprehensive unit tests for CrcKeysStorage functionality
9 +
  - _Requirements: 4.1, 4.2, 4.4, 5.1_
10 +
11 +
- [x] 2. Phase 2: Update architecture code to use safe accessors
12 +
  - [x] 2.1 Update SIMD folding code in src/arch/ to use params.get_key()
13 +
    - Replace direct keys[index] access with params.get_key(index) in algorithm.rs
14 +
    - Update VPCLMULQDQ code to use safe key access methods
15 +
    - Update aarch64 and x86 architecture-specific code
16 +
    - _Requirements: 3.1, 5.2_
17 +
18 +
  - [x] 2.2 Update CRC32 algorithm code to use safe accessors
19 +
    - Modify src/crc32/algorithm.rs to use params.get_key() instead of keys[index]
20 +
    - Update fusion code in src/crc32/fusion/ if it accesses keys directly
21 +
    - _Requirements: 3.1, 5.2_
22 +
23 +
  - [x] 2.3 Update CRC64 algorithm code to use safe accessors
24 +
    - Modify src/crc64/algorithm.rs to use params.get_key() instead of keys[index]
25 +
    - Update any other CRC64-specific code that accesses keys directly
26 +
    - _Requirements: 3.1, 5.2_
27 +
28 +
  - [x] 2.4 Run performance benchmarks to verify zero overhead
29 +
    - Benchmark key access performance before and after changes
30 +
    - Verify compiler optimizations eliminate any performance regression
31 +
    - Document that performance remains identical to direct array access
32 +
    - _Requirements: 2.2, 4.4_
33 +
34 +
- [x] 3. Phase 3: Switch CrcParams to use CrcKeysStorage
35 +
  - [x] 3.1 Update CrcParams struct definition
36 +
    - Change keys field from [u64; 23] to CrcKeysStorage
37 +
    - Update CrcParams accessor methods to delegate to CrcKeysStorage
38 +
    - Remove temporary delegation methods added in Phase 1
39 +
    - _Requirements: 5.3_
40 +
41 +
  - [x] 3.2 Update all CRC32 const definitions
42 +
    - Update src/crc32/consts.rs to use CrcKeysStorage::from_keys_fold_256()
43 +
    - Modify all CRC32_* const definitions to use new key storage format
44 +
    - Ensure all existing key arrays are properly wrapped
45 +
    - _Requirements: 1.2, 2.1_
46 +
47 +
  - [x] 3.3 Update all CRC64 const definitions
48 +
    - Update src/crc64/consts.rs to use CrcKeysStorage::from_keys_fold_256()
49 +
    - Modify all CRC64_* const definitions to use new key storage format
50 +
    - Ensure all existing key arrays are properly wrapped
51 +
    - _Requirements: 1.2, 2.1_
52 +
53 +
  - [x] 3.4 Update get-custom-params binary output
54 +
    - Modify src/bin/get-custom-params.rs to output CrcKeysStorage format
55 +
    - Update output template to use CrcKeysStorage::from_keys_fold_256()
56 +
    - Test that generated const definitions compile and work correctly
57 +
    - _Requirements: 6.1, 6.2, 6.3_
58 +
59 +
  - [x] 3.5 Update cache system for new CrcParams structure
60 +
    - Modify src/cache.rs to work with CrcKeysStorage-based CrcParams
61 +
    - Update CrcParams::new() method to use new key storage format
62 +
    - Ensure cache functionality remains intact after structural changes
63 +
    - _Requirements: 2.3, 5.3_
64 +
65 +
- [x] 4. Create comprehensive test suite for future-proof functionality
66 +
  - [x] 4.1 Add unit tests for bounds checking behavior
67 +
    - Test that get_key() returns 0 for out-of-bounds indices
68 +
    - Test that get_key_checked() returns None for invalid indices
69 +
    - Verify key_count() returns correct values for different storage variants
70 +
    - _Requirements: 3.2_
71 +
72 +
  - [x] 4.2 Add integration tests for third-party compatibility
73 +
    - Create mock third-party const definitions using new format
74 +
    - Test that existing key access patterns continue to work
75 +
    - Verify backwards compatibility throughout migration phases
76 +
    - _Requirements: 1.1, 2.3_
77 +
78 +
  - [x] 4.3 Add performance regression tests
79 +
    - Benchmark CRC calculation performance before and after changes
80 +
    - Verify that key access performance matches direct array access
81 +
    - Test memory usage impact of enum-based storage
82 +
    - _Requirements: 2.2, 4.4_
83 +
84 +
  - [x] 4.4 Add future expansion simulation tests
85 +
    - Create test CrcParams using KeysFutureTest variant with 25 keys
86 +
    - Test that code gracefully handles different key array sizes
87 +
    - Verify that expansion to larger key arrays works as designed
88 +
    - _Requirements: 1.1, 4.2_
89 +
90 +
- [x] 5. Validate migration and run full test suite
91 +
  - Run cargo test to ensure all existing tests pass
92 +
  - Run cargo clippy to ensure code quality standards
93 +
  - Run cargo fmt to ensure consistent formatting
94 +
  - Verify that all CRC calculations produce identical results
95 +
  - Test that third-party usage patterns remain functional
96 +
  - _Requirements: 5.4_
97 +
98 +
- [x] 6. Implement FFI future-proofing for C/C++ compatibility
99 +
  - [x] 6.1 Update CrcFastParams struct to use pointer-based keys
100 +
    - Change keys field from [u64; 23] to const uint64_t *keys pointer
101 +
    - Add key_count field to track number of available keys
102 +
    - Update From<CrcFastParams> and From<CrcParams> conversion implementations
103 +
    - _Requirements: 7.2, 8.1_
104 +
105 +
  - [x] 6.2 Implement stable key pointer management
106 +
    - Add create_stable_key_pointer() helper function for CrcKeysStorage
107 +
    - Ensure key pointers remain valid for the lifetime of CrcFastParams
108 +
    - Handle memory management safely between Rust and C boundaries
109 +
    - _Requirements: 8.2, 8.3_
110 +
111 +
  - [x] 6.3 Update FFI functions to use new CrcFastParams structure
112 +
    - Update existing FFI functions to use new pointer-based CrcFastParams
113 +
    - Ensure all FFI functions handle variable key counts correctly
114 +
    - Test conversion between CrcKeysStorage variants and C pointer access
115 +
    - _Requirements: 7.1, 7.3_
116 +
117 +
  - [x] 6.4 Update C header file and add comprehensive FFI tests
118 +
    - Update CrcFastParams struct definition in libcrc_fast.h to use pointer
119 +
    - Create FFI tests for direct pointer access with different key counts
120 +
    - Test future expansion scenarios with different key counts (23, 25, etc.)
121 +
    - Verify memory safety and pointer stability across FFI boundary
122 +
    - _Requirements: 7.1, 8.1_
added vendor/crc-fast/.kiro/specs/github-release-automation/design.md +402 −0
1 +
# Design Document
2 +
3 +
## Overview
4 +
5 +
This design implements a GitHub Actions workflow that automatically builds and publishes binary packages when version tags are pushed to the repository. The workflow leverages the existing test infrastructure, builds optimized binaries for five target platforms, packages them according to platform conventions, and uploads them as GitHub release assets.
6 +
7 +
The solution uses a single workflow file that orchestrates testing, building, packaging, and publishing steps. It reuses the existing test workflow to ensure quality gates are met before creating releases.
8 +
9 +
## Architecture
10 +
11 +
### Workflow Structure
12 +
13 +
The release workflow consists of three main stages:
14 +
15 +
1. **Validation Stage**: Triggers existing test workflow and waits for completion
16 +
2. **Build Stage**: Compiles release binaries for all target platforms in parallel
17 +
3. **Publish Stage**: Creates packages, generates checksums, and uploads to GitHub release
18 +
19 +
### Workflow Trigger
20 +
21 +
```yaml
22 +
on:
23 +
  push:
24 +
    tags:
25 +
      - '[0-9]+.[0-9]+.[0-9]+'
26 +
```
27 +
28 +
This pattern matches semantic version tags like `1.5.0`, `2.0.1`, etc.
29 +
30 +
### Build Matrix
31 +
32 +
The workflow uses a matrix strategy to build for multiple platforms:
33 +
34 +
| Target Triple | OS Runner | Package Extension | Runner Rationale |
35 +
|--------------|-----------|-------------------|------------------|
36 +
| x86_64-unknown-linux-gnu | ubuntu-22.04 | .tar.gz | Native x86_64 Linux runner, explicit version for stability |
37 +
| aarch64-unknown-linux-gnu | ubuntu-22.04-arm | .tar.gz | Native ARM64 Linux runner, explicit version for stability |
38 +
| aarch64-apple-darwin | macos-14 | .tar.gz | Native Apple Silicon runner (M1/M2), explicit version for stability |
39 +
| x86_64-pc-windows-msvc | windows-2022 | .zip | Native x86_64 Windows runner, explicit version for stability |
40 +
| aarch64-pc-windows-msvc | windows-11-arm | .zip | Native ARM64 Windows runner (only ARM64 option available) |
41 +
42 +
**Runner Selection Rationale**:
43 +
44 +
#### General Principles
45 +
1. **Native Compilation**: Each runner matches the target architecture for optimal performance and to leverage architecture-specific CPU features (AVX-512, NEON, etc.)
46 +
2. **Binary Compatibility**: Binaries built on older OS versions are forward-compatible with newer versions, but not backward-compatible
47 +
3. **Single Binary Per Architecture**: One binary package per architecture is sufficient due to OS forward compatibility
48 +
4. **Explicit Versions**: Using explicit runner versions (ubuntu-22.04, windows-2022, macos-14) instead of -latest provides stability and predictability, preventing unexpected changes when GitHub updates their -latest pointers
49 +
50 +
#### Platform-Specific Decisions
51 +
52 +
**Linux (ubuntu-22.04 for x86_64, ubuntu-22.04-arm for aarch64)**:
53 +
- Explicit version (22.04) ensures consistent build environment over time
54 +
- Ubuntu 22.04 uses glibc 2.35, providing good compatibility with modern distributions
55 +
- Ubuntu binaries have excellent forward compatibility across distributions (Ubuntu, Debian, RHEL, etc.)
56 +
- When ubuntu-latest moves to 24.04 or newer, our release builds remain stable on 22.04
57 +
- No need for multiple Linux versions; one binary per architecture covers the ecosystem
58 +
- Using explicit versions allows intentional upgrades rather than automatic changes
59 +
60 +
**macOS (macos-14 for aarch64)**:
61 +
- `macos-14` is the first stable Apple Silicon (M1/M2) runner
62 +
- macOS binaries built on older versions run on newer versions (forward compatible)
63 +
- `macos-15` and `macos-latest` would work but offer no compatibility advantage
64 +
- Using `macos-14` provides maximum compatibility (works on macOS 14, 15, and future versions)
65 +
- No x86_64 macOS build needed: Apple Silicon Macs can run x86_64 binaries via Rosetta 2, but native ARM64 is preferred
66 +
- Single ARM64 binary covers all Apple Silicon Macs (M1, M2, M3, M4, etc.)
67 +
68 +
**Windows (windows-2022 for x86_64, windows-11-arm for aarch64)**:
69 +
- Explicit version (2022) ensures consistent build environment over time
70 +
- Windows Server 2022 binaries have excellent forward compatibility (run on Windows 11, future versions)
71 +
- MSVC runtime is statically linked in Rust release builds, eliminating runtime dependencies
72 +
- When windows-latest moves to Server 2025 or newer, our release builds remain stable on 2022
73 +
- `windows-11-arm` is the only ARM64 Windows runner available (no version choice)
74 +
- Using explicit versions allows intentional upgrades rather than automatic changes
75 +
- No need for multiple Windows versions; one binary per architecture covers the ecosystem
76 +
77 +
#### Why Not Multiple OS Versions?
78 +
79 +
**Rejected Approach**: Building separate packages for each OS version (e.g., macos-14, macos-15, ubuntu-22.04, ubuntu-24.04)
80 +
81 +
**Reasons**:
82 +
1. **Forward Compatibility**: Binaries built on older OS versions work on newer versions
83 +
2. **Maintenance Burden**: Multiple packages per architecture increases complexity without benefit
84 +
3. **User Confusion**: Users would need to choose between multiple packages for the same architecture
85 +
4. **Storage Costs**: More packages means more storage and bandwidth
86 +
5. **Testing Overhead**: The existing test workflow already validates across multiple OS versions (macos-14, macos-15, ubuntu-22.04, ubuntu-24.04, etc.), proving binary compatibility
87 +
88 +
**Conclusion**: One binary package per architecture provides maximum compatibility with minimum complexity. The test workflow validates compatibility across OS versions, while the release workflow builds on the oldest supported version for maximum forward compatibility.
89 +
90 +
## Components and Interfaces
91 +
92 +
### 1. Release Workflow File
93 +
94 +
**Location**: `.github/workflows/release.yml`
95 +
96 +
**Responsibilities**:
97 +
- Trigger on version tags
98 +
- Wait for test workflow completion
99 +
- Build release binaries for all targets
100 +
- Create platform-specific packages
101 +
- Generate SHA256 checksums
102 +
- Upload packages and checksums to GitHub release
103 +
104 +
**Key Jobs**:
105 +
106 +
#### Job: `validate`
107 +
- Waits for the existing test workflow to complete for the tagged commit
108 +
- Uses an action like `lewagon/wait-on-check-action` to poll test workflow status
109 +
- Fails the release if tests don't pass
110 +
- Includes timeout to prevent infinite waiting (e.g., 60 minutes)
111 +
- Runs quality checks (fmt, clippy) after tests pass
112 +
113 +
#### Job: `build` (matrix)
114 +
- Depends on `validate` job
115 +
- Checks out code
116 +
- Sets up Rust toolchain (stable)
117 +
- Runs quality checks (fmt, clippy)
118 +
- Builds release binaries with `cargo build --release` (LTO and stripping handled by Cargo.toml profile)
119 +
- Builds CLI binaries (checksum, arch-check, get-custom-params)
120 +
- Stages files in platform-specific directory structure
121 +
- Creates compressed package
122 +
- Generates SHA256 checksum
123 +
- Uploads package and checksum as artifacts
124 +
125 +
#### Job: `publish`
126 +
- Depends on all `build` jobs
127 +
- Downloads all artifacts
128 +
- Checks if GitHub release already exists for the tag
129 +
- If release exists, uploads packages and checksums to existing release
130 +
- If release doesn't exist, creates new release and uploads assets
131 +
- Allows manual release creation with custom notes before workflow runs
132 +
133 +
### 2. Package Structure
134 +
135 +
#### Linux Packages (x86_64 and aarch64)
136 +
137 +
```
138 +
crc-fast-{version}-linux-{arch}/
139 +
├── lib/
140 +
│   ├── libcrc_fast.so
141 +
│   └── libcrc_fast.a
142 +
├── include/
143 +
│   └── libcrc_fast.h
144 +
├── bin/
145 +
│   ├── checksum
146 +
│   ├── arch-check
147 +
│   └── get-custom-params
148 +
├── LICENSE-MIT
149 +
├── LICENSE-Apache
150 +
├── VERSION
151 +
└── README.txt
152 +
```
153 +
154 +
#### macOS Package (aarch64)
155 +
156 +
```
157 +
crc-fast-{version}-macos-aarch64/
158 +
├── lib/
159 +
│   ├── libcrc_fast.dylib
160 +
│   └── libcrc_fast.a
161 +
├── include/
162 +
│   └── libcrc_fast.h
163 +
├── bin/
164 +
│   ├── checksum
165 +
│   ├── arch-check
166 +
│   └── get-custom-params
167 +
├── LICENSE-MIT
168 +
├── LICENSE-Apache
169 +
├── VERSION
170 +
└── README.txt
171 +
```
172 +
173 +
#### Windows Packages (x86_64 and aarch64)
174 +
175 +
```
176 +
crc-fast-{version}-windows-{arch}/
177 +
├── bin/
178 +
│   ├── crc_fast.dll
179 +
│   ├── checksum.exe
180 +
│   ├── arch-check.exe
181 +
│   └── get-custom-params.exe
182 +
├── lib/
183 +
│   ├── crc_fast.dll.lib    (import library for linking against DLL)
184 +
│   └── crc_fast.lib         (static library)
185 +
├── include/
186 +
│   └── libcrc_fast.h
187 +
├── LICENSE-MIT
188 +
├── LICENSE-Apache
189 +
├── VERSION
190 +
└── README.txt
191 +
```
192 +
193 +
**Windows Library Files Explained**:
194 +
- `crc_fast.dll`: The dynamic library containing the actual code
195 +
- `crc_fast.dll.lib`: Import library needed to link against the DLL at compile time
196 +
- `crc_fast.lib`: Static library for static linking (standalone, doesn't need DLL)
197 +
198 +
### 3. Package Metadata Files
199 +
200 +
#### VERSION File
201 +
Contains the version number extracted from the git tag:
202 +
```
203 +
1.5.0
204 +
```
205 +
206 +
#### README.txt File
207 +
Provides basic installation and usage instructions:
208 +
```
209 +
crc-fast Binary Distribution
210 +
Version: {version}
211 +
Platform: {platform}-{arch}
212 +
213 +
Contents:
214 +
- Library files (dynamic and static)
215 +
- Header file for C/C++ integration
216 +
- Command-line utilities
217 +
218 +
Installation:
219 +
[Platform-specific instructions]
220 +
221 +
Usage:
222 +
See https://github.com/awesomized/crc-fast-rust for documentation
223 +
224 +
License: MIT OR Apache-2.0
225 +
```
226 +
227 +
### 4. Checksum Files
228 +
229 +
Each package has an accompanying `.sha256` file:
230 +
```
231 +
{sha256_hash}  crc-fast-{version}-{platform}-{arch}.{ext}
232 +
```
233 +
234 +
## Data Models
235 +
236 +
### Build Artifact Structure
237 +
238 +
```yaml
239 +
artifacts:
240 +
  - name: "crc-fast-{version}-{platform}-{arch}.{ext}"
241 +
    type: "package"
242 +
    checksum: "{sha256_hash}"
243 +
  - name: "crc-fast-{version}-{platform}-{arch}.{ext}.sha256"
244 +
    type: "checksum"
245 +
```
246 +
247 +
### Matrix Configuration
248 +
249 +
```yaml
250 +
matrix:
251 +
  include:
252 +
    - target: x86_64-unknown-linux-gnu
253 +
      os: ubuntu-22.04
254 +
      platform: linux
255 +
      arch: x86_64
256 +
      ext: tar.gz
257 +
      
258 +
    - target: aarch64-unknown-linux-gnu
259 +
      os: ubuntu-22.04-arm
260 +
      platform: linux
261 +
      arch: aarch64
262 +
      ext: tar.gz
263 +
      
264 +
    - target: aarch64-apple-darwin
265 +
      os: macos-14
266 +
      platform: macos
267 +
      arch: aarch64
268 +
      ext: tar.gz
269 +
      
270 +
    - target: x86_64-pc-windows-msvc
271 +
      os: windows-2022
272 +
      platform: windows
273 +
      arch: x86_64
274 +
      ext: zip
275 +
      
276 +
    - target: aarch64-pc-windows-msvc
277 +
      os: windows-11-arm
278 +
      platform: windows
279 +
      arch: aarch64
280 +
      ext: zip
281 +
```
282 +
283 +
## Error Handling
284 +
285 +
### Test Failure
286 +
- If the test workflow fails, the `validate` job fails
287 +
- The `build` jobs don't execute (dependency chain)
288 +
- No release is created
289 +
- GitHub Actions shows clear failure status
290 +
291 +
### Build Failure
292 +
- If any platform build fails, that specific matrix job fails
293 +
- Other platform builds continue
294 +
- The `publish` job waits for all builds
295 +
- If any build failed, `publish` job is skipped
296 +
- Partial releases are prevented
297 +
298 +
### Quality Check Failure
299 +
- If `cargo fmt --check` fails, build stops
300 +
- If `cargo clippy` produces warnings, build stops
301 +
- Ensures all released binaries meet quality standards
302 +
303 +
### Missing Files
304 +
- Build script validates all expected files exist before packaging
305 +
- Fails with clear error message if files are missing
306 +
- Prevents incomplete packages
307 +
308 +
### Upload Failure
309 +
- If GitHub release creation fails, workflow fails
310 +
- If asset upload fails, workflow retries (GitHub Actions default)
311 +
- All artifacts remain available for manual inspection
312 +
313 +
## Testing Strategy
314 +
315 +
### Pre-Release Testing
316 +
1. The existing test workflow must pass completely
317 +
2. All platforms in the test matrix must succeed
318 +
3. Format and clippy checks must pass
319 +
320 +
### Build Verification
321 +
1. Verify all expected files are present in target/release
322 +
2. Check file sizes are reasonable (not empty)
323 +
3. Validate binary executables are actually executable
324 +
4. Confirm library files have correct extensions
325 +
326 +
### Package Verification
327 +
1. Verify package structure matches specification
328 +
2. Check all metadata files are included
329 +
3. Validate checksums are generated correctly
330 +
4. Ensure package names follow naming convention
331 +
332 +
### Integration Testing
333 +
1. Test workflow on a feature branch with test tags
334 +
2. Verify packages can be downloaded
335 +
3. Test that libraries can be linked
336 +
4. Verify CLI binaries execute correctly
337 +
5. Validate checksums match package contents
338 +
339 +
### Manual Testing Checklist
340 +
Before first production release:
341 +
- [ ] Create test tag on feature branch
342 +
- [ ] Verify workflow triggers correctly
343 +
- [ ] Download each platform package
344 +
- [ ] Extract and verify contents
345 +
- [ ] Test linking dynamic library
346 +
- [ ] Test linking static library
347 +
- [ ] Run each CLI binary
348 +
- [ ] Verify checksums
349 +
- [ ] Test on actual target platforms
350 +
351 +
## Design Decisions
352 +
353 +
### Decision 1: Single Package Per Platform
354 +
**Rationale**: Combining libraries and CLI tools in one package simplifies distribution and ensures users get everything they need. Separate packages would create confusion about which package to download.
355 +
356 +
**Alternative Considered**: Separate library and CLI packages. Rejected because it adds complexity for minimal benefit.
357 +
358 +
### Decision 2: Include Both Dynamic and Static Libraries
359 +
**Rationale**: Different projects have different linking requirements. Providing both gives maximum flexibility without requiring users to build from source.
360 +
361 +
**Alternative Considered**: Separate packages for dynamic and static. Rejected because the size overhead is minimal and user experience is worse.
362 +
363 +
### Decision 3: Platform-Specific Directory Layouts
364 +
**Rationale**: Following platform conventions makes integration easier for users familiar with their platform's standards. Windows expects DLLs in bin/, while Unix expects shared libraries in lib/.
365 +
366 +
**Alternative Considered**: Unified layout across all platforms. Rejected because it would be non-standard on all platforms.
367 +
368 +
### Decision 4: Reuse Existing Test Workflow
369 +
**Rationale**: The existing test workflow is comprehensive and already validates all target platforms. Duplicating tests would be wasteful and create maintenance burden.
370 +
371 +
**Alternative Considered**: Inline tests in release workflow. Rejected because it duplicates logic and increases workflow complexity.
372 +
373 +
### Decision 5: Matrix Build Strategy
374 +
**Rationale**: Building all platforms in parallel maximizes speed and allows independent failure handling. GitHub Actions provides excellent matrix support.
375 +
376 +
**Alternative Considered**: Sequential builds. Rejected because it would significantly increase release time.
377 +
378 +
### Decision 6: SHA256 Checksums
379 +
**Rationale**: SHA256 is the industry standard for verifying download integrity. It's widely supported and provides strong security guarantees.
380 +
381 +
**Alternative Considered**: MD5 or SHA1. Rejected because they're cryptographically weak. Multiple checksums rejected as unnecessary.
382 +
383 +
### Decision 7: Separate Checksum Files
384 +
**Rationale**: Separate files allow users to download and verify checksums independently. This is the standard practice for software distribution.
385 +
386 +
**Alternative Considered**: Checksums in release notes. Rejected because it's less convenient for automated verification.
387 +
388 +
### Decision 8: Tag Pattern Without 'v' Prefix
389 +
**Rationale**: The project already uses tags like `1.5.0` without the 'v' prefix. Maintaining consistency with existing practice is important.
390 +
391 +
**Alternative Considered**: Requiring 'v' prefix. Rejected because it would break existing tagging convention.
392 +
393 +
### Decision 9: Update Existing Release Rather Than Create
394 +
**Rationale**: Allowing manual release creation before the workflow runs gives maintainers control over release notes, descriptions, and other metadata. The workflow focuses on building and uploading binaries, not managing release content.
395 +
396 +
**Workflow**: 
397 +
1. Maintainer creates release manually with desired notes
398 +
2. Maintainer creates and pushes tag
399 +
3. Workflow builds binaries and uploads to existing release
400 +
4. If no release exists, workflow creates a minimal one
401 +
402 +
**Alternative Considered**: Workflow always creates release. Rejected because it forces auto-generated release notes and removes maintainer control over release presentation.
added vendor/crc-fast/.kiro/specs/github-release-automation/requirements.md +101 −0
1 +
# Requirements Document
2 +
3 +
## Introduction
4 +
5 +
This feature automates the creation and distribution of binary packages for the crc-fast library when a tagged version release is created on GitHub. The system will build platform-specific packages containing both library files (dynamic and static) and command-line utilities, following industry-standard packaging conventions for each target platform and architecture combination.
6 +
7 +
## Glossary
8 +
9 +
- **Release Workflow**: A GitHub Actions workflow that triggers on git tag creation and produces binary artifacts
10 +
- **Binary Package**: A compressed archive containing compiled library files, headers, and executables for a specific platform-architecture combination
11 +
- **Dynamic Library**: A shared library file (.so, .dylib, or .dll) that can be linked at runtime
12 +
- **Static Library**: A library archive (.a or .lib) that is linked at compile time
13 +
- **CLI Binary**: Command-line executable programs (checksum, arch-check, get-custom-params)
14 +
- **Target Triple**: A Rust platform identifier (e.g., x86_64-unknown-linux-gnu)
15 +
- **Package Layout**: The directory structure and file organization within a binary package
16 +
- **Release Asset**: A file attached to a GitHub release that users can download
17 +
18 +
## Requirements
19 +
20 +
### Requirement 1
21 +
22 +
**User Story:** As a library consumer, I want to download pre-built binaries for my platform, so that I can use crc-fast without compiling from source
23 +
24 +
#### Acceptance Criteria
25 +
26 +
1. WHEN a git tag matching the pattern {MAJOR}.{MINOR}.{PATCH} is pushed, THE Release Workflow SHALL trigger automatically
27 +
2. THE Release Workflow SHALL build binaries for x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, aarch64-apple-darwin, x86_64-pc-windows-msvc, and aarch64-pc-windows-msvc targets
28 +
3. THE Release Workflow SHALL execute all tests successfully before building release binaries
29 +
4. THE Release Workflow SHALL produce release-optimized builds using the existing Cargo.toml release profile (LTO, strip, opt-level 3)
30 +
5. THE Release Workflow SHALL upload all binary packages as GitHub release assets
31 +
32 +
### Requirement 2
33 +
34 +
**User Story:** As a C/C++ developer, I want library packages with both dynamic and static libraries, so that I can choose the linking strategy that fits my project
35 +
36 +
#### Acceptance Criteria
37 +
38 +
1. THE Release Workflow SHALL include both dynamic library files and static library files in library packages
39 +
2. WHERE the target is Linux, THE Release Workflow SHALL include libcrc_fast.so and libcrc_fast.a files
40 +
3. WHERE the target is macOS, THE Release Workflow SHALL include libcrc_fast.dylib and libcrc_fast.a files
41 +
4. WHERE the target is Windows, THE Release Workflow SHALL include crc_fast.dll, crc_fast.dll.lib (import library), and crc_fast.lib (static library) files
42 +
5. THE Release Workflow SHALL include the libcrc_fast.h header file in all library packages
43 +
44 +
### Requirement 3
45 +
46 +
**User Story:** As a command-line user, I want executable binaries for the checksum utilities, so that I can use crc-fast tools directly from my terminal
47 +
48 +
#### Acceptance Criteria
49 +
50 +
1. THE Release Workflow SHALL build checksum, arch-check, and get-custom-params executable binaries
51 +
2. THE Release Workflow SHALL include CLI binaries in library packages
52 +
3. WHERE the target is Windows, THE Release Workflow SHALL include .exe extensions on executable files
53 +
4. WHERE the target is Linux or macOS, THE Release Workflow SHALL set executable permissions on binary files
54 +
55 +
### Requirement 4
56 +
57 +
**User Story:** As a package consumer, I want packages organized according to platform conventions, so that I can easily integrate them into my build system
58 +
59 +
#### Acceptance Criteria
60 +
61 +
1. WHERE the target is Linux, THE Release Workflow SHALL organize files in lib/ and include/ directories
62 +
2. WHERE the target is macOS, THE Release Workflow SHALL organize files in lib/ and include/ directories
63 +
3. WHERE the target is Windows, THE Release Workflow SHALL organize files in bin/ and include/ directories
64 +
4. THE Release Workflow SHALL place CLI executables in bin/ subdirectory for Linux and macOS targets
65 +
5. THE Release Workflow SHALL place CLI executables in bin/ subdirectory for Windows targets alongside the DLL
66 +
67 +
### Requirement 5
68 +
69 +
**User Story:** As a release maintainer, I want descriptive package names, so that users can easily identify the correct package for their platform
70 +
71 +
#### Acceptance Criteria
72 +
73 +
1. THE Release Workflow SHALL name packages using the format crc-fast-{version}-{os}-{arch}.{extension}
74 +
2. WHERE the target is Linux, THE Release Workflow SHALL use .tar.gz extension
75 +
3. WHERE the target is macOS, THE Release Workflow SHALL use .tar.gz extension
76 +
4. WHERE the target is Windows, THE Release Workflow SHALL use .zip extension
77 +
5. THE Release Workflow SHALL include the git tag version in the package filename
78 +
79 +
### Requirement 6
80 +
81 +
**User Story:** As a quality-conscious maintainer, I want the release workflow to reuse existing test infrastructure, so that releases are only created when all tests pass
82 +
83 +
#### Acceptance Criteria
84 +
85 +
1. THE Release Workflow SHALL depend on successful completion of the existing test workflow
86 +
2. THE Release Workflow SHALL use the same Rust toolchain version as the test workflow
87 +
3. THE Release Workflow SHALL fail and prevent release creation if any test fails
88 +
4. THE Release Workflow SHALL run cargo fmt and cargo clippy checks before building
89 +
5. THE Release Workflow SHALL only trigger on tags matching [0-9]+.[0-9]+.[0-9]+ pattern
90 +
91 +
### Requirement 7
92 +
93 +
**User Story:** As a downstream consumer, I want packages to include version information, so that I can verify I'm using the correct release
94 +
95 +
#### Acceptance Criteria
96 +
97 +
1. THE Release Workflow SHALL include a VERSION or version.txt file in each package
98 +
2. THE Release Workflow SHALL include a README or INSTALL file with basic usage instructions
99 +
3. THE Release Workflow SHALL include LICENSE files in each package
100 +
4. THE Release Workflow SHALL generate a checksum file (SHA256) for each package
101 +
5. THE Release Workflow SHALL upload checksum files as separate release assets
added vendor/crc-fast/.kiro/specs/github-release-automation/tasks.md +156 −0
1 +
# Implementation Plan
2 +
3 +
- [x] 1. Create GitHub Actions release workflow file
4 +
  - Create `.github/workflows/release.yml` with workflow structure
5 +
  - Configure workflow to trigger on tags matching `[0-9]+.[0-9]+.[0-9]+` pattern
6 +
  - Set up workflow permissions for creating releases and uploading assets
7 +
  - _Requirements: 1.1, 6.5_
8 +
9 +
- [x] 2. Implement validation job
10 +
  - [x] 2.1 Create validate job that waits for test workflow completion
11 +
    - Use `lewagon/wait-on-check-action` or similar to wait for test workflow to complete
12 +
    - Poll test workflow status until it completes (success or failure)
13 +
    - Fail the validate job if test workflow fails
14 +
    - Set reasonable timeout (e.g., 60 minutes) to prevent infinite waiting
15 +
    - _Requirements: 6.1, 6.3_
16 +
17 +
  - [x] 2.2 Add quality checks to validate job
18 +
    - Run `cargo fmt --check` to verify code formatting
19 +
    - Run `cargo clippy -- -D warnings` to catch linting issues
20 +
    - _Requirements: 6.4_
21 +
22 +
- [x] 3. Implement build matrix job
23 +
  - [x] 3.1 Define build matrix with all target platforms
24 +
    - Configure matrix with 5 targets: x86_64-linux, aarch64-linux, aarch64-macos, x86_64-windows, aarch64-windows
25 +
    - Map each target to appropriate runner: ubuntu-22.04, ubuntu-22.04-arm, macos-14, windows-2022, windows-11-arm
26 +
    - Include platform, arch, and extension variables in matrix
27 +
    - _Requirements: 1.2_
28 +
29 +
  - [x] 3.2 Set up Rust toolchain in build job
30 +
    - Use `actions-rust-lang/setup-rust-toolchain` action
31 +
    - Configure stable toolchain
32 +
    - _Requirements: 6.2_
33 +
34 +
  - [x] 3.3 Build release binaries
35 +
    - Run `cargo build --release` to build library and CLI binaries
36 +
    - Verify all expected files exist in target/release directory
37 +
    - _Requirements: 1.4, 2.1, 3.1_
38 +
39 +
- [x] 4. Create platform-specific package staging
40 +
  - [x] 4.1 Implement Linux package staging
41 +
    - Create directory structure: lib/, include/, bin/
42 +
    - Copy libcrc_fast.so and libcrc_fast.a to lib/
43 +
    - Copy libcrc_fast.h to include/
44 +
    - Copy checksum, arch-check, get-custom-params to bin/
45 +
    - Set executable permissions on binaries
46 +
    - _Requirements: 2.2, 3.2, 3.4, 4.1, 4.4_
47 +
48 +
  - [x] 4.2 Implement macOS package staging
49 +
    - Create directory structure: lib/, include/, bin/
50 +
    - Copy libcrc_fast.dylib and libcrc_fast.a to lib/
51 +
    - Copy libcrc_fast.h to include/
52 +
    - Copy checksum, arch-check, get-custom-params to bin/
53 +
    - Set executable permissions on binaries
54 +
    - _Requirements: 2.3, 3.2, 3.4, 4.2, 4.4_
55 +
56 +
  - [x] 4.3 Implement Windows package staging
57 +
    - Create directory structure: bin/, lib/, include/
58 +
    - Copy crc_fast.dll to bin/
59 +
    - Copy crc_fast.dll.lib and crc_fast.lib to lib/
60 +
    - Copy libcrc_fast.h to include/
61 +
    - Copy checksum.exe, arch-check.exe, get-custom-params.exe to bin/
62 +
    - _Requirements: 2.4, 3.3, 4.3, 4.5_
63 +
64 +
- [ ] 5. Add package metadata files
65 +
  - [x] 5.1 Create VERSION file
66 +
    - Extract version from git tag
67 +
    - Write version number to VERSION file in package root
68 +
    - _Requirements: 7.1_
69 +
70 +
  - [x] 5.2 Create README.txt file
71 +
    - Generate platform-specific installation instructions
72 +
    - Include basic usage information and link to documentation
73 +
    - Add to package root
74 +
    - _Requirements: 7.2_
75 +
76 +
  - [x] 5.3 Copy license files
77 +
    - Copy LICENSE-MIT and LICENSE-Apache to package root
78 +
    - _Requirements: 7.3_
79 +
80 +
- [x] 6. Create compressed packages
81 +
  - [x] 6.1 Implement tar.gz creation for Linux and macOS
82 +
    - Use tar command to create compressed archive
83 +
    - Name package: crc-fast-{version}-{platform}-{arch}.tar.gz
84 +
    - _Requirements: 5.2, 5.3, 5.5_
85 +
86 +
  - [x] 6.2 Implement zip creation for Windows
87 +
    - Use PowerShell Compress-Archive or 7zip
88 +
    - Name package: crc-fast-{version}-windows-{arch}.zip
89 +
    - _Requirements: 5.4, 5.5_
90 +
91 +
- [X] 7. Generate and upload checksums
92 +
  - [x] 7.1 Generate SHA256 checksums
93 +
    - Calculate SHA256 hash for each package
94 +
    - Create .sha256 file with hash and filename
95 +
    - _Requirements: 7.4_
96 +
97 +
  - [x] 7.2 Upload packages and checksums as artifacts
98 +
    - Use `actions/upload-artifact` to upload package files
99 +
    - Upload checksum files as separate artifacts
100 +
    - _Requirements: 7.5_
101 +
102 +
- [X] 8. Implement publish job
103 +
  - [x] 8.1 Download all build artifacts
104 +
    - Use `actions/download-artifact` to retrieve all packages and checksums
105 +
    - Organize files for upload
106 +
    - _Requirements: 1.5_
107 +
108 +
  - [x] 8.2 Check for existing release
109 +
    - Use GitHub API to check if release exists for the tag
110 +
    - Get release ID if it exists
111 +
    - _Requirements: Decision 9_
112 +
113 +
  - [x] 8.3 Create or update GitHub release
114 +
    - If release doesn't exist, create new release with basic information
115 +
    - If release exists, prepare to update it with assets
116 +
    - Use `softprops/action-gh-release` or similar action
117 +
    - _Requirements: 1.5_
118 +
119 +
  - [x] 8.4 Upload packages and checksums to release
120 +
    - Upload all .tar.gz and .zip packages as release assets
121 +
    - Upload all .sha256 checksum files as release assets
122 +
    - _Requirements: 1.5, 7.5_
123 +
124 +
- [ ]* 9. Add workflow documentation
125 +
  - [ ]* 9.1 Create workflow README
126 +
    - Document how to trigger releases
127 +
    - Explain manual release creation workflow
128 +
    - Document package naming conventions
129 +
    - _Requirements: All_
130 +
131 +
  - [ ]* 9.2 Add inline workflow comments
132 +
    - Comment complex workflow steps
133 +
    - Explain matrix configuration
134 +
    - Document platform-specific logic
135 +
    - _Requirements: All_
136 +
137 +
- [ ]* 10. Test release workflow
138 +
  - [ ]* 10.1 Test on feature branch
139 +
    - Create test tag on feature branch
140 +
    - Verify workflow triggers correctly
141 +
    - Check that all jobs complete successfully
142 +
    - _Requirements: All_
143 +
144 +
  - [ ]* 10.2 Validate package contents
145 +
    - Download each platform package
146 +
    - Extract and verify directory structure
147 +
    - Check that all files are present
148 +
    - Verify file permissions on Unix platforms
149 +
    - _Requirements: 2.1-2.5, 3.1-3.4, 4.1-4.5, 7.1-7.3_
150 +
151 +
  - [ ]* 10.3 Test package functionality
152 +
    - Test linking against dynamic library
153 +
    - Test linking against static library
154 +
    - Run each CLI binary to verify functionality
155 +
    - Verify checksums match package contents
156 +
    - _Requirements: 2.1-2.5, 3.1-3.4_
added vendor/crc-fast/.kiro/steering/code-quality-requirements.md +42 −0
1 +
---
2 +
inclusion: always
3 +
---
4 +
5 +
# Code Quality Requirements
6 +
7 +
## Pre-Completion Checks
8 +
9 +
Before marking any task as completed, you MUST run the following commands and ensure they pass without errors or warnings:
10 +
11 +
### 1. Code Formatting
12 +
```bash
13 +
cargo fmt --check
14 +
```
15 +
If this fails, run `cargo fmt` to fix formatting issues, then verify with `--check` again.
16 +
17 +
### 2. Linting
18 +
```bash
19 +
cargo clippy -- -D warnings
20 +
```
21 +
All clippy warnings must be resolved. This ensures code follows Rust best practices and catches potential issues.
22 +
23 +
### 3. Testing
24 +
```bash
25 +
cargo test
26 +
```
27 +
All tests must pass to ensure no regressions were introduced.
28 +
29 +
## Why These Requirements Matter
30 +
31 +
- **cargo fmt**: Ensures consistent code formatting across the entire codebase, making it easier to read and maintain
32 +
- **cargo clippy**: Catches common mistakes, suggests idiomatic Rust patterns, and helps prevent bugs before they reach production
33 +
- **cargo test**: Validates that all functionality works as expected and no existing features were broken
34 +
35 +
## Failure Handling
36 +
37 +
If any of these commands fail:
38 +
1. Fix the issues identified
39 +
2. Re-run the commands to verify fixes
40 +
3. Only then mark the task as completed
41 +
42 +
These checks are non-negotiable for maintaining code quality and consistency.
added vendor/crc-fast/.kiro/steering/commenting-guidelines.md +43 −0
1 +
---
2 +
inclusion: always
3 +
---
4 +
5 +
# Code Commenting Guidelines
6 +
7 +
## Comment Philosophy
8 +
9 +
- Only add comments when they explain WHY something is done a particular way
10 +
- NEVER explain WHAT the code is doing unless it's hard to understand without a comment
11 +
- Code should be self-documenting through clear naming and structure
12 +
- Comments should provide context, reasoning, or non-obvious implications
13 +
14 +
## Examples
15 +
16 +
### Good Comments (WHY)
17 +
```rust
18 +
// Use 512KiB chunks because benchmarks showed this was fastest on Apple M2 Ultra
19 +
let chunk_size = chunk_size.unwrap_or(524288);
20 +
21 +
// Remove xorout since it's already been applied and needs to be re-added on final output
22 +
self.state = combine::checksums(
23 +
    self.state ^ self.params.xorout,
24 +
    other_crc,
25 +
    other.amount,
26 +
    self.params,
27 +
) ^ self.params.xorout;
28 +
```
29 +
30 +
### Avoid (WHAT)
31 +
```rust
32 +
// Set chunk_size to 524288 if None
33 +
let chunk_size = chunk_size.unwrap_or(524288);
34 +
35 +
// XOR the state with xorout
36 +
self.state = self.state ^ self.params.xorout;
37 +
```
38 +
39 +
### Exception: Complex Logic
40 +
Comments explaining WHAT are acceptable when the code logic is genuinely hard to follow:
41 +
```rust
42 +
// Fold 8 bytes at a time using SIMD, then handle remainder with scalar operations
43 +
```
added vendor/crc-fast/CHANGELOG.md +69 −0
1 +
# Changes for crc-fast-rust
2 +
3 +
## [1.10.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.10.0) - 2025-12-26
4 +
* [Rust 1.89 baseline](https://github.com/awesomized/crc-fast-rust/pull/27)
5 +
* [Remove 'crc' dependency](https://github.com/awesomized/crc-fast-rust/pull/40)
6 +
7 +
## [1.9.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.9.0) - 2025-12-22
8 +
* [Optimize performance for smaller sizes](https://github.com/awesomized/crc-fast-rust/pull/38)
9 +
* [Add CRC-16 support](https://github.com/awesomized/crc-fast-rust/pull/39)
10 +
11 +
## [1.8.2](https://github.com/awesomized/crc-fast-rust/releases/tag/1.8.2) - 2025-12-14
12 +
* [Fix the crc dependency minimum](https://github.com/awesomized/crc-fast-rust/pull/33)
13 +
* [Fix no_std build for embedded targets](https://github.com/awesomized/crc-fast-rust/pull/35)
14 +
15 +
## [1.8.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.8.1) - 2025-11-16
16 +
* [Add support for fuzz testing using libFuzzer](https://github.com/awesomized/crc-fast-rust/pull/30)
17 +
18 +
## [1.8.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.8.0) - 2025-11-14
19 +
* [Add no_std and WASM support with full backward compatibility](https://github.com/awesomized/crc-fast-rust/pull/28)
20 +
* [Use feature_detection instead of func calls for fusion](https://github.com/awesomized/crc-fast-rust/commit/3af5cdbec9cf85ed5ce325c131845514873e2e3e)
21 +
* [Improve test and release coverage for x86](https://github.com/awesomized/crc-fast-rust/commit/bba891b97cc5cb32b3320e717749f76e2f46c053)
22 +
23 +
## [1.7.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.7.1) - 2025-11-10
24 +
* [Ensure Miri passes on x86_64 and x86](https://github.com/awesomized/crc-fast-rust/pull/26)
25 +
26 +
## [1.7.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.7.0) - 2025-11-07
27 +
* [Fix/no std feature (currently wasm compatible; groundwork for no_std)](https://github.com/awesomized/crc-fast-rust/pull/25)
28 +
* Support and publish [immutable releases](https://github.blog/changelog/2025-10-28-immutable-releases-are-now-generally-available/) on GitHub
29 +
30 +
## [1.6.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.6.0) - 2025-10-30
31 +
* [Improve runtime feature detection (and performance)](https://github.com/awesomized/crc-fast-rust/pull/21)
32 +
* [remove libc](https://github.com/awesomized/crc-fast-rust/pull/20)
33 +
* [Enable generating and publishing binary packages](https://github.com/awesomized/crc-fast-rust/pull/22)
34 +
35 +
## [1.5.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.5.0) - 2025-09-01
36 +
* [Improve state handling](https://github.com/awesomized/crc-fast-rust/pull/16)
37 +
* [Add support for building a static library](https://github.com/awesomized/crc-fast-rust/pull/17)
38 +
39 +
## [1.4.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.4.1) - 2025-09-01
40 +
* [change unconditional x86-64-v4 reliance to the former x86-64-v2 reliance](https://github.com/awesomized/crc-fast-rust/pull/15)
41 +
42 +
## [1.4.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.4.0) - 2025-08-08
43 +
* [Enable VPCLMULQDQ support on Rust 1.89+](https://github.com/awesomized/crc-fast-rust/pull/10)
44 +
* [Support custom CRC parameters](https://github.com/awesomized/crc-fast-rust/pull/11)
45 +
* [Add checksum command-line utility](https://github.com/awesomized/crc-fast-rust/pull/12)
46 +
* [Remove bindgen](https://github.com/awesomized/crc-fast-rust/pull/13)
47 +
48 +
## [1.3.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.3.0) - 2025-06-10
49 +
* [Replace C bindings for CRC32 fusion calculation](https://github.com/awesomized/crc-fast-rust/pull/9)
50 +
* [Improve VPCLMULQDQ to use 512-bit wide registers](https://github.com/awesomized/crc-fast-rust/pull/8)
51 +
* [Implement hardware accelerated XOR3 support](https://github.com/awesomized/crc-fast-rust/pull/9)
52 +
53 +
## [1.2.2](https://github.com/awesomized/crc-fast-rust/releases/tag/1.2.2) - 2025-06-02
54 +
* [Remove println! from software fallback](https://github.com/awesomized/crc-fast-rust/pull/4)
55 +
56 +
## [1.2.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.2.1) - 2025-05-10
57 +
* [Limit FFI to supported architectures](https://github.com/awesomized/crc-fast-rust/commit/55b967bf623953879fdce74447a9b84f820ac879)
58 +
59 +
## [1.2.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.2.0) - 2025-05-08
60 +
* [Add table-based software fallback](https://github.com/awesomized/crc-fast-rust/commit/9432876eb47e322a35046485b498e18053f889f9)
61 +
62 +
## [1.1.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.1.0) - 2025-05-02
63 +
* [Add digest::DynDigest::box_clone() and Debug support](https://github.com/awesomized/crc-fast-rust/commit/8a494c30ef8ff640ddb113d9fe171611dfb211e5)
64 +
65 +
## [1.0.1](https://github.com/awesomized/crc-fast-rust/releases/tag/1.0.1) - 2025-04-30
66 +
* [Use Rust 1.81+](https://github.com/awesomized/crc-fast-rust/pull/1)
67 +
68 +
## [1.0.0](https://github.com/awesomized/crc-fast-rust/releases/tag/1.0.0) - 2025-04-10
69 +
- First release for crates.io
added vendor/crc-fast/Cargo.toml +156 −0
1 +
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
2 +
#
3 +
# When uploading crates to the registry Cargo will automatically
4 +
# "normalize" Cargo.toml files for maximal compatibility
5 +
# with all versions of Cargo and also rewrite `path` dependencies
6 +
# to registry (e.g., crates.io) dependencies.
7 +
#
8 +
# If you are reading this file be aware that the original Cargo.toml
9 +
# will likely look very different (and much more reasonable).
10 +
# See Cargo.toml.orig for the original contents.
11 +
12 +
[package]
13 +
edition = "2021"
14 +
rust-version = "1.89"
15 +
name = "crc-fast"
16 +
version = "1.10.0"
17 +
authors = ["Don MacAskill"]
18 +
build = false
19 +
autolib = false
20 +
autobins = false
21 +
autoexamples = false
22 +
autotests = false
23 +
autobenches = false
24 +
description = "World's fastest generic CRC16, CRC32, and CRC64 calculator using SIMD. Supplies a C-compatible shared library for use in other languages."
25 +
readme = "README.md"
26 +
keywords = [
27 +
    "crc",
28 +
    "checksum",
29 +
    "simd",
30 +
    "accelerated",
31 +
    "fast",
32 +
]
33 +
categories = [
34 +
    "algorithms",
35 +
    "encoding",
36 +
    "hardware-support",
37 +
]
38 +
license = "MIT OR Apache-2.0"
39 +
repository = "https://github.com/awesomized/crc-fast-rust"
40 +
41 +
[package.metadata.docs.rs]
42 +
features = ["std"]
43 +
rustdoc-args = [
44 +
    "--cfg",
45 +
    "docsrs",
46 +
]
47 +
48 +
[features]
49 +
alloc = ["digest"]
50 +
cache = [
51 +
    "alloc",
52 +
    "hashbrown",
53 +
    "spin",
54 +
]
55 +
cli = ["std"]
56 +
default = [
57 +
    "std",
58 +
    "panic-handler",
59 +
    "ffi",
60 +
]
61 +
ffi = []
62 +
optimize_crc32_auto = []
63 +
optimize_crc32_avx512_v4s3x3 = []
64 +
optimize_crc32_avx512_vpclmulqdq_v3x2 = []
65 +
optimize_crc32_neon_blended = []
66 +
optimize_crc32_neon_eor3_v9s3x2e_s3 = []
67 +
optimize_crc32_neon_v12e_v1 = []
68 +
optimize_crc32_neon_v3s4x2e_v2 = []
69 +
optimize_crc32_sse_v4s3x3 = []
70 +
panic-handler = []
71 +
std = ["alloc"]
72 +
vpclmulqdq = []
73 +
74 +
[lib]
75 +
name = "crc_fast"
76 +
crate-type = ["lib"]
77 +
path = "src/lib.rs"
78 +
bench = false
79 +
80 +
[dependencies.digest]
81 +
version = "0.10"
82 +
features = ["alloc"]
83 +
optional = true
84 +
default-features = false
85 +
86 +
[dependencies.hashbrown]
87 +
version = "0.16.0"
88 +
optional = true
89 +
90 +
[dependencies.spin]
91 +
version = "0.10.0"
92 +
features = [
93 +
    "once",
94 +
    "rwlock",
95 +
    "mutex",
96 +
    "spin_mutex",
97 +
]
98 +
optional = true
99 +
default-features = false
100 +
101 +
[dev-dependencies.cbindgen]
102 +
version = "0.29"
103 +
104 +
[dev-dependencies.crc]
105 +
version = "3.4"
106 +
107 +
[dev-dependencies.criterion]
108 +
version = "0.7"
109 +
110 +
[dev-dependencies.proptest]
111 +
version = "1.9"
112 +
113 +
[dev-dependencies.rand]
114 +
version = "0.9"
115 +
116 +
[dev-dependencies.regex]
117 +
version = "1.12"
118 +
119 +
[dev-dependencies.wasm-bindgen-test]
120 +
version = "0.3"
121 +
122 +
[target.'cfg(target_arch = "aarch64")'.dependencies.spin]
123 +
version = "0.10.0"
124 +
features = [
125 +
    "once",
126 +
    "rwlock",
127 +
    "mutex",
128 +
    "spin_mutex",
129 +
]
130 +
default-features = false
131 +
132 +
[target.'cfg(target_arch = "x86")'.dependencies.spin]
133 +
version = "0.10.0"
134 +
features = [
135 +
    "once",
136 +
    "rwlock",
137 +
    "mutex",
138 +
    "spin_mutex",
139 +
]
140 +
default-features = false
141 +
142 +
[target.'cfg(target_arch = "x86_64")'.dependencies.spin]
143 +
version = "0.10.0"
144 +
features = [
145 +
    "once",
146 +
    "rwlock",
147 +
    "mutex",
148 +
    "spin_mutex",
149 +
]
150 +
default-features = false
151 +
152 +
[profile.release]
153 +
opt-level = 3
154 +
lto = true
155 +
codegen-units = 1
156 +
strip = true
added vendor/crc-fast/LICENSE-Apache +201 −0
1 +
                                 Apache License
2 +
                           Version 2.0, January 2004
3 +
                        http://www.apache.org/licenses/
4 +
5 +
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 +
7 +
   1. Definitions.
8 +
9 +
      "License" shall mean the terms and conditions for use, reproduction,
10 +
      and distribution as defined by Sections 1 through 9 of this document.
11 +
12 +
      "Licensor" shall mean the copyright owner or entity authorized by
13 +
      the copyright owner that is granting the License.
14 +
15 +
      "Legal Entity" shall mean the union of the acting entity and all
16 +
      other entities that control, are controlled by, or are under common
17 +
      control with that entity. For the purposes of this definition,
18 +
      "control" means (i) the power, direct or indirect, to cause the
19 +
      direction or management of such entity, whether by contract or
20 +
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 +
      outstanding shares, or (iii) beneficial ownership of such entity.
22 +
23 +
      "You" (or "Your") shall mean an individual or Legal Entity
24 +
      exercising permissions granted by this License.
25 +
26 +
      "Source" form shall mean the preferred form for making modifications,
27 +
      including but not limited to software source code, documentation
28 +
      source, and configuration files.
29 +
30 +
      "Object" form shall mean any form resulting from mechanical
31 +
      transformation or translation of a Source form, including but
32 +
      not limited to compiled object code, generated documentation,
33 +
      and conversions to other media types.
34 +
35 +
      "Work" shall mean the work of authorship, whether in Source or
36 +
      Object form, made available under the License, as indicated by a
37 +
      copyright notice that is included in or attached to the work
38 +
      (an example is provided in the Appendix below).
39 +
40 +
      "Derivative Works" shall mean any work, whether in Source or Object
41 +
      form, that is based on (or derived from) the Work and for which the
42 +
      editorial revisions, annotations, elaborations, or other modifications
43 +
      represent, as a whole, an original work of authorship. For the purposes
44 +
      of this License, Derivative Works shall not include works that remain
45 +
      separable from, or merely link (or bind by name) to the interfaces of,
46 +
      the Work and Derivative Works thereof.
47 +
48 +
      "Contribution" shall mean any work of authorship, including
49 +
      the original version of the Work and any modifications or additions
50 +
      to that Work or Derivative Works thereof, that is intentionally
51 +
      submitted to Licensor for inclusion in the Work by the copyright owner
52 +
      or by an individual or Legal Entity authorized to submit on behalf of
53 +
      the copyright owner. For the purposes of this definition, "submitted"
54 +
      means any form of electronic, verbal, or written communication sent
55 +
      to the Licensor or its representatives, including but not limited to
56 +
      communication on electronic mailing lists, source code control systems,
57 +
      and issue tracking systems that are managed by, or on behalf of, the
58 +
      Licensor for the purpose of discussing and improving the Work, but
59 +
      excluding communication that is conspicuously marked or otherwise
60 +
      designated in writing by the copyright owner as "Not a Contribution."
61 +
62 +
      "Contributor" shall mean Licensor and any individual or Legal Entity
63 +
      on behalf of whom a Contribution has been received by Licensor and
64 +
      subsequently incorporated within the Work.
65 +
66 +
   2. Grant of Copyright License. Subject to the terms and conditions of
67 +
      this License, each Contributor hereby grants to You a perpetual,
68 +
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 +
      copyright license to reproduce, prepare Derivative Works of,
70 +
      publicly display, publicly perform, sublicense, and distribute the
71 +
      Work and such Derivative Works in Source or Object form.
72 +
73 +
   3. Grant of Patent License. Subject to the terms and conditions of
74 +
      this License, each Contributor hereby grants to You a perpetual,
75 +
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 +
      (except as stated in this section) patent license to make, have made,
77 +
      use, offer to sell, sell, import, and otherwise transfer the Work,
78 +
      where such license applies only to those patent claims licensable
79 +
      by such Contributor that are necessarily infringed by their
80 +
      Contribution(s) alone or by combination of their Contribution(s)
81 +
      with the Work to which such Contribution(s) was submitted. If You
82 +
      institute patent litigation against any entity (including a
83 +
      cross-claim or counterclaim in a lawsuit) alleging that the Work
84 +
      or a Contribution incorporated within the Work constitutes direct
85 +
      or contributory patent infringement, then any patent licenses
86 +
      granted to You under this License for that Work shall terminate
87 +
      as of the date such litigation is filed.
88 +
89 +
   4. Redistribution. You may reproduce and distribute copies of the
90 +
      Work or Derivative Works thereof in any medium, with or without
91 +
      modifications, and in Source or Object form, provided that You
92 +
      meet the following conditions:
93 +
94 +
      (a) You must give any other recipients of the Work or
95 +
          Derivative Works a copy of this License; and
96 +
97 +
      (b) You must cause any modified files to carry prominent notices
98 +
          stating that You changed the files; and
99 +
100 +
      (c) You must retain, in the Source form of any Derivative Works
101 +
          that You distribute, all copyright, patent, trademark, and
102 +
          attribution notices from the Source form of the Work,
103 +
          excluding those notices that do not pertain to any part of
104 +
          the Derivative Works; and
105 +
106 +
      (d) If the Work includes a "NOTICE" text file as part of its
107 +
          distribution, then any Derivative Works that You distribute must
108 +
          include a readable copy of the attribution notices contained
109 +
          within such NOTICE file, excluding those notices that do not
110 +
          pertain to any part of the Derivative Works, in at least one
111 +
          of the following places: within a NOTICE text file distributed
112 +
          as part of the Derivative Works; within the Source form or
113 +
          documentation, if provided along with the Derivative Works; or,
114 +
          within a display generated by the Derivative Works, if and
115 +
          wherever such third-party notices normally appear. The contents
116 +
          of the NOTICE file are for informational purposes only and
117 +
          do not modify the License. You may add Your own attribution
118 +
          notices within Derivative Works that You distribute, alongside
119 +
          or as an addendum to the NOTICE text from the Work, provided
120 +
          that such additional attribution notices cannot be construed
121 +
          as modifying the License.
122 +
123 +
      You may add Your own copyright statement to Your modifications and
124 +
      may provide additional or different license terms and conditions
125 +
      for use, reproduction, or distribution of Your modifications, or
126 +
      for any such Derivative Works as a whole, provided Your use,
127 +
      reproduction, and distribution of the Work otherwise complies with
128 +
      the conditions stated in this License.
129 +
130 +
   5. Submission of Contributions. Unless You explicitly state otherwise,
131 +
      any Contribution intentionally submitted for inclusion in the Work
132 +
      by You to the Licensor shall be under the terms and conditions of
133 +
      this License, without any additional terms or conditions.
134 +
      Notwithstanding the above, nothing herein shall supersede or modify
135 +
      the terms of any separate license agreement you may have executed
136 +
      with Licensor regarding such Contributions.
137 +
138 +
   6. Trademarks. This License does not grant permission to use the trade
139 +
      names, trademarks, service marks, or product names of the Licensor,
140 +
      except as required for reasonable and customary use in describing the
141 +
      origin of the Work and reproducing the content of the NOTICE file.
142 +
143 +
   7. Disclaimer of Warranty. Unless required by applicable law or
144 +
      agreed to in writing, Licensor provides the Work (and each
145 +
      Contributor provides its Contributions) on an "AS IS" BASIS,
146 +
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 +
      implied, including, without limitation, any warranties or conditions
148 +
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 +
      PARTICULAR PURPOSE. You are solely responsible for determining the
150 +
      appropriateness of using or redistributing the Work and assume any
151 +
      risks associated with Your exercise of permissions under this License.
152 +
153 +
   8. Limitation of Liability. In no event and under no legal theory,
154 +
      whether in tort (including negligence), contract, or otherwise,
155 +
      unless required by applicable law (such as deliberate and grossly
156 +
      negligent acts) or agreed to in writing, shall any Contributor be
157 +
      liable to You for damages, including any direct, indirect, special,
158 +
      incidental, or consequential damages of any character arising as a
159 +
      result of this License or out of the use or inability to use the
160 +
      Work (including but not limited to damages for loss of goodwill,
161 +
      work stoppage, computer failure or malfunction, or any and all
162 +
      other commercial damages or losses), even if such Contributor
163 +
      has been advised of the possibility of such damages.
164 +
165 +
   9. Accepting Warranty or Additional Liability. While redistributing
166 +
      the Work or Derivative Works thereof, You may choose to offer,
167 +
      and charge a fee for, acceptance of support, warranty, indemnity,
168 +
      or other liability obligations and/or rights consistent with this
169 +
      License. However, in accepting such obligations, You may act only
170 +
      on Your own behalf and on Your sole responsibility, not on behalf
171 +
      of any other Contributor, and only if You agree to indemnify,
172 +
      defend, and hold each Contributor harmless for any liability
173 +
      incurred by, or claims asserted against, such Contributor by reason
174 +
      of your accepting any such warranty or additional liability.
175 +
176 +
   END OF TERMS AND CONDITIONS
177 +
178 +
   APPENDIX: How to apply the Apache License to your work.
179 +
180 +
      To apply the Apache License to your work, attach the following
181 +
      boilerplate notice, with the fields enclosed by brackets "[]"
182 +
      replaced with your own identifying information. (Don't include
183 +
      the brackets!)  The text should be enclosed in the appropriate
184 +
      comment syntax for the file format. We also recommend that a
185 +
      file or class name and description of purpose be included on the
186 +
      same "printed page" as the copyright notice for easier
187 +
      identification within third-party archives.
188 +
189 +
   Copyright [yyyy] [name of copyright owner]
190 +
191 +
   Licensed under the Apache License, Version 2.0 (the "License");
192 +
   you may not use this file except in compliance with the License.
193 +
   You may obtain a copy of the License at
194 +
195 +
       http://www.apache.org/licenses/LICENSE-2.0
196 +
197 +
   Unless required by applicable law or agreed to in writing, software
198 +
   distributed under the License is distributed on an "AS IS" BASIS,
199 +
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 +
   See the License for the specific language governing permissions and
201 +
   limitations under the License.
added vendor/crc-fast/LICENSE-MIT +18 −0
1 +
Copyright 2025 Don MacAskill
2 +
3 +
Permission is hereby granted, free of charge, to any person obtaining a copy of
4 +
this software and associated documentation files (the "Software"), to deal in
5 +
the Software without restriction, including without limitation the rights to
6 +
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7 +
the Software, and to permit persons to whom the Software is furnished to do so,
8 +
subject to the following conditions:
9 +
10 +
The above copyright notice and this permission notice shall be included in all
11 +
copies or substantial portions of the Software.
12 +
13 +
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 +
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15 +
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16 +
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17 +
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18 +
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
added vendor/crc-fast/PATCHED.md +9 −0
1 +
# crc-fast 1.10.0, patched for Oxygen
2 +
3 +
The crate as published on crates.io (MIT OR Apache-2.0, see LICENSE-*),
4 +
with one change to its `Cargo.toml`: the library is built as a plain
5 +
`lib`, not also as a `cdylib` and `staticlib`, and the binaries, benches
6 +
and tests are not declared. Cargo builds every crate type a dependency
7 +
declares, and the macOS cross build (cargo-zigbuild) cannot link the
8 +
cdylib. `object_store`'s S3 support needs this crate for checksums.
9 +
Used through `[patch.crates-io]` in the workspace `Cargo.toml`.
added vendor/crc-fast/README.md +588 −0
1 +
`crc-fast`
2 +
===========
3 +
4 +
[![Test status](https://github.com/awesomized/crc-fast-rust/workflows/Tests/badge.svg)](https://github.com/awesomized/crc-fast-rust/actions?query=workflow%3ATests)
5 +
[![Latest Version](https://img.shields.io/crates/v/crc-fast.svg)](https://crates.io/crates/crc-fast)
6 +
[![Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/crc-fast)
7 +
8 +
World's fastest generic CRC calculator for
9 +
[all known CRC-16, CRC-32, and CRC-64 variants](https://reveng.sourceforge.io/crc-catalogue/all.htm), as well as bring-your-own
10 +
custom parameters, using SIMD intrinsics,
11 +
which can exceed [100GiB/s](#performance) on modern systems.
12 +
13 +
Supports acceleration on `aarch64`, `x86_64`, and `x86` architectures, plus has a safe non-accelerated table-based
14 +
software fallback for others.
15 +
16 +
The [crc crate](https://crates.io/crates/crc) is ~0.5GiB/s by default, so this is
17 +
[up to >220X faster](#tldr-just-tell-me-how-to-turn-it-up-to-11-).
18 +
19 +
This is unique, not just because of the performance, but also because I couldn't find a single generic SIMD-accelerated
20 +
implementation (in any language) which worked for _all_ known variants, using the
21 +
[Rocksoft model](http://www.ross.net/crc/download/crc_v3.txt), especially the "non-reflected" variants.
22 +
23 +
So I wrote one. :)
24 +
25 +
## Other languages
26 +
27 +
Supplies a [C/C++ compatible library](#cc-compatible-library) for use with other non-`Rust` languages.
28 +
29 +
## Implementations
30 +
31 +
* [AWS SDK for Rust](https://awslabs.github.io/aws-sdk-rust/) via
32 +
  the [aws-smithy-checksums](https://crates.io/crates/aws-smithy-checksums) crate.
33 +
* [crc-fast-php-ext](https://github.com/awesomized/crc-fast-php-ext) `PHP` extension using this library.
34 +
35 +
## Changes
36 +
37 +
See [CHANGELOG](CHANGELOG.md).
38 +
39 +
## Build & Install
40 +
41 +
### Library
42 +
43 +
`cargo build --release` will obviously build the Rust library, including
44 +
the  [C/C++ compatible dynamic and static libraries](#cc-compatible-library).
45 +
46 +
### CLI tools
47 +
48 +
There are some command-line tools available:
49 +
50 +
- `checksum` calculates CRC checksums from the supplied string or file
51 +
- `get-custom-params` generates the custom CRC parameters for the supplied Rocksoft model values
52 +
- `arch-check` checks the current architecture's hardware acceleration features (primarily for debugging)
53 +
54 +
To build them, enable the `cli` feature: `cargo build --features cli --release`.
55 +
56 +
### Everything
57 +
58 +
To build the libraries and the CLI tools, use the `--all-features` flag:  `cargo build --all-features --release`. 
59 +
60 +
A _very_ basic [Makefile](Makefile) is supplied which supports `make install` to install the libraries, header file, and
61 +
CLI binaries to the local system. Specifying the `DESTDIR` environment variable will allow you to customize the install
62 +
location.
63 +
64 +
```
65 +
DESTDIR=/my/custom/path make install
66 +
```
67 +
68 +
## Features
69 +
70 +
The library supports various feature flags for different environments:
71 +
72 +
### Default Features
73 +
* `std` - Standard library support, includes `alloc`
74 +
* `ffi` - C/C++ FFI bindings for shared library (will become optional in v2.0)
75 +
* `panic-handler` - Provides panic handler for `no_std` environments (disable when building binaries)
76 +
77 +
### Optional Features
78 +
* `alloc` - Heap allocation support (enables `Digest` trait, custom CRC params, checksum combining)
79 +
* `cache` - Caches generated constants for custom CRC parameters (requires `alloc`)
80 +
* `cli` - Enables command-line tools (`checksum`, `arch-check`, `get-custom-params`)
81 +
82 +
### Building for `no_std`
83 +
84 +
For embedded targets without standard library:
85 +
86 +
```bash
87 +
# Minimal no_std (core CRC only, no heap)
88 +
cargo build --target thumbv7em-none-eabihf --no-default-features --lib
89 +
90 +
# With heap allocation (enables Digest, custom params)
91 +
cargo build --target thumbv7em-none-eabihf --no-default-features --features alloc --lib
92 +
93 +
# With caching (requires alloc)
94 +
cargo build --target thumbv7em-none-eabihf --no-default-features --features cache --lib
95 +
```
96 +
97 +
Tested on ARM Cortex-M (`thumbv7em-none-eabihf`, `thumbv8m.main-none-eabihf`) and RISC-V (
98 +
`riscv32imac-unknown-none-elf`).
99 +
100 +
### Building for `WASM`
101 +
102 +
For WebAssembly targets:
103 +
104 +
```bash
105 +
# Minimal WASM
106 +
cargo build --target wasm32-unknown-unknown --no-default-features --lib
107 +
108 +
# With heap allocation (typical use case)
109 +
cargo build --target wasm32-unknown-unknown --no-default-features --features alloc --lib
110 +
111 +
# Using wasm-pack for browser
112 +
wasm-pack build --target web --no-default-features --features alloc
113 +
```
114 +
115 +
Tested on `wasm32-unknown-unknown`, `wasm32-wasip1`, and `wasm32-wasip2` targets.
116 +
117 +
## Usage
118 +
119 +
Add `crc-fast = "1"` to your `Cargo.toml` dependencies, which will enable every available optimization for
120 +
the `stable` toolchain.
121 +
122 +
### Fast helper functions
123 +
124 +
For the [most common and popular](#important-crc-variants) CRC variants, there are specialized one-shot functions to make adoption easier and
125 +
performance faster, particularly for smaller input sizes, since it reduces some of the overhead of the generic 
126 +
`checksum` path.
127 +
128 +
#### CRC-32/ISCSI
129 +
130 +
Also commonly known as `crc32c` in many, but not all, implementations.
131 +
132 +
```rust
133 +
use crc_fast::crc32_iscsi;
134 +
135 +
let checksum = crc32_iscsi(b"123456789");
136 +
137 +
assert_eq!(checksum, 0xe3069283);
138 +
```
139 +
140 +
#### CRC-32/ISO-HDLC
141 +
142 +
Also commonly known as `crc32` in many, but not all, implementations.
143 +
144 +
```rust
145 +
use crc_fast::crc32_iso_hdlc;
146 +
147 +
let checksum = crc32_iso_hdlc(b"123456789");
148 +
149 +
assert_eq!(checksum, 0xcbf43926);
150 +
```
151 +
152 +
#### CRC-64/NVME
153 +
154 +
```rust
155 +
use crc_fast::crc64_nvme;
156 +
157 +
let checksum = crc64_nvme(b"123456789");
158 +
159 +
assert_eq!(checksum, 0xae8b14860a799888);
160 +
``` 
161 +
162 +
### Digest
163 +
164 +
Implements the [digest::DynDigest](https://docs.rs/digest/latest/digest/trait.DynDigest.html)
165 +
trait for easier integration with existing Rust code.
166 +
167 +
Creates a `Digest` which can be updated over time, for stream processing, intermittent workloads, etc, enabling
168 +
finalizing the checksum once processing is complete.
169 +
170 +
 ```rust
171 +
 use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc};
172 +
173 +
let mut digest = Digest::new(Crc32IsoHdlc);
174 +
digest.update(b"1234");
175 +
digest.update(b"56789");
176 +
let checksum = digest.finalize();
177 +
178 +
assert_eq!(checksum, 0xcbf43926);
179 +
 ```
180 +
181 +
### Digest Write
182 +
183 +
Implements the [std::io::Write](https://doc.rust-lang.org/std/io/trait.Write.html) trait for
184 +
easier integration with existing Rust code.
185 +
186 +
 ```rust
187 +
use std::env;
188 +
use std::fs::File;
189 +
use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc};
190 +
191 +
// for example/test purposes only, use your own file path
192 +
let binding = env::current_dir().expect("missing working dir").join("crc-check.txt");
193 +
let file_on_disk = binding.to_str().unwrap();
194 +
195 +
// actual usage
196 +
let mut digest = Digest::new(Crc32IsoHdlc);
197 +
let mut file = File::open(file_on_disk).unwrap();
198 +
std::io::copy( & mut file, & mut digest).unwrap();
199 +
let checksum = digest.finalize();
200 +
201 +
assert_eq!(checksum, 0xcbf43926);
202 +
 ```
203 +
204 +
### checksum
205 +
206 +
Checksums a string.
207 +
208 +
```rust
209 +
 use crc_fast::{checksum, CrcAlgorithm::Crc32IsoHdlc};
210 +
211 +
let checksum = checksum(Crc32IsoHdlc, b"123456789");
212 +
213 +
assert_eq!(checksum, 0xcbf43926);
214 +
 ```
215 +
216 +
### checksum_combine
217 +
218 +
Combines checksums from two different sources, which can be useful for distributed or multithreaded workloads, etc.
219 +
220 +
```rust
221 +
 use crc_fast::{checksum, checksum_combine, CrcAlgorithm::Crc32IsoHdlc};
222 +
223 +
let checksum_1 = checksum(Crc32IsoHdlc, b"1234");
224 +
let checksum_2 = checksum(Crc32IsoHdlc, b"56789");
225 +
let checksum = checksum_combine(Crc32IsoHdlc, checksum_1, checksum_2, 5);
226 +
227 +
assert_eq!(checksum, 0xcbf43926);
228 +
 ```
229 +
230 +
### checksum_file
231 +
232 +
Checksums a file, which will chunk through the file optimally, limiting RAM usage and maximizing throughput. Chunk size
233 +
is optional.
234 +
235 +
```rust
236 +
 use crc_fast::{checksum_file, CrcAlgorithm::Crc32IsoHdlc};
237 +
238 +
// for example/test purposes only, use your own file path
239 +
let binding = env::current_dir().expect("missing working dir").join("crc-check.txt");
240 +
let file_on_disk = binding.to_str().unwrap();
241 +
242 +
let checksum = checksum_file(Crc32IsoHdlc, file_on_disk, None);
243 +
244 +
assert_eq!(checksum.unwrap(), 0xcbf43926);
245 +
 ```
246 +
247 +
## Custom CRC Parameters
248 +
249 +
For cases where you need to use CRC variants not included in the predefined algorithms, you can define custom CRC
250 +
parameters and use the `*_with_params` functions.
251 +
252 +
### Digest with custom parameters
253 +
254 +
Creates a `Digest` with custom CRC parameters for stream processing.
255 +
256 +
```rust
257 +
use crc_fast::{Digest, CrcParams};
258 +
259 +
// Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
260 +
let custom_params = CrcParams::new(
261 +
    "CRC-32/CUSTOM",
262 +
    32,
263 +
    0x04c11db7,
264 +
    0xffffffff,
265 +
    true,
266 +
    0xffffffff,
267 +
    0xcbf43926,
268 +
);
269 +
270 +
let mut digest = Digest::new_with_params(custom_params);
271 +
digest.update(b"123456789");
272 +
let checksum = digest.finalize();
273 +
274 +
assert_eq!(checksum, 0xcbf43926);
275 +
```
276 +
277 +
### checksum_with_params
278 +
279 +
Checksums data using custom CRC parameters.
280 +
281 +
```rust
282 +
use crc_fast::{checksum_with_params, CrcParams};
283 +
284 +
// Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
285 +
let custom_params = CrcParams::new(
286 +
    "CRC-32/CUSTOM",
287 +
    32,
288 +
    0x04c11db7,
289 +
    0xffffffff,
290 +
    true,
291 +
    0xffffffff,
292 +
    0xcbf43926,
293 +
);
294 +
295 +
let checksum = checksum_with_params(custom_params, b"123456789");
296 +
297 +
assert_eq!(checksum, 0xcbf43926);
298 +
```
299 +
300 +
### checksum_combine_with_params
301 +
302 +
Combines checksums from two different sources using custom CRC parameters.
303 +
304 +
```rust
305 +
use crc_fast::{checksum_with_params, checksum_combine_with_params, CrcParams};
306 +
307 +
// Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
308 +
let custom_params = CrcParams::new(
309 +
    "CRC-32/CUSTOM",
310 +
    32,
311 +
    0x04c11db7,
312 +
    0xffffffff,
313 +
    true,
314 +
    0xffffffff,
315 +
    0xcbf43926,
316 +
);
317 +
318 +
let checksum_1 = checksum_with_params(custom_params, b"1234");
319 +
let checksum_2 = checksum_with_params(custom_params, b"56789");
320 +
let checksum = checksum_combine_with_params(custom_params, checksum_1, checksum_2, 5);
321 +
322 +
assert_eq!(checksum, 0xcbf43926);
323 +
```
324 +
325 +
### checksum_file_with_params
326 +
327 +
Checksums a file using custom CRC parameters, chunking through the file optimally.
328 +
329 +
```rust
330 +
use std::env;
331 +
use crc_fast::{checksum_file_with_params, CrcParams};
332 +
333 +
// for example/test purposes only, use your own file path
334 +
let binding = env::current_dir().expect("missing working dir").join("crc-check.txt");
335 +
let file_on_disk = binding.to_str().unwrap();
336 +
337 +
// Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
338 +
let custom_params = CrcParams::new(
339 +
    "CRC-32/CUSTOM",
340 +
    32,
341 +
    0x04c11db7,
342 +
    0xffffffff,
343 +
    true,
344 +
    0xffffffff,
345 +
    0xcbf43926,
346 +
);
347 +
348 +
let checksum = checksum_file_with_params(custom_params, file_on_disk, None);
349 +
350 +
assert_eq!(checksum.unwrap(), 0xcbf43926);
351 +
```
352 +
353 +
## C/C++ compatible library
354 +
355 +
`cargo build` will produce a shared library target (`.so` on Linux, `.dll` on Windows, `.dylib` on macOS, etc) and an
356 +
auto-generated [libcrc_fast.h](libcrc_fast.h) header file for use in non-Rust projects, such as through
357 +
[FFI](https://en.wikipedia.org/wiki/Foreign_function_interface). It will also produce a static library target (`.a` on
358 +
Linux and macOS, `.lib` on Windows, etc) for projects
359 +
which prefer statically linking.
360 +
361 +
There is a [crc-fast PHP extension](https://github.com/awesomized/crc-fast-php-ext) using it, for example.
362 +
363 +
## Background
364 +
365 +
This implementation is based on Intel's
366 +
[Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction](https://web.archive.org/web/20131224125630/https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf)
367 +
white paper, though it folds 8-at-a-time, like other modern implementations, rather than the 4-at-a-time as in Intel's
368 +
paper.
369 +
370 +
This library works on `aarch64`, `x86_64`, and `x86` architectures, and is hardware-accelerated and optimized for each
371 +
architecture.
372 +
373 +
Inspired by [`crc32fast`](https://crates.io/crates/crc32fast),
374 +
[`crc64fast`](https://crates.io/crates/crc64fast),
375 +
and [`crc64fast-nvme`](https://crates.io/crates/crc64fast-nvme), each of which only accelerates a single, different CRC
376 +
variant, and all of them were "reflected" variants.
377 +
378 +
In contrast, this library accelerates _every known variant_ (and should accelerate any future variants without changes),
379 +
including all the "non-reflected" variants.
380 +
381 +
## Important CRC variants
382 +
383 +
While there are [many variants](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc), three
384 +
stand out as being the most important and widely used (all of which are "reflected"):
385 +
386 +
### [CRC-32/ISCSI](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iscsi)
387 +
388 +
Many, but not all, implementations simply call this `crc32c` and it's probably the 2nd most popular and widely used,
389 +
after `CRC-32/ISO-HDLC`. It's used in `iSCSI`, `ext4`, `btrfs`, etc.
390 +
391 +
Both `x86_64` and `aarch64` have native hardware support for this CRC variant, so we can use
392 +
[fusion](https://www.corsix.org/content/fast-crc32c-4k) in many cases to accelerate it further by fusing SIMD CLMUL
393 +
instructions with the native CRC instructions.
394 +
395 +
### [CRC-32/ISO-HDLC](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc)
396 +
397 +
Many, but not all, implementations simply call this `crc32` and it may be the most popular and widely used. It's used in
398 +
`Ethernet`, `PKZIP`, `xz`, etc.
399 +
400 +
Only `aarch64` has native hardware support for this CRC variant, so we can use
401 +
[fusion](https://www.corsix.org/content/fast-crc32c-4k) on that platform, but not `x86_64`.
402 +
403 +
### [CRC-64/NVME](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme)
404 +
405 +
`CRC-64/NVME` comes from
406 +
the [NVM Express® NVM Command Set Specification](https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-1.0d-2023.12.28-Ratified.pdf)
407 +
(Revision 1.0d, December 2023),
408 +
is [AWS S3's recommended checksum option](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html)
409 +
(as `CRC64-NVME`), and has also been implemented in the
410 +
[Linux kernel](https://github.com/torvalds/linux/blob/786c8248dbd33a5a7a07f7c6e55a7bfc68d2ca48/lib/crc64.c#L66-L73)
411 +
(where it's been called `CRC-64/Rocksoft` in the past).
412 +
413 +
Note that the `Check` value in the `NVMe` spec uses incorrect endianness (see `Section 5.2.1.3.4, Figure 120, page 83`)
414 +
but all known public & private implementations agree on the correct value, which this library produces.
415 +
416 +
# Acceleration targets
417 +
418 +
This library has baseline support for accelerating all known `CRC-16`, `CRC-32`, and `CRC-64` variants on `aarch64`,
419 +
`x86_64`, and
420 +
`x86` internally in pure `Rust`.
421 +
422 +
It uses the best available acceleration method for the detected CPU features at runtime, including:
423 +
* `aarch64`:
424 +
  * `neon-pmull-sha3` (preferred, if available)
425 +
  * `neon-pmull`
426 +
* `x86_64` and `x86`:
427 +
    * `avx512-vpclmulqdq` (preferred, if available)
428 +
    * `avx512-pclmulqdq`
429 +
    * `sse-pclmulqdq`
430 +
  
431 +
There is a safe table-based software fallback for other architectures, or if no acceleration features are detected.
432 +
433 +
### Checking your platform capabilities
434 +
435 +
There's an [arch-check](src/bin/arch-check.rs) binary which will explain the selected target architecture.
436 +
437 +
```
438 +
// test it works on your system (patches welcome!)
439 +
cargo test
440 +
441 +
// examine the chosen acceleration targets
442 +
cargo run arch-check
443 +
444 +
// build for release
445 +
cargo build --release
446 +
```
447 +
448 +
## Minimum Supported Rust Version (MSRV)
449 +
450 +
This crate targets a `stable-2` policy (ie, the latest stable Rust version minus 2 minor versions) as the Minimum
451 +
Supported Rust Version (MSRV).
452 +
453 +
Bumping the `rust-version` will be considered a **MINOR** version bump.
454 +
455 +
We'll try to support even older versions when possible, but given the high-performance use of SIMD intrinsics and other
456 +
modern Rust features, this is merely a stated goal. We'll move up to `stable-2` ASAP when a sufficiently high 
457 +
performance improvement or necessary feature requires it.
458 +
459 +
## Performance
460 +
461 +
Modern systems can exceed 100 GiB/s for calculating `CRC-32/ISCSI`, and nearly 90 GiB/s for `CRC-32/ISO-HDLC`,
462 +
`CRC-64/NVME`, and all other reflected variants. (Forward variants are slower, due to the extra shuffle-masking, but
463 +
are still extremely fast in this library).
464 +
465 +
This is a summary of the performance for the most important and popular CRC checksums.
466 +
467 +
### CRC-32/ISCSI (reflected)
468 +
469 +
AKA `crc32c` in many, but not all, implementations.
470 +
471 +
| Arch    | Brand | CPU             | System                    | Target            | 1KiB (GiB/s) | 1MiB (GiB/s) |
472 +
|:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:|
473 +
| x86_64  | Intel | Sapphire Rapids | EC2 c7i.metal-24xl        | avx512-vpclmulqdq |          ~61 |         ~111 |
474 +
| x86_64  | AMD   | Genoa           | EC2 c7a.metal-48xl        | avx512-vpclmulqdq |          ~26 |          ~54 |
475 +
| aarch64 | AWS   | Graviton4       | EC2 c8g.metal-48xl        | neon-pmull-sha3   |          ~23 |          ~54 |
476 +
| aarch64 | AWS   | Graviton2       | EC2 c6g.metal             | neon-pmull        |          ~11 |          ~17 |
477 +
| aarch64 | Apple | M3 Ultra        | Mac Studio (32 core)      | neon-pmull-sha3   |          ~60 |          ~99 |
478 +
| aarch64 | Apple | M4 Max          | MacBook Pro 16" (16 core) | neon-pmull-sha3   |          ~56 |          ~94 |
479 +
480 +
### CRC-32/ISO-HDLC (reflected)
481 +
482 +
AKA `crc32` in many, but not all, implementations.
483 +
484 +
| Arch    | Brand | CPU             | System                    | Target            | 1KiB (GiB/s) | 1MiB (GiB/s) |
485 +
|:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:|
486 +
| x86_64  | Intel | Sapphire Rapids | EC2 c7i.metal-248xl       | avx512-vpclmulqdq |          ~28 |          ~88 |
487 +
| x86_64  | AMD   | Genoa           | EC2 c7a.metal-48xl        | avx512-vpclmulqdq |          ~21 |          ~55 |
488 +
| aarch64 | AWS   | Graviton4       | EC2 c8g.metal-48xl        | neon-pmull-sha3   |          ~23 |          ~54 |
489 +
| aarch64 | AWS   | Graviton2       | EC2 c6g.metal             | neon-pmull        |          ~11 |          ~17 |
490 +
| aarch64 | Apple | M3 Ultra        | Mac Studio (32 core)      | neon-pmull-sha3   |          ~48 |          ~98 |
491 +
| aarch64 | Apple | M4 Max          | MacBook Pro 16" (16 core) | neon-pmull-sha3   |          ~56 |          ~94 |
492 +
493 +
### CRC-64/NVME (reflected)
494 +
495 +
[AWS S3's recommended checksum option](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html)
496 +
497 +
| Arch    | Brand | CPU             | System                    | Target            | 1KiB (GiB/s) | 1MiB (GiB/s) |
498 +
|:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:|
499 +
| x86_64  | Intel | Sapphire Rapids | EC2 c7i.metal-24xl        | avx512-vpclmulqdq |          ~28 |          ~88 |
500 +
| x86_64  | AMD   | Genoa           | EC2 c7a.metal-48xl        | avx512-vpclmulqdq |          ~22 |          ~55 |
501 +
| aarch64 | AWS   | Graviton4       | EC2 c8g.metal-48xl        | neon-pmull-sha3   |          ~28 |          ~41 |
502 +
| aarch64 | AWS   | Graviton2       | EC2 c6g.metal             | neon-pmull        |          ~11 |          ~16 |
503 +
| aarch64 | Apple | M3 Ultra        | Mac Studio (32 core)      | neon-pmull-sha3   |          ~58 |          ~72 |
504 +
| aarch64 | Apple | M4 Max          | MacBook Pro 16" (16 core) | neon-pmull-sha3   |          ~52 |          ~72 |
505 +
506 +
### CRC-32/BZIP2 (forward)
507 +
508 +
| Arch    | Brand | CPU             | System                    | Target            | 1KiB (GiB/s) | 1MiB (GiB/s) |
509 +
|:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:|
510 +
| x86_64  | Intel | Sapphire Rapids | EC2 c7i.metal-24xl        | avx512-vpclmulqdq |          ~20 |          ~56 |
511 +
| x86_64  | AMD   | Genoa           | EC2 c7a.metal-48xl        | avx512-vpclmulqdq |          ~14 |          ~43 |
512 +
| aarch64 | AWS   | Graviton4       | EC2 c8g.metal-48xl        | neon-pmull-eor3   |          ~18 |          ~40 |
513 +
| aarch64 | AWS   | Graviton2       | EC2 c6g.metal             | neon-pmull        |           ~9 |          ~14 |
514 +
| aarch64 | Apple | M3 Ultra        | Mac Studio (32 core)      | neon-pmull-eor3   |          ~41 |          ~59 |
515 +
| aarch64 | Apple | M4 Max          | MacBook Pro 16" (16 core) | neon-pmull-eor3   |          ~47 |          ~64 |
516 +
517 +
### CRC-64/ECMA-182 (forward)
518 +
519 +
| Arch    | Brand | CPU             | System                    | Target            | 1KiB (GiB/s) | 1MiB (GiB/s) |
520 +
|:--------|:------|:----------------|:--------------------------|:------------------|-------------:|-------------:|
521 +
| x86_64  | Intel | Sapphire Rapids | EC2 c7i.metal-24xl        | avx512-vpclmulqdq |          ~21 |          ~56 |
522 +
| x86_64  | AMD   | Genoa           | EC2 c7a.metal-48xl        | avx512-vpclmulqdq |          ~14 |          ~43 |
523 +
| aarch64 | AWS   | Graviton4       | EC2 c8g.metal-48xl        | neon-pmull-eor3   |          ~19 |          ~40 |
524 +
| aarch64 | AWS   | Graviton2       | EC2 c6g.metal             | neon-pmull        |           ~9 |          ~14 |
525 +
| aarch64 | Apple | M3 Ultra        | Mac Studio (32 core)      | neon-pmull-eor3   |          ~40 |          ~59 |
526 +
| aarch64 | Apple | M4 Max          | MacBook Pro 16" (16 core) | neon-pmull-eor3   |          ~46 |          ~61 |
527 +
528 +
## Other CRC widths
529 +
530 +
There are [a lot of other known CRC widths and variants](https://reveng.sourceforge.io/crc-catalogue/all.htm), ranging
531 +
from `CRC-3/GSM` to `CRC-82/DARC`, and everything in between.
532 +
533 +
Since [Awesome](https://awesome.co) only uses  `CRC-32` or `CRC-64` widths in our products, this library began by supporting only those
534 +
widths, including all known variants plus support for custom [Rocksoft](http://www.ross.net/crc/download/crc_v3.txt)
535 +
parameters.
536 +
537 +
`CRC-16` has since been added, including all known variants plus support for custom parameters as well.
538 +
539 +
In theory, much of the "heavy lifting" has been done, so it should be possible to add other widths with minimal effort.
540 +
541 +
PRs welcome!
542 +
543 +
## Memory Safety
544 +
545 +
Given the heavy use of hardware intrinsics, this crate uses a decent amount of `unsafe` code.
546 +
547 +
To help ensure memory safety and stability, this crate is validated using [Miri](https://github.com/rust-lang/miri) on
548 +
`x86_64` as well as fuzz tested using [libFuzzer](https://github.com/rust-fuzz/libfuzzer) over millions of iterations.
549 +
550 +
## References
551 +
552 +
* [Catalogue of parametrised CRC algorithms](https://reveng.sourceforge.io/crc-catalogue/all.htm)
553 +
* [crc32-fast](https://crates.io/crates/crc32fast) Original `CRC-32/ISO-HDLC` (`crc32`) implementation in `Rust`.
554 +
* [crc64-fast](https://github.com/tikv/crc64fast) Original `CRC-64/XZ` implementation in `Rust`.
555 +
* [crc64fast-nvme](https://github.com/awesomized/crc64fast-nvme) Original `CRC-64/NVME` implementation in `Rust`.
556 +
* [Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction](https://web.archive.org/web/20131224125630/https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf)
557 +
  Intel's paper.
558 +
* [NVM Express® NVM Command Set Specification](https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-1.0d-2023.12.28-Ratified.pdf)
559 +
  The NVMe spec, including `CRC-64-NVME` (with incorrect endian `Check` value in
560 +
  `Section 5.2.1.3.4, Figure 120, page 83`).
561 +
* [CRC-64/NVME](https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme) The `CRC-64/NVME` quick
562 +
  definition.
563 +
* [A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS](http://www.ross.net/crc/download/crc_v3.txt) Best description of
564 +
  CRC I've seen to date (and the definition of the Rocksoft model).
565 +
* [Linux implementation](https://github.com/torvalds/linux/blob/786c8248dbd33a5a7a07f7c6e55a7bfc68d2ca48/lib/crc64.c)
566 +
  Linux implementation of `CRC-64/NVME`.
567 +
* [MASM/C++ artifacts implementation](https://github.com/jeffareid/crc/) - Reference MASM/C++ implementation for
568 +
  generating artifacts.
569 +
* [Intel isa-l GH issue #88](https://github.com/intel/isa-l/issues/88) - Additional insight into generating artifacts.
570 +
* [StackOverflow PCLMULQDQ CRC32 answer](https://stackoverflow.com/questions/71328336/fast-crc-with-pclmulqdq-not-reflected/71329114#71329114)
571 +
  Insightful answer to implementation details for CRC32.
572 +
* [StackOverflow PCLMULQDQ CRC32 question](https://stackoverflow.com/questions/21171733/calculating-constants-for-crc32-using-pclmulqdq)
573 +
  Insightful question & answer to CRC32 implementation details.
574 +
* [AWS S3 announcement about CRC64-NVME support](https://aws.amazon.com/blogs/aws/introducing-default-data-integrity-protections-for-new-objects-in-amazon-s3/)
575 +
* [AWS S3 docs on checking object integrity using CRC64-NVME](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html)
576 +
* [Vector Carry-Less Multiplication of Quadwords (VPCLMULQDQ) details](https://en.wikichip.org/wiki/x86/vpclmulqdq)
577 +
* [Linux kernel updates by Eric Biggers to use VPCLMULQDQ, etc](https://lkml.org/lkml/2025/2/10/1367)
578 +
* [Faster CRC32-C on x86](https://www.corsix.org/content/fast-crc32c-4k)
579 +
* [Faster CRC32 on the Apple M1](https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/)
580 +
* [An alternative exposition of crc32_4k_pclmulqdq](https://www.corsix.org/content/alternative-exposition-crc32_4k_pclmulqdq)
581 +
* [fast-crc32](https://github.com/corsix/fast-crc32) - implementations of fusion for two CRC-32 variants.
582 +
583 +
## License
584 +
585 +
`cfc-fast` is dual-licensed under
586 +
587 +
* Apache 2.0 license ([LICENSE-Apache](./LICENSE-Apache) or <http://www.apache.org/licenses/LICENSE-2.0>)
588 +
* MIT license ([LICENSE-MIT](./LICENSE-MIT) or <https://opensource.org/licenses/MIT>)
added vendor/crc-fast/src/algorithm.rs +589 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module contains the main algorithm for CRC calculation.
4 +
//!
5 +
//! This implementation is designed to work with both CRC-32 and CRC-64 algorithms.
6 +
//!
7 +
//! It uses SIMD instructions for performance optimization and is designed to be
8 +
//! platform-agnostic.
9 +
//!
10 +
//! The code is structured to allow for easy extension and modification for
11 +
//! different architectures and CRC algorithms.
12 +
//!
13 +
//! The main entry point is the `update` function, which takes the current CRC state,
14 +
//! the input data, CRC parameters, and architecture-specific operations.
15 +
16 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
17 +
18 +
use crate::consts::CRC_CHUNK_SIZE;
19 +
use crate::enums::{DataChunkProcessor, Reflector};
20 +
use crate::structs::CrcState;
21 +
use crate::traits::{ArchOps, EnhancedCrcWidth};
22 +
use crate::{crc16, crc32, crc64, CrcParams};
23 +
24 +
/// Extract keys from CrcParams using safe accessor methods
25 +
/// This ensures bounds checking and future compatibility
26 +
#[inline(always)]
27 +
fn extract_keys_array(params: &CrcParams) -> [u64; 23] {
28 +
    [
29 +
        params.get_key(0),
30 +
        params.get_key(1),
31 +
        params.get_key(2),
32 +
        params.get_key(3),
33 +
        params.get_key(4),
34 +
        params.get_key(5),
35 +
        params.get_key(6),
36 +
        params.get_key(7),
37 +
        params.get_key(8),
38 +
        params.get_key(9),
39 +
        params.get_key(10),
40 +
        params.get_key(11),
41 +
        params.get_key(12),
42 +
        params.get_key(13),
43 +
        params.get_key(14),
44 +
        params.get_key(15),
45 +
        params.get_key(16),
46 +
        params.get_key(17),
47 +
        params.get_key(18),
48 +
        params.get_key(19),
49 +
        params.get_key(20),
50 +
        params.get_key(21),
51 +
        params.get_key(22),
52 +
    ]
53 +
}
54 +
55 +
/// Main entry point that works for both CRC-32 and CRC-64
56 +
#[inline(always)]
57 +
pub unsafe fn update<T: ArchOps, W: EnhancedCrcWidth>(
58 +
    state: W::Value,
59 +
    bytes: &[u8],
60 +
    params: &CrcParams,
61 +
    ops: &T,
62 +
) -> W::Value
63 +
where
64 +
    T::Vector: Copy,
65 +
{
66 +
    let len = bytes.len();
67 +
    if len == 0 {
68 +
        return state;
69 +
    }
70 +
71 +
    // Create the appropriate reflector based on CRC type
72 +
    let reflector = if params.refin {
73 +
        Reflector::NoReflector
74 +
    } else {
75 +
        // Load mask for byte-swapping operations
76 +
        let smask = ops.load_aligned(&W::load_constants(params.refin)[0] as *const [u64; 2]);
77 +
        Reflector::ForwardReflector { smask }
78 +
    };
79 +
80 +
    // Create initial CRC state
81 +
    let mut crc_state = W::create_state(state, params.refin, ops);
82 +
83 +
    // Extract keys once and pass by reference to avoid repeated stack copies
84 +
    let keys = extract_keys_array(params);
85 +
86 +
    // Process data differently based on length
87 +
    // On ARM M4 Max, ARM c8g, x86 c7a, and x86 c7i, using 128 bytes is a measurably faster
88 +
    // threshold than 256 bytes...
89 +
    if len < 128 {
90 +
        // Select processor based on input length
91 +
        let processor = DataChunkProcessor::for_length(len);
92 +
        return process_by_strategy::<T, W>(
93 +
            processor,
94 +
            bytes,
95 +
            &mut crc_state,
96 +
            reflector,
97 +
            &keys,
98 +
            ops,
99 +
        );
100 +
    }
101 +
102 +
    // Process large inputs with SIMD-optimized approach
103 +
    process_large_aligned::<T, W>(bytes, &mut crc_state, reflector, &keys, ops)
104 +
}
105 +
106 +
/// Process data with the selected strategy
107 +
#[inline]
108 +
#[cfg_attr(
109 +
    any(target_arch = "x86", target_arch = "x86_64"),
110 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
111 +
)]
112 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
113 +
unsafe fn process_by_strategy<T: ArchOps, W: EnhancedCrcWidth>(
114 +
    strategy: DataChunkProcessor,
115 +
    data: &[u8],
116 +
    state: &mut CrcState<T::Vector>,
117 +
    reflector: Reflector<T::Vector>,
118 +
    keys: &[u64; 23],
119 +
    ops: &T,
120 +
) -> W::Value
121 +
where
122 +
    T::Vector: Copy,
123 +
{
124 +
    match strategy {
125 +
        DataChunkProcessor::From0To15 => match W::WIDTH {
126 +
            16 => crc16::algorithm::process_0_to_15::<T, W>(data, state, &reflector, keys, ops),
127 +
            32 => crc32::algorithm::process_0_to_15::<T, W>(data, state, &reflector, keys, ops),
128 +
            64 => crc64::algorithm::process_0_to_15::<T, W>(data, state, &reflector, keys, ops),
129 +
            _ => panic!("Unsupported CRC width"),
130 +
        },
131 +
        DataChunkProcessor::From16 => {
132 +
            process_exactly_16::<T, W>(data, state, &reflector, keys, ops)
133 +
        }
134 +
        DataChunkProcessor::From17To31 => {
135 +
            process_17_to_31::<T, W>(data, state, &reflector, keys, ops)
136 +
        }
137 +
        DataChunkProcessor::From32To255 => {
138 +
            process_32_to_255::<T, W>(data, state, &reflector, keys, ops)
139 +
        }
140 +
    }
141 +
}
142 +
143 +
/// Process large inputs with proper SIMD alignment
144 +
#[inline]
145 +
#[cfg_attr(
146 +
    any(target_arch = "x86", target_arch = "x86_64"),
147 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
148 +
)]
149 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
150 +
unsafe fn process_large_aligned<T: ArchOps, W: EnhancedCrcWidth>(
151 +
    bytes: &[u8],
152 +
    state: &mut CrcState<T::Vector>,
153 +
    reflector: Reflector<T::Vector>,
154 +
    keys: &[u64; 23],
155 +
    ops: &T,
156 +
) -> W::Value
157 +
where
158 +
    T::Vector: Copy,
159 +
{
160 +
    // Align data for SIMD processing
161 +
    let (left, middle, right) = bytes.align_to::<[T::Vector; 8]>();
162 +
163 +
    if let Some((first, rest)) = middle.split_first() {
164 +
        if !left.is_empty() {
165 +
            let processor = DataChunkProcessor::for_length(left.len());
166 +
            // Process unaligned bytes at the start
167 +
            let left_crc =
168 +
                process_by_strategy::<T, W>(processor, left, state, reflector, keys, ops);
169 +
            // Update state with the result from processing left bytes
170 +
            *state = W::create_state(left_crc, state.reflected, ops);
171 +
        }
172 +
173 +
        // try to use the enhanced SIMD implementation first, fall back to non-enhanced if necessary
174 +
        if rest.is_empty()
175 +
            || !ops.process_enhanced_simd_blocks::<W>(state, first, rest, &reflector, keys)
176 +
        {
177 +
            process_simd_chunks::<T, W>(state, first, rest, &reflector, keys, ops);
178 +
        }
179 +
180 +
        // Process any unaligned bytes at the end
181 +
        if !right.is_empty() {
182 +
            let processor = DataChunkProcessor::for_length(right.len());
183 +
            // Use the current state to process the right bytes
184 +
            return process_by_strategy::<T, W>(processor, right, state, reflector, keys, ops);
185 +
        }
186 +
187 +
        // Extract the final result
188 +
        return W::extract_result(state.value, state.reflected, ops);
189 +
    }
190 +
191 +
    // Fall back to existing implementation if proper alignment isn't possible
192 +
    let processor = DataChunkProcessor::for_length(bytes.len());
193 +
    process_by_strategy::<T, W>(processor, bytes, state, reflector, keys, ops)
194 +
}
195 +
196 +
/// Process SIMD-aligned chunks of 128 bytes
197 +
#[inline]
198 +
#[cfg_attr(
199 +
    any(target_arch = "x86", target_arch = "x86_64"),
200 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
201 +
)]
202 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
203 +
unsafe fn process_simd_chunks<T: ArchOps, W: EnhancedCrcWidth>(
204 +
    state: &mut CrcState<T::Vector>,
205 +
    first: &[T::Vector; 8],
206 +
    rest: &[[T::Vector; 8]],
207 +
    reflector: &Reflector<T::Vector>,
208 +
    keys: &[u64; 23],
209 +
    ops: &T,
210 +
) where
211 +
    T::Vector: Copy,
212 +
{
213 +
    // Create a copy of the first 128 bytes
214 +
    let mut x = *first;
215 +
216 +
    // Apply initial reflection if needed
217 +
    for item in &mut x {
218 +
        *item = reflect_bytes(reflector, *item, ops);
219 +
    }
220 +
221 +
    // XOR initial CRC with the first 16 bytes
222 +
    x[0] = ops.xor_vectors(x[0], state.value);
223 +
224 +
    // Load the coefficient pair for folding
225 +
    let coeff = W::create_coefficient(keys[4], keys[3], state.reflected, ops);
226 +
227 +
    // Process remaining 128-byte chunks
228 +
    for chunk in rest {
229 +
        for (xi, yi) in x.iter_mut().zip(chunk.iter()) {
230 +
            // Load and reflect the new data if needed
231 +
            let yi = reflect_bytes(reflector, *yi, ops);
232 +
233 +
            // Create a temporary state for folding
234 +
            let mut temp_state = CrcState {
235 +
                value: *xi,
236 +
                reflected: state.reflected,
237 +
            };
238 +
239 +
            // Fold 16 bytes
240 +
            W::fold_16(&mut temp_state, coeff, yi, ops);
241 +
242 +
            // XOR with new data
243 +
            *xi = temp_state.value;
244 +
        }
245 +
    }
246 +
247 +
    // Fold the 8 xmm registers to 1 xmm register with different constants
248 +
    let mut res = x[7];
249 +
250 +
    // Create fold coefficients for different distances
251 +
    let fold_coefficients = [
252 +
        W::create_coefficient(keys[10], keys[9], state.reflected, ops), // 112 bytes
253 +
        W::create_coefficient(keys[12], keys[11], state.reflected, ops), // 96 bytes
254 +
        W::create_coefficient(keys[14], keys[13], state.reflected, ops), // 80 bytes
255 +
        W::create_coefficient(keys[16], keys[15], state.reflected, ops), // 64 bytes
256 +
        W::create_coefficient(keys[18], keys[17], state.reflected, ops), // 48 bytes
257 +
        W::create_coefficient(keys[20], keys[19], state.reflected, ops), // 32 bytes
258 +
        W::create_coefficient(keys[2], keys[1], state.reflected, ops),  // 16 bytes
259 +
    ];
260 +
261 +
    for (i, &coeff) in fold_coefficients.iter().enumerate() {
262 +
        let mut temp_state = CrcState {
263 +
            value: x[i],
264 +
            reflected: state.reflected,
265 +
        };
266 +
        W::fold_16(&mut temp_state, coeff, res, ops);
267 +
268 +
        res = temp_state.value
269 +
    }
270 +
271 +
    // Perform final reduction and update state
272 +
    let final_value = W::perform_final_reduction(res, state.reflected, keys, ops);
273 +
    *state = W::create_state(final_value, state.reflected, ops);
274 +
}
275 +
276 +
/// Process exactly 16 bytes
277 +
#[inline]
278 +
#[cfg_attr(
279 +
    any(target_arch = "x86", target_arch = "x86_64"),
280 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
281 +
)]
282 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
283 +
unsafe fn process_exactly_16<T: ArchOps, W: EnhancedCrcWidth>(
284 +
    data: &[u8],
285 +
    state: &mut CrcState<T::Vector>,
286 +
    reflector: &Reflector<T::Vector>,
287 +
    keys: &[u64; 23],
288 +
    ops: &T,
289 +
) -> W::Value
290 +
where
291 +
    T::Vector: Copy,
292 +
{
293 +
    // Process 16 bytes and fold to width-specific size
294 +
    W::perform_final_reduction(
295 +
        process_16_byte_block(data.as_ptr(), state.value, reflector, ops),
296 +
        state.reflected,
297 +
        keys,
298 +
        ops,
299 +
    )
300 +
}
301 +
302 +
/// Process a 16-byte block of data
303 +
#[inline]
304 +
#[cfg_attr(
305 +
    any(target_arch = "x86", target_arch = "x86_64"),
306 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
307 +
)]
308 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
309 +
unsafe fn process_16_byte_block<T: ArchOps>(
310 +
    data_ptr: *const u8,
311 +
    initial_crc: T::Vector,
312 +
    reflector: &Reflector<T::Vector>,
313 +
    ops: &T,
314 +
) -> T::Vector
315 +
where
316 +
    T::Vector: Copy,
317 +
{
318 +
    // Load data, apply reflection, and XOR with initial CRC
319 +
    ops.xor_vectors(
320 +
        reflect_bytes(reflector, ops.load_bytes(data_ptr), ops),
321 +
        initial_crc,
322 +
    )
323 +
}
324 +
325 +
/// Reflect bytes according to the reflector strategy
326 +
#[inline]
327 +
#[cfg_attr(
328 +
    any(target_arch = "x86", target_arch = "x86_64"),
329 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
330 +
)]
331 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
332 +
pub(crate) unsafe fn reflect_bytes<T: ArchOps>(
333 +
    reflector: &Reflector<T::Vector>,
334 +
    data: T::Vector,
335 +
    ops: &T,
336 +
) -> T::Vector
337 +
where
338 +
    T::Vector: Copy,
339 +
{
340 +
    match reflector {
341 +
        Reflector::NoReflector => data,
342 +
        Reflector::ForwardReflector { smask } => ops.shuffle_bytes(data, *smask),
343 +
    }
344 +
}
345 +
346 +
/// Fold and XOR generic implementation
347 +
#[inline]
348 +
#[cfg_attr(
349 +
    any(target_arch = "x86", target_arch = "x86_64"),
350 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
351 +
)]
352 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
353 +
unsafe fn fold_and_xor<T: ArchOps, W: EnhancedCrcWidth>(
354 +
    current: T::Vector,
355 +
    coefficient: T::Vector,
356 +
    data_to_xor: T::Vector,
357 +
    reflected: bool,
358 +
    ops: &T,
359 +
) -> T::Vector
360 +
where
361 +
    T::Vector: Copy,
362 +
{
363 +
    // Create a temporary state for folding
364 +
    let mut temp_state = CrcState {
365 +
        value: current,
366 +
        reflected,
367 +
    };
368 +
369 +
    // Fold 16 bytes using width-specific method
370 +
    W::fold_16(&mut temp_state, coefficient, data_to_xor, ops);
371 +
372 +
    temp_state.value
373 +
}
374 +
375 +
/// Process inputs between 17 and 31 bytes
376 +
/// This implementation works for both CRC-32 and CRC-64 using the width-specific traits
377 +
#[inline]
378 +
#[cfg_attr(
379 +
    any(target_arch = "x86", target_arch = "x86_64"),
380 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
381 +
)]
382 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
383 +
unsafe fn process_17_to_31<T: ArchOps, W: EnhancedCrcWidth>(
384 +
    data: &[u8],
385 +
    state: &mut CrcState<T::Vector>,
386 +
    reflector: &Reflector<T::Vector>,
387 +
    keys: &[u64; 23],
388 +
    ops: &T,
389 +
) -> W::Value
390 +
where
391 +
    T::Vector: Copy,
392 +
{
393 +
    // Process the first 16 bytes
394 +
    let xmm7 = process_16_byte_block(data.as_ptr(), state.value, reflector, ops);
395 +
396 +
    // Process the remaining bytes (1-15)
397 +
    let remaining_len = data.len() - CRC_CHUNK_SIZE;
398 +
399 +
    // Use the shared function to handle the last two chunks
400 +
    let final_xmm7 = get_last_two_xmms::<T, W>(
401 +
        DataRegion {
402 +
            full_data: data,
403 +
            offset: CRC_CHUNK_SIZE,
404 +
            remaining: remaining_len,
405 +
        },
406 +
        xmm7,
407 +
        keys,
408 +
        reflector,
409 +
        state.reflected,
410 +
        ops,
411 +
    );
412 +
413 +
    // Perform final reduction
414 +
    W::perform_final_reduction(final_xmm7, state.reflected, keys, ops)
415 +
}
416 +
417 +
// Process inputs between 32 and 255 bytes
418 +
/// This implementation works for both CRC-32 and CRC-64 using the width-specific traits
419 +
#[inline]
420 +
#[cfg_attr(
421 +
    any(target_arch = "x86", target_arch = "x86_64"),
422 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
423 +
)]
424 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
425 +
unsafe fn process_32_to_255<T: ArchOps, W: EnhancedCrcWidth>(
426 +
    data: &[u8],
427 +
    state: &mut CrcState<T::Vector>,
428 +
    reflector: &Reflector<T::Vector>,
429 +
    keys: &[u64; 23],
430 +
    ops: &T,
431 +
) -> W::Value
432 +
where
433 +
    T::Vector: Copy,
434 +
{
435 +
    let mut current_pos = CRC_CHUNK_SIZE;
436 +
    let mut remaining_len = data.len() - CRC_CHUNK_SIZE;
437 +
438 +
    // Process first 16 bytes
439 +
    let mut xmm7 = process_16_byte_block(data.as_ptr(), state.value, reflector, ops);
440 +
441 +
    // Create coefficient for folding operations
442 +
    let rk01rk02 = W::create_coefficient(keys[2], keys[1], state.reflected, ops);
443 +
444 +
    // Main processing loop - 16 bytes at a time
445 +
    while remaining_len >= CRC_CHUNK_SIZE {
446 +
        // Load next 16 bytes of data
447 +
        let next_data = reflect_bytes(
448 +
            reflector,
449 +
            ops.load_bytes(data.as_ptr().add(current_pos)),
450 +
            ops,
451 +
        );
452 +
453 +
        // Fold and XOR
454 +
        xmm7 = fold_and_xor::<T, W>(xmm7, rk01rk02, next_data, state.reflected, ops);
455 +
456 +
        // Update position tracking
457 +
        current_pos += CRC_CHUNK_SIZE;
458 +
        remaining_len -= CRC_CHUNK_SIZE;
459 +
    }
460 +
461 +
    // Handle remaining bytes (if any)
462 +
    if remaining_len > 0 {
463 +
        // Use the shared get_last_two_xmms function to handle the remaining bytes
464 +
        xmm7 = get_last_two_xmms::<T, W>(
465 +
            DataRegion {
466 +
                full_data: data,
467 +
                offset: current_pos,
468 +
                remaining: remaining_len,
469 +
            },
470 +
            xmm7,
471 +
            keys,
472 +
            reflector,
473 +
            state.reflected,
474 +
            ops,
475 +
        );
476 +
    }
477 +
478 +
    // Perform final reduction
479 +
    W::perform_final_reduction(xmm7, state.reflected, keys, ops)
480 +
}
481 +
482 +
/// Data region descriptor for overlapping SIMD reads in CRC processing
483 +
///
484 +
/// # Safety Invariants
485 +
///
486 +
/// When this struct is used with overlapping SIMD reads:
487 +
/// - `offset` must be >= `CRC_CHUNK_SIZE` (16 bytes)
488 +
/// - `remaining` must be in range 1..=15
489 +
/// - `full_data` must contain at least `offset + remaining` bytes
490 +
struct DataRegion<'a> {
491 +
    full_data: &'a [u8],
492 +
    offset: usize,
493 +
    remaining: usize,
494 +
}
495 +
496 +
/// Handle the last two chunks of data using an overlapping SIMD read
497 +
///
498 +
/// # Safety
499 +
///
500 +
/// - `region.full_data` must contain at least `region.offset + region.remaining` bytes
501 +
/// - `region.offset` must be >= `CRC_CHUNK_SIZE` (16 bytes)
502 +
/// - `region.remaining` must be in range 1..=15
503 +
/// - Caller must ensure appropriate SIMD features are available
504 +
#[inline]
505 +
#[cfg_attr(
506 +
    any(target_arch = "x86", target_arch = "x86_64"),
507 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
508 +
)]
509 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
510 +
unsafe fn get_last_two_xmms<T: ArchOps, W: EnhancedCrcWidth>(
511 +
    region: DataRegion,
512 +
    current_state: T::Vector,
513 +
    keys: &[u64; 23],
514 +
    reflector: &Reflector<T::Vector>,
515 +
    reflected: bool,
516 +
    ops: &T,
517 +
) -> T::Vector
518 +
where
519 +
    T::Vector: Copy,
520 +
{
521 +
    debug_assert!(region.offset >= CRC_CHUNK_SIZE);
522 +
    debug_assert!(region.remaining > 0 && region.remaining < CRC_CHUNK_SIZE);
523 +
    debug_assert!(region.offset + region.remaining <= region.full_data.len());
524 +
525 +
    let coefficient = W::create_coefficient(keys[2], keys[1], reflected, ops);
526 +
    let const_mask = ops.set_all_bytes(0x80);
527 +
    let (table_ptr, offset) = W::get_last_bytes_table_ptr(reflected, region.remaining);
528 +
529 +
    if reflected {
530 +
        // Overlapping read: loads tail of previous chunk + remaining data
531 +
        let read_offset = region.offset - CRC_CHUNK_SIZE + region.remaining;
532 +
        let xmm1 = ops.load_bytes(region.full_data.as_ptr().add(read_offset));
533 +
        let mut xmm0 = ops.load_bytes(table_ptr.add(offset));
534 +
        let shuffled = ops.shuffle_bytes(current_state, xmm0);
535 +
        xmm0 = ops.xor_vectors(xmm0, const_mask);
536 +
537 +
        let shuffled_masked = ops.shuffle_bytes(current_state, xmm0);
538 +
539 +
        // CRC-16 and CRC-32 use the same logic (both operate in 32-bit space)
540 +
        let (xmm2_blended, mut temp_state) = if W::WIDTH <= 32 {
541 +
            let compare_mask = ops.create_compare_mask(xmm0);
542 +
543 +
            let xmm2_blended = ops.blend_vectors(xmm1, shuffled, compare_mask);
544 +
545 +
            let temp_state = CrcState {
546 +
                value: shuffled_masked,
547 +
                reflected,
548 +
            };
549 +
550 +
            (xmm2_blended, temp_state)
551 +
        } else {
552 +
            let xmm2_blended = ops.blend_vectors(shuffled_masked, xmm1, xmm0);
553 +
554 +
            let temp_state = CrcState {
555 +
                value: shuffled,
556 +
                reflected,
557 +
            };
558 +
559 +
            (xmm2_blended, temp_state)
560 +
        };
561 +
562 +
        W::fold_16(&mut temp_state, coefficient, xmm2_blended, ops);
563 +
564 +
        temp_state.value
565 +
    } else {
566 +
        let read_offset = region.offset - CRC_CHUNK_SIZE + region.remaining;
567 +
        let mut xmm1 = ops.load_bytes(region.full_data.as_ptr().add(read_offset));
568 +
569 +
        if let Reflector::ForwardReflector { smask } = reflector {
570 +
            xmm1 = ops.shuffle_bytes(xmm1, *smask);
571 +
        }
572 +
573 +
        let xmm0 = ops.load_bytes(table_ptr.add(offset));
574 +
        let shuffled = ops.shuffle_bytes(current_state, xmm0);
575 +
        let xmm0_masked = ops.xor_vectors(xmm0, const_mask);
576 +
        let shuffled_masked = ops.shuffle_bytes(current_state, xmm0_masked);
577 +
        let xmm2_blended = ops.blend_vectors(xmm1, shuffled, xmm0_masked);
578 +
579 +
        // Create a temporary state for folding
580 +
        let mut temp_state = CrcState {
581 +
            value: shuffled_masked,
582 +
            reflected,
583 +
        };
584 +
585 +
        W::fold_16(&mut temp_state, coefficient, xmm2_blended, ops);
586 +
587 +
        temp_state.value
588 +
    }
589 +
}
added vendor/crc-fast/src/arch/aarch64/aes.rs +264 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides AArch64-specific implementations of the ArchOps trait for architectures
4 +
//! with AES support.
5 +
6 +
#![cfg(target_arch = "aarch64")]
7 +
8 +
use crate::traits::ArchOps;
9 +
use core::arch::aarch64::*;
10 +
11 +
// Tier-specific ArchOps implementations for AArch64
12 +
13 +
/// Base AArch64 implementation with AES+NEON optimizations
14 +
/// NEON is implicit with AES support on AArch64
15 +
#[derive(Debug, Copy, Clone)]
16 +
pub struct Aarch64AesOps;
17 +
18 +
// Base implementation for AArch64 AES tier
19 +
impl ArchOps for Aarch64AesOps {
20 +
    type Vector = uint8x16_t;
21 +
22 +
    #[inline]
23 +
    #[target_feature(enable = "neon")]
24 +
    unsafe fn create_vector_from_u64_pair(
25 +
        &self,
26 +
        high: u64,
27 +
        low: u64,
28 +
        reflected: bool,
29 +
    ) -> Self::Vector {
30 +
        // Note: AArch64 switches the order for reflected mode
31 +
        if reflected {
32 +
            self.load_key_pair(high, low)
33 +
        } else {
34 +
            self.load_key_pair(low, high)
35 +
        }
36 +
    }
37 +
38 +
    #[inline]
39 +
    #[target_feature(enable = "neon")]
40 +
    unsafe fn create_vector_from_u64_pair_non_reflected(
41 +
        &self,
42 +
        high: u64,
43 +
        low: u64,
44 +
    ) -> Self::Vector {
45 +
        self.load_key_pair(low, high)
46 +
    }
47 +
48 +
    #[inline]
49 +
    #[target_feature(enable = "neon")]
50 +
    unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector {
51 +
        let mut result = vdupq_n_u64(0);
52 +
        if high {
53 +
            result = vsetq_lane_u64(value, result, 1); // Set high 64 bits
54 +
        } else {
55 +
            result = vsetq_lane_u64(value, result, 0); // Set low 64 bits
56 +
        }
57 +
58 +
        vreinterpretq_u8_u64(result)
59 +
    }
60 +
61 +
    #[inline]
62 +
    #[target_feature(enable = "neon")]
63 +
    unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] {
64 +
        let x = vreinterpretq_u64_u8(vector);
65 +
        [vgetq_lane_u64(x, 0), vgetq_lane_u64(x, 1)]
66 +
    }
67 +
68 +
    #[inline]
69 +
    #[target_feature(enable = "neon")]
70 +
    unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] {
71 +
        let x = vreinterpretq_p64_u8(vector);
72 +
        [vgetq_lane_p64(x, 0), vgetq_lane_p64(x, 1)]
73 +
    }
74 +
75 +
    #[inline]
76 +
    #[target_feature(enable = "neon")]
77 +
    unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
78 +
        veorq_u8(a, b)
79 +
    }
80 +
81 +
    #[inline]
82 +
    #[target_feature(enable = "neon")]
83 +
    unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector {
84 +
        vld1q_u8(ptr)
85 +
    }
86 +
87 +
    #[inline]
88 +
    #[target_feature(enable = "neon")]
89 +
    unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector {
90 +
        vreinterpretq_u8_u64(vld1q_u64(ptr as *const u64))
91 +
    }
92 +
93 +
    #[inline]
94 +
    #[target_feature(enable = "neon")]
95 +
    unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector {
96 +
        vqtbl1q_u8(data, mask)
97 +
    }
98 +
99 +
    #[inline]
100 +
    #[target_feature(enable = "neon")]
101 +
    unsafe fn blend_vectors(
102 +
        &self,
103 +
        a: Self::Vector,
104 +
        b: Self::Vector,
105 +
        mask: Self::Vector,
106 +
    ) -> Self::Vector {
107 +
        let msb_mask = vcltq_s8(vreinterpretq_s8_u8(mask), vdupq_n_s8(0));
108 +
        vbslq_u8(msb_mask, b, a)
109 +
    }
110 +
111 +
    #[inline]
112 +
    #[target_feature(enable = "neon")]
113 +
    unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector {
114 +
        vextq_u8(vdupq_n_u8(0), vector, 8)
115 +
    }
116 +
117 +
    #[inline]
118 +
    #[target_feature(enable = "neon")]
119 +
    unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector {
120 +
        vdupq_n_u8(value)
121 +
    }
122 +
123 +
    #[inline]
124 +
    #[target_feature(enable = "neon")]
125 +
    unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector {
126 +
        vcltq_s8(vreinterpretq_s8_u8(vector), vdupq_n_s8(0))
127 +
    }
128 +
129 +
    #[inline]
130 +
    #[target_feature(enable = "neon")]
131 +
    unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
132 +
        vandq_u8(a, b)
133 +
    }
134 +
135 +
    #[inline]
136 +
    #[target_feature(enable = "neon")]
137 +
    unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector {
138 +
        vextq_u8(vector, vdupq_n_u8(0), 4)
139 +
    }
140 +
141 +
    #[inline]
142 +
    #[target_feature(enable = "neon")]
143 +
    unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector {
144 +
        vextq_u8(vdupq_n_u8(0), vector, 12) // 16-4=12
145 +
    }
146 +
147 +
    #[inline]
148 +
    #[target_feature(enable = "neon")]
149 +
    unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector {
150 +
        let mut result = vdupq_n_u64(0);
151 +
        if high {
152 +
            // For high=true, place in the high 32 bits of the high 64 bits
153 +
            result = vreinterpretq_u64_u32(vsetq_lane_u32(value, vreinterpretq_u32_u64(result), 3));
154 +
        } else {
155 +
            // For high=false, place in the low 32 bits of the low 64 bits
156 +
            result = vreinterpretq_u64_u32(vsetq_lane_u32(value, vreinterpretq_u32_u64(result), 0));
157 +
        }
158 +
        vreinterpretq_u8_u64(result)
159 +
    }
160 +
161 +
    #[inline]
162 +
    #[target_feature(enable = "neon")]
163 +
    unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector {
164 +
        vextq_u8(vdupq_n_u8(0), vector, 12) // 16-4=12
165 +
    }
166 +
167 +
    #[inline]
168 +
    #[target_feature(enable = "neon")]
169 +
    unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector {
170 +
        vextq_u8(vector, vdupq_n_u8(0), 4)
171 +
    }
172 +
173 +
    #[inline]
174 +
    #[target_feature(enable = "neon")]
175 +
    unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector {
176 +
        vextq_u8(vector, vdupq_n_u8(0), 8)
177 +
    }
178 +
179 +
    #[inline]
180 +
    #[target_feature(enable = "neon")]
181 +
    unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector {
182 +
        vextq_u8(vector, vdupq_n_u8(0), 5)
183 +
    }
184 +
185 +
    #[inline]
186 +
    #[target_feature(enable = "neon")]
187 +
    unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector {
188 +
        vextq_u8(vector, vdupq_n_u8(0), 6)
189 +
    }
190 +
191 +
    #[inline]
192 +
    #[target_feature(enable = "neon")]
193 +
    unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector {
194 +
        vextq_u8(vector, vdupq_n_u8(0), 7)
195 +
    }
196 +
197 +
    #[inline]
198 +
    #[target_feature(enable = "neon")]
199 +
    unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector {
200 +
        vextq_u8(vector, vdupq_n_u8(0), 12)
201 +
    }
202 +
203 +
    #[inline]
204 +
    #[target_feature(enable = "neon")]
205 +
    unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector {
206 +
        let low_32 = vgetq_lane_u32(vreinterpretq_u32_u8(vector), 0);
207 +
        let result = vsetq_lane_u32(low_32, vdupq_n_u32(0), 3);
208 +
        vreinterpretq_u8_u32(result)
209 +
    }
210 +
211 +
    #[inline]
212 +
    #[target_feature(enable = "aes")]
213 +
    unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
214 +
        vreinterpretq_u8_p128(vmull_p64(
215 +
            vgetq_lane_p64(vreinterpretq_p64_u8(a), 0),
216 +
            vgetq_lane_p64(vreinterpretq_p64_u8(b), 0),
217 +
        ))
218 +
    }
219 +
220 +
    #[inline]
221 +
    #[target_feature(enable = "aes")]
222 +
    unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
223 +
        let a_low = vgetq_lane_p64(vreinterpretq_p64_u8(a), 1);
224 +
        let b_high = vgetq_lane_p64(vreinterpretq_p64_u8(b), 0);
225 +
        vreinterpretq_u8_p128(vmull_p64(a_low, b_high))
226 +
    }
227 +
228 +
    #[inline]
229 +
    #[target_feature(enable = "aes")]
230 +
    unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
231 +
        vreinterpretq_u8_p128(vmull_p64(
232 +
            vgetq_lane_p64(vreinterpretq_p64_u8(a), 0),
233 +
            vgetq_lane_p64(vreinterpretq_p64_u8(b), 1),
234 +
        ))
235 +
    }
236 +
237 +
    #[inline]
238 +
    #[target_feature(enable = "aes")]
239 +
    unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
240 +
        vreinterpretq_u8_p128(vmull_p64(
241 +
            vgetq_lane_p64(vreinterpretq_p64_u8(a), 1),
242 +
            vgetq_lane_p64(vreinterpretq_p64_u8(b), 1),
243 +
        ))
244 +
    }
245 +
246 +
    #[inline]
247 +
    #[target_feature(enable = "neon")]
248 +
    unsafe fn xor3_vectors(
249 +
        &self,
250 +
        a: Self::Vector,
251 +
        b: Self::Vector,
252 +
        c: Self::Vector,
253 +
    ) -> Self::Vector {
254 +
        veorq_u8(veorq_u8(a, b), c)
255 +
    }
256 +
}
257 +
258 +
impl Aarch64AesOps {
259 +
    #[inline]
260 +
    #[target_feature(enable = "neon")]
261 +
    unsafe fn load_key_pair(&self, idx1: u64, idx2: u64) -> uint8x16_t {
262 +
        vreinterpretq_u8_u64(vld1q_u64([idx1, idx2].as_ptr()))
263 +
    }
264 +
}
added vendor/crc-fast/src/arch/aarch64/aes_sha3.rs +207 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides AArch64-specific implementations of the ArchOps trait for architectures
4 +
//! with AES+SHA3 support.
5 +
6 +
#![cfg(target_arch = "aarch64")]
7 +
8 +
use crate::arch::aarch64::aes::Aarch64AesOps;
9 +
use crate::traits::ArchOps;
10 +
use core::arch::aarch64::*;
11 +
12 +
/// AArch64 AES+SHA3 tier - delegates to AES tier and overrides XOR3 operations
13 +
/// Provides EOR3 instruction for optimal XOR3 performance
14 +
#[derive(Debug, Copy, Clone)]
15 +
pub struct Aarch64AesSha3Ops(Aarch64AesOps);
16 +
17 +
impl Default for Aarch64AesSha3Ops {
18 +
    fn default() -> Self {
19 +
        Self::new()
20 +
    }
21 +
}
22 +
23 +
impl Aarch64AesSha3Ops {
24 +
    #[inline(always)]
25 +
    pub fn new() -> Self {
26 +
        Self(Aarch64AesOps)
27 +
    }
28 +
}
29 +
30 +
// SHA3 tier implementation - delegates to AES tier and overrides XOR3
31 +
impl ArchOps for Aarch64AesSha3Ops {
32 +
    type Vector = uint8x16_t;
33 +
34 +
    // Delegate methods to the base AES implementation
35 +
    #[inline(always)]
36 +
    unsafe fn create_vector_from_u64_pair(
37 +
        &self,
38 +
        high: u64,
39 +
        low: u64,
40 +
        reflected: bool,
41 +
    ) -> Self::Vector {
42 +
        self.0.create_vector_from_u64_pair(high, low, reflected)
43 +
    }
44 +
45 +
    #[inline(always)]
46 +
    unsafe fn create_vector_from_u64_pair_non_reflected(
47 +
        &self,
48 +
        high: u64,
49 +
        low: u64,
50 +
    ) -> Self::Vector {
51 +
        self.0.create_vector_from_u64_pair_non_reflected(high, low)
52 +
    }
53 +
54 +
    #[inline(always)]
55 +
    unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector {
56 +
        self.0.create_vector_from_u64(value, high)
57 +
    }
58 +
59 +
    #[inline(always)]
60 +
    unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] {
61 +
        self.0.extract_u64s(vector)
62 +
    }
63 +
64 +
    #[inline(always)]
65 +
    unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] {
66 +
        self.0.extract_poly64s(vector)
67 +
    }
68 +
69 +
    #[inline(always)]
70 +
    unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
71 +
        self.0.xor_vectors(a, b)
72 +
    }
73 +
74 +
    #[inline(always)]
75 +
    unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector {
76 +
        self.0.load_bytes(ptr)
77 +
    }
78 +
79 +
    #[inline(always)]
80 +
    unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector {
81 +
        self.0.load_aligned(ptr)
82 +
    }
83 +
84 +
    #[inline(always)]
85 +
    unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector {
86 +
        self.0.shuffle_bytes(data, mask)
87 +
    }
88 +
89 +
    #[inline(always)]
90 +
    unsafe fn blend_vectors(
91 +
        &self,
92 +
        a: Self::Vector,
93 +
        b: Self::Vector,
94 +
        mask: Self::Vector,
95 +
    ) -> Self::Vector {
96 +
        self.0.blend_vectors(a, b, mask)
97 +
    }
98 +
99 +
    #[inline(always)]
100 +
    unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector {
101 +
        self.0.shift_left_8(vector)
102 +
    }
103 +
104 +
    #[inline(always)]
105 +
    unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector {
106 +
        self.0.set_all_bytes(value)
107 +
    }
108 +
109 +
    #[inline(always)]
110 +
    unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector {
111 +
        self.0.create_compare_mask(vector)
112 +
    }
113 +
114 +
    #[inline(always)]
115 +
    unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
116 +
        self.0.and_vectors(a, b)
117 +
    }
118 +
119 +
    #[inline(always)]
120 +
    unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector {
121 +
        self.0.shift_right_32(vector)
122 +
    }
123 +
124 +
    #[inline(always)]
125 +
    unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector {
126 +
        self.0.shift_left_32(vector)
127 +
    }
128 +
129 +
    #[inline(always)]
130 +
    unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector {
131 +
        self.0.create_vector_from_u32(value, high)
132 +
    }
133 +
134 +
    #[inline(always)]
135 +
    unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector {
136 +
        self.0.shift_left_4(vector)
137 +
    }
138 +
139 +
    #[inline(always)]
140 +
    unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector {
141 +
        self.0.shift_right_4(vector)
142 +
    }
143 +
144 +
    #[inline(always)]
145 +
    unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector {
146 +
        self.0.shift_right_8(vector)
147 +
    }
148 +
149 +
    #[inline(always)]
150 +
    unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector {
151 +
        self.0.shift_right_5(vector)
152 +
    }
153 +
154 +
    #[inline(always)]
155 +
    unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector {
156 +
        self.0.shift_right_6(vector)
157 +
    }
158 +
159 +
    #[inline(always)]
160 +
    unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector {
161 +
        self.0.shift_right_7(vector)
162 +
    }
163 +
164 +
    #[inline(always)]
165 +
    unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector {
166 +
        self.0.shift_right_12(vector)
167 +
    }
168 +
169 +
    #[inline(always)]
170 +
    unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector {
171 +
        self.0.shift_left_12(vector)
172 +
    }
173 +
174 +
    #[inline(always)]
175 +
    unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
176 +
        self.0.carryless_mul_00(a, b)
177 +
    }
178 +
179 +
    #[inline(always)]
180 +
    unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
181 +
        self.0.carryless_mul_01(a, b)
182 +
    }
183 +
184 +
    #[inline(always)]
185 +
    unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
186 +
        self.0.carryless_mul_10(a, b)
187 +
    }
188 +
189 +
    #[inline(always)]
190 +
    unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
191 +
        self.0.carryless_mul_11(a, b)
192 +
    }
193 +
194 +
    // Override XOR3 to use SHA3 EOR3 instruction when available
195 +
    #[inline]
196 +
    #[target_feature(enable = "sha3")]
197 +
    unsafe fn xor3_vectors(
198 +
        &self,
199 +
        a: Self::Vector,
200 +
        b: Self::Vector,
201 +
        c: Self::Vector,
202 +
    ) -> Self::Vector {
203 +
        // SHA3 tier always uses EOR3 instruction
204 +
        // Feature detection is handled at the dispatch level
205 +
        veor3q_u8(a, b, c)
206 +
    }
207 +
}
added vendor/crc-fast/src/arch/aarch64/mod.rs +8 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides AArch64-specific implementations of the ArchOps trait.
4 +
5 +
#![cfg(target_arch = "aarch64")]
6 +
7 +
pub mod aes;
8 +
pub mod aes_sha3;
added vendor/crc-fast/src/arch/mod.rs +456 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides the main entry point for the SIMD CRC calculation.
4 +
//!
5 +
//! It dispatches to the appropriate architecture-specific implementation
6 +
7 +
#[cfg(all(target_arch = "aarch64", feature = "std"))]
8 +
use std::arch::is_aarch64_feature_detected;
9 +
10 +
use crate::CrcParams;
11 +
12 +
#[cfg(target_arch = "aarch64")]
13 +
use crate::arch::aarch64::aes::Aarch64AesOps;
14 +
15 +
#[cfg(target_arch = "aarch64")]
16 +
use crate::arch::aarch64::aes_sha3::Aarch64AesSha3Ops;
17 +
18 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
19 +
use crate::{
20 +
    algorithm,
21 +
    structs::{Width16, Width32, Width64},
22 +
};
23 +
24 +
pub mod aarch64;
25 +
pub mod software;
26 +
pub mod x86;
27 +
pub mod x86_64;
28 +
29 +
/// Main entry point that dispatches to the appropriate architecture
30 +
///
31 +
/// # Safety
32 +
/// May use native CPU features
33 +
#[inline(always)]
34 +
#[cfg(target_arch = "aarch64")]
35 +
pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 {
36 +
    use crate::feature_detection::{get_arch_ops, ArchOpsInstance};
37 +
38 +
    match get_arch_ops() {
39 +
        ArchOpsInstance::Aarch64AesSha3(ops) => update_aarch64_aes_sha3(state, bytes, params, *ops),
40 +
        ArchOpsInstance::Aarch64Aes(ops) => update_aarch64_aes(state, bytes, params, *ops),
41 +
        ArchOpsInstance::SoftwareFallback => {
42 +
            #[cfg(feature = "std")]
43 +
            let has_features =
44 +
                is_aarch64_feature_detected!("aes") && is_aarch64_feature_detected!("neon");
45 +
            #[cfg(not(feature = "std"))]
46 +
            let has_features = cfg!(target_feature = "aes") && cfg!(target_feature = "neon");
47 +
48 +
            if !has_features {
49 +
                #[cfg(any(not(target_feature = "aes"), not(target_feature = "neon")))]
50 +
                {
51 +
                    // Use software implementation when no SIMD support is available
52 +
                    return crate::arch::software::update(state, bytes, params);
53 +
                }
54 +
            }
55 +
56 +
            // This should likely never happen, but just in case
57 +
            panic!("aarch64 features missing (NEON and/or AES)");
58 +
        }
59 +
    }
60 +
}
61 +
62 +
#[inline]
63 +
#[cfg(target_arch = "aarch64")]
64 +
#[target_feature(enable = "aes")]
65 +
unsafe fn update_aarch64_aes(
66 +
    state: u64,
67 +
    bytes: &[u8],
68 +
    params: &CrcParams,
69 +
    ops: Aarch64AesOps,
70 +
) -> u64 {
71 +
    match params.width {
72 +
        64 => algorithm::update::<_, Width64>(state, bytes, params, &ops),
73 +
        32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64,
74 +
        16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64,
75 +
        _ => panic!("Unsupported CRC width: {}", params.width),
76 +
    }
77 +
}
78 +
79 +
#[inline]
80 +
#[cfg(target_arch = "aarch64")]
81 +
#[target_feature(enable = "aes,sha3")]
82 +
unsafe fn update_aarch64_aes_sha3(
83 +
    state: u64,
84 +
    bytes: &[u8],
85 +
    params: &CrcParams,
86 +
    ops: Aarch64AesSha3Ops,
87 +
) -> u64 {
88 +
    match params.width {
89 +
        64 => algorithm::update::<_, Width64>(state, bytes, params, &ops),
90 +
        32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64,
91 +
        16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64,
92 +
        _ => panic!("Unsupported CRC width: {}", params.width),
93 +
    }
94 +
}
95 +
96 +
/// Main entry point for x86/x86_64
97 +
///
98 +
/// # Safety
99 +
/// May use native CPU features
100 +
#[inline(always)]
101 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
102 +
pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 {
103 +
    use crate::feature_detection::{get_arch_ops, ArchOpsInstance};
104 +
105 +
    match get_arch_ops() {
106 +
        #[cfg(target_arch = "x86_64")]
107 +
        ArchOpsInstance::X86_64Avx512Vpclmulqdq(ops) => {
108 +
            update_x86_64_avx512_vpclmulqdq(state, bytes, params, *ops)
109 +
        }
110 +
        #[cfg(target_arch = "x86_64")]
111 +
        ArchOpsInstance::X86_64Avx512Pclmulqdq(ops) => {
112 +
            update_x86_64_avx512_pclmulqdq(state, bytes, params, *ops)
113 +
        }
114 +
        ArchOpsInstance::X86SsePclmulqdq(ops) => {
115 +
            update_x86_sse_pclmulqdq(state, bytes, params, *ops)
116 +
        }
117 +
        ArchOpsInstance::SoftwareFallback => crate::arch::software::update(state, bytes, params),
118 +
    }
119 +
}
120 +
121 +
#[inline]
122 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
123 +
#[target_feature(enable = "sse4.1,pclmulqdq")]
124 +
unsafe fn update_x86_sse_pclmulqdq(
125 +
    state: u64,
126 +
    bytes: &[u8],
127 +
    params: &CrcParams,
128 +
    ops: crate::arch::x86::sse::X86SsePclmulqdqOps,
129 +
) -> u64 {
130 +
    match params.width {
131 +
        64 => algorithm::update::<_, Width64>(state, bytes, params, &ops),
132 +
        32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64,
133 +
        16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64,
134 +
        _ => panic!("Unsupported CRC width: {}", params.width),
135 +
    }
136 +
}
137 +
138 +
#[inline]
139 +
#[cfg(target_arch = "x86_64")]
140 +
#[target_feature(enable = "avx512vl,pclmulqdq")]
141 +
unsafe fn update_x86_64_avx512_pclmulqdq(
142 +
    state: u64,
143 +
    bytes: &[u8],
144 +
    params: &CrcParams,
145 +
    ops: crate::arch::x86_64::avx512::X86_64Avx512PclmulqdqOps,
146 +
) -> u64 {
147 +
    match params.width {
148 +
        64 => algorithm::update::<_, Width64>(state, bytes, params, &ops),
149 +
        32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64,
150 +
        16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64,
151 +
        _ => panic!("Unsupported CRC width: {}", params.width),
152 +
    }
153 +
}
154 +
155 +
#[inline]
156 +
#[cfg(target_arch = "x86_64")]
157 +
#[target_feature(enable = "avx512vl,vpclmulqdq")]
158 +
unsafe fn update_x86_64_avx512_vpclmulqdq(
159 +
    state: u64,
160 +
    bytes: &[u8],
161 +
    params: &CrcParams,
162 +
    ops: crate::arch::x86_64::avx512_vpclmulqdq::X86_64Avx512VpclmulqdqOps,
163 +
) -> u64 {
164 +
    match params.width {
165 +
        64 => algorithm::update::<_, Width64>(state, bytes, params, &ops),
166 +
        32 => algorithm::update::<_, Width32>(state as u32, bytes, params, &ops) as u64,
167 +
        16 => algorithm::update::<_, Width16>(state as u16, bytes, params, &ops) as u64,
168 +
        _ => panic!("Unsupported CRC width: {}", params.width),
169 +
    }
170 +
}
171 +
172 +
#[inline(always)]
173 +
#[cfg(all(
174 +
    not(target_arch = "x86"),
175 +
    not(target_arch = "x86_64"),
176 +
    not(target_arch = "aarch64")
177 +
))]
178 +
pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 {
179 +
    crate::arch::software::update(state, bytes, params)
180 +
}
181 +
182 +
#[cfg(test)]
183 +
mod tests {
184 +
    use super::*;
185 +
    use crate::crc32::consts::CRC32_BZIP2;
186 +
    use crate::crc64::consts::CRC64_NVME;
187 +
    use crate::test::consts::{TEST_256_BYTES_STRING, TEST_ALL_CONFIGS, TEST_CHECK_STRING};
188 +
    use crate::test::create_aligned_data;
189 +
    use crate::test::enums::AnyCrcTestConfig;
190 +
    use rand::{rng, Rng};
191 +
192 +
    #[test]
193 +
    fn test_check_value() {
194 +
        for config in TEST_ALL_CONFIGS {
195 +
            // direct update() call, which needs XOROUT applied
196 +
            let actual = unsafe {
197 +
                update(
198 +
                    config.get_init_algorithm(),
199 +
                    TEST_CHECK_STRING,
200 +
                    config.get_params(),
201 +
                ) ^ config.get_xorout()
202 +
            };
203 +
204 +
            assert_eq!(
205 +
                actual,
206 +
                config.get_check(),
207 +
                "Mismatch CRC, {}, expected {:#x}, got {:#x}",
208 +
                config.get_name(),
209 +
                config.get_check(),
210 +
                actual
211 +
            );
212 +
        }
213 +
    }
214 +
215 +
    #[test]
216 +
    fn test_256_string() {
217 +
        for config in TEST_ALL_CONFIGS {
218 +
            let actual = unsafe {
219 +
                update(
220 +
                    config.get_init_algorithm(),
221 +
                    &create_aligned_data(TEST_256_BYTES_STRING),
222 +
                    config.get_params(),
223 +
                ) ^ config.get_xorout()
224 +
            };
225 +
226 +
            assert_eq!(
227 +
                actual,
228 +
                config.checksum_with_reference(TEST_256_BYTES_STRING),
229 +
                "Mismatch CRC, {}, expected {:#x}, got {:#x}",
230 +
                config.get_name(),
231 +
                config.get_check(),
232 +
                actual
233 +
            );
234 +
        }
235 +
    }
236 +
237 +
    #[test]
238 +
    fn test_512_string() {
239 +
        let test_string = b"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234561234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456";
240 +
241 +
        for config in TEST_ALL_CONFIGS {
242 +
            let actual = unsafe {
243 +
                update(
244 +
                    config.get_init_algorithm(),
245 +
                    &create_aligned_data(test_string),
246 +
                    config.get_params(),
247 +
                ) ^ config.get_xorout()
248 +
            };
249 +
250 +
            assert_eq!(
251 +
                actual,
252 +
                config.checksum_with_reference(test_string),
253 +
                "Mismatch CRC, {}, expected {:#x}, got {:#x}",
254 +
                config.get_name(),
255 +
                config.get_check(),
256 +
                actual
257 +
            );
258 +
        }
259 +
    }
260 +
261 +
    #[test]
262 +
    fn test_1024_string() {
263 +
        let test_string = b"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345612345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234561234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456";
264 +
265 +
        for config in TEST_ALL_CONFIGS {
266 +
            let actual = unsafe {
267 +
                update(
268 +
                    config.get_init_algorithm(),
269 +
                    &create_aligned_data(test_string),
270 +
                    config.get_params(),
271 +
                ) ^ config.get_xorout()
272 +
            };
273 +
274 +
            assert_eq!(
275 +
                actual,
276 +
                config.checksum_with_reference(test_string),
277 +
                "Mismatch CRC, {}, expected {:#x}, got {:#x}",
278 +
                config.get_name(),
279 +
                config.get_check(),
280 +
                actual
281 +
            );
282 +
        }
283 +
    }
284 +
285 +
    // CRC-64/NVME is a special flower in that Rust's crc library doesn't support it yet, so we have
286 +
    // tested values to check against.
287 +
    #[test]
288 +
    fn test_crc64_nvme_standard_vectors() {
289 +
        static CASES: &[(&[u8], u64)] = &[
290 +
            // from our own internal tests, since the Check value in the NVM Express® NVM Command
291 +
            // Set Specification (Revision 1.0d, December 2023) is incorrect
292 +
            // (Section 5.2.1.3.4, Figure 120, page 83).
293 +
            (b"123456789", 0xae8b14860a799888),
294 +
295 +
            // from the NVM Express® NVM Command Set Specification (Revision 1.0d, December 2023),
296 +
            // Section 5.2.1.3.5, Figure 122, page 84.
297 +
            // https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-1.0d-2023.12.28-Ratified.pdf
298 +
            // and the Linux kernel
299 +
            // https://github.com/torvalds/linux/blob/f3813f4b287e480b1fcd62ca798d8556644b8278/crypto/testmgr.h#L3685-L3695
300 +
            (&[0; 4096], 0x6482d367eb22b64e),
301 +
            (&[255; 4096], 0xc0ddba7302eca3ac),
302 +
303 +
            // custom values
304 +
            (TEST_256_BYTES_STRING, 0xabdb9e6c30937916),
305 +
            (b"", 0),
306 +
            (b"@", 0x2808afa9582aa47),
307 +
            (b"1\x97", 0xb4af0ae0feb08e0f),
308 +
            (b"M\"\xdf", 0x85d7cd041a2a8a5d),
309 +
            (b"l\xcd\x13\xd7", 0x1860820ea79b0fa3),
310 +
            (&[0; 32], 0xcf3473434d4ecf3b),
311 +
            (&[255; 32], 0xa0a06974c34d63c4),
312 +
            (b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F", 0xb9d9d4a8492cbd7f),
313 +
            (&[0; 1024], 0x691bb2b09be5498a),
314 +
            (b"hello, world!", 0xf8046e40c403f1d0),
315 +
        ];
316 +
317 +
        for (input, expected) in CASES {
318 +
            unsafe {
319 +
                let actual = update(CRC64_NVME.init, input, &CRC64_NVME) ^ CRC64_NVME.xorout;
320 +
321 +
                assert_eq!(
322 +
                    actual, *expected,
323 +
                    "Mismatch CRC, expected {:#x}, got {:#x}, input: {:?}",
324 +
                    expected, actual, input
325 +
                );
326 +
            }
327 +
        }
328 +
    }
329 +
330 +
    /// Test the "crc32" variant used in PHP's hash() function, which is different from the
331 +
    /// crc32() function. It's really just CRC-32/BZIP2 with the output byte-reversed to little
332 +
    /// endian.
333 +
    ///
334 +
    /// https://www.php.net/manual/en/function.hash-file.php#104836
335 +
    #[test]
336 +
    fn test_crc32_php_standard_vectors() {
337 +
        static CASES: &[(&[u8], u64)] = &[
338 +
            (b"123456789", 0x181989fc),
339 +
            (&[0; 4096], 0xe3380088),
340 +
            (&[255; 4096], 0x8f2ae650),
341 +
            (b"hello, world!", 0x5eacce7),
342 +
        ];
343 +
344 +
        for (input, expected) in CASES {
345 +
            let bzip2_crc = unsafe {
346 +
                (update(CRC32_BZIP2.init, input, &CRC32_BZIP2) ^ CRC32_BZIP2.xorout) as u32
347 +
            };
348 +
349 +
            // PHP reverses the byte order of the CRC for some reason
350 +
            let actual = bzip2_crc.swap_bytes();
351 +
352 +
            assert_eq!(
353 +
                actual, *expected as u32,
354 +
                "Mismatch CRC, expected {:#x}, got {:#x}, input: {:?}",
355 +
                expected, actual, input
356 +
            );
357 +
        }
358 +
    }
359 +
360 +
    /// Test CRC-16/IBM-SDLC check value (reflected variant)
361 +
    #[test]
362 +
    fn test_crc16_ibm_sdlc_check_value() {
363 +
        use crate::crc16::consts::CRC16_IBM_SDLC;
364 +
365 +
        let actual = unsafe {
366 +
            update(CRC16_IBM_SDLC.init, TEST_CHECK_STRING, &CRC16_IBM_SDLC) ^ CRC16_IBM_SDLC.xorout
367 +
        };
368 +
369 +
        assert_eq!(
370 +
            actual, 0x906E,
371 +
            "CRC-16/IBM-SDLC check value mismatch: expected 0x906E, got {:#x}",
372 +
            actual
373 +
        );
374 +
    }
375 +
376 +
    /// Test CRC-16/T10-DIF check value (forward/non-reflected variant)
377 +
    #[test]
378 +
    fn test_crc16_t10_dif_check_value() {
379 +
        use crate::crc16::consts::CRC16_T10_DIF;
380 +
381 +
        let actual = unsafe {
382 +
            update(CRC16_T10_DIF.init, TEST_CHECK_STRING, &CRC16_T10_DIF) ^ CRC16_T10_DIF.xorout
383 +
        };
384 +
385 +
        assert_eq!(
386 +
            actual, 0xD0DB,
387 +
            "CRC-16/T10-DIF check value mismatch: expected 0xD0DB, got {:#x}",
388 +
            actual
389 +
        );
390 +
    }
391 +
392 +
    /// Skipping for Miri runs due to time constraints, underlying code already covered by other
393 +
    /// tests.
394 +
    #[test]
395 +
    #[cfg_attr(miri, ignore)]
396 +
    fn test_small_lengths_all() {
397 +
        // Test each CRC variant
398 +
        for config in TEST_ALL_CONFIGS {
399 +
            // Test each length from 0 to 255
400 +
            for len in 0..=255 {
401 +
                test_length(len, config);
402 +
            }
403 +
        }
404 +
    }
405 +
406 +
    /// Skipping for Miri runs due to time constraints, underlying code already covered by other
407 +
    /// tests.
408 +
    #[test]
409 +
    #[cfg_attr(miri, ignore)]
410 +
    fn test_medium_lengths() {
411 +
        // Test each CRC variant
412 +
        for config in TEST_ALL_CONFIGS {
413 +
            // Test each length from 256 to 1024, which should fold and include handling remainders
414 +
            for len in 256..=1024 {
415 +
                test_length(len, config);
416 +
            }
417 +
        }
418 +
    }
419 +
420 +
    /// Skipping for Miri runs due to time constraints, underlying code already covered by other
421 +
    /// tests.
422 +
    #[test]
423 +
    #[cfg_attr(miri, ignore)]
424 +
    fn test_large_lengths() {
425 +
        // Test each CRC variant
426 +
        for config in TEST_ALL_CONFIGS {
427 +
            // Test ~1 MiB just before, at, and just after the folding boundaries
428 +
            for len in 1048575..=1048577 {
429 +
                test_length(len, config);
430 +
            }
431 +
        }
432 +
    }
433 +
434 +
    fn test_length(length: usize, config: &AnyCrcTestConfig) {
435 +
        let mut data = vec![0u8; length];
436 +
        rng().fill(&mut data[..]);
437 +
438 +
        // Calculate expected CRC using the reference implementation
439 +
        let expected = config.checksum_with_reference(&data);
440 +
441 +
        // direct update() call, which needs XOROUT applied
442 +
        let actual = unsafe {
443 +
            update(config.get_init_algorithm(), &data, config.get_params()) ^ config.get_xorout()
444 +
        };
445 +
446 +
        assert_eq!(
447 +
            actual,
448 +
            expected,
449 +
            "\nFailed for {} with length {}\nGot: {:016x}\nExpected: {:016x}",
450 +
            config.get_name(),
451 +
            length,
452 +
            actual,
453 +
            expected
454 +
        );
455 +
    }
456 +
}
added vendor/crc-fast/src/arch/software.rs +1146 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module contains a software fallback for unsupported architectures.
4 +
5 +
use crate::tables;
6 +
use crate::CrcAlgorithm;
7 +
use crate::CrcParams;
8 +
9 +
// ============================================================================
10 +
// Native Table Generation Functions
11 +
// ============================================================================
12 +
13 +
/// Computes a single CRC-16 value for table generation.
14 +
const fn crc16_single(poly: u16, reflect: bool, mut value: u16) -> u16 {
15 +
    if reflect {
16 +
        let mut i = 0;
17 +
        while i < 8 {
18 +
            value = (value >> 1) ^ ((value & 1) * poly);
19 +
            i += 1;
20 +
        }
21 +
    } else {
22 +
        value <<= 8;
23 +
        let mut i = 0;
24 +
        while i < 8 {
25 +
            value = (value << 1) ^ (((value >> 15) & 1) * poly);
26 +
            i += 1;
27 +
        }
28 +
    }
29 +
    value
30 +
}
31 +
32 +
/// Computes a single CRC-32 value for table generation.
33 +
const fn crc32_single(poly: u32, reflect: bool, mut value: u32) -> u32 {
34 +
    if reflect {
35 +
        let mut i = 0;
36 +
        while i < 8 {
37 +
            value = (value >> 1) ^ ((value & 1) * poly);
38 +
            i += 1;
39 +
        }
40 +
    } else {
41 +
        value <<= 24;
42 +
        let mut i = 0;
43 +
        while i < 8 {
44 +
            value = (value << 1) ^ (((value >> 31) & 1) * poly);
45 +
            i += 1;
46 +
        }
47 +
    }
48 +
    value
49 +
}
50 +
51 +
/// Computes a single CRC-64 value for table generation.
52 +
const fn crc64_single(poly: u64, reflect: bool, mut value: u64) -> u64 {
53 +
    if reflect {
54 +
        let mut i = 0;
55 +
        while i < 8 {
56 +
            value = (value >> 1) ^ ((value & 1) * poly);
57 +
            i += 1;
58 +
        }
59 +
    } else {
60 +
        value <<= 56;
61 +
        let mut i = 0;
62 +
        while i < 8 {
63 +
            value = (value << 1) ^ (((value >> 63) & 1) * poly);
64 +
            i += 1;
65 +
        }
66 +
    }
67 +
    value
68 +
}
69 +
70 +
/// Generates a 16-lane lookup table for CRC-16 calculations.
71 +
///
72 +
/// This function creates a table compatible with the `crc` crate's `Table<16>` format,
73 +
/// enabling processing of 16 bytes at a time for improved performance.
74 +
pub const fn generate_table_u16(width: u8, poly: u16, reflect: bool) -> [[u16; 256]; 16] {
75 +
    let poly = if reflect {
76 +
        let poly = poly.reverse_bits();
77 +
        poly >> (16u8 - width)
78 +
    } else {
79 +
        poly << (16u8 - width)
80 +
    };
81 +
82 +
    let mut table = [[0u16; 256]; 16];
83 +
84 +
    // Generate first table (lane 0) directly
85 +
    let mut i = 0;
86 +
    while i < 256 {
87 +
        table[0][i] = crc16_single(poly, reflect, i as u16);
88 +
        i += 1;
89 +
    }
90 +
91 +
    // Generate subsequent lanes based on lane 0
92 +
    let mut i = 0;
93 +
    while i < 256 {
94 +
        let mut e = 1;
95 +
        while e < 16 {
96 +
            let one_lower = table[e - 1][i];
97 +
            if reflect {
98 +
                table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize];
99 +
            } else {
100 +
                table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 8) & 0xFF) as usize];
101 +
            }
102 +
            e += 1;
103 +
        }
104 +
        i += 1;
105 +
    }
106 +
107 +
    table
108 +
}
109 +
110 +
/// Generates a 16-lane lookup table for CRC-32 calculations.
111 +
///
112 +
/// This function creates a table compatible with the `crc` crate's `Table<16>` format,
113 +
/// enabling processing of 16 bytes at a time for improved performance.
114 +
pub const fn generate_table_u32(width: u8, poly: u32, reflect: bool) -> [[u32; 256]; 16] {
115 +
    let poly = if reflect {
116 +
        let poly = poly.reverse_bits();
117 +
        poly >> (32u8 - width)
118 +
    } else {
119 +
        poly << (32u8 - width)
120 +
    };
121 +
122 +
    let mut table = [[0u32; 256]; 16];
123 +
124 +
    // Generate first table (lane 0) directly
125 +
    let mut i = 0;
126 +
    while i < 256 {
127 +
        table[0][i] = crc32_single(poly, reflect, i as u32);
128 +
        i += 1;
129 +
    }
130 +
131 +
    // Generate subsequent lanes based on lane 0
132 +
    let mut i = 0;
133 +
    while i < 256 {
134 +
        let mut e = 1;
135 +
        while e < 16 {
136 +
            let one_lower = table[e - 1][i];
137 +
            if reflect {
138 +
                table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize];
139 +
            } else {
140 +
                table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 24) & 0xFF) as usize];
141 +
            }
142 +
            e += 1;
143 +
        }
144 +
        i += 1;
145 +
    }
146 +
147 +
    table
148 +
}
149 +
150 +
/// Generates a 16-lane lookup table for CRC-64 calculations.
151 +
///
152 +
/// This function creates a table compatible with the `crc` crate's `Table<16>` format,
153 +
/// enabling processing of 16 bytes at a time for improved performance.
154 +
pub const fn generate_table_u64(width: u8, poly: u64, reflect: bool) -> [[u64; 256]; 16] {
155 +
    let poly = if reflect {
156 +
        let poly = poly.reverse_bits();
157 +
        poly >> (64u8 - width)
158 +
    } else {
159 +
        poly << (64u8 - width)
160 +
    };
161 +
162 +
    let mut table = [[0u64; 256]; 16];
163 +
164 +
    // Generate first table (lane 0) directly
165 +
    let mut i = 0;
166 +
    while i < 256 {
167 +
        table[0][i] = crc64_single(poly, reflect, i as u64);
168 +
        i += 1;
169 +
    }
170 +
171 +
    // Generate subsequent lanes based on lane 0
172 +
    let mut i = 0;
173 +
    while i < 256 {
174 +
        let mut e = 1;
175 +
        while e < 16 {
176 +
            let one_lower = table[e - 1][i];
177 +
            if reflect {
178 +
                table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize];
179 +
            } else {
180 +
                table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 56) & 0xFF) as usize];
181 +
            }
182 +
            e += 1;
183 +
        }
184 +
        i += 1;
185 +
    }
186 +
187 +
    table
188 +
}
189 +
190 +
// ============================================================================
191 +
// Caching for custom CRC algorithms
192 +
// ============================================================================
193 +
194 +
#[cfg(feature = "alloc")]
195 +
#[cfg(feature = "std")]
196 +
use std::collections::HashMap;
197 +
#[cfg(feature = "alloc")]
198 +
#[cfg(feature = "std")]
199 +
use std::sync::{Mutex, OnceLock};
200 +
201 +
#[cfg(feature = "alloc")]
202 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
203 +
use hashbrown::HashMap;
204 +
#[cfg(feature = "alloc")]
205 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
206 +
use spin::{Mutex, Once};
207 +
208 +
// Cache key types for custom algorithms
209 +
#[cfg(feature = "alloc")]
210 +
#[cfg(any(feature = "std", feature = "cache"))]
211 +
type Crc16Key = (u16, u16, bool, bool, u16, u16);
212 +
#[cfg(feature = "alloc")]
213 +
#[cfg(any(feature = "std", feature = "cache"))]
214 +
type Crc32Key = (u32, u32, bool, bool, u32, u32);
215 +
#[cfg(feature = "alloc")]
216 +
#[cfg(any(feature = "std", feature = "cache"))]
217 +
type Crc64Key = (u64, u64, bool, bool, u64, u64);
218 +
219 +
// Cache value types for custom algorithms - stores the generated table
220 +
#[cfg(feature = "alloc")]
221 +
#[cfg(any(feature = "std", feature = "cache"))]
222 +
type Crc16CacheValue = &'static [[u16; 256]; 16];
223 +
#[cfg(feature = "alloc")]
224 +
#[cfg(any(feature = "std", feature = "cache"))]
225 +
type Crc32CacheValue = &'static [[u32; 256]; 16];
226 +
#[cfg(feature = "alloc")]
227 +
#[cfg(any(feature = "std", feature = "cache"))]
228 +
type Crc64CacheValue = &'static [[u64; 256]; 16];
229 +
230 +
// Global caches for custom algorithms (std version)
231 +
#[cfg(feature = "alloc")]
232 +
#[cfg(feature = "std")]
233 +
static CUSTOM_CRC16_CACHE: OnceLock<Mutex<HashMap<Crc16Key, Crc16CacheValue>>> = OnceLock::new();
234 +
#[cfg(feature = "alloc")]
235 +
#[cfg(feature = "std")]
236 +
static CUSTOM_CRC32_CACHE: OnceLock<Mutex<HashMap<Crc32Key, Crc32CacheValue>>> = OnceLock::new();
237 +
#[cfg(feature = "alloc")]
238 +
#[cfg(feature = "std")]
239 +
static CUSTOM_CRC64_CACHE: OnceLock<Mutex<HashMap<Crc64Key, Crc64CacheValue>>> = OnceLock::new();
240 +
241 +
// Global caches for custom algorithms (no_std + cache version)
242 +
#[cfg(feature = "alloc")]
243 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
244 +
static CUSTOM_CRC16_CACHE: Once<Mutex<HashMap<Crc16Key, Crc16CacheValue>>> = Once::new();
245 +
#[cfg(feature = "alloc")]
246 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
247 +
static CUSTOM_CRC32_CACHE: Once<Mutex<HashMap<Crc32Key, Crc32CacheValue>>> = Once::new();
248 +
#[cfg(feature = "alloc")]
249 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
250 +
static CUSTOM_CRC64_CACHE: Once<Mutex<HashMap<Crc64Key, Crc64CacheValue>>> = Once::new();
251 +
252 +
// ============================================================================
253 +
// Main dispatch function
254 +
// ============================================================================
255 +
256 +
#[allow(unused)]
257 +
#[allow(deprecated)]
258 +
pub(crate) fn update(state: u64, data: &[u8], params: &CrcParams) -> u64 {
259 +
    match params.width {
260 +
        16 => update_crc16(state as u16, data, params) as u64,
261 +
        32 => update_crc32(state as u32, data, params) as u64,
262 +
        64 => update_crc64(state, data, params),
263 +
        _ => panic!("Unsupported CRC width: {}", params.width),
264 +
    }
265 +
}
266 +
267 +
// ============================================================================
268 +
// CRC-16 dispatch
269 +
// ============================================================================
270 +
271 +
fn update_crc16(state: u16, data: &[u8], params: &CrcParams) -> u16 {
272 +
    let (table, refin) = match params.algorithm {
273 +
        CrcAlgorithm::Crc16Arc => (&tables::crc16::CRC16_ARC_TABLE, true),
274 +
        CrcAlgorithm::Crc16Cdma2000 => (&tables::crc16::CRC16_CDMA2000_TABLE, false),
275 +
        CrcAlgorithm::Crc16Cms => (&tables::crc16::CRC16_CMS_TABLE, false),
276 +
        CrcAlgorithm::Crc16Dds110 => (&tables::crc16::CRC16_DDS_110_TABLE, false),
277 +
        CrcAlgorithm::Crc16DectR => (&tables::crc16::CRC16_DECT_R_TABLE, false),
278 +
        CrcAlgorithm::Crc16DectX => (&tables::crc16::CRC16_DECT_X_TABLE, false),
279 +
        CrcAlgorithm::Crc16Dnp => (&tables::crc16::CRC16_DNP_TABLE, true),
280 +
        CrcAlgorithm::Crc16En13757 => (&tables::crc16::CRC16_EN_13757_TABLE, false),
281 +
        CrcAlgorithm::Crc16Genibus => (&tables::crc16::CRC16_GENIBUS_TABLE, false),
282 +
        CrcAlgorithm::Crc16Gsm => (&tables::crc16::CRC16_GSM_TABLE, false),
283 +
        CrcAlgorithm::Crc16Ibm3740 => (&tables::crc16::CRC16_IBM_3740_TABLE, false),
284 +
        CrcAlgorithm::Crc16IbmSdlc => (&tables::crc16::CRC16_IBM_SDLC_TABLE, true),
285 +
        CrcAlgorithm::Crc16IsoIec144433A => (&tables::crc16::CRC16_ISO_IEC_14443_3_A_TABLE, true),
286 +
        CrcAlgorithm::Crc16Kermit => (&tables::crc16::CRC16_KERMIT_TABLE, true),
287 +
        CrcAlgorithm::Crc16Lj1200 => (&tables::crc16::CRC16_LJ1200_TABLE, false),
288 +
        CrcAlgorithm::Crc16M17 => (&tables::crc16::CRC16_M17_TABLE, false),
289 +
        CrcAlgorithm::Crc16MaximDow => (&tables::crc16::CRC16_MAXIM_DOW_TABLE, true),
290 +
        CrcAlgorithm::Crc16Mcrf4xx => (&tables::crc16::CRC16_MCRF4XX_TABLE, true),
291 +
        CrcAlgorithm::Crc16Modbus => (&tables::crc16::CRC16_MODBUS_TABLE, true),
292 +
        CrcAlgorithm::Crc16Nrsc5 => (&tables::crc16::CRC16_NRSC_5_TABLE, true),
293 +
        CrcAlgorithm::Crc16OpensafetyA => (&tables::crc16::CRC16_OPENSAFETY_A_TABLE, false),
294 +
        CrcAlgorithm::Crc16OpensafetyB => (&tables::crc16::CRC16_OPENSAFETY_B_TABLE, false),
295 +
        CrcAlgorithm::Crc16Profibus => (&tables::crc16::CRC16_PROFIBUS_TABLE, false),
296 +
        CrcAlgorithm::Crc16Riello => (&tables::crc16::CRC16_RIELLO_TABLE, true),
297 +
        CrcAlgorithm::Crc16SpiFujitsu => (&tables::crc16::CRC16_SPI_FUJITSU_TABLE, false),
298 +
        CrcAlgorithm::Crc16T10Dif => (&tables::crc16::CRC16_T10_DIF_TABLE, false),
299 +
        CrcAlgorithm::Crc16Teledisk => (&tables::crc16::CRC16_TELEDISK_TABLE, false),
300 +
        CrcAlgorithm::Crc16Tms37157 => (&tables::crc16::CRC16_TMS37157_TABLE, true),
301 +
        CrcAlgorithm::Crc16Umts => (&tables::crc16::CRC16_UMTS_TABLE, false),
302 +
        CrcAlgorithm::Crc16Usb => (&tables::crc16::CRC16_USB_TABLE, true),
303 +
        CrcAlgorithm::Crc16Xmodem => (&tables::crc16::CRC16_XMODEM_TABLE, false),
304 +
        CrcAlgorithm::CrcCustom => {
305 +
            return update_crc16_custom(state, data, params);
306 +
        }
307 +
        _ => panic!("Invalid algorithm for u16 CRC"),
308 +
    };
309 +
310 +
    native_update_u16(state, table, refin, data)
311 +
}
312 +
313 +
#[cfg(feature = "alloc")]
314 +
fn update_crc16_custom(state: u16, data: &[u8], params: &CrcParams) -> u16 {
315 +
    extern crate alloc;
316 +
    use alloc::boxed::Box;
317 +
318 +
    let refin = params.refin;
319 +
320 +
    #[cfg(any(feature = "std", feature = "cache"))]
321 +
    let table: &'static [[u16; 256]; 16] = {
322 +
        let key: Crc16Key = (
323 +
            params.poly as u16,
324 +
            params.init as u16,
325 +
            params.refin,
326 +
            params.refout,
327 +
            params.xorout as u16,
328 +
            params.check as u16,
329 +
        );
330 +
331 +
        #[cfg(feature = "std")]
332 +
        {
333 +
            let cache = CUSTOM_CRC16_CACHE.get_or_init(|| Mutex::new(HashMap::new()));
334 +
            let mut cache_guard = cache.lock().unwrap();
335 +
336 +
            cache_guard.entry(key).or_insert_with(|| {
337 +
                let table = generate_table_u16(params.width, params.poly as u16, refin);
338 +
                Box::leak(Box::new(table))
339 +
            })
340 +
        }
341 +
342 +
        #[cfg(all(not(feature = "std"), feature = "cache"))]
343 +
        {
344 +
            let cache = CUSTOM_CRC16_CACHE.call_once(|| Mutex::new(HashMap::new()));
345 +
            let mut cache_guard = cache.lock();
346 +
347 +
            cache_guard.entry(key).or_insert_with(|| {
348 +
                let table = generate_table_u16(params.width, params.poly as u16, refin);
349 +
                Box::leak(Box::new(table))
350 +
            })
351 +
        }
352 +
    };
353 +
354 +
    #[cfg(not(any(feature = "std", feature = "cache")))]
355 +
    let table: &'static [[u16; 256]; 16] = {
356 +
        let table = generate_table_u16(params.width, params.poly as u16, refin);
357 +
        Box::leak(Box::new(table))
358 +
    };
359 +
360 +
    native_update_u16(state, table, refin, data)
361 +
}
362 +
363 +
#[cfg(not(feature = "alloc"))]
364 +
fn update_crc16_custom(_state: u16, _data: &[u8], _params: &CrcParams) -> u16 {
365 +
    panic!("Custom CRC parameters require the 'alloc' feature")
366 +
}
367 +
368 +
// ============================================================================
369 +
// CRC-32 dispatch
370 +
// ============================================================================
371 +
372 +
fn update_crc32(state: u32, data: &[u8], params: &CrcParams) -> u32 {
373 +
    let (table, refin) = match params.algorithm {
374 +
        CrcAlgorithm::Crc32Aixm => (&tables::crc32::CRC32_AIXM_TABLE, false),
375 +
        CrcAlgorithm::Crc32Autosar => (&tables::crc32::CRC32_AUTOSAR_TABLE, true),
376 +
        CrcAlgorithm::Crc32Base91D => (&tables::crc32::CRC32_BASE91_D_TABLE, true),
377 +
        CrcAlgorithm::Crc32Bzip2 => (&tables::crc32::CRC32_BZIP2_TABLE, false),
378 +
        CrcAlgorithm::Crc32CdRomEdc => (&tables::crc32::CRC32_CD_ROM_EDC_TABLE, true),
379 +
        CrcAlgorithm::Crc32Cksum => (&tables::crc32::CRC32_CKSUM_TABLE, false),
380 +
        CrcAlgorithm::Crc32Iscsi => (&tables::crc32::CRC32_ISCSI_TABLE, true),
381 +
        CrcAlgorithm::Crc32IsoHdlc => (&tables::crc32::CRC32_ISO_HDLC_TABLE, true),
382 +
        CrcAlgorithm::Crc32Jamcrc => (&tables::crc32::CRC32_JAMCRC_TABLE, true),
383 +
        CrcAlgorithm::Crc32Mef => (&tables::crc32::CRC32_MEF_TABLE, true),
384 +
        CrcAlgorithm::Crc32Mpeg2 => (&tables::crc32::CRC32_MPEG_2_TABLE, false),
385 +
        CrcAlgorithm::Crc32Xfer => (&tables::crc32::CRC32_XFER_TABLE, false),
386 +
        #[allow(deprecated)]
387 +
        CrcAlgorithm::Crc32Custom | CrcAlgorithm::CrcCustom => {
388 +
            return update_crc32_custom(state, data, params);
389 +
        }
390 +
        _ => panic!("Invalid algorithm for u32 CRC"),
391 +
    };
392 +
393 +
    native_update_u32(state, table, refin, data)
394 +
}
395 +
396 +
#[cfg(feature = "alloc")]
397 +
fn update_crc32_custom(state: u32, data: &[u8], params: &CrcParams) -> u32 {
398 +
    extern crate alloc;
399 +
    use alloc::boxed::Box;
400 +
401 +
    let refin = params.refin;
402 +
403 +
    #[cfg(any(feature = "std", feature = "cache"))]
404 +
    let table: &'static [[u32; 256]; 16] = {
405 +
        let key: Crc32Key = (
406 +
            params.poly as u32,
407 +
            params.init as u32,
408 +
            params.refin,
409 +
            params.refout,
410 +
            params.xorout as u32,
411 +
            params.check as u32,
412 +
        );
413 +
414 +
        #[cfg(feature = "std")]
415 +
        {
416 +
            let cache = CUSTOM_CRC32_CACHE.get_or_init(|| Mutex::new(HashMap::new()));
417 +
            let mut cache_guard = cache.lock().unwrap();
418 +
419 +
            cache_guard.entry(key).or_insert_with(|| {
420 +
                let table = generate_table_u32(params.width, params.poly as u32, refin);
421 +
                Box::leak(Box::new(table))
422 +
            })
423 +
        }
424 +
425 +
        #[cfg(all(not(feature = "std"), feature = "cache"))]
426 +
        {
427 +
            let cache = CUSTOM_CRC32_CACHE.call_once(|| Mutex::new(HashMap::new()));
428 +
            let mut cache_guard = cache.lock();
429 +
430 +
            cache_guard.entry(key).or_insert_with(|| {
431 +
                let table = generate_table_u32(params.width, params.poly as u32, refin);
432 +
                Box::leak(Box::new(table))
433 +
            })
434 +
        }
435 +
    };
436 +
437 +
    #[cfg(not(any(feature = "std", feature = "cache")))]
438 +
    let table: &'static [[u32; 256]; 16] = {
439 +
        let table = generate_table_u32(params.width, params.poly as u32, refin);
440 +
        Box::leak(Box::new(table))
441 +
    };
442 +
443 +
    native_update_u32(state, table, refin, data)
444 +
}
445 +
446 +
#[cfg(not(feature = "alloc"))]
447 +
fn update_crc32_custom(_state: u32, _data: &[u8], _params: &CrcParams) -> u32 {
448 +
    panic!("Custom CRC parameters require the 'alloc' feature")
449 +
}
450 +
451 +
// ============================================================================
452 +
// CRC-64 dispatch
453 +
// ============================================================================
454 +
455 +
fn update_crc64(state: u64, data: &[u8], params: &CrcParams) -> u64 {
456 +
    let (table, refin) = match params.algorithm {
457 +
        CrcAlgorithm::Crc64Ecma182 => (&tables::crc64::CRC64_ECMA_182_TABLE, false),
458 +
        CrcAlgorithm::Crc64GoIso => (&tables::crc64::CRC64_GO_ISO_TABLE, true),
459 +
        CrcAlgorithm::Crc64Ms => (&tables::crc64::CRC64_MS_TABLE, true),
460 +
        CrcAlgorithm::Crc64Nvme => (&tables::crc64::CRC64_NVME_TABLE, true),
461 +
        CrcAlgorithm::Crc64Redis => (&tables::crc64::CRC64_REDIS_TABLE, true),
462 +
        CrcAlgorithm::Crc64We => (&tables::crc64::CRC64_WE_TABLE, false),
463 +
        CrcAlgorithm::Crc64Xz => (&tables::crc64::CRC64_XZ_TABLE, true),
464 +
        #[allow(deprecated)]
465 +
        CrcAlgorithm::Crc64Custom | CrcAlgorithm::CrcCustom => {
466 +
            return update_crc64_custom(state, data, params);
467 +
        }
468 +
        _ => panic!("Invalid algorithm for u64 CRC"),
469 +
    };
470 +
471 +
    native_update_u64(state, table, refin, data)
472 +
}
473 +
474 +
#[cfg(feature = "alloc")]
475 +
fn update_crc64_custom(state: u64, data: &[u8], params: &CrcParams) -> u64 {
476 +
    extern crate alloc;
477 +
    use alloc::boxed::Box;
478 +
479 +
    let refin = params.refin;
480 +
481 +
    #[cfg(any(feature = "std", feature = "cache"))]
482 +
    let table: &'static [[u64; 256]; 16] = {
483 +
        let key: Crc64Key = (
484 +
            params.poly,
485 +
            params.init,
486 +
            params.refin,
487 +
            params.refout,
488 +
            params.xorout,
489 +
            params.check,
490 +
        );
491 +
492 +
        #[cfg(feature = "std")]
493 +
        {
494 +
            let cache = CUSTOM_CRC64_CACHE.get_or_init(|| Mutex::new(HashMap::new()));
495 +
            let mut cache_guard = cache.lock().unwrap();
496 +
497 +
            cache_guard.entry(key).or_insert_with(|| {
498 +
                let table = generate_table_u64(params.width, params.poly, refin);
499 +
                Box::leak(Box::new(table))
500 +
            })
501 +
        }
502 +
503 +
        #[cfg(all(not(feature = "std"), feature = "cache"))]
504 +
        {
505 +
            let cache = CUSTOM_CRC64_CACHE.call_once(|| Mutex::new(HashMap::new()));
506 +
            let mut cache_guard = cache.lock();
507 +
508 +
            cache_guard.entry(key).or_insert_with(|| {
509 +
                let table = generate_table_u64(params.width, params.poly, refin);
510 +
                Box::leak(Box::new(table))
511 +
            })
512 +
        }
513 +
    };
514 +
515 +
    #[cfg(not(any(feature = "std", feature = "cache")))]
516 +
    let table: &'static [[u64; 256]; 16] = {
517 +
        let table = generate_table_u64(params.width, params.poly, refin);
518 +
        Box::leak(Box::new(table))
519 +
    };
520 +
521 +
    native_update_u64(state, table, refin, data)
522 +
}
523 +
524 +
#[cfg(not(feature = "alloc"))]
525 +
fn update_crc64_custom(_state: u64, _data: &[u8], _params: &CrcParams) -> u64 {
526 +
    panic!("Custom CRC parameters require the 'alloc' feature")
527 +
}
528 +
529 +
// ============================================================================
530 +
// Native CRC Update Functions (Table<16> equivalent)
531 +
// ============================================================================
532 +
533 +
/// Native CRC-16 update function using 16-lane lookup tables.
534 +
///
535 +
/// Processes 16 bytes at a time for improved performance, then handles
536 +
/// remaining bytes with single-byte lookups.
537 +
#[allow(dead_code)]
538 +
pub(crate) fn native_update_u16(
539 +
    mut crc: u16,
540 +
    table: &[[u16; 256]; 16],
541 +
    reflect: bool,
542 +
    bytes: &[u8],
543 +
) -> u16 {
544 +
    let len = bytes.len();
545 +
    let mut i = 0;
546 +
547 +
    // Process 16 bytes at a time
548 +
    while i + 16 <= len {
549 +
        if reflect {
550 +
            let current0 = bytes[i] ^ (crc as u8);
551 +
            let current1 = bytes[i + 1] ^ ((crc >> 8) as u8);
552 +
553 +
            crc = table[0][bytes[i + 15] as usize]
554 +
                ^ table[1][bytes[i + 14] as usize]
555 +
                ^ table[2][bytes[i + 13] as usize]
556 +
                ^ table[3][bytes[i + 12] as usize]
557 +
                ^ table[4][bytes[i + 11] as usize]
558 +
                ^ table[5][bytes[i + 10] as usize]
559 +
                ^ table[6][bytes[i + 9] as usize]
560 +
                ^ table[7][bytes[i + 8] as usize]
561 +
                ^ table[8][bytes[i + 7] as usize]
562 +
                ^ table[9][bytes[i + 6] as usize]
563 +
                ^ table[10][bytes[i + 5] as usize]
564 +
                ^ table[11][bytes[i + 4] as usize]
565 +
                ^ table[12][bytes[i + 3] as usize]
566 +
                ^ table[13][bytes[i + 2] as usize]
567 +
                ^ table[14][current1 as usize]
568 +
                ^ table[15][current0 as usize];
569 +
        } else {
570 +
            let current0 = bytes[i] ^ ((crc >> 8) as u8);
571 +
            let current1 = bytes[i + 1] ^ (crc as u8);
572 +
573 +
            crc = table[0][bytes[i + 15] as usize]
574 +
                ^ table[1][bytes[i + 14] as usize]
575 +
                ^ table[2][bytes[i + 13] as usize]
576 +
                ^ table[3][bytes[i + 12] as usize]
577 +
                ^ table[4][bytes[i + 11] as usize]
578 +
                ^ table[5][bytes[i + 10] as usize]
579 +
                ^ table[6][bytes[i + 9] as usize]
580 +
                ^ table[7][bytes[i + 8] as usize]
581 +
                ^ table[8][bytes[i + 7] as usize]
582 +
                ^ table[9][bytes[i + 6] as usize]
583 +
                ^ table[10][bytes[i + 5] as usize]
584 +
                ^ table[11][bytes[i + 4] as usize]
585 +
                ^ table[12][bytes[i + 3] as usize]
586 +
                ^ table[13][bytes[i + 2] as usize]
587 +
                ^ table[14][current1 as usize]
588 +
                ^ table[15][current0 as usize];
589 +
        }
590 +
        i += 16;
591 +
    }
592 +
593 +
    // Process remaining bytes one at a time
594 +
    if reflect {
595 +
        while i < len {
596 +
            let table_index = ((crc ^ bytes[i] as u16) & 0xFF) as usize;
597 +
            crc = table[0][table_index] ^ (crc >> 8);
598 +
            i += 1;
599 +
        }
600 +
    } else {
601 +
        while i < len {
602 +
            let table_index = (((crc >> 8) ^ bytes[i] as u16) & 0xFF) as usize;
603 +
            crc = table[0][table_index] ^ (crc << 8);
604 +
            i += 1;
605 +
        }
606 +
    }
607 +
608 +
    crc
609 +
}
610 +
611 +
/// Native CRC-32 update function using 16-lane lookup tables.
612 +
///
613 +
/// Processes 16 bytes at a time for improved performance, then handles
614 +
/// remaining bytes with single-byte lookups.
615 +
#[allow(dead_code)]
616 +
pub(crate) fn native_update_u32(
617 +
    mut crc: u32,
618 +
    table: &[[u32; 256]; 16],
619 +
    reflect: bool,
620 +
    bytes: &[u8],
621 +
) -> u32 {
622 +
    let len = bytes.len();
623 +
    let mut i = 0;
624 +
625 +
    // Process 16 bytes at a time
626 +
    while i + 16 <= len {
627 +
        if reflect {
628 +
            let current0 = bytes[i] ^ (crc as u8);
629 +
            let current1 = bytes[i + 1] ^ ((crc >> 8) as u8);
630 +
            let current2 = bytes[i + 2] ^ ((crc >> 16) as u8);
631 +
            let current3 = bytes[i + 3] ^ ((crc >> 24) as u8);
632 +
633 +
            crc = table[0][bytes[i + 15] as usize]
634 +
                ^ table[1][bytes[i + 14] as usize]
635 +
                ^ table[2][bytes[i + 13] as usize]
636 +
                ^ table[3][bytes[i + 12] as usize]
637 +
                ^ table[4][bytes[i + 11] as usize]
638 +
                ^ table[5][bytes[i + 10] as usize]
639 +
                ^ table[6][bytes[i + 9] as usize]
640 +
                ^ table[7][bytes[i + 8] as usize]
641 +
                ^ table[8][bytes[i + 7] as usize]
642 +
                ^ table[9][bytes[i + 6] as usize]
643 +
                ^ table[10][bytes[i + 5] as usize]
644 +
                ^ table[11][bytes[i + 4] as usize]
645 +
                ^ table[12][current3 as usize]
646 +
                ^ table[13][current2 as usize]
647 +
                ^ table[14][current1 as usize]
648 +
                ^ table[15][current0 as usize];
649 +
        } else {
650 +
            let current0 = bytes[i] ^ ((crc >> 24) as u8);
651 +
            let current1 = bytes[i + 1] ^ ((crc >> 16) as u8);
652 +
            let current2 = bytes[i + 2] ^ ((crc >> 8) as u8);
653 +
            let current3 = bytes[i + 3] ^ (crc as u8);
654 +
655 +
            crc = table[0][bytes[i + 15] as usize]
656 +
                ^ table[1][bytes[i + 14] as usize]
657 +
                ^ table[2][bytes[i + 13] as usize]
658 +
                ^ table[3][bytes[i + 12] as usize]
659 +
                ^ table[4][bytes[i + 11] as usize]
660 +
                ^ table[5][bytes[i + 10] as usize]
661 +
                ^ table[6][bytes[i + 9] as usize]
662 +
                ^ table[7][bytes[i + 8] as usize]
663 +
                ^ table[8][bytes[i + 7] as usize]
664 +
                ^ table[9][bytes[i + 6] as usize]
665 +
                ^ table[10][bytes[i + 5] as usize]
666 +
                ^ table[11][bytes[i + 4] as usize]
667 +
                ^ table[12][current3 as usize]
668 +
                ^ table[13][current2 as usize]
669 +
                ^ table[14][current1 as usize]
670 +
                ^ table[15][current0 as usize];
671 +
        }
672 +
        i += 16;
673 +
    }
674 +
675 +
    // Process remaining bytes one at a time
676 +
    if reflect {
677 +
        while i < len {
678 +
            let table_index = ((crc ^ bytes[i] as u32) & 0xFF) as usize;
679 +
            crc = table[0][table_index] ^ (crc >> 8);
680 +
            i += 1;
681 +
        }
682 +
    } else {
683 +
        while i < len {
684 +
            let table_index = (((crc >> 24) ^ bytes[i] as u32) & 0xFF) as usize;
685 +
            crc = table[0][table_index] ^ (crc << 8);
686 +
            i += 1;
687 +
        }
688 +
    }
689 +
690 +
    crc
691 +
}
692 +
693 +
/// Native CRC-64 update function using 16-lane lookup tables.
694 +
///
695 +
/// Processes 16 bytes at a time for improved performance, then handles
696 +
/// remaining bytes with single-byte lookups.
697 +
#[allow(dead_code)]
698 +
pub(crate) fn native_update_u64(
699 +
    mut crc: u64,
700 +
    table: &[[u64; 256]; 16],
701 +
    reflect: bool,
702 +
    bytes: &[u8],
703 +
) -> u64 {
704 +
    let len = bytes.len();
705 +
    let mut i = 0;
706 +
707 +
    // Process 16 bytes at a time
708 +
    while i + 16 <= len {
709 +
        if reflect {
710 +
            let current0 = bytes[i] ^ (crc as u8);
711 +
            let current1 = bytes[i + 1] ^ ((crc >> 8) as u8);
712 +
            let current2 = bytes[i + 2] ^ ((crc >> 16) as u8);
713 +
            let current3 = bytes[i + 3] ^ ((crc >> 24) as u8);
714 +
            let current4 = bytes[i + 4] ^ ((crc >> 32) as u8);
715 +
            let current5 = bytes[i + 5] ^ ((crc >> 40) as u8);
716 +
            let current6 = bytes[i + 6] ^ ((crc >> 48) as u8);
717 +
            let current7 = bytes[i + 7] ^ ((crc >> 56) as u8);
718 +
719 +
            crc = table[0][bytes[i + 15] as usize]
720 +
                ^ table[1][bytes[i + 14] as usize]
721 +
                ^ table[2][bytes[i + 13] as usize]
722 +
                ^ table[3][bytes[i + 12] as usize]
723 +
                ^ table[4][bytes[i + 11] as usize]
724 +
                ^ table[5][bytes[i + 10] as usize]
725 +
                ^ table[6][bytes[i + 9] as usize]
726 +
                ^ table[7][bytes[i + 8] as usize]
727 +
                ^ table[8][current7 as usize]
728 +
                ^ table[9][current6 as usize]
729 +
                ^ table[10][current5 as usize]
730 +
                ^ table[11][current4 as usize]
731 +
                ^ table[12][current3 as usize]
732 +
                ^ table[13][current2 as usize]
733 +
                ^ table[14][current1 as usize]
734 +
                ^ table[15][current0 as usize];
735 +
        } else {
736 +
            let current0 = bytes[i] ^ ((crc >> 56) as u8);
737 +
            let current1 = bytes[i + 1] ^ ((crc >> 48) as u8);
738 +
            let current2 = bytes[i + 2] ^ ((crc >> 40) as u8);
739 +
            let current3 = bytes[i + 3] ^ ((crc >> 32) as u8);
740 +
            let current4 = bytes[i + 4] ^ ((crc >> 24) as u8);
741 +
            let current5 = bytes[i + 5] ^ ((crc >> 16) as u8);
742 +
            let current6 = bytes[i + 6] ^ ((crc >> 8) as u8);
743 +
            let current7 = bytes[i + 7] ^ (crc as u8);
744 +
745 +
            crc = table[0][bytes[i + 15] as usize]
746 +
                ^ table[1][bytes[i + 14] as usize]
747 +
                ^ table[2][bytes[i + 13] as usize]
748 +
                ^ table[3][bytes[i + 12] as usize]
749 +
                ^ table[4][bytes[i + 11] as usize]
750 +
                ^ table[5][bytes[i + 10] as usize]
751 +
                ^ table[6][bytes[i + 9] as usize]
752 +
                ^ table[7][bytes[i + 8] as usize]
753 +
                ^ table[8][current7 as usize]
754 +
                ^ table[9][current6 as usize]
755 +
                ^ table[10][current5 as usize]
756 +
                ^ table[11][current4 as usize]
757 +
                ^ table[12][current3 as usize]
758 +
                ^ table[13][current2 as usize]
759 +
                ^ table[14][current1 as usize]
760 +
                ^ table[15][current0 as usize];
761 +
        }
762 +
        i += 16;
763 +
    }
764 +
765 +
    // Process remaining bytes one at a time
766 +
    if reflect {
767 +
        while i < len {
768 +
            let table_index = ((crc ^ bytes[i] as u64) & 0xFF) as usize;
769 +
            crc = table[0][table_index] ^ (crc >> 8);
770 +
            i += 1;
771 +
        }
772 +
    } else {
773 +
        while i < len {
774 +
            let table_index = (((crc >> 56) ^ bytes[i] as u64) & 0xFF) as usize;
775 +
            crc = table[0][table_index] ^ (crc << 8);
776 +
            i += 1;
777 +
        }
778 +
    }
779 +
780 +
    crc
781 +
}
782 +
783 +
// ============================================================================
784 +
// Property Tests for Native Implementation
785 +
// ============================================================================
786 +
787 +
#[cfg(test)]
788 +
mod property_tests {
789 +
    use crate::test::consts::{
790 +
        RUST_CRC16_ARC, RUST_CRC16_IBM_SDLC, RUST_CRC16_T10_DIF, RUST_CRC32_BZIP2,
791 +
        RUST_CRC32_ISCSI, RUST_CRC32_ISO_HDLC, RUST_CRC64_ECMA_182, RUST_CRC64_NVME, RUST_CRC64_XZ,
792 +
        TEST_CHECK_STRING,
793 +
    };
794 +
    use crate::test::miri_compatible_proptest_config;
795 +
    use crate::{checksum, checksum_with_params, CrcAlgorithm, CrcParams, Digest};
796 +
    use proptest::prelude::*;
797 +
798 +
    proptest! {
799 +
        #![proptest_config(miri_compatible_proptest_config())]
800 +
801 +
        /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness
802 +
        /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation
803 +
        /// SHALL produce the same checksum as the `crc` crate reference implementation.
804 +
        /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5**
805 +
        #[test]
806 +
        fn prop_native_crc16_reflected_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
807 +
            // Test CRC-16/IBM-SDLC (reflected)
808 +
            let our_result = checksum(CrcAlgorithm::Crc16IbmSdlc, &data);
809 +
            let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64;
810 +
            prop_assert_eq!(
811 +
                our_result, reference_result,
812 +
                "CRC-16/IBM-SDLC native mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
813 +
                data.len(), our_result, reference_result
814 +
            );
815 +
        }
816 +
817 +
        /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness
818 +
        /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation
819 +
        /// SHALL produce the same checksum as the `crc` crate reference implementation.
820 +
        /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5**
821 +
        #[test]
822 +
        fn prop_native_crc16_forward_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
823 +
            // Test CRC-16/T10-DIF (forward/non-reflected)
824 +
            let our_result = checksum(CrcAlgorithm::Crc16T10Dif, &data);
825 +
            let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64;
826 +
            prop_assert_eq!(
827 +
                our_result, reference_result,
828 +
                "CRC-16/T10-DIF native mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
829 +
                data.len(), our_result, reference_result
830 +
            );
831 +
        }
832 +
833 +
        /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness
834 +
        /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation
835 +
        /// SHALL produce the same checksum as the `crc` crate reference implementation.
836 +
        /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5**
837 +
        #[test]
838 +
        fn prop_native_crc32_reflected_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
839 +
            // Test CRC-32/ISO-HDLC (reflected)
840 +
            let our_result = checksum(CrcAlgorithm::Crc32IsoHdlc, &data);
841 +
            let reference_result = RUST_CRC32_ISO_HDLC.checksum(&data) as u64;
842 +
            prop_assert_eq!(
843 +
                our_result, reference_result,
844 +
                "CRC-32/ISO-HDLC native mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
845 +
                data.len(), our_result, reference_result
846 +
            );
847 +
        }
848 +
849 +
        /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness
850 +
        /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation
851 +
        /// SHALL produce the same checksum as the `crc` crate reference implementation.
852 +
        /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5**
853 +
        #[test]
854 +
        fn prop_native_crc32_forward_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
855 +
            // Test CRC-32/BZIP2 (forward/non-reflected)
856 +
            let our_result = checksum(CrcAlgorithm::Crc32Bzip2, &data);
857 +
            let reference_result = RUST_CRC32_BZIP2.checksum(&data) as u64;
858 +
            prop_assert_eq!(
859 +
                our_result, reference_result,
860 +
                "CRC-32/BZIP2 native mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
861 +
                data.len(), our_result, reference_result
862 +
            );
863 +
        }
864 +
865 +
        /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness
866 +
        /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation
867 +
        /// SHALL produce the same checksum as the `crc` crate reference implementation.
868 +
        /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5**
869 +
        #[test]
870 +
        fn prop_native_crc64_reflected_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
871 +
            // Test CRC-64/XZ (reflected)
872 +
            let our_result = checksum(CrcAlgorithm::Crc64Xz, &data);
873 +
            let reference_result = RUST_CRC64_XZ.checksum(&data);
874 +
            prop_assert_eq!(
875 +
                our_result, reference_result,
876 +
                "CRC-64/XZ native mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}",
877 +
                data.len(), our_result, reference_result
878 +
            );
879 +
        }
880 +
881 +
        /// Feature: remove-crc-runtime-dependency, Property 1: Native Implementation Correctness
882 +
        /// *For any* supported CRC algorithm and *for any* byte sequence, the native implementation
883 +
        /// SHALL produce the same checksum as the `crc` crate reference implementation.
884 +
        /// **Validates: Requirements 2.2, 2.3, 4.2, 4.3, 6.2, 6.5**
885 +
        #[test]
886 +
        fn prop_native_crc64_forward_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
887 +
            // Test CRC-64/ECMA-182 (forward/non-reflected)
888 +
            let our_result = checksum(CrcAlgorithm::Crc64Ecma182, &data);
889 +
            let reference_result = RUST_CRC64_ECMA_182.checksum(&data);
890 +
            prop_assert_eq!(
891 +
                our_result, reference_result,
892 +
                "CRC-64/ECMA-182 native mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}",
893 +
                data.len(), our_result, reference_result
894 +
            );
895 +
        }
896 +
897 +
        /// Feature: remove-crc-runtime-dependency, Property 3: Incremental Update Equivalence
898 +
        /// *For any* CRC algorithm and *for any* way of partitioning input data into chunks,
899 +
        /// computing the CRC incrementally via `Digest::update()` calls SHALL produce the same
900 +
        /// result as computing it in a single `checksum()` call.
901 +
        /// **Validates: Requirements 6.3, 6.5**
902 +
        #[test]
903 +
        fn prop_incremental_update_crc32_equivalence(
904 +
            data in proptest::collection::vec(any::<u8>(), 0..1024),
905 +
            split_point in 0usize..=1024usize
906 +
        ) {
907 +
            let split_point = split_point.min(data.len());
908 +
            let (part1, part2) = data.split_at(split_point);
909 +
910 +
            // Compute incrementally
911 +
            let mut digest = Digest::new(CrcAlgorithm::Crc32IsoHdlc);
912 +
            digest.update(part1);
913 +
            digest.update(part2);
914 +
            let incremental_result = digest.finalize();
915 +
916 +
            // Compute in one shot
917 +
            let single_result = checksum(CrcAlgorithm::Crc32IsoHdlc, &data);
918 +
919 +
            prop_assert_eq!(
920 +
                incremental_result, single_result,
921 +
                "CRC-32/ISO-HDLC incremental mismatch: incremental=0x{:08X}, single=0x{:08X}, split_point={}",
922 +
                incremental_result, single_result, split_point
923 +
            );
924 +
        }
925 +
926 +
        /// Feature: remove-crc-runtime-dependency, Property 3: Incremental Update Equivalence
927 +
        /// *For any* CRC algorithm and *for any* way of partitioning input data into chunks,
928 +
        /// computing the CRC incrementally via `Digest::update()` calls SHALL produce the same
929 +
        /// result as computing it in a single `checksum()` call.
930 +
        /// **Validates: Requirements 6.3, 6.5**
931 +
        #[test]
932 +
        fn prop_incremental_update_crc64_equivalence(
933 +
            data in proptest::collection::vec(any::<u8>(), 0..1024),
934 +
            split_point in 0usize..=1024usize
935 +
        ) {
936 +
            let split_point = split_point.min(data.len());
937 +
            let (part1, part2) = data.split_at(split_point);
938 +
939 +
            // Compute incrementally
940 +
            let mut digest = Digest::new(CrcAlgorithm::Crc64Nvme);
941 +
            digest.update(part1);
942 +
            digest.update(part2);
943 +
            let incremental_result = digest.finalize();
944 +
945 +
            // Compute in one shot
946 +
            let single_result = checksum(CrcAlgorithm::Crc64Nvme, &data);
947 +
948 +
            prop_assert_eq!(
949 +
                incremental_result, single_result,
950 +
                "CRC-64/NVME incremental mismatch: incremental=0x{:016X}, single=0x{:016X}, split_point={}",
951 +
                incremental_result, single_result, split_point
952 +
            );
953 +
        }
954 +
955 +
        /// Feature: remove-crc-runtime-dependency, Property 4: Custom Parameters Correctness
956 +
        /// *For any* valid custom CRC parameters (width 16, 32, or 64) and *for any* byte sequence,
957 +
        /// the native implementation SHALL produce the same checksum as the `crc` crate when
958 +
        /// configured with equivalent parameters.
959 +
        /// **Validates: Requirements 5.1, 6.4**
960 +
        #[test]
961 +
        fn prop_custom_params_crc16_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
962 +
            // Custom CRC-16 parameters equivalent to CRC-16/ARC
963 +
            let custom_params = CrcParams::new(
964 +
                "CRC-16/CUSTOM-ARC",
965 +
                16,
966 +
                0x8005,  // poly
967 +
                0x0000,  // init
968 +
                true,    // refin
969 +
                0x0000,  // xorout
970 +
                0xBB3D,  // check
971 +
            );
972 +
            let our_result = checksum_with_params(custom_params, &data);
973 +
            let reference_result = RUST_CRC16_ARC.checksum(&data) as u64;
974 +
            prop_assert_eq!(
975 +
                our_result, reference_result,
976 +
                "CRC-16 custom params mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
977 +
                data.len(), our_result, reference_result
978 +
            );
979 +
        }
980 +
981 +
        /// Feature: remove-crc-runtime-dependency, Property 4: Custom Parameters Correctness
982 +
        /// *For any* valid custom CRC parameters (width 16, 32, or 64) and *for any* byte sequence,
983 +
        /// the native implementation SHALL produce the same checksum as the `crc` crate when
984 +
        /// configured with equivalent parameters.
985 +
        /// **Validates: Requirements 5.1, 6.4**
986 +
        #[test]
987 +
        fn prop_custom_params_crc32_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
988 +
            // Custom CRC-32 parameters equivalent to CRC-32/ISCSI
989 +
            let custom_params = CrcParams::new(
990 +
                "CRC-32/CUSTOM-ISCSI",
991 +
                32,
992 +
                0x1EDC6F41,  // poly
993 +
                0xFFFFFFFF,  // init
994 +
                true,        // refin
995 +
                0xFFFFFFFF,  // xorout
996 +
                0xE3069283,  // check
997 +
            );
998 +
            let our_result = checksum_with_params(custom_params, &data);
999 +
            let reference_result = RUST_CRC32_ISCSI.checksum(&data) as u64;
1000 +
            prop_assert_eq!(
1001 +
                our_result, reference_result,
1002 +
                "CRC-32 custom params mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
1003 +
                data.len(), our_result, reference_result
1004 +
            );
1005 +
        }
1006 +
1007 +
        /// Feature: remove-crc-runtime-dependency, Property 4: Custom Parameters Correctness
1008 +
        /// *For any* valid custom CRC parameters (width 16, 32, or 64) and *for any* byte sequence,
1009 +
        /// the native implementation SHALL produce the same checksum as the `crc` crate when
1010 +
        /// configured with equivalent parameters.
1011 +
        /// **Validates: Requirements 5.1, 6.4**
1012 +
        #[test]
1013 +
        fn prop_custom_params_crc64_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
1014 +
            // Custom CRC-64 parameters equivalent to CRC-64/NVME
1015 +
            let custom_params = CrcParams::new(
1016 +
                "CRC-64/CUSTOM-NVME",
1017 +
                64,
1018 +
                0xAD93D23594C93659,  // poly
1019 +
                0xFFFFFFFFFFFFFFFF,  // init
1020 +
                true,                 // refin
1021 +
                0xFFFFFFFFFFFFFFFF,  // xorout
1022 +
                0xAE8B14860A799888,  // check
1023 +
            );
1024 +
            let our_result = checksum_with_params(custom_params, &data);
1025 +
            let reference_result = RUST_CRC64_NVME.checksum(&data);
1026 +
            prop_assert_eq!(
1027 +
                our_result, reference_result,
1028 +
                "CRC-64 custom params mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}",
1029 +
                data.len(), our_result, reference_result
1030 +
            );
1031 +
        }
1032 +
    }
1033 +
1034 +
    /// Feature: remove-crc-runtime-dependency, Property 2: Check Value Verification
1035 +
    /// *For any* known CRC algorithm constant, computing the CRC of the byte sequence
1036 +
    /// `b"123456789"` SHALL produce the documented check value from the CRC catalogue specification.
1037 +
    /// **Validates: Requirements 3.2, 3.3, 3.4, 3.5**
1038 +
    #[test]
1039 +
    fn test_check_values_crc16() {
1040 +
        use crate::crc16::consts::*;
1041 +
1042 +
        let test_cases: &[(&str, CrcParams, u64)] = &[
1043 +
            ("CRC-16/ARC", CRC16_ARC, 0xBB3D),
1044 +
            ("CRC-16/CDMA2000", CRC16_CDMA2000, 0x4C06),
1045 +
            ("CRC-16/CMS", CRC16_CMS, 0xAEE7),
1046 +
            ("CRC-16/DDS-110", CRC16_DDS_110, 0x9ECF),
1047 +
            ("CRC-16/DECT-R", CRC16_DECT_R, 0x007E),
1048 +
            ("CRC-16/DECT-X", CRC16_DECT_X, 0x007F),
1049 +
            ("CRC-16/DNP", CRC16_DNP, 0xEA82),
1050 +
            ("CRC-16/EN-13757", CRC16_EN_13757, 0xC2B7),
1051 +
            ("CRC-16/GENIBUS", CRC16_GENIBUS, 0xD64E),
1052 +
            ("CRC-16/GSM", CRC16_GSM, 0xCE3C),
1053 +
            ("CRC-16/IBM-3740", CRC16_IBM_3740, 0x29B1),
1054 +
            ("CRC-16/IBM-SDLC", CRC16_IBM_SDLC, 0x906E),
1055 +
            ("CRC-16/ISO-IEC-14443-3-A", CRC16_ISO_IEC_14443_3_A, 0xBF05),
1056 +
            ("CRC-16/KERMIT", CRC16_KERMIT, 0x2189),
1057 +
            ("CRC-16/LJ1200", CRC16_LJ1200, 0xBDF4),
1058 +
            ("CRC-16/M17", CRC16_M17, 0x772B),
1059 +
            ("CRC-16/MAXIM-DOW", CRC16_MAXIM_DOW, 0x44C2),
1060 +
            ("CRC-16/MCRF4XX", CRC16_MCRF4XX, 0x6F91),
1061 +
            ("CRC-16/MODBUS", CRC16_MODBUS, 0x4B37),
1062 +
            ("CRC-16/NRSC-5", CRC16_NRSC_5, 0xA066),
1063 +
            ("CRC-16/OPENSAFETY-A", CRC16_OPENSAFETY_A, 0x5D38),
1064 +
            ("CRC-16/OPENSAFETY-B", CRC16_OPENSAFETY_B, 0x20FE),
1065 +
            ("CRC-16/PROFIBUS", CRC16_PROFIBUS, 0xA819),
1066 +
            ("CRC-16/RIELLO", CRC16_RIELLO, 0x63D0),
1067 +
            ("CRC-16/SPI-FUJITSU", CRC16_SPI_FUJITSU, 0xE5CC),
1068 +
            ("CRC-16/T10-DIF", CRC16_T10_DIF, 0xD0DB),
1069 +
            ("CRC-16/TELEDISK", CRC16_TELEDISK, 0x0FB3),
1070 +
            ("CRC-16/TMS37157", CRC16_TMS37157, 0x26B1),
1071 +
            ("CRC-16/UMTS", CRC16_UMTS, 0xFEE8),
1072 +
            ("CRC-16/USB", CRC16_USB, 0xB4C8),
1073 +
            ("CRC-16/XMODEM", CRC16_XMODEM, 0x31C3),
1074 +
        ];
1075 +
1076 +
        for (name, params, expected_check) in test_cases {
1077 +
            let result = checksum_with_params(*params, TEST_CHECK_STRING);
1078 +
            assert_eq!(
1079 +
                result, *expected_check,
1080 +
                "{} check value mismatch: got 0x{:04X}, expected 0x{:04X}",
1081 +
                name, result, expected_check
1082 +
            );
1083 +
        }
1084 +
    }
1085 +
1086 +
    /// Feature: remove-crc-runtime-dependency, Property 2: Check Value Verification
1087 +
    /// *For any* known CRC algorithm constant, computing the CRC of the byte sequence
1088 +
    /// `b"123456789"` SHALL produce the documented check value from the CRC catalogue specification.
1089 +
    /// **Validates: Requirements 3.2, 3.3, 3.4, 3.5**
1090 +
    #[test]
1091 +
    fn test_check_values_crc32() {
1092 +
        use crate::crc32::consts::*;
1093 +
1094 +
        let test_cases: &[(&str, CrcParams, u64)] = &[
1095 +
            ("CRC-32/AIXM", CRC32_AIXM, 0x3010BF7F),
1096 +
            ("CRC-32/AUTOSAR", CRC32_AUTOSAR, 0x1697D06A),
1097 +
            ("CRC-32/BASE91-D", CRC32_BASE91_D, 0x87315576),
1098 +
            ("CRC-32/BZIP2", CRC32_BZIP2, 0xFC891918),
1099 +
            ("CRC-32/CD-ROM-EDC", CRC32_CD_ROM_EDC, 0x6EC2EDC4),
1100 +
            ("CRC-32/CKSUM", CRC32_CKSUM, 0x765E7680),
1101 +
            ("CRC-32/ISCSI", CRC32_ISCSI, 0xE3069283),
1102 +
            ("CRC-32/ISO-HDLC", CRC32_ISO_HDLC, 0xCBF43926),
1103 +
            ("CRC-32/JAMCRC", CRC32_JAMCRC, 0x340BC6D9),
1104 +
            ("CRC-32/MEF", CRC32_MEF, 0xD2C22F51),
1105 +
            ("CRC-32/MPEG-2", CRC32_MPEG_2, 0x0376E6E7),
1106 +
            ("CRC-32/XFER", CRC32_XFER, 0xBD0BE338),
1107 +
        ];
1108 +
1109 +
        for (name, params, expected_check) in test_cases {
1110 +
            let result = checksum_with_params(*params, TEST_CHECK_STRING);
1111 +
            assert_eq!(
1112 +
                result, *expected_check,
1113 +
                "{} check value mismatch: got 0x{:08X}, expected 0x{:08X}",
1114 +
                name, result, expected_check
1115 +
            );
1116 +
        }
1117 +
    }
1118 +
1119 +
    /// Feature: remove-crc-runtime-dependency, Property 2: Check Value Verification
1120 +
    /// *For any* known CRC algorithm constant, computing the CRC of the byte sequence
1121 +
    /// `b"123456789"` SHALL produce the documented check value from the CRC catalogue specification.
1122 +
    /// **Validates: Requirements 3.2, 3.3, 3.4, 3.5**
1123 +
    #[test]
1124 +
    fn test_check_values_crc64() {
1125 +
        use crate::crc64::consts::*;
1126 +
1127 +
        let test_cases: &[(&str, CrcParams, u64)] = &[
1128 +
            ("CRC-64/ECMA-182", CRC64_ECMA_182, 0x6C40DF5F0B497347),
1129 +
            ("CRC-64/GO-ISO", CRC64_GO_ISO, 0xB90956C775A41001),
1130 +
            ("CRC-64/MS", CRC64_MS, 0x75D4B74F024ECEEA),
1131 +
            ("CRC-64/NVME", CRC64_NVME, 0xAE8B14860A799888),
1132 +
            ("CRC-64/REDIS", CRC64_REDIS, 0xE9C6D914C4B8D9CA),
1133 +
            ("CRC-64/WE", CRC64_WE, 0x62EC59E3F1A4F00A),
1134 +
            ("CRC-64/XZ", CRC64_XZ, 0x995DC9BBDF1939FA),
1135 +
        ];
1136 +
1137 +
        for (name, params, expected_check) in test_cases {
1138 +
            let result = checksum_with_params(*params, TEST_CHECK_STRING);
1139 +
            assert_eq!(
1140 +
                result, *expected_check,
1141 +
                "{} check value mismatch: got 0x{:016X}, expected 0x{:016X}",
1142 +
                name, result, expected_check
1143 +
            );
1144 +
        }
1145 +
    }
1146 +
}
added vendor/crc-fast/src/arch/x86/mod.rs +7 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides x86-specific implementations of the ArchOps trait.
4 +
5 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64"))]
6 +
7 +
pub mod sse;
added vendor/crc-fast/src/arch/x86/sse.rs +303 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides x86-specific implementations of the ArchOps trait.
4 +
//!
5 +
//! This module is designed to work with both x86 and x86_64 architectures.
6 +
//!
7 +
//! It uses the SSE4.1 instruction sets for SIMD operations.
8 +
9 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64"))]
10 +
11 +
#[cfg(target_arch = "x86")]
12 +
use core::arch::x86::*;
13 +
14 +
#[cfg(target_arch = "x86_64")]
15 +
use core::arch::x86_64::*;
16 +
17 +
use crate::traits::ArchOps;
18 +
19 +
// Tier-specific ArchOps implementations for x86/x86_64
20 +
21 +
/// Base x86/x86_64 SSE+PCLMULQDQ implementation - baseline performance for both architectures
22 +
/// Uses SSE4.1 and PCLMULQDQ instructions
23 +
#[derive(Debug, Copy, Clone)]
24 +
pub struct X86SsePclmulqdqOps;
25 +
26 +
// Base implementation for x86/x86_64 SSE+PCLMULQDQ tier
27 +
impl ArchOps for X86SsePclmulqdqOps {
28 +
    type Vector = __m128i;
29 +
30 +
    #[inline]
31 +
    #[target_feature(enable = "sse2")]
32 +
    unsafe fn create_vector_from_u64_pair(
33 +
        &self,
34 +
        high: u64,
35 +
        low: u64,
36 +
        reflected: bool,
37 +
    ) -> Self::Vector {
38 +
        // Note order is different from AArch64
39 +
        if reflected {
40 +
            self.set_epi64x(low, high)
41 +
        } else {
42 +
            self.set_epi64x(high, low)
43 +
        }
44 +
    }
45 +
46 +
    #[inline]
47 +
    #[target_feature(enable = "sse2")]
48 +
    unsafe fn create_vector_from_u64_pair_non_reflected(
49 +
        &self,
50 +
        high: u64,
51 +
        low: u64,
52 +
    ) -> Self::Vector {
53 +
        // Note order is different from AArch64
54 +
        self.set_epi64x(high, low)
55 +
    }
56 +
57 +
    #[inline]
58 +
    #[target_feature(enable = "sse4.1")]
59 +
    unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector {
60 +
        self.create_u64_vector(value, high)
61 +
    }
62 +
63 +
    #[inline]
64 +
    #[target_feature(enable = "sse2")]
65 +
    unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] {
66 +
        [self.extract_u64_low(vector), self.extract_u64_high(vector)]
67 +
    }
68 +
69 +
    #[inline]
70 +
    #[target_feature(enable = "sse2")]
71 +
    unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] {
72 +
        // On x86, poly64s and u64s extraction is the same
73 +
        self.extract_u64s(vector)
74 +
    }
75 +
76 +
    #[inline]
77 +
    #[target_feature(enable = "sse2")]
78 +
    unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
79 +
        _mm_xor_si128(a, b)
80 +
    }
81 +
82 +
    #[inline]
83 +
    #[target_feature(enable = "sse2")]
84 +
    unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector {
85 +
        _mm_loadu_si128(ptr as *const __m128i)
86 +
    }
87 +
88 +
    #[inline]
89 +
    #[target_feature(enable = "sse2")]
90 +
    unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector {
91 +
        _mm_loadu_si128(ptr as *const __m128i)
92 +
    }
93 +
94 +
    #[inline]
95 +
    #[target_feature(enable = "ssse3")]
96 +
    unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector {
97 +
        _mm_shuffle_epi8(data, mask)
98 +
    }
99 +
100 +
    #[inline]
101 +
    #[target_feature(enable = "sse4.1")]
102 +
    unsafe fn blend_vectors(
103 +
        &self,
104 +
        a: Self::Vector,
105 +
        b: Self::Vector,
106 +
        mask: Self::Vector,
107 +
    ) -> Self::Vector {
108 +
        _mm_blendv_epi8(a, b, mask)
109 +
    }
110 +
111 +
    #[inline]
112 +
    #[target_feature(enable = "sse2")]
113 +
    unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector {
114 +
        _mm_slli_si128(vector, 8)
115 +
    }
116 +
117 +
    #[inline]
118 +
    #[target_feature(enable = "sse2")]
119 +
    unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector {
120 +
        _mm_set1_epi8(value as i8)
121 +
    }
122 +
123 +
    #[inline(always)]
124 +
    unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector {
125 +
        // On x86, MSB is already used for blending, so we just return the vector
126 +
        vector
127 +
    }
128 +
129 +
    #[inline]
130 +
    #[target_feature(enable = "sse2")]
131 +
    unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
132 +
        _mm_and_si128(a, b)
133 +
    }
134 +
135 +
    #[inline]
136 +
    #[target_feature(enable = "sse2")]
137 +
    unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector {
138 +
        _mm_srli_si128(vector, 4)
139 +
    }
140 +
141 +
    #[inline]
142 +
    #[target_feature(enable = "sse2")]
143 +
    unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector {
144 +
        _mm_slli_si128(vector, 4)
145 +
    }
146 +
147 +
    #[inline]
148 +
    #[target_feature(enable = "sse4.1")]
149 +
    unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector {
150 +
        if high {
151 +
            _mm_insert_epi32(_mm_set1_epi32(0), value as i32, 3)
152 +
        } else {
153 +
            _mm_set_epi32(0, 0, 0, value as i32)
154 +
        }
155 +
    }
156 +
157 +
    #[inline]
158 +
    #[target_feature(enable = "sse2")]
159 +
    unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector {
160 +
        _mm_slli_si128(vector, 4)
161 +
    }
162 +
163 +
    #[inline]
164 +
    #[target_feature(enable = "sse2")]
165 +
    unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector {
166 +
        _mm_srli_si128(vector, 4)
167 +
    }
168 +
169 +
    #[inline]
170 +
    #[target_feature(enable = "sse2")]
171 +
    unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector {
172 +
        _mm_srli_si128(vector, 8)
173 +
    }
174 +
175 +
    #[inline]
176 +
    #[target_feature(enable = "sse2")]
177 +
    unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector {
178 +
        _mm_srli_si128(vector, 5)
179 +
    }
180 +
181 +
    #[inline]
182 +
    #[target_feature(enable = "sse2")]
183 +
    unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector {
184 +
        _mm_srli_si128(vector, 6)
185 +
    }
186 +
187 +
    #[inline]
188 +
    #[target_feature(enable = "sse2")]
189 +
    unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector {
190 +
        _mm_srli_si128(vector, 7)
191 +
    }
192 +
193 +
    #[inline]
194 +
    #[target_feature(enable = "sse2")]
195 +
    unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector {
196 +
        _mm_srli_si128(vector, 12)
197 +
    }
198 +
199 +
    #[inline]
200 +
    #[target_feature(enable = "sse2")]
201 +
    unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector {
202 +
        _mm_slli_si128(vector, 12)
203 +
    }
204 +
205 +
    #[inline]
206 +
    #[target_feature(enable = "pclmulqdq")]
207 +
    unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
208 +
        _mm_clmulepi64_si128(a, b, 0x00)
209 +
    }
210 +
211 +
    #[inline]
212 +
    #[target_feature(enable = "pclmulqdq")]
213 +
    unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
214 +
        _mm_clmulepi64_si128(a, b, 0x01)
215 +
    }
216 +
217 +
    #[inline]
218 +
    #[target_feature(enable = "pclmulqdq")]
219 +
    unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
220 +
        _mm_clmulepi64_si128(a, b, 0x10)
221 +
    }
222 +
223 +
    #[inline]
224 +
    #[target_feature(enable = "pclmulqdq")]
225 +
    unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
226 +
        _mm_clmulepi64_si128(a, b, 0x11)
227 +
    }
228 +
229 +
    #[inline]
230 +
    #[target_feature(enable = "sse4.1")]
231 +
    unsafe fn xor3_vectors(
232 +
        &self,
233 +
        a: Self::Vector,
234 +
        b: Self::Vector,
235 +
        c: Self::Vector,
236 +
    ) -> Self::Vector {
237 +
        // SSE tier always uses two XOR operations
238 +
        _mm_xor_si128(_mm_xor_si128(a, b), c)
239 +
    }
240 +
}
241 +
242 +
impl X86SsePclmulqdqOps {
243 +
    #[inline]
244 +
    #[target_feature(enable = "sse2")]
245 +
    unsafe fn set_epi64x(&self, e1: u64, e0: u64) -> __m128i {
246 +
        #[cfg(target_arch = "x86_64")]
247 +
        {
248 +
            _mm_set_epi64x(e1 as i64, e0 as i64)
249 +
        }
250 +
251 +
        #[cfg(target_arch = "x86")]
252 +
        {
253 +
            // _mm_set_epi32 takes (highest, higher, lower, lowest)
254 +
            // We need to ensure e0 is in the lower 64 bits and e1 in the higher 64 bits
255 +
            let lo = _mm_set_epi32(0, 0, (e0 >> 32) as i32, e0 as i32);
256 +
            let hi = _mm_set_epi32(0, 0, (e1 >> 32) as i32, e1 as i32);
257 +
258 +
            _mm_unpacklo_epi64(lo, hi)
259 +
        }
260 +
    }
261 +
262 +
    #[inline]
263 +
    #[target_feature(enable = "sse4.1")]
264 +
    unsafe fn create_u64_vector(&self, value: u64, high: bool) -> __m128i {
265 +
        if high {
266 +
            self.set_epi64x(value, 0)
267 +
        } else {
268 +
            self.set_epi64x(0, value)
269 +
        }
270 +
    }
271 +
272 +
    #[inline]
273 +
    #[target_feature(enable = "sse2")]
274 +
    unsafe fn extract_u64_low(&self, v: __m128i) -> u64 {
275 +
        #[cfg(target_arch = "x86_64")]
276 +
        {
277 +
            _mm_cvtsi128_si64(v) as u64
278 +
        }
279 +
280 +
        #[cfg(target_arch = "x86")]
281 +
        {
282 +
            let lo = _mm_cvtsi128_si32(v) as u32 as u64;
283 +
            let hi = _mm_cvtsi128_si32(_mm_srli_si128(v, 4)) as u32 as u64;
284 +
            lo | (hi << 32)
285 +
        }
286 +
    }
287 +
288 +
    #[inline]
289 +
    #[target_feature(enable = "sse2")]
290 +
    unsafe fn extract_u64_high(&self, v: __m128i) -> u64 {
291 +
        #[cfg(target_arch = "x86_64")]
292 +
        {
293 +
            _mm_cvtsi128_si64(_mm_srli_si128(v, 8)) as u64
294 +
        }
295 +
296 +
        #[cfg(target_arch = "x86")]
297 +
        {
298 +
            let lo = _mm_cvtsi128_si32(_mm_srli_si128(v, 8)) as u32 as u64;
299 +
            let hi = _mm_cvtsi128_si32(_mm_srli_si128(v, 12)) as u32 as u64;
300 +
            lo | (hi << 32)
301 +
        }
302 +
    }
303 +
}
added vendor/crc-fast/src/arch/x86_64/avx512.rs +205 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides x86_64-specific implementations of the ArchOps trait.
4 +
//!
5 +
//! It uses the AVX-512 instruction sets for SIMD operations.
6 +
7 +
#![cfg(target_arch = "x86_64")]
8 +
9 +
use crate::arch::x86::sse::X86SsePclmulqdqOps;
10 +
use crate::traits::ArchOps;
11 +
use std::arch::x86_64::*;
12 +
13 +
/// x86_64-only AVX512+PCLMULQDQ tier - delegates to SSE tier and overrides XOR3 operations
14 +
/// Uses AVX512 ternary logic for XOR3 operations with PCLMULQDQ
15 +
#[derive(Debug, Copy, Clone)]
16 +
pub struct X86_64Avx512PclmulqdqOps(X86SsePclmulqdqOps);
17 +
18 +
impl Default for X86_64Avx512PclmulqdqOps {
19 +
    fn default() -> Self {
20 +
        Self::new()
21 +
    }
22 +
}
23 +
24 +
impl X86_64Avx512PclmulqdqOps {
25 +
    #[inline(always)]
26 +
    pub fn new() -> Self {
27 +
        Self(X86SsePclmulqdqOps)
28 +
    }
29 +
}
30 +
31 +
impl ArchOps for X86_64Avx512PclmulqdqOps {
32 +
    type Vector = __m128i;
33 +
34 +
    // Delegate all methods to the base SSE implementation
35 +
    #[inline(always)]
36 +
    unsafe fn create_vector_from_u64_pair(
37 +
        &self,
38 +
        high: u64,
39 +
        low: u64,
40 +
        reflected: bool,
41 +
    ) -> Self::Vector {
42 +
        self.0.create_vector_from_u64_pair(high, low, reflected)
43 +
    }
44 +
45 +
    #[inline(always)]
46 +
    unsafe fn create_vector_from_u64_pair_non_reflected(
47 +
        &self,
48 +
        high: u64,
49 +
        low: u64,
50 +
    ) -> Self::Vector {
51 +
        self.0.create_vector_from_u64_pair_non_reflected(high, low)
52 +
    }
53 +
54 +
    #[inline(always)]
55 +
    unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector {
56 +
        self.0.create_vector_from_u64(value, high)
57 +
    }
58 +
59 +
    #[inline(always)]
60 +
    unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] {
61 +
        self.0.extract_u64s(vector)
62 +
    }
63 +
64 +
    #[inline(always)]
65 +
    unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] {
66 +
        self.0.extract_poly64s(vector)
67 +
    }
68 +
69 +
    #[inline(always)]
70 +
    unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
71 +
        self.0.xor_vectors(a, b)
72 +
    }
73 +
74 +
    #[inline(always)]
75 +
    unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector {
76 +
        self.0.load_bytes(ptr)
77 +
    }
78 +
79 +
    #[inline(always)]
80 +
    unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector {
81 +
        self.0.load_aligned(ptr)
82 +
    }
83 +
84 +
    #[inline(always)]
85 +
    unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector {
86 +
        self.0.shuffle_bytes(data, mask)
87 +
    }
88 +
89 +
    #[inline(always)]
90 +
    unsafe fn blend_vectors(
91 +
        &self,
92 +
        a: Self::Vector,
93 +
        b: Self::Vector,
94 +
        mask: Self::Vector,
95 +
    ) -> Self::Vector {
96 +
        self.0.blend_vectors(a, b, mask)
97 +
    }
98 +
99 +
    #[inline(always)]
100 +
    unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector {
101 +
        self.0.shift_left_8(vector)
102 +
    }
103 +
104 +
    #[inline(always)]
105 +
    unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector {
106 +
        self.0.set_all_bytes(value)
107 +
    }
108 +
109 +
    #[inline(always)]
110 +
    unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector {
111 +
        self.0.create_compare_mask(vector)
112 +
    }
113 +
114 +
    #[inline(always)]
115 +
    unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
116 +
        self.0.and_vectors(a, b)
117 +
    }
118 +
119 +
    #[inline(always)]
120 +
    unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector {
121 +
        self.0.shift_right_32(vector)
122 +
    }
123 +
124 +
    #[inline(always)]
125 +
    unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector {
126 +
        self.0.shift_left_32(vector)
127 +
    }
128 +
129 +
    #[inline(always)]
130 +
    unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector {
131 +
        self.0.create_vector_from_u32(value, high)
132 +
    }
133 +
134 +
    #[inline(always)]
135 +
    unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector {
136 +
        self.0.shift_left_4(vector)
137 +
    }
138 +
139 +
    #[inline(always)]
140 +
    unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector {
141 +
        self.0.shift_right_4(vector)
142 +
    }
143 +
144 +
    #[inline(always)]
145 +
    unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector {
146 +
        self.0.shift_right_8(vector)
147 +
    }
148 +
149 +
    #[inline(always)]
150 +
    unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector {
151 +
        self.0.shift_right_5(vector)
152 +
    }
153 +
154 +
    #[inline(always)]
155 +
    unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector {
156 +
        self.0.shift_right_6(vector)
157 +
    }
158 +
159 +
    #[inline(always)]
160 +
    unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector {
161 +
        self.0.shift_right_7(vector)
162 +
    }
163 +
164 +
    #[inline(always)]
165 +
    unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector {
166 +
        self.0.shift_right_12(vector)
167 +
    }
168 +
169 +
    #[inline(always)]
170 +
    unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector {
171 +
        self.0.shift_left_12(vector)
172 +
    }
173 +
174 +
    #[inline(always)]
175 +
    unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
176 +
        self.0.carryless_mul_00(a, b)
177 +
    }
178 +
179 +
    #[inline(always)]
180 +
    unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
181 +
        self.0.carryless_mul_01(a, b)
182 +
    }
183 +
184 +
    #[inline(always)]
185 +
    unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
186 +
        self.0.carryless_mul_10(a, b)
187 +
    }
188 +
189 +
    #[inline(always)]
190 +
    unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
191 +
        self.0.carryless_mul_11(a, b)
192 +
    }
193 +
194 +
    #[inline]
195 +
    #[target_feature(enable = "avx512vl")]
196 +
    unsafe fn xor3_vectors(
197 +
        &self,
198 +
        a: Self::Vector,
199 +
        b: Self::Vector,
200 +
        c: Self::Vector,
201 +
    ) -> Self::Vector {
202 +
        // AVX512 tier always uses ternary logic
203 +
        _mm_ternarylogic_epi64(a, b, c, 0x96) // XOR3 operation
204 +
    }
205 +
}
added vendor/crc-fast/src/arch/x86_64/avx512_vpclmulqdq.rs +616 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides AVX-512 and VPCLMULQDQ-specific implementations of the ArchOps trait.
4 +
//!
5 +
//! It performs folding using 4 x ZMM registers of 512-bits each.
6 +
7 +
#![cfg(target_arch = "x86_64")]
8 +
9 +
use crate::arch::x86::sse::X86SsePclmulqdqOps;
10 +
use crate::enums::Reflector;
11 +
use crate::structs::CrcState;
12 +
use crate::traits::{ArchOps, EnhancedCrcWidth};
13 +
use core::arch::x86_64::*;
14 +
use core::ops::BitXor;
15 +
16 +
/// Implements the ArchOps trait using 512-bit AVX-512 and VPCLMULQDQ instructions at 512 bits.
17 +
/// Delegates to X86SsePclmulqdqOps for standard 128-bit operations
18 +
#[derive(Debug, Copy, Clone)]
19 +
pub struct X86_64Avx512VpclmulqdqOps(X86SsePclmulqdqOps);
20 +
21 +
impl Default for X86_64Avx512VpclmulqdqOps {
22 +
    fn default() -> Self {
23 +
        Self::new()
24 +
    }
25 +
}
26 +
27 +
impl X86_64Avx512VpclmulqdqOps {
28 +
    #[inline(always)]
29 +
    pub fn new() -> Self {
30 +
        Self(X86SsePclmulqdqOps)
31 +
    }
32 +
}
33 +
34 +
// Wrapper for __m512i to make it easier to work with
35 +
#[derive(Debug, Copy, Clone)]
36 +
struct Simd512(__m512i);
37 +
38 +
impl Simd512 {
39 +
    #[inline]
40 +
    #[target_feature(enable = "avx512f")]
41 +
    #[allow(clippy::too_many_arguments)]
42 +
    unsafe fn new(x7: u64, x6: u64, x5: u64, x4: u64, x3: u64, x2: u64, x1: u64, x0: u64) -> Self {
43 +
        Self(_mm512_set_epi64(
44 +
            x7 as i64, x6 as i64, x5 as i64, x4 as i64, x3 as i64, x2 as i64, x1 as i64, x0 as i64,
45 +
        ))
46 +
    }
47 +
48 +
    #[inline]
49 +
    #[target_feature(enable = "avx512vl,vpclmulqdq")]
50 +
    unsafe fn fold_64(&self, coeff: &Self, new_data: &Self) -> Self {
51 +
        // Use 512-bit ternary logic XOR3 with carryless multiplication
52 +
        Self(_mm512_ternarylogic_epi64(
53 +
            _mm512_clmulepi64_epi128(self.0, coeff.0, 0), // Low parts
54 +
            _mm512_clmulepi64_epi128(self.0, coeff.0, 17), // High parts
55 +
            new_data.0,
56 +
            0x96, // XOR3 operation
57 +
        ))
58 +
    }
59 +
60 +
    #[cfg(feature = "std")]
61 +
    #[inline]
62 +
    #[target_feature(enable = "avx512f")]
63 +
    unsafe fn extract_u64s(&self) -> [u64; 8] {
64 +
        let mut result = [0u64; 8];
65 +
        _mm512_storeu_si512(result.as_mut_ptr().cast(), self.0);
66 +
67 +
        result
68 +
    }
69 +
70 +
    #[inline]
71 +
    #[target_feature(enable = "avx512f")]
72 +
    unsafe fn load_from_ptr(ptr: *const u8) -> Self {
73 +
        Self(_mm512_loadu_si512(ptr as *const __m512i))
74 +
    }
75 +
76 +
    #[inline]
77 +
    #[target_feature(enable = "avx512f")]
78 +
    unsafe fn to_128i_extract<const INDEX: i32>(self) -> __m128i {
79 +
        _mm512_extracti32x4_epi32(self.0, INDEX)
80 +
    }
81 +
82 +
    #[inline]
83 +
    #[target_feature(enable = "avx512f")]
84 +
    unsafe fn xor(&self, other: &Self) -> Self {
85 +
        Self(_mm512_xor_si512(self.0, other.0))
86 +
    }
87 +
88 +
    #[cfg(feature = "std")]
89 +
    #[inline]
90 +
    #[target_feature(enable = "avx512f")]
91 +
    #[allow(unused)]
92 +
    unsafe fn print_hex(&self, prefix: &str) {
93 +
        let values = self.extract_u64s();
94 +
        println!(
95 +
            "{}={:#016x}_{:016x}_{:016x}_{:016x}_{:016x}_{:016x}_{:016x}_{:016x}",
96 +
            prefix,
97 +
            values[7],
98 +
            values[6],
99 +
            values[5],
100 +
            values[4],
101 +
            values[3],
102 +
            values[2],
103 +
            values[1],
104 +
            values[0]
105 +
        );
106 +
    }
107 +
}
108 +
109 +
impl X86_64Avx512VpclmulqdqOps {
110 +
    /// Process aligned blocks using VPCLMULQDQ with 4 x 512-bit registers
111 +
    ///
112 +
    /// Note that #[inline(always)] loses the inlining performance boost, despite no native
113 +
    /// target_features being used directly. Odd since that's not how Rust's docs make it sound...
114 +
    #[inline]
115 +
    #[target_feature(enable = "avx512vl,avx512bw,vpclmulqdq")]
116 +
    unsafe fn process_blocks<W: EnhancedCrcWidth>(
117 +
        &self,
118 +
        state: &mut CrcState<<X86_64Avx512VpclmulqdqOps as ArchOps>::Vector>,
119 +
        first: &[__m128i; 8],
120 +
        rest: &[[__m128i; 8]],
121 +
        keys: &[u64; 23],
122 +
        reflected: bool,
123 +
    ) -> W::Value
124 +
    where
125 +
        W::Value: Copy + BitXor<Output = W::Value>,
126 +
    {
127 +
        let state_u64s = self.extract_u64s(state.value);
128 +
129 +
        let positioned_state = if reflected {
130 +
            Simd512::new(0, 0, 0, 0, 0, 0, 0, state_u64s[0])
131 +
        } else {
132 +
            Simd512::new(state_u64s[1], 0, 0, 0, 0, 0, 0, 0)
133 +
        };
134 +
135 +
        let reflector = create_reflector512(reflected);
136 +
137 +
        // Load first 256 bytes (2nd half is rest[0] since these are 128-byte blocks)
138 +
        let first_ptr = first.as_ptr() as *const u8;
139 +
        let first_rest_ptr = rest[0].as_ptr() as *const u8;
140 +
141 +
        let mut x = [
142 +
            reflect_bytes512(&reflector, Simd512::load_from_ptr(first_ptr)),
143 +
            reflect_bytes512(&reflector, Simd512::load_from_ptr(first_ptr.add(64))),
144 +
            reflect_bytes512(&reflector, Simd512::load_from_ptr(first_rest_ptr)),
145 +
            reflect_bytes512(&reflector, Simd512::load_from_ptr(first_rest_ptr.add(64))),
146 +
        ];
147 +
148 +
        x[0] = positioned_state.xor(&x[0]);
149 +
150 +
        let coeff = self.create_avx512_256byte_coefficient(keys, reflected);
151 +
152 +
        let remaining_rest = &rest[1..];
153 +
        let pair_count = remaining_rest.len() / 2;
154 +
155 +
        for i in 0..pair_count {
156 +
            let block1_ptr = remaining_rest[i * 2].as_ptr() as *const u8;
157 +
            let block2_ptr = remaining_rest[i * 2 + 1].as_ptr() as *const u8;
158 +
159 +
            x[0] = x[0].fold_64(
160 +
                &coeff,
161 +
                &reflect_bytes512(&reflector, Simd512::load_from_ptr(block1_ptr)),
162 +
            );
163 +
            x[1] = x[1].fold_64(
164 +
                &coeff,
165 +
                &reflect_bytes512(&reflector, Simd512::load_from_ptr(block1_ptr.add(64))),
166 +
            );
167 +
            x[2] = x[2].fold_64(
168 +
                &coeff,
169 +
                &reflect_bytes512(&reflector, Simd512::load_from_ptr(block2_ptr)),
170 +
            );
171 +
            x[3] = x[3].fold_64(
172 +
                &coeff,
173 +
                &reflect_bytes512(&reflector, Simd512::load_from_ptr(block2_ptr.add(64))),
174 +
            );
175 +
        }
176 +
177 +
        let processed_pairs = pair_count * 2;
178 +
        let remaining_single_count = remaining_rest.len() - processed_pairs;
179 +
180 +
        if remaining_single_count > 0 {
181 +
            // We have 1 unprocessed block (128 bytes)
182 +
            // Fold 4×512 down to 2×512 and process the remaining block with 2-register mode
183 +
            let folded_2reg = self.fold_from_4x512_to_2x256(x, keys, reflected);
184 +
            let coeff_2reg = self.create_avx512_128byte_coefficient(keys, reflected);
185 +
186 +
            let last_block_ptr = remaining_rest[processed_pairs].as_ptr() as *const u8;
187 +
188 +
            let final_x = [
189 +
                folded_2reg[0].fold_64(
190 +
                    &coeff_2reg,
191 +
                    &reflect_bytes512(&reflector, Simd512::load_from_ptr(last_block_ptr)),
192 +
                ),
193 +
                folded_2reg[1].fold_64(
194 +
                    &coeff_2reg,
195 +
                    &reflect_bytes512(&reflector, Simd512::load_from_ptr(last_block_ptr.add(64))),
196 +
                ),
197 +
            ];
198 +
199 +
            let folded = self.fold_from_2x512_to_1x128(final_x, keys, reflected);
200 +
201 +
            return W::perform_final_reduction(folded, reflected, keys, self);
202 +
        }
203 +
204 +
        // All blocks processed in pairs - fold from 4 x 512-bit to 1 x 128-bit
205 +
        let folded = self.fold_from_4x512_to_1x128(x, keys, reflected);
206 +
207 +
        W::perform_final_reduction(folded, reflected, keys, self)
208 +
    }
209 +
210 +
    /// Create a folding coefficient for AVX-512 for 128-byte folding distances
211 +
    #[inline(always)]
212 +
    unsafe fn create_avx512_128byte_coefficient(
213 +
        &self,
214 +
        keys: &[u64; 23],
215 +
        reflected: bool,
216 +
    ) -> Simd512 {
217 +
        let (k1, k2) = if reflected {
218 +
            (keys[3], keys[4])
219 +
        } else {
220 +
            (keys[4], keys[3])
221 +
        };
222 +
223 +
        // Replicate the coefficient pair
224 +
        Simd512::new(k1, k2, k1, k2, k1, k2, k1, k2)
225 +
    }
226 +
227 +
    /// Create a folding coefficient for AVX-512 for 256-byte folding distances
228 +
    #[inline(always)]
229 +
    unsafe fn create_avx512_256byte_coefficient(
230 +
        &self,
231 +
        keys: &[u64; 23],
232 +
        reflected: bool,
233 +
    ) -> Simd512 {
234 +
        let (k1, k2) = if reflected {
235 +
            (keys[21], keys[22])
236 +
        } else {
237 +
            (keys[22], keys[21])
238 +
        };
239 +
240 +
        // Replicate the coefficient pair
241 +
        Simd512::new(k1, k2, k1, k2, k1, k2, k1, k2)
242 +
    }
243 +
244 +
    /// Fold from 4 x 512-bit to 1 x 128-bit
245 +
    #[inline(always)]
246 +
    unsafe fn fold_from_4x512_to_1x128(
247 +
        &self,
248 +
        x: [Simd512; 4],
249 +
        keys: &[u64; 23],
250 +
        reflected: bool,
251 +
    ) -> __m128i {
252 +
        // Step 1: Fold 4 x 512-bit to 2 x 512-bit
253 +
        let x2 = self.fold_from_4x512_to_2x256(x, keys, reflected);
254 +
255 +
        // Step 2: Fold 2 x 512-bit to 1 x 128-bit
256 +
        self.fold_from_2x512_to_1x128(x2, keys, reflected)
257 +
    }
258 +
259 +
    /// Fold from 4 x 512-bit to 2 x 512-bit
260 +
    #[inline(always)]
261 +
    unsafe fn fold_from_4x512_to_2x256(
262 +
        &self,
263 +
        x: [Simd512; 4],
264 +
        keys: &[u64; 23],
265 +
        reflected: bool,
266 +
    ) -> [Simd512; 2] {
267 +
        // This folds registers that are 128 bytes apart (x[0] with x[2], x[1] with x[3])
268 +
        let coeff = self.create_avx512_128byte_coefficient(keys, reflected);
269 +
270 +
        // Fold pairs:
271 +
        // x[0] (bytes 0-63) + x[2] (bytes 128-191) → result[0]
272 +
        // x[1] (bytes 64-127) + x[3] (bytes 192-255) → result[1]
273 +
        [x[0].fold_64(&coeff, &x[2]), x[1].fold_64(&coeff, &x[3])]
274 +
    }
275 +
276 +
    /// Fold from 2 x 512-bit to 1 x 128-bit
277 +
    #[inline(always)]
278 +
    unsafe fn fold_from_2x512_to_1x128(
279 +
        &self,
280 +
        x: [Simd512; 2],
281 +
        keys: &[u64; 23],
282 +
        reflected: bool,
283 +
    ) -> __m128i {
284 +
        // Create the fold coefficients for different distances
285 +
        let fold_coefficients = [
286 +
            self.create_vector_from_u64_pair(keys[10], keys[9], reflected), // 112 bytes
287 +
            self.create_vector_from_u64_pair(keys[12], keys[11], reflected), // 96 bytes
288 +
            self.create_vector_from_u64_pair(keys[14], keys[13], reflected), // 80 bytes
289 +
            self.create_vector_from_u64_pair(keys[16], keys[15], reflected), // 64 bytes
290 +
            self.create_vector_from_u64_pair(keys[18], keys[17], reflected), // 48 bytes
291 +
            self.create_vector_from_u64_pair(keys[20], keys[19], reflected), // 32 bytes
292 +
            self.create_vector_from_u64_pair(keys[2], keys[1], reflected),  // 16 bytes
293 +
        ];
294 +
295 +
        // Extract the 8 x 128-bit vectors from the 2 x 512-bit vectors (this is faster than
296 +
        // using 256-bit intrinsics for 1KiB payloads)
297 +
        let v128 = if reflected {
298 +
            [
299 +
                x[0].to_128i_extract::<0>(), // 256-x0.low
300 +
                x[0].to_128i_extract::<1>(), // 256-x0.high
301 +
                x[0].to_128i_extract::<2>(), // 256-x1.low
302 +
                x[0].to_128i_extract::<3>(), // 256-x1.high
303 +
                x[1].to_128i_extract::<0>(), // 256-x2.low
304 +
                x[1].to_128i_extract::<1>(), // 256-x2.high
305 +
                x[1].to_128i_extract::<2>(), // 256-x3.low
306 +
                x[1].to_128i_extract::<3>(), // 256-x3.high
307 +
            ]
308 +
        } else {
309 +
            [
310 +
                x[0].to_128i_extract::<3>(), // 256-x1.high
311 +
                x[0].to_128i_extract::<2>(), // 256-x1.low
312 +
                x[0].to_128i_extract::<1>(), // 256-x0.high
313 +
                x[0].to_128i_extract::<0>(), // 256-x0.low
314 +
                x[1].to_128i_extract::<3>(), // 256-x3.high
315 +
                x[1].to_128i_extract::<2>(), // 256-x3.low
316 +
                x[1].to_128i_extract::<1>(), // 256-x2.high
317 +
                x[1].to_128i_extract::<0>(), // 256-x2.low
318 +
            ]
319 +
        };
320 +
321 +
        // Fold the 8 xmm registers to 1 xmm register
322 +
        let mut res = v128[7];
323 +
324 +
        for (i, &coeff) in fold_coefficients.iter().enumerate() {
325 +
            let folded_h = self.carryless_mul_00(v128[i], coeff);
326 +
            let folded_l = self.carryless_mul_11(v128[i], coeff);
327 +
            res = self.xor3_vectors(folded_h, folded_l, res);
328 +
        }
329 +
330 +
        res
331 +
    }
332 +
}
333 +
334 +
// 512-bit version of the Reflector
335 +
#[derive(Clone, Copy)]
336 +
enum Reflector512 {
337 +
    NoReflector,
338 +
    ForwardReflector { smask: Simd512 },
339 +
}
340 +
341 +
// Function to create the appropriate reflector based on CRC parameters
342 +
#[inline(always)]
343 +
unsafe fn create_reflector512(reflected: bool) -> Reflector512 {
344 +
    if reflected {
345 +
        Reflector512::NoReflector
346 +
    } else {
347 +
        // Load shuffle mask
348 +
        let smask = Simd512::new(
349 +
            0x08090a0b0c0d0e0f,
350 +
            0x0001020304050607,
351 +
            0x08090a0b0c0d0e0f,
352 +
            0x0001020304050607,
353 +
            0x08090a0b0c0d0e0f,
354 +
            0x0001020304050607,
355 +
            0x08090a0b0c0d0e0f,
356 +
            0x0001020304050607,
357 +
        );
358 +
        Reflector512::ForwardReflector { smask }
359 +
    }
360 +
}
361 +
362 +
// Function to apply reflection to a 512-bit vector
363 +
#[inline(always)]
364 +
unsafe fn reflect_bytes512(reflector: &Reflector512, data: Simd512) -> Simd512 {
365 +
    match reflector {
366 +
        Reflector512::NoReflector => data,
367 +
        Reflector512::ForwardReflector { smask } => shuffle_bytes512(data, *smask),
368 +
    }
369 +
}
370 +
371 +
// pre-compute the reverse indices for 512-bit shuffling
372 +
static REVERSE_INDICES_512: __m512i =
373 +
    unsafe { core::mem::transmute([7u64, 6u64, 5u64, 4u64, 3u64, 2u64, 1u64, 0u64]) };
374 +
375 +
// Implement a 512-bit byte shuffle function
376 +
#[inline]
377 +
#[target_feature(enable = "avx512f,avx512bw")]
378 +
unsafe fn shuffle_bytes512(data: Simd512, mask: Simd512) -> Simd512 {
379 +
    Simd512(_mm512_permutexvar_epi64(
380 +
        // Reverse the order using 512-bit permutation
381 +
        REVERSE_INDICES_512,                 // reverse indices
382 +
        _mm512_shuffle_epi8(data.0, mask.0), // shuffled data
383 +
    ))
384 +
}
385 +
386 +
// Delegate all ArchOps methods to the inner X86SsePclmulqdqOps instance
387 +
impl ArchOps for X86_64Avx512VpclmulqdqOps {
388 +
    type Vector = __m128i;
389 +
390 +
    #[inline(always)]
391 +
    unsafe fn process_enhanced_simd_blocks<W: EnhancedCrcWidth>(
392 +
        &self,
393 +
        state: &mut CrcState<Self::Vector>,
394 +
        first: &[Self::Vector; 8],
395 +
        rest: &[[Self::Vector; 8]],
396 +
        _reflector: &Reflector<Self::Vector>,
397 +
        keys: &[u64; 23],
398 +
    ) -> bool
399 +
    where
400 +
        Self::Vector: Copy,
401 +
    {
402 +
        // Update the state with the result
403 +
        *state = W::create_state(
404 +
            self.process_blocks::<W>(state, first, rest, keys, state.reflected),
405 +
            state.reflected,
406 +
            self,
407 +
        );
408 +
409 +
        // Return true to indicate we handled it
410 +
        true
411 +
    }
412 +
413 +
    // Delegate all other methods to X86SsePclmulqdqOps
414 +
    #[inline]
415 +
    #[target_feature(enable = "sse2")]
416 +
    unsafe fn create_vector_from_u64_pair(
417 +
        &self,
418 +
        high: u64,
419 +
        low: u64,
420 +
        reflected: bool,
421 +
    ) -> Self::Vector {
422 +
        self.0.create_vector_from_u64_pair(high, low, reflected)
423 +
    }
424 +
425 +
    #[inline]
426 +
    #[target_feature(enable = "sse2")]
427 +
    unsafe fn create_vector_from_u64_pair_non_reflected(
428 +
        &self,
429 +
        high: u64,
430 +
        low: u64,
431 +
    ) -> Self::Vector {
432 +
        self.0.create_vector_from_u64_pair_non_reflected(high, low)
433 +
    }
434 +
435 +
    #[inline]
436 +
    #[target_feature(enable = "sse4.1")]
437 +
    unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector {
438 +
        self.0.create_vector_from_u64(value, high)
439 +
    }
440 +
441 +
    #[inline]
442 +
    #[target_feature(enable = "sse2")]
443 +
    unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2] {
444 +
        self.0.extract_u64s(vector)
445 +
    }
446 +
447 +
    #[inline]
448 +
    #[target_feature(enable = "sse2")]
449 +
    unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2] {
450 +
        self.0.extract_poly64s(vector)
451 +
    }
452 +
453 +
    #[inline]
454 +
    #[target_feature(enable = "sse2")]
455 +
    unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
456 +
        self.0.xor_vectors(a, b)
457 +
    }
458 +
459 +
    #[inline]
460 +
    #[target_feature(enable = "sse2")]
461 +
    unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector {
462 +
        self.0.load_bytes(ptr)
463 +
    }
464 +
465 +
    #[inline]
466 +
    #[target_feature(enable = "sse2")]
467 +
    unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector {
468 +
        self.0.load_aligned(ptr)
469 +
    }
470 +
471 +
    #[inline]
472 +
    #[target_feature(enable = "ssse3")]
473 +
    unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector {
474 +
        self.0.shuffle_bytes(data, mask)
475 +
    }
476 +
477 +
    #[inline]
478 +
    #[target_feature(enable = "sse4.1")]
479 +
    unsafe fn blend_vectors(
480 +
        &self,
481 +
        a: Self::Vector,
482 +
        b: Self::Vector,
483 +
        mask: Self::Vector,
484 +
    ) -> Self::Vector {
485 +
        self.0.blend_vectors(a, b, mask)
486 +
    }
487 +
488 +
    #[inline]
489 +
    #[target_feature(enable = "sse2")]
490 +
    unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector {
491 +
        self.0.shift_left_8(vector)
492 +
    }
493 +
494 +
    #[inline]
495 +
    #[target_feature(enable = "sse2")]
496 +
    unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector {
497 +
        self.0.set_all_bytes(value)
498 +
    }
499 +
500 +
    #[inline]
501 +
    #[target_feature(enable = "sse2")]
502 +
    unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector {
503 +
        self.0.create_compare_mask(vector)
504 +
    }
505 +
506 +
    #[inline]
507 +
    #[target_feature(enable = "sse2")]
508 +
    unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
509 +
        self.0.and_vectors(a, b)
510 +
    }
511 +
512 +
    #[inline]
513 +
    #[target_feature(enable = "sse2")]
514 +
    unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector {
515 +
        self.0.shift_right_32(vector)
516 +
    }
517 +
518 +
    #[inline]
519 +
    #[target_feature(enable = "sse2")]
520 +
    unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector {
521 +
        self.0.shift_left_32(vector)
522 +
    }
523 +
524 +
    #[inline]
525 +
    #[target_feature(enable = "sse4.1")]
526 +
    unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector {
527 +
        self.0.create_vector_from_u32(value, high)
528 +
    }
529 +
530 +
    #[inline]
531 +
    #[target_feature(enable = "sse2")]
532 +
    unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector {
533 +
        self.0.shift_left_4(vector)
534 +
    }
535 +
536 +
    #[inline]
537 +
    #[target_feature(enable = "sse2")]
538 +
    unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector {
539 +
        self.0.shift_right_4(vector)
540 +
    }
541 +
542 +
    #[inline]
543 +
    #[target_feature(enable = "sse2")]
544 +
    unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector {
545 +
        self.0.shift_right_8(vector)
546 +
    }
547 +
548 +
    #[inline]
549 +
    #[target_feature(enable = "sse2")]
550 +
    unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector {
551 +
        self.0.shift_right_5(vector)
552 +
    }
553 +
554 +
    #[inline]
555 +
    #[target_feature(enable = "sse2")]
556 +
    unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector {
557 +
        self.0.shift_right_6(vector)
558 +
    }
559 +
560 +
    #[inline]
561 +
    #[target_feature(enable = "sse2")]
562 +
    unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector {
563 +
        self.0.shift_right_7(vector)
564 +
    }
565 +
566 +
    #[inline]
567 +
    #[target_feature(enable = "sse2")]
568 +
    unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector {
569 +
        self.0.shift_right_12(vector)
570 +
    }
571 +
572 +
    #[inline]
573 +
    #[target_feature(enable = "sse2")]
574 +
    unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector {
575 +
        self.0.shift_left_12(vector)
576 +
    }
577 +
578 +
    #[inline]
579 +
    #[target_feature(enable = "pclmulqdq")]
580 +
    unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
581 +
        self.0.carryless_mul_00(a, b)
582 +
    }
583 +
584 +
    #[inline]
585 +
    #[target_feature(enable = "pclmulqdq")]
586 +
    unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
587 +
        self.0.carryless_mul_01(a, b)
588 +
    }
589 +
590 +
    #[inline]
591 +
    #[target_feature(enable = "pclmulqdq")]
592 +
    unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
593 +
        self.0.carryless_mul_10(a, b)
594 +
    }
595 +
596 +
    #[inline]
597 +
    #[target_feature(enable = "pclmulqdq")]
598 +
    unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector {
599 +
        self.0.carryless_mul_11(a, b)
600 +
    }
601 +
602 +
    #[inline]
603 +
    #[target_feature(enable = "avx512vl")]
604 +
    unsafe fn xor3_vectors(
605 +
        &self,
606 +
        a: Self::Vector,
607 +
        b: Self::Vector,
608 +
        c: Self::Vector,
609 +
    ) -> Self::Vector {
610 +
        // VPCLMULQDQ implementation always uses AVX512 ternary logic
611 +
        // Feature detection is handled at the dispatch level
612 +
        _mm_ternarylogic_epi64(
613 +
            a, b, c, 0x96, // XOR3 operation
614 +
        )
615 +
    }
616 +
}
added vendor/crc-fast/src/arch/x86_64/mod.rs +8 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides x86_64-specific implementations of the ArchOps trait.
4 +
5 +
#![cfg(target_arch = "x86_64")]
6 +
7 +
pub mod avx512;
8 +
pub mod avx512_vpclmulqdq;
added vendor/crc-fast/src/bin/arch-check.rs +137 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This is a simple program that checks if the target architecture supports certain features.
4 +
5 +
#[cfg(target_arch = "aarch64")]
6 +
use std::arch::is_aarch64_feature_detected;
7 +
8 +
#[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
9 +
use std::arch::is_x86_feature_detected;
10 +
11 +
use crc_fast::get_calculator_target;
12 +
use crc_fast::CrcAlgorithm::{Crc32Iscsi, Crc32IsoHdlc, Crc64Nvme};
13 +
14 +
fn main() {
15 +
    // Check the target architecture and call the appropriate function
16 +
    #[cfg(target_arch = "aarch64")]
17 +
    aarch64_features();
18 +
19 +
    #[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
20 +
    x86_features();
21 +
22 +
    print_targets();
23 +
24 +
    print_cpu_info();
25 +
}
26 +
27 +
#[cfg(target_arch = "aarch64")]
28 +
fn aarch64_features() {
29 +
    let checkmark: char = '✓';
30 +
31 +
    println!("[AArch64] Checking for features...");
32 +
33 +
    if is_aarch64_feature_detected!("neon") {
34 +
        println!("  {checkmark} NEON",);
35 +
    } else {
36 +
        println!("  x NEON");
37 +
    }
38 +
39 +
    if is_aarch64_feature_detected!("crc") {
40 +
        println!("  {checkmark} CRC",);
41 +
    } else {
42 +
        println!("  x CRC");
43 +
    }
44 +
45 +
    if is_aarch64_feature_detected!("sha3") {
46 +
        println!("  {checkmark} SHA3\n",);
47 +
    } else {
48 +
        println!("  x SHA3\n");
49 +
    }
50 +
}
51 +
52 +
#[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
53 +
fn x86_features() {
54 +
    let checkmark: char = '✓';
55 +
56 +
    println!("[X86] Checking for features...");
57 +
58 +
    if is_x86_feature_detected!("sse2") {
59 +
        println!("  {checkmark} SSE2",);
60 +
    } else {
61 +
        println!("  x SSE2");
62 +
    }
63 +
64 +
    if is_x86_feature_detected!("sse4.1") {
65 +
        println!("  {checkmark} SSE4.1",);
66 +
    } else {
67 +
        println!("  x SSE4.1");
68 +
    }
69 +
70 +
    if is_x86_feature_detected!("pclmulqdq") {
71 +
        println!("  {checkmark} PCLMULQDQ",);
72 +
    } else {
73 +
        println!("  x PCLMULQDQ");
74 +
    }
75 +
76 +
    if is_x86_feature_detected!("avx2") {
77 +
        println!("  {checkmark} AVX2",);
78 +
    } else {
79 +
        println!("  x AVX2");
80 +
    }
81 +
82 +
    if is_x86_feature_detected!("vpclmulqdq") {
83 +
        println!("  {checkmark} VPCLMULQDQ",);
84 +
    } else {
85 +
        println!("  x VPCLMULQDQ");
86 +
    }
87 +
88 +
    if is_x86_feature_detected!("avx512f") {
89 +
        println!("  {checkmark} AVX512F",);
90 +
    } else {
91 +
        println!("  x AVX512F");
92 +
    }
93 +
94 +
    if is_x86_feature_detected!("avx512vl") {
95 +
        println!("  {checkmark} AVX512VL\n",);
96 +
    } else {
97 +
        println!("  x AVX512VL\n");
98 +
    }
99 +
}
100 +
101 +
/// Print the acceleration targets
102 +
fn print_targets() {
103 +
    let checkmark: char = '✓';
104 +
105 +
    println!("[Acceleration targets]");
106 +
107 +
    println!(
108 +
        "  {} CRC-32/ISCSI target: {}",
109 +
        checkmark,
110 +
        get_calculator_target(Crc32Iscsi)
111 +
    );
112 +
    println!(
113 +
        "  {} CRC-32/ISO-HDLC target: {}",
114 +
        checkmark,
115 +
        get_calculator_target(Crc32IsoHdlc)
116 +
    );
117 +
    println!(
118 +
        "  {} CRC-64/NVME target: {}\n",
119 +
        checkmark,
120 +
        get_calculator_target(Crc64Nvme)
121 +
    );
122 +
}
123 +
124 +
/// Print the first entry of /proc/cpuinfo if it's available
125 +
fn print_cpu_info() {
126 +
    println!("\n[CPU Info]");
127 +
    if let Ok(cpuinfo) = std::fs::read_to_string("/proc/cpuinfo") {
128 +
        // Split the content by double newlines and take the first entry
129 +
        if let Some(first_cpu) = cpuinfo.split("\n\n").next() {
130 +
            println!("{first_cpu}",);
131 +
        } else {
132 +
            println!("No CPU information found.");
133 +
        }
134 +
    } else {
135 +
        println!("Failed to read /proc/cpuinfo. This may not be available on your platform.\n");
136 +
    }
137 +
}
added vendor/crc-fast/src/bin/checksum.rs +732 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This is a simple program to calculate a checksum from the command line
4 +
5 +
use crc_fast::{checksum, checksum_file, CrcAlgorithm};
6 +
use std::env;
7 +
use std::process::ExitCode;
8 +
use std::str::FromStr;
9 +
10 +
#[derive(Debug)]
11 +
struct Config {
12 +
    algorithm: String,
13 +
    file: Option<String>,
14 +
    string: Option<String>,
15 +
    format: OutputFormat,
16 +
    benchmark: Option<BenchmarkConfig>,
17 +
}
18 +
19 +
#[derive(Debug)]
20 +
struct BenchmarkConfig {
21 +
    size: Option<usize>,
22 +
    duration: f64,
23 +
}
24 +
25 +
#[derive(Debug)]
26 +
enum BenchmarkData {
27 +
    InMemory(Vec<u8>),
28 +
    File(String),
29 +
}
30 +
31 +
#[derive(Debug)]
32 +
struct BenchmarkRunner {
33 +
    algorithm: CrcAlgorithm,
34 +
    data: BenchmarkData,
35 +
    duration: f64,
36 +
}
37 +
38 +
#[derive(Debug)]
39 +
struct BenchmarkResult {
40 +
    iterations: u64,
41 +
    elapsed_seconds: f64,
42 +
    throughput_gibs: f64,
43 +
    time_per_iteration_nanos: f64,
44 +
    acceleration_target: String,
45 +
    data_size: u64,
46 +
}
47 +
48 +
#[derive(Debug, Clone)]
49 +
enum OutputFormat {
50 +
    Hex,
51 +
    Decimal,
52 +
}
53 +
54 +
impl BenchmarkConfig {
55 +
    fn validate(&self) -> Result<(), String> {
56 +
        if self.duration <= 0.0 {
57 +
            return Err("Duration must be greater than 0".to_string());
58 +
        }
59 +
60 +
        if let Some(size) = self.size {
61 +
            if size == 0 {
62 +
                return Err("Size must be greater than 0".to_string());
63 +
            }
64 +
        }
65 +
66 +
        Ok(())
67 +
    }
68 +
}
69 +
70 +
impl BenchmarkRunner {
71 +
    fn new(algorithm: CrcAlgorithm, data: BenchmarkData, duration: f64) -> Self {
72 +
        Self {
73 +
            algorithm,
74 +
            data,
75 +
            duration,
76 +
        }
77 +
    }
78 +
79 +
    fn run(&self) -> Result<BenchmarkResult, String> {
80 +
        use std::time::Instant;
81 +
82 +
        let start = Instant::now();
83 +
        let mut iterations = 0u64;
84 +
85 +
        while start.elapsed().as_secs_f64() < self.duration {
86 +
            match &self.data {
87 +
                BenchmarkData::InMemory(data) => {
88 +
                    std::hint::black_box(checksum(self.algorithm, data));
89 +
                }
90 +
                BenchmarkData::File(filename) => {
91 +
                    match checksum_file(self.algorithm, filename, None) {
92 +
                        Ok(result) => {
93 +
                            std::hint::black_box(result);
94 +
                        }
95 +
                        Err(e) => {
96 +
                            return Err(format!("Failed to read file during benchmark: {}", e));
97 +
                        }
98 +
                    }
99 +
                }
100 +
            }
101 +
            iterations += 1;
102 +
        }
103 +
104 +
        let elapsed = start.elapsed().as_secs_f64();
105 +
        let data_size = match &self.data {
106 +
            BenchmarkData::InMemory(data) => data.len() as u64,
107 +
            BenchmarkData::File(filename) => std::fs::metadata(filename)
108 +
                .map(|m| m.len())
109 +
                .map_err(|e| format!("Failed to get file size: {}", e))?,
110 +
        };
111 +
112 +
        let acceleration_target = crc_fast::get_calculator_target(self.algorithm);
113 +
114 +
        Ok(BenchmarkResult::new(
115 +
            iterations,
116 +
            elapsed,
117 +
            acceleration_target,
118 +
            data_size,
119 +
        ))
120 +
    }
121 +
}
122 +
123 +
impl BenchmarkResult {
124 +
    fn new(
125 +
        iterations: u64,
126 +
        elapsed_seconds: f64,
127 +
        acceleration_target: String,
128 +
        data_size: u64,
129 +
    ) -> Self {
130 +
        let throughput_gibs = if elapsed_seconds > 0.0 {
131 +
            (data_size as f64 * iterations as f64) / elapsed_seconds / (1024.0 * 1024.0 * 1024.0)
132 +
        } else {
133 +
            0.0
134 +
        };
135 +
136 +
        let time_per_iteration_nanos = if iterations > 0 {
137 +
            elapsed_seconds * 1_000_000_000.0 / iterations as f64
138 +
        } else {
139 +
            0.0
140 +
        };
141 +
142 +
        Self {
143 +
            iterations,
144 +
            elapsed_seconds,
145 +
            throughput_gibs,
146 +
            time_per_iteration_nanos,
147 +
            acceleration_target,
148 +
            data_size,
149 +
        }
150 +
    }
151 +
}
152 +
153 +
/// Fills a buffer with pseudo-random data using xorshift64* algorithm.
154 +
/// This is a deterministic PRNG that's tiny, fast, and suitable for benchmark data generation.
155 +
/// The seed is derived from the buffer size to provide some variability.
156 +
/// This solves the problem of having to use a full-featured PRNG like rand for benchmark data generation.
157 +
#[inline]
158 +
fn fill_pseudo_random(buf: &mut [u8], seed: u64) {
159 +
    let mut x = seed;
160 +
    for b in buf {
161 +
        x ^= x >> 12;
162 +
        x ^= x << 25;
163 +
        x ^= x >> 27;
164 +
        let r = x.wrapping_mul(0x2545_F491_4F6C_DD1D);
165 +
        *b = r as u8;
166 +
    }
167 +
}
168 +
169 +
fn generate_random_data(size: usize) -> Result<Vec<u8>, String> {
170 +
    // Check for reasonable size limits to prevent memory issues
171 +
    if size > 1_073_741_824 {
172 +
        // 1 GiB limit
173 +
        return Err("Data size too large (maximum 1 GiB)".to_string());
174 +
    }
175 +
176 +
    // Use vec! macro to avoid clippy warning about slow initialization
177 +
    let mut buf = vec![0u8; size];
178 +
179 +
    // Derive seed from size for deterministic but varied data
180 +
    let seed = 0x9E37_79B9_7F4A_7C15_u64.wrapping_add(size as u64);
181 +
    fill_pseudo_random(&mut buf, seed);
182 +
183 +
    Ok(buf)
184 +
}
185 +
186 +
fn print_usage() {
187 +
    println!("Usage: checksum -a algorithm [-f file] [-s string] [--format hex|decimal]");
188 +
    println!(
189 +
        "       checksum -a algorithm -b [--size bytes] [--duration seconds] [-f file] [-s string]"
190 +
    );
191 +
    println!();
192 +
    println!("Example: checksum -a CRC-32/ISCSI -f myfile.txt");
193 +
    println!("Example: checksum -a CRC-64/NVME -s 'Hello, world!' --format decimal");
194 +
    println!("Example: checksum -a CRC-32/ISCSI -b --size 1048576 --duration 5.0");
195 +
    println!();
196 +
    println!("Options:");
197 +
    println!("  -a algorithm        Specify the checksum algorithm (required)");
198 +
    println!("  -f file             Calculate checksum for the specified file");
199 +
    println!("  -h, --help          Show this help message");
200 +
    println!("  -s string           Calculate checksum for the specified string");
201 +
    println!("  --format hex|decimal Output format (default: hex)");
202 +
    println!();
203 +
    println!("Benchmarking:");
204 +
    println!("  -b                  Enable benchmark mode");
205 +
    println!("  --duration seconds  Benchmark duration in seconds (default: 10.0)");
206 +
    println!("  --size bytes        Data size for random generation in benchmark mode (default: 1048576 [1MiB])");
207 +
    println!();
208 +
    println!();
209 +
    println!("Note: In normal mode, either -f or -s must be provided, but not both.");
210 +
    println!("      In benchmark mode (-b), -f or -s are optional for using specific data.");
211 +
}
212 +
213 +
fn parse_args() -> Result<Config, String> {
214 +
    let args: Vec<String> = env::args().collect();
215 +
216 +
    if args.len() == 1 {
217 +
        return Err("No arguments provided".to_string());
218 +
    }
219 +
220 +
    // Check for help flag
221 +
    if args.contains(&"-h".to_string()) || args.contains(&"--help".to_string()) {
222 +
        return Err("help".to_string());
223 +
    }
224 +
225 +
    let mut algorithm: Option<String> = None;
226 +
    let mut file: Option<String> = None;
227 +
    let mut string: Option<String> = None;
228 +
    let mut format = OutputFormat::Hex; // Default to hex
229 +
    let mut benchmark_mode = false;
230 +
    let mut benchmark_size: Option<usize> = None;
231 +
    let mut benchmark_duration = 10.0; // Default duration
232 +
233 +
    let mut i = 1; // Skip program name
234 +
    while i < args.len() {
235 +
        match args[i].as_str() {
236 +
            "-a" => {
237 +
                if i + 1 >= args.len() {
238 +
                    return Err("Missing algorithm after -a flag".to_string());
239 +
                }
240 +
                algorithm = Some(args[i + 1].clone());
241 +
                i += 2;
242 +
            }
243 +
            "-f" => {
244 +
                if i + 1 >= args.len() {
245 +
                    return Err("Missing filename after -f flag".to_string());
246 +
                }
247 +
                if string.is_some() {
248 +
                    return Err("Cannot specify both -f and -s flags".to_string());
249 +
                }
250 +
                file = Some(args[i + 1].clone());
251 +
                i += 2;
252 +
            }
253 +
            "-s" => {
254 +
                if i + 1 >= args.len() {
255 +
                    return Err("Missing string after -s flag".to_string());
256 +
                }
257 +
                if file.is_some() {
258 +
                    return Err("Cannot specify both -f and -s flags".to_string());
259 +
                }
260 +
                string = Some(args[i + 1].clone());
261 +
                i += 2;
262 +
            }
263 +
            "--format" => {
264 +
                if i + 1 >= args.len() {
265 +
                    return Err("Missing format after --format flag".to_string());
266 +
                }
267 +
                match args[i + 1].as_str() {
268 +
                    "hex" => format = OutputFormat::Hex,
269 +
                    "decimal" => format = OutputFormat::Decimal,
270 +
                    invalid => {
271 +
                        return Err(format!(
272 +
                            "Invalid format '{}'. Use 'hex' or 'decimal'",
273 +
                            invalid
274 +
                        ))
275 +
                    }
276 +
                }
277 +
                i += 2;
278 +
            }
279 +
            "-b" => {
280 +
                benchmark_mode = true;
281 +
                i += 1;
282 +
            }
283 +
            "--size" => {
284 +
                if i + 1 >= args.len() {
285 +
                    return Err("Missing size value after --size flag".to_string());
286 +
                }
287 +
                benchmark_size = Some(
288 +
                    args[i + 1]
289 +
                        .parse::<usize>()
290 +
                        .map_err(|_| format!("Invalid size value: {}", args[i + 1]))?,
291 +
                );
292 +
                i += 2;
293 +
            }
294 +
            "--duration" => {
295 +
                if i + 1 >= args.len() {
296 +
                    return Err("Missing duration value after --duration flag".to_string());
297 +
                }
298 +
                benchmark_duration = args[i + 1]
299 +
                    .parse::<f64>()
300 +
                    .map_err(|_| format!("Invalid duration value: {}", args[i + 1]))?;
301 +
                i += 2;
302 +
            }
303 +
            arg => {
304 +
                return Err(format!("Unknown argument: {}", arg));
305 +
            }
306 +
        }
307 +
    }
308 +
309 +
    // Validate required arguments
310 +
    let algorithm = algorithm.ok_or("Algorithm (-a) is required")?;
311 +
312 +
    // Validate mutual exclusivity between benchmark and normal modes
313 +
    if !benchmark_mode && (benchmark_size.is_some() || benchmark_duration != 10.0) {
314 +
        return Err("--size and --duration can only be used with -b flag".to_string());
315 +
    }
316 +
317 +
    // Create benchmark config if in benchmark mode
318 +
    let benchmark = if benchmark_mode {
319 +
        let config = BenchmarkConfig {
320 +
            size: benchmark_size,
321 +
            duration: benchmark_duration,
322 +
        };
323 +
        config.validate()?;
324 +
        Some(config)
325 +
    } else {
326 +
        None
327 +
    };
328 +
329 +
    // Validate input requirements based on mode
330 +
    if benchmark.is_none() {
331 +
        // Normal mode: require either file or string input
332 +
        if file.is_none() && string.is_none() {
333 +
            return Err(
334 +
                "Either -f (file) or -s (string) must be provided in normal mode".to_string(),
335 +
            );
336 +
        }
337 +
    }
338 +
    // Benchmark mode: file and string are optional (will use generated data if neither provided)
339 +
340 +
    Ok(Config {
341 +
        algorithm,
342 +
        file,
343 +
        string,
344 +
        format,
345 +
        benchmark,
346 +
    })
347 +
}
348 +
349 +
fn calculate_checksum(config: &Config) -> Result<(), String> {
350 +
    let algorithm = CrcAlgorithm::from_str(&config.algorithm)
351 +
        .map_err(|_| format!("Invalid algorithm: {}", config.algorithm))?;
352 +
353 +
    // Check if benchmark mode is enabled
354 +
    if let Some(benchmark_config) = &config.benchmark {
355 +
        return run_benchmark(config, benchmark_config, algorithm);
356 +
    }
357 +
358 +
    let checksum = if let Some(ref filename) = config.file {
359 +
        checksum_file(algorithm, filename, None).unwrap()
360 +
    } else if let Some(ref text) = config.string {
361 +
        checksum(algorithm, text.as_bytes())
362 +
    } else {
363 +
        return Err("No input provided for checksum calculation".to_string());
364 +
    };
365 +
366 +
    match config.format {
367 +
        OutputFormat::Hex => println!("{:#x?}", checksum),
368 +
        OutputFormat::Decimal => println!("{}", checksum),
369 +
    }
370 +
371 +
    Ok(())
372 +
}
373 +
374 +
fn run_benchmark(
375 +
    config: &Config,
376 +
    benchmark_config: &BenchmarkConfig,
377 +
    algorithm: CrcAlgorithm,
378 +
) -> Result<(), String> {
379 +
    // Determine data source and create BenchmarkData
380 +
    let data = if let Some(ref filename) = config.file {
381 +
        // Validate file exists before benchmarking
382 +
        if !std::path::Path::new(filename).exists() {
383 +
            return Err(format!("File not found: {}", filename));
384 +
        }
385 +
        BenchmarkData::File(filename.clone())
386 +
    } else if let Some(ref text) = config.string {
387 +
        BenchmarkData::InMemory(text.as_bytes().to_vec())
388 +
    } else {
389 +
        // Generate random data with specified size or default (1 MiB)
390 +
        let size = benchmark_config.size.unwrap_or(1_048_576);
391 +
        let random_data = generate_random_data(size)?;
392 +
        BenchmarkData::InMemory(random_data)
393 +
    };
394 +
395 +
    // Create and run benchmark
396 +
    let runner = BenchmarkRunner::new(algorithm, data, benchmark_config.duration);
397 +
    let result = runner.run()?;
398 +
399 +
    // Display results with algorithm name
400 +
    display_benchmark_results(&result, &config.algorithm);
401 +
402 +
    Ok(())
403 +
}
404 +
405 +
// Format numbers with comma separators for better readability
406 +
fn format_number_with_commas(n: u64) -> String {
407 +
    let s = n.to_string();
408 +
    let mut result = String::new();
409 +
    let chars: Vec<char> = s.chars().collect();
410 +
411 +
    for (i, ch) in chars.iter().enumerate() {
412 +
        if i > 0 && (chars.len() - i).is_multiple_of(3) {
413 +
            result.push(',');
414 +
        }
415 +
        result.push(*ch);
416 +
    }
417 +
418 +
    result
419 +
}
420 +
421 +
fn display_benchmark_results(result: &BenchmarkResult, algorithm_name: &str) {
422 +
    println!("Algorithm: {}", algorithm_name);
423 +
    println!("Acceleration Target: {}", result.acceleration_target);
424 +
425 +
    // Format data size with appropriate units
426 +
    let (size_value, size_unit) = if result.data_size >= 1_048_576 {
427 +
        (result.data_size as f64 / 1_048_576.0, "MiB")
428 +
    } else if result.data_size >= 1024 {
429 +
        (result.data_size as f64 / 1024.0, "KiB")
430 +
    } else {
431 +
        (result.data_size as f64, "bytes")
432 +
    };
433 +
434 +
    println!(
435 +
        "Data Size: {} bytes ({:.1} {})",
436 +
        format_number_with_commas(result.data_size),
437 +
        size_value,
438 +
        size_unit
439 +
    );
440 +
    println!("Duration: {:.2} seconds", result.elapsed_seconds);
441 +
    println!(
442 +
        "Iterations: {}",
443 +
        format_number_with_commas(result.iterations)
444 +
    );
445 +
    println!("Throughput: {:.2} GiB/s", result.throughput_gibs);
446 +
447 +
    // Format time per iteration with appropriate units
448 +
    let (time_value, time_unit) = if result.time_per_iteration_nanos >= 1_000_000.0 {
449 +
        (result.time_per_iteration_nanos / 1_000_000.0, "ms")
450 +
    } else if result.time_per_iteration_nanos >= 1_000.0 {
451 +
        (result.time_per_iteration_nanos / 1_000.0, "μs")
452 +
    } else {
453 +
        (result.time_per_iteration_nanos, "ns")
454 +
    };
455 +
456 +
    println!("Time per iteration: {:.1} {}", time_value, time_unit);
457 +
}
458 +
459 +
fn main() -> ExitCode {
460 +
    match parse_args() {
461 +
        Ok(config) => {
462 +
            if let Err(e) = calculate_checksum(&config) {
463 +
                eprintln!("Error: {}", e);
464 +
                return ExitCode::from(1);
465 +
            }
466 +
        }
467 +
        Err(msg) => {
468 +
            if msg == "help" {
469 +
                print_usage();
470 +
                return ExitCode::SUCCESS;
471 +
            } else {
472 +
                eprintln!("Error: {}", msg);
473 +
                println!();
474 +
                print_usage();
475 +
                return ExitCode::from(1);
476 +
            }
477 +
        }
478 +
    }
479 +
480 +
    ExitCode::SUCCESS
481 +
}
482 +
483 +
#[cfg(test)]
484 +
mod tests {
485 +
    use super::*;
486 +
    use std::str::FromStr;
487 +
488 +
    #[test]
489 +
    fn test_benchmark_config_validation_valid() {
490 +
        let config = BenchmarkConfig {
491 +
            size: Some(1024),
492 +
            duration: 5.0,
493 +
        };
494 +
        assert!(config.validate().is_ok());
495 +
    }
496 +
497 +
    #[test]
498 +
    fn test_benchmark_config_validation_zero_duration() {
499 +
        let config = BenchmarkConfig {
500 +
            size: Some(1024),
501 +
            duration: 0.0,
502 +
        };
503 +
        assert!(config.validate().is_err());
504 +
        assert_eq!(
505 +
            config.validate().unwrap_err(),
506 +
            "Duration must be greater than 0"
507 +
        );
508 +
    }
509 +
510 +
    #[test]
511 +
    fn test_benchmark_config_validation_negative_duration() {
512 +
        let config = BenchmarkConfig {
513 +
            size: Some(1024),
514 +
            duration: -1.0,
515 +
        };
516 +
        assert!(config.validate().is_err());
517 +
        assert_eq!(
518 +
            config.validate().unwrap_err(),
519 +
            "Duration must be greater than 0"
520 +
        );
521 +
    }
522 +
523 +
    #[test]
524 +
    fn test_benchmark_config_validation_zero_size() {
525 +
        let config = BenchmarkConfig {
526 +
            size: Some(0),
527 +
            duration: 5.0,
528 +
        };
529 +
        assert!(config.validate().is_err());
530 +
        assert_eq!(
531 +
            config.validate().unwrap_err(),
532 +
            "Size must be greater than 0"
533 +
        );
534 +
    }
535 +
536 +
    #[test]
537 +
    fn test_benchmark_config_validation_none_size() {
538 +
        let config = BenchmarkConfig {
539 +
            size: None,
540 +
            duration: 5.0,
541 +
        };
542 +
        assert!(config.validate().is_ok());
543 +
    }
544 +
545 +
    #[test]
546 +
    fn test_generate_random_data_valid_size() {
547 +
        let data = generate_random_data(1024).unwrap();
548 +
        assert_eq!(data.len(), 1024);
549 +
    }
550 +
551 +
    #[test]
552 +
    fn test_generate_random_data_large_size() {
553 +
        let result = generate_random_data(1_073_741_825); // 1 GiB + 1
554 +
        assert!(result.is_err());
555 +
        assert_eq!(result.unwrap_err(), "Data size too large (maximum 1 GiB)");
556 +
    }
557 +
558 +
    #[test]
559 +
    fn test_benchmark_result_calculation() {
560 +
        let result = BenchmarkResult::new(
561 +
            1000,               // iterations
562 +
            2.0,                // elapsed_seconds
563 +
            "test".to_string(), // acceleration_target
564 +
            1024,               // data_size
565 +
        );
566 +
567 +
        assert_eq!(result.iterations, 1000);
568 +
        assert_eq!(result.elapsed_seconds, 2.0);
569 +
        assert_eq!(result.data_size, 1024);
570 +
571 +
        // Throughput should be (1024 * 1000) / 2.0 / (1024^3) GiB/s
572 +
        let expected_throughput = (1024.0 * 1000.0) / 2.0 / (1024.0 * 1024.0 * 1024.0);
573 +
        assert!((result.throughput_gibs - expected_throughput).abs() < 1e-10);
574 +
575 +
        // Time per iteration should be 2.0 * 1e9 / 1000 nanoseconds
576 +
        let expected_time_per_iter = 2.0 * 1_000_000_000.0 / 1000.0;
577 +
        assert!((result.time_per_iteration_nanos - expected_time_per_iter).abs() < 1e-6);
578 +
    }
579 +
580 +
    #[test]
581 +
    fn test_benchmark_runner_creation() {
582 +
        let algorithm = CrcAlgorithm::from_str("CRC-32/ISCSI").unwrap();
583 +
        let data = BenchmarkData::InMemory(vec![1, 2, 3, 4]);
584 +
        let runner = BenchmarkRunner::new(algorithm, data, 1.0);
585 +
586 +
        assert_eq!(runner.duration, 1.0);
587 +
        assert_eq!(runner.algorithm, algorithm);
588 +
    }
589 +
590 +
    #[test]
591 +
    fn test_benchmark_runner_execution_in_memory() {
592 +
        let algorithm = CrcAlgorithm::from_str("CRC-32/ISCSI").unwrap();
593 +
        let data = BenchmarkData::InMemory(vec![1, 2, 3, 4]);
594 +
        let runner = BenchmarkRunner::new(algorithm, data, 0.1); // Short duration for test
595 +
596 +
        let result = runner.run().unwrap();
597 +
        assert!(result.iterations > 0);
598 +
        assert!(result.elapsed_seconds > 0.0);
599 +
        assert_eq!(result.data_size, 4);
600 +
        assert!(result.throughput_gibs >= 0.0);
601 +
    }
602 +
603 +
    #[test]
604 +
    fn test_parse_args_benchmark_mode() {
605 +
        // We can't easily mock std::env::args in unit tests, so we'll test the parsing logic
606 +
        // by creating a Config directly and validating its structure
607 +
        let config = Config {
608 +
            algorithm: "CRC-32/ISCSI".to_string(),
609 +
            file: None,
610 +
            string: None,
611 +
            format: OutputFormat::Hex,
612 +
            benchmark: Some(BenchmarkConfig {
613 +
                size: Some(1024),
614 +
                duration: 5.0,
615 +
            }),
616 +
        };
617 +
618 +
        assert!(config.benchmark.is_some());
619 +
        let benchmark_config = config.benchmark.unwrap();
620 +
        assert_eq!(benchmark_config.size, Some(1024));
621 +
        assert_eq!(benchmark_config.duration, 5.0);
622 +
    }
623 +
624 +
    #[test]
625 +
    fn test_parse_args_normal_mode() {
626 +
        let config = Config {
627 +
            algorithm: "CRC-32/ISCSI".to_string(),
628 +
            file: Some("test.txt".to_string()),
629 +
            string: None,
630 +
            format: OutputFormat::Hex,
631 +
            benchmark: None,
632 +
        };
633 +
634 +
        assert!(config.benchmark.is_none());
635 +
        assert_eq!(config.file, Some("test.txt".to_string()));
636 +
    }
637 +
638 +
    #[test]
639 +
    fn test_data_source_selection_file() {
640 +
        // Test that file input creates File variant
641 +
        let config = Config {
642 +
            algorithm: "CRC-32/ISCSI".to_string(),
643 +
            file: Some("test.txt".to_string()),
644 +
            string: None,
645 +
            format: OutputFormat::Hex,
646 +
            benchmark: Some(BenchmarkConfig {
647 +
                size: None,
648 +
                duration: 1.0,
649 +
            }),
650 +
        };
651 +
652 +
        // This would be tested in the run_benchmark function
653 +
        // We can verify the config structure is correct for file input
654 +
        assert!(config.file.is_some());
655 +
        assert!(config.string.is_none());
656 +
    }
657 +
658 +
    #[test]
659 +
    fn test_data_source_selection_string() {
660 +
        let config = Config {
661 +
            algorithm: "CRC-32/ISCSI".to_string(),
662 +
            file: None,
663 +
            string: Some("test data".to_string()),
664 +
            format: OutputFormat::Hex,
665 +
            benchmark: Some(BenchmarkConfig {
666 +
                size: None,
667 +
                duration: 1.0,
668 +
            }),
669 +
        };
670 +
671 +
        assert!(config.file.is_none());
672 +
        assert!(config.string.is_some());
673 +
    }
674 +
675 +
    #[test]
676 +
    fn test_data_source_selection_generated() {
677 +
        let config = Config {
678 +
            algorithm: "CRC-32/ISCSI".to_string(),
679 +
            file: None,
680 +
            string: None,
681 +
            format: OutputFormat::Hex,
682 +
            benchmark: Some(BenchmarkConfig {
683 +
                size: Some(1024),
684 +
                duration: 1.0,
685 +
            }),
686 +
        };
687 +
688 +
        // When neither file nor string is provided, generated data should be used
689 +
        assert!(config.file.is_none());
690 +
        assert!(config.string.is_none());
691 +
        assert_eq!(config.benchmark.as_ref().unwrap().size, Some(1024));
692 +
    }
693 +
694 +
    #[test]
695 +
    fn test_throughput_calculation_accuracy() {
696 +
        // Test with known values to verify calculation accuracy
697 +
        let data_size = 1_048_576u64; // 1 MiB
698 +
        let iterations = 1000u64;
699 +
        let elapsed_seconds = 1.0;
700 +
701 +
        let result =
702 +
            BenchmarkResult::new(iterations, elapsed_seconds, "test".to_string(), data_size);
703 +
704 +
        // Expected throughput: (1 MiB * 1000) / 1 second = 1000 MiB/s = ~0.9537 GiB/s
705 +
        let expected_gibs =
706 +
            (data_size as f64 * iterations as f64) / elapsed_seconds / (1024.0 * 1024.0 * 1024.0);
707 +
        assert!((result.throughput_gibs - expected_gibs).abs() < 1e-10);
708 +
    }
709 +
710 +
    #[test]
711 +
    fn test_output_format_variants() {
712 +
        let hex_format = OutputFormat::Hex;
713 +
        let decimal_format = OutputFormat::Decimal;
714 +
715 +
        // Test that both variants can be created and are different
716 +
        assert!(matches!(hex_format, OutputFormat::Hex));
717 +
        assert!(matches!(decimal_format, OutputFormat::Decimal));
718 +
    }
719 +
720 +
    #[test]
721 +
    fn test_format_number_with_commas() {
722 +
        assert_eq!(format_number_with_commas(0), "0");
723 +
        assert_eq!(format_number_with_commas(123), "123");
724 +
        assert_eq!(format_number_with_commas(1234), "1,234");
725 +
        assert_eq!(format_number_with_commas(12345), "12,345");
726 +
        assert_eq!(format_number_with_commas(123456), "123,456");
727 +
        assert_eq!(format_number_with_commas(1234567), "1,234,567");
728 +
        assert_eq!(format_number_with_commas(12345678), "12,345,678");
729 +
        assert_eq!(format_number_with_commas(123456789), "123,456,789");
730 +
        assert_eq!(format_number_with_commas(1000000000), "1,000,000,000");
731 +
    }
732 +
}
added vendor/crc-fast/src/bin/generate-tables.rs +190 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! Utility to generate pre-computed 16-lane lookup tables for all CRC algorithms.
4 +
//!
5 +
//! This generates Rust source code that can be used to create the `src/tables.rs` module.
6 +
//! Run with: `cargo run --bin generate_tables > src/tables.rs`
7 +
8 +
use crc_fast::arch::software::{generate_table_u16, generate_table_u32, generate_table_u64};
9 +
10 +
fn main() {
11 +
    println!("// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.");
12 +
    println!();
13 +
    println!("//! Pre-generated 16-lane lookup tables for CRC calculations.");
14 +
    println!("//!");
15 +
    println!("//! This file is auto-generated by `cargo run --bin generate_tables`.");
16 +
    println!("//! Do not edit manually.");
17 +
    println!();
18 +
    println!("#![allow(dead_code)]");
19 +
    println!();
20 +
21 +
    generate_crc16_tables();
22 +
    generate_crc32_tables();
23 +
    generate_crc64_tables();
24 +
}
25 +
26 +
fn generate_crc16_tables() {
27 +
    println!("pub mod crc16 {{");
28 +
    println!("    //! CRC-16 lookup tables");
29 +
    println!();
30 +
31 +
    // CRC-16 algorithms with their parameters: (name, poly, reflect)
32 +
    let algorithms: &[(&str, u16, bool)] = &[
33 +
        ("ARC", 0x8005, true),
34 +
        ("CDMA2000", 0xc867, false),
35 +
        ("CMS", 0x8005, false),
36 +
        ("DDS_110", 0x8005, false),
37 +
        ("DECT_R", 0x0589, false),
38 +
        ("DECT_X", 0x0589, false),
39 +
        ("DNP", 0x3d65, true),
40 +
        ("EN_13757", 0x3d65, false),
41 +
        ("GENIBUS", 0x1021, false),
42 +
        ("GSM", 0x1021, false),
43 +
        ("IBM_3740", 0x1021, false),
44 +
        ("IBM_SDLC", 0x1021, true),
45 +
        ("ISO_IEC_14443_3_A", 0x1021, true),
46 +
        ("KERMIT", 0x1021, true),
47 +
        ("LJ1200", 0x6f63, false),
48 +
        ("M17", 0x5935, false),
49 +
        ("MAXIM_DOW", 0x8005, true),
50 +
        ("MCRF4XX", 0x1021, true),
51 +
        ("MODBUS", 0x8005, true),
52 +
        ("NRSC_5", 0x080b, true),
53 +
        ("OPENSAFETY_A", 0x5935, false),
54 +
        ("OPENSAFETY_B", 0x755b, false),
55 +
        ("PROFIBUS", 0x1dcf, false),
56 +
        ("RIELLO", 0x1021, true),
57 +
        ("SPI_FUJITSU", 0x1021, false),
58 +
        ("T10_DIF", 0x8bb7, false),
59 +
        ("TELEDISK", 0xa097, false),
60 +
        ("TMS37157", 0x1021, true),
61 +
        ("UMTS", 0x8005, false),
62 +
        ("USB", 0x8005, true),
63 +
        ("XMODEM", 0x1021, false),
64 +
    ];
65 +
66 +
    for (name, poly, reflect) in algorithms {
67 +
        print_table_u16(name, 16, *poly, *reflect);
68 +
    }
69 +
70 +
    println!("}}");
71 +
    println!();
72 +
}
73 +
74 +
fn generate_crc32_tables() {
75 +
    println!("pub mod crc32 {{");
76 +
    println!("    //! CRC-32 lookup tables");
77 +
    println!();
78 +
79 +
    // CRC-32 algorithms with their parameters: (name, poly, reflect)
80 +
    let algorithms: &[(&str, u32, bool)] = &[
81 +
        ("AIXM", 0x814141ab, false),
82 +
        ("AUTOSAR", 0xf4acfb13, true),
83 +
        ("BASE91_D", 0xa833982b, true),
84 +
        ("BZIP2", 0x04c11db7, false),
85 +
        ("CD_ROM_EDC", 0x8001801b, true),
86 +
        ("CKSUM", 0x04c11db7, false),
87 +
        ("ISCSI", 0x1edc6f41, true),
88 +
        ("ISO_HDLC", 0x04c11db7, true),
89 +
        ("JAMCRC", 0x04c11db7, true),
90 +
        ("MEF", 0x741b8cd7, true),
91 +
        ("MPEG_2", 0x04c11db7, false),
92 +
        ("XFER", 0x000000af, false),
93 +
    ];
94 +
95 +
    for (name, poly, reflect) in algorithms {
96 +
        print_table_u32(name, 32, *poly, *reflect);
97 +
    }
98 +
99 +
    println!("}}");
100 +
    println!();
101 +
}
102 +
103 +
fn generate_crc64_tables() {
104 +
    println!("pub mod crc64 {{");
105 +
    println!("    //! CRC-64 lookup tables");
106 +
    println!();
107 +
108 +
    // CRC-64 algorithms with their parameters: (name, poly, reflect)
109 +
    let algorithms: &[(&str, u64, bool)] = &[
110 +
        ("ECMA_182", 0x42f0e1eba9ea3693, false),
111 +
        ("GO_ISO", 0x000000000000001b, true),
112 +
        ("MS", 0x259c84cba6426349, true),
113 +
        ("NVME", 0xad93d23594c93659, true),
114 +
        ("REDIS", 0xad93d23594c935a9, true),
115 +
        ("WE", 0x42f0e1eba9ea3693, false),
116 +
        ("XZ", 0x42f0e1eba9ea3693, true),
117 +
    ];
118 +
119 +
    for (name, poly, reflect) in algorithms {
120 +
        print_table_u64(name, 64, *poly, *reflect);
121 +
    }
122 +
123 +
    println!("}}");
124 +
}
125 +
126 +
fn print_table_u16(name: &str, width: u8, poly: u16, reflect: bool) {
127 +
    let table = generate_table_u16(width, poly, reflect);
128 +
129 +
    println!("    pub static CRC16_{}_TABLE: [[u16; 256]; 16] = [", name);
130 +
    for lane in &table {
131 +
        println!("        [");
132 +
        for chunk in lane.chunks(8) {
133 +
            print!("            ");
134 +
            for (i, val) in chunk.iter().enumerate() {
135 +
                print!("0x{:04x}", val);
136 +
                if i < chunk.len() - 1 {
137 +
                    print!(", ");
138 +
                }
139 +
            }
140 +
            println!(",");
141 +
        }
142 +
        println!("        ],");
143 +
    }
144 +
    println!("    ];");
145 +
    println!();
146 +
}
147 +
148 +
fn print_table_u32(name: &str, width: u8, poly: u32, reflect: bool) {
149 +
    let table = generate_table_u32(width, poly, reflect);
150 +
151 +
    println!("    pub static CRC32_{}_TABLE: [[u32; 256]; 16] = [", name);
152 +
    for lane in &table {
153 +
        println!("        [");
154 +
        for chunk in lane.chunks(4) {
155 +
            print!("            ");
156 +
            for (i, val) in chunk.iter().enumerate() {
157 +
                print!("0x{:08x}", val);
158 +
                if i < chunk.len() - 1 {
159 +
                    print!(", ");
160 +
                }
161 +
            }
162 +
            println!(",");
163 +
        }
164 +
        println!("        ],");
165 +
    }
166 +
    println!("    ];");
167 +
    println!();
168 +
}
169 +
170 +
fn print_table_u64(name: &str, width: u8, poly: u64, reflect: bool) {
171 +
    let table = generate_table_u64(width, poly, reflect);
172 +
173 +
    println!("    pub static CRC64_{}_TABLE: [[u64; 256]; 16] = [", name);
174 +
    for lane in &table {
175 +
        println!("        [");
176 +
        for chunk in lane.chunks(2) {
177 +
            print!("            ");
178 +
            for (i, val) in chunk.iter().enumerate() {
179 +
                print!("0x{:016x}", val);
180 +
                if i < chunk.len() - 1 {
181 +
                    print!(", ");
182 +
                }
183 +
            }
184 +
            println!(",");
185 +
        }
186 +
        println!("        ],");
187 +
    }
188 +
    println!("    ];");
189 +
    println!();
190 +
}
added vendor/crc-fast/src/bin/get-custom-params.rs +220 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This is a simple program to get custom CRC parameters from the command line.
4 +
5 +
use std::env;
6 +
use std::process::ExitCode;
7 +
8 +
#[derive(Debug)]
9 +
struct Config {
10 +
    width: Option<u32>,
11 +
    polynomial: Option<u64>,
12 +
    init: Option<u64>,
13 +
    reflected: Option<bool>,
14 +
    xorout: Option<u64>,
15 +
    check: Option<u64>,
16 +
    name: Option<String>,
17 +
}
18 +
19 +
impl Config {
20 +
    fn new() -> Self {
21 +
        Config {
22 +
            width: None,
23 +
            polynomial: None,
24 +
            init: None,
25 +
            reflected: None,
26 +
            xorout: None,
27 +
            check: None,
28 +
            name: None,
29 +
        }
30 +
    }
31 +
32 +
    fn is_complete(&self) -> bool {
33 +
        self.width.is_some()
34 +
            && self.polynomial.is_some()
35 +
            && self.init.is_some()
36 +
            && self.reflected.is_some()
37 +
            && self.xorout.is_some()
38 +
            && self.check.is_some()
39 +
            && self.name.is_some()
40 +
    }
41 +
}
42 +
43 +
fn parse_hex_or_decimal(s: &str) -> Result<u64, String> {
44 +
    if s.starts_with("0x") || s.starts_with("0X") {
45 +
        u64::from_str_radix(&s[2..], 16).map_err(|_| format!("Invalid hexadecimal value: {s}",))
46 +
    } else {
47 +
        s.parse::<u64>()
48 +
            .map_err(|_| format!("Invalid decimal value: {s}",))
49 +
    }
50 +
}
51 +
52 +
fn parse_bool(s: &str) -> Result<bool, String> {
53 +
    match s.to_lowercase().as_str() {
54 +
        "true" | "1" | "yes" | "on" => Ok(true),
55 +
        "false" | "0" | "no" | "off" => Ok(false),
56 +
        _ => Err(format!("Invalid boolean value: {s} (use true/false)",)),
57 +
    }
58 +
}
59 +
60 +
fn parse_args(args: &[String]) -> Result<Config, String> {
61 +
    let mut config = Config::new();
62 +
    let mut i = 1; // Skip program name
63 +
64 +
    while i < args.len() {
65 +
        match args[i].as_str() {
66 +
            "-n" => {
67 +
                if i + 1 >= args.len() {
68 +
                    return Err("Missing value for -n (name)".to_string());
69 +
                }
70 +
                config.name = Some(args[i + 1].clone());
71 +
                i += 2;
72 +
            }
73 +
            "-w" => {
74 +
                if i + 1 >= args.len() {
75 +
                    return Err("Missing value for -w (width)".to_string());
76 +
                }
77 +
                config.width = Some(
78 +
                    args[i + 1]
79 +
                        .parse::<u32>()
80 +
                        .map_err(|_| format!("Invalid width value: {}", args[i + 1]))?,
81 +
                );
82 +
                i += 2;
83 +
            }
84 +
            "-p" => {
85 +
                if i + 1 >= args.len() {
86 +
                    return Err("Missing value for -p (polynomial)".to_string());
87 +
                }
88 +
                config.polynomial = Some(parse_hex_or_decimal(&args[i + 1])?);
89 +
                i += 2;
90 +
            }
91 +
            "-i" => {
92 +
                if i + 1 >= args.len() {
93 +
                    return Err("Missing value for -i (init)".to_string());
94 +
                }
95 +
                config.init = Some(parse_hex_or_decimal(&args[i + 1])?);
96 +
                i += 2;
97 +
            }
98 +
            "-r" => {
99 +
                if i + 1 >= args.len() {
100 +
                    return Err("Missing value for -r (reflected)".to_string());
101 +
                }
102 +
                config.reflected = Some(parse_bool(&args[i + 1])?);
103 +
                i += 2;
104 +
            }
105 +
            "-x" => {
106 +
                if i + 1 >= args.len() {
107 +
                    return Err("Missing value for -x (xorout)".to_string());
108 +
                }
109 +
                config.xorout = Some(parse_hex_or_decimal(&args[i + 1])?);
110 +
                i += 2;
111 +
            }
112 +
            "-c" => {
113 +
                if i + 1 >= args.len() {
114 +
                    return Err("Missing value for -c (check)".to_string());
115 +
                }
116 +
                config.check = Some(parse_hex_or_decimal(&args[i + 1])?);
117 +
                i += 2;
118 +
            }
119 +
            arg => {
120 +
                return Err(format!("Unknown argument: {arg}",));
121 +
            }
122 +
        }
123 +
    }
124 +
125 +
    Ok(config)
126 +
}
127 +
128 +
fn print_usage() {
129 +
    println!("Usage: get-custom-params -n <name> -w <width> -p <polynomial> -i <init> -r <reflected> -x <xorout> -c <check>");
130 +
    println!();
131 +
    println!("Example: get-custom-params -n CRC-32/ISCSI -w 32 -p 0x1edc6f41 -i 0xFFFFFFFF -r true -x 0xFFFFFFFF -c 0xe3069283");
132 +
    println!("Example: get-custom-params -n CRC-64/NVME -w 64 -p 0xad93d23594c93659 -i 0xffffffffffffffff -r true -x 0xffffffffffffffff -c 0xae8b14860a799888");
133 +
    println!();
134 +
    println!("Arguments:");
135 +
    println!("  -n <name>       Name of the CRC algorithm (e.g., CRC-32/ISCSI)");
136 +
    println!("  -w <width>      CRC width (number of bits)");
137 +
    println!("  -p <polynomial> CRC polynomial (hex or decimal)");
138 +
    println!("  -i <init>       Initial value (hex or decimal)");
139 +
    println!("  -r <reflected>  Reflected input/output (true/false)");
140 +
    println!("  -x <xorout>     XOR output value (hex or decimal)");
141 +
    println!("  -c <check>      Check value (hex or decimal)");
142 +
}
143 +
144 +
fn main() -> ExitCode {
145 +
    let args: Vec<String> = env::args().collect();
146 +
147 +
    if args.len() == 1 {
148 +
        print_usage();
149 +
        return ExitCode::from(1);
150 +
    }
151 +
152 +
    let config = match parse_args(&args) {
153 +
        Ok(config) => config,
154 +
        Err(error) => {
155 +
            eprintln!("Error: {error}",);
156 +
            println!();
157 +
            print_usage();
158 +
            return ExitCode::from(1);
159 +
        }
160 +
    };
161 +
162 +
    // Check if all required arguments are provided
163 +
    if !config.is_complete() {
164 +
        eprintln!("Error: All arguments are required");
165 +
        println!();
166 +
        print_usage();
167 +
        return ExitCode::from(1);
168 +
    }
169 +
170 +
    let static_name: &'static str = Box::leak(config.name.unwrap().into_boxed_str());
171 +
172 +
    let params = crc_fast::CrcParams::new(
173 +
        static_name,
174 +
        config.width.unwrap() as u8,
175 +
        config.polynomial.unwrap(),
176 +
        config.init.unwrap(),
177 +
        config.reflected.unwrap(),
178 +
        config.xorout.unwrap(),
179 +
        config.check.unwrap(),
180 +
    );
181 +
182 +
    println!();
183 +
    println!("// Generated CRC parameters for {static_name}",);
184 +
    println!(
185 +
        "pub const {}: CrcParams = CrcParams {{",
186 +
        static_name
187 +
            .to_uppercase()
188 +
            .replace("-", "_")
189 +
            .replace("/", "_")
190 +
    );
191 +
    println!(
192 +
        "    algorithm: CrcAlgorithm::{}Custom,",
193 +
        if config.width.unwrap() == 32 {
194 +
            "Crc32"
195 +
        } else {
196 +
            "Crc64"
197 +
        }
198 +
    );
199 +
    println!("    name: \"{static_name}\",",);
200 +
    println!("    width: {},", config.width.unwrap());
201 +
    println!("    poly: 0x{:x},", config.polynomial.unwrap());
202 +
    println!("    init: 0x{:x},", config.init.unwrap());
203 +
    println!("    refin: {},", config.reflected.unwrap());
204 +
    println!("    refout: {},", config.reflected.unwrap());
205 +
    println!("    xorout: 0x{:x},", config.xorout.unwrap());
206 +
    println!("    check: 0x{:x},", config.check.unwrap());
207 +
    println!("    keys: CrcKeysStorage::from_keys_fold_256([");
208 +
209 +
    // Print the keys array
210 +
    for i in 0..23 {
211 +
        let key = params.get_key(i);
212 +
        println!("        0x{key:016x},",);
213 +
    }
214 +
215 +
    println!("    ]),");
216 +
    println!("}};");
217 +
    println!();
218 +
219 +
    ExitCode::from(0)
220 +
}
added vendor/crc-fast/src/cache.rs +1765 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! CRC parameter caching system
4 +
//!
5 +
//! This module provides a thread-safe cache for CRC folding keys to avoid expensive
6 +
//! regeneration when the same CRC parameters are used multiple times. The cache uses
7 +
//! a read-write lock pattern optimized for the common case of cache hits.
8 +
//!
9 +
//! # Performance Characteristics
10 +
//!
11 +
//! - Cache hits: ~50-100x faster than key generation
12 +
//! - Cache misses: ~100-200ns overhead compared to direct generation
13 +
//! - Memory usage: ~200 bytes per unique parameter set
14 +
//! - Thread safety: Multiple concurrent readers, exclusive writers
15 +
//!
16 +
//! # Usage
17 +
//!
18 +
//! The cache is used automatically by `CrcParams::new()` and requires no manual management.
19 +
//! The cache is transparent to users and handles all memory management internally.
20 +
21 +
use crate::generate;
22 +
23 +
#[cfg(feature = "std")]
24 +
use std::collections::HashMap;
25 +
#[cfg(feature = "std")]
26 +
use std::sync::{OnceLock, RwLock};
27 +
28 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
29 +
use hashbrown::HashMap;
30 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
31 +
use spin::{Once, RwLock};
32 +
33 +
/// Global cache storage for CRC parameter keys
34 +
///
35 +
/// Uses OnceLock for thread-safe lazy initialization and RwLock for concurrent access.
36 +
/// The cache maps parameter combinations to their pre-computed folding keys.
37 +
#[cfg(feature = "std")]
38 +
static CACHE: OnceLock<RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>>> = OnceLock::new();
39 +
40 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
41 +
static CACHE: Once<RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>>> = Once::new();
42 +
43 +
/// Cache key for storing CRC parameters that affect key generation
44 +
///
45 +
/// Only includes parameters that directly influence the mathematical computation
46 +
/// of folding keys. Parameters like `init`, `xorout`, and `check` are excluded
47 +
/// because they don't affect the key generation process.
48 +
///
49 +
/// The cache key implements `Hash`, `Eq`, and `PartialEq` to enable efficient
50 +
/// HashMap storage and lookup operations.
51 +
#[cfg(any(feature = "std", feature = "cache"))]
52 +
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
53 +
pub(crate) struct CrcParamsCacheKey {
54 +
    /// CRC width in bits (32 or 64)
55 +
    pub width: u8,
56 +
    /// Polynomial value used for CRC calculation
57 +
    pub poly: u64,
58 +
    /// Whether the CRC uses reflected input/output processing
59 +
    pub reflected: bool,
60 +
}
61 +
62 +
#[cfg(any(feature = "std", feature = "cache"))]
63 +
impl CrcParamsCacheKey {
64 +
    /// Create a new cache key from CRC parameters
65 +
    ///
66 +
    /// # Arguments
67 +
    ///
68 +
    /// * `width` - CRC width in bits (32 or 64)
69 +
    /// * `poly` - Polynomial value for the CRC algorithm
70 +
    /// * `reflected` - Whether input/output should be bit-reflected
71 +
    pub fn new(width: u8, poly: u64, reflected: bool) -> Self {
72 +
        Self {
73 +
            width,
74 +
            poly,
75 +
            reflected,
76 +
        }
77 +
    }
78 +
}
79 +
80 +
/// Initialize and return reference to the global cache
81 +
///
82 +
/// Uses OnceLock to ensure thread-safe lazy initialization without requiring
83 +
/// static initialization overhead. The cache is only created when first accessed.
84 +
#[cfg(feature = "std")]
85 +
fn get_cache() -> &'static RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>> {
86 +
    CACHE.get_or_init(|| RwLock::new(HashMap::new()))
87 +
}
88 +
89 +
#[cfg(all(not(feature = "std"), feature = "cache"))]
90 +
fn get_cache() -> &'static RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>> {
91 +
    CACHE.call_once(|| RwLock::new(HashMap::new()))
92 +
}
93 +
94 +
/// Get cached keys or generate and cache them if not present
95 +
///
96 +
/// This function implements a read-then-write pattern optimized for the common case
97 +
/// of cache hits while minimizing lock contention:
98 +
///
99 +
/// 1. **Read phase**: Attempts read lock to check for cached keys (allows concurrent reads)
100 +
/// 2. **Generation phase**: If cache miss, generates keys outside any lock to minimize hold time
101 +
/// 3. **Write phase**: Acquires write lock only to store the generated keys
102 +
///
103 +
/// The key generation happens outside the write lock because it's computationally expensive
104 +
/// (~1000x slower than cache lookup) and we want to minimize the time other threads are blocked.
105 +
///
106 +
/// All cache operations use best-effort error handling - lock poisoning or allocation failures
107 +
/// don't cause panics, instead falling back to direct key generation to maintain functionality.
108 +
///
109 +
/// # Arguments
110 +
///
111 +
/// * `width` - CRC width in bits (32 or 64)
112 +
/// * `poly` - Polynomial value for the CRC algorithm
113 +
/// * `reflected` - Whether input/output should be bit-reflected
114 +
///
115 +
/// # Returns
116 +
///
117 +
/// Array of 23 pre-computed folding keys for SIMD CRC calculation
118 +
pub fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] {
119 +
    #[cfg(feature = "std")]
120 +
    {
121 +
        let cache_key = CrcParamsCacheKey::new(width, poly, reflected);
122 +
123 +
        // Try cache read first - multiple threads can read simultaneously
124 +
        // If lock is poisoned or read fails, continue to key generation
125 +
        if let Ok(cache) = get_cache().read() {
126 +
            if let Some(keys) = cache.get(&cache_key) {
127 +
                return *keys;
128 +
            }
129 +
        }
130 +
131 +
        // Generate keys outside of write lock to minimize lock hold time
132 +
        let keys = generate::keys(width, poly, reflected);
133 +
134 +
        // Try to cache the result (best effort - if this fails, we still return valid keys)
135 +
        // Lock poisoning or write failure doesn't affect functionality
136 +
        let _ = get_cache()
137 +
            .write()
138 +
            .map(|mut cache| cache.insert(cache_key, keys));
139 +
140 +
        keys
141 +
    }
142 +
143 +
    #[cfg(all(not(feature = "std"), feature = "cache"))]
144 +
    {
145 +
        let cache_key = CrcParamsCacheKey::new(width, poly, reflected);
146 +
147 +
        // Try cache read first - multiple threads can read simultaneously
148 +
        // spin::RwLock returns guards directly (no Result wrapper)
149 +
        {
150 +
            let cache = get_cache().read();
151 +
            if let Some(keys) = cache.get(&cache_key) {
152 +
                return *keys;
153 +
            }
154 +
        } // Drop read lock before generating keys
155 +
156 +
        // Generate keys outside of write lock to minimize lock hold time
157 +
        let keys = generate::keys(width, poly, reflected);
158 +
159 +
        // Cache the result - spin::RwLock doesn't use Result wrapper
160 +
        {
161 +
            let mut cache = get_cache().write();
162 +
            cache.insert(cache_key, keys);
163 +
        }
164 +
165 +
        keys
166 +
    }
167 +
168 +
    #[cfg(not(any(feature = "std", feature = "cache")))]
169 +
    {
170 +
        generate::keys(width, poly, reflected)
171 +
    }
172 +
}
173 +
174 +
/// Clear all cached CRC parameter keys
175 +
///
176 +
/// This function is primarily intended for testing scenarios where you need to reset
177 +
/// the cache state to ensure test isolation.
178 +
///
179 +
/// Uses best-effort error handling - lock poisoning or other failures don't cause
180 +
/// panics, ensuring this function never disrupts program execution. If the cache
181 +
/// cannot be cleared, the function silently continues without error.
182 +
///
183 +
/// # Thread Safety
184 +
///
185 +
/// This function is thread-safe and can be called concurrently with other cache operations.
186 +
/// However, clearing the cache while other threads are actively using it may temporarily
187 +
/// reduce performance as those threads will need to regenerate keys on their next access.
188 +
#[cfg(test)]
189 +
pub(crate) fn clear_cache() {
190 +
    #[cfg(feature = "std")]
191 +
    {
192 +
        // Best-effort cache clear - if lock is poisoned or unavailable, silently continue
193 +
        // This ensures the function never panics or blocks program execution
194 +
        let _ = get_cache().write().map(|mut cache| cache.clear());
195 +
    }
196 +
197 +
    #[cfg(all(not(feature = "std"), feature = "cache"))]
198 +
    {
199 +
        // spin::RwLock doesn't use Result wrapper
200 +
        let mut cache = get_cache().write();
201 +
        cache.clear();
202 +
    }
203 +
}
204 +
205 +
#[cfg(test)]
206 +
mod tests {
207 +
    use super::*;
208 +
    use std::collections::HashSet;
209 +
210 +
    #[test]
211 +
    fn test_cache_key_creation() {
212 +
        let key1 = CrcParamsCacheKey::new(32, 0x04C11DB7, true);
213 +
        let key2 = CrcParamsCacheKey::new(64, 0x42F0E1EBA9EA3693, false);
214 +
215 +
        assert_eq!(key1.width, 32);
216 +
        assert_eq!(key1.poly, 0x04C11DB7);
217 +
        assert!(key1.reflected);
218 +
219 +
        assert_eq!(key2.width, 64);
220 +
        assert_eq!(key2.poly, 0x42F0E1EBA9EA3693);
221 +
        assert!(!key2.reflected);
222 +
    }
223 +
224 +
    #[test]
225 +
    fn test_cache_key_equality() {
226 +
        let key1 = CrcParamsCacheKey::new(32, 0x04C11DB7, true);
227 +
        let key2 = CrcParamsCacheKey::new(32, 0x04C11DB7, true);
228 +
        let key3 = CrcParamsCacheKey::new(32, 0x04C11DB7, false); // Different reflected
229 +
        let key4 = CrcParamsCacheKey::new(64, 0x04C11DB7, true); // Different width
230 +
        let key5 = CrcParamsCacheKey::new(32, 0x1EDC6F41, true); // Different poly
231 +
232 +
        // Test equality
233 +
        assert_eq!(key1, key2);
234 +
        assert_eq!(key1.clone(), key2.clone());
235 +
236 +
        // Test inequality
237 +
        assert_ne!(key1, key3);
238 +
        assert_ne!(key1, key4);
239 +
        assert_ne!(key1, key5);
240 +
        assert_ne!(key3, key4);
241 +
        assert_ne!(key3, key5);
242 +
        assert_ne!(key4, key5);
243 +
    }
244 +
245 +
    #[test]
246 +
    fn test_cache_key_hashing() {
247 +
        let key1 = CrcParamsCacheKey::new(32, 0x04C11DB7, true);
248 +
        let key2 = CrcParamsCacheKey::new(32, 0x04C11DB7, true);
249 +
        let key3 = CrcParamsCacheKey::new(32, 0x04C11DB7, false);
250 +
251 +
        // Create a HashSet to test that keys can be used as hash keys
252 +
        let mut set = HashSet::new();
253 +
        set.insert(key1.clone());
254 +
        set.insert(key2.clone());
255 +
        set.insert(key3.clone());
256 +
257 +
        // Should only have 2 unique keys (key1 and key2 are equal)
258 +
        assert_eq!(set.len(), 2);
259 +
260 +
        // Test that equal keys can be found in the set
261 +
        assert!(set.contains(&key1));
262 +
        assert!(set.contains(&key2));
263 +
        assert!(set.contains(&key3));
264 +
265 +
        // Test that a new equivalent key can be found
266 +
        let key4 = CrcParamsCacheKey::new(32, 0x04C11DB7, true);
267 +
        assert!(set.contains(&key4));
268 +
    }
269 +
270 +
    #[test]
271 +
    fn test_cache_hit_scenarios() {
272 +
        clear_cache();
273 +
274 +
        // First call should be a cache miss and generate keys
275 +
        let keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
276 +
277 +
        // Second call with same parameters should be a cache hit
278 +
        let keys2 = get_or_generate_keys(32, 0x04C11DB7, true);
279 +
280 +
        // Keys should be identical (same array contents)
281 +
        assert_eq!(keys1, keys2);
282 +
283 +
        // Test multiple cache hits
284 +
        let keys3 = get_or_generate_keys(32, 0x04C11DB7, true);
285 +
        let keys4 = get_or_generate_keys(32, 0x04C11DB7, true);
286 +
287 +
        assert_eq!(keys1, keys3);
288 +
        assert_eq!(keys1, keys4);
289 +
        assert_eq!(keys2, keys3);
290 +
        assert_eq!(keys2, keys4);
291 +
    }
292 +
293 +
    #[test]
294 +
    fn test_cache_miss_scenarios() {
295 +
        clear_cache();
296 +
297 +
        // Different width - should be cache miss
298 +
        let keys_32 = get_or_generate_keys(32, 0x04C11DB7, true);
299 +
        let keys_64 = get_or_generate_keys(64, 0x04C11DB7, true);
300 +
        assert_ne!(keys_32, keys_64);
301 +
302 +
        // Different poly - should be cache miss
303 +
        let keys_poly1 = get_or_generate_keys(32, 0x04C11DB7, true);
304 +
        let keys_poly2 = get_or_generate_keys(32, 0x1EDC6F41, true);
305 +
        assert_ne!(keys_poly1, keys_poly2);
306 +
307 +
        // Different reflected - should be cache miss
308 +
        let keys_refl_true = get_or_generate_keys(32, 0x04C11DB7, true);
309 +
        let keys_refl_false = get_or_generate_keys(32, 0x04C11DB7, false);
310 +
        assert_ne!(keys_refl_true, keys_refl_false);
311 +
312 +
        // Verify each parameter set is cached independently
313 +
        let keys_32_again = get_or_generate_keys(32, 0x04C11DB7, true);
314 +
        let keys_64_again = get_or_generate_keys(64, 0x04C11DB7, true);
315 +
        let keys_poly1_again = get_or_generate_keys(32, 0x04C11DB7, true);
316 +
        let keys_poly2_again = get_or_generate_keys(32, 0x1EDC6F41, true);
317 +
        let keys_refl_true_again = get_or_generate_keys(32, 0x04C11DB7, true);
318 +
        let keys_refl_false_again = get_or_generate_keys(32, 0x04C11DB7, false);
319 +
320 +
        assert_eq!(keys_32, keys_32_again);
321 +
        assert_eq!(keys_64, keys_64_again);
322 +
        assert_eq!(keys_poly1, keys_poly1_again);
323 +
        assert_eq!(keys_poly2, keys_poly2_again);
324 +
        assert_eq!(keys_refl_true, keys_refl_true_again);
325 +
        assert_eq!(keys_refl_false, keys_refl_false_again);
326 +
    }
327 +
328 +
    #[test]
329 +
    fn test_cached_keys_identical_to_generated_keys() {
330 +
        clear_cache();
331 +
332 +
        // Test CRC32 parameters
333 +
        let width = 32;
334 +
        let poly = 0x04C11DB7;
335 +
        let reflected = true;
336 +
337 +
        // Generate keys directly (bypassing cache)
338 +
        let direct_keys = generate::keys(width, poly, reflected);
339 +
340 +
        // Get keys through cache (first call will be cache miss, generates and caches)
341 +
        let cached_keys_first = get_or_generate_keys(width, poly, reflected);
342 +
343 +
        // Get keys through cache again (should be cache hit)
344 +
        let cached_keys_second = get_or_generate_keys(width, poly, reflected);
345 +
346 +
        // All should be identical
347 +
        assert_eq!(direct_keys, cached_keys_first);
348 +
        assert_eq!(direct_keys, cached_keys_second);
349 +
        assert_eq!(cached_keys_first, cached_keys_second);
350 +
351 +
        // Test CRC64 parameters
352 +
        let width64 = 64;
353 +
        let poly64 = 0x42F0E1EBA9EA3693;
354 +
        let reflected64 = false;
355 +
356 +
        let direct_keys64 = generate::keys(width64, poly64, reflected64);
357 +
        let cached_keys64_first = get_or_generate_keys(width64, poly64, reflected64);
358 +
        let cached_keys64_second = get_or_generate_keys(width64, poly64, reflected64);
359 +
360 +
        assert_eq!(direct_keys64, cached_keys64_first);
361 +
        assert_eq!(direct_keys64, cached_keys64_second);
362 +
        assert_eq!(cached_keys64_first, cached_keys64_second);
363 +
364 +
        // Verify different parameters produce different keys
365 +
        assert_ne!(direct_keys, direct_keys64);
366 +
        assert_ne!(cached_keys_first, cached_keys64_first);
367 +
    }
368 +
369 +
    #[test]
370 +
    fn test_multiple_parameter_combinations() {
371 +
        clear_cache();
372 +
373 +
        // Test various common CRC parameter combinations
374 +
        let test_cases = [
375 +
            (32, 0x04C11DB7, true),          // CRC32
376 +
            (32, 0x04C11DB7, false),         // CRC32 non-reflected
377 +
            (32, 0x1EDC6F41, true),          // CRC32C
378 +
            (64, 0x42F0E1EBA9EA3693, true),  // CRC64 ISO
379 +
            (64, 0x42F0E1EBA9EA3693, false), // CRC64 ISO non-reflected
380 +
            (64, 0xD800000000000000, true),  // CRC64 ECMA
381 +
        ];
382 +
383 +
        let mut all_keys = Vec::new();
384 +
385 +
        // Generate keys for all test cases
386 +
        for &(width, poly, reflected) in &test_cases {
387 +
            let keys = get_or_generate_keys(width, poly, reflected);
388 +
            all_keys.push(keys);
389 +
        }
390 +
391 +
        // Verify all keys are different (no collisions)
392 +
        for i in 0..all_keys.len() {
393 +
            for j in (i + 1)..all_keys.len() {
394 +
                assert_ne!(
395 +
                    all_keys[i], all_keys[j],
396 +
                    "Keys should be different for test cases {} and {}",
397 +
                    i, j
398 +
                );
399 +
            }
400 +
        }
401 +
402 +
        // Verify cache hits return same keys
403 +
        for (i, &(width, poly, reflected)) in test_cases.iter().enumerate() {
404 +
            let cached_keys = get_or_generate_keys(width, poly, reflected);
405 +
            assert_eq!(
406 +
                all_keys[i], cached_keys,
407 +
                "Cache hit should return same keys for test case {}",
408 +
                i
409 +
            );
410 +
        }
411 +
    }
412 +
413 +
    #[test]
414 +
    fn test_cache_management_utilities() {
415 +
        // Clear cache to start with clean state
416 +
        clear_cache();
417 +
418 +
        // Generate and cache some keys
419 +
        let keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
420 +
        let keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
421 +
422 +
        // Verify cache hits return same keys
423 +
        let cached_keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
424 +
        let cached_keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
425 +
426 +
        assert_eq!(keys1, cached_keys1);
427 +
        assert_eq!(keys2, cached_keys2);
428 +
429 +
        // Clear cache
430 +
        clear_cache();
431 +
432 +
        // Verify cache was cleared by checking that new calls still work
433 +
        // (we can't directly verify cache is empty, but we can verify functionality)
434 +
        let new_keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
435 +
        assert_eq!(keys1, new_keys1); // Should be same values, but freshly generated
436 +
    }
437 +
438 +
    #[test]
439 +
    fn test_cache_error_handling() {
440 +
        // Test that cache operations don't panic even if called multiple times
441 +
        clear_cache();
442 +
        clear_cache(); // Should not panic on empty cache
443 +
444 +
        // Test that get_or_generate_keys works even after multiple clears
445 +
        let keys = get_or_generate_keys(32, 0x04C11DB7, true);
446 +
        clear_cache();
447 +
        let keys2 = get_or_generate_keys(32, 0x04C11DB7, true);
448 +
449 +
        // Keys should be identical (same parameters produce same keys)
450 +
        assert_eq!(keys, keys2);
451 +
    }
452 +
453 +
    #[test]
454 +
    fn test_cache_key_debug_and_clone() {
455 +
        let key = CrcParamsCacheKey::new(32, 0x04C11DB7, true);
456 +
457 +
        // Test Debug trait
458 +
        let debug_str = format!("{:?}", key);
459 +
        assert!(debug_str.contains("CrcParamsCacheKey"));
460 +
        assert!(debug_str.contains("32"));
461 +
        assert!(debug_str.contains("0x4c11db7") || debug_str.contains("79764919"));
462 +
        assert!(debug_str.contains("true"));
463 +
464 +
        // Test Clone trait
465 +
        let cloned_key = key.clone();
466 +
        assert_eq!(key, cloned_key);
467 +
        assert_eq!(key.width, cloned_key.width);
468 +
        assert_eq!(key.poly, cloned_key.poly);
469 +
        assert_eq!(key.reflected, cloned_key.reflected);
470 +
    }
471 +
472 +
    // Thread safety tests
473 +
    #[test]
474 +
    fn test_concurrent_cache_reads() {
475 +
        use std::sync::{Arc, Barrier};
476 +
        use std::thread;
477 +
478 +
        clear_cache();
479 +
480 +
        // Pre-populate cache with a known value
481 +
        let expected_keys = get_or_generate_keys(32, 0x04C11DB7, true);
482 +
483 +
        let num_threads = 8;
484 +
        let barrier = Arc::new(Barrier::new(num_threads));
485 +
        let mut handles = Vec::new();
486 +
487 +
        // Spawn multiple threads that all read the same cached value simultaneously
488 +
        for i in 0..num_threads {
489 +
            let barrier_clone = Arc::clone(&barrier);
490 +
            let handle = thread::spawn(move || {
491 +
                // Wait for all threads to be ready
492 +
                barrier_clone.wait();
493 +
494 +
                // All threads read from cache simultaneously
495 +
                let keys = get_or_generate_keys(32, 0x04C11DB7, true);
496 +
                (i, keys)
497 +
            });
498 +
            handles.push(handle);
499 +
        }
500 +
501 +
        // Collect results from all threads
502 +
        let mut results = Vec::new();
503 +
        for handle in handles {
504 +
            results.push(handle.join().expect("Thread should not panic"));
505 +
        }
506 +
507 +
        // Verify all threads got the same cached keys
508 +
        assert_eq!(results.len(), num_threads);
509 +
        for (thread_id, keys) in results {
510 +
            assert_eq!(
511 +
                keys, expected_keys,
512 +
                "Thread {} should get same cached keys",
513 +
                thread_id
514 +
            );
515 +
        }
516 +
    }
517 +
518 +
    #[test]
519 +
    #[allow(clippy::needless_range_loop)] // Intentionally testing concurrent indexed access
520 +
    fn test_concurrent_cache_writes() {
521 +
        use std::sync::{Arc, Barrier};
522 +
        use std::thread;
523 +
524 +
        clear_cache();
525 +
526 +
        let num_threads = 6;
527 +
        let barrier = Arc::new(Barrier::new(num_threads));
528 +
        let mut handles = Vec::new();
529 +
530 +
        // Test parameters for different cache entries
531 +
        let test_params = [
532 +
            (32, 0x04C11DB7, true),
533 +
            (32, 0x04C11DB7, false),
534 +
            (32, 0x1EDC6F41, true),
535 +
            (64, 0x42F0E1EBA9EA3693, true),
536 +
            (64, 0x42F0E1EBA9EA3693, false),
537 +
            (64, 0xD800000000000000, true),
538 +
        ];
539 +
540 +
        // Spawn threads that write different cache entries simultaneously
541 +
        for i in 0..num_threads {
542 +
            let barrier_clone = Arc::clone(&barrier);
543 +
            let (width, poly, reflected) = test_params[i];
544 +
545 +
            let handle = thread::spawn(move || {
546 +
                // Wait for all threads to be ready
547 +
                barrier_clone.wait();
548 +
549 +
                // Each thread generates and caches different parameters
550 +
                let keys = get_or_generate_keys(width, poly, reflected);
551 +
                (i, width, poly, reflected, keys)
552 +
            });
553 +
            handles.push(handle);
554 +
        }
555 +
556 +
        // Collect results from all threads
557 +
        let mut results = Vec::new();
558 +
        for handle in handles {
559 +
            results.push(handle.join().expect("Thread should not panic"));
560 +
        }
561 +
562 +
        // Verify all threads completed successfully and got correct keys
563 +
        assert_eq!(results.len(), num_threads);
564 +
565 +
        // Verify each thread's keys match what we'd expect from direct generation
566 +
        for (thread_id, width, poly, reflected, keys) in results {
567 +
            let expected_keys = generate::keys(width, poly, reflected);
568 +
            assert_eq!(
569 +
                keys, expected_keys,
570 +
                "Thread {} should generate correct keys for params ({}, {:#x}, {})",
571 +
                thread_id, width, poly, reflected
572 +
            );
573 +
574 +
            // Verify the keys are now cached by reading them again
575 +
            let cached_keys = get_or_generate_keys(width, poly, reflected);
576 +
            assert_eq!(
577 +
                keys, cached_keys,
578 +
                "Thread {} keys should be cached",
579 +
                thread_id
580 +
            );
581 +
        }
582 +
    }
583 +
584 +
    #[test]
585 +
    fn test_read_write_contention() {
586 +
        use std::sync::{Arc, Barrier};
587 +
        use std::thread;
588 +
        use std::time::Duration;
589 +
590 +
        clear_cache();
591 +
592 +
        // Pre-populate cache with some values
593 +
        let _keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
594 +
        let _keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
595 +
596 +
        let num_readers = 6;
597 +
        let num_writers = 3;
598 +
        let total_threads = num_readers + num_writers;
599 +
        let barrier = Arc::new(Barrier::new(total_threads));
600 +
        let mut handles = Vec::new();
601 +
602 +
        // Spawn reader threads that continuously read cached values
603 +
        for i in 0..num_readers {
604 +
            let barrier_clone = Arc::clone(&barrier);
605 +
            let handle = thread::spawn(move || {
606 +
                barrier_clone.wait();
607 +
608 +
                let mut read_count = 0;
609 +
                let start = std::time::Instant::now();
610 +
611 +
                // Read for a short duration
612 +
                while start.elapsed() < Duration::from_millis(50) {
613 +
                    let keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
614 +
                    let keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
615 +
616 +
                    // Verify we get consistent results
617 +
                    assert_eq!(keys1.len(), 23);
618 +
                    assert_eq!(keys2.len(), 23);
619 +
                    read_count += 1;
620 +
                }
621 +
622 +
                (format!("reader_{}", i), read_count)
623 +
            });
624 +
            handles.push(handle);
625 +
        }
626 +
627 +
        // Spawn writer threads that add new cache entries
628 +
        for i in 0..num_writers {
629 +
            let barrier_clone = Arc::clone(&barrier);
630 +
            let handle = thread::spawn(move || {
631 +
                barrier_clone.wait();
632 +
633 +
                let mut write_count = 0;
634 +
                let start = std::time::Instant::now();
635 +
636 +
                // Write new entries for a short duration
637 +
                while start.elapsed() < Duration::from_millis(50) {
638 +
                    // Use different parameters to create new cache entries
639 +
                    let poly = 0x1EDC6F41 + (i as u64 * 0x1000) + (write_count as u64);
640 +
                    let keys = get_or_generate_keys(32, poly, true);
641 +
642 +
                    assert_eq!(keys.len(), 23);
643 +
                    write_count += 1;
644 +
                }
645 +
646 +
                (format!("writer_{}", i), write_count)
647 +
            });
648 +
            handles.push(handle);
649 +
        }
650 +
651 +
        // Wait for all threads to complete
652 +
        let mut results = Vec::new();
653 +
        for handle in handles {
654 +
            results.push(handle.join().expect("Thread should not panic"));
655 +
        }
656 +
657 +
        // Verify all threads completed successfully
658 +
        assert_eq!(results.len(), total_threads);
659 +
660 +
        // Verify readers and writers both made progress
661 +
        let reader_results: Vec<_> = results
662 +
            .iter()
663 +
            .filter(|(name, _)| name.starts_with("reader_"))
664 +
            .collect();
665 +
        let writer_results: Vec<_> = results
666 +
            .iter()
667 +
            .filter(|(name, _)| name.starts_with("writer_"))
668 +
            .collect();
669 +
670 +
        assert_eq!(reader_results.len(), num_readers);
671 +
        assert_eq!(writer_results.len(), num_writers);
672 +
673 +
        // All threads should have made some progress
674 +
        for (name, count) in &results {
675 +
            assert!(*count > 0, "Thread {} should have made progress", name);
676 +
        }
677 +
    }
678 +
679 +
    #[test]
680 +
    fn test_cache_consistency_under_concurrent_access() {
681 +
        use std::sync::{Arc, Barrier};
682 +
        use std::thread;
683 +
684 +
        clear_cache();
685 +
686 +
        let num_threads = 10;
687 +
        let barrier = Arc::new(Barrier::new(num_threads));
688 +
        let mut handles = Vec::new();
689 +
690 +
        // All threads will try to get the same cache entry simultaneously
691 +
        // This tests the race condition where multiple threads might try to
692 +
        // generate and cache the same keys at the same time
693 +
        for i in 0..num_threads {
694 +
            let barrier_clone = Arc::clone(&barrier);
695 +
            let handle = thread::spawn(move || {
696 +
                barrier_clone.wait();
697 +
698 +
                // All threads request the same parameters simultaneously
699 +
                let keys = get_or_generate_keys(32, 0x04C11DB7, true);
700 +
                (i, keys)
701 +
            });
702 +
            handles.push(handle);
703 +
        }
704 +
705 +
        // Collect results from all threads
706 +
        let mut results = Vec::new();
707 +
        for handle in handles {
708 +
            results.push(handle.join().expect("Thread should not panic"));
709 +
        }
710 +
711 +
        // Verify all threads got identical keys
712 +
        assert_eq!(results.len(), num_threads);
713 +
        let first_keys = results[0].1;
714 +
715 +
        for (thread_id, keys) in results {
716 +
            assert_eq!(
717 +
                keys, first_keys,
718 +
                "Thread {} should get identical keys to other threads",
719 +
                thread_id
720 +
            );
721 +
        }
722 +
723 +
        // Verify the keys are correct by comparing with direct generation
724 +
        let expected_keys = generate::keys(32, 0x04C11DB7, true);
725 +
        assert_eq!(
726 +
            first_keys, expected_keys,
727 +
            "Cached keys should match directly generated keys"
728 +
        );
729 +
730 +
        // Verify subsequent access still returns the same keys
731 +
        let final_keys = get_or_generate_keys(32, 0x04C11DB7, true);
732 +
        assert_eq!(
733 +
            final_keys, first_keys,
734 +
            "Final cache access should return same keys"
735 +
        );
736 +
    }
737 +
738 +
    #[test]
739 +
    fn test_mixed_concurrent_operations() {
740 +
        use std::sync::{Arc, Barrier};
741 +
        use std::thread;
742 +
        use std::time::Duration;
743 +
744 +
        clear_cache();
745 +
746 +
        let num_threads = 8;
747 +
        let barrier = Arc::new(Barrier::new(num_threads));
748 +
        let mut handles = Vec::new();
749 +
750 +
        // Mix of operations: some threads do cache hits, some do cache misses,
751 +
        // some clear the cache, all happening concurrently
752 +
        for i in 0..num_threads {
753 +
            let barrier_clone = Arc::clone(&barrier);
754 +
            let handle = thread::spawn(move || {
755 +
                barrier_clone.wait();
756 +
757 +
                let mut operations = 0;
758 +
                let start = std::time::Instant::now();
759 +
760 +
                while start.elapsed() < Duration::from_millis(30) {
761 +
                    match i % 4 {
762 +
                        0 => {
763 +
                            // Cache hit operations - same parameters
764 +
                            let _keys = get_or_generate_keys(32, 0x04C11DB7, true);
765 +
                        }
766 +
                        1 => {
767 +
                            // Cache miss operations - different parameters each time
768 +
                            let poly = 0x1EDC6F41 + (operations as u64);
769 +
                            let _keys = get_or_generate_keys(32, poly, true);
770 +
                        }
771 +
                        2 => {
772 +
                            // Mixed read operations
773 +
                            let _keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
774 +
                            let _keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
775 +
                        }
776 +
                        3 => {
777 +
                            // Occasional cache clear (but not too often to avoid disrupting other tests)
778 +
                            if operations % 10 == 0 {
779 +
                                clear_cache();
780 +
                            }
781 +
                            let _keys = get_or_generate_keys(32, 0x04C11DB7, true);
782 +
                        }
783 +
                        _ => unreachable!(),
784 +
                    }
785 +
                    operations += 1;
786 +
                }
787 +
788 +
                (i, operations)
789 +
            });
790 +
            handles.push(handle);
791 +
        }
792 +
793 +
        // Wait for all threads to complete
794 +
        let mut results = Vec::new();
795 +
        for handle in handles {
796 +
            results.push(handle.join().expect("Thread should not panic"));
797 +
        }
798 +
799 +
        // Verify all threads completed successfully
800 +
        assert_eq!(results.len(), num_threads);
801 +
802 +
        for (thread_id, operations) in results {
803 +
            assert!(
804 +
                operations > 0,
805 +
                "Thread {} should have completed some operations",
806 +
                thread_id
807 +
            );
808 +
        }
809 +
810 +
        // Verify cache is still functional after all the concurrent operations
811 +
        let final_keys = get_or_generate_keys(32, 0x04C11DB7, true);
812 +
        let expected_keys = generate::keys(32, 0x04C11DB7, true);
813 +
        assert_eq!(
814 +
            final_keys, expected_keys,
815 +
            "Cache should still work correctly after concurrent operations"
816 +
        );
817 +
    }
818 +
819 +
    // Error handling tests
820 +
    #[test]
821 +
    fn test_cache_lock_poisoning_recovery() {
822 +
        use std::panic;
823 +
        use std::sync::{Arc, Mutex};
824 +
        use std::thread;
825 +
826 +
        clear_cache();
827 +
828 +
        // Pre-populate cache with known values
829 +
        let expected_keys = get_or_generate_keys(32, 0x04C11DB7, true);
830 +
831 +
        // Create a scenario that could potentially poison the lock
832 +
        // We'll use a separate test to avoid actually poisoning our cache
833 +
        let poisoned_flag = Arc::new(Mutex::new(false));
834 +
        let poisoned_flag_clone = Arc::clone(&poisoned_flag);
835 +
836 +
        // Spawn a thread that panics while holding a lock (simulated)
837 +
        let handle = thread::spawn(move || {
838 +
            // Simulate a panic scenario - we don't actually poison the cache lock
839 +
            // because that would break other tests, but we test the recovery path
840 +
            let _guard = poisoned_flag_clone.lock().unwrap();
841 +
            panic!("Simulated panic");
842 +
        });
843 +
844 +
        // Wait for the thread to panic
845 +
        let result = handle.join();
846 +
        assert!(result.is_err(), "Thread should have panicked");
847 +
848 +
        // Verify that our cache still works despite the simulated error scenario
849 +
        let keys_after_panic = get_or_generate_keys(32, 0x04C11DB7, true);
850 +
        assert_eq!(
851 +
            keys_after_panic, expected_keys,
852 +
            "Cache should still work after simulated panic scenario"
853 +
        );
854 +
855 +
        // Test that new cache entries can still be created
856 +
        let new_keys = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
857 +
        assert_eq!(new_keys.len(), 23, "New cache entries should still work");
858 +
859 +
        // Verify the new keys are cached
860 +
        let cached_new_keys = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
861 +
        assert_eq!(new_keys, cached_new_keys, "New keys should be cached");
862 +
    }
863 +
864 +
    #[test]
865 +
    fn test_cache_fallback_to_direct_generation() {
866 +
        clear_cache();
867 +
868 +
        // Test that even if cache operations fail, we still get valid keys
869 +
        // This tests the fallback mechanism in get_or_generate_keys
870 +
871 +
        // Generate expected keys directly
872 +
        let expected_keys_32 = generate::keys(32, 0x04C11DB7, true);
873 +
        let expected_keys_64 = generate::keys(64, 0x42F0E1EBA9EA3693, false);
874 +
875 +
        // Get keys through cache (should work normally)
876 +
        let cached_keys_32 = get_or_generate_keys(32, 0x04C11DB7, true);
877 +
        let cached_keys_64 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
878 +
879 +
        // Verify keys are correct regardless of cache state
880 +
        assert_eq!(
881 +
            cached_keys_32, expected_keys_32,
882 +
            "CRC32 keys should be correct even with cache issues"
883 +
        );
884 +
        assert_eq!(
885 +
            cached_keys_64, expected_keys_64,
886 +
            "CRC64 keys should be correct even with cache issues"
887 +
        );
888 +
889 +
        // Test multiple calls to ensure consistency
890 +
        for _ in 0..5 {
891 +
            let keys_32 = get_or_generate_keys(32, 0x04C11DB7, true);
892 +
            let keys_64 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
893 +
894 +
            assert_eq!(
895 +
                keys_32, expected_keys_32,
896 +
                "Repeated calls should return consistent CRC32 keys"
897 +
            );
898 +
            assert_eq!(
899 +
                keys_64, expected_keys_64,
900 +
                "Repeated calls should return consistent CRC64 keys"
901 +
            );
902 +
        }
903 +
    }
904 +
905 +
    #[test]
906 +
    fn test_cache_operations_under_memory_pressure() {
907 +
        clear_cache();
908 +
909 +
        // Simulate memory pressure by creating many cache entries
910 +
        // This tests that cache operations remain stable under load
911 +
        let mut test_keys = Vec::new();
912 +
        let num_entries = 100;
913 +
914 +
        // Create many different cache entries
915 +
        for i in 0..num_entries {
916 +
            let poly = 0x04C11DB7 + (i as u64);
917 +
            let reflected = i % 2 == 0;
918 +
            let width = if i % 3 == 0 { 64 } else { 32 };
919 +
920 +
            let keys = get_or_generate_keys(width, poly, reflected);
921 +
            test_keys.push((width, poly, reflected, keys));
922 +
        }
923 +
924 +
        // Verify all entries are correctly cached and retrievable
925 +
        for (i, &(width, poly, reflected, ref expected_keys)) in test_keys.iter().enumerate() {
926 +
            let cached_keys = get_or_generate_keys(width, poly, reflected);
927 +
            assert_eq!(
928 +
                cached_keys, *expected_keys,
929 +
                "Entry {} should be correctly cached",
930 +
                i
931 +
            );
932 +
        }
933 +
934 +
        // Test that cache operations still work after creating many entries
935 +
        let new_keys = get_or_generate_keys(32, 0x1EDC6F41, true);
936 +
        assert_eq!(
937 +
            new_keys.len(),
938 +
            23,
939 +
            "New entries should still work under memory pressure"
940 +
        );
941 +
942 +
        // Verify the new entry is cached
943 +
        let cached_new_keys = get_or_generate_keys(32, 0x1EDC6F41, true);
944 +
        assert_eq!(new_keys, cached_new_keys, "New entry should be cached");
945 +
946 +
        // Test cache clearing still works
947 +
        clear_cache();
948 +
949 +
        // Verify cache was cleared by testing that operations still work
950 +
        let post_clear_keys = get_or_generate_keys(32, 0x04C11DB7, true);
951 +
        assert_eq!(
952 +
            post_clear_keys.len(),
953 +
            23,
954 +
            "Cache should work after clearing under memory pressure"
955 +
        );
956 +
    }
957 +
958 +
    #[test]
959 +
    fn test_cache_error_recovery_patterns() {
960 +
        clear_cache();
961 +
962 +
        // Test various error recovery patterns to ensure robustness
963 +
964 +
        // Pattern 1: Rapid cache operations
965 +
        for i in 0..50 {
966 +
            let poly = 0x04C11DB7 + (i as u64 % 10); // Create some duplicates
967 +
            let keys = get_or_generate_keys(32, poly, true);
968 +
            assert_eq!(keys.len(), 23, "Rapid operation {} should succeed", i);
969 +
        }
970 +
971 +
        // Pattern 2: Interleaved cache hits and misses
972 +
        let base_keys = get_or_generate_keys(32, 0x04C11DB7, true);
973 +
        for i in 0..20 {
974 +
            // Cache hit
975 +
            let hit_keys = get_or_generate_keys(32, 0x04C11DB7, true);
976 +
            assert_eq!(hit_keys, base_keys, "Cache hit {} should be consistent", i);
977 +
978 +
            // Cache miss
979 +
            let miss_keys = get_or_generate_keys(32, 0x1EDC6F41 + (i as u64), false);
980 +
            assert_eq!(miss_keys.len(), 23, "Cache miss {} should succeed", i);
981 +
        }
982 +
983 +
        // Pattern 3: Mixed operations with clearing
984 +
        for i in 0..10 {
985 +
            let keys1 = get_or_generate_keys(32, 0x04C11DB7, true);
986 +
            let keys2 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
987 +
988 +
            if i % 3 == 0 {
989 +
                clear_cache();
990 +
            }
991 +
992 +
            // Operations should still work after clearing
993 +
            let keys3 = get_or_generate_keys(32, 0x04C11DB7, true);
994 +
            let keys4 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
995 +
996 +
            // Keys should be consistent (same parameters = same keys)
997 +
            assert_eq!(keys1, keys3, "Keys should be consistent across clears");
998 +
            assert_eq!(keys2, keys4, "Keys should be consistent across clears");
999 +
        }
1000 +
    }
1001 +
1002 +
    #[test]
1003 +
    fn test_cache_concurrent_error_scenarios() {
1004 +
        use std::sync::{Arc, Barrier};
1005 +
        use std::thread;
1006 +
        use std::time::Duration;
1007 +
1008 +
        clear_cache();
1009 +
1010 +
        let num_threads = 8;
1011 +
        let barrier = Arc::new(Barrier::new(num_threads));
1012 +
        let mut handles = Vec::new();
1013 +
1014 +
        // Create concurrent scenarios that could potentially cause errors
1015 +
        for i in 0..num_threads {
1016 +
            let barrier_clone = Arc::clone(&barrier);
1017 +
            let handle = thread::spawn(move || {
1018 +
                barrier_clone.wait();
1019 +
1020 +
                let mut operations = 0;
1021 +
                let errors = 0;
1022 +
                let start = std::time::Instant::now();
1023 +
1024 +
                // Run operations for a short time with various patterns
1025 +
                while start.elapsed() < Duration::from_millis(100) {
1026 +
                    match operations % 5 {
1027 +
                        0 => {
1028 +
                            // Normal cache operations
1029 +
                            let _keys = get_or_generate_keys(32, 0x04C11DB7, true);
1030 +
                        }
1031 +
                        1 => {
1032 +
                            // Rapid different parameters
1033 +
                            let poly = 0x1EDC6F41 + (operations as u64);
1034 +
                            let _keys = get_or_generate_keys(32, poly, true);
1035 +
                        }
1036 +
                        2 => {
1037 +
                            // Cache clearing (potential contention point)
1038 +
                            clear_cache();
1039 +
                        }
1040 +
                        3 => {
1041 +
                            // Mixed width operations
1042 +
                            let _keys32 = get_or_generate_keys(32, 0x04C11DB7, true);
1043 +
                            let _keys64 = get_or_generate_keys(64, 0x42F0E1EBA9EA3693, false);
1044 +
                        }
1045 +
                        4 => {
1046 +
                            // Rapid same-parameter calls (cache hits)
1047 +
                            for _ in 0..5 {
1048 +
                                let _keys = get_or_generate_keys(32, 0x04C11DB7, true);
1049 +
                            }
1050 +
                        }
1051 +
                        _ => unreachable!(),
1052 +
                    }
1053 +
                    operations += 1;
1054 +
                }
1055 +
1056 +
                (i, operations, errors)
1057 +
            });
1058 +
            handles.push(handle);
1059 +
        }
1060 +
1061 +
        // Collect results
1062 +
        let mut results = Vec::new();
1063 +
        for handle in handles {
1064 +
            match handle.join() {
1065 +
                Ok(result) => results.push(result),
1066 +
                Err(_) => panic!("Thread should not panic during error scenarios"),
1067 +
            }
1068 +
        }
1069 +
1070 +
        // Verify all threads completed successfully
1071 +
        assert_eq!(results.len(), num_threads);
1072 +
1073 +
        for (thread_id, operations, errors) in results {
1074 +
            assert!(
1075 +
                operations > 0,
1076 +
                "Thread {} should have completed operations",
1077 +
                thread_id
1078 +
            );
1079 +
            // In our implementation, errors should be handled gracefully without propagating
1080 +
            assert_eq!(
1081 +
                errors, 0,
1082 +
                "Thread {} should not have unhandled errors",
1083 +
                thread_id
1084 +
            );
1085 +
        }
1086 +
1087 +
        // Verify cache is still functional after all concurrent error scenarios
1088 +
        let final_keys = get_or_generate_keys(32, 0x04C11DB7, true);
1089 +
        let expected_keys = generate::keys(32, 0x04C11DB7, true);
1090 +
        assert_eq!(
1091 +
            final_keys, expected_keys,
1092 +
            "Cache should still work correctly after concurrent error scenarios"
1093 +
        );
1094 +
    }
1095 +
1096 +
    /// Non-stress version of the stress test to allow Miri to evaluate without timing out.
1097 +
    #[test]
1098 +
    fn test_cache_memory_allocation_non_stress() {
1099 +
        cache_memory_allocation_stress(2);
1100 +
    }
1101 +
1102 +
    /// Skipping for Miri runs due to time constraints, underlying code already covered by other
1103 +
    /// tests.
1104 +
    #[test]
1105 +
    #[cfg_attr(miri, ignore)]
1106 +
    fn test_cache_memory_allocation_stress() {
1107 +
        cache_memory_allocation_stress(1000);
1108 +
    }
1109 +
1110 +
    fn cache_memory_allocation_stress(count: i32) {
1111 +
        clear_cache();
1112 +
1113 +
        // Test cache behavior under memory allocation stress
1114 +
        // Create a large number of unique cache entries to stress memory allocation
1115 +
        let mut created_entries = Vec::new();
1116 +
        let stress_count = count;
1117 +
1118 +
        // Create many unique cache entries
1119 +
        for i in 0..stress_count {
1120 +
            let width = if i % 2 == 0 { 32 } else { 64 };
1121 +
            let poly = 0x04C11DB7 + (i as u64);
1122 +
            let reflected = i % 3 == 0;
1123 +
1124 +
            let keys = get_or_generate_keys(width, poly, reflected);
1125 +
            created_entries.push((width, poly, reflected, keys));
1126 +
1127 +
            // Verify each entry is valid
1128 +
            assert_eq!(keys.len(), 23, "Entry {} should have valid keys", i);
1129 +
        }
1130 +
1131 +
        // Verify all entries are still accessible (testing cache integrity)
1132 +
        for (i, &(width, poly, reflected, ref expected_keys)) in created_entries.iter().enumerate()
1133 +
        {
1134 +
            let retrieved_keys = get_or_generate_keys(width, poly, reflected);
1135 +
            assert_eq!(
1136 +
                retrieved_keys, *expected_keys,
1137 +
                "Entry {} should be retrievable after stress test",
1138 +
                i
1139 +
            );
1140 +
        }
1141 +
1142 +
        // Test that new entries can still be created
1143 +
        let new_keys = get_or_generate_keys(32, 0xFFFFFFFF, true);
1144 +
        assert_eq!(
1145 +
            new_keys.len(),
1146 +
            23,
1147 +
            "New entries should work after memory stress"
1148 +
        );
1149 +
1150 +
        // Test cache clearing works under memory pressure
1151 +
        clear_cache();
1152 +
1153 +
        // Verify cache operations still work after clearing
1154 +
        let post_stress_keys = get_or_generate_keys(32, 0x04C11DB7, true);
1155 +
        assert_eq!(
1156 +
            post_stress_keys.len(),
1157 +
            23,
1158 +
            "Cache should work after memory stress and clearing"
1159 +
        );
1160 +
    }
1161 +
1162 +
    // Integration tests for CrcParams compatibility
1163 +
    #[test]
1164 +
    fn test_crc_params_new_behavior_unchanged() {
1165 +
        use crate::CrcParams;
1166 +
1167 +
        clear_cache();
1168 +
1169 +
        // Test that CrcParams::new() creates identical instances regardless of caching
1170 +
        let params1 = CrcParams::new(
1171 +
            "TEST_CRC32",
1172 +
            32,
1173 +
            0x04C11DB7,
1174 +
            0xFFFFFFFF,
1175 +
            true,
1176 +
            0xFFFFFFFF,
1177 +
            0xCBF43926,
1178 +
        );
1179 +
        let params2 = CrcParams::new(
1180 +
            "TEST_CRC32",
1181 +
            32,
1182 +
            0x04C11DB7,
1183 +
            0xFFFFFFFF,
1184 +
            true,
1185 +
            0xFFFFFFFF,
1186 +
            0xCBF43926,
1187 +
        );
1188 +
1189 +
        // All fields should be identical
1190 +
        assert_eq!(params1.name, params2.name);
1191 +
        assert_eq!(params1.width, params2.width);
1192 +
        assert_eq!(params1.poly, params2.poly);
1193 +
        assert_eq!(params1.init, params2.init);
1194 +
        assert_eq!(params1.refin, params2.refin);
1195 +
        assert_eq!(params1.refout, params2.refout);
1196 +
        assert_eq!(params1.xorout, params2.xorout);
1197 +
        assert_eq!(params1.check, params2.check);
1198 +
        assert_eq!(params1.keys, params2.keys);
1199 +
1200 +
        // Test CRC64 parameters as well
1201 +
        let params64_1 = CrcParams::new(
1202 +
            "TEST_CRC64",
1203 +
            64,
1204 +
            0x42F0E1EBA9EA3693,
1205 +
            0xFFFFFFFFFFFFFFFF,
1206 +
            false,
1207 +
            0x0,
1208 +
            0x6C40DF5F0B497347,
1209 +
        );
1210 +
        let params64_2 = CrcParams::new(
1211 +
            "TEST_CRC64",
1212 +
            64,
1213 +
            0x42F0E1EBA9EA3693,
1214 +
            0xFFFFFFFFFFFFFFFF,
1215 +
            false,
1216 +
            0x0,
1217 +
            0x6C40DF5F0B497347,
1218 +
        );
1219 +
1220 +
        assert_eq!(params64_1.name, params64_2.name);
1221 +
        assert_eq!(params64_1.width, params64_2.width);
1222 +
        assert_eq!(params64_1.poly, params64_2.poly);
1223 +
        assert_eq!(params64_1.init, params64_2.init);
1224 +
        assert_eq!(params64_1.refin, params64_2.refin);
1225 +
        assert_eq!(params64_1.refout, params64_2.refout);
1226 +
        assert_eq!(params64_1.xorout, params64_2.xorout);
1227 +
        assert_eq!(params64_1.check, params64_2.check);
1228 +
        assert_eq!(params64_1.keys, params64_2.keys);
1229 +
    }
1230 +
1231 +
    #[test]
1232 +
    fn test_existing_crc_parameter_combinations() {
1233 +
        use crate::test::consts::TEST_ALL_CONFIGS;
1234 +
1235 +
        clear_cache();
1236 +
1237 +
        // Test all existing CRC parameter combinations work correctly with caching
1238 +
        for config in TEST_ALL_CONFIGS {
1239 +
            let params = crate::CrcParams::new(
1240 +
                config.get_name(),
1241 +
                config.get_width(),
1242 +
                config.get_poly(),
1243 +
                config.get_init(),
1244 +
                config.get_refin(),
1245 +
                config.get_xorout(),
1246 +
                config.get_check(),
1247 +
            );
1248 +
1249 +
            // Verify the parameters are set correctly
1250 +
            assert_eq!(params.name, config.get_name());
1251 +
            assert_eq!(params.width, config.get_width());
1252 +
            assert_eq!(params.poly, config.get_poly());
1253 +
            assert_eq!(params.init, config.get_init());
1254 +
            assert_eq!(params.refin, config.get_refin());
1255 +
            assert_eq!(params.refout, config.get_refin());
1256 +
            assert_eq!(params.xorout, config.get_xorout());
1257 +
            assert_eq!(params.check, config.get_check());
1258 +
1259 +
            // Verify keys are correct by comparing with expected keys
1260 +
            let expected_keys = config.get_keys();
1261 +
            assert_eq!(
1262 +
                params.keys,
1263 +
                expected_keys,
1264 +
                "Keys mismatch for {}: expected {:?}, got {:?}",
1265 +
                config.get_name(),
1266 +
                expected_keys,
1267 +
                params.keys
1268 +
            );
1269 +
        }
1270 +
    }
1271 +
1272 +
    #[test]
1273 +
    fn test_cached_vs_uncached_results_identical() {
1274 +
        clear_cache();
1275 +
1276 +
        // Test parameters that affect key generation
1277 +
        let test_cases = [
1278 +
            (32, 0x04C11DB7, true),          // CRC32 reflected
1279 +
            (32, 0x04C11DB7, false),         // CRC32 non-reflected
1280 +
            (32, 0x1EDC6F41, true),          // CRC32C
1281 +
            (64, 0x42F0E1EBA9EA3693, true),  // CRC64 ISO reflected
1282 +
            (64, 0x42F0E1EBA9EA3693, false), // CRC64 ISO non-reflected
1283 +
            (64, 0xD800000000000000, true),  // CRC64 ECMA
1284 +
        ];
1285 +
1286 +
        for &(width, poly, reflected) in &test_cases {
1287 +
            // Generate keys directly (uncached)
1288 +
            let uncached_keys = generate::keys(width, poly, reflected);
1289 +
1290 +
            // Clear cache to ensure first call is cache miss
1291 +
            clear_cache();
1292 +
1293 +
            // Create CrcParams instance (first call - cache miss)
1294 +
            let params1 =
1295 +
                crate::CrcParams::new("TEST", width, poly, 0xFFFFFFFFFFFFFFFF, reflected, 0x0, 0x0);
1296 +
1297 +
            // Create another CrcParams instance with same parameters (cache hit)
1298 +
            let params2 =
1299 +
                crate::CrcParams::new("TEST", width, poly, 0xFFFFFFFFFFFFFFFF, reflected, 0x0, 0x0);
1300 +
1301 +
            // All should be identical
1302 +
            assert_eq!(
1303 +
                uncached_keys, params1.keys,
1304 +
                "Uncached keys should match CrcParams keys for width={}, poly={:#x}, reflected={}",
1305 +
                width, poly, reflected
1306 +
            );
1307 +
            assert_eq!(
1308 +
                params1.keys, params2.keys,
1309 +
                "Cached and uncached CrcParams should have identical keys for width={}, poly={:#x}, reflected={}",
1310 +
                width, poly, reflected
1311 +
            );
1312 +
            assert_eq!(
1313 +
                uncached_keys, params2.keys,
1314 +
                "All key generation methods should produce identical results for width={}, poly={:#x}, reflected={}",
1315 +
                width, poly, reflected
1316 +
            );
1317 +
        }
1318 +
    }
1319 +
1320 +
    #[test]
1321 +
    fn test_multiple_crc_params_instances_use_cached_keys() {
1322 +
        clear_cache();
1323 +
1324 +
        // Create multiple CrcParams instances with the same parameters
1325 +
        let width = 32;
1326 +
        let poly = 0x04C11DB7;
1327 +
        let reflected = true;
1328 +
        let init = 0xFFFFFFFF;
1329 +
        let xorout = 0xFFFFFFFF;
1330 +
        let check = 0xCBF43926;
1331 +
1332 +
        // First instance - should generate and cache keys
1333 +
        let params1 = crate::CrcParams::new("TEST1", width, poly, init, reflected, xorout, check);
1334 +
1335 +
        // Subsequent instances - should use cached keys
1336 +
        let params2 = crate::CrcParams::new("TEST2", width, poly, init, reflected, xorout, check);
1337 +
        let params3 = crate::CrcParams::new("TEST3", width, poly, init, reflected, xorout, check);
1338 +
        let params4 = crate::CrcParams::new("TEST4", width, poly, init, reflected, xorout, check);
1339 +
1340 +
        // All should have identical keys (proving cache is working)
1341 +
        assert_eq!(
1342 +
            params1.keys, params2.keys,
1343 +
            "Instance 1 and 2 should have identical keys"
1344 +
        );
1345 +
        assert_eq!(
1346 +
            params1.keys, params3.keys,
1347 +
            "Instance 1 and 3 should have identical keys"
1348 +
        );
1349 +
        assert_eq!(
1350 +
            params1.keys, params4.keys,
1351 +
            "Instance 1 and 4 should have identical keys"
1352 +
        );
1353 +
        assert_eq!(
1354 +
            params2.keys, params3.keys,
1355 +
            "Instance 2 and 3 should have identical keys"
1356 +
        );
1357 +
        assert_eq!(
1358 +
            params2.keys, params4.keys,
1359 +
            "Instance 2 and 4 should have identical keys"
1360 +
        );
1361 +
        assert_eq!(
1362 +
            params3.keys, params4.keys,
1363 +
            "Instance 3 and 4 should have identical keys"
1364 +
        );
1365 +
1366 +
        // Verify keys are mathematically correct
1367 +
        let expected_keys = generate::keys(width, poly, reflected);
1368 +
        assert_eq!(
1369 +
            params1.keys, expected_keys,
1370 +
            "Cached keys should be mathematically correct"
1371 +
        );
1372 +
1373 +
        // Test with different parameters that don't affect key generation
1374 +
        let params5 = crate::CrcParams::new(
1375 +
            "DIFFERENT_NAME",
1376 +
            width,
1377 +
            poly,
1378 +
            0x12345678,
1379 +
            reflected,
1380 +
            0x87654321,
1381 +
            0xABCDEF,
1382 +
        );
1383 +
        assert_eq!(
1384 +
            params1.keys, params5.keys,
1385 +
            "Different init/xorout/check/name should not affect cached keys"
1386 +
        );
1387 +
1388 +
        // Test with CRC64 parameters
1389 +
        let width64 = 64;
1390 +
        let poly64 = 0x42F0E1EBA9EA3693;
1391 +
        let reflected64 = false;
1392 +
1393 +
        let params64_1 = crate::CrcParams::new(
1394 +
            "CRC64_1",
1395 +
            width64,
1396 +
            poly64,
1397 +
            0xFFFFFFFFFFFFFFFF,
1398 +
            reflected64,
1399 +
            0x0,
1400 +
            0x0,
1401 +
        );
1402 +
        let params64_2 = crate::CrcParams::new(
1403 +
            "CRC64_2",
1404 +
            width64,
1405 +
            poly64,
1406 +
            0x0,
1407 +
            reflected64,
1408 +
            0xFFFFFFFFFFFFFFFF,
1409 +
            0x12345,
1410 +
        );
1411 +
        let params64_3 = crate::CrcParams::new(
1412 +
            "CRC64_3",
1413 +
            width64,
1414 +
            poly64,
1415 +
            0x123456789ABCDEF0,
1416 +
            reflected64,
1417 +
            0x0FEDCBA987654321,
1418 +
            0x999,
1419 +
        );
1420 +
1421 +
        assert_eq!(
1422 +
            params64_1.keys, params64_2.keys,
1423 +
            "CRC64 instances should have identical keys"
1424 +
        );
1425 +
        assert_eq!(
1426 +
            params64_1.keys, params64_3.keys,
1427 +
            "CRC64 instances should have identical keys"
1428 +
        );
1429 +
1430 +
        let expected_keys64 = generate::keys(width64, poly64, reflected64);
1431 +
        assert_eq!(
1432 +
            params64_1.keys, expected_keys64,
1433 +
            "CRC64 cached keys should be mathematically correct"
1434 +
        );
1435 +
    }
1436 +
1437 +
    #[test]
1438 +
    fn test_crc_params_api_compatibility() {
1439 +
        use crate::{CrcAlgorithm, CrcParams};
1440 +
1441 +
        clear_cache();
1442 +
1443 +
        // Test that the CrcParams API remains unchanged
1444 +
        let params = CrcParams::new(
1445 +
            "API_TEST", 32, 0x04C11DB7, 0xFFFFFFFF, true, 0xFFFFFFFF, 0xCBF43926,
1446 +
        );
1447 +
1448 +
        // Verify all public fields are accessible and have expected types
1449 +
        let _algorithm: CrcAlgorithm = params.algorithm;
1450 +
        let _name: &'static str = params.name;
1451 +
        let _width: u8 = params.width;
1452 +
        let _poly: u64 = params.poly;
1453 +
        let _init: u64 = params.init;
1454 +
        let _refin: bool = params.refin;
1455 +
        let _refout: bool = params.refout;
1456 +
        let _xorout: u64 = params.xorout;
1457 +
        let _check: u64 = params.check;
1458 +
        let _keys: [u64; 23] = params.keys.to_keys_array_23();
1459 +
1460 +
        // Verify the algorithm is set to CrcCustom (unified custom variant)
1461 +
        assert!(matches!(params.algorithm, CrcAlgorithm::CrcCustom));
1462 +
1463 +
        // Test that CrcParams can be copied and cloned
1464 +
        let params_copy = params;
1465 +
        let params_clone = params;
1466 +
1467 +
        assert_eq!(params.keys, params_copy.keys);
1468 +
        assert_eq!(params.keys, params_clone.keys);
1469 +
1470 +
        // Test Debug formatting works
1471 +
        let debug_str = format!("{:?}", params);
1472 +
        assert!(debug_str.contains("CrcParams"));
1473 +
        assert!(debug_str.contains("API_TEST"));
1474 +
    }
1475 +
1476 +
    #[test]
1477 +
    fn test_crc_params_with_all_standard_algorithms() {
1478 +
        use crate::test::consts::TEST_ALL_CONFIGS;
1479 +
1480 +
        clear_cache();
1481 +
1482 +
        // Test creating CrcParams for all standard CRC algorithms
1483 +
        for config in TEST_ALL_CONFIGS {
1484 +
            // Create CrcParams using the same parameters as the standard algorithm
1485 +
            let params = crate::CrcParams::new(
1486 +
                config.get_name(),
1487 +
                config.get_width(),
1488 +
                config.get_poly(),
1489 +
                config.get_init(),
1490 +
                config.get_refin(),
1491 +
                config.get_xorout(),
1492 +
                config.get_check(),
1493 +
            );
1494 +
1495 +
            // Verify the created params match the expected configuration
1496 +
            assert_eq!(params.name, config.get_name());
1497 +
            assert_eq!(params.width, config.get_width());
1498 +
            assert_eq!(params.poly, config.get_poly());
1499 +
            assert_eq!(params.init, config.get_init());
1500 +
            assert_eq!(params.refin, config.get_refin());
1501 +
            assert_eq!(params.refout, config.get_refin());
1502 +
            assert_eq!(params.xorout, config.get_xorout());
1503 +
            assert_eq!(params.check, config.get_check());
1504 +
1505 +
            // Most importantly, verify the keys are correct
1506 +
            assert_eq!(
1507 +
                params.keys,
1508 +
                config.get_keys(),
1509 +
                "Keys should match expected values for {}",
1510 +
                config.get_name()
1511 +
            );
1512 +
1513 +
            // Create a second instance to test caching
1514 +
            let params2 = crate::CrcParams::new(
1515 +
                "CACHED_VERSION", // Different name shouldn't affect caching
1516 +
                config.get_width(),
1517 +
                config.get_poly(),
1518 +
                0x12345678, // Different init shouldn't affect caching
1519 +
                config.get_refin(),
1520 +
                0x87654321, // Different xorout shouldn't affect caching
1521 +
                0xABCDEF,   // Different check shouldn't affect caching
1522 +
            );
1523 +
1524 +
            // Keys should be identical (proving cache hit)
1525 +
            assert_eq!(
1526 +
                params.keys,
1527 +
                params2.keys,
1528 +
                "Cached keys should be identical for {}",
1529 +
                config.get_name()
1530 +
            );
1531 +
        }
1532 +
    }
1533 +
1534 +
    #[test]
1535 +
    fn test_crc_params_edge_cases() {
1536 +
        clear_cache();
1537 +
1538 +
        // Test edge cases for CrcParams creation
1539 +
1540 +
        // Test minimum and maximum polynomial values
1541 +
        let params_min_poly = crate::CrcParams::new("MIN_POLY", 32, 0x1, 0x0, false, 0x0, 0x0);
1542 +
        let params_max_poly =
1543 +
            crate::CrcParams::new("MAX_POLY", 32, 0xFFFFFFFF, 0x0, false, 0x0, 0x0);
1544 +
1545 +
        // Both should create valid instances
1546 +
        assert_eq!(params_min_poly.width, 32);
1547 +
        assert_eq!(params_min_poly.poly, 0x1);
1548 +
        assert_eq!(params_max_poly.width, 32);
1549 +
        assert_eq!(params_max_poly.poly, 0xFFFFFFFF);
1550 +
1551 +
        // Test both reflection modes
1552 +
        let params_reflected =
1553 +
            crate::CrcParams::new("REFLECTED", 32, 0x04C11DB7, 0x0, true, 0x0, 0x0);
1554 +
        let params_normal = crate::CrcParams::new("NORMAL", 32, 0x04C11DB7, 0x0, false, 0x0, 0x0);
1555 +
1556 +
        // Should have different keys due to different reflection
1557 +
        assert_ne!(params_reflected.keys, params_normal.keys);
1558 +
        assert!(params_reflected.refin);
1559 +
        assert!(params_reflected.refout);
1560 +
        assert!(!params_normal.refin);
1561 +
        assert!(!params_normal.refout);
1562 +
1563 +
        // Test 64-bit edge cases
1564 +
        let params64_min = crate::CrcParams::new("CRC64_MIN", 64, 0x1, 0x0, false, 0x0, 0x0);
1565 +
        let params64_max =
1566 +
            crate::CrcParams::new("CRC64_MAX", 64, 0xFFFFFFFFFFFFFFFF, 0x0, false, 0x0, 0x0);
1567 +
1568 +
        assert_eq!(params64_min.width, 64);
1569 +
        assert_eq!(params64_min.poly, 0x1);
1570 +
        assert_eq!(params64_max.width, 64);
1571 +
        assert_eq!(params64_max.poly, 0xFFFFFFFFFFFFFFFF);
1572 +
1573 +
        // Verify all instances have valid 23-element key arrays
1574 +
        assert_eq!(params_min_poly.keys.key_count(), 23);
1575 +
        assert_eq!(params_max_poly.keys.key_count(), 23);
1576 +
        assert_eq!(params_reflected.keys.key_count(), 23);
1577 +
        assert_eq!(params_normal.keys.key_count(), 23);
1578 +
        assert_eq!(params64_min.keys.key_count(), 23);
1579 +
        assert_eq!(params64_max.keys.key_count(), 23);
1580 +
    }
1581 +
1582 +
    #[test]
1583 +
    fn test_crc_params_concurrent_creation() {
1584 +
        use std::sync::{Arc, Barrier};
1585 +
        use std::thread;
1586 +
1587 +
        clear_cache();
1588 +
1589 +
        let num_threads = 8;
1590 +
        let barrier = Arc::new(Barrier::new(num_threads));
1591 +
        let mut handles = Vec::new();
1592 +
1593 +
        // All threads create CrcParams with the same parameters simultaneously
1594 +
        for i in 0..num_threads {
1595 +
            let barrier_clone = Arc::clone(&barrier);
1596 +
            let handle = thread::spawn(move || {
1597 +
                barrier_clone.wait();
1598 +
1599 +
                // All threads create the same CrcParams
1600 +
                let params = crate::CrcParams::new(
1601 +
                    "CONCURRENT_TEST",
1602 +
                    32,
1603 +
                    0x04C11DB7,
1604 +
                    0xFFFFFFFF,
1605 +
                    true,
1606 +
                    0xFFFFFFFF,
1607 +
                    0xCBF43926,
1608 +
                );
1609 +
1610 +
                (i, params)
1611 +
            });
1612 +
            handles.push(handle);
1613 +
        }
1614 +
1615 +
        // Collect results from all threads
1616 +
        let mut results = Vec::new();
1617 +
        for handle in handles {
1618 +
            results.push(handle.join().expect("Thread should not panic"));
1619 +
        }
1620 +
1621 +
        // Verify all threads completed successfully
1622 +
        assert_eq!(results.len(), num_threads);
1623 +
1624 +
        // Verify all CrcParams instances have identical keys
1625 +
        let first_keys = results[0].1.keys;
1626 +
        for (thread_id, params) in results {
1627 +
            assert_eq!(
1628 +
                params.keys, first_keys,
1629 +
                "Thread {} should have identical keys to other threads",
1630 +
                thread_id
1631 +
            );
1632 +
1633 +
            // Verify other fields are also correct
1634 +
            assert_eq!(params.name, "CONCURRENT_TEST");
1635 +
            assert_eq!(params.width, 32);
1636 +
            assert_eq!(params.poly, 0x04C11DB7);
1637 +
            assert_eq!(params.init, 0xFFFFFFFF);
1638 +
            assert!(params.refin);
1639 +
            assert!(params.refout);
1640 +
            assert_eq!(params.xorout, 0xFFFFFFFF);
1641 +
            assert_eq!(params.check, 0xCBF43926);
1642 +
        }
1643 +
1644 +
        // Verify the keys are mathematically correct
1645 +
        let expected_keys = generate::keys(32, 0x04C11DB7, true);
1646 +
        assert_eq!(
1647 +
            first_keys, expected_keys,
1648 +
            "All concurrent CrcParams should have correct keys"
1649 +
        );
1650 +
    }
1651 +
1652 +
    #[test]
1653 +
    fn test_lock_poisoning_recovery() {
1654 +
        use std::sync::{Arc, Barrier};
1655 +
        use std::thread;
1656 +
1657 +
        clear_cache();
1658 +
1659 +
        // This test is tricky because we need to poison the lock without
1660 +
        // actually breaking our test. We'll simulate lock poisoning by
1661 +
        // creating a scenario where a thread panics while holding a write lock.
1662 +
        // However, since our implementation uses best-effort error handling,
1663 +
        // it should gracefully degrade rather than propagate panics.
1664 +
1665 +
        // First, verify normal operation
1666 +
        let keys_before = get_or_generate_keys(32, 0x04C11DB7, true);
1667 +
        assert_eq!(keys_before.len(), 23);
1668 +
1669 +
        // Test that even if internal operations fail, the function still returns valid keys
1670 +
        // We can't easily poison the lock in a controlled way, but we can verify
1671 +
        // that our error handling works by testing edge cases
1672 +
1673 +
        // Multiple rapid cache operations that might stress the locking mechanism
1674 +
        let num_threads = 4;
1675 +
        let barrier = Arc::new(Barrier::new(num_threads));
1676 +
        let mut handles = Vec::new();
1677 +
1678 +
        for i in 0..num_threads {
1679 +
            let barrier_clone = Arc::clone(&barrier);
1680 +
            let handle = thread::spawn(move || {
1681 +
                barrier_clone.wait();
1682 +
1683 +
                // Rapid cache operations that might cause contention
1684 +
                for j in 0..20 {
1685 +
                    let poly = 0x04C11DB7 + (i as u64 * 1000) + (j as u64);
1686 +
                    let keys = get_or_generate_keys(32, poly, true);
1687 +
                    assert_eq!(
1688 +
                        keys.len(),
1689 +
                        23,
1690 +
                        "Thread {} iteration {} should return valid keys",
1691 +
                        i,
1692 +
                        j
1693 +
                    );
1694 +
1695 +
                    // Occasional cache clear to increase contention
1696 +
                    if j % 7 == 0 {
1697 +
                        clear_cache();
1698 +
                    }
1699 +
                }
1700 +
1701 +
                i
1702 +
            });
1703 +
            handles.push(handle);
1704 +
        }
1705 +
1706 +
        // All threads should complete successfully
1707 +
        for handle in handles {
1708 +
            let thread_id = handle.join().expect("Thread should not panic");
1709 +
            assert!(thread_id < num_threads);
1710 +
        }
1711 +
1712 +
        // Verify cache is still functional after stress testing
1713 +
        let keys_after = get_or_generate_keys(32, 0x04C11DB7, true);
1714 +
        assert_eq!(keys_after.len(), 23);
1715 +
1716 +
        // Keys should be mathematically correct regardless of cache state
1717 +
        let expected_keys = generate::keys(32, 0x04C11DB7, true);
1718 +
        assert_eq!(keys_after, expected_keys);
1719 +
    }
1720 +
1721 +
    #[test]
1722 +
    fn test_cache_behavior_with_thread_local_access() {
1723 +
        use std::thread;
1724 +
1725 +
        clear_cache();
1726 +
1727 +
        // Test that cache works correctly when accessed from different threads
1728 +
        // in sequence (not concurrently)
1729 +
1730 +
        let keys_main = get_or_generate_keys(32, 0x04C11DB7, true);
1731 +
1732 +
        let handle = thread::spawn(|| {
1733 +
            // This thread should see the cached value from the main thread
1734 +
1735 +
            get_or_generate_keys(32, 0x04C11DB7, true)
1736 +
        });
1737 +
1738 +
        let keys_from_thread = handle.join().expect("Thread should not panic");
1739 +
1740 +
        // Both should be identical
1741 +
        assert_eq!(keys_main, keys_from_thread);
1742 +
1743 +
        // Test multiple sequential threads
1744 +
        let mut thread_keys = Vec::new();
1745 +
1746 +
        for i in 0..5 {
1747 +
            let handle = thread::spawn(move || {
1748 +
                let keys = get_or_generate_keys(32, 0x04C11DB7, true);
1749 +
                (i, keys)
1750 +
            });
1751 +
1752 +
            let (thread_id, keys) = handle.join().expect("Thread should not panic");
1753 +
            thread_keys.push((thread_id, keys));
1754 +
        }
1755 +
1756 +
        // All threads should get the same cached keys
1757 +
        for (thread_id, keys) in thread_keys {
1758 +
            assert_eq!(
1759 +
                keys, keys_main,
1760 +
                "Thread {} should get same cached keys",
1761 +
                thread_id
1762 +
            );
1763 +
        }
1764 +
    }
1765 +
}
added vendor/crc-fast/src/combine.rs +188 −0
1 +
//! This module provides a function to combine CRCs of two sequences of bytes.
2 +
//!
3 +
//! It is based on the work of Mark Adler and is designed to be used with
4 +
//! different CRC algorithms.
5 +
/*
6 +
  Derived from this excellent answer by Mark Adler on StackOverflow:
7 +
  https://stackoverflow.com/questions/29915764/generic-crc-8-16-32-64-combine-implementation/29928573#29928573
8 +
*/
9 +
10 +
/* crccomb.c -- generalized combination of CRCs
11 +
 * Copyright (C) 2015 Mark Adler
12 +
 * Version 1.1  29 Apr 2015  Mark Adler
13 +
 */
14 +
15 +
/*
16 +
 This software is provided 'as-is', without any express or implied
17 +
 warranty.  In no event will the author be held liable for any damages
18 +
 arising from the use of this software.
19 +
20 +
 Permission is granted to anyone to use this software for any purpose,
21 +
 including commercial applications, and to alter it and redistribute it
22 +
 freely, subject to the following restrictions:
23 +
24 +
 1. The origin of this software must not be misrepresented; you must not
25 +
    claim that you wrote the original software. If you use this software
26 +
    in a product, an acknowledgment in the product documentation would be
27 +
    appreciated but is not required.
28 +
 2. Altered source versions must be plainly marked as such, and must not be
29 +
    misrepresented as being the original software.
30 +
 3. This notice may not be removed or altered from any source distribution.
31 +
32 +
 Mark Adler
33 +
 [email protected]
34 +
*/
35 +
36 +
/*
37 +
  zlib provides a fast operation to combine the CRCs of two sequences of bytes
38 +
  into a single CRC, which is the CRC of the two sequences concatenated.  That
39 +
  operation requires only the two CRC's and the length of the second sequence.
40 +
  The routine in zlib only works on the particular CRC-32 used by zlib.  The
41 +
  code provided here generalizes that operation to apply to a wide range of
42 +
  CRCs.  The CRC is specified in a series of #defines, based on the
43 +
  parameterization found in Ross William's excellent CRC tutorial here:
44 +
45 +
     http://www.ross.net/crc/download/crc_v3.txt
46 +
47 +
  A comprehensive catalogue of known CRCs, their parameters, check values, and
48 +
  references can be found here:
49 +
50 +
     http://reveng.sourceforge.net/crc-catalogue/all.htm
51 +
*/
52 +
53 +
use crate::CrcParams;
54 +
55 +
/* Multiply the GF(2) vector vec by the GF(2) matrix mat, returning the
56 +
resulting vector.  The vector is stored as bits in a crc_t.  The matrix is
57 +
similarly stored with each column as a crc_t, where the number of columns is
58 +
at least enough to cover the position of the most significant 1 bit in the
59 +
vector (so a dimension parameter is not needed). */
60 +
fn gf2_matrix_times(mat: &[u64; 64], mut vec: u64) -> u64 {
61 +
    let mut sum = 0;
62 +
    let mut idx = 0;
63 +
    while vec > 0 {
64 +
        if vec & 1 == 1 {
65 +
            sum ^= mat[idx];
66 +
        }
67 +
        vec >>= 1;
68 +
        idx += 1;
69 +
    }
70 +
71 +
    sum
72 +
}
73 +
74 +
/* Multiply the matrix mat by itself, returning the result in square.  WIDTH is
75 +
the dimension of the matrices, i.e., the number of bits in each crc_t
76 +
(rows), and the number of crc_t's (columns). */
77 +
fn gf2_matrix_square(square: &mut [u64; 64], mat: &[u64; 64]) {
78 +
    for n in 0..64 {
79 +
        square[n] = gf2_matrix_times(mat, mat[n]);
80 +
    }
81 +
}
82 +
83 +
/* Combine the CRCs of two successive sequences, where crc1 is the CRC of the
84 +
first sequence of bytes, crc2 is the CRC of the immediately following
85 +
sequence of bytes, and len2 is the length of the second sequence.  The CRC
86 +
of the combined sequence is returned. */
87 +
pub fn checksums(mut crc1: u64, crc2: u64, mut len2: u64, params: &CrcParams) -> u64 {
88 +
    let mut col: u64;
89 +
    let mut even = [0u64; 64]; /* even-power-of-two zeros operator */
90 +
    let mut odd = [0u64; 64]; /* odd-power-of-two zeros operator */
91 +
92 +
    /* exclusive-or the result with len2 zeros applied to the CRC of an empty
93 +
    sequence */
94 +
    crc1 ^= params.init_algorithm ^ params.xorout;
95 +
96 +
    /* construct the operator for one zero bit and put in odd[] */
97 +
    if params.refin && params.refout {
98 +
        // use the reflected POLY
99 +
        odd[0] = reflect_poly(params.poly, params.width as u32);
100 +
        col = 1;
101 +
        for n in 1..params.width {
102 +
            odd[n as usize] = col;
103 +
            col <<= 1;
104 +
        }
105 +
    } else if !params.refin && !params.refout {
106 +
        col = 2;
107 +
        for n in 0..params.width - 1 {
108 +
            odd[n as usize] = col;
109 +
            col <<= 1;
110 +
        }
111 +
        // Put poly at the last valid index (width-1)
112 +
        odd[(params.width - 1) as usize] = params.poly;
113 +
    } else {
114 +
        panic!("Unsupported CRC configuration");
115 +
    }
116 +
117 +
    /* put operator for two zero bits in even */
118 +
    gf2_matrix_square(&mut even, &odd);
119 +
120 +
    /* put operator for four zero bits in odd */
121 +
    gf2_matrix_square(&mut odd, &even);
122 +
123 +
    /* apply len2 zeros to crc1 (first square will put the operator for one
124 +
    zero byte, eight zero bits, in even) */
125 +
    loop {
126 +
        /* apply zeros operator for this bit of len2 */
127 +
        gf2_matrix_square(&mut even, &odd);
128 +
        if len2 & 1 == 1 {
129 +
            crc1 = gf2_matrix_times(&even, crc1);
130 +
        }
131 +
        len2 >>= 1;
132 +
133 +
        /* if no more bits set, then done */
134 +
        if len2 == 0 {
135 +
            break;
136 +
        }
137 +
138 +
        /* another iteration of the loop with odd and even swapped */
139 +
        gf2_matrix_square(&mut odd, &even);
140 +
        if len2 & 1 == 1 {
141 +
            crc1 = gf2_matrix_times(&odd, crc1);
142 +
        }
143 +
        len2 >>= 1;
144 +
145 +
        /* if no more bits set, then done */
146 +
        if len2 == 0 {
147 +
            break;
148 +
        }
149 +
    }
150 +
151 +
    /* return combined crc */
152 +
    crc1 ^= crc2;
153 +
154 +
    crc1
155 +
}
156 +
157 +
fn reflect_poly(poly: u64, width: u32) -> u64 {
158 +
    assert!(width <= 64, "Width must be <= 64 bits");
159 +
160 +
    // First reverse all bits
161 +
    let reversed = bit_reverse(poly);
162 +
163 +
    // Shift right to get the significant bits in the correct position
164 +
    // For a 32-bit poly, we need to shift right by (64 - 32) = 32 bits
165 +
    let shifted = reversed >> (64 - width);
166 +
167 +
    // Create mask for the target width
168 +
    let mask = if width == 64 {
169 +
        u64::MAX
170 +
    } else {
171 +
        (1u64 << width) - 1
172 +
    };
173 +
174 +
    // Apply mask to ensure we only keep the bits we want
175 +
    shifted & mask
176 +
}
177 +
178 +
fn bit_reverse(mut forward: u64) -> u64 {
179 +
    let mut reversed = 0;
180 +
181 +
    for _ in 0..64 {
182 +
        reversed <<= 1;
183 +
        reversed |= forward & 1;
184 +
        forward >>= 1;
185 +
    }
186 +
187 +
    reversed
188 +
}
added vendor/crc-fast/src/consts.rs +62 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![allow(dead_code)]
4 +
5 +
// Constants for common values with semantic meaning
6 +
pub(crate) const CRC_CHUNK_SIZE: usize = 16;
7 +
pub(crate) const CRC_HALF_CHUNK_SIZE: usize = 8;
8 +
pub(crate) const CRC_LARGE_CHUNK_THRESHOLD: usize = 256;
9 +
10 +
pub const NAME_CRC16_ARC: &str = "CRC-16/ARC";
11 +
pub const NAME_CRC16_CDMA2000: &str = "CRC-16/CDMA2000";
12 +
pub const NAME_CRC16_CMS: &str = "CRC-16/CMS";
13 +
pub const NAME_CRC16_DDS_110: &str = "CRC-16/DDS-110";
14 +
pub const NAME_CRC16_DECT_R: &str = "CRC-16/DECT-R";
15 +
pub const NAME_CRC16_DECT_X: &str = "CRC-16/DECT-X";
16 +
pub const NAME_CRC16_DNP: &str = "CRC-16/DNP";
17 +
pub const NAME_CRC16_EN_13757: &str = "CRC-16/EN-13757";
18 +
pub const NAME_CRC16_GENIBUS: &str = "CRC-16/GENIBUS";
19 +
pub const NAME_CRC16_GSM: &str = "CRC-16/GSM";
20 +
pub const NAME_CRC16_IBM_3740: &str = "CRC-16/IBM-3740";
21 +
pub const NAME_CRC16_IBM_SDLC: &str = "CRC-16/IBM-SDLC";
22 +
pub const NAME_CRC16_ISO_IEC_14443_3_A: &str = "CRC-16/ISO-IEC-14443-3-A";
23 +
pub const NAME_CRC16_KERMIT: &str = "CRC-16/KERMIT";
24 +
pub const NAME_CRC16_LJ1200: &str = "CRC-16/LJ1200";
25 +
pub const NAME_CRC16_M17: &str = "CRC-16/M17";
26 +
pub const NAME_CRC16_MAXIM_DOW: &str = "CRC-16/MAXIM-DOW";
27 +
pub const NAME_CRC16_MCRF4XX: &str = "CRC-16/MCRF4XX";
28 +
pub const NAME_CRC16_MODBUS: &str = "CRC-16/MODBUS";
29 +
pub const NAME_CRC16_NRSC_5: &str = "CRC-16/NRSC-5";
30 +
pub const NAME_CRC16_OPENSAFETY_A: &str = "CRC-16/OPENSAFETY-A";
31 +
pub const NAME_CRC16_OPENSAFETY_B: &str = "CRC-16/OPENSAFETY-B";
32 +
pub const NAME_CRC16_PROFIBUS: &str = "CRC-16/PROFIBUS";
33 +
pub const NAME_CRC16_RIELLO: &str = "CRC-16/RIELLO";
34 +
pub const NAME_CRC16_SPI_FUJITSU: &str = "CRC-16/SPI-FUJITSU";
35 +
pub const NAME_CRC16_T10_DIF: &str = "CRC-16/T10-DIF";
36 +
pub const NAME_CRC16_TELEDISK: &str = "CRC-16/TELEDISK";
37 +
pub const NAME_CRC16_TMS37157: &str = "CRC-16/TMS37157";
38 +
pub const NAME_CRC16_UMTS: &str = "CRC-16/UMTS";
39 +
pub const NAME_CRC16_USB: &str = "CRC-16/USB";
40 +
pub const NAME_CRC16_X25: &str = "CRC-16/X-25";
41 +
pub const NAME_CRC16_XMODEM: &str = "CRC-16/XMODEM";
42 +
43 +
pub const NAME_CRC32_AIXM: &str = "CRC-32/AIXM";
44 +
pub const NAME_CRC32_AUTOSAR: &str = "CRC-32/AUTOSAR";
45 +
pub const NAME_CRC32_BASE91_D: &str = "CRC-32/BASE91-D";
46 +
pub const NAME_CRC32_BZIP2: &str = "CRC-32/BZIP2";
47 +
pub const NAME_CRC32_CD_ROM_EDC: &str = "CRC-32/CD-ROM-EDC";
48 +
pub const NAME_CRC32_CKSUM: &str = "CRC-32/CKSUM";
49 +
pub const NAME_CRC32_ISCSI: &str = "CRC-32/ISCSI";
50 +
pub const NAME_CRC32_ISO_HDLC: &str = "CRC-32/ISO-HDLC";
51 +
pub const NAME_CRC32_JAMCRC: &str = "CRC-32/JAMCRC";
52 +
pub const NAME_CRC32_MEF: &str = "CRC-32/MEF";
53 +
pub const NAME_CRC32_MPEG_2: &str = "CRC-32/MPEG-2";
54 +
pub const NAME_CRC32_XFER: &str = "CRC-32/XFER";
55 +
56 +
pub const NAME_CRC64_ECMA_182: &str = "CRC-64/ECMA-182";
57 +
pub const NAME_CRC64_GO_ISO: &str = "CRC-64/GO-ISO";
58 +
pub const NAME_CRC64_MS: &str = "CRC-64/MS";
59 +
pub const NAME_CRC64_NVME: &str = "CRC-64/NVME";
60 +
pub const NAME_CRC64_REDIS: &str = "CRC-64/REDIS";
61 +
pub const NAME_CRC64_WE: &str = "CRC-64/WE";
62 +
pub const NAME_CRC64_XZ: &str = "CRC-64/XZ";
added vendor/crc-fast/src/crc16/algorithm.rs +158 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides the CRC-16 algorithm implementations.
4 +
//!
5 +
//! CRC-16 computation is performed by scaling 16-bit values to 32-bit space,
6 +
//! using the shared width32_ops module, and then scaling the result back to 16 bits.
7 +
8 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
9 +
10 +
use crate::enums::Reflector;
11 +
use crate::structs::CrcState;
12 +
use crate::traits::{ArchOps, EnhancedCrcWidth};
13 +
14 +
impl EnhancedCrcWidth for crate::structs::Width16 {
15 +
    #[inline(always)]
16 +
    fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
17 +
        crate::crc32::width32_ops::load_constants(reflected)
18 +
    }
19 +
20 +
    #[inline(always)]
21 +
    unsafe fn create_state<T: ArchOps>(
22 +
        value: Self::Value,
23 +
        reflected: bool,
24 +
        ops: &T,
25 +
    ) -> CrcState<T::Vector>
26 +
    where
27 +
        T::Vector: Copy,
28 +
    {
29 +
        let vector = if reflected {
30 +
            // For reflected mode, state goes in the low 32 bits (no scaling needed)
31 +
            ops.create_vector_from_u32(value as u32, false)
32 +
        } else {
33 +
            // For non-reflected mode, scale to 32 bits and position in high bytes
34 +
            // CRC-16 forward: shift left 16 bits to scale to 32-bit space
35 +
            let scaled = (value as u32) << 16;
36 +
            ops.create_vector_from_u32(scaled, true)
37 +
        };
38 +
39 +
        CrcState {
40 +
            value: vector,
41 +
            reflected,
42 +
        }
43 +
    }
44 +
45 +
    #[inline(always)]
46 +
    unsafe fn extract_result<T: ArchOps>(vector: T::Vector, reflected: bool, ops: &T) -> Self::Value
47 +
    where
48 +
        T::Vector: Copy,
49 +
    {
50 +
        let u64s = ops.extract_u64s(vector);
51 +
52 +
        if reflected {
53 +
            // In reflected mode, the result is in the low 32 bits of the low 64 bits
54 +
            // Extract the 16-bit result
55 +
            u64s[0] as u16
56 +
        } else {
57 +
            // In non-reflected mode, the result is in the high 32 bits of the low 64 bits
58 +
            // Scale back from 32 bits to 16 bits
59 +
            ((u64s[1] >> 32) >> 16) as u16
60 +
        }
61 +
    }
62 +
63 +
    #[inline(always)]
64 +
    unsafe fn fold_16<T: ArchOps>(
65 +
        state: &mut CrcState<T::Vector>,
66 +
        coeff: T::Vector,
67 +
        data_to_xor: T::Vector,
68 +
        ops: &T,
69 +
    ) where
70 +
        T::Vector: Copy,
71 +
    {
72 +
        crate::crc32::width32_ops::fold_16(state, coeff, data_to_xor, ops)
73 +
    }
74 +
75 +
    #[inline(always)]
76 +
    unsafe fn fold_width<T: ArchOps>(state: &mut CrcState<T::Vector>, high: u64, low: u64, ops: &T)
77 +
    where
78 +
        T::Vector: Copy,
79 +
    {
80 +
        crate::crc32::width32_ops::fold_width(state, high, low, ops)
81 +
    }
82 +
83 +
    #[inline(always)]
84 +
    unsafe fn barrett_reduction<T: ArchOps>(
85 +
        state: &CrcState<T::Vector>,
86 +
        poly: u64,
87 +
        mu: u64,
88 +
        ops: &T,
89 +
    ) -> Self::Value
90 +
    where
91 +
        T::Vector: Copy,
92 +
    {
93 +
        let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops);
94 +
        if state.reflected {
95 +
            u64s[1] as u16
96 +
        } else {
97 +
            // Scale back from 32 bits to 16 bits
98 +
            ((u64s[0] >> 32) >> 16) as u16
99 +
        }
100 +
    }
101 +
102 +
    #[inline(always)]
103 +
    unsafe fn create_coefficient<T: ArchOps>(
104 +
        high: u64,
105 +
        low: u64,
106 +
        _reflected: bool,
107 +
        ops: &T,
108 +
    ) -> T::Vector
109 +
    where
110 +
        T::Vector: Copy,
111 +
    {
112 +
        crate::crc32::width32_ops::create_coefficient(high, low, ops)
113 +
    }
114 +
115 +
    #[inline(always)]
116 +
    unsafe fn perform_final_reduction<T: ArchOps>(
117 +
        state: T::Vector,
118 +
        reflected: bool,
119 +
        keys: &[u64; 23],
120 +
        ops: &T,
121 +
    ) -> Self::Value
122 +
    where
123 +
        T::Vector: Copy,
124 +
    {
125 +
        let u64s = crate::crc32::width32_ops::perform_final_reduction(state, reflected, keys, ops);
126 +
        if reflected {
127 +
            u64s[1] as u16
128 +
        } else {
129 +
            // Scale back from 32 bits to 16 bits
130 +
            ((u64s[0] >> 32) >> 16) as u16
131 +
        }
132 +
    }
133 +
134 +
    #[inline(always)]
135 +
    fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) {
136 +
        crate::crc32::width32_ops::get_last_bytes_table_ptr(reflected, remaining_len)
137 +
    }
138 +
}
139 +
140 +
/// Process inputs smaller than 16 bytes for CRC-16
141 +
#[inline]
142 +
#[cfg_attr(
143 +
    any(target_arch = "x86", target_arch = "x86_64"),
144 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
145 +
)]
146 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
147 +
pub(crate) unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(
148 +
    data: &[u8],
149 +
    state: &mut CrcState<T::Vector>,
150 +
    reflector: &Reflector<T::Vector>,
151 +
    keys: &[u64; 23],
152 +
    ops: &T,
153 +
) -> W::Value
154 +
where
155 +
    T::Vector: Copy,
156 +
{
157 +
    crate::crc32::width32_ops::process_0_to_15::<T, W>(data, state, reflector, keys, ops)
158 +
}
added vendor/crc-fast/src/crc16/consts.rs +1218 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![allow(dead_code)]
4 +
5 +
use crate::consts::{
6 +
    NAME_CRC16_ARC, NAME_CRC16_CDMA2000, NAME_CRC16_CMS, NAME_CRC16_DDS_110, NAME_CRC16_DECT_R,
7 +
    NAME_CRC16_DECT_X, NAME_CRC16_DNP, NAME_CRC16_EN_13757, NAME_CRC16_GENIBUS, NAME_CRC16_GSM,
8 +
    NAME_CRC16_IBM_3740, NAME_CRC16_IBM_SDLC, NAME_CRC16_ISO_IEC_14443_3_A, NAME_CRC16_KERMIT,
9 +
    NAME_CRC16_LJ1200, NAME_CRC16_M17, NAME_CRC16_MAXIM_DOW, NAME_CRC16_MCRF4XX, NAME_CRC16_MODBUS,
10 +
    NAME_CRC16_NRSC_5, NAME_CRC16_OPENSAFETY_A, NAME_CRC16_OPENSAFETY_B, NAME_CRC16_PROFIBUS,
11 +
    NAME_CRC16_RIELLO, NAME_CRC16_SPI_FUJITSU, NAME_CRC16_T10_DIF, NAME_CRC16_TELEDISK,
12 +
    NAME_CRC16_TMS37157, NAME_CRC16_UMTS, NAME_CRC16_USB, NAME_CRC16_XMODEM,
13 +
};
14 +
use crate::structs::Algorithm;
15 +
use crate::CrcAlgorithm;
16 +
use crate::CrcParams;
17 +
18 +
// Native CRC-16 algorithm constants matching the CRC catalogue specification
19 +
// https://reveng.sourceforge.io/crc-catalogue/all.htm
20 +
21 +
pub const CRC_16_ARC: Algorithm<u16> = Algorithm {
22 +
    width: 16,
23 +
    poly: 0x8005,
24 +
    init: 0x0,
25 +
    refin: true,
26 +
    refout: true,
27 +
    xorout: 0x0,
28 +
    check: 0xbb3d,
29 +
    residue: 0x0,
30 +
};
31 +
32 +
pub const CRC_16_CDMA2000: Algorithm<u16> = Algorithm {
33 +
    width: 16,
34 +
    poly: 0xc867,
35 +
    init: 0xffff,
36 +
    refin: false,
37 +
    refout: false,
38 +
    xorout: 0x0,
39 +
    check: 0x4c06,
40 +
    residue: 0x0,
41 +
};
42 +
43 +
pub const CRC_16_CMS: Algorithm<u16> = Algorithm {
44 +
    width: 16,
45 +
    poly: 0x8005,
46 +
    init: 0xffff,
47 +
    refin: false,
48 +
    refout: false,
49 +
    xorout: 0x0,
50 +
    check: 0xaee7,
51 +
    residue: 0x0,
52 +
};
53 +
54 +
pub const CRC_16_DDS_110: Algorithm<u16> = Algorithm {
55 +
    width: 16,
56 +
    poly: 0x8005,
57 +
    init: 0x800d,
58 +
    refin: false,
59 +
    refout: false,
60 +
    xorout: 0x0,
61 +
    check: 0x9ecf,
62 +
    residue: 0x0,
63 +
};
64 +
65 +
pub const CRC_16_DECT_R: Algorithm<u16> = Algorithm {
66 +
    width: 16,
67 +
    poly: 0x0589,
68 +
    init: 0x0,
69 +
    refin: false,
70 +
    refout: false,
71 +
    xorout: 0x1,
72 +
    check: 0x007e,
73 +
    residue: 0x0589,
74 +
};
75 +
76 +
pub const CRC_16_DECT_X: Algorithm<u16> = Algorithm {
77 +
    width: 16,
78 +
    poly: 0x0589,
79 +
    init: 0x0,
80 +
    refin: false,
81 +
    refout: false,
82 +
    xorout: 0x0,
83 +
    check: 0x007f,
84 +
    residue: 0x0,
85 +
};
86 +
87 +
pub const CRC_16_DNP: Algorithm<u16> = Algorithm {
88 +
    width: 16,
89 +
    poly: 0x3d65,
90 +
    init: 0x0,
91 +
    refin: true,
92 +
    refout: true,
93 +
    xorout: 0xffff,
94 +
    check: 0xea82,
95 +
    residue: 0x66c5,
96 +
};
97 +
98 +
pub const CRC_16_EN_13757: Algorithm<u16> = Algorithm {
99 +
    width: 16,
100 +
    poly: 0x3d65,
101 +
    init: 0x0,
102 +
    refin: false,
103 +
    refout: false,
104 +
    xorout: 0xffff,
105 +
    check: 0xc2b7,
106 +
    residue: 0xa366,
107 +
};
108 +
109 +
pub const CRC_16_GENIBUS: Algorithm<u16> = Algorithm {
110 +
    width: 16,
111 +
    poly: 0x1021,
112 +
    init: 0xffff,
113 +
    refin: false,
114 +
    refout: false,
115 +
    xorout: 0xffff,
116 +
    check: 0xd64e,
117 +
    residue: 0x1d0f,
118 +
};
119 +
120 +
pub const CRC_16_GSM: Algorithm<u16> = Algorithm {
121 +
    width: 16,
122 +
    poly: 0x1021,
123 +
    init: 0x0,
124 +
    refin: false,
125 +
    refout: false,
126 +
    xorout: 0xffff,
127 +
    check: 0xce3c,
128 +
    residue: 0x1d0f,
129 +
};
130 +
131 +
pub const CRC_16_IBM_3740: Algorithm<u16> = Algorithm {
132 +
    width: 16,
133 +
    poly: 0x1021,
134 +
    init: 0xffff,
135 +
    refin: false,
136 +
    refout: false,
137 +
    xorout: 0x0,
138 +
    check: 0x29b1,
139 +
    residue: 0x0,
140 +
};
141 +
142 +
pub const CRC_16_IBM_SDLC: Algorithm<u16> = Algorithm {
143 +
    width: 16,
144 +
    poly: 0x1021,
145 +
    init: 0xffff,
146 +
    refin: true,
147 +
    refout: true,
148 +
    xorout: 0xffff,
149 +
    check: 0x906e,
150 +
    residue: 0xf0b8,
151 +
};
152 +
153 +
pub const CRC_16_ISO_IEC_14443_3_A: Algorithm<u16> = Algorithm {
154 +
    width: 16,
155 +
    poly: 0x1021,
156 +
    init: 0xc6c6,
157 +
    refin: true,
158 +
    refout: true,
159 +
    xorout: 0x0,
160 +
    check: 0xbf05,
161 +
    residue: 0x0,
162 +
};
163 +
164 +
pub const CRC_16_KERMIT: Algorithm<u16> = Algorithm {
165 +
    width: 16,
166 +
    poly: 0x1021,
167 +
    init: 0x0,
168 +
    refin: true,
169 +
    refout: true,
170 +
    xorout: 0x0,
171 +
    check: 0x2189,
172 +
    residue: 0x0,
173 +
};
174 +
175 +
pub const CRC_16_LJ1200: Algorithm<u16> = Algorithm {
176 +
    width: 16,
177 +
    poly: 0x6f63,
178 +
    init: 0x0,
179 +
    refin: false,
180 +
    refout: false,
181 +
    xorout: 0x0,
182 +
    check: 0xbdf4,
183 +
    residue: 0x0,
184 +
};
185 +
186 +
pub const CRC_16_M17: Algorithm<u16> = Algorithm {
187 +
    width: 16,
188 +
    poly: 0x5935,
189 +
    init: 0xffff,
190 +
    refin: false,
191 +
    refout: false,
192 +
    xorout: 0x0,
193 +
    check: 0x772b,
194 +
    residue: 0x0,
195 +
};
196 +
197 +
pub const CRC_16_MAXIM_DOW: Algorithm<u16> = Algorithm {
198 +
    width: 16,
199 +
    poly: 0x8005,
200 +
    init: 0x0,
201 +
    refin: true,
202 +
    refout: true,
203 +
    xorout: 0xffff,
204 +
    check: 0x44c2,
205 +
    residue: 0xb001,
206 +
};
207 +
208 +
pub const CRC_16_MCRF4XX: Algorithm<u16> = Algorithm {
209 +
    width: 16,
210 +
    poly: 0x1021,
211 +
    init: 0xffff,
212 +
    refin: true,
213 +
    refout: true,
214 +
    xorout: 0x0,
215 +
    check: 0x6f91,
216 +
    residue: 0x0,
217 +
};
218 +
219 +
pub const CRC_16_MODBUS: Algorithm<u16> = Algorithm {
220 +
    width: 16,
221 +
    poly: 0x8005,
222 +
    init: 0xffff,
223 +
    refin: true,
224 +
    refout: true,
225 +
    xorout: 0x0,
226 +
    check: 0x4b37,
227 +
    residue: 0x0,
228 +
};
229 +
230 +
pub const CRC_16_NRSC_5: Algorithm<u16> = Algorithm {
231 +
    width: 16,
232 +
    poly: 0x080b,
233 +
    init: 0xffff,
234 +
    refin: true,
235 +
    refout: true,
236 +
    xorout: 0x0,
237 +
    check: 0xa066,
238 +
    residue: 0x0,
239 +
};
240 +
241 +
pub const CRC_16_OPENSAFETY_A: Algorithm<u16> = Algorithm {
242 +
    width: 16,
243 +
    poly: 0x5935,
244 +
    init: 0x0,
245 +
    refin: false,
246 +
    refout: false,
247 +
    xorout: 0x0,
248 +
    check: 0x5d38,
249 +
    residue: 0x0,
250 +
};
251 +
252 +
pub const CRC_16_OPENSAFETY_B: Algorithm<u16> = Algorithm {
253 +
    width: 16,
254 +
    poly: 0x755b,
255 +
    init: 0x0,
256 +
    refin: false,
257 +
    refout: false,
258 +
    xorout: 0x0,
259 +
    check: 0x20fe,
260 +
    residue: 0x0,
261 +
};
262 +
263 +
pub const CRC_16_PROFIBUS: Algorithm<u16> = Algorithm {
264 +
    width: 16,
265 +
    poly: 0x1dcf,
266 +
    init: 0xffff,
267 +
    refin: false,
268 +
    refout: false,
269 +
    xorout: 0xffff,
270 +
    check: 0xa819,
271 +
    residue: 0xe394,
272 +
};
273 +
274 +
pub const CRC_16_RIELLO: Algorithm<u16> = Algorithm {
275 +
    width: 16,
276 +
    poly: 0x1021,
277 +
    init: 0xb2aa,
278 +
    refin: true,
279 +
    refout: true,
280 +
    xorout: 0x0,
281 +
    check: 0x63d0,
282 +
    residue: 0x0,
283 +
};
284 +
285 +
pub const CRC_16_SPI_FUJITSU: Algorithm<u16> = Algorithm {
286 +
    width: 16,
287 +
    poly: 0x1021,
288 +
    init: 0x1d0f,
289 +
    refin: false,
290 +
    refout: false,
291 +
    xorout: 0x0,
292 +
    check: 0xe5cc,
293 +
    residue: 0x0,
294 +
};
295 +
296 +
pub const CRC_16_T10_DIF: Algorithm<u16> = Algorithm {
297 +
    width: 16,
298 +
    poly: 0x8bb7,
299 +
    init: 0x0,
300 +
    refin: false,
301 +
    refout: false,
302 +
    xorout: 0x0,
303 +
    check: 0xd0db,
304 +
    residue: 0x0,
305 +
};
306 +
307 +
pub const CRC_16_TELEDISK: Algorithm<u16> = Algorithm {
308 +
    width: 16,
309 +
    poly: 0xa097,
310 +
    init: 0x0,
311 +
    refin: false,
312 +
    refout: false,
313 +
    xorout: 0x0,
314 +
    check: 0x0fb3,
315 +
    residue: 0x0,
316 +
};
317 +
318 +
pub const CRC_16_TMS37157: Algorithm<u16> = Algorithm {
319 +
    width: 16,
320 +
    poly: 0x1021,
321 +
    init: 0x89ec,
322 +
    refin: true,
323 +
    refout: true,
324 +
    xorout: 0x0,
325 +
    check: 0x26b1,
326 +
    residue: 0x0,
327 +
};
328 +
329 +
pub const CRC_16_UMTS: Algorithm<u16> = Algorithm {
330 +
    width: 16,
331 +
    poly: 0x8005,
332 +
    init: 0x0,
333 +
    refin: false,
334 +
    refout: false,
335 +
    xorout: 0x0,
336 +
    check: 0xfee8,
337 +
    residue: 0x0,
338 +
};
339 +
340 +
pub const CRC_16_USB: Algorithm<u16> = Algorithm {
341 +
    width: 16,
342 +
    poly: 0x8005,
343 +
    init: 0xffff,
344 +
    refin: true,
345 +
    refout: true,
346 +
    xorout: 0xffff,
347 +
    check: 0xb4c8,
348 +
    residue: 0xb001,
349 +
};
350 +
351 +
pub const CRC_16_XMODEM: Algorithm<u16> = Algorithm {
352 +
    width: 16,
353 +
    poly: 0x1021,
354 +
    init: 0x0,
355 +
    refin: false,
356 +
    refout: false,
357 +
    xorout: 0x0,
358 +
    check: 0x31c3,
359 +
    residue: 0x0,
360 +
};
361 +
362 +
// width=16 poly=0x8005 init=0x0000 refin=true refout=true xorout=0x0000 check=0xbb3d residue=0x0000 name="CRC-16/ARC"
363 +
pub const CRC16_ARC: CrcParams = CrcParams {
364 +
    name: NAME_CRC16_ARC,
365 +
    algorithm: CrcAlgorithm::Crc16Arc,
366 +
    width: 16,
367 +
    poly: CRC_16_ARC.poly as u64,
368 +
    init: CRC_16_ARC.init as u64,
369 +
    init_algorithm: CRC_16_ARC.init as u64, // 0x0000 is symmetric under bit-reversal
370 +
    refin: CRC_16_ARC.refin,
371 +
    refout: CRC_16_ARC.refout,
372 +
    xorout: CRC_16_ARC.xorout as u64,
373 +
    check: CRC_16_ARC.check as u64,
374 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED),
375 +
};
376 +
377 +
// width=16 poly=0xc867 init=0xffff refin=false refout=false xorout=0x0000 check=0x4c06 residue=0x0000 name="CRC-16/CDMA2000"
378 +
pub const CRC16_CDMA2000: CrcParams = CrcParams {
379 +
    name: NAME_CRC16_CDMA2000,
380 +
    algorithm: CrcAlgorithm::Crc16Cdma2000,
381 +
    width: 16,
382 +
    poly: CRC_16_CDMA2000.poly as u64,
383 +
    init: CRC_16_CDMA2000.init as u64,
384 +
    init_algorithm: CRC_16_CDMA2000.init as u64,
385 +
    refin: CRC_16_CDMA2000.refin,
386 +
    refout: CRC_16_CDMA2000.refout,
387 +
    xorout: CRC_16_CDMA2000.xorout as u64,
388 +
    check: CRC_16_CDMA2000.check as u64,
389 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_C867_FORWARD),
390 +
};
391 +
392 +
// width=16 poly=0x8005 init=0xffff refin=false refout=false xorout=0x0000 check=0xaee7 residue=0x0000 name="CRC-16/CMS"
393 +
pub const CRC16_CMS: CrcParams = CrcParams {
394 +
    name: NAME_CRC16_CMS,
395 +
    algorithm: CrcAlgorithm::Crc16Cms,
396 +
    width: 16,
397 +
    poly: CRC_16_CMS.poly as u64,
398 +
    init: CRC_16_CMS.init as u64,
399 +
    init_algorithm: CRC_16_CMS.init as u64,
400 +
    refin: CRC_16_CMS.refin,
401 +
    refout: CRC_16_CMS.refout,
402 +
    xorout: CRC_16_CMS.xorout as u64,
403 +
    check: CRC_16_CMS.check as u64,
404 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_FORWARD),
405 +
};
406 +
407 +
// width=16 poly=0x8005 init=0x800d refin=false refout=false xorout=0x0000 check=0x9ecf residue=0x0000 name="CRC-16/DDS-110"
408 +
pub const CRC16_DDS_110: CrcParams = CrcParams {
409 +
    name: NAME_CRC16_DDS_110,
410 +
    algorithm: CrcAlgorithm::Crc16Dds110,
411 +
    width: 16,
412 +
    poly: CRC_16_DDS_110.poly as u64,
413 +
    init: CRC_16_DDS_110.init as u64,
414 +
    init_algorithm: CRC_16_DDS_110.init as u64,
415 +
    refin: CRC_16_DDS_110.refin,
416 +
    refout: CRC_16_DDS_110.refout,
417 +
    xorout: CRC_16_DDS_110.xorout as u64,
418 +
    check: CRC_16_DDS_110.check as u64,
419 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_FORWARD),
420 +
};
421 +
422 +
// width=16 poly=0x0589 init=0x0000 refin=false refout=false xorout=0x0001 check=0x007e residue=0x0589 name="CRC-16/DECT-R"
423 +
pub const CRC16_DECT_R: CrcParams = CrcParams {
424 +
    name: NAME_CRC16_DECT_R,
425 +
    algorithm: CrcAlgorithm::Crc16DectR,
426 +
    width: 16,
427 +
    poly: CRC_16_DECT_R.poly as u64,
428 +
    init: CRC_16_DECT_R.init as u64,
429 +
    init_algorithm: CRC_16_DECT_R.init as u64,
430 +
    refin: CRC_16_DECT_R.refin,
431 +
    refout: CRC_16_DECT_R.refout,
432 +
    xorout: CRC_16_DECT_R.xorout as u64,
433 +
    check: CRC_16_DECT_R.check as u64,
434 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_0589_FORWARD),
435 +
};
436 +
437 +
// width=16 poly=0x0589 init=0x0000 refin=false refout=false xorout=0x0000 check=0x007f residue=0x0000 name="CRC-16/DECT-X"
438 +
pub const CRC16_DECT_X: CrcParams = CrcParams {
439 +
    name: NAME_CRC16_DECT_X,
440 +
    algorithm: CrcAlgorithm::Crc16DectX,
441 +
    width: 16,
442 +
    poly: CRC_16_DECT_X.poly as u64,
443 +
    init: CRC_16_DECT_X.init as u64,
444 +
    init_algorithm: CRC_16_DECT_X.init as u64,
445 +
    refin: CRC_16_DECT_X.refin,
446 +
    refout: CRC_16_DECT_X.refout,
447 +
    xorout: CRC_16_DECT_X.xorout as u64,
448 +
    check: CRC_16_DECT_X.check as u64,
449 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_0589_FORWARD),
450 +
};
451 +
452 +
// width=16 poly=0x3d65 init=0x0000 refin=true refout=true xorout=0xffff check=0xea82 residue=0x66c5 name="CRC-16/DNP"
453 +
pub const CRC16_DNP: CrcParams = CrcParams {
454 +
    name: NAME_CRC16_DNP,
455 +
    algorithm: CrcAlgorithm::Crc16Dnp,
456 +
    width: 16,
457 +
    poly: CRC_16_DNP.poly as u64,
458 +
    init: CRC_16_DNP.init as u64,
459 +
    init_algorithm: CRC_16_DNP.init as u64, // 0x0000 is symmetric under bit-reversal
460 +
    refin: CRC_16_DNP.refin,
461 +
    refout: CRC_16_DNP.refout,
462 +
    xorout: CRC_16_DNP.xorout as u64,
463 +
    check: CRC_16_DNP.check as u64,
464 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_3D65_REFLECTED),
465 +
};
466 +
467 +
// width=16 poly=0x3d65 init=0x0000 refin=false refout=false xorout=0xffff check=0xc2b7 residue=0xa366 name="CRC-16/EN-13757"
468 +
pub const CRC16_EN_13757: CrcParams = CrcParams {
469 +
    name: NAME_CRC16_EN_13757,
470 +
    algorithm: CrcAlgorithm::Crc16En13757,
471 +
    width: 16,
472 +
    poly: CRC_16_EN_13757.poly as u64,
473 +
    init: CRC_16_EN_13757.init as u64,
474 +
    init_algorithm: CRC_16_EN_13757.init as u64,
475 +
    refin: CRC_16_EN_13757.refin,
476 +
    refout: CRC_16_EN_13757.refout,
477 +
    xorout: CRC_16_EN_13757.xorout as u64,
478 +
    check: CRC_16_EN_13757.check as u64,
479 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_3D65_FORWARD),
480 +
};
481 +
482 +
// width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0xffff check=0xd64e residue=0x1d0f name="CRC-16/GENIBUS"
483 +
pub const CRC16_GENIBUS: CrcParams = CrcParams {
484 +
    name: NAME_CRC16_GENIBUS,
485 +
    algorithm: CrcAlgorithm::Crc16Genibus,
486 +
    width: 16,
487 +
    poly: CRC_16_GENIBUS.poly as u64,
488 +
    init: CRC_16_GENIBUS.init as u64,
489 +
    init_algorithm: CRC_16_GENIBUS.init as u64,
490 +
    refin: CRC_16_GENIBUS.refin,
491 +
    refout: CRC_16_GENIBUS.refout,
492 +
    xorout: CRC_16_GENIBUS.xorout as u64,
493 +
    check: CRC_16_GENIBUS.check as u64,
494 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD),
495 +
};
496 +
497 +
// width=16 poly=0x1021 init=0x0000 refin=false refout=false xorout=0xffff check=0xce3c residue=0x1d0f name="CRC-16/GSM"
498 +
pub const CRC16_GSM: CrcParams = CrcParams {
499 +
    name: NAME_CRC16_GSM,
500 +
    algorithm: CrcAlgorithm::Crc16Gsm,
501 +
    width: 16,
502 +
    poly: CRC_16_GSM.poly as u64,
503 +
    init: CRC_16_GSM.init as u64,
504 +
    init_algorithm: CRC_16_GSM.init as u64,
505 +
    refin: CRC_16_GSM.refin,
506 +
    refout: CRC_16_GSM.refout,
507 +
    xorout: CRC_16_GSM.xorout as u64,
508 +
    check: CRC_16_GSM.check as u64,
509 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD),
510 +
};
511 +
512 +
// width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0x0000 check=0x29b1 residue=0x0000 name="CRC-16/IBM-3740"
513 +
pub const CRC16_IBM_3740: CrcParams = CrcParams {
514 +
    name: NAME_CRC16_IBM_3740,
515 +
    algorithm: CrcAlgorithm::Crc16Ibm3740,
516 +
    width: 16,
517 +
    poly: CRC_16_IBM_3740.poly as u64,
518 +
    init: CRC_16_IBM_3740.init as u64,
519 +
    init_algorithm: CRC_16_IBM_3740.init as u64,
520 +
    refin: CRC_16_IBM_3740.refin,
521 +
    refout: CRC_16_IBM_3740.refout,
522 +
    xorout: CRC_16_IBM_3740.xorout as u64,
523 +
    check: CRC_16_IBM_3740.check as u64,
524 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD),
525 +
};
526 +
527 +
// width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e residue=0xf0b8 name="CRC-16/IBM-SDLC"
528 +
pub const CRC16_IBM_SDLC: CrcParams = CrcParams {
529 +
    name: NAME_CRC16_IBM_SDLC,
530 +
    algorithm: CrcAlgorithm::Crc16IbmSdlc,
531 +
    width: 16,
532 +
    poly: CRC_16_IBM_SDLC.poly as u64,
533 +
    init: CRC_16_IBM_SDLC.init as u64,
534 +
    init_algorithm: CRC_16_IBM_SDLC.init as u64, // 0xFFFF is symmetric under bit-reversal
535 +
    refin: CRC_16_IBM_SDLC.refin,
536 +
    refout: CRC_16_IBM_SDLC.refout,
537 +
    xorout: CRC_16_IBM_SDLC.xorout as u64,
538 +
    check: CRC_16_IBM_SDLC.check as u64,
539 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
540 +
};
541 +
542 +
// width=16 poly=0x1021 init=0xc6c6 refin=true refout=true xorout=0x0000 check=0xbf05 residue=0x0000 name="CRC-16/ISO-IEC-14443-3-A"
543 +
pub const CRC16_ISO_IEC_14443_3_A: CrcParams = CrcParams {
544 +
    name: NAME_CRC16_ISO_IEC_14443_3_A,
545 +
    algorithm: CrcAlgorithm::Crc16IsoIec144433A,
546 +
    width: 16,
547 +
    poly: CRC_16_ISO_IEC_14443_3_A.poly as u64,
548 +
    init: CRC_16_ISO_IEC_14443_3_A.init as u64,
549 +
    // 0xC6C6 bit-reversed = 0x6363; pre-computed to avoid runtime reversal
550 +
    init_algorithm: 0x6363,
551 +
    refin: CRC_16_ISO_IEC_14443_3_A.refin,
552 +
    refout: CRC_16_ISO_IEC_14443_3_A.refout,
553 +
    xorout: CRC_16_ISO_IEC_14443_3_A.xorout as u64,
554 +
    check: CRC_16_ISO_IEC_14443_3_A.check as u64,
555 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
556 +
};
557 +
558 +
// width=16 poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 check=0x2189 residue=0x0000 name="CRC-16/KERMIT"
559 +
pub const CRC16_KERMIT: CrcParams = CrcParams {
560 +
    name: NAME_CRC16_KERMIT,
561 +
    algorithm: CrcAlgorithm::Crc16Kermit,
562 +
    width: 16,
563 +
    poly: CRC_16_KERMIT.poly as u64,
564 +
    init: CRC_16_KERMIT.init as u64,
565 +
    init_algorithm: CRC_16_KERMIT.init as u64, // 0x0000 is symmetric under bit-reversal
566 +
    refin: CRC_16_KERMIT.refin,
567 +
    refout: CRC_16_KERMIT.refout,
568 +
    xorout: CRC_16_KERMIT.xorout as u64,
569 +
    check: CRC_16_KERMIT.check as u64,
570 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
571 +
};
572 +
573 +
// width=16 poly=0x6f63 init=0x0000 refin=false refout=false xorout=0x0000 check=0xbdf4 residue=0x0000 name="CRC-16/LJ1200"
574 +
pub const CRC16_LJ1200: CrcParams = CrcParams {
575 +
    name: NAME_CRC16_LJ1200,
576 +
    algorithm: CrcAlgorithm::Crc16Lj1200,
577 +
    width: 16,
578 +
    poly: CRC_16_LJ1200.poly as u64,
579 +
    init: CRC_16_LJ1200.init as u64,
580 +
    init_algorithm: CRC_16_LJ1200.init as u64,
581 +
    refin: CRC_16_LJ1200.refin,
582 +
    refout: CRC_16_LJ1200.refout,
583 +
    xorout: CRC_16_LJ1200.xorout as u64,
584 +
    check: CRC_16_LJ1200.check as u64,
585 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_6F63_FORWARD),
586 +
};
587 +
588 +
// width=16 poly=0x5935 init=0xffff refin=false refout=false xorout=0x0000 check=0x772b residue=0x0000 name="CRC-16/M17"
589 +
pub const CRC16_M17: CrcParams = CrcParams {
590 +
    name: NAME_CRC16_M17,
591 +
    algorithm: CrcAlgorithm::Crc16M17,
592 +
    width: 16,
593 +
    poly: CRC_16_M17.poly as u64,
594 +
    init: CRC_16_M17.init as u64,
595 +
    init_algorithm: CRC_16_M17.init as u64,
596 +
    refin: CRC_16_M17.refin,
597 +
    refout: CRC_16_M17.refout,
598 +
    xorout: CRC_16_M17.xorout as u64,
599 +
    check: CRC_16_M17.check as u64,
600 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_5935_FORWARD),
601 +
};
602 +
603 +
// width=16 poly=0x8005 init=0x0000 refin=true refout=true xorout=0xffff check=0x44c2 residue=0xb001 name="CRC-16/MAXIM-DOW"
604 +
pub const CRC16_MAXIM_DOW: CrcParams = CrcParams {
605 +
    name: NAME_CRC16_MAXIM_DOW,
606 +
    algorithm: CrcAlgorithm::Crc16MaximDow,
607 +
    width: 16,
608 +
    poly: CRC_16_MAXIM_DOW.poly as u64,
609 +
    init: CRC_16_MAXIM_DOW.init as u64,
610 +
    init_algorithm: CRC_16_MAXIM_DOW.init as u64, // 0x0000 is symmetric under bit-reversal
611 +
    refin: CRC_16_MAXIM_DOW.refin,
612 +
    refout: CRC_16_MAXIM_DOW.refout,
613 +
    xorout: CRC_16_MAXIM_DOW.xorout as u64,
614 +
    check: CRC_16_MAXIM_DOW.check as u64,
615 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED),
616 +
};
617 +
618 +
// width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0x0000 check=0x6f91 residue=0x0000 name="CRC-16/MCRF4XX"
619 +
pub const CRC16_MCRF4XX: CrcParams = CrcParams {
620 +
    name: NAME_CRC16_MCRF4XX,
621 +
    algorithm: CrcAlgorithm::Crc16Mcrf4xx,
622 +
    width: 16,
623 +
    poly: CRC_16_MCRF4XX.poly as u64,
624 +
    init: CRC_16_MCRF4XX.init as u64,
625 +
    init_algorithm: CRC_16_MCRF4XX.init as u64, // 0xFFFF is symmetric under bit-reversal
626 +
    refin: CRC_16_MCRF4XX.refin,
627 +
    refout: CRC_16_MCRF4XX.refout,
628 +
    xorout: CRC_16_MCRF4XX.xorout as u64,
629 +
    check: CRC_16_MCRF4XX.check as u64,
630 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
631 +
};
632 +
633 +
// width=16 poly=0x8005 init=0xffff refin=true refout=true xorout=0x0000 check=0x4b37 residue=0x0000 name="CRC-16/MODBUS"
634 +
pub const CRC16_MODBUS: CrcParams = CrcParams {
635 +
    name: NAME_CRC16_MODBUS,
636 +
    algorithm: CrcAlgorithm::Crc16Modbus,
637 +
    width: 16,
638 +
    poly: CRC_16_MODBUS.poly as u64,
639 +
    init: CRC_16_MODBUS.init as u64,
640 +
    init_algorithm: CRC_16_MODBUS.init as u64, // 0xFFFF is symmetric under bit-reversal
641 +
    refin: CRC_16_MODBUS.refin,
642 +
    refout: CRC_16_MODBUS.refout,
643 +
    xorout: CRC_16_MODBUS.xorout as u64,
644 +
    check: CRC_16_MODBUS.check as u64,
645 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED),
646 +
};
647 +
648 +
// width=16 poly=0x080b init=0xffff refin=true refout=true xorout=0x0000 check=0xa066 residue=0x0000 name="CRC-16/NRSC-5"
649 +
pub const CRC16_NRSC_5: CrcParams = CrcParams {
650 +
    name: NAME_CRC16_NRSC_5,
651 +
    algorithm: CrcAlgorithm::Crc16Nrsc5,
652 +
    width: 16,
653 +
    poly: CRC_16_NRSC_5.poly as u64,
654 +
    init: CRC_16_NRSC_5.init as u64,
655 +
    init_algorithm: CRC_16_NRSC_5.init as u64, // 0xFFFF is symmetric under bit-reversal
656 +
    refin: CRC_16_NRSC_5.refin,
657 +
    refout: CRC_16_NRSC_5.refout,
658 +
    xorout: CRC_16_NRSC_5.xorout as u64,
659 +
    check: CRC_16_NRSC_5.check as u64,
660 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_080B_REFLECTED),
661 +
};
662 +
663 +
// width=16 poly=0x5935 init=0x0000 refin=false refout=false xorout=0x0000 check=0x5d38 residue=0x0000 name="CRC-16/OPENSAFETY-A"
664 +
pub const CRC16_OPENSAFETY_A: CrcParams = CrcParams {
665 +
    name: NAME_CRC16_OPENSAFETY_A,
666 +
    algorithm: CrcAlgorithm::Crc16OpensafetyA,
667 +
    width: 16,
668 +
    poly: CRC_16_OPENSAFETY_A.poly as u64,
669 +
    init: CRC_16_OPENSAFETY_A.init as u64,
670 +
    init_algorithm: CRC_16_OPENSAFETY_A.init as u64,
671 +
    refin: CRC_16_OPENSAFETY_A.refin,
672 +
    refout: CRC_16_OPENSAFETY_A.refout,
673 +
    xorout: CRC_16_OPENSAFETY_A.xorout as u64,
674 +
    check: CRC_16_OPENSAFETY_A.check as u64,
675 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_5935_FORWARD),
676 +
};
677 +
678 +
// width=16 poly=0x755b init=0x0000 refin=false refout=false xorout=0x0000 check=0x20fe residue=0x0000 name="CRC-16/OPENSAFETY-B"
679 +
pub const CRC16_OPENSAFETY_B: CrcParams = CrcParams {
680 +
    name: NAME_CRC16_OPENSAFETY_B,
681 +
    algorithm: CrcAlgorithm::Crc16OpensafetyB,
682 +
    width: 16,
683 +
    poly: CRC_16_OPENSAFETY_B.poly as u64,
684 +
    init: CRC_16_OPENSAFETY_B.init as u64,
685 +
    init_algorithm: CRC_16_OPENSAFETY_B.init as u64,
686 +
    refin: CRC_16_OPENSAFETY_B.refin,
687 +
    refout: CRC_16_OPENSAFETY_B.refout,
688 +
    xorout: CRC_16_OPENSAFETY_B.xorout as u64,
689 +
    check: CRC_16_OPENSAFETY_B.check as u64,
690 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_755B_FORWARD),
691 +
};
692 +
693 +
// width=16 poly=0x1dcf init=0xffff refin=false refout=false xorout=0xffff check=0xa819 residue=0xe394 name="CRC-16/PROFIBUS"
694 +
pub const CRC16_PROFIBUS: CrcParams = CrcParams {
695 +
    name: NAME_CRC16_PROFIBUS,
696 +
    algorithm: CrcAlgorithm::Crc16Profibus,
697 +
    width: 16,
698 +
    poly: CRC_16_PROFIBUS.poly as u64,
699 +
    init: CRC_16_PROFIBUS.init as u64,
700 +
    init_algorithm: CRC_16_PROFIBUS.init as u64,
701 +
    refin: CRC_16_PROFIBUS.refin,
702 +
    refout: CRC_16_PROFIBUS.refout,
703 +
    xorout: CRC_16_PROFIBUS.xorout as u64,
704 +
    check: CRC_16_PROFIBUS.check as u64,
705 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1DCF_FORWARD),
706 +
};
707 +
708 +
// width=16 poly=0x1021 init=0xb2aa refin=true refout=true xorout=0x0000 check=0x63d0 residue=0x0000 name="CRC-16/RIELLO"
709 +
pub const CRC16_RIELLO: CrcParams = CrcParams {
710 +
    name: NAME_CRC16_RIELLO,
711 +
    algorithm: CrcAlgorithm::Crc16Riello,
712 +
    width: 16,
713 +
    poly: CRC_16_RIELLO.poly as u64,
714 +
    init: CRC_16_RIELLO.init as u64,
715 +
    // 0xB2AA bit-reversed = 0x554D; pre-computed to avoid runtime reversal
716 +
    init_algorithm: 0x554D,
717 +
    refin: CRC_16_RIELLO.refin,
718 +
    refout: CRC_16_RIELLO.refout,
719 +
    xorout: CRC_16_RIELLO.xorout as u64,
720 +
    check: CRC_16_RIELLO.check as u64,
721 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
722 +
};
723 +
724 +
// width=16 poly=0x1021 init=0x1d0f refin=false refout=false xorout=0x0000 check=0xe5cc residue=0x0000 name="CRC-16/SPI-FUJITSU"
725 +
pub const CRC16_SPI_FUJITSU: CrcParams = CrcParams {
726 +
    name: NAME_CRC16_SPI_FUJITSU,
727 +
    algorithm: CrcAlgorithm::Crc16SpiFujitsu,
728 +
    width: 16,
729 +
    poly: CRC_16_SPI_FUJITSU.poly as u64,
730 +
    init: CRC_16_SPI_FUJITSU.init as u64,
731 +
    init_algorithm: CRC_16_SPI_FUJITSU.init as u64,
732 +
    refin: CRC_16_SPI_FUJITSU.refin,
733 +
    refout: CRC_16_SPI_FUJITSU.refout,
734 +
    xorout: CRC_16_SPI_FUJITSU.xorout as u64,
735 +
    check: CRC_16_SPI_FUJITSU.check as u64,
736 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD),
737 +
};
738 +
739 +
// width=16 poly=0x8bb7 init=0x0000 refin=false refout=false xorout=0x0000 check=0xd0db residue=0x0000 name="CRC-16/T10-DIF"
740 +
pub const CRC16_T10_DIF: CrcParams = CrcParams {
741 +
    name: NAME_CRC16_T10_DIF,
742 +
    algorithm: CrcAlgorithm::Crc16T10Dif,
743 +
    width: 16,
744 +
    poly: CRC_16_T10_DIF.poly as u64,
745 +
    init: CRC_16_T10_DIF.init as u64,
746 +
    init_algorithm: CRC_16_T10_DIF.init as u64,
747 +
    refin: CRC_16_T10_DIF.refin,
748 +
    refout: CRC_16_T10_DIF.refout,
749 +
    xorout: CRC_16_T10_DIF.xorout as u64,
750 +
    check: CRC_16_T10_DIF.check as u64,
751 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8BB7_FORWARD),
752 +
};
753 +
754 +
// width=16 poly=0xa097 init=0x0000 refin=false refout=false xorout=0x0000 check=0x0fb3 residue=0x0000 name="CRC-16/TELEDISK"
755 +
pub const CRC16_TELEDISK: CrcParams = CrcParams {
756 +
    name: NAME_CRC16_TELEDISK,
757 +
    algorithm: CrcAlgorithm::Crc16Teledisk,
758 +
    width: 16,
759 +
    poly: CRC_16_TELEDISK.poly as u64,
760 +
    init: CRC_16_TELEDISK.init as u64,
761 +
    init_algorithm: CRC_16_TELEDISK.init as u64,
762 +
    refin: CRC_16_TELEDISK.refin,
763 +
    refout: CRC_16_TELEDISK.refout,
764 +
    xorout: CRC_16_TELEDISK.xorout as u64,
765 +
    check: CRC_16_TELEDISK.check as u64,
766 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_A097_FORWARD),
767 +
};
768 +
769 +
// width=16 poly=0x1021 init=0x89ec refin=true refout=true xorout=0x0000 check=0x26b1 residue=0x0000 name="CRC-16/TMS37157"
770 +
pub const CRC16_TMS37157: CrcParams = CrcParams {
771 +
    name: NAME_CRC16_TMS37157,
772 +
    algorithm: CrcAlgorithm::Crc16Tms37157,
773 +
    width: 16,
774 +
    poly: CRC_16_TMS37157.poly as u64,
775 +
    init: CRC_16_TMS37157.init as u64,
776 +
    // 0x89EC bit-reversed = 0x3791; pre-computed to avoid runtime reversal
777 +
    init_algorithm: 0x3791,
778 +
    refin: CRC_16_TMS37157.refin,
779 +
    refout: CRC_16_TMS37157.refout,
780 +
    xorout: CRC_16_TMS37157.xorout as u64,
781 +
    check: CRC_16_TMS37157.check as u64,
782 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
783 +
};
784 +
785 +
// width=16 poly=0x8005 init=0x0000 refin=false refout=false xorout=0x0000 check=0xfee8 residue=0x0000 name="CRC-16/UMTS"
786 +
pub const CRC16_UMTS: CrcParams = CrcParams {
787 +
    name: NAME_CRC16_UMTS,
788 +
    algorithm: CrcAlgorithm::Crc16Umts,
789 +
    width: 16,
790 +
    poly: CRC_16_UMTS.poly as u64,
791 +
    init: CRC_16_UMTS.init as u64,
792 +
    init_algorithm: CRC_16_UMTS.init as u64,
793 +
    refin: CRC_16_UMTS.refin,
794 +
    refout: CRC_16_UMTS.refout,
795 +
    xorout: CRC_16_UMTS.xorout as u64,
796 +
    check: CRC_16_UMTS.check as u64,
797 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_FORWARD),
798 +
};
799 +
800 +
// width=16 poly=0x8005 init=0xffff refin=true refout=true xorout=0xffff check=0xb4c8 residue=0xb001 name="CRC-16/USB"
801 +
pub const CRC16_USB: CrcParams = CrcParams {
802 +
    name: NAME_CRC16_USB,
803 +
    algorithm: CrcAlgorithm::Crc16Usb,
804 +
    width: 16,
805 +
    poly: CRC_16_USB.poly as u64,
806 +
    init: CRC_16_USB.init as u64,
807 +
    init_algorithm: CRC_16_USB.init as u64, // 0xFFFF is symmetric under bit-reversal
808 +
    refin: CRC_16_USB.refin,
809 +
    refout: CRC_16_USB.refout,
810 +
    xorout: CRC_16_USB.xorout as u64,
811 +
    check: CRC_16_USB.check as u64,
812 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8005_REFLECTED),
813 +
};
814 +
815 +
// width=16 poly=0x1021 init=0x0000 refin=false refout=false xorout=0x0000 check=0x31c3 residue=0x0000 name="CRC-16/XMODEM"
816 +
pub const CRC16_XMODEM: CrcParams = CrcParams {
817 +
    name: NAME_CRC16_XMODEM,
818 +
    algorithm: CrcAlgorithm::Crc16Xmodem,
819 +
    width: 16,
820 +
    poly: CRC_16_XMODEM.poly as u64,
821 +
    init: CRC_16_XMODEM.init as u64,
822 +
    init_algorithm: CRC_16_XMODEM.init as u64,
823 +
    refin: CRC_16_XMODEM.refin,
824 +
    refout: CRC_16_XMODEM.refout,
825 +
    xorout: CRC_16_XMODEM.xorout as u64,
826 +
    check: CRC_16_XMODEM.check as u64,
827 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1021_FORWARD),
828 +
};
829 +
830 +
pub const KEYS_8005_FORWARD: [u64; 23] = [
831 +
    0x0000000000000000,
832 +
    0x8663000000000000,
833 +
    0x8617000000000000,
834 +
    0x8665000000000000,
835 +
    0x8077000000000000,
836 +
    0x8663000000000000,
837 +
    0x807b000000000000,
838 +
    0x00000001fffbffe7,
839 +
    0x0000000180050000,
840 +
    0x6a7a000000000000,
841 +
    0x5ccb000000000000,
842 +
    0x006b000000000000,
843 +
    0xedb3000000000000,
844 +
    0xf997000000000000,
845 +
    0x8c47000000000000,
846 +
    0xbffa000000000000,
847 +
    0x861b000000000000,
848 +
    0xeac3000000000000,
849 +
    0xed6b000000000000,
850 +
    0xf557000000000000,
851 +
    0x806f000000000000,
852 +
    0xf337000000000000,
853 +
    0x867b000000000000,
854 +
];
855 +
856 +
pub const KEYS_8005_REFLECTED: [u64; 23] = [
857 +
    0x0000000000000000,
858 +
    0x0000000000018cc2,
859 +
    0x000000000001d0c2,
860 +
    0x0000000000014cc2,
861 +
    0x000000000001dc02,
862 +
    0x0000000000018cc2,
863 +
    0x000000000001bc02,
864 +
    0x00000001cfffbfff,
865 +
    0x0000000000014003,
866 +
    0x000000000000bcac,
867 +
    0x000000000001a674,
868 +
    0x000000000001ac00,
869 +
    0x0000000000019b6e,
870 +
    0x000000000001d33e,
871 +
    0x000000000001c462,
872 +
    0x000000000000bffa,
873 +
    0x000000000001b0c2,
874 +
    0x00000000000186ae,
875 +
    0x000000000001ad6e,
876 +
    0x000000000001d55e,
877 +
    0x000000000001ec02,
878 +
    0x000000000001d99e,
879 +
    0x000000000001bcc2,
880 +
];
881 +
882 +
pub const KEYS_C867_FORWARD: [u64; 23] = [
883 +
    0x0000000000000000,
884 +
    0x1473000000000000,
885 +
    0x7386000000000000,
886 +
    0x8388000000000000,
887 +
    0x1494000000000000,
888 +
    0x1473000000000000,
889 +
    0xb4eb000000000000,
890 +
    0x00000001bcf9ccb5,
891 +
    0x00000001c8670000,
892 +
    0x7b7c000000000000,
893 +
    0xe363000000000000,
894 +
    0x594f000000000000,
895 +
    0xd7bc000000000000,
896 +
    0x47ca000000000000,
897 +
    0x971e000000000000,
898 +
    0x6acb000000000000,
899 +
    0xbd49000000000000,
900 +
    0x9f17000000000000,
901 +
    0x1db5000000000000,
902 +
    0xd834000000000000,
903 +
    0x70c7000000000000,
904 +
    0xb010000000000000,
905 +
    0x7d8b000000000000,
906 +
];
907 +
908 +
pub const KEYS_0589_FORWARD: [u64; 23] = [
909 +
    0x0000000000000000,
910 +
    0xc2ee000000000000,
911 +
    0xf795000000000000,
912 +
    0x58e7000000000000,
913 +
    0x9aad000000000000,
914 +
    0xc2ee000000000000,
915 +
    0xa847000000000000,
916 +
    0x0000000105981d3f,
917 +
    0x0000000105890000,
918 +
    0x5230000000000000,
919 +
    0x3315000000000000,
920 +
    0xd59f000000000000,
921 +
    0x67c9000000000000,
922 +
    0x148c000000000000,
923 +
    0x4da7000000000000,
924 +
    0xf6c1000000000000,
925 +
    0x5890000000000000,
926 +
    0x0523000000000000,
927 +
    0xd0cf000000000000,
928 +
    0x7cd2000000000000,
929 +
    0x1624000000000000,
930 +
    0xf411000000000000,
931 +
    0x1d58000000000000,
932 +
];
933 +
934 +
pub const KEYS_3D65_REFLECTED: [u64; 23] = [
935 +
    0x0000000000000000,
936 +
    0x0000000000001612,
937 +
    0x0000000000004d8c,
938 +
    0x0000000000017d88,
939 +
    0x000000000001b860,
940 +
    0x0000000000001612,
941 +
    0x000000000000c2e8,
942 +
    0x00000000f81e8e39,
943 +
    0x0000000000014d79,
944 +
    0x000000000001b406,
945 +
    0x0000000000000400,
946 +
    0x000000000000c654,
947 +
    0x0000000000006f94,
948 +
    0x00000000000140ba,
949 +
    0x000000000000aa92,
950 +
    0x0000000000000020,
951 +
    0x00000000000058b2,
952 +
    0x000000000001c116,
953 +
    0x0000000000009664,
954 +
    0x0000000000015cfa,
955 +
    0x000000000001c458,
956 +
    0x000000000000cdc0,
957 +
    0x000000000000b470,
958 +
];
959 +
960 +
pub const KEYS_3D65_FORWARD: [u64; 23] = [
961 +
    0x0000000000000000,
962 +
    0x90d0000000000000,
963 +
    0x6364000000000000,
964 +
    0x237d000000000000,
965 +
    0x0c3b000000000000,
966 +
    0x90d0000000000000,
967 +
    0x2e86000000000000,
968 +
    0x0000000138e2f03e,
969 +
    0x000000013d650000,
970 +
    0xc05b000000000000,
971 +
    0x0040000000000000,
972 +
    0x54c6000000000000,
973 +
    0x53ec000000000000,
974 +
    0xba05000000000000,
975 +
    0x92aa000000000000,
976 +
    0x0800000000000000,
977 +
    0x9a34000000000000,
978 +
    0xd107000000000000,
979 +
    0x4cd2000000000000,
980 +
    0xbe75000000000000,
981 +
    0x3447000000000000,
982 +
    0x0766000000000000,
983 +
    0x1c5a000000000000,
984 +
];
985 +
986 +
pub const KEYS_1021_FORWARD: [u64; 23] = [
987 +
    0x0000000000000000,
988 +
    0xeb23000000000000,
989 +
    0x10e2000000000000,
990 +
    0xfa0d000000000000,
991 +
    0x36fb000000000000,
992 +
    0xeb23000000000000,
993 +
    0xaa51000000000000,
994 +
    0x0000000111303471,
995 +
    0x0000000110210000,
996 +
    0xf4e7000000000000,
997 +
    0x4347000000000000,
998 +
    0x15b7000000000000,
999 +
    0x9e3a000000000000,
1000 +
    0x8420000000000000,
1001 +
    0x9c1a000000000000,
1002 +
    0x9fe5000000000000,
1003 +
    0x78b3000000000000,
1004 +
    0xb8e0000000000000,
1005 +
    0xbd64000000000000,
1006 +
    0x45b4000000000000,
1007 +
    0x8ddc000000000000,
1008 +
    0x2093000000000000,
1009 +
    0x3f68000000000000,
1010 +
];
1011 +
1012 +
pub const KEYS_6F63_FORWARD: [u64; 23] = [
1013 +
    0x0000000000000000,
1014 +
    0xe601000000000000,
1015 +
    0xf83f000000000000,
1016 +
    0x29c0000000000000,
1017 +
    0xfa19000000000000,
1018 +
    0xe601000000000000,
1019 +
    0x4dd4000000000000,
1020 +
    0x000000017d0b9ecc,
1021 +
    0x000000016f630000,
1022 +
    0x5342000000000000,
1023 +
    0xa2b2000000000000,
1024 +
    0x14e0000000000000,
1025 +
    0xcabd000000000000,
1026 +
    0x29a1000000000000,
1027 +
    0x5159000000000000,
1028 +
    0x0a70000000000000,
1029 +
    0xd2ef000000000000,
1030 +
    0xa361000000000000,
1031 +
    0x9f1d000000000000,
1032 +
    0x0538000000000000,
1033 +
    0xdec6000000000000,
1034 +
    0x42c6000000000000,
1035 +
    0x0867000000000000,
1036 +
];
1037 +
1038 +
pub const KEYS_5935_FORWARD: [u64; 23] = [
1039 +
    0x0000000000000000,
1040 +
    0x0d0e000000000000,
1041 +
    0x5163000000000000,
1042 +
    0x1286000000000000,
1043 +
    0x1000000000000000,
1044 +
    0x0d0e000000000000,
1045 +
    0x5866000000000000,
1046 +
    0x000000014ce5c8be,
1047 +
    0x0000000159350000,
1048 +
    0xfb76000000000000,
1049 +
    0xdbdd000000000000,
1050 +
    0x250c000000000000,
1051 +
    0x2000000000000000,
1052 +
    0xafd9000000000000,
1053 +
    0xee8f000000000000,
1054 +
    0x4a18000000000000,
1055 +
    0x4000000000000000,
1056 +
    0x0687000000000000,
1057 +
    0x842b000000000000,
1058 +
    0x9430000000000000,
1059 +
    0x8000000000000000,
1060 +
    0xd0d9000000000000,
1061 +
    0x0100000000000000,
1062 +
];
1063 +
1064 +
pub const KEYS_080B_REFLECTED: [u64; 23] = [
1065 +
    0x0000000000000000,
1066 +
    0x000000000001986c,
1067 +
    0x0000000000006b98,
1068 +
    0x00000000000016a8,
1069 +
    0x0000000000011ef6,
1070 +
    0x000000000001986c,
1071 +
    0x00000000000170fa,
1072 +
    0x0000000180912421,
1073 +
    0x000000000001a021,
1074 +
    0x000000000001f852,
1075 +
    0x000000000001b176,
1076 +
    0x000000000000183c,
1077 +
    0x0000000000016ffc,
1078 +
    0x00000000000015f4,
1079 +
    0x0000000000003308,
1080 +
    0x00000000000018a4,
1081 +
    0x000000000000cd12,
1082 +
    0x0000000000010052,
1083 +
    0x000000000001faaa,
1084 +
    0x0000000000013e86,
1085 +
    0x0000000000009bc4,
1086 +
    0x0000000000005f3a,
1087 +
    0x000000000001c124,
1088 +
];
1089 +
1090 +
pub const KEYS_755B_FORWARD: [u64; 23] = [
1091 +
    0x0000000000000000,
1092 +
    0x0e5f000000000000,
1093 +
    0x21d3000000000000,
1094 +
    0x16bf000000000000,
1095 +
    0x8e20000000000000,
1096 +
    0x0e5f000000000000,
1097 +
    0x3c73000000000000,
1098 +
    0x0000000167c863d9,
1099 +
    0x00000001755b0000,
1100 +
    0xa8cb000000000000,
1101 +
    0x7562000000000000,
1102 +
    0x0f7d000000000000,
1103 +
    0x8c80000000000000,
1104 +
    0x6285000000000000,
1105 +
    0x8c37000000000000,
1106 +
    0x06a7000000000000,
1107 +
    0x937d000000000000,
1108 +
    0x9aac000000000000,
1109 +
    0xb5b7000000000000,
1110 +
    0xff2f000000000000,
1111 +
    0xf1df000000000000,
1112 +
    0x407d000000000000,
1113 +
    0x597e000000000000,
1114 +
];
1115 +
1116 +
pub const KEYS_1DCF_FORWARD: [u64; 23] = [
1117 +
    0x0000000000000000,
1118 +
    0x4ee2000000000000,
1119 +
    0x8462000000000000,
1120 +
    0xfe12000000000000,
1121 +
    0x2690000000000000,
1122 +
    0x4ee2000000000000,
1123 +
    0x19ae000000000000,
1124 +
    0x000000011c842752,
1125 +
    0x000000011dcf0000,
1126 +
    0xe047000000000000,
1127 +
    0x0ad2000000000000,
1128 +
    0x4c6c000000000000,
1129 +
    0xe7e9000000000000,
1130 +
    0x1940000000000000,
1131 +
    0x22a2000000000000,
1132 +
    0xaddd000000000000,
1133 +
    0x5fd5000000000000,
1134 +
    0x28c9000000000000,
1135 +
    0x6186000000000000,
1136 +
    0xeb76000000000000,
1137 +
    0x1db2000000000000,
1138 +
    0xa36b000000000000,
1139 +
    0x3557000000000000,
1140 +
];
1141 +
1142 +
pub const KEYS_A097_FORWARD: [u64; 23] = [
1143 +
    0x0000000000000000,
1144 +
    0x4c3f000000000000,
1145 +
    0xc8aa000000000000,
1146 +
    0x6e48000000000000,
1147 +
    0x6c83000000000000,
1148 +
    0x4c3f000000000000,
1149 +
    0xf15f000000000000,
1150 +
    0x00000001d31c0419,
1151 +
    0x00000001a0970000,
1152 +
    0x8cfa000000000000,
1153 +
    0x3a08000000000000,
1154 +
    0xff4f000000000000,
1155 +
    0x872c000000000000,
1156 +
    0xe3ac000000000000,
1157 +
    0x38d7000000000000,
1158 +
    0xd7ae000000000000,
1159 +
    0x5be1000000000000,
1160 +
    0xb5e1000000000000,
1161 +
    0x2a65000000000000,
1162 +
    0x2922000000000000,
1163 +
    0x7d9d000000000000,
1164 +
    0xf735000000000000,
1165 +
    0xb9e2000000000000,
1166 +
];
1167 +
1168 +
pub const KEYS_8BB7_FORWARD: [u64; 23] = [
1169 +
    0x0000000000000000,
1170 +
    0x2d56000000000000, // 2^(32* 3) mod Q << 32
1171 +
    0x06df000000000000, // 2^(32* 5) mod Q << 32
1172 +
    0x9d9d000000000000, // 2^(32*31) mod Q << 32
1173 +
    0x7cf5000000000000, // 2^(32*33) mod Q << 32
1174 +
    0x2d56000000000000, // 2^(32* 3) mod Q << 32
1175 +
    0x1368000000000000, // 2^(32* 2) mod Q << 32
1176 +
    0x00000001f65a57f8, // floor(2^64/Q)
1177 +
    0x000000018bb70000, // Q
1178 +
    0xceae000000000000, // 2^(32*27) mod Q << 32
1179 +
    0xbfd6000000000000, // 2^(32*29) mod Q << 32
1180 +
    0x1e16000000000000, // 2^(32*23) mod Q << 32
1181 +
    0x713c000000000000, // 2^(32*25) mod Q << 32
1182 +
    0xf7f9000000000000, // 2^(32*19) mod Q << 32
1183 +
    0x80a6000000000000, // 2^(32*21) mod Q << 32
1184 +
    0x044c000000000000, // 2^(32*15) mod Q << 32
1185 +
    0xe658000000000000, // 2^(32*17) mod Q << 32
1186 +
    0xad18000000000000, // 2^(32*11) mod Q << 32
1187 +
    0xa497000000000000, // 2^(32*13) mod Q << 32
1188 +
    0x6ee3000000000000, // 2^(32* 7) mod Q << 32
1189 +
    0xe7b5000000000000, // 2^(32* 9) mod Q << 32
1190 +
    0xdccf000000000000, // 2^(32*63) mod Q << 32 (256-byte folding)
1191 +
    0x4b0b000000000000, // 2^(32*65) mod Q << 32 (256-byte folding)
1192 +
];
1193 +
1194 +
pub const KEYS_1021_REVERSE: [u64; 23] = [
1195 +
    0x0000000000000000,
1196 +
    0x00000000000189ae, // (2^(32* 3) mod P(x))' << 1
1197 +
    0x0000000000008e10, // (2^(32* 5) mod P(x))' << 1
1198 +
    0x00000000000160be, // (2^(32*31) mod P(x))' << 1
1199 +
    0x000000000001bed8, // (2^(32*33) mod P(x))' << 1
1200 +
    0x00000000000189ae, // (2^(32* 3) mod P(x))' << 1
1201 +
    0x00000000000114aa, // (2^(32* 2) mod P(x))' << 1
1202 +
    0x000000011c581911, // (floor(2^64/P(x)))'
1203 +
    0x0000000000010811, // (P(x))'
1204 +
    0x000000000001ce5e, // (2^(32*27) mod P(x))' << 1
1205 +
    0x000000000001c584, // (2^(32*29) mod P(x))' << 1
1206 +
    0x000000000001db50, // (2^(32*23) mod P(x))' << 1
1207 +
    0x000000000000b8f2, // (2^(32*25) mod P(x))' << 1
1208 +
    0x0000000000000842, // (2^(32*19) mod P(x))' << 1
1209 +
    0x000000000000b072, // (2^(32*21) mod P(x))' << 1
1210 +
    0x0000000000014ff2, // (2^(32*15) mod P(x))' << 1
1211 +
    0x0000000000019a3c, // (2^(32*17) mod P(x))' << 1
1212 +
    0x0000000000000e3a, // (2^(32*11) mod P(x))' << 1
1213 +
    0x0000000000004d7a, // (2^(32*13) mod P(x))' << 1
1214 +
    0x0000000000005b44, // (2^(32* 7) mod P(x))' << 1
1215 +
    0x0000000000007762, // (2^(32* 9) mod P(x))' << 1
1216 +
    0x0000000000019208, // (2^(32*63) mod P(x))' << 1 (256-byte folding)
1217 +
    0x0000000000002df8, // (2^(32*65) mod P(x))' << 1 (256-byte folding)
1218 +
];
added vendor/crc-fast/src/crc16/mod.rs +242 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
pub(crate) mod algorithm;
4 +
pub(crate) mod consts;
5 +
6 +
#[cfg(test)]
7 +
mod property_tests {
8 +
    use crate::crc16::consts::{CRC16_IBM_SDLC, CRC16_T10_DIF};
9 +
    use crate::test::consts::{RUST_CRC16_IBM_SDLC, RUST_CRC16_T10_DIF};
10 +
    use crate::test::miri_compatible_proptest_config;
11 +
    use crate::{
12 +
        checksum, checksum_combine, checksum_combine_with_params, checksum_with_params,
13 +
        CrcAlgorithm, CrcParams,
14 +
    };
15 +
    use proptest::prelude::*;
16 +
17 +
    proptest! {
18 +
        #![proptest_config(miri_compatible_proptest_config())]
19 +
20 +
        /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference
21 +
        /// *For any* valid CRC-16 parameters (polynomial, init, refin, refout, xorout) and any
22 +
        /// input byte sequence, the computed CRC-16 checksum SHALL match the result from the
23 +
        /// `crc` crate reference implementation.
24 +
        /// **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3**
25 +
        #[test]
26 +
        fn prop_crc16_ibm_sdlc_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
27 +
            let our_result = checksum(CrcAlgorithm::Crc16IbmSdlc, &data);
28 +
            let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64;
29 +
            prop_assert_eq!(
30 +
                our_result, reference_result,
31 +
                "CRC-16/IBM-SDLC mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
32 +
                data.len(), our_result, reference_result
33 +
            );
34 +
        }
35 +
36 +
        /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference
37 +
        /// *For any* valid CRC-16 parameters (polynomial, init, refin, refout, xorout) and any
38 +
        /// input byte sequence, the computed CRC-16 checksum SHALL match the result from the
39 +
        /// `crc` crate reference implementation.
40 +
        /// **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3**
41 +
        #[test]
42 +
        fn prop_crc16_t10_dif_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
43 +
            let our_result = checksum(CrcAlgorithm::Crc16T10Dif, &data);
44 +
            let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64;
45 +
            prop_assert_eq!(
46 +
                our_result, reference_result,
47 +
                "CRC-16/T10-DIF mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
48 +
                data.len(), our_result, reference_result
49 +
            );
50 +
        }
51 +
52 +
        /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference
53 +
        /// Tests checksum_with_params for CRC-16/IBM-SDLC (reflected variant)
54 +
        /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3**
55 +
        #[test]
56 +
        fn prop_crc16_ibm_sdlc_with_params_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
57 +
            let our_result = checksum_with_params(CRC16_IBM_SDLC, &data);
58 +
            let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64;
59 +
            prop_assert_eq!(
60 +
                our_result, reference_result,
61 +
                "CRC-16/IBM-SDLC (with_params) mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
62 +
                data.len(), our_result, reference_result
63 +
            );
64 +
        }
65 +
66 +
        /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference
67 +
        /// Tests checksum_with_params for CRC-16/T10-DIF (forward variant)
68 +
        /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3**
69 +
        #[test]
70 +
        fn prop_crc16_t10_dif_with_params_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
71 +
            let our_result = checksum_with_params(CRC16_T10_DIF, &data);
72 +
            let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64;
73 +
            prop_assert_eq!(
74 +
                our_result, reference_result,
75 +
                "CRC-16/T10-DIF (with_params) mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
76 +
                data.len(), our_result, reference_result
77 +
            );
78 +
        }
79 +
80 +
        /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference
81 +
        /// Tests custom CRC-16 parameters (equivalent to IBM-SDLC) to validate CrcParams::new()
82 +
        /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3**
83 +
        #[test]
84 +
        fn prop_crc16_custom_reflected_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
85 +
            // Custom CRC-16 parameters equivalent to CRC-16/IBM-SDLC
86 +
            let custom_params = CrcParams::new(
87 +
                "CRC-16/CUSTOM-REFLECTED",
88 +
                16,
89 +
                0x1021,
90 +
                0xFFFF,
91 +
                true,  // reflected
92 +
                0xFFFF,
93 +
                0x906E,
94 +
            );
95 +
            let our_result = checksum_with_params(custom_params, &data);
96 +
            let reference_result = RUST_CRC16_IBM_SDLC.checksum(&data) as u64;
97 +
            prop_assert_eq!(
98 +
                our_result, reference_result,
99 +
                "CRC-16 custom reflected mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
100 +
                data.len(), our_result, reference_result
101 +
            );
102 +
        }
103 +
104 +
        /// Feature: crc16-hardware-acceleration, Property 3: CRC-16 computation matches reference
105 +
        /// Tests custom CRC-16 parameters (equivalent to T10-DIF) to validate CrcParams::new()
106 +
        /// **Validates: Requirements 5.5, 6.1, 6.2, 6.3**
107 +
        #[test]
108 +
        fn prop_crc16_custom_forward_matches_reference(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
109 +
            // Custom CRC-16 parameters equivalent to CRC-16/T10-DIF
110 +
            let custom_params = CrcParams::new(
111 +
                "CRC-16/CUSTOM-FORWARD",
112 +
                16,
113 +
                0x8BB7,
114 +
                0x0000,
115 +
                false,  // forward (non-reflected)
116 +
                0x0000,
117 +
                0xD0DB,
118 +
            );
119 +
            let our_result = checksum_with_params(custom_params, &data);
120 +
            let reference_result = RUST_CRC16_T10_DIF.checksum(&data) as u64;
121 +
            prop_assert_eq!(
122 +
                our_result, reference_result,
123 +
                "CRC-16 custom forward mismatch for {} bytes: our=0x{:04X}, ref=0x{:04X}",
124 +
                data.len(), our_result, reference_result
125 +
            );
126 +
        }
127 +
128 +
        /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip
129 +
        /// *For any* valid CRC-16 parameters and any two input byte sequences A and B,
130 +
        /// `checksum_combine(checksum(A), checksum(B), len(B))` SHALL equal `checksum(A + B)`.
131 +
        /// **Validates: Requirements 6.4**
132 +
        #[test]
133 +
        fn prop_crc16_ibm_sdlc_checksum_combine_roundtrip(
134 +
            data_a in proptest::collection::vec(any::<u8>(), 0..512),
135 +
            data_b in proptest::collection::vec(any::<u8>(), 0..512)
136 +
        ) {
137 +
            let checksum_a = checksum(CrcAlgorithm::Crc16IbmSdlc, &data_a);
138 +
            let checksum_b = checksum(CrcAlgorithm::Crc16IbmSdlc, &data_b);
139 +
            let combined = checksum_combine(
140 +
                CrcAlgorithm::Crc16IbmSdlc,
141 +
                checksum_a,
142 +
                checksum_b,
143 +
                data_b.len() as u64,
144 +
            );
145 +
146 +
            let mut concatenated = data_a.clone();
147 +
            concatenated.extend(&data_b);
148 +
            let expected = checksum(CrcAlgorithm::Crc16IbmSdlc, &concatenated);
149 +
150 +
            prop_assert_eq!(
151 +
                combined, expected,
152 +
                "CRC-16/IBM-SDLC combine mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}",
153 +
                combined, expected, data_a.len(), data_b.len()
154 +
            );
155 +
        }
156 +
157 +
        /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip
158 +
        /// *For any* valid CRC-16 parameters and any two input byte sequences A and B,
159 +
        /// `checksum_combine(checksum(A), checksum(B), len(B))` SHALL equal `checksum(A + B)`.
160 +
        /// **Validates: Requirements 6.4**
161 +
        #[test]
162 +
        fn prop_crc16_t10_dif_checksum_combine_roundtrip(
163 +
            data_a in proptest::collection::vec(any::<u8>(), 0..512),
164 +
            data_b in proptest::collection::vec(any::<u8>(), 0..512)
165 +
        ) {
166 +
            let checksum_a = checksum(CrcAlgorithm::Crc16T10Dif, &data_a);
167 +
            let checksum_b = checksum(CrcAlgorithm::Crc16T10Dif, &data_b);
168 +
            let combined = checksum_combine(
169 +
                CrcAlgorithm::Crc16T10Dif,
170 +
                checksum_a,
171 +
                checksum_b,
172 +
                data_b.len() as u64,
173 +
            );
174 +
175 +
            let mut concatenated = data_a.clone();
176 +
            concatenated.extend(&data_b);
177 +
            let expected = checksum(CrcAlgorithm::Crc16T10Dif, &concatenated);
178 +
179 +
            prop_assert_eq!(
180 +
                combined, expected,
181 +
                "CRC-16/T10-DIF combine mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}",
182 +
                combined, expected, data_a.len(), data_b.len()
183 +
            );
184 +
        }
185 +
186 +
        /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip
187 +
        /// Tests checksum_combine_with_params for CRC-16/IBM-SDLC
188 +
        /// **Validates: Requirements 6.4**
189 +
        #[test]
190 +
        fn prop_crc16_ibm_sdlc_checksum_combine_with_params_roundtrip(
191 +
            data_a in proptest::collection::vec(any::<u8>(), 0..512),
192 +
            data_b in proptest::collection::vec(any::<u8>(), 0..512)
193 +
        ) {
194 +
            let checksum_a = checksum_with_params(CRC16_IBM_SDLC, &data_a);
195 +
            let checksum_b = checksum_with_params(CRC16_IBM_SDLC, &data_b);
196 +
            let combined = checksum_combine_with_params(
197 +
                CRC16_IBM_SDLC,
198 +
                checksum_a,
199 +
                checksum_b,
200 +
                data_b.len() as u64,
201 +
            );
202 +
203 +
            let mut concatenated = data_a.clone();
204 +
            concatenated.extend(&data_b);
205 +
            let expected = checksum_with_params(CRC16_IBM_SDLC, &concatenated);
206 +
207 +
            prop_assert_eq!(
208 +
                combined, expected,
209 +
                "CRC-16/IBM-SDLC combine_with_params mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}",
210 +
                combined, expected, data_a.len(), data_b.len()
211 +
            );
212 +
        }
213 +
214 +
        /// Feature: crc16-hardware-acceleration, Property 5: CRC-16 checksum combination round-trip
215 +
        /// Tests checksum_combine_with_params for CRC-16/T10-DIF
216 +
        /// **Validates: Requirements 6.4**
217 +
        #[test]
218 +
        fn prop_crc16_t10_dif_checksum_combine_with_params_roundtrip(
219 +
            data_a in proptest::collection::vec(any::<u8>(), 0..512),
220 +
            data_b in proptest::collection::vec(any::<u8>(), 0..512)
221 +
        ) {
222 +
            let checksum_a = checksum_with_params(CRC16_T10_DIF, &data_a);
223 +
            let checksum_b = checksum_with_params(CRC16_T10_DIF, &data_b);
224 +
            let combined = checksum_combine_with_params(
225 +
                CRC16_T10_DIF,
226 +
                checksum_a,
227 +
                checksum_b,
228 +
                data_b.len() as u64,
229 +
            );
230 +
231 +
            let mut concatenated = data_a.clone();
232 +
            concatenated.extend(&data_b);
233 +
            let expected = checksum_with_params(CRC16_T10_DIF, &concatenated);
234 +
235 +
            prop_assert_eq!(
236 +
                combined, expected,
237 +
                "CRC-16/T10-DIF combine_with_params mismatch: combined=0x{:04X}, expected=0x{:04X}, len_a={}, len_b={}",
238 +
                combined, expected, data_a.len(), data_b.len()
239 +
            );
240 +
        }
241 +
    }
242 +
}
added vendor/crc-fast/src/crc32/algorithm.rs +153 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides the CRC-32 algorithm implementations for areas where it differs from
4 +
//! CRC-64.
5 +
6 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
7 +
8 +
use crate::enums::Reflector;
9 +
use crate::structs::CrcState;
10 +
use crate::traits::{ArchOps, EnhancedCrcWidth};
11 +
12 +
impl EnhancedCrcWidth for crate::structs::Width32 {
13 +
    #[inline(always)]
14 +
    fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
15 +
        crate::crc32::width32_ops::load_constants(reflected)
16 +
    }
17 +
18 +
    #[inline(always)]
19 +
    unsafe fn create_state<T: ArchOps>(
20 +
        value: Self::Value,
21 +
        reflected: bool,
22 +
        ops: &T,
23 +
    ) -> CrcState<T::Vector>
24 +
    where
25 +
        T::Vector: Copy,
26 +
    {
27 +
        let vector = if reflected {
28 +
            // For reflected mode, state goes in the low 32 bits
29 +
            ops.create_vector_from_u32(value, false)
30 +
        } else {
31 +
            // For non-reflected mode, state goes in high 32 bits of the
32 +
            // high 64-bit part of the 128-bit register (need to shift 12 bytes)
33 +
            ops.create_vector_from_u32(value, true)
34 +
        };
35 +
36 +
        CrcState {
37 +
            value: vector,
38 +
            reflected,
39 +
        }
40 +
    }
41 +
42 +
    #[inline(always)]
43 +
    unsafe fn extract_result<T: ArchOps>(vector: T::Vector, reflected: bool, ops: &T) -> Self::Value
44 +
    where
45 +
        T::Vector: Copy,
46 +
    {
47 +
        // Extract u64s from the vector
48 +
        let u64s = ops.extract_u64s(vector);
49 +
50 +
        if reflected {
51 +
            // In reflected mode, the result is in the low 32 bits of the low 64 bits
52 +
            u64s[0] as u32
53 +
        } else {
54 +
            // In non-reflected mode, the result is in the high 32 bits of the low 64 bits
55 +
            (u64s[1] >> 32) as u32
56 +
        }
57 +
    }
58 +
59 +
    #[inline(always)]
60 +
    unsafe fn fold_16<T: ArchOps>(
61 +
        state: &mut CrcState<T::Vector>,
62 +
        coeff: T::Vector,
63 +
        data_to_xor: T::Vector,
64 +
        ops: &T,
65 +
    ) where
66 +
        T::Vector: Copy,
67 +
    {
68 +
        crate::crc32::width32_ops::fold_16(state, coeff, data_to_xor, ops)
69 +
    }
70 +
71 +
    /// CRC-32 specific implementation for folding 8 bytes to 4 bytes
72 +
    #[inline(always)]
73 +
    unsafe fn fold_width<T: ArchOps>(state: &mut CrcState<T::Vector>, high: u64, low: u64, ops: &T)
74 +
    where
75 +
        T::Vector: Copy,
76 +
    {
77 +
        crate::crc32::width32_ops::fold_width(state, high, low, ops)
78 +
    }
79 +
80 +
    #[inline(always)]
81 +
    unsafe fn barrett_reduction<T: ArchOps>(
82 +
        state: &CrcState<T::Vector>,
83 +
        poly: u64,
84 +
        mu: u64,
85 +
        ops: &T,
86 +
    ) -> Self::Value
87 +
    where
88 +
        T::Vector: Copy,
89 +
    {
90 +
        let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops);
91 +
        if state.reflected {
92 +
            u64s[1] as u32
93 +
        } else {
94 +
            (u64s[0] >> 32) as u32
95 +
        }
96 +
    }
97 +
98 +
    #[inline(always)]
99 +
    unsafe fn create_coefficient<T: ArchOps>(
100 +
        high: u64,
101 +
        low: u64,
102 +
        _reflected: bool,
103 +
        ops: &T,
104 +
    ) -> T::Vector
105 +
    where
106 +
        T::Vector: Copy,
107 +
    {
108 +
        crate::crc32::width32_ops::create_coefficient(high, low, ops)
109 +
    }
110 +
111 +
    #[inline(always)]
112 +
    unsafe fn perform_final_reduction<T: ArchOps>(
113 +
        state: T::Vector,
114 +
        reflected: bool,
115 +
        keys: &[u64; 23],
116 +
        ops: &T,
117 +
    ) -> Self::Value
118 +
    where
119 +
        T::Vector: Copy,
120 +
    {
121 +
        let u64s = crate::crc32::width32_ops::perform_final_reduction(state, reflected, keys, ops);
122 +
        if reflected {
123 +
            u64s[1] as u32
124 +
        } else {
125 +
            (u64s[0] >> 32) as u32
126 +
        }
127 +
    }
128 +
129 +
    #[inline(always)]
130 +
    fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) {
131 +
        crate::crc32::width32_ops::get_last_bytes_table_ptr(reflected, remaining_len)
132 +
    }
133 +
}
134 +
135 +
/// Process inputs smaller than 16 bytes
136 +
#[inline]
137 +
#[cfg_attr(
138 +
    any(target_arch = "x86", target_arch = "x86_64"),
139 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
140 +
)]
141 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
142 +
pub(crate) unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(
143 +
    data: &[u8],
144 +
    state: &mut CrcState<T::Vector>,
145 +
    reflector: &Reflector<T::Vector>,
146 +
    keys: &[u64; 23],
147 +
    ops: &T,
148 +
) -> W::Value
149 +
where
150 +
    T::Vector: Copy,
151 +
{
152 +
    crate::crc32::width32_ops::process_0_to_15::<T, W>(data, state, reflector, keys, ops)
153 +
}
added vendor/crc-fast/src/crc32/consts.rs +584 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![allow(dead_code)]
4 +
5 +
use crate::consts::{
6 +
    NAME_CRC32_AIXM, NAME_CRC32_AUTOSAR, NAME_CRC32_BASE91_D, NAME_CRC32_BZIP2,
7 +
    NAME_CRC32_CD_ROM_EDC, NAME_CRC32_CKSUM, NAME_CRC32_ISCSI, NAME_CRC32_ISO_HDLC,
8 +
    NAME_CRC32_JAMCRC, NAME_CRC32_MEF, NAME_CRC32_MPEG_2, NAME_CRC32_XFER,
9 +
};
10 +
use crate::structs::Algorithm;
11 +
use crate::CrcAlgorithm;
12 +
use crate::CrcParams;
13 +
14 +
pub const CRC_32_AIXM: Algorithm<u32> = Algorithm {
15 +
    width: 32,
16 +
    poly: 0x814141ab,
17 +
    init: 0x0,
18 +
    refin: false,
19 +
    refout: false,
20 +
    xorout: 0x0,
21 +
    check: 0x3010bf7f,
22 +
    residue: 0x0,
23 +
};
24 +
25 +
pub const CRC_32_AUTOSAR: Algorithm<u32> = Algorithm {
26 +
    width: 32,
27 +
    poly: 0xf4acfb13,
28 +
    init: 0xffffffff,
29 +
    refin: true,
30 +
    refout: true,
31 +
    xorout: 0xffffffff,
32 +
    check: 0x1697d06a,
33 +
    residue: 0x904cddbf,
34 +
};
35 +
36 +
pub const CRC_32_BASE91_D: Algorithm<u32> = Algorithm {
37 +
    width: 32,
38 +
    poly: 0xa833982b,
39 +
    init: 0xffffffff,
40 +
    refin: true,
41 +
    refout: true,
42 +
    xorout: 0xffffffff,
43 +
    check: 0x87315576,
44 +
    residue: 0x45270551,
45 +
};
46 +
47 +
pub const CRC_32_BZIP2: Algorithm<u32> = Algorithm {
48 +
    width: 32,
49 +
    poly: 0x4c11db7,
50 +
    init: 0xffffffff,
51 +
    refin: false,
52 +
    refout: false,
53 +
    xorout: 0xffffffff,
54 +
    check: 0xfc891918,
55 +
    residue: 0xc704dd7b,
56 +
};
57 +
58 +
pub const CRC_32_CD_ROM_EDC: Algorithm<u32> = Algorithm {
59 +
    width: 32,
60 +
    poly: 0x8001801b,
61 +
    init: 0x0,
62 +
    refin: true,
63 +
    refout: true,
64 +
    xorout: 0x0,
65 +
    check: 0x6ec2edc4,
66 +
    residue: 0x0,
67 +
};
68 +
69 +
pub const CRC_32_CKSUM: Algorithm<u32> = Algorithm {
70 +
    width: 32,
71 +
    poly: 0x4c11db7,
72 +
    init: 0x0,
73 +
    refin: false,
74 +
    refout: false,
75 +
    xorout: 0xffffffff,
76 +
    check: 0x765e7680,
77 +
    residue: 0xc704dd7b,
78 +
};
79 +
80 +
pub const CRC_32_ISCSI: Algorithm<u32> = Algorithm {
81 +
    width: 32,
82 +
    poly: 0x1edc6f41,
83 +
    init: 0xffffffff,
84 +
    refin: true,
85 +
    refout: true,
86 +
    xorout: 0xffffffff,
87 +
    check: 0xe3069283,
88 +
    residue: 0xb798b438,
89 +
};
90 +
91 +
pub const CRC_32_ISO_HDLC: Algorithm<u32> = Algorithm {
92 +
    width: 32,
93 +
    poly: 0x4c11db7,
94 +
    init: 0xffffffff,
95 +
    refin: true,
96 +
    refout: true,
97 +
    xorout: 0xffffffff,
98 +
    check: 0xcbf43926,
99 +
    residue: 0xdebb20e3,
100 +
};
101 +
102 +
pub const CRC_32_JAMCRC: Algorithm<u32> = Algorithm {
103 +
    width: 32,
104 +
    poly: 0x4c11db7,
105 +
    init: 0xffffffff,
106 +
    refin: true,
107 +
    refout: true,
108 +
    xorout: 0x0,
109 +
    check: 0x340bc6d9,
110 +
    residue: 0x0,
111 +
};
112 +
113 +
pub const CRC_32_MEF: Algorithm<u32> = Algorithm {
114 +
    width: 32,
115 +
    poly: 0x741b8cd7,
116 +
    init: 0xffffffff,
117 +
    refin: true,
118 +
    refout: true,
119 +
    xorout: 0x0,
120 +
    check: 0xd2c22f51,
121 +
    residue: 0x0,
122 +
};
123 +
124 +
pub const CRC_32_MPEG_2: Algorithm<u32> = Algorithm {
125 +
    width: 32,
126 +
    poly: 0x4c11db7,
127 +
    init: 0xffffffff,
128 +
    refin: false,
129 +
    refout: false,
130 +
    xorout: 0x0,
131 +
    check: 0x376e6e7,
132 +
    residue: 0x0,
133 +
};
134 +
135 +
pub const CRC_32_XFER: Algorithm<u32> = Algorithm {
136 +
    width: 32,
137 +
    poly: 0xaf,
138 +
    init: 0x0,
139 +
    refin: false,
140 +
    refout: false,
141 +
    xorout: 0x0,
142 +
    check: 0xbd0be338,
143 +
    residue: 0x0,
144 +
};
145 +
146 +
// width=32 poly=0x814141ab init=0x00000000 refin=false refout=false xorout=0x00000000 check=0x3010bf7f residue=0x00000000 name="CRC-32/AIXM"
147 +
pub const CRC32_AIXM: CrcParams = CrcParams {
148 +
    algorithm: CrcAlgorithm::Crc32Aixm,
149 +
    name: NAME_CRC32_AIXM,
150 +
    width: 32,
151 +
    poly: CRC_32_AIXM.poly as u64,
152 +
    init: CRC_32_AIXM.init as u64,
153 +
    init_algorithm: CRC_32_AIXM.init as u64,
154 +
    refin: CRC_32_AIXM.refin,   // false
155 +
    refout: CRC_32_AIXM.refout, // false
156 +
    xorout: CRC_32_AIXM.xorout as u64,
157 +
    check: CRC_32_AIXM.check as u64,
158 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_814141AB_FORWARD),
159 +
};
160 +
161 +
// width=32 poly=0xf4acfb13 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0x1697d06a residue=0x904cddbf name="CRC-32/AUTOSAR"
162 +
pub const CRC32_AUTOSAR: CrcParams = CrcParams {
163 +
    algorithm: CrcAlgorithm::Crc32Autosar,
164 +
    name: NAME_CRC32_AUTOSAR,
165 +
    width: 32,
166 +
    poly: CRC_32_AUTOSAR.poly as u64,
167 +
    init: CRC_32_AUTOSAR.init as u64,
168 +
    init_algorithm: CRC_32_AUTOSAR.init as u64,
169 +
    refin: CRC_32_AUTOSAR.refin,   // true
170 +
    refout: CRC_32_AUTOSAR.refout, // true
171 +
    xorout: CRC_32_AUTOSAR.xorout as u64,
172 +
    check: CRC_32_AUTOSAR.check as u64,
173 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_F4ACFB13_REFLECTED),
174 +
};
175 +
176 +
// width=32 poly=0xa833982b init=0xffffffff refin=true refout=true xorout=0xffffffff check=0x87315576 residue=0x45270551 name="CRC-32/BASE91-D"
177 +
pub const CRC32_BASE91_D: CrcParams = CrcParams {
178 +
    algorithm: CrcAlgorithm::Crc32Base91D,
179 +
    name: NAME_CRC32_BASE91_D,
180 +
    width: 32,
181 +
    poly: CRC_32_BASE91_D.poly as u64,
182 +
    init: CRC_32_BASE91_D.init as u64,
183 +
    init_algorithm: CRC_32_BASE91_D.init as u64,
184 +
    refin: CRC_32_BASE91_D.refin,   // true
185 +
    refout: CRC_32_BASE91_D.refout, // true
186 +
    xorout: CRC_32_BASE91_D.xorout as u64,
187 +
    check: CRC_32_BASE91_D.check as u64,
188 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_A833982B_REFLECTED),
189 +
};
190 +
191 +
// width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0xffffffff check=0xfc891918 residue=0xc704dd7b name="CRC-32/BZIP2"
192 +
pub const CRC32_BZIP2: CrcParams = CrcParams {
193 +
    algorithm: CrcAlgorithm::Crc32Bzip2,
194 +
    name: NAME_CRC32_BZIP2,
195 +
    width: 32,
196 +
    poly: CRC_32_BZIP2.poly as u64,
197 +
    init: CRC_32_BZIP2.init as u64,
198 +
    init_algorithm: CRC_32_BZIP2.init as u64,
199 +
    refin: CRC_32_BZIP2.refin,   // false
200 +
    refout: CRC_32_BZIP2.refout, // false
201 +
    xorout: CRC_32_BZIP2.xorout as u64,
202 +
    check: CRC_32_BZIP2.check as u64,
203 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_FORWARD),
204 +
};
205 +
206 +
// width=32 poly=0x8001801b init=0x00000000 refin=true refout=true xorout=0x00000000 check=0x6ec2edc4 residue=0x00000000 name="CRC-32/CD-ROM-EDC"
207 +
pub const CRC32_CD_ROM_EDC: CrcParams = CrcParams {
208 +
    algorithm: CrcAlgorithm::Crc32CdRomEdc,
209 +
    name: NAME_CRC32_CD_ROM_EDC,
210 +
    width: 32,
211 +
    poly: CRC_32_CD_ROM_EDC.poly as u64,
212 +
    init: CRC_32_CD_ROM_EDC.init as u64,
213 +
    init_algorithm: CRC_32_CD_ROM_EDC.init as u64,
214 +
    refin: CRC_32_CD_ROM_EDC.refin,   // true
215 +
    refout: CRC_32_CD_ROM_EDC.refout, // true
216 +
    xorout: CRC_32_CD_ROM_EDC.xorout as u64,
217 +
    check: CRC_32_CD_ROM_EDC.check as u64,
218 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_8001801B_REFLECTED),
219 +
};
220 +
221 +
// width=32 poly=0x04c11db7 init=0x00000000 refin=false refout=false xorout=0xffffffff check=0x765e7680 residue=0xc704dd7b name="CRC-32/CKSUM"
222 +
pub const CRC32_CKSUM: CrcParams = CrcParams {
223 +
    algorithm: CrcAlgorithm::Crc32Cksum,
224 +
    name: NAME_CRC32_CKSUM,
225 +
    width: 32,
226 +
    poly: CRC_32_CKSUM.poly as u64,
227 +
    init: CRC_32_CKSUM.init as u64,
228 +
    init_algorithm: CRC_32_CKSUM.init as u64,
229 +
    refin: CRC_32_CKSUM.refin,   // false
230 +
    refout: CRC_32_CKSUM.refout, // false
231 +
    xorout: CRC_32_CKSUM.xorout as u64,
232 +
    check: CRC_32_CKSUM.check as u64,
233 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_FORWARD),
234 +
};
235 +
236 +
// width=32 poly=0x1edc6f41 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xe3069283 residue=0xb798b438 name="CRC-32/ISCSI"
237 +
pub const CRC32_ISCSI: CrcParams = CrcParams {
238 +
    algorithm: CrcAlgorithm::Crc32Iscsi,
239 +
    name: NAME_CRC32_ISCSI,
240 +
    width: 32,
241 +
    poly: CRC_32_ISCSI.poly as u64,
242 +
    init: CRC_32_ISCSI.init as u64,
243 +
    init_algorithm: CRC_32_ISCSI.init as u64,
244 +
    refin: CRC_32_ISCSI.refin,   // true
245 +
    refout: CRC_32_ISCSI.refout, // true
246 +
    xorout: CRC_32_ISCSI.xorout as u64,
247 +
    check: CRC_32_ISCSI.check as u64,
248 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_1EDC6F41_REFLECTED),
249 +
};
250 +
251 +
// width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xcbf43926 residue=0xdebb20e3 name="CRC-32/ISO-HDLC"
252 +
pub const CRC32_ISO_HDLC: CrcParams = CrcParams {
253 +
    algorithm: CrcAlgorithm::Crc32IsoHdlc,
254 +
    name: NAME_CRC32_ISO_HDLC,
255 +
    width: 32,
256 +
    poly: CRC_32_ISO_HDLC.poly as u64,
257 +
    init: CRC_32_ISO_HDLC.init as u64,
258 +
    init_algorithm: CRC_32_ISO_HDLC.init as u64,
259 +
    refin: CRC_32_ISO_HDLC.refin,   // true
260 +
    refout: CRC_32_ISO_HDLC.refout, // true
261 +
    xorout: CRC_32_ISO_HDLC.xorout as u64,
262 +
    check: CRC_32_ISO_HDLC.check as u64,
263 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_REFLECTED),
264 +
};
265 +
266 +
// width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0x00000000 check=0x340bc6d9 residue=0x00000000 name="CRC-32/JAMCRC"
267 +
pub const CRC32_JAMCRC: CrcParams = CrcParams {
268 +
    algorithm: CrcAlgorithm::Crc32Jamcrc,
269 +
    name: NAME_CRC32_JAMCRC,
270 +
    width: 32,
271 +
    poly: CRC_32_JAMCRC.poly as u64,
272 +
    init: CRC_32_JAMCRC.init as u64,
273 +
    init_algorithm: CRC_32_JAMCRC.init as u64,
274 +
    refin: CRC_32_JAMCRC.refin,   // true
275 +
    refout: CRC_32_JAMCRC.refout, // true
276 +
    xorout: CRC_32_JAMCRC.xorout as u64,
277 +
    check: CRC_32_JAMCRC.check as u64,
278 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_REFLECTED),
279 +
};
280 +
281 +
// width=32 poly=0x741b8cd7 init=0xffffffff refin=true refout=true xorout=0x00000000 check=0xd2c22f51 residue=0x00000000 name="CRC-32/MEF"
282 +
pub const CRC32_MEF: CrcParams = CrcParams {
283 +
    algorithm: CrcAlgorithm::Crc32Mef,
284 +
    name: NAME_CRC32_MEF,
285 +
    width: 32,
286 +
    poly: CRC_32_MEF.poly as u64,
287 +
    init: CRC_32_MEF.init as u64,
288 +
    init_algorithm: CRC_32_MEF.init as u64,
289 +
    refin: CRC_32_MEF.refin,   // true
290 +
    refout: CRC_32_MEF.refout, // true
291 +
    xorout: CRC_32_MEF.xorout as u64,
292 +
    check: CRC_32_MEF.check as u64,
293 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_741B8CD7_REFLECTED),
294 +
};
295 +
296 +
// width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0x00000000 check=0x0376e6e7 residue=0x00000000 name="CRC-32/MPEG-2"
297 +
pub const CRC32_MPEG_2: CrcParams = CrcParams {
298 +
    algorithm: CrcAlgorithm::Crc32Mpeg2,
299 +
    name: NAME_CRC32_MPEG_2,
300 +
    width: 32,
301 +
    poly: CRC_32_MPEG_2.poly as u64,
302 +
    init: CRC_32_MPEG_2.init as u64,
303 +
    init_algorithm: CRC_32_MPEG_2.init as u64,
304 +
    refin: CRC_32_MPEG_2.refin,   // false
305 +
    refout: CRC_32_MPEG_2.refout, // false
306 +
    xorout: CRC_32_MPEG_2.xorout as u64,
307 +
    check: CRC_32_MPEG_2.check as u64,
308 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_04C11DB7_FORWARD),
309 +
};
310 +
311 +
// width=32 poly=0x000000af init=0x00000000 refin=false refout=false xorout=0x00000000 check=0xbd0be338 residue=0x00000000 name="CRC-32/XFER"
312 +
pub const CRC32_XFER: CrcParams = CrcParams {
313 +
    algorithm: CrcAlgorithm::Crc32Xfer,
314 +
    name: NAME_CRC32_XFER,
315 +
    width: 32,
316 +
    poly: CRC_32_XFER.poly as u64,
317 +
    init: CRC_32_XFER.init as u64,
318 +
    init_algorithm: CRC_32_XFER.init as u64,
319 +
    refin: CRC_32_XFER.refin,   // false
320 +
    refout: CRC_32_XFER.refout, // false
321 +
    xorout: CRC_32_XFER.xorout as u64,
322 +
    check: CRC_32_XFER.check as u64,
323 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_000000AF_FORWARD),
324 +
};
325 +
326 +
// CRC-32/AIXM
327 +
pub const KEYS_814141AB_FORWARD: [u64; 23] = [
328 +
    0x0000000000000000,
329 +
    0x9be9878f00000000,
330 +
    0x85b2a6e400000000,
331 +
    0x2aa81be300000000,
332 +
    0xa488a24c00000000,
333 +
    0x9be9878f00000000,
334 +
    0xb1efc5f600000000,
335 +
    0x00000001feff7f62,
336 +
    0x00000001814141ab,
337 +
    0x143b9cd200000000,
338 +
    0x9853011900000000,
339 +
    0x7836e63a00000000,
340 +
    0xaa29818100000000,
341 +
    0x3bd96ca700000000,
342 +
    0x60205cd400000000,
343 +
    0x74f21e8b00000000,
344 +
    0x3540871b00000000,
345 +
    0x0442099000000000,
346 +
    0x361f380200000000,
347 +
    0x6757ee2f00000000,
348 +
    0xffc42e7700000000,
349 +
    0xd12a88300000000,
350 +
    0x93a03b8800000000,
351 +
];
352 +
353 +
// CRC-32/AUTOSAR
354 +
pub const KEYS_F4ACFB13_REFLECTED: [u64; 23] = [
355 +
    0x0000000000000000,
356 +
    0x000000016130902a,
357 +
    0x0000000050428a9c,
358 +
    0x000000010b1e9a08,
359 +
    0x00000000d77bb854,
360 +
    0x000000016130902a,
361 +
    0x00000001b0d566c0,
362 +
    0x000000013cfdbf23,
363 +
    0x0000000191be6a5f,
364 +
    0x00000000b105f098,
365 +
    0x00000001b260c18a,
366 +
    0x00000001b0d68118,
367 +
    0x00000000c6f0b5d2,
368 +
    0x00000000ce9a9f48,
369 +
    0x00000000fc24cbf6,
370 +
    0x0000000018c71228,
371 +
    0x000000014b462960,
372 +
    0x00000001848ecbce,
373 +
    0x0000000049cb6c68,
374 +
    0x00000000c9d55d76,
375 +
    0x0000000022919656,
376 +
    0x00000001e97b6a9e,
377 +
    0x00000000000cbd7c,
378 +
];
379 +
380 +
// CRC-32/BASE91-D
381 +
pub const KEYS_A833982B_REFLECTED: [u64; 23] = [
382 +
    0x0000000000000000,
383 +
    0x00000001e065d896,
384 +
    0x00000001aca6d990,
385 +
    0x000000007ec6845e,
386 +
    0x000000009aa0f3be,
387 +
    0x00000001e065d896,
388 +
    0x00000000cf690ff2,
389 +
    0x000000009167fd37,
390 +
    0x00000001a833982b,
391 +
    0x00000001f0023e48,
392 +
    0x0000000054bacd0c,
393 +
    0x00000001677129ba,
394 +
    0x00000000ac52eee8,
395 +
    0x0000000068be1470,
396 +
    0x000000017208fc52,
397 +
    0x00000001c2e169fc,
398 +
    0x0000000122f9bd98,
399 +
    0x0000000192d6d10c,
400 +
    0x00000001942367fa,
401 +
    0x00000000c2044564,
402 +
    0x00000001a07ba234,
403 +
    0x000000010ffc58e6,
404 +
    0x000000015920d7a6,
405 +
];
406 +
407 +
// CRC-32/CD-ROM-EDC
408 +
pub const KEYS_8001801B_REFLECTED: [u64; 23] = [
409 +
    0x0000000000000000,
410 +
    0x00000001d5934102,
411 +
    0x000000006c90c100,
412 +
    0x00000001fbea69a0,
413 +
    0x000000006500d000,
414 +
    0x00000001d5934102,
415 +
    0x00000001f1030002,
416 +
    0x000000017000ffff,
417 +
    0x00000001b0030003,
418 +
    0x0000000178be62fe,
419 +
    0x00000001353195ce,
420 +
    0x0000000085a25e78,
421 +
    0x00000000a23c9cc0,
422 +
    0x000000005ead8550,
423 +
    0x00000001eab75dd2,
424 +
    0x000000012e7928a2,
425 +
    0x00000001f8931102,
426 +
    0x0000000086acf0c0,
427 +
    0x00000001517f91c2,
428 +
    0x00000001f75a6182,
429 +
    0x00000000bd01c000,
430 +
    0x00000001bcb30820,
431 +
    0x000000010d925102,
432 +
];
433 +
434 +
// CRC-32/MEF
435 +
pub const KEYS_741B8CD7_REFLECTED: [u64; 23] = [
436 +
    0x0000000000000000,
437 +
    0x000000014b0602f8,
438 +
    0x000000007b4bc878,
439 +
    0x0000000023b08408,
440 +
    0x00000001e9bbe8a4,
441 +
    0x000000014b0602f8,
442 +
    0x0000000018c5564c,
443 +
    0x0000000017d232cd,
444 +
    0x00000001d663b05d,
445 +
    0x00000001f5dbe222,
446 +
    0x00000001290fe3ca,
447 +
    0x00000000048d6a82,
448 +
    0x0000000063b45844,
449 +
    0x00000001a9b7f536,
450 +
    0x0000000190afdbca,
451 +
    0x00000000be6d8f38,
452 +
    0x00000001c06a9816,
453 +
    0x00000001b5a46922,
454 +
    0x0000000097259f1a,
455 +
    0x00000000adfa5198,
456 +
    0x000000009c899030,
457 +
    0x00000001adf2908e,
458 +
    0x00000001f91b48f0,
459 +
];
460 +
461 +
// CRC-32/XFER
462 +
pub const KEYS_000000AF_FORWARD: [u64; 23] = [
463 +
    0x0000000000000000,
464 +
    0x00295f2300000000,
465 +
    0xfafa517900000000,
466 +
    0x5cd86bb500000000,
467 +
    0xaf6f37a300000000,
468 +
    0x00295f2300000000,
469 +
    0x0000445500000000,
470 +
    0x00000001000000af,
471 +
    0x00000001000000af,
472 +
    0x9bd57b5d00000000,
473 +
    0xb7a4d76400000000,
474 +
    0x1ae0004200000000,
475 +
    0xe7720be600000000,
476 +
    0x9c7fc8fe00000000,
477 +
    0x3885faf800000000,
478 +
    0xb477ad7100000000,
479 +
    0x0ac2ae3d00000000,
480 +
    0x5eae9dbe00000000,
481 +
    0x784a483800000000,
482 +
    0x7d21bf2000000000,
483 +
    0xfaebd3d300000000,
484 +
    0x25ed382b00000000,
485 +
    0x6d2b811a00000000,
486 +
];
487 +
488 +
// CRC-32/ISO-HDLC (aka 'crc32'), CRC-32/JAMCRC
489 +
const KEYS_04C11DB7_REFLECTED: [u64; 23] = [
490 +
    0x0000000000000000, // unused placeholder to match 1-based indexing
491 +
    0x00000000ccaa009e, // (2^(32* 3) mod P(x))' << 1
492 +
    0x00000001751997d0, // (2^(32* 5) mod P(x))' << 1
493 +
    0x000000014a7fe880, // (2^(32*31) mod P(x))' << 1
494 +
    0x00000001e88ef372, // (2^(32*33) mod P(x))' << 1
495 +
    0x00000000ccaa009e, // (2^(32* 3) mod P(x))' << 1
496 +
    0x0000000163cd6124, // (2^(32* 2) mod P(x))' << 1
497 +
    0x00000001f7011641, // (floor(2^64/P(x)))'
498 +
    0x00000001db710641, // (P(x))'
499 +
    0x00000001d7cfc6ac, // (2^(32*27) mod P(x))' << 1
500 +
    0x00000001ea89367e, // (2^(32*29) mod P(x))' << 1
501 +
    0x000000018cb44e58, // (2^(32*23) mod P(x))' << 1
502 +
    0x00000000df068dc2, // (2^(32*25) mod P(x))' << 1
503 +
    0x00000000ae0b5394, // (2^(32*19) mod P(x))' << 1
504 +
    0x00000001c7569e54, // (2^(32*21) mod P(x))' << 1
505 +
    0x00000001c6e41596, // (2^(32*15) mod P(x))' << 1
506 +
    0x0000000154442bd4, // (2^(32*17) mod P(x))' << 1
507 +
    0x0000000174359406, // (2^(32*11) mod P(x))' << 1
508 +
    0x000000003db1ecdc, // (2^(32*13) mod P(x))' << 1
509 +
    0x000000015a546366, // (2^(32* 7) mod P(x))' << 1
510 +
    0x00000000f1da05aa, // (2^(32* 9) mod P(x))' << 1
511 +
    0x00000001322d1430,
512 +
    0x000000011542778a,
513 +
];
514 +
515 +
// CRC-32/ISCSI (aka 'crc32c')
516 +
const KEYS_1EDC6F41_REFLECTED: [u64; 23] = [
517 +
    0x0000000000000000, // unused placeholder to match 1-based indexing
518 +
    0x000000014cd00bd6, // (2^(32* 3) mod P(x))' << 1
519 +
    0x00000000f20c0dfe, // (2^(32* 5) mod P(x))' << 1
520 +
    0x000000000d3b6092, // (2^(32*31) mod P(x))' << 1
521 +
    0x000000006992cea2, // (2^(32*33) mod P(x))' << 1
522 +
    0x000000014cd00bd6, // (2^(32* 3) mod P(x))' << 1
523 +
    0x00000000dd45aab8, // (2^(32* 2) mod P(x))' << 1
524 +
    0x00000000dea713f1, // (floor(2^64/P(x)))'
525 +
    0x0000000105ec76f1, // (P(x))'
526 +
    0x000000014237f5e6, // (2^(32*27) mod P(x))' << 1
527 +
    0x000000002ad91c30, // (2^(32*29) mod P(x))' << 1
528 +
    0x0000000102f9b8a2, // (2^(32*23) mod P(x))' << 1
529 +
    0x00000001c1733996, // (2^(32*25) mod P(x))' << 1
530 +
    0x0000000039d3b296, // (2^(32*19) mod P(x))' << 1
531 +
    0x00000000083a6eec, // (2^(32*21) mod P(x))' << 1
532 +
    0x000000009e4addf8, // (2^(32*15) mod P(x))' << 1
533 +
    0x00000000740eef02, // (2^(32*17) mod P(x))' << 1
534 +
    0x00000001d82c63da, // (2^(32*11) mod P(x))' << 1
535 +
    0x000000001c291d04, // (2^(32*13) mod P(x))' << 1
536 +
    0x00000000ba4fc28e, // (2^(32* 7) mod P(x))' << 1
537 +
    0x00000001384aa63a, // (2^(32* 9) mod P(x))' << 1
538 +
    0x00000000b9e02b86,
539 +
    0x00000000dcb17aa4,
540 +
];
541 +
542 +
// CRC-32/BZIP2, CRC-32/CKSUM, CRC-32/MPEG-2
543 +
const KEYS_04C11DB7_FORWARD: [u64; 23] = [
544 +
    0x0000000000000000, // unused placeholder to match 1-based indexing
545 +
    0xf200aa6600000000, // 2^(32* 3) mod P(x) << 32
546 +
    0x17d3315d00000000, // 2^(32* 5) mod P(x) << 32
547 +
    0x022ffca500000000, // 2^(32*31) mod P(x) << 32
548 +
    0x9d9ee22f00000000, // 2^(32*33) mod P(x) << 32
549 +
    0xf200aa6600000000, // 2^(32* 3) mod P(x) << 32
550 +
    0x490d678d00000000, // 2^(32* 2) mod P(x) << 32
551 +
    0x0000000104d101df, // floor(2^64/P(x))
552 +
    0x0000000104c11db7, // P(x)
553 +
    0x6ac7e7d700000000, // 2^(32*27) mod P(x) << 32
554 +
    0xfcd922af00000000, // 2^(32*29) mod P(x) << 32
555 +
    0x34e45a6300000000, // 2^(32*23) mod P(x) << 32
556 +
    0x8762c1f600000000, // 2^(32*25) mod P(x) << 32
557 +
    0x5395a0ea00000000, // 2^(32*19) mod P(x) << 32
558 +
    0x54f2d5c700000000, // 2^(32*21) mod P(x) << 32
559 +
    0xd3504ec700000000, // 2^(32*15) mod P(x) << 32
560 +
    0x57a8445500000000, // 2^(32*17) mod P(x) << 32
561 +
    0xc053585d00000000, // 2^(32*11) mod P(x) << 32
562 +
    0x766f1b7800000000, // 2^(32*13) mod P(x) << 32
563 +
    0xcd8c54b500000000, // 2^(32* 7) mod P(x) << 32
564 +
    0xab40b71e00000000, // 2^(32* 9) mod P(x) << 32
565 +
    0x1851689900000000,
566 +
    0xa3dc855100000000,
567 +
];
568 +
569 +
pub(crate) const SIMD_CONSTANTS: [[u64; 2]; 4] = [
570 +
    [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
571 +
    [0x8080808080808080, 0x8080808080808080], // mask1
572 +
    [0xffffffffffffffff, 0x00000000ffffffff], // mask2 forward
573 +
    [0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF], // mask2 reverse
574 +
];
575 +
576 +
pub(crate) const PSHUFB_SHF_TABLE_REVERSE: [[u64; 2]; 2] = [
577 +
    [0x0706050403020100, 0x0f0e0d0c0b0a0908],
578 +
    [0x8786858483828180, 0x8f8e8d8c8b8a8988],
579 +
];
580 +
581 +
pub(crate) const PSHUFB_SHF_TABLE_FORWARD: [[u64; 2]; 2] = [
582 +
    [0x8786858483828100, 0x8f8e8d8c8b8a8988],
583 +
    [0x0706050403020100, 0x0f0e0d0c0b0a0908],
584 +
];
added vendor/crc-fast/src/crc32/fusion/aarch64/iscsi/crc_pmull.rs +179 −0
1 +
//! Provides CRC-32/ISCSI calculations using a fusion of native CLMUL
2 +
//! instructions and native CRC calculation instructions on aarch64.
3 +
//!
4 +
//! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/
5 +
//!
6 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
7 +
//! with the help of Claude.ai.
8 +
//!
9 +
//! Modified as necessary for this Rust implementation.
10 +
//!
11 +
//! MIT licensed.
12 +
13 +
#![cfg(target_arch = "aarch64")]
14 +
15 +
use crate::crc32::fusion::aarch64::{clmul_hi_and_xor, clmul_lo_and_xor};
16 +
use core::arch::aarch64::{
17 +
    __crc32cb, __crc32cd, veorq_u64, vgetq_lane_u64, vld1q_u64, vmovq_n_u64, vsetq_lane_u64,
18 +
};
19 +
20 +
/// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
21 +
/// with the help of Claude.ai using:
22 +
///
23 +
/// ./generate -i neon -p crc32c -a v12e_v1
24 +
///
25 +
/// Modified as necessary for this Rust implementation.
26 +
#[inline]
27 +
#[target_feature(enable = "crc,aes")]
28 +
pub(crate) unsafe fn crc32_iscsi_v12e_v1(mut crc0: u32, mut buf: *const u8, mut len: usize) -> u32 {
29 +
    // Align to 8-byte boundary
30 +
    while len > 0 && (buf as usize & 7) != 0 {
31 +
        crc0 = __crc32cb(crc0, *buf);
32 +
        buf = buf.add(1);
33 +
        len -= 1;
34 +
    }
35 +
36 +
    // Handle 8-byte alignment
37 +
    if (buf as usize & 8) != 0 && len >= 8 {
38 +
        crc0 = __crc32cd(crc0, *(buf as *const u64));
39 +
        buf = buf.add(8);
40 +
        len -= 8;
41 +
    }
42 +
43 +
    if len >= 192 {
44 +
        let end = buf.add(len);
45 +
        let limit = buf.add(len - 192);
46 +
47 +
        // First vector chunk
48 +
        let mut x0 = vld1q_u64(buf as *const u64);
49 +
        let mut x1 = vld1q_u64(buf.add(16) as *const u64);
50 +
        let mut x2 = vld1q_u64(buf.add(32) as *const u64);
51 +
        let mut x3 = vld1q_u64(buf.add(48) as *const u64);
52 +
        let mut x4 = vld1q_u64(buf.add(64) as *const u64);
53 +
        let mut x5 = vld1q_u64(buf.add(80) as *const u64);
54 +
        let mut x6 = vld1q_u64(buf.add(96) as *const u64);
55 +
        let mut x7 = vld1q_u64(buf.add(112) as *const u64);
56 +
        let mut x8 = vld1q_u64(buf.add(128) as *const u64);
57 +
        let mut x9 = vld1q_u64(buf.add(144) as *const u64);
58 +
        let mut x10 = vld1q_u64(buf.add(160) as *const u64);
59 +
        let mut x11 = vld1q_u64(buf.add(176) as *const u64);
60 +
61 +
        let k_vals: [u64; 2] = [0xa87ab8a8, 0xab7aff2a];
62 +
        let mut k = vld1q_u64(k_vals.as_ptr());
63 +
64 +
        // Create CRC vector and XOR with first vector
65 +
        let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0);
66 +
        x0 = veorq_u64(crc_vec, x0);
67 +
        buf = buf.add(192);
68 +
69 +
        // Main loop
70 +
        while buf <= limit {
71 +
            let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64));
72 +
            x0 = clmul_hi_and_xor(x0, k, y0);
73 +
            let y1 = clmul_lo_and_xor(x1, k, vld1q_u64(buf.add(16) as *const u64));
74 +
            x1 = clmul_hi_and_xor(x1, k, y1);
75 +
            let y2 = clmul_lo_and_xor(x2, k, vld1q_u64(buf.add(32) as *const u64));
76 +
            x2 = clmul_hi_and_xor(x2, k, y2);
77 +
            let y3 = clmul_lo_and_xor(x3, k, vld1q_u64(buf.add(48) as *const u64));
78 +
            x3 = clmul_hi_and_xor(x3, k, y3);
79 +
            let y4 = clmul_lo_and_xor(x4, k, vld1q_u64(buf.add(64) as *const u64));
80 +
            x4 = clmul_hi_and_xor(x4, k, y4);
81 +
            let y5 = clmul_lo_and_xor(x5, k, vld1q_u64(buf.add(80) as *const u64));
82 +
            x5 = clmul_hi_and_xor(x5, k, y5);
83 +
            let y6 = clmul_lo_and_xor(x6, k, vld1q_u64(buf.add(96) as *const u64));
84 +
            x6 = clmul_hi_and_xor(x6, k, y6);
85 +
            let y7 = clmul_lo_and_xor(x7, k, vld1q_u64(buf.add(112) as *const u64));
86 +
            x7 = clmul_hi_and_xor(x7, k, y7);
87 +
            let y8 = clmul_lo_and_xor(x8, k, vld1q_u64(buf.add(128) as *const u64));
88 +
            x8 = clmul_hi_and_xor(x8, k, y8);
89 +
            let y9 = clmul_lo_and_xor(x9, k, vld1q_u64(buf.add(144) as *const u64));
90 +
            x9 = clmul_hi_and_xor(x9, k, y9);
91 +
            let y10 = clmul_lo_and_xor(x10, k, vld1q_u64(buf.add(160) as *const u64));
92 +
            x10 = clmul_hi_and_xor(x10, k, y10);
93 +
            let y11 = clmul_lo_and_xor(x11, k, vld1q_u64(buf.add(176) as *const u64));
94 +
            x11 = clmul_hi_and_xor(x11, k, y11);
95 +
            buf = buf.add(192);
96 +
        }
97 +
98 +
        // Reduce x0 ... x11 to just x0
99 +
        let k_vals: [u64; 2] = [0xf20c0dfe, 0x493c7d27];
100 +
        k = vld1q_u64(k_vals.as_ptr());
101 +
102 +
        let y0 = clmul_lo_and_xor(x0, k, x1);
103 +
        x0 = clmul_hi_and_xor(x0, k, y0);
104 +
        let y2 = clmul_lo_and_xor(x2, k, x3);
105 +
        x2 = clmul_hi_and_xor(x2, k, y2);
106 +
        let y4 = clmul_lo_and_xor(x4, k, x5);
107 +
        x4 = clmul_hi_and_xor(x4, k, y4);
108 +
        let y6 = clmul_lo_and_xor(x6, k, x7);
109 +
        x6 = clmul_hi_and_xor(x6, k, y6);
110 +
        let y8 = clmul_lo_and_xor(x8, k, x9);
111 +
        x8 = clmul_hi_and_xor(x8, k, y8);
112 +
        let y10 = clmul_lo_and_xor(x10, k, x11);
113 +
        x10 = clmul_hi_and_xor(x10, k, y10);
114 +
115 +
        let k_vals: [u64; 2] = [0x3da6d0cb, 0xba4fc28e];
116 +
        k = vld1q_u64(k_vals.as_ptr());
117 +
118 +
        let y0 = clmul_lo_and_xor(x0, k, x2);
119 +
        x0 = clmul_hi_and_xor(x0, k, y0);
120 +
        let y4 = clmul_lo_and_xor(x4, k, x6);
121 +
        x4 = clmul_hi_and_xor(x4, k, y4);
122 +
        let y8 = clmul_lo_and_xor(x8, k, x10);
123 +
        x8 = clmul_hi_and_xor(x8, k, y8);
124 +
125 +
        let k_vals: [u64; 2] = [0x740eef02, 0x9e4addf8];
126 +
        k = vld1q_u64(k_vals.as_ptr());
127 +
128 +
        let y0 = clmul_lo_and_xor(x0, k, x4);
129 +
        x0 = clmul_hi_and_xor(x0, k, y0);
130 +
        x4 = x8;
131 +
        let y0 = clmul_lo_and_xor(x0, k, x4);
132 +
        x0 = clmul_hi_and_xor(x0, k, y0);
133 +
134 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
135 +
        crc0 = __crc32cd(0, vgetq_lane_u64(x0, 0));
136 +
        crc0 = __crc32cd(crc0, vgetq_lane_u64(x0, 1));
137 +
        len = end.offset_from(buf) as usize;
138 +
    }
139 +
140 +
    if len >= 16 {
141 +
        // First vector chunk
142 +
        let mut x0 = vld1q_u64(buf as *const u64);
143 +
144 +
        let k_vals: [u64; 2] = [0xf20c0dfe, 0x493c7d27];
145 +
        let k = vld1q_u64(k_vals.as_ptr());
146 +
147 +
        // Create CRC vector and XOR with first vector
148 +
        let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0);
149 +
        x0 = veorq_u64(crc_vec, x0);
150 +
        buf = buf.add(16);
151 +
        len -= 16;
152 +
153 +
        // Main loop
154 +
        while len >= 16 {
155 +
            let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64));
156 +
            x0 = clmul_hi_and_xor(x0, k, y0);
157 +
            buf = buf.add(16);
158 +
            len -= 16;
159 +
        }
160 +
161 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
162 +
        crc0 = __crc32cd(0, vgetq_lane_u64(x0, 0));
163 +
        crc0 = __crc32cd(crc0, vgetq_lane_u64(x0, 1));
164 +
    }
165 +
166 +
    while len >= 8 {
167 +
        crc0 = __crc32cd(crc0, *(buf as *const u64));
168 +
        buf = buf.add(8);
169 +
        len -= 8;
170 +
    }
171 +
172 +
    while len > 0 {
173 +
        crc0 = __crc32cb(crc0, *buf);
174 +
        buf = buf.add(1);
175 +
        len -= 1;
176 +
    }
177 +
178 +
    crc0
179 +
}
added vendor/crc-fast/src/crc32/fusion/aarch64/iscsi/crc_pmull_sha3.rs +266 −0
1 +
//! Provides CRC-32/ISCSI calculations using a fusion of native CLMUL
2 +
//! instructions and native CRC calculation instructions on aarch64.
3 +
//!
4 +
//! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/
5 +
//!
6 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
7 +
//! with the help of Claude.ai.
8 +
//!
9 +
//! Modified as necessary for this Rust implementation.
10 +
//!
11 +
//! MIT licensed.
12 +
13 +
#![cfg(target_arch = "aarch64")]
14 +
15 +
use crate::crc32::fusion::aarch64::{clmul_hi, clmul_lo, clmul_scalar};
16 +
use core::arch::aarch64::{
17 +
    __crc32cb, __crc32cd, __crc32cw, uint64x2_t, veor3q_u64, veorq_u64, vgetq_lane_u64, vld1q_u64,
18 +
    vmov_n_u64, vmull_p8, vreinterpret_p8_u64, vreinterpretq_u64_p16,
19 +
};
20 +
21 +
/// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
22 +
/// with the help of Claude.ai using:
23 +
///
24 +
/// ./generate -i neon_eor3 -p crc32c -a v9s3x2e_s3
25 +
///
26 +
/// Modified as necessary for this Rust implementation.
27 +
#[inline]
28 +
#[target_feature(enable = "crc,aes,sha3")]
29 +
pub(crate) unsafe fn crc32_iscsi_eor3_v9s3x2e_s3(
30 +
    mut crc0: u32,
31 +
    mut buf: *const u8,
32 +
    mut len: usize,
33 +
) -> u32 {
34 +
    // Align to 8-byte boundary
35 +
    while len > 0 && (buf as usize & 7) != 0 {
36 +
        crc0 = __crc32cb(crc0, *buf);
37 +
        buf = buf.add(1);
38 +
        len -= 1;
39 +
    }
40 +
41 +
    // Handle 8-byte alignment
42 +
    if (buf as usize & 8) != 0 && len >= 8 {
43 +
        crc0 = __crc32cd(crc0, *(buf as *const u64));
44 +
        buf = buf.add(8);
45 +
        len -= 8;
46 +
    }
47 +
48 +
    if len >= 192 {
49 +
        let end = buf.add(len);
50 +
        let blk = len / 192;
51 +
        let klen = blk * 16;
52 +
        let buf2 = buf.add(klen * 3);
53 +
        let limit = buf.add(klen).sub(32);
54 +
        let mut crc1 = 0u32;
55 +
        let mut crc2 = 0u32;
56 +
57 +
        // First vector chunk
58 +
        let mut x0 = vld1q_u64(buf2 as *const u64);
59 +
        let mut x1 = vld1q_u64(buf2.add(16) as *const u64);
60 +
        let mut x2 = vld1q_u64(buf2.add(32) as *const u64);
61 +
        let mut x3 = vld1q_u64(buf2.add(48) as *const u64);
62 +
        let mut x4 = vld1q_u64(buf2.add(64) as *const u64);
63 +
        let mut x5 = vld1q_u64(buf2.add(80) as *const u64);
64 +
        let mut x6 = vld1q_u64(buf2.add(96) as *const u64);
65 +
        let mut x7 = vld1q_u64(buf2.add(112) as *const u64);
66 +
        let mut x8 = vld1q_u64(buf2.add(128) as *const u64);
67 +
68 +
        let k_vals: [u64; 2] = [0x7e908048, 0xc96cfdc0];
69 +
        let mut k = vld1q_u64(k_vals.as_ptr());
70 +
        let mut buf2 = buf2.add(144);
71 +
72 +
        // Main loop
73 +
        while buf <= limit {
74 +
            let y0 = clmul_lo(x0, k);
75 +
            x0 = clmul_hi(x0, k);
76 +
            let y1 = clmul_lo(x1, k);
77 +
            x1 = clmul_hi(x1, k);
78 +
            let y2 = clmul_lo(x2, k);
79 +
            x2 = clmul_hi(x2, k);
80 +
            let y3 = clmul_lo(x3, k);
81 +
            x3 = clmul_hi(x3, k);
82 +
            let y4 = clmul_lo(x4, k);
83 +
            x4 = clmul_hi(x4, k);
84 +
            let y5 = clmul_lo(x5, k);
85 +
            x5 = clmul_hi(x5, k);
86 +
            let y6 = clmul_lo(x6, k);
87 +
            x6 = clmul_hi(x6, k);
88 +
            let y7 = clmul_lo(x7, k);
89 +
            x7 = clmul_hi(x7, k);
90 +
            let y8 = clmul_lo(x8, k);
91 +
            x8 = clmul_hi(x8, k);
92 +
93 +
            x0 = veor3q_u64(x0, y0, vld1q_u64(buf2 as *const u64));
94 +
            x1 = veor3q_u64(x1, y1, vld1q_u64(buf2.add(16) as *const u64));
95 +
            x2 = veor3q_u64(x2, y2, vld1q_u64(buf2.add(32) as *const u64));
96 +
            x3 = veor3q_u64(x3, y3, vld1q_u64(buf2.add(48) as *const u64));
97 +
            x4 = veor3q_u64(x4, y4, vld1q_u64(buf2.add(64) as *const u64));
98 +
            x5 = veor3q_u64(x5, y5, vld1q_u64(buf2.add(80) as *const u64));
99 +
            x6 = veor3q_u64(x6, y6, vld1q_u64(buf2.add(96) as *const u64));
100 +
            x7 = veor3q_u64(x7, y7, vld1q_u64(buf2.add(112) as *const u64));
101 +
            x8 = veor3q_u64(x8, y8, vld1q_u64(buf2.add(128) as *const u64));
102 +
103 +
            crc0 = __crc32cd(crc0, *(buf as *const u64));
104 +
            crc1 = __crc32cd(crc1, *(buf.add(klen) as *const u64));
105 +
            crc2 = __crc32cd(crc2, *(buf.add(klen * 2) as *const u64));
106 +
            crc0 = __crc32cd(crc0, *(buf.add(8) as *const u64));
107 +
            crc1 = __crc32cd(crc1, *(buf.add(klen + 8) as *const u64));
108 +
            crc2 = __crc32cd(crc2, *(buf.add(klen * 2 + 8) as *const u64));
109 +
110 +
            buf = buf.add(16);
111 +
            buf2 = buf2.add(144);
112 +
        }
113 +
114 +
        // Reduce x0 ... x8 to just x0
115 +
        let k_vals: [u64; 2] = [0xf20c0dfe, 0x493c7d27];
116 +
        k = vld1q_u64(k_vals.as_ptr());
117 +
118 +
        let y0 = clmul_lo(x0, k);
119 +
        x0 = clmul_hi(x0, k);
120 +
        x0 = veor3q_u64(x0, y0, x1);
121 +
        x1 = x2;
122 +
        x2 = x3;
123 +
        x3 = x4;
124 +
        x4 = x5;
125 +
        x5 = x6;
126 +
        x6 = x7;
127 +
        x7 = x8;
128 +
129 +
        let y0 = clmul_lo(x0, k);
130 +
        x0 = clmul_hi(x0, k);
131 +
        let y2 = clmul_lo(x2, k);
132 +
        x2 = clmul_hi(x2, k);
133 +
        let y4 = clmul_lo(x4, k);
134 +
        x4 = clmul_hi(x4, k);
135 +
        let y6 = clmul_lo(x6, k);
136 +
        x6 = clmul_hi(x6, k);
137 +
138 +
        x0 = veor3q_u64(x0, y0, x1);
139 +
        x2 = veor3q_u64(x2, y2, x3);
140 +
        x4 = veor3q_u64(x4, y4, x5);
141 +
        x6 = veor3q_u64(x6, y6, x7);
142 +
143 +
        let k_vals: [u64; 2] = [0x3da6d0cb, 0xba4fc28e];
144 +
        k = vld1q_u64(k_vals.as_ptr());
145 +
146 +
        let y0 = clmul_lo(x0, k);
147 +
        x0 = clmul_hi(x0, k);
148 +
        let y4 = clmul_lo(x4, k);
149 +
        x4 = clmul_hi(x4, k);
150 +
151 +
        x0 = veor3q_u64(x0, y0, x2);
152 +
        x4 = veor3q_u64(x4, y4, x6);
153 +
154 +
        let k_vals: [u64; 2] = [0x740eef02, 0x9e4addf8];
155 +
        k = vld1q_u64(k_vals.as_ptr());
156 +
157 +
        let y0 = clmul_lo(x0, k);
158 +
        x0 = clmul_hi(x0, k);
159 +
        x0 = veor3q_u64(x0, y0, x4);
160 +
161 +
        // Final scalar chunk
162 +
        crc0 = __crc32cd(crc0, *(buf as *const u64));
163 +
        crc1 = __crc32cd(crc1, *(buf.add(klen) as *const u64));
164 +
        crc2 = __crc32cd(crc2, *(buf.add(klen * 2) as *const u64));
165 +
        crc0 = __crc32cd(crc0, *(buf.add(8) as *const u64));
166 +
        crc1 = __crc32cd(crc1, *(buf.add(klen + 8) as *const u64));
167 +
        crc2 = __crc32cd(crc2, *(buf.add(klen * 2 + 8) as *const u64));
168 +
169 +
        let vc0 = crc_shift_iscsi(crc0, klen * 2 + blk * 144);
170 +
        let vc1 = crc_shift_iscsi(crc1, klen + blk * 144);
171 +
        let vc2 = crc_shift_iscsi(crc2, blk * 144);
172 +
        let vc = vgetq_lane_u64(veor3q_u64(vc0, vc1, vc2), 0);
173 +
174 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
175 +
        crc0 = __crc32cd(0, vgetq_lane_u64(x0, 0));
176 +
        crc0 = __crc32cd(crc0, vc ^ vgetq_lane_u64(x0, 1));
177 +
178 +
        buf = buf2;
179 +
        len = end.offset_from(buf) as usize;
180 +
    }
181 +
182 +
    if len >= 32 {
183 +
        let klen = ((len - 8) / 24) * 8;
184 +
        let mut crc1 = 0u32;
185 +
        let mut crc2 = 0u32;
186 +
187 +
        // Main loop
188 +
        loop {
189 +
            crc0 = __crc32cd(crc0, *(buf as *const u64));
190 +
            crc1 = __crc32cd(crc1, *(buf.add(klen) as *const u64));
191 +
            crc2 = __crc32cd(crc2, *(buf.add(klen * 2) as *const u64));
192 +
            buf = buf.add(8);
193 +
            len -= 24;
194 +
            if len < 32 {
195 +
                break;
196 +
            }
197 +
        }
198 +
199 +
        let vc0 = crc_shift_iscsi(crc0, klen * 2 + 8);
200 +
        let vc1 = crc_shift_iscsi(crc1, klen + 8);
201 +
        let vc = vgetq_lane_u64(veorq_u64(vc0, vc1), 0);
202 +
203 +
        // Final 8 bytes
204 +
        buf = buf.add(klen * 2);
205 +
        crc0 = crc2;
206 +
        crc0 = __crc32cd(crc0, *(buf as *const u64) ^ vc);
207 +
        buf = buf.add(8);
208 +
        len -= 8;
209 +
    }
210 +
211 +
    while len >= 8 {
212 +
        crc0 = __crc32cd(crc0, *(buf as *const u64));
213 +
        buf = buf.add(8);
214 +
        len -= 8;
215 +
    }
216 +
217 +
    while len > 0 {
218 +
        crc0 = __crc32cb(crc0, *buf);
219 +
        buf = buf.add(1);
220 +
        len -= 1;
221 +
    }
222 +
223 +
    crc0
224 +
}
225 +
226 +
#[inline]
227 +
#[target_feature(enable = "aes")]
228 +
unsafe fn crc_shift_iscsi(crc: u32, nbytes: usize) -> uint64x2_t {
229 +
    clmul_scalar(crc, xnmodp_crc32_iscsi((nbytes * 8 - 33) as u64))
230 +
}
231 +
232 +
// x^n mod P, in log(n) time
233 +
#[inline]
234 +
#[target_feature(enable = "crc,aes")]
235 +
unsafe fn xnmodp_crc32_iscsi(mut n: u64) -> u32 {
236 +
    let mut stack = !1u64;
237 +
    let mut acc: u32;
238 +
    let mut low: u32;
239 +
240 +
    while n > 191 {
241 +
        stack = (stack << 1) + (n & 1);
242 +
        n = (n >> 1) - 16;
243 +
    }
244 +
    stack = !stack;
245 +
    acc = 0x80000000u32 >> (n & 31);
246 +
    n >>= 5;
247 +
248 +
    while n > 0 {
249 +
        // ARM CRC32 instruction
250 +
        acc = __crc32cw(acc, 0);
251 +
        n -= 1;
252 +
    }
253 +
254 +
    while {
255 +
        low = (stack & 1) as u32;
256 +
        stack >>= 1;
257 +
        stack != 0
258 +
    } {
259 +
        // Convert to polynomial type and square it
260 +
        let x = vreinterpret_p8_u64(vmov_n_u64(acc as u64));
261 +
        let squared = vmull_p8(x, x);
262 +
        let y = vgetq_lane_u64(vreinterpretq_u64_p16(squared), 0);
263 +
        acc = __crc32cd(0, y << low);
264 +
    }
265 +
    acc
266 +
}
added vendor/crc-fast/src/crc32/fusion/aarch64/iscsi/mod.rs +9 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides aarch64-specific implementations of CRC-32/ISCSI calculations using
4 +
//! fusion techniques.
5 +
6 +
#![cfg(target_arch = "aarch64")]
7 +
8 +
pub(crate) mod crc_pmull;
9 +
pub(crate) mod crc_pmull_sha3;
added vendor/crc-fast/src/crc32/fusion/aarch64/iso_hdlc/crc_pmull.rs +184 −0
1 +
//! Provides CRC-32/ISO-HDLC calculations using a fusion of native CLMUL
2 +
//! instructions and native CRC calculation instructions on aarch64.
3 +
//!
4 +
//! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/
5 +
//!
6 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
7 +
//! with the help of Claude.ai.
8 +
//!
9 +
//! Modified as necessary for this Rust implementation.
10 +
//!
11 +
//! MIT licensed.
12 +
13 +
#![cfg(target_arch = "aarch64")]
14 +
15 +
use crate::crc32::fusion::aarch64::{clmul_hi_and_xor, clmul_lo_and_xor};
16 +
use core::arch::aarch64::{
17 +
    __crc32b, __crc32d, veorq_u64, vgetq_lane_u64, vld1q_u64, vmovq_n_u64, vsetq_lane_u64,
18 +
};
19 +
20 +
/// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
21 +
/// with the help of Claude.ai using:
22 +
///
23 +
/// ./generate -i neon -p crc32 -a v12e_v1
24 +
///
25 +
/// Modified as necessary for this Rust implementation.
26 +
#[inline]
27 +
#[target_feature(enable = "crc,aes")]
28 +
pub(crate) unsafe fn crc32_iso_hdlc_v12e_v1(
29 +
    mut crc0: u32,
30 +
    mut buf: *const u8,
31 +
    mut len: usize,
32 +
) -> u32 {
33 +
    // Align to 8-byte boundary
34 +
    while len > 0 && (buf as usize & 7) != 0 {
35 +
        crc0 = __crc32b(crc0, *buf);
36 +
        buf = buf.add(1);
37 +
        len -= 1;
38 +
    }
39 +
40 +
    // Handle 8-byte alignment
41 +
    if (buf as usize & 8) != 0 && len >= 8 {
42 +
        crc0 = __crc32d(crc0, *(buf as *const u64));
43 +
        buf = buf.add(8);
44 +
        len -= 8;
45 +
    }
46 +
47 +
    if len >= 192 {
48 +
        let end = buf.add(len);
49 +
        let limit = buf.add(len - 192);
50 +
51 +
        // First vector chunk
52 +
        let mut x0 = vld1q_u64(buf as *const u64);
53 +
        let mut x1 = vld1q_u64(buf.add(16) as *const u64);
54 +
        let mut x2 = vld1q_u64(buf.add(32) as *const u64);
55 +
        let mut x3 = vld1q_u64(buf.add(48) as *const u64);
56 +
        let mut x4 = vld1q_u64(buf.add(64) as *const u64);
57 +
        let mut x5 = vld1q_u64(buf.add(80) as *const u64);
58 +
        let mut x6 = vld1q_u64(buf.add(96) as *const u64);
59 +
        let mut x7 = vld1q_u64(buf.add(112) as *const u64);
60 +
        let mut x8 = vld1q_u64(buf.add(128) as *const u64);
61 +
        let mut x9 = vld1q_u64(buf.add(144) as *const u64);
62 +
        let mut x10 = vld1q_u64(buf.add(160) as *const u64);
63 +
        let mut x11 = vld1q_u64(buf.add(176) as *const u64);
64 +
65 +
        // ISO-HDLC specific constants for small implementation
66 +
        let k_vals: [u64; 2] = [0x596c8d81, 0xf5e48c85];
67 +
        let mut k = vld1q_u64(k_vals.as_ptr());
68 +
69 +
        // Create CRC vector and XOR with first vector
70 +
        let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0);
71 +
        x0 = veorq_u64(crc_vec, x0);
72 +
        buf = buf.add(192);
73 +
74 +
        // Main loop
75 +
        while buf <= limit {
76 +
            let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64));
77 +
            x0 = clmul_hi_and_xor(x0, k, y0);
78 +
            let y1 = clmul_lo_and_xor(x1, k, vld1q_u64(buf.add(16) as *const u64));
79 +
            x1 = clmul_hi_and_xor(x1, k, y1);
80 +
            let y2 = clmul_lo_and_xor(x2, k, vld1q_u64(buf.add(32) as *const u64));
81 +
            x2 = clmul_hi_and_xor(x2, k, y2);
82 +
            let y3 = clmul_lo_and_xor(x3, k, vld1q_u64(buf.add(48) as *const u64));
83 +
            x3 = clmul_hi_and_xor(x3, k, y3);
84 +
            let y4 = clmul_lo_and_xor(x4, k, vld1q_u64(buf.add(64) as *const u64));
85 +
            x4 = clmul_hi_and_xor(x4, k, y4);
86 +
            let y5 = clmul_lo_and_xor(x5, k, vld1q_u64(buf.add(80) as *const u64));
87 +
            x5 = clmul_hi_and_xor(x5, k, y5);
88 +
            let y6 = clmul_lo_and_xor(x6, k, vld1q_u64(buf.add(96) as *const u64));
89 +
            x6 = clmul_hi_and_xor(x6, k, y6);
90 +
            let y7 = clmul_lo_and_xor(x7, k, vld1q_u64(buf.add(112) as *const u64));
91 +
            x7 = clmul_hi_and_xor(x7, k, y7);
92 +
            let y8 = clmul_lo_and_xor(x8, k, vld1q_u64(buf.add(128) as *const u64));
93 +
            x8 = clmul_hi_and_xor(x8, k, y8);
94 +
            let y9 = clmul_lo_and_xor(x9, k, vld1q_u64(buf.add(144) as *const u64));
95 +
            x9 = clmul_hi_and_xor(x9, k, y9);
96 +
            let y10 = clmul_lo_and_xor(x10, k, vld1q_u64(buf.add(160) as *const u64));
97 +
            x10 = clmul_hi_and_xor(x10, k, y10);
98 +
            let y11 = clmul_lo_and_xor(x11, k, vld1q_u64(buf.add(176) as *const u64));
99 +
            x11 = clmul_hi_and_xor(x11, k, y11);
100 +
            buf = buf.add(192);
101 +
        }
102 +
103 +
        // Reduce x0 ... x11 to just x0
104 +
        let k_vals: [u64; 2] = [0xae689191, 0xccaa009e];
105 +
        k = vld1q_u64(k_vals.as_ptr());
106 +
107 +
        let y0 = clmul_lo_and_xor(x0, k, x1);
108 +
        x0 = clmul_hi_and_xor(x0, k, y0);
109 +
        let y2 = clmul_lo_and_xor(x2, k, x3);
110 +
        x2 = clmul_hi_and_xor(x2, k, y2);
111 +
        let y4 = clmul_lo_and_xor(x4, k, x5);
112 +
        x4 = clmul_hi_and_xor(x4, k, y4);
113 +
        let y6 = clmul_lo_and_xor(x6, k, x7);
114 +
        x6 = clmul_hi_and_xor(x6, k, y6);
115 +
        let y8 = clmul_lo_and_xor(x8, k, x9);
116 +
        x8 = clmul_hi_and_xor(x8, k, y8);
117 +
        let y10 = clmul_lo_and_xor(x10, k, x11);
118 +
        x10 = clmul_hi_and_xor(x10, k, y10);
119 +
120 +
        let k_vals: [u64; 2] = [0xf1da05aa, 0x81256527];
121 +
        k = vld1q_u64(k_vals.as_ptr());
122 +
123 +
        let y0 = clmul_lo_and_xor(x0, k, x2);
124 +
        x0 = clmul_hi_and_xor(x0, k, y0);
125 +
        let y4 = clmul_lo_and_xor(x4, k, x6);
126 +
        x4 = clmul_hi_and_xor(x4, k, y4);
127 +
        let y8 = clmul_lo_and_xor(x8, k, x10);
128 +
        x8 = clmul_hi_and_xor(x8, k, y8);
129 +
130 +
        let k_vals: [u64; 2] = [0x8f352d95, 0x1d9513d7];
131 +
        k = vld1q_u64(k_vals.as_ptr());
132 +
133 +
        let y0 = clmul_lo_and_xor(x0, k, x4);
134 +
        x0 = clmul_hi_and_xor(x0, k, y0);
135 +
        x4 = x8;
136 +
        let y0 = clmul_lo_and_xor(x0, k, x4);
137 +
        x0 = clmul_hi_and_xor(x0, k, y0);
138 +
139 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
140 +
        crc0 = __crc32d(0, vgetq_lane_u64(x0, 0));
141 +
        crc0 = __crc32d(crc0, vgetq_lane_u64(x0, 1));
142 +
        len = end.offset_from(buf) as usize;
143 +
    }
144 +
145 +
    if len >= 16 {
146 +
        // First vector chunk
147 +
        let mut x0 = vld1q_u64(buf as *const u64);
148 +
149 +
        let k_vals: [u64; 2] = [0xae689191, 0xccaa009e];
150 +
        let k = vld1q_u64(k_vals.as_ptr());
151 +
152 +
        // Create CRC vector and XOR with first vector
153 +
        let crc_vec = vsetq_lane_u64(crc0 as u64, vmovq_n_u64(0), 0);
154 +
        x0 = veorq_u64(crc_vec, x0);
155 +
        buf = buf.add(16);
156 +
        len -= 16;
157 +
158 +
        // Main loop
159 +
        while len >= 16 {
160 +
            let y0 = clmul_lo_and_xor(x0, k, vld1q_u64(buf as *const u64));
161 +
            x0 = clmul_hi_and_xor(x0, k, y0);
162 +
            buf = buf.add(16);
163 +
            len -= 16;
164 +
        }
165 +
166 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
167 +
        crc0 = __crc32d(0, vgetq_lane_u64(x0, 0));
168 +
        crc0 = __crc32d(crc0, vgetq_lane_u64(x0, 1));
169 +
    }
170 +
171 +
    while len >= 8 {
172 +
        crc0 = __crc32d(crc0, *(buf as *const u64));
173 +
        buf = buf.add(8);
174 +
        len -= 8;
175 +
    }
176 +
177 +
    while len > 0 {
178 +
        crc0 = __crc32b(crc0, *buf);
179 +
        buf = buf.add(1);
180 +
        len -= 1;
181 +
    }
182 +
183 +
    crc0
184 +
}
added vendor/crc-fast/src/crc32/fusion/aarch64/iso_hdlc/crc_pmull_sha3.rs +267 −0
1 +
//! Provides CRC-32/ISO-HDLC calculations using a fusion of native CLMUL
2 +
//! instructions and native CRC calculation instructions on aarch64.
3 +
//!
4 +
//! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/
5 +
//!
6 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
7 +
//! with the help of Claude.ai.
8 +
//!
9 +
//! Modified as necessary for this Rust implementation.
10 +
//!
11 +
//! MIT licensed.
12 +
13 +
#![cfg(target_arch = "aarch64")]
14 +
15 +
use crate::crc32::fusion::aarch64::{clmul_hi, clmul_lo, clmul_scalar};
16 +
use core::arch::aarch64::{
17 +
    __crc32b, __crc32d, __crc32w, uint64x2_t, veor3q_u64, veorq_u64, vgetq_lane_u64, vld1q_u64,
18 +
    vmov_n_u64, vmull_p8, vreinterpret_p8_u64, vreinterpretq_u64_p16,
19 +
};
20 +
21 +
/// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
22 +
/// with the help of Claude.ai using:
23 +
///
24 +
/// ./generate -i neon_eor3 -p crc32 -a v9s3x2e_s3
25 +
///
26 +
/// Modified as necessary for this Rust implementation.
27 +
#[inline]
28 +
#[target_feature(enable = "crc,aes,sha3")]
29 +
pub(crate) unsafe fn crc32_iso_hdlc_eor3_v9s3x2e_s3(
30 +
    mut crc0: u32,
31 +
    mut buf: *const u8,
32 +
    mut len: usize,
33 +
) -> u32 {
34 +
    // Align to 8-byte boundary
35 +
    while len > 0 && (buf as usize & 7) != 0 {
36 +
        crc0 = __crc32b(crc0, *buf);
37 +
        buf = buf.add(1);
38 +
        len -= 1;
39 +
    }
40 +
41 +
    // Handle 8-byte alignment
42 +
    if (buf as usize & 8) != 0 && len >= 8 {
43 +
        crc0 = __crc32d(crc0, *(buf as *const u64));
44 +
        buf = buf.add(8);
45 +
        len -= 8;
46 +
    }
47 +
48 +
    if len >= 192 {
49 +
        let end = buf.add(len);
50 +
        let blk = len / 192;
51 +
        let klen = blk * 16;
52 +
        let buf2 = buf.add(klen * 3);
53 +
        let limit = buf.add(klen).sub(32);
54 +
        let mut crc1 = 0u32;
55 +
        let mut crc2 = 0u32;
56 +
57 +
        // First vector chunk
58 +
        let mut x0 = vld1q_u64(buf2 as *const u64);
59 +
        let mut x1 = vld1q_u64(buf2.add(16) as *const u64);
60 +
        let mut x2 = vld1q_u64(buf2.add(32) as *const u64);
61 +
        let mut x3 = vld1q_u64(buf2.add(48) as *const u64);
62 +
        let mut x4 = vld1q_u64(buf2.add(64) as *const u64);
63 +
        let mut x5 = vld1q_u64(buf2.add(80) as *const u64);
64 +
        let mut x6 = vld1q_u64(buf2.add(96) as *const u64);
65 +
        let mut x7 = vld1q_u64(buf2.add(112) as *const u64);
66 +
        let mut x8 = vld1q_u64(buf2.add(128) as *const u64);
67 +
68 +
        // ISO-HDLC specific constants
69 +
        let k_vals: [u64; 2] = [0x26b70c3d, 0x3f41287a];
70 +
        let mut k = vld1q_u64(k_vals.as_ptr());
71 +
        let mut buf2 = buf2.add(144);
72 +
73 +
        // Main loop
74 +
        while buf <= limit {
75 +
            let y0 = clmul_lo(x0, k);
76 +
            x0 = clmul_hi(x0, k);
77 +
            let y1 = clmul_lo(x1, k);
78 +
            x1 = clmul_hi(x1, k);
79 +
            let y2 = clmul_lo(x2, k);
80 +
            x2 = clmul_hi(x2, k);
81 +
            let y3 = clmul_lo(x3, k);
82 +
            x3 = clmul_hi(x3, k);
83 +
            let y4 = clmul_lo(x4, k);
84 +
            x4 = clmul_hi(x4, k);
85 +
            let y5 = clmul_lo(x5, k);
86 +
            x5 = clmul_hi(x5, k);
87 +
            let y6 = clmul_lo(x6, k);
88 +
            x6 = clmul_hi(x6, k);
89 +
            let y7 = clmul_lo(x7, k);
90 +
            x7 = clmul_hi(x7, k);
91 +
            let y8 = clmul_lo(x8, k);
92 +
            x8 = clmul_hi(x8, k);
93 +
94 +
            x0 = veor3q_u64(x0, y0, vld1q_u64(buf2 as *const u64));
95 +
            x1 = veor3q_u64(x1, y1, vld1q_u64(buf2.add(16) as *const u64));
96 +
            x2 = veor3q_u64(x2, y2, vld1q_u64(buf2.add(32) as *const u64));
97 +
            x3 = veor3q_u64(x3, y3, vld1q_u64(buf2.add(48) as *const u64));
98 +
            x4 = veor3q_u64(x4, y4, vld1q_u64(buf2.add(64) as *const u64));
99 +
            x5 = veor3q_u64(x5, y5, vld1q_u64(buf2.add(80) as *const u64));
100 +
            x6 = veor3q_u64(x6, y6, vld1q_u64(buf2.add(96) as *const u64));
101 +
            x7 = veor3q_u64(x7, y7, vld1q_u64(buf2.add(112) as *const u64));
102 +
            x8 = veor3q_u64(x8, y8, vld1q_u64(buf2.add(128) as *const u64));
103 +
104 +
            crc0 = __crc32d(crc0, *(buf as *const u64));
105 +
            crc1 = __crc32d(crc1, *(buf.add(klen) as *const u64));
106 +
            crc2 = __crc32d(crc2, *(buf.add(klen * 2) as *const u64));
107 +
            crc0 = __crc32d(crc0, *(buf.add(8) as *const u64));
108 +
            crc1 = __crc32d(crc1, *(buf.add(klen + 8) as *const u64));
109 +
            crc2 = __crc32d(crc2, *(buf.add(klen * 2 + 8) as *const u64));
110 +
111 +
            buf = buf.add(16);
112 +
            buf2 = buf2.add(144);
113 +
        }
114 +
115 +
        // Reduce x0 ... x8 to just x0
116 +
        let k_vals: [u64; 2] = [0xae689191, 0xccaa009e];
117 +
        k = vld1q_u64(k_vals.as_ptr());
118 +
119 +
        let y0 = clmul_lo(x0, k);
120 +
        x0 = clmul_hi(x0, k);
121 +
        x0 = veor3q_u64(x0, y0, x1);
122 +
        x1 = x2;
123 +
        x2 = x3;
124 +
        x3 = x4;
125 +
        x4 = x5;
126 +
        x5 = x6;
127 +
        x6 = x7;
128 +
        x7 = x8;
129 +
130 +
        let y0 = clmul_lo(x0, k);
131 +
        x0 = clmul_hi(x0, k);
132 +
        let y2 = clmul_lo(x2, k);
133 +
        x2 = clmul_hi(x2, k);
134 +
        let y4 = clmul_lo(x4, k);
135 +
        x4 = clmul_hi(x4, k);
136 +
        let y6 = clmul_lo(x6, k);
137 +
        x6 = clmul_hi(x6, k);
138 +
139 +
        x0 = veor3q_u64(x0, y0, x1);
140 +
        x2 = veor3q_u64(x2, y2, x3);
141 +
        x4 = veor3q_u64(x4, y4, x5);
142 +
        x6 = veor3q_u64(x6, y6, x7);
143 +
144 +
        let k_vals: [u64; 2] = [0xf1da05aa, 0x81256527];
145 +
        k = vld1q_u64(k_vals.as_ptr());
146 +
147 +
        let y0 = clmul_lo(x0, k);
148 +
        x0 = clmul_hi(x0, k);
149 +
        let y4 = clmul_lo(x4, k);
150 +
        x4 = clmul_hi(x4, k);
151 +
152 +
        x0 = veor3q_u64(x0, y0, x2);
153 +
        x4 = veor3q_u64(x4, y4, x6);
154 +
155 +
        let k_vals: [u64; 2] = [0x8f352d95, 0x1d9513d7];
156 +
        k = vld1q_u64(k_vals.as_ptr());
157 +
158 +
        let y0 = clmul_lo(x0, k);
159 +
        x0 = clmul_hi(x0, k);
160 +
        x0 = veor3q_u64(x0, y0, x4);
161 +
162 +
        // Final scalar chunk
163 +
        crc0 = __crc32d(crc0, *(buf as *const u64));
164 +
        crc1 = __crc32d(crc1, *(buf.add(klen) as *const u64));
165 +
        crc2 = __crc32d(crc2, *(buf.add(klen * 2) as *const u64));
166 +
        crc0 = __crc32d(crc0, *(buf.add(8) as *const u64));
167 +
        crc1 = __crc32d(crc1, *(buf.add(klen + 8) as *const u64));
168 +
        crc2 = __crc32d(crc2, *(buf.add(klen * 2 + 8) as *const u64));
169 +
170 +
        let vc0 = crc_shift_iso_hdlc(crc0, klen * 2 + blk * 144);
171 +
        let vc1 = crc_shift_iso_hdlc(crc1, klen + blk * 144);
172 +
        let vc2 = crc_shift_iso_hdlc(crc2, blk * 144);
173 +
        let vc = vgetq_lane_u64(veor3q_u64(vc0, vc1, vc2), 0);
174 +
175 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
176 +
        crc0 = __crc32d(0, vgetq_lane_u64(x0, 0));
177 +
        crc0 = __crc32d(crc0, vc ^ vgetq_lane_u64(x0, 1));
178 +
179 +
        buf = buf2;
180 +
        len = end.offset_from(buf) as usize;
181 +
    }
182 +
183 +
    if len >= 32 {
184 +
        let klen = ((len - 8) / 24) * 8;
185 +
        let mut crc1 = 0u32;
186 +
        let mut crc2 = 0u32;
187 +
188 +
        // Main loop
189 +
        loop {
190 +
            crc0 = __crc32d(crc0, *(buf as *const u64));
191 +
            crc1 = __crc32d(crc1, *(buf.add(klen) as *const u64));
192 +
            crc2 = __crc32d(crc2, *(buf.add(klen * 2) as *const u64));
193 +
            buf = buf.add(8);
194 +
            len -= 24;
195 +
            if len < 32 {
196 +
                break;
197 +
            }
198 +
        }
199 +
200 +
        let vc0 = crc_shift_iso_hdlc(crc0, klen * 2 + 8);
201 +
        let vc1 = crc_shift_iso_hdlc(crc1, klen + 8);
202 +
        let vc = vgetq_lane_u64(veorq_u64(vc0, vc1), 0);
203 +
204 +
        // Final 8 bytes
205 +
        buf = buf.add(klen * 2);
206 +
        crc0 = crc2;
207 +
        crc0 = __crc32d(crc0, *(buf as *const u64) ^ vc);
208 +
        buf = buf.add(8);
209 +
        len -= 8;
210 +
    }
211 +
212 +
    while len >= 8 {
213 +
        crc0 = __crc32d(crc0, *(buf as *const u64));
214 +
        buf = buf.add(8);
215 +
        len -= 8;
216 +
    }
217 +
218 +
    while len > 0 {
219 +
        crc0 = __crc32b(crc0, *buf);
220 +
        buf = buf.add(1);
221 +
        len -= 1;
222 +
    }
223 +
224 +
    crc0
225 +
}
226 +
227 +
#[inline]
228 +
#[target_feature(enable = "aes")]
229 +
unsafe fn crc_shift_iso_hdlc(crc: u32, nbytes: usize) -> uint64x2_t {
230 +
    clmul_scalar(crc, xnmodp_iso_hdlc((nbytes * 8 - 33) as u64))
231 +
}
232 +
233 +
// x^n mod P, in log(n) time
234 +
#[inline]
235 +
#[target_feature(enable = "crc,aes")]
236 +
unsafe fn xnmodp_iso_hdlc(mut n: u64) -> u32 {
237 +
    let mut stack = !1u64;
238 +
    let mut acc: u32;
239 +
    let mut low: u32;
240 +
241 +
    while n > 191 {
242 +
        stack = (stack << 1) + (n & 1);
243 +
        n = (n >> 1) - 16;
244 +
    }
245 +
    stack = !stack;
246 +
    acc = 0x80000000u32 >> (n & 31);
247 +
    n >>= 5;
248 +
249 +
    while n > 0 {
250 +
        // ARM CRC32 instruction (ISO-HDLC uses standard CRC32, not CRC32C)
251 +
        acc = __crc32w(acc, 0);
252 +
        n -= 1;
253 +
    }
254 +
255 +
    while {
256 +
        low = (stack & 1) as u32;
257 +
        stack >>= 1;
258 +
        stack != 0
259 +
    } {
260 +
        // Convert to polynomial type and square it
261 +
        let x = vreinterpret_p8_u64(vmov_n_u64(acc as u64));
262 +
        let squared = vmull_p8(x, x);
263 +
        let y = vgetq_lane_u64(vreinterpretq_u64_p16(squared), 0);
264 +
        acc = __crc32d(0, y << low);
265 +
    }
266 +
    acc
267 +
}
added vendor/crc-fast/src/crc32/fusion/aarch64/iso_hdlc/mod.rs +9 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides aarch64-specific implementations of CRC-32/ISO-HDLC calculations using
4 +
//! fusion techniques.
5 +
6 +
#![cfg(target_arch = "aarch64")]
7 +
8 +
pub(crate) mod crc_pmull;
9 +
pub(crate) mod crc_pmull_sha3;
added vendor/crc-fast/src/crc32/fusion/aarch64/mod.rs +374 −0
1 +
//! Provides CRC-32/ISCSI and CRC-32/ISO-HDLC calculations using a fusion of native CLMUL
2 +
//! instructions and native CRC calculation instructions on aarch64.
3 +
//!
4 +
//! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/
5 +
//!
6 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
7 +
//! with the help of Claude.ai.
8 +
//!
9 +
//! Modified as necessary for this Rust implementation.
10 +
//!
11 +
//! MIT licensed.
12 +
13 +
#![cfg(target_arch = "aarch64")]
14 +
15 +
mod iscsi;
16 +
mod iso_hdlc;
17 +
18 +
use core::arch::aarch64::*;
19 +
#[cfg(feature = "std")]
20 +
use std::arch::is_aarch64_feature_detected;
21 +
22 +
use iscsi::crc_pmull::crc32_iscsi_v12e_v1;
23 +
use iscsi::crc_pmull_sha3::crc32_iscsi_eor3_v9s3x2e_s3;
24 +
use iso_hdlc::crc_pmull::crc32_iso_hdlc_v12e_v1;
25 +
use iso_hdlc::crc_pmull_sha3::crc32_iso_hdlc_eor3_v9s3x2e_s3;
26 +
27 +
#[inline(always)]
28 +
pub fn crc32_iscsi(crc: u32, data: &[u8]) -> u32 {
29 +
    let data_len = data.len();
30 +
31 +
    // there's some variance among different aarch64 CPUs (Apple Silicon, AWS Graviton, etc.), but
32 +
    // 127 bytes is the "small" threshold where this is generally faster
33 +
    if data_len < 128 {
34 +
        return unsafe { crc32_iscsi_small_fast(crc, data) };
35 +
    }
36 +
37 +
    #[cfg(feature = "std")]
38 +
    let has_sha3 = is_aarch64_feature_detected!("sha3");
39 +
    #[cfg(not(feature = "std"))]
40 +
    let has_sha3 = cfg!(target_feature = "sha3");
41 +
42 +
    if has_sha3 {
43 +
        unsafe { crc32_iscsi_aes_sha3(crc, data, data_len) }
44 +
    } else {
45 +
        unsafe { crc32_iscsi_aes(crc, data, data_len) }
46 +
    }
47 +
}
48 +
49 +
#[inline(always)]
50 +
pub fn crc32_iso_hdlc(crc: u32, data: &[u8]) -> u32 {
51 +
    let data_len = data.len();
52 +
53 +
    // there's some variance among different aarch64 CPUs (Apple Silicon, AWS Graviton, etc.), but
54 +
    // 127 bytes is the "small" threshold where this is generally faster
55 +
    if data_len < 128 {
56 +
        return unsafe { crc32_iso_hdlc_small_fast(crc, data) };
57 +
    }
58 +
59 +
    #[cfg(feature = "std")]
60 +
    let has_sha3 = is_aarch64_feature_detected!("sha3");
61 +
    #[cfg(not(feature = "std"))]
62 +
    let has_sha3 = cfg!(target_feature = "sha3");
63 +
64 +
    if has_sha3 {
65 +
        unsafe { crc32_iso_hdlc_aes_sha3(crc, data, data_len) }
66 +
    } else {
67 +
        unsafe { crc32_iso_hdlc_aes(crc, data, data_len) }
68 +
    }
69 +
}
70 +
71 +
#[inline]
72 +
#[target_feature(enable = "crc,aes,sha3")]
73 +
unsafe fn crc32_iscsi_aes_sha3(crc: u32, data: &[u8], data_len: usize) -> u32 {
74 +
    unsafe {
75 +
        const LARGE_BUFFER_THRESHOLD: usize = 1024;
76 +
77 +
        // Select implementation based on buffer size
78 +
        if data_len <= LARGE_BUFFER_THRESHOLD {
79 +
            crc32_iscsi_v12e_v1(crc, data.as_ptr(), data_len)
80 +
        } else {
81 +
            crc32_iscsi_eor3_v9s3x2e_s3(crc, data.as_ptr(), data_len)
82 +
        }
83 +
    }
84 +
}
85 +
86 +
#[inline]
87 +
#[target_feature(enable = "crc,aes")]
88 +
unsafe fn crc32_iscsi_aes(crc: u32, data: &[u8], data_len: usize) -> u32 {
89 +
    unsafe { crc32_iscsi_v12e_v1(crc, data.as_ptr(), data_len) }
90 +
}
91 +
92 +
#[inline]
93 +
#[target_feature(enable = "crc,aes,sha3")]
94 +
unsafe fn crc32_iso_hdlc_aes_sha3(crc: u32, data: &[u8], data_len: usize) -> u32 {
95 +
    unsafe {
96 +
        const LARGE_BUFFER_THRESHOLD: usize = 1024;
97 +
98 +
        // Select implementation based on buffer size
99 +
        if data_len <= LARGE_BUFFER_THRESHOLD {
100 +
            crc32_iso_hdlc_v12e_v1(crc, data.as_ptr(), data_len)
101 +
        } else {
102 +
            crc32_iso_hdlc_eor3_v9s3x2e_s3(crc, data.as_ptr(), data_len)
103 +
        }
104 +
    }
105 +
}
106 +
107 +
#[inline]
108 +
#[target_feature(enable = "crc,aes")]
109 +
unsafe fn crc32_iso_hdlc_aes(crc: u32, data: &[u8], data_len: usize) -> u32 {
110 +
    unsafe { crc32_iso_hdlc_v12e_v1(crc, data.as_ptr(), data_len) }
111 +
}
112 +
113 +
#[inline]
114 +
#[target_feature(enable = "aes")]
115 +
unsafe fn clmul_lo(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t {
116 +
    // Polynomial multiply low parts - convert u128 result to uint64x2_t
117 +
    let result = vmull_p64(vgetq_lane_u64(a, 0), vgetq_lane_u64(b, 0));
118 +
    vreinterpretq_u64_p128(result)
119 +
}
120 +
121 +
#[inline]
122 +
#[target_feature(enable = "aes")]
123 +
unsafe fn clmul_hi(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t {
124 +
    // Polynomial multiply high parts - convert u128 result to uint64x2_t
125 +
    let result = vmull_p64(vgetq_lane_u64(a, 1), vgetq_lane_u64(b, 1));
126 +
    vreinterpretq_u64_p128(result)
127 +
}
128 +
129 +
#[inline]
130 +
#[target_feature(enable = "aes")]
131 +
unsafe fn clmul_scalar(a: u32, b: u32) -> uint64x2_t {
132 +
    // Polynomial multiply scalars - convert u128 result to uint64x2_t
133 +
    let result = vmull_p64(a as u64, b as u64);
134 +
    vreinterpretq_u64_p128(result)
135 +
}
136 +
137 +
#[inline]
138 +
#[target_feature(enable = "aes")]
139 +
unsafe fn clmul_lo_and_xor(a: uint64x2_t, b: uint64x2_t, c: uint64x2_t) -> uint64x2_t {
140 +
    veorq_u64(clmul_lo(a, b), c)
141 +
}
142 +
143 +
#[inline]
144 +
#[target_feature(enable = "aes")]
145 +
unsafe fn clmul_hi_and_xor(a: uint64x2_t, b: uint64x2_t, c: uint64x2_t) -> uint64x2_t {
146 +
    veorq_u64(clmul_hi(a, b), c)
147 +
}
148 +
149 +
/// CRC-32/ISCSI calculation for small buffers (< 128 bytes) using unrolled native CRC instructions
150 +
#[inline]
151 +
#[target_feature(enable = "crc")]
152 +
pub unsafe fn crc32_iscsi_small_fast(mut crc: u32, data: &[u8]) -> u32 {
153 +
    let (prefix, aligned, suffix) = data.align_to::<u64>();
154 +
155 +
    // Process unaligned prefix bytes
156 +
    for &byte in prefix {
157 +
        crc = __crc32cb(crc, byte);
158 +
    }
159 +
160 +
    // Process aligned u64s with 8-way unrolling (64 bytes per iteration)
161 +
    let mut chunks = aligned.chunks_exact(8);
162 +
    for chunk in &mut chunks {
163 +
        crc = __crc32cd(crc, chunk[0]);
164 +
        crc = __crc32cd(crc, chunk[1]);
165 +
        crc = __crc32cd(crc, chunk[2]);
166 +
        crc = __crc32cd(crc, chunk[3]);
167 +
        crc = __crc32cd(crc, chunk[4]);
168 +
        crc = __crc32cd(crc, chunk[5]);
169 +
        crc = __crc32cd(crc, chunk[6]);
170 +
        crc = __crc32cd(crc, chunk[7]);
171 +
    }
172 +
173 +
    // Process remaining aligned u64s
174 +
    for &val in chunks.remainder() {
175 +
        crc = __crc32cd(crc, val);
176 +
    }
177 +
178 +
    // Process unaligned suffix bytes
179 +
    for &byte in suffix {
180 +
        crc = __crc32cb(crc, byte);
181 +
    }
182 +
183 +
    crc
184 +
}
185 +
186 +
/// CRC-32/ISO-HDLC calculation for small buffers (< 128 bytes) using unrolled native CRC instructions
187 +
#[inline]
188 +
#[target_feature(enable = "crc")]
189 +
pub unsafe fn crc32_iso_hdlc_small_fast(mut crc: u32, data: &[u8]) -> u32 {
190 +
    let (prefix, aligned, suffix) = data.align_to::<u64>();
191 +
192 +
    // Process unaligned prefix bytes
193 +
    for &byte in prefix {
194 +
        crc = __crc32b(crc, byte);
195 +
    }
196 +
197 +
    // Process aligned u64s with 8-way unrolling (64 bytes per iteration)
198 +
    let mut chunks = aligned.chunks_exact(8);
199 +
    for chunk in &mut chunks {
200 +
        crc = __crc32d(crc, chunk[0]);
201 +
        crc = __crc32d(crc, chunk[1]);
202 +
        crc = __crc32d(crc, chunk[2]);
203 +
        crc = __crc32d(crc, chunk[3]);
204 +
        crc = __crc32d(crc, chunk[4]);
205 +
        crc = __crc32d(crc, chunk[5]);
206 +
        crc = __crc32d(crc, chunk[6]);
207 +
        crc = __crc32d(crc, chunk[7]);
208 +
    }
209 +
210 +
    // Process remaining aligned u64s
211 +
    for &val in chunks.remainder() {
212 +
        crc = __crc32d(crc, val);
213 +
    }
214 +
215 +
    // Process unaligned suffix bytes
216 +
    for &byte in suffix {
217 +
        crc = __crc32b(crc, byte);
218 +
    }
219 +
220 +
    crc
221 +
}
222 +
223 +
#[cfg(test)]
224 +
mod tests {
225 +
    use super::*;
226 +
    use crate::test::consts::TEST_CHECK_STRING;
227 +
    use crc::{Crc, Table};
228 +
    use rand::{rng, Rng};
229 +
230 +
    const RUST_CRC32_ISO_HDLC: Crc<u32, Table<16>> =
231 +
        Crc::<u32, Table<16>>::new(&crc::CRC_32_ISO_HDLC);
232 +
233 +
    const RUST_CRC32_ISCSI: Crc<u32, Table<16>> = Crc::<u32, Table<16>>::new(&crc::CRC_32_ISCSI);
234 +
235 +
    #[test]
236 +
    fn test_crc32_iso_hdlc_check() {
237 +
        assert_eq!(
238 +
            crc32_iso_hdlc(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff,
239 +
            0xcbf43926
240 +
        );
241 +
    }
242 +
243 +
    #[test]
244 +
    fn test_crc32_iso_hdlc_small_all_lengths() {
245 +
        for len in 1..=255 {
246 +
            crc32_iso_hdlc_random(len)
247 +
        }
248 +
    }
249 +
250 +
    #[test]
251 +
    fn test_crc32_iso_hdlc_medium_lengths() {
252 +
        // Test each length from 256 to 1024, which should fold and include handling remainders
253 +
        for len in 256..=1024 {
254 +
            crc32_iso_hdlc_random(len)
255 +
        }
256 +
    }
257 +
258 +
    #[test]
259 +
    fn test_crc32_iso_hdlc_large_lengths() {
260 +
        // Test 1 MiB just before, at, and just after the folding boundaries
261 +
        for len in 1048575..1048577 {
262 +
            crc32_iso_hdlc_random(len)
263 +
        }
264 +
    }
265 +
266 +
    #[test]
267 +
    fn test_crc32_iscsi_check() {
268 +
        assert_eq!(
269 +
            crc32_iscsi(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff,
270 +
            0xe3069283
271 +
        );
272 +
    }
273 +
274 +
    #[test]
275 +
    fn test_crc32_iscsi_small_all_lengths() {
276 +
        for len in 1..=255 {
277 +
            crc32_iscsi_random(len);
278 +
        }
279 +
    }
280 +
281 +
    #[test]
282 +
    fn test_crc32_iscsi_medium_lengths() {
283 +
        // Test each length from 256 to 1024, which should fold and include handling remainders
284 +
        for len in 256..=1024 {
285 +
            crc32_iscsi_random(len);
286 +
        }
287 +
    }
288 +
289 +
    #[test]
290 +
    fn test_crc32_iscsi_large_lengths() {
291 +
        // Test 1 MiB just before, at, and just after the folding boundaries
292 +
        for len in 1048575..1048577 {
293 +
            crc32_iscsi_random(len);
294 +
        }
295 +
    }
296 +
297 +
    #[cfg(target_feature = "sha3")]
298 +
    fn crc32_iso_hdlc_random(len: usize) {
299 +
        let mut data = vec![0u8; len];
300 +
        rng().fill(&mut data[..]);
301 +
302 +
        let checksum = RUST_CRC32_ISO_HDLC.checksum(&data);
303 +
304 +
        assert_eq!(crc32_iso_hdlc(0xffffffff, &data) ^ 0xffffffff, checksum);
305 +
306 +
        unsafe {
307 +
            assert_eq!(
308 +
                crc32_iso_hdlc_eor3_v9s3x2e_s3(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff,
309 +
                checksum
310 +
            );
311 +
312 +
            assert_eq!(
313 +
                crc32_iso_hdlc_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff,
314 +
                checksum
315 +
            );
316 +
        }
317 +
    }
318 +
319 +
    #[cfg(not(target_feature = "sha3"))]
320 +
    fn crc32_iso_hdlc_random(len: usize) {
321 +
        let mut data = vec![0u8; len];
322 +
        rng().fill(&mut data[..]);
323 +
324 +
        let checksum = RUST_CRC32_ISO_HDLC.checksum(&data);
325 +
326 +
        assert_eq!(crc32_iso_hdlc(0xffffffff, &data) ^ 0xffffffff, checksum);
327 +
328 +
        unsafe {
329 +
            assert_eq!(
330 +
                crc32_iso_hdlc_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff,
331 +
                checksum
332 +
            );
333 +
        }
334 +
    }
335 +
336 +
    #[cfg(target_feature = "sha3")]
337 +
    fn crc32_iscsi_random(len: usize) {
338 +
        let mut data = vec![0u8; len];
339 +
        rng().fill(&mut data[..]);
340 +
341 +
        let checksum = RUST_CRC32_ISCSI.checksum(&data);
342 +
343 +
        assert_eq!(crc32_iscsi(0xffffffff, &data) ^ 0xffffffff, checksum);
344 +
345 +
        unsafe {
346 +
            assert_eq!(
347 +
                crc32_iscsi_eor3_v9s3x2e_s3(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff,
348 +
                checksum
349 +
            );
350 +
351 +
            assert_eq!(
352 +
                crc32_iscsi_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff,
353 +
                checksum
354 +
            );
355 +
        }
356 +
    }
357 +
358 +
    #[cfg(not(target_feature = "sha3"))]
359 +
    fn crc32_iscsi_random(len: usize) {
360 +
        let mut data = vec![0u8; len];
361 +
        rng().fill(&mut data[..]);
362 +
363 +
        let checksum = RUST_CRC32_ISCSI.checksum(&data);
364 +
365 +
        assert_eq!(crc32_iscsi(0xffffffff, &data) ^ 0xffffffff, checksum);
366 +
367 +
        unsafe {
368 +
            assert_eq!(
369 +
                crc32_iscsi_v12e_v1(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff,
370 +
                checksum
371 +
            );
372 +
        }
373 +
    }
374 +
}
added vendor/crc-fast/src/crc32/fusion/mod.rs +33 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides support for calculating CRC-32/ISO-HDLC and CRC-32/ISCSI using
4 +
//! fusion techniques.
5 +
//!
6 +
//! https://www.corsix.org/content/fast-crc32c-4k
7 +
//! https://www.corsix.org/content/alternative-exposition-crc32_4k_pclmulqdq
8 +
//! https://dougallj.wordpress.com/2022/05/22/faster-crc32-on-the-apple-m1/
9 +
//! https://github.com/corsix/fast-crc32/
10 +
11 +
mod aarch64;
12 +
mod x86;
13 +
14 +
/// Only AArch64 has native CRC-32/ISO-HDLC instructions
15 +
#[inline(always)]
16 +
#[cfg(target_arch = "aarch64")]
17 +
pub(crate) fn crc32_iso_hdlc(state: u32, data: &[u8]) -> u32 {
18 +
    aarch64::crc32_iso_hdlc(state, data)
19 +
}
20 +
21 +
/// Both AArch64 and x86 have native CRC-32/ISCSI instructions
22 +
#[inline(always)]
23 +
pub(crate) fn crc32_iscsi(state: u32, data: &[u8]) -> u32 {
24 +
    #[cfg(target_arch = "aarch64")]
25 +
    {
26 +
        aarch64::crc32_iscsi(state, data)
27 +
    }
28 +
29 +
    #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
30 +
    {
31 +
        x86::crc32_iscsi(state, data)
32 +
    }
33 +
}
added vendor/crc-fast/src/crc32/fusion/x86/iscsi/avx512_pclmulqdq.rs +169 −0
1 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
2 +
//! with the help of Claude.ai.
3 +
//!
4 +
//! MIT licensed.
5 +
6 +
#![cfg(target_arch = "x86_64")]
7 +
8 +
/// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
9 +
/// with the help of Claude.ai using:
10 +
///
11 +
/// ./generate -i avx512 -p crc32c -a v4s3x3
12 +
///
13 +
/// Modified as necessary for this Rust implementation.
14 +
///
15 +
/// Uses AVX-512 instructions
16 +
#[inline]
17 +
#[target_feature(enable = "avx512vl,pclmulqdq")]
18 +
pub unsafe fn crc32_iscsi_avx512_v4s3x3(mut crc0: u32, mut buf: *const u8, mut len: usize) -> u32 {
19 +
    use crate::fusion::x86::*;
20 +
21 +
    // Align to 8-byte boundary using hardware CRC32C instructions
22 +
    while len > 0 && (buf as usize & 7) != 0 {
23 +
        crc0 = _mm_crc32_u8(crc0, *buf);
24 +
        buf = buf.add(1);
25 +
        len -= 1;
26 +
    }
27 +
28 +
    // Handle 8-byte alignment
29 +
    if (buf as usize & 8) != 0 && len >= 8 {
30 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32;
31 +
        buf = buf.add(8);
32 +
        len -= 8;
33 +
    }
34 +
35 +
    if len >= 144 {
36 +
        let blk = (len - 8) / 136;
37 +
        let klen = blk * 24;
38 +
        let buf2 = buf;
39 +
        let mut crc1 = 0u32;
40 +
        let mut crc2 = 0u32;
41 +
42 +
        // First vector chunk - load four 128-bit vectors (64 bytes total)
43 +
        let mut x0 = _mm_loadu_si128(buf2 as *const __m128i);
44 +
        let mut x1 = _mm_loadu_si128(buf2.add(16) as *const __m128i);
45 +
        let mut x2 = _mm_loadu_si128(buf2.add(32) as *const __m128i);
46 +
        let mut x3 = _mm_loadu_si128(buf2.add(48) as *const __m128i);
47 +
48 +
        // iSCSI-specific folding constant (different from ISO-HDLC)
49 +
        let mut k = _mm_setr_epi32(0x740eef02u32 as i32, 0, 0x9e4addf8u32 as i32, 0);
50 +
51 +
        // XOR the CRC into the first vector's low 32 bits
52 +
        x0 = _mm_xor_si128(_mm_cvtsi32_si128(crc0 as i32), x0);
53 +
        crc0 = 0;
54 +
55 +
        let mut buf2 = buf2.add(64);
56 +
        len -= 136;
57 +
        buf = buf.add(blk * 64);
58 +
59 +
        // Main loop - process 144 bytes at a time
60 +
        while len >= 144 {
61 +
            let y0 = clmul_lo_sse(x0, k);
62 +
            x0 = clmul_hi_sse(x0, k);
63 +
            let y1 = clmul_lo_sse(x1, k);
64 +
            x1 = clmul_hi_sse(x1, k);
65 +
            let y2 = clmul_lo_sse(x2, k);
66 +
            x2 = clmul_hi_sse(x2, k);
67 +
            let y3 = clmul_lo_sse(x3, k);
68 +
            x3 = clmul_hi_sse(x3, k);
69 +
70 +
            // XOR with next chunk of data using ternary logic (A XOR B XOR C)
71 +
            x0 = _mm_ternarylogic_epi64(x0, y0, _mm_loadu_si128(buf2 as *const __m128i), 0x96);
72 +
            x1 = _mm_ternarylogic_epi64(
73 +
                x1,
74 +
                y1,
75 +
                _mm_loadu_si128(buf2.add(16) as *const __m128i),
76 +
                0x96,
77 +
            );
78 +
            x2 = _mm_ternarylogic_epi64(
79 +
                x2,
80 +
                y2,
81 +
                _mm_loadu_si128(buf2.add(32) as *const __m128i),
82 +
                0x96,
83 +
            );
84 +
            x3 = _mm_ternarylogic_epi64(
85 +
                x3,
86 +
                y3,
87 +
                _mm_loadu_si128(buf2.add(48) as *const __m128i),
88 +
                0x96,
89 +
            );
90 +
91 +
            // Process scalar data in parallel using hardware CRC32C
92 +
            crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32;
93 +
            crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen) as *const u64)) as u32;
94 +
            crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2) as *const u64)) as u32;
95 +
            crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(8) as *const u64)) as u32;
96 +
            crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 8) as *const u64)) as u32;
97 +
            crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 8) as *const u64)) as u32;
98 +
            crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(16) as *const u64)) as u32;
99 +
            crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 16) as *const u64)) as u32;
100 +
            crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 16) as *const u64)) as u32;
101 +
102 +
            buf = buf.add(24);
103 +
            buf2 = buf2.add(64);
104 +
            len -= 136;
105 +
        }
106 +
107 +
        // Reduce x0 ... x3 to just x0 using iSCSI-specific constants
108 +
        k = _mm_setr_epi32(0xf20c0dfeu32 as i32, 0, 0x493c7d27u32 as i32, 0);
109 +
110 +
        let y0 = clmul_lo_sse(x0, k);
111 +
        x0 = clmul_hi_sse(x0, k);
112 +
        let y2 = clmul_lo_sse(x2, k);
113 +
        x2 = clmul_hi_sse(x2, k);
114 +
115 +
        x0 = _mm_ternarylogic_epi64(x0, y0, x1, 0x96);
116 +
        x2 = _mm_ternarylogic_epi64(x2, y2, x3, 0x96);
117 +
118 +
        k = _mm_setr_epi32(0x3da6d0cbu32 as i32, 0, 0xba4fc28eu32 as i32, 0);
119 +
120 +
        let y0 = clmul_lo_sse(x0, k);
121 +
        x0 = clmul_hi_sse(x0, k);
122 +
        x0 = _mm_ternarylogic_epi64(x0, y0, x2, 0x96);
123 +
124 +
        // Final scalar chunk
125 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32;
126 +
        crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen) as *const u64)) as u32;
127 +
        crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2) as *const u64)) as u32;
128 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(8) as *const u64)) as u32;
129 +
        crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 8) as *const u64)) as u32;
130 +
        crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 8) as *const u64)) as u32;
131 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf.add(16) as *const u64)) as u32;
132 +
        crc1 = _mm_crc32_u64(crc1.into(), *(buf.add(klen + 16) as *const u64)) as u32;
133 +
        crc2 = _mm_crc32_u64(crc2.into(), *(buf.add(klen * 2 + 16) as *const u64)) as u32;
134 +
        buf = buf.add(24);
135 +
136 +
        let vc0 = crc_shift_iscsi_sse(crc0, klen * 2 + 8);
137 +
        let vc1 = crc_shift_iscsi_sse(crc1, klen + 8);
138 +
        let mut vc = _mm_extract_epi64(_mm_xor_si128(vc0, vc1), 0) as u64;
139 +
140 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
141 +
        let x0_low = _mm_extract_epi64(x0, 0) as u64;
142 +
        let x0_high = _mm_extract_epi64(x0, 1) as u64;
143 +
        let vec_crc = _mm_crc32_u64(_mm_crc32_u64(0, x0_low), x0_high);
144 +
        vc ^= _mm_extract_epi64(crc_shift_iscsi_sse(vec_crc as u32, klen * 3 + 8), 0) as u64;
145 +
146 +
        // Final 8 bytes
147 +
        buf = buf.add(klen * 2);
148 +
        crc0 = crc2;
149 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64) ^ vc) as u32;
150 +
        buf = buf.add(8);
151 +
        len -= 8;
152 +
    }
153 +
154 +
    // Process remaining 8-byte chunks using hardware CRC32C
155 +
    while len >= 8 {
156 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32;
157 +
        buf = buf.add(8);
158 +
        len -= 8;
159 +
    }
160 +
161 +
    // Process remaining bytes using hardware CRC32C
162 +
    while len > 0 {
163 +
        crc0 = _mm_crc32_u8(crc0, *buf);
164 +
        buf = buf.add(1);
165 +
        len -= 1;
166 +
    }
167 +
168 +
    crc0
169 +
}
added vendor/crc-fast/src/crc32/fusion/x86/iscsi/avx512_vpclmulqdq.rs +209 −0
1 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
2 +
//! with the help of Claude.ai.
3 +
//!
4 +
//! MIT licensed.
5 +
6 +
#![cfg(target_arch = "x86_64")]
7 +
8 +
/// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
9 +
/// with the help of Claude.ai using:
10 +
///
11 +
/// ./generate -i avx512_vpclmulqdq -p crc32c -a v3x2
12 +
///
13 +
/// Modified as necessary for this Rust implementation.
14 +
///
15 +
/// Uses AVX-512 VPCLMULQDQ instructions
16 +
#[inline]
17 +
#[target_feature(enable = "avx512vl,vpclmulqdq")]
18 +
pub unsafe fn crc32_iscsi_avx512_vpclmulqdq_v3x2(
19 +
    mut crc0: u32,
20 +
    mut buf: *const u8,
21 +
    mut len: usize,
22 +
) -> u32 {
23 +
    use crate::fusion::x86::*;
24 +
25 +
    // Align to 8-byte boundary
26 +
    while len > 0 && (buf as usize & 7) != 0 {
27 +
        crc0 = _mm_crc32_u8(crc0, *buf);
28 +
        buf = buf.add(1);
29 +
        len -= 1;
30 +
    }
31 +
32 +
    // Align to 64-byte boundary (cache line)
33 +
    while (buf as usize & 56) != 0 && len >= 8 {
34 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32;
35 +
        buf = buf.add(8);
36 +
        len -= 8;
37 +
    }
38 +
39 +
    if len >= 384 {
40 +
        // First vector chunk - load three 512-bit vectors (192 bytes total)
41 +
        let mut x0 = _mm512_loadu_si512(buf as *const __m512i);
42 +
        let mut x1 = _mm512_loadu_si512(buf.add(64) as *const __m512i);
43 +
        let mut x2 = _mm512_loadu_si512(buf.add(128) as *const __m512i);
44 +
45 +
        // Create the multiplication constant vector
46 +
        // Pattern: [0xa87ab8a8, 0, 0xab7aff2a, 0] repeated across all 128-bit lanes
47 +
        let k_128 = _mm_setr_epi32(0xa87ab8a8u32 as i32, 0, 0xab7aff2au32 as i32, 0);
48 +
        let mut k = _mm512_broadcast_i32x4(k_128);
49 +
50 +
        // XOR the CRC into the first vector's low 32 bits
51 +
        let crc_vec = _mm512_castsi128_si512(_mm_cvtsi32_si128(crc0 as i32));
52 +
        x0 = _mm512_xor_si512(crc_vec, x0);
53 +
54 +
        // First round of polynomial multiplication
55 +
        let mut y0 = clmul_lo_avx512_vpclmulqdq(x0, k);
56 +
        x0 = clmul_hi_avx512_vpclmulqdq(x0, k);
57 +
        let mut y1 = clmul_lo_avx512_vpclmulqdq(x1, k);
58 +
        x1 = clmul_hi_avx512_vpclmulqdq(x1, k);
59 +
        let mut y2 = clmul_lo_avx512_vpclmulqdq(x2, k);
60 +
        x2 = clmul_hi_avx512_vpclmulqdq(x2, k);
61 +
62 +
        // XOR with next chunk of data using ternary logic (A XOR B XOR C)
63 +
        // 0x96 = A XOR B XOR C in ternary logic notation
64 +
        x0 = _mm512_ternarylogic_epi64(
65 +
            x0,
66 +
            y0,
67 +
            _mm512_loadu_si512(buf.add(192) as *const __m512i),
68 +
            0x96,
69 +
        );
70 +
        x1 = _mm512_ternarylogic_epi64(
71 +
            x1,
72 +
            y1,
73 +
            _mm512_loadu_si512(buf.add(256) as *const __m512i),
74 +
            0x96,
75 +
        );
76 +
        x2 = _mm512_ternarylogic_epi64(
77 +
            x2,
78 +
            y2,
79 +
            _mm512_loadu_si512(buf.add(320) as *const __m512i),
80 +
            0x96,
81 +
        );
82 +
83 +
        buf = buf.add(384);
84 +
        len -= 384;
85 +
86 +
        // Main loop - process 384 bytes at a time
87 +
        while len >= 384 {
88 +
            // First folding step
89 +
            y0 = clmul_lo_avx512_vpclmulqdq(x0, k);
90 +
            x0 = clmul_hi_avx512_vpclmulqdq(x0, k);
91 +
            y1 = clmul_lo_avx512_vpclmulqdq(x1, k);
92 +
            x1 = clmul_hi_avx512_vpclmulqdq(x1, k);
93 +
            y2 = clmul_lo_avx512_vpclmulqdq(x2, k);
94 +
            x2 = clmul_hi_avx512_vpclmulqdq(x2, k);
95 +
96 +
            x0 = _mm512_ternarylogic_epi64(x0, y0, _mm512_loadu_si512(buf as *const __m512i), 0x96);
97 +
            x1 = _mm512_ternarylogic_epi64(
98 +
                x1,
99 +
                y1,
100 +
                _mm512_loadu_si512(buf.add(64) as *const __m512i),
101 +
                0x96,
102 +
            );
103 +
            x2 = _mm512_ternarylogic_epi64(
104 +
                x2,
105 +
                y2,
106 +
                _mm512_loadu_si512(buf.add(128) as *const __m512i),
107 +
                0x96,
108 +
            );
109 +
110 +
            // Second folding step
111 +
            y0 = clmul_lo_avx512_vpclmulqdq(x0, k);
112 +
            x0 = clmul_hi_avx512_vpclmulqdq(x0, k);
113 +
            y1 = clmul_lo_avx512_vpclmulqdq(x1, k);
114 +
            x1 = clmul_hi_avx512_vpclmulqdq(x1, k);
115 +
            y2 = clmul_lo_avx512_vpclmulqdq(x2, k);
116 +
            x2 = clmul_hi_avx512_vpclmulqdq(x2, k);
117 +
118 +
            x0 = _mm512_ternarylogic_epi64(
119 +
                x0,
120 +
                y0,
121 +
                _mm512_loadu_si512(buf.add(192) as *const __m512i),
122 +
                0x96,
123 +
            );
124 +
            x1 = _mm512_ternarylogic_epi64(
125 +
                x1,
126 +
                y1,
127 +
                _mm512_loadu_si512(buf.add(256) as *const __m512i),
128 +
                0x96,
129 +
            );
130 +
            x2 = _mm512_ternarylogic_epi64(
131 +
                x2,
132 +
                y2,
133 +
                _mm512_loadu_si512(buf.add(320) as *const __m512i),
134 +
                0x96,
135 +
            );
136 +
137 +
            buf = buf.add(384);
138 +
            len -= 384;
139 +
        }
140 +
141 +
        // Reduce x0, x1, x2 to just x0
142 +
        let k_128 = _mm_setr_epi32(0x740eef02u32 as i32, 0, 0x9e4addf8u32 as i32, 0);
143 +
        k = _mm512_broadcast_i32x4(k_128);
144 +
145 +
        y0 = clmul_lo_avx512_vpclmulqdq(x0, k);
146 +
        x0 = clmul_hi_avx512_vpclmulqdq(x0, k);
147 +
        x0 = _mm512_ternarylogic_epi64(x0, y0, x1, 0x96);
148 +
        x1 = x2;
149 +
150 +
        y0 = clmul_lo_avx512_vpclmulqdq(x0, k);
151 +
        x0 = clmul_hi_avx512_vpclmulqdq(x0, k);
152 +
        x0 = _mm512_ternarylogic_epi64(x0, y0, x1, 0x96);
153 +
154 +
        // Reduce 512 bits to 128 bits
155 +
        // Multiple reduction constants for different parts of the 512-bit vector
156 +
        k = _mm512_setr_epi32(
157 +
            0x1c291d04u32 as i32,
158 +
            0,
159 +
            0xddc0152bu32 as i32,
160 +
            0, // Lane 0
161 +
            0x3da6d0cbu32 as i32,
162 +
            0,
163 +
            0xba4fc28eu32 as i32,
164 +
            0, // Lane 1
165 +
            0xf20c0dfeu32 as i32,
166 +
            0,
167 +
            0x493c7d27u32 as i32,
168 +
            0, // Lane 2
169 +
            0,
170 +
            0,
171 +
            0,
172 +
            0, // Lane 3 (unused)
173 +
        );
174 +
175 +
        y0 = clmul_lo_avx512_vpclmulqdq(x0, k);
176 +
        k = clmul_hi_avx512_vpclmulqdq(x0, k);
177 +
        y0 = _mm512_xor_si512(y0, k);
178 +
179 +
        // Extract 128-bit lanes and combine them
180 +
        let lane0 = _mm512_castsi512_si128(y0);
181 +
        let lane1 = _mm512_extracti32x4_epi32(y0, 1);
182 +
        let lane2 = _mm512_extracti32x4_epi32(y0, 2);
183 +
        let lane3 = _mm512_extracti32x4_epi32(x0, 3);
184 +
185 +
        // Combine all lanes using ternary logic
186 +
        let mut z0 = _mm_ternarylogic_epi64(lane0, lane1, lane2, 0x96);
187 +
        z0 = _mm_xor_si128(z0, lane3);
188 +
189 +
        // Reduce 128 bits to 32 bits using CRC32 instructions
190 +
        crc0 = _mm_crc32_u64(0, _mm_extract_epi64(z0, 0) as u64) as u32;
191 +
        crc0 = _mm_crc32_u64(crc0.into(), _mm_extract_epi64(z0, 1) as u64) as u32;
192 +
    }
193 +
194 +
    // Process remaining 8-byte chunks
195 +
    while len >= 8 {
196 +
        crc0 = _mm_crc32_u64(crc0.into(), *(buf as *const u64)) as u32;
197 +
        buf = buf.add(8);
198 +
        len -= 8;
199 +
    }
200 +
201 +
    // Process remaining bytes
202 +
    while len > 0 {
203 +
        crc0 = _mm_crc32_u8(crc0, *buf);
204 +
        buf = buf.add(1);
205 +
        len -= 1;
206 +
    }
207 +
208 +
    crc0
209 +
}
added vendor/crc-fast/src/crc32/fusion/x86/iscsi/mod.rs +10 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides x86-specific implementations of CRC-32/ISCSI calculations using
4 +
//! fusion techniques.
5 +
6 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64"))]
7 +
8 +
pub(crate) mod avx512_pclmulqdq;
9 +
pub(crate) mod avx512_vpclmulqdq;
10 +
pub(crate) mod sse_pclmulqdq;
added vendor/crc-fast/src/crc32/fusion/x86/iscsi/sse_pclmulqdq.rs +169 −0
1 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
2 +
//! with the help of Claude.ai.
3 +
//!
4 +
//! MIT licensed.
5 +
6 +
#![cfg(any(target_arch = "x86_64", target_arch = "x86"))]
7 +
8 +
#[cfg(target_arch = "x86")]
9 +
use core::arch::x86::*;
10 +
11 +
#[cfg(target_arch = "x86_64")]
12 +
use core::arch::x86_64::*;
13 +
14 +
use crate::fusion::x86::*;
15 +
16 +
/// Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
17 +
/// with the help of Claude.ai using:
18 +
///
19 +
/// ./generate -i sse -p crc32c -a v4s3x3
20 +
///
21 +
/// Modified as necessary for this Rust implementation.
22 +
#[inline]
23 +
#[target_feature(enable = "sse4.2,pclmulqdq")]
24 +
pub unsafe fn crc32_iscsi_sse_v4s3x3(mut crc0: u32, mut buf: *const u8, mut len: usize) -> u32 {
25 +
    // Align to 8-byte boundary using hardware CRC32C instructions
26 +
    while len > 0 && (buf as usize & 7) != 0 {
27 +
        crc0 = _mm_crc32_u8(crc0, *buf);
28 +
        buf = buf.add(1);
29 +
        len -= 1;
30 +
    }
31 +
32 +
    // Handle 8-byte alignment
33 +
    if (buf as usize & 8) != 0 && len >= 8 {
34 +
        crc0 = mm_crc32_u64(crc0, *(buf as *const u64));
35 +
        buf = buf.add(8);
36 +
        len -= 8;
37 +
    }
38 +
39 +
    if len >= 144 {
40 +
        let blk = (len - 8) / 136;
41 +
        let klen = blk * 24;
42 +
        let buf2 = buf;
43 +
        let mut crc1 = 0u32;
44 +
        let mut crc2 = 0u32;
45 +
46 +
        // First vector chunk - load four 128-bit vectors (64 bytes total)
47 +
        let mut x0 = _mm_loadu_si128(buf2 as *const __m128i);
48 +
        let mut x1 = _mm_loadu_si128(buf2.add(16) as *const __m128i);
49 +
        let mut x2 = _mm_loadu_si128(buf2.add(32) as *const __m128i);
50 +
        let mut x3 = _mm_loadu_si128(buf2.add(48) as *const __m128i);
51 +
52 +
        // iSCSI-specific folding constant (same as AVX-512 version)
53 +
        let mut k = _mm_setr_epi32(0x740eef02u32 as i32, 0, 0x9e4addf8u32 as i32, 0);
54 +
55 +
        // XOR the CRC into the first vector's low 32 bits
56 +
        x0 = _mm_xor_si128(_mm_cvtsi32_si128(crc0 as i32), x0);
57 +
        crc0 = 0;
58 +
59 +
        let mut buf2 = buf2.add(64);
60 +
        len -= 136;
61 +
        buf = buf.add(blk * 64);
62 +
63 +
        // Main loop - process 144 bytes at a time
64 +
        while len >= 144 {
65 +
            let mut y0 = clmul_lo_sse(x0, k);
66 +
            x0 = clmul_hi_sse(x0, k);
67 +
            let mut y1 = clmul_lo_sse(x1, k);
68 +
            x1 = clmul_hi_sse(x1, k);
69 +
            let mut y2 = clmul_lo_sse(x2, k);
70 +
            x2 = clmul_hi_sse(x2, k);
71 +
            let mut y3 = clmul_lo_sse(x3, k);
72 +
            x3 = clmul_hi_sse(x3, k);
73 +
74 +
            // XOR operations using separate XOR instructions (no ternary logic in SSE)
75 +
            y0 = _mm_xor_si128(y0, _mm_loadu_si128(buf2 as *const __m128i));
76 +
            x0 = _mm_xor_si128(x0, y0);
77 +
            y1 = _mm_xor_si128(y1, _mm_loadu_si128(buf2.add(16) as *const __m128i));
78 +
            x1 = _mm_xor_si128(x1, y1);
79 +
            y2 = _mm_xor_si128(y2, _mm_loadu_si128(buf2.add(32) as *const __m128i));
80 +
            x2 = _mm_xor_si128(x2, y2);
81 +
            y3 = _mm_xor_si128(y3, _mm_loadu_si128(buf2.add(48) as *const __m128i));
82 +
            x3 = _mm_xor_si128(x3, y3);
83 +
84 +
            // Process scalar data in parallel using hardware CRC32C
85 +
            crc0 = mm_crc32_u64(crc0, *(buf as *const u64));
86 +
            crc1 = mm_crc32_u64(crc1, *(buf.add(klen) as *const u64));
87 +
            crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2) as *const u64));
88 +
            crc0 = mm_crc32_u64(crc0, *(buf.add(8) as *const u64));
89 +
            crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 8) as *const u64));
90 +
            crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 8) as *const u64));
91 +
            crc0 = mm_crc32_u64(crc0, *(buf.add(16) as *const u64));
92 +
            crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 16) as *const u64));
93 +
            crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 16) as *const u64));
94 +
95 +
            buf = buf.add(24);
96 +
            buf2 = buf2.add(64);
97 +
            len -= 136;
98 +
        }
99 +
100 +
        // Reduce x0 ... x3 to just x0 using iSCSI-specific constants
101 +
        k = _mm_setr_epi32(0xf20c0dfeu32 as i32, 0, 0x493c7d27u32 as i32, 0);
102 +
103 +
        let mut y0 = clmul_lo_sse(x0, k);
104 +
        x0 = clmul_hi_sse(x0, k);
105 +
        let mut y2 = clmul_lo_sse(x2, k);
106 +
        x2 = clmul_hi_sse(x2, k);
107 +
108 +
        y0 = _mm_xor_si128(y0, x1);
109 +
        x0 = _mm_xor_si128(x0, y0);
110 +
        y2 = _mm_xor_si128(y2, x3);
111 +
        x2 = _mm_xor_si128(x2, y2);
112 +
113 +
        k = _mm_setr_epi32(0x3da6d0cbu32 as i32, 0, 0xba4fc28eu32 as i32, 0);
114 +
115 +
        y0 = clmul_lo_sse(x0, k);
116 +
        x0 = clmul_hi_sse(x0, k);
117 +
        y0 = _mm_xor_si128(y0, x2);
118 +
        x0 = _mm_xor_si128(x0, y0);
119 +
120 +
        // Final scalar chunk
121 +
        crc0 = mm_crc32_u64(crc0, *(buf as *const u64));
122 +
        crc1 = mm_crc32_u64(crc1, *(buf.add(klen) as *const u64));
123 +
        crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2) as *const u64));
124 +
        crc0 = mm_crc32_u64(crc0, *(buf.add(8) as *const u64));
125 +
        crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 8) as *const u64));
126 +
        crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 8) as *const u64));
127 +
        crc0 = mm_crc32_u64(crc0, *(buf.add(16) as *const u64));
128 +
        crc1 = mm_crc32_u64(crc1, *(buf.add(klen + 16) as *const u64));
129 +
        crc2 = mm_crc32_u64(crc2, *(buf.add(klen * 2 + 16) as *const u64));
130 +
        buf = buf.add(24);
131 +
132 +
        let vc0 = crc_shift_iscsi_sse(crc0, klen * 2 + 8);
133 +
        let vc1 = crc_shift_iscsi_sse(crc1, klen + 8);
134 +
        let mut vc = mm_extract_epi64(_mm_xor_si128(vc0, vc1), 0);
135 +
136 +
        // Reduce 128 bits to 32 bits, and multiply by x^32
137 +
        // Extract the two 64-bit parts of x0 and combine them
138 +
        let x0_low = mm_extract_epi64(x0, 0);
139 +
        let x0_high = mm_extract_epi64(x0, 1);
140 +
        let x0_combined = mm_extract_epi64(
141 +
            crc_shift_iscsi_sse(mm_crc32_u64(mm_crc32_u64(0, x0_low), x0_high), klen * 3 + 8),
142 +
            0,
143 +
        );
144 +
        vc ^= x0_combined;
145 +
146 +
        // Final 8 bytes
147 +
        buf = buf.add(klen * 2);
148 +
        crc0 = crc2;
149 +
        crc0 = mm_crc32_u64(crc0, *(buf as *const u64) ^ vc);
150 +
        buf = buf.add(8);
151 +
        len -= 8;
152 +
    }
153 +
154 +
    // Process remaining 8-byte chunks using hardware CRC32C
155 +
    while len >= 8 {
156 +
        crc0 = mm_crc32_u64(crc0, *(buf as *const u64));
157 +
        buf = buf.add(8);
158 +
        len -= 8;
159 +
    }
160 +
161 +
    // Process remaining bytes using hardware CRC32C
162 +
    while len > 0 {
163 +
        crc0 = _mm_crc32_u8(crc0, *buf);
164 +
        buf = buf.add(1);
165 +
        len -= 1;
166 +
    }
167 +
168 +
    crc0
169 +
}
added vendor/crc-fast/src/crc32/fusion/x86/mod.rs +341 −0
1 +
//! Provides CRC-32/ISCSI calculations using a fusion of native CLMUL
2 +
//! instructions and native CRC calculation instructions on x86 / x86_64.
3 +
//!
4 +
//! https://www.corsix.org/content/fast-crc32c-4k
5 +
//! https://www.corsix.org/content/alternative-exposition-crc32_4k_pclmulqdq
6 +
//!
7 +
//! Converted to Rust from the original C code generated by https://github.com/corsix/fast-crc32/
8 +
//! with the help of Claude.ai.
9 +
//!
10 +
//! Modified as necessary for this Rust implementation.
11 +
//!
12 +
//! MIT licensed.
13 +
14 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64"))]
15 +
16 +
mod iscsi;
17 +
18 +
use iscsi::sse_pclmulqdq::crc32_iscsi_sse_v4s3x3;
19 +
20 +
#[cfg(target_arch = "x86")]
21 +
use core::arch::x86::*;
22 +
#[cfg(target_arch = "x86_64")]
23 +
use core::arch::x86_64::*;
24 +
#[cfg(target_arch = "x86_64")]
25 +
use iscsi::avx512_pclmulqdq::crc32_iscsi_avx512_v4s3x3;
26 +
#[cfg(target_arch = "x86_64")]
27 +
use iscsi::avx512_vpclmulqdq::crc32_iscsi_avx512_vpclmulqdq_v3x2;
28 +
29 +
/// CRC32 iSCSI calculation using the highest available instruction set (post-AVX-512 support)
30 +
///
31 +
/// This function is called by the wrapper layer after feature detection has been performed.
32 +
/// The wrapper layer ensures that only the appropriate implementation is called based on
33 +
/// cached feature detection results, removing runtime checks from the hot path.
34 +
#[inline(always)]
35 +
pub fn crc32_iscsi(crc: u32, data: &[u8]) -> u32 {
36 +
    let data_len = data.len();
37 +
38 +
    // SSE4.2 is required for native CRC32 instructions used in small buffer path
39 +
    if data_len <= 256 && is_x86_feature_detected!("sse4.2") {
40 +
        unsafe {
41 +
            return crc32_iscsi_small_fast(crc, data);
42 +
        }
43 +
    }
44 +
45 +
    #[cfg(target_arch = "x86_64")]
46 +
    {
47 +
        // AVX512 + VPCLMULQDQ
48 +
49 +
        if is_x86_feature_detected!("avx512vl") && is_x86_feature_detected!("vpclmulqdq") {
50 +
            unsafe {
51 +
                return crc32_iscsi_avx512_vpclmulqdq_v3x2(crc, data.as_ptr(), data_len);
52 +
            }
53 +
        }
54 +
55 +
        // AVX512
56 +
        if is_x86_feature_detected!("avx512vl") {
57 +
            unsafe {
58 +
                return crc32_iscsi_avx512_v4s3x3(crc, data.as_ptr(), data_len);
59 +
            }
60 +
        }
61 +
    }
62 +
63 +
    // Fallback to SSE implementation
64 +
    unsafe { crc32_iscsi_sse_v4s3x3(crc, data.as_ptr(), data_len) }
65 +
}
66 +
67 +
#[cfg(target_arch = "x86_64")]
68 +
#[inline]
69 +
#[target_feature(enable = "avx512vl,vpclmulqdq")]
70 +
unsafe fn clmul_lo_avx512_vpclmulqdq(a: __m512i, b: __m512i) -> __m512i {
71 +
    _mm512_clmulepi64_epi128(a, b, 0)
72 +
}
73 +
74 +
#[cfg(target_arch = "x86_64")]
75 +
#[inline]
76 +
#[target_feature(enable = "avx512vl,vpclmulqdq")]
77 +
unsafe fn clmul_hi_avx512_vpclmulqdq(a: __m512i, b: __m512i) -> __m512i {
78 +
    _mm512_clmulepi64_epi128(a, b, 17)
79 +
}
80 +
81 +
#[inline]
82 +
#[target_feature(enable = "pclmulqdq")]
83 +
unsafe fn clmul_lo_sse(a: __m128i, b: __m128i) -> __m128i {
84 +
    _mm_clmulepi64_si128(a, b, 0)
85 +
}
86 +
87 +
#[inline]
88 +
#[target_feature(enable = "pclmulqdq")]
89 +
unsafe fn clmul_hi_sse(a: __m128i, b: __m128i) -> __m128i {
90 +
    _mm_clmulepi64_si128(a, b, 17)
91 +
}
92 +
93 +
#[inline]
94 +
#[target_feature(enable = "pclmulqdq")]
95 +
unsafe fn clmul_scalar_sse(a: u32, b: u32) -> __m128i {
96 +
    _mm_clmulepi64_si128(_mm_cvtsi32_si128(a as i32), _mm_cvtsi32_si128(b as i32), 0)
97 +
}
98 +
99 +
// x^n mod P, in log(n) time
100 +
#[target_feature(enable = "sse4.2,pclmulqdq")]
101 +
unsafe fn xnmodp_iscsi_sse(mut n: u64) -> u32 {
102 +
    let mut stack = !1u64;
103 +
    let mut acc: u32;
104 +
    let mut low: u32;
105 +
106 +
    while n > 191 {
107 +
        stack = (stack << 1) + (n & 1);
108 +
        n = (n >> 1) - 16;
109 +
    }
110 +
    stack = !stack;
111 +
    acc = 0x80000000u32 >> (n & 31);
112 +
    n >>= 5;
113 +
114 +
    while n > 0 {
115 +
        // Use hardware CRC32C instruction
116 +
        acc = _mm_crc32_u32(acc, 0);
117 +
        n -= 1;
118 +
    }
119 +
120 +
    while {
121 +
        low = (stack & 1) as u32;
122 +
        stack >>= 1;
123 +
        stack != 0
124 +
    } {
125 +
        let x = _mm_cvtsi32_si128(acc as i32);
126 +
        let clmul_result = _mm_clmulepi64_si128(x, x, 0);
127 +
        let y = mm_extract_epi64(clmul_result, 0);
128 +
        acc = mm_crc32_u64(0, y << low);
129 +
    }
130 +
    acc
131 +
}
132 +
133 +
#[inline]
134 +
#[target_feature(enable = "pclmulqdq")]
135 +
unsafe fn crc_shift_iscsi_sse(crc: u32, nbytes: usize) -> __m128i {
136 +
    clmul_scalar_sse(crc, xnmodp_iscsi_sse((nbytes * 8 - 33) as u64))
137 +
}
138 +
139 +
#[inline]
140 +
#[target_feature(enable = "sse4.1")]
141 +
unsafe fn mm_extract_epi64(val: __m128i, idx: i32) -> u64 {
142 +
    #[cfg(target_arch = "x86_64")]
143 +
    {
144 +
        if idx == 0 {
145 +
            _mm_cvtsi128_si64(val) as u64
146 +
        } else {
147 +
            _mm_cvtsi128_si64(_mm_srli_si128(val, 8)) as u64
148 +
        }
149 +
    }
150 +
    #[cfg(target_arch = "x86")]
151 +
    {
152 +
        // On 32-bit x86, extract two 32-bit values and combine them
153 +
        let shifted = if idx == 0 {
154 +
            val
155 +
        } else {
156 +
            _mm_srli_si128(val, 8)
157 +
        };
158 +
        let low = _mm_cvtsi128_si32(shifted) as u32;
159 +
        let high = _mm_cvtsi128_si32(_mm_srli_si128(shifted, 4)) as u32;
160 +
        (low as u64) | ((high as u64) << 32)
161 +
    }
162 +
}
163 +
164 +
#[inline]
165 +
#[target_feature(enable = "sse4.2")]
166 +
unsafe fn mm_crc32_u64(crc: u32, val: u64) -> u32 {
167 +
    #[cfg(target_arch = "x86_64")]
168 +
    {
169 +
        _mm_crc32_u64(crc.into(), val) as u32
170 +
    }
171 +
    #[cfg(target_arch = "x86")]
172 +
    {
173 +
        // On 32-bit x86, process 64-bit value as two 32-bit CRC operations
174 +
        let low = val as u32;
175 +
        let high = (val >> 32) as u32;
176 +
        let crc = _mm_crc32_u32(crc, low);
177 +
        _mm_crc32_u32(crc, high)
178 +
    }
179 +
}
180 +
181 +
/// CRC-32/ISCSI calculation for small buffers (<= 256 bytes) using unrolled native CRC instructions
182 +
#[inline]
183 +
#[target_feature(enable = "sse4.2")]
184 +
pub unsafe fn crc32_iscsi_small_fast(mut crc: u32, data: &[u8]) -> u32 {
185 +
    let (prefix, aligned, suffix) = data.align_to::<u64>();
186 +
187 +
    for &byte in prefix {
188 +
        crc = _mm_crc32_u8(crc, byte);
189 +
    }
190 +
191 +
    let mut chunks = aligned.chunks_exact(8);
192 +
    for chunk in &mut chunks {
193 +
        crc = mm_crc32_u64(crc, chunk[0]);
194 +
        crc = mm_crc32_u64(crc, chunk[1]);
195 +
        crc = mm_crc32_u64(crc, chunk[2]);
196 +
        crc = mm_crc32_u64(crc, chunk[3]);
197 +
        crc = mm_crc32_u64(crc, chunk[4]);
198 +
        crc = mm_crc32_u64(crc, chunk[5]);
199 +
        crc = mm_crc32_u64(crc, chunk[6]);
200 +
        crc = mm_crc32_u64(crc, chunk[7]);
201 +
    }
202 +
203 +
    for &val in chunks.remainder() {
204 +
        crc = mm_crc32_u64(crc, val);
205 +
    }
206 +
207 +
    for &byte in suffix {
208 +
        crc = _mm_crc32_u8(crc, byte);
209 +
    }
210 +
211 +
    crc
212 +
}
213 +
214 +
#[cfg(test)]
215 +
mod tests {
216 +
    use super::*;
217 +
    use crate::test::consts::TEST_CHECK_STRING;
218 +
    use crc::{Crc, Table};
219 +
    use rand::{rng, Rng};
220 +
221 +
    const RUST_CRC32_ISCSI: Crc<u32, Table<16>> = Crc::<u32, Table<16>>::new(&crc::CRC_32_ISCSI);
222 +
223 +
    #[test]
224 +
    fn test_crc32_iscsi_check() {
225 +
        if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") {
226 +
            assert_eq!(
227 +
                crc32_iscsi(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff,
228 +
                0xe3069283
229 +
            );
230 +
        }
231 +
    }
232 +
233 +
    #[test]
234 +
    fn test_crc32_iscsi_small_fast_check() {
235 +
        if is_x86_feature_detected!("sse4.2") {
236 +
            unsafe {
237 +
                assert_eq!(
238 +
                    crc32_iscsi_small_fast(0xffffffff, TEST_CHECK_STRING) ^ 0xffffffff,
239 +
                    0xe3069283
240 +
                );
241 +
            }
242 +
        }
243 +
    }
244 +
245 +
    #[test]
246 +
    fn test_crc32_iscsi_small_fast_all_lengths() {
247 +
        if is_x86_feature_detected!("sse4.2") {
248 +
            for len in 1..=255 {
249 +
                test_crc32_iscsi_small_fast_random(len);
250 +
            }
251 +
        }
252 +
    }
253 +
254 +
    fn test_crc32_iscsi_small_fast_random(len: usize) {
255 +
        let mut data = vec![0u8; len];
256 +
        rng().fill(&mut data[..]);
257 +
258 +
        let checksum = RUST_CRC32_ISCSI.checksum(&data);
259 +
260 +
        if is_x86_feature_detected!("sse4.2") {
261 +
            unsafe {
262 +
                assert_eq!(
263 +
                    crc32_iscsi_small_fast(0xffffffff, &data) ^ 0xffffffff,
264 +
                    checksum
265 +
                );
266 +
            }
267 +
        }
268 +
    }
269 +
270 +
    #[test]
271 +
    fn test_crc32_iscsi_small_all_lengths() {
272 +
        if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") {
273 +
            for len in 1..=255 {
274 +
                test_crc32_iscsi_random(len);
275 +
            }
276 +
        }
277 +
    }
278 +
279 +
    #[test]
280 +
    fn test_crc32_iscsi_medium_lengths() {
281 +
        if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") {
282 +
            // Test each length from 256 to 1024, which should fold and include handling remainders
283 +
            for len in 256..=1024 {
284 +
                test_crc32_iscsi_random(len);
285 +
            }
286 +
        }
287 +
    }
288 +
289 +
    #[test]
290 +
    fn test_crc32_iscsi_large_lengths() {
291 +
        if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") {
292 +
            // Test 1 MiB just before, at, and just after the folding boundaries
293 +
            for len in 1048575..1048577 {
294 +
                test_crc32_iscsi_random(len);
295 +
            }
296 +
        }
297 +
    }
298 +
299 +
    fn test_crc32_iscsi_random(len: usize) {
300 +
        let mut data = vec![0u8; len];
301 +
        rng().fill(&mut data[..]);
302 +
303 +
        let checksum = RUST_CRC32_ISCSI.checksum(&data);
304 +
305 +
        if is_x86_feature_detected!("sse4.2") && is_x86_feature_detected!("pclmulqdq") {
306 +
            assert_eq!(crc32_iscsi(0xffffffff, &data) ^ 0xffffffff, checksum);
307 +
        }
308 +
309 +
        unsafe {
310 +
            #[cfg(target_arch = "x86_64")]
311 +
            {
312 +
                if is_x86_feature_detected!("vpclmulqdq")
313 +
                    && is_x86_feature_detected!("avx512vl")
314 +
                    && is_x86_feature_detected!("avx512f")
315 +
                {
316 +
                    assert_eq!(
317 +
                        crc32_iscsi_avx512_vpclmulqdq_v3x2(0xffffffff, data.as_ptr(), data.len())
318 +
                            ^ 0xffffffff,
319 +
                        checksum
320 +
                    );
321 +
                }
322 +
323 +
                if is_x86_feature_detected!("avx512vl")
324 +
                    && is_x86_feature_detected!("avx512f")
325 +
                    && is_x86_feature_detected!("pclmulqdq")
326 +
                {
327 +
                    assert_eq!(
328 +
                        crc32_iscsi_avx512_v4s3x3(0xffffffff, data.as_ptr(), data.len())
329 +
                            ^ 0xffffffff,
330 +
                        checksum
331 +
                    );
332 +
                }
333 +
            }
334 +
335 +
            assert_eq!(
336 +
                crc32_iscsi_sse_v4s3x3(0xffffffff, data.as_ptr(), data.len()) ^ 0xffffffff,
337 +
                checksum
338 +
            );
339 +
        }
340 +
    }
341 +
}
added vendor/crc-fast/src/crc32/mod.rs +70 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides CRC-32 support.
4 +
5 +
pub mod algorithm;
6 +
pub mod consts;
7 +
pub(crate) mod width32_ops;
8 +
9 +
#[cfg(all(
10 +
    feature = "std",
11 +
    any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")
12 +
))]
13 +
pub(crate) mod fusion;
14 +
15 +
#[cfg(test)]
16 +
mod property_tests {
17 +
    use crate::test::miri_compatible_proptest_config;
18 +
    use crate::{checksum, CrcAlgorithm};
19 +
    use proptest::prelude::*;
20 +
21 +
    proptest! {
22 +
        #![proptest_config(miri_compatible_proptest_config())]
23 +
24 +
        /// Feature: crc16-hardware-acceleration, Property 4: CRC-32 and CRC-64 backwards compatibility
25 +
        /// *For any* existing CRC-32 or CRC-64 configuration and any input byte sequence, the
26 +
        /// computed checksum SHALL match the result from the `crc` crate reference implementation,
27 +
        /// ensuring no regression from CRC-16 changes.
28 +
        /// **Validates: Requirements 3.1, 3.2, 3.4**
29 +
        #[test]
30 +
        fn prop_crc32_compatibility(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
31 +
            use crate::test::consts::{RUST_CRC32_ISCSI, RUST_CRC32_ISO_HDLC, RUST_CRC32_BZIP2, RUST_CRC32_MPEG_2};
32 +
33 +
            // Test CRC-32/ISCSI (reflected)
34 +
            let our_iscsi = checksum(CrcAlgorithm::Crc32Iscsi, &data);
35 +
            let ref_iscsi = RUST_CRC32_ISCSI.checksum(&data) as u64;
36 +
            prop_assert_eq!(
37 +
                our_iscsi, ref_iscsi,
38 +
                "CRC-32/ISCSI mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
39 +
                data.len(), our_iscsi, ref_iscsi
40 +
            );
41 +
42 +
            // Test CRC-32/ISO-HDLC (reflected)
43 +
            let our_hdlc = checksum(CrcAlgorithm::Crc32IsoHdlc, &data);
44 +
            let ref_hdlc = RUST_CRC32_ISO_HDLC.checksum(&data) as u64;
45 +
            prop_assert_eq!(
46 +
                our_hdlc, ref_hdlc,
47 +
                "CRC-32/ISO-HDLC mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
48 +
                data.len(), our_hdlc, ref_hdlc
49 +
            );
50 +
51 +
            // Test CRC-32/BZIP2 (forward/non-reflected)
52 +
            let our_bzip2 = checksum(CrcAlgorithm::Crc32Bzip2, &data);
53 +
            let ref_bzip2 = RUST_CRC32_BZIP2.checksum(&data) as u64;
54 +
            prop_assert_eq!(
55 +
                our_bzip2, ref_bzip2,
56 +
                "CRC-32/BZIP2 mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
57 +
                data.len(), our_bzip2, ref_bzip2
58 +
            );
59 +
60 +
            // Test CRC-32/MPEG-2 (forward/non-reflected)
61 +
            let our_mpeg2 = checksum(CrcAlgorithm::Crc32Mpeg2, &data);
62 +
            let ref_mpeg2 = RUST_CRC32_MPEG_2.checksum(&data) as u64;
63 +
            prop_assert_eq!(
64 +
                our_mpeg2, ref_mpeg2,
65 +
                "CRC-32/MPEG-2 mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
66 +
                data.len(), our_mpeg2, ref_mpeg2
67 +
            );
68 +
        }
69 +
    }
70 +
}
added vendor/crc-fast/src/crc32/width32_ops.rs +290 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! Shared operations for CRC widths that operate in 32-bit space (CRC-16, CRC-32).
4 +
//!
5 +
//! CRC-16 computation scales 16-bit values to 32-bit space, uses these operations,
6 +
//! then scales results back to 16 bits. CRC-32 uses these operations directly.
7 +
//!
8 +
//! This module eliminates code duplication between the CRC-16 and CRC-32 implementations,
9 +
//! which share nearly identical SIMD operations for folding, Barrett reduction, and
10 +
//! small input processing.
11 +
12 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
13 +
14 +
use crate::algorithm;
15 +
use crate::consts::CRC_CHUNK_SIZE;
16 +
use crate::crc32::consts::{PSHUFB_SHF_TABLE_FORWARD, PSHUFB_SHF_TABLE_REVERSE, SIMD_CONSTANTS};
17 +
use crate::enums::Reflector;
18 +
use crate::structs::CrcState;
19 +
use crate::traits::{ArchOps, EnhancedCrcWidth};
20 +
21 +
/// SIMD constants for reflected 32-bit-space CRC operations
22 +
pub const WIDTH32_CONSTANTS_REFLECTED: [[u64; 2]; 4] = [
23 +
    [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
24 +
    [0x8080808080808080, 0x8080808080808080], // mask1
25 +
    [0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF], // mask2 reverse
26 +
    [0x0000000000000000, 0x0000000000000000], // unused
27 +
];
28 +
29 +
/// SIMD constants for forward (non-reflected) 32-bit-space CRC operations
30 +
pub const WIDTH32_CONSTANTS_FORWARD: [[u64; 2]; 4] = [
31 +
    [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
32 +
    [0x8080808080808080, 0x8080808080808080], // mask1
33 +
    [0xffffffffffffffff, 0x00000000ffffffff], // mask2 forward
34 +
    [0x0000000000000000, 0x0000000000000000], // unused
35 +
];
36 +
37 +
/// Load SIMD constants for 32-bit-space CRC operations
38 +
#[inline(always)]
39 +
pub fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
40 +
    if reflected {
41 +
        WIDTH32_CONSTANTS_REFLECTED
42 +
    } else {
43 +
        WIDTH32_CONSTANTS_FORWARD
44 +
    }
45 +
}
46 +
47 +
/// Fold 16 bytes for 32-bit-space CRC operations (used by CRC-16 and CRC-32)
48 +
#[inline(always)]
49 +
pub unsafe fn fold_16<T: ArchOps>(
50 +
    state: &mut CrcState<T::Vector>,
51 +
    coeff: T::Vector,
52 +
    data_to_xor: T::Vector,
53 +
    ops: &T,
54 +
) where
55 +
    T::Vector: Copy,
56 +
{
57 +
    let (h, l) = if state.reflected {
58 +
        (
59 +
            ops.carryless_mul_10(state.value, coeff),
60 +
            ops.carryless_mul_01(state.value, coeff),
61 +
        )
62 +
    } else {
63 +
        (
64 +
            ops.carryless_mul_00(state.value, coeff),
65 +
            ops.carryless_mul_11(state.value, coeff),
66 +
        )
67 +
    };
68 +
    state.value = ops.xor3_vectors(h, l, data_to_xor);
69 +
}
70 +
71 +
/// Fold to width for 32-bit-space CRC operations (used by CRC-16 and CRC-32)
72 +
#[inline(always)]
73 +
pub unsafe fn fold_width<T: ArchOps>(state: &mut CrcState<T::Vector>, high: u64, low: u64, ops: &T)
74 +
where
75 +
    T::Vector: Copy,
76 +
{
77 +
    let coeff_vector_low = ops.create_vector_from_u64_pair_non_reflected(0, low);
78 +
    let coeff_vector_high = ops.create_vector_from_u64_pair_non_reflected(high, 0);
79 +
80 +
    state.value = if state.reflected {
81 +
        ops.xor_vectors(
82 +
            ops.carryless_mul_00(state.value, coeff_vector_low),
83 +
            ops.shift_right_8(state.value),
84 +
        )
85 +
    } else {
86 +
        ops.xor_vectors(
87 +
            ops.carryless_mul_01(state.value, coeff_vector_low),
88 +
            ops.shift_left_8(state.value),
89 +
        )
90 +
    };
91 +
92 +
    let (clmul, masked) = if state.reflected {
93 +
        let mask2 = ops.load_aligned(&[0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF]);
94 +
        let masked = ops.and_vectors(state.value, mask2);
95 +
        let shifted = ops.shift_left_12(state.value);
96 +
        let clmul = ops.carryless_mul_11(shifted, coeff_vector_high);
97 +
        (clmul, masked)
98 +
    } else {
99 +
        let mask2 = ops.load_aligned(&[0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF]);
100 +
        let masked = ops.and_vectors(state.value, mask2);
101 +
        let shifted = ops.shift_right_12(state.value);
102 +
        let clmul = ops.carryless_mul_10(shifted, coeff_vector_high);
103 +
        (clmul, masked)
104 +
    };
105 +
106 +
    state.value = ops.xor_vectors(clmul, masked);
107 +
}
108 +
109 +
/// Barrett reduction for 32-bit-space CRC operations (used by CRC-16 and CRC-32)
110 +
///
111 +
/// Returns the raw u64 values from the vector; caller extracts appropriate bits:
112 +
/// - CRC-32: extracts 32 bits
113 +
/// - CRC-16: extracts 16 bits (after scaling back from 32-bit space)
114 +
#[inline(always)]
115 +
pub unsafe fn barrett_reduction<T: ArchOps>(
116 +
    state: &CrcState<T::Vector>,
117 +
    poly: u64,
118 +
    mu: u64,
119 +
    ops: &T,
120 +
) -> [u64; 2]
121 +
where
122 +
    T::Vector: Copy,
123 +
{
124 +
    let x = state.value;
125 +
    let mu_poly = ops.create_vector_from_u64_pair_non_reflected(poly, mu);
126 +
127 +
    if state.reflected {
128 +
        let clmul1 = ops.carryless_mul_00(x, mu_poly);
129 +
        let clmul2 = ops.carryless_mul_10(clmul1, mu_poly);
130 +
        let xorred = ops.xor_vectors(x, clmul2);
131 +
        ops.extract_u64s(xorred)
132 +
    } else {
133 +
        let clmul1 = ops.shift_left_4(ops.carryless_mul_01(x, mu_poly));
134 +
        let clmul2_shifted = ops.shift_left_4(ops.carryless_mul_11(clmul1, mu_poly));
135 +
        let final_xor = ops.xor_vectors(clmul2_shifted, x);
136 +
        ops.extract_u64s(final_xor)
137 +
    }
138 +
}
139 +
140 +
/// Create coefficient vector for 32-bit-space CRC operations (used by CRC-16 and CRC-32)
141 +
#[inline(always)]
142 +
pub unsafe fn create_coefficient<T: ArchOps>(high: u64, low: u64, ops: &T) -> T::Vector
143 +
where
144 +
    T::Vector: Copy,
145 +
{
146 +
    ops.create_vector_from_u64_pair_non_reflected(high, low)
147 +
}
148 +
149 +
/// Get shuffle table pointer for 32-bit-space CRC operations (used by CRC-16 and CRC-32)
150 +
#[inline(always)]
151 +
pub fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) {
152 +
    if reflected {
153 +
        let base_ptr = &PSHUFB_SHF_TABLE_REVERSE as *const _ as *const u8;
154 +
        (base_ptr, remaining_len)
155 +
    } else {
156 +
        let base_ptr = &PSHUFB_SHF_TABLE_FORWARD as *const _ as *const u8;
157 +
        (base_ptr, 16 - remaining_len)
158 +
    }
159 +
}
160 +
161 +
/// Perform final reduction for 32-bit-space CRC operations (used by CRC-16 and CRC-32)
162 +
///
163 +
/// Returns the raw u64 values; caller extracts appropriate bits.
164 +
#[inline(always)]
165 +
pub unsafe fn perform_final_reduction<T: ArchOps>(
166 +
    state: T::Vector,
167 +
    reflected: bool,
168 +
    keys: &[u64; 23],
169 +
    ops: &T,
170 +
) -> [u64; 2]
171 +
where
172 +
    T::Vector: Copy,
173 +
{
174 +
    let mut crc_state = CrcState {
175 +
        value: state,
176 +
        reflected,
177 +
    };
178 +
179 +
    // Fold 16 bytes into 8 bytes, then 8 bytes into 4 bytes
180 +
    fold_width(&mut crc_state, keys[6], keys[5], ops);
181 +
182 +
    // Perform Barrett reduction to finalize
183 +
    barrett_reduction(&crc_state, keys[8], keys[7], ops)
184 +
}
185 +
186 +
/// Process inputs smaller than 16 bytes for 32-bit-space CRC operations (used by CRC-16 and CRC-32)
187 +
#[inline]
188 +
#[cfg_attr(
189 +
    any(target_arch = "x86", target_arch = "x86_64"),
190 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
191 +
)]
192 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
193 +
pub unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(
194 +
    data: &[u8],
195 +
    state: &mut CrcState<T::Vector>,
196 +
    reflector: &Reflector<T::Vector>,
197 +
    keys: &[u64; 23],
198 +
    ops: &T,
199 +
) -> W::Value
200 +
where
201 +
    T::Vector: Copy,
202 +
{
203 +
    let mut buffer = [0u8; CRC_CHUNK_SIZE];
204 +
    if state.reflected {
205 +
        buffer[CRC_CHUNK_SIZE - data.len()..].copy_from_slice(data);
206 +
    } else {
207 +
        buffer[..data.len()].copy_from_slice(data);
208 +
    }
209 +
210 +
    let len = data.len() as i32;
211 +
    let base = &PSHUFB_SHF_TABLE_REVERSE as *const _ as *const u8;
212 +
213 +
    let xmm7 = if state.reflected {
214 +
        let data = ops.load_bytes(buffer.as_ptr());
215 +
        let mask1 = ops.load_aligned(&SIMD_CONSTANTS[1]);
216 +
217 +
        let ptr = base.add(if len < 4 {
218 +
            8 + len as usize
219 +
        } else {
220 +
            len as usize
221 +
        });
222 +
        let mask = ops.load_bytes(ptr);
223 +
        let modified_mask = ops.xor_vectors(mask, mask1);
224 +
        let shuffled_crc = ops.shuffle_bytes(state.value, modified_mask);
225 +
226 +
        ops.xor_vectors(
227 +
            if len < 4 {
228 +
                ops.shift_right_8(data)
229 +
            } else {
230 +
                data
231 +
            },
232 +
            shuffled_crc,
233 +
        )
234 +
    } else {
235 +
        let data_arr = ops.load_bytes(buffer.as_ptr());
236 +
        let reflected_data = algorithm::reflect_bytes(reflector, data_arr, ops);
237 +
        let data_with_crc = ops.xor_vectors(reflected_data, state.value);
238 +
239 +
        if len < 4 {
240 +
            let result = match len {
241 +
                3 => ops.shift_right_5(data_with_crc),
242 +
                2 => ops.shift_right_6(data_with_crc),
243 +
                1 => ops.shift_right_7(data_with_crc),
244 +
                _ => data_with_crc,
245 +
            };
246 +
247 +
            return W::barrett_reduction(
248 +
                &CrcState {
249 +
                    value: result,
250 +
                    reflected: false,
251 +
                },
252 +
                keys[8],
253 +
                keys[7],
254 +
                ops,
255 +
            );
256 +
        }
257 +
258 +
        let base = &PSHUFB_SHF_TABLE_FORWARD as *const _ as *const u8;
259 +
        let ptr = base.add(16 - len as usize);
260 +
        let x0 = ops.load_bytes(ptr);
261 +
        let mask1 = ops.load_aligned(&SIMD_CONSTANTS[1]);
262 +
        let x0 = ops.xor_vectors(x0, mask1);
263 +
264 +
        if len < 8 {
265 +
            ops.shuffle_bytes(data_with_crc, x0)
266 +
        } else {
267 +
            let mut xmm7 = ops.load_bytes(buffer.as_ptr());
268 +
            if let Reflector::ForwardReflector { smask } = reflector {
269 +
                xmm7 = ops.shuffle_bytes(xmm7, *smask);
270 +
            }
271 +
            xmm7 = ops.xor_vectors(xmm7, state.value);
272 +
            let ptr = base.add(16 - len as usize);
273 +
            let x0 = ops.load_bytes(ptr);
274 +
            let xmm0 = ops.xor_vectors(x0, mask1);
275 +
276 +
            ops.shuffle_bytes(xmm7, xmm0)
277 +
        }
278 +
    };
279 +
280 +
    if len >= 4 {
281 +
        return W::perform_final_reduction(xmm7, state.reflected, keys, ops);
282 +
    }
283 +
284 +
    let final_state = CrcState {
285 +
        value: xmm7,
286 +
        reflected: state.reflected,
287 +
    };
288 +
289 +
    W::barrett_reduction(&final_state, keys[8], keys[7], ops)
290 +
}
added vendor/crc-fast/src/crc64/algorithm.rs +298 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides the CRC-64 implementation for areas where it differs from CRC-32.
4 +
5 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
6 +
7 +
use crate::algorithm;
8 +
use crate::consts::{CRC_CHUNK_SIZE, CRC_HALF_CHUNK_SIZE};
9 +
use crate::crc64::consts::SIMD_CONSTANTS;
10 +
use crate::enums::Reflector;
11 +
use crate::structs::CrcState;
12 +
use crate::traits::{ArchOps, EnhancedCrcWidth};
13 +
14 +
impl EnhancedCrcWidth for crate::structs::Width64 {
15 +
    #[inline(always)]
16 +
    fn load_constants(_reflected: bool) -> [[u64; 2]; 4] {
17 +
        [
18 +
            [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
19 +
            [0x8080808080808080, 0x8080808080808080], // mask1 (mask3 reflected)
20 +
            [0xffffffffffffffff, 0x00000000ffffffff], // mask2
21 +
            [0x0000000000000000, 0xffffffffffffffff], // mask3 (forward)
22 +
        ]
23 +
    }
24 +
25 +
    #[inline(always)]
26 +
    unsafe fn create_state<T: ArchOps>(
27 +
        value: Self::Value,
28 +
        reflected: bool,
29 +
        ops: &T,
30 +
    ) -> CrcState<T::Vector>
31 +
    where
32 +
        T::Vector: Copy,
33 +
    {
34 +
        let vector = if reflected {
35 +
            ops.create_vector_from_u64(value, false) // Set low 64 bits
36 +
        } else {
37 +
            ops.create_vector_from_u64(value, true) // Set high 64 bits
38 +
        };
39 +
40 +
        CrcState {
41 +
            value: vector,
42 +
            reflected,
43 +
        }
44 +
    }
45 +
46 +
    #[inline(always)]
47 +
    unsafe fn extract_result<T: ArchOps>(vector: T::Vector, reflected: bool, ops: &T) -> Self::Value
48 +
    where
49 +
        T::Vector: Copy,
50 +
    {
51 +
        let u64s = ops.extract_u64s(vector);
52 +
        if reflected {
53 +
            u64s[0] // Low 64 bits for reflected mode
54 +
        } else {
55 +
            u64s[1] // High 64 bits for non-reflected mode
56 +
        }
57 +
    }
58 +
59 +
    #[inline(always)]
60 +
    unsafe fn fold_16<T: ArchOps>(
61 +
        state: &mut CrcState<T::Vector>,
62 +
        coeff: T::Vector,
63 +
        data_to_xor: T::Vector,
64 +
        ops: &T,
65 +
    ) where
66 +
        T::Vector: Copy,
67 +
    {
68 +
        // CRC-64 specific implementation for folding 16 bytes
69 +
        state.value = {
70 +
            ops.xor3_vectors(
71 +
                ops.carryless_mul_00(state.value, coeff),
72 +
                ops.carryless_mul_11(state.value, coeff),
73 +
                data_to_xor,
74 +
            )
75 +
        };
76 +
    }
77 +
78 +
    #[inline(always)]
79 +
    unsafe fn fold_width<T: ArchOps>(state: &mut CrcState<T::Vector>, high: u64, low: u64, ops: &T)
80 +
    where
81 +
        T::Vector: Copy,
82 +
    {
83 +
        // CRC-64 specific implementation for folding 8 bytes
84 +
        let coeff = Self::create_coefficient(high, low, state.reflected, ops);
85 +
86 +
        if state.reflected {
87 +
            let h = ops.carryless_mul_01(coeff, state.value);
88 +
            let shifted = ops.shift_right_8(state.value);
89 +
90 +
            state.value = ops.xor_vectors(h, shifted);
91 +
        } else {
92 +
            let clmul = ops.carryless_mul_01(state.value, coeff);
93 +
            let shifted = ops.shift_left_8(state.value);
94 +
95 +
            state.value = ops.xor_vectors(clmul, shifted);
96 +
        }
97 +
    }
98 +
99 +
    #[inline(always)]
100 +
    unsafe fn barrett_reduction<T: ArchOps>(
101 +
        state: &CrcState<T::Vector>,
102 +
        poly: u64,
103 +
        mu: u64,
104 +
        ops: &T,
105 +
    ) -> Self::Value
106 +
    where
107 +
        T::Vector: Copy,
108 +
    {
109 +
        // CRC-64 Barrett reduction
110 +
        let x = state.value;
111 +
        let mu_poly = Self::create_coefficient(mu, poly, state.reflected, ops);
112 +
113 +
        if state.reflected {
114 +
            let clmul1 = ops.carryless_mul_00(x, mu_poly);
115 +
            let clmul2 = ops.carryless_mul_10(clmul1, mu_poly);
116 +
            let clmul1_shifted = ops.shift_left_8(clmul1);
117 +
            let final_xor = ops.xor3_vectors(clmul2, clmul1_shifted, x);
118 +
119 +
            ops.extract_u64s(final_xor)[1]
120 +
        } else {
121 +
            // Load mask3 for non-reflected mode
122 +
            let mask3 = ops.load_aligned(&[0x0000000000000000, 0xffffffffffffffff]);
123 +
            let x1 = ops.and_vectors(x, mask3);
124 +
            let clmul1 = ops.carryless_mul_11(x1, mu_poly);
125 +
            let clmul2 = ops.carryless_mul_01(ops.xor_vectors(clmul1, x1), mu_poly);
126 +
            let final_xor = ops.xor_vectors(clmul2, x);
127 +
128 +
            ops.extract_u64s(final_xor)[0]
129 +
        }
130 +
    }
131 +
132 +
    #[inline(always)]
133 +
    unsafe fn create_coefficient<T: ArchOps>(
134 +
        high: u64,
135 +
        low: u64,
136 +
        reflected: bool,
137 +
        ops: &T,
138 +
    ) -> T::Vector
139 +
    where
140 +
        T::Vector: Copy,
141 +
    {
142 +
        ops.create_vector_from_u64_pair(high, low, reflected)
143 +
    }
144 +
145 +
    #[inline(always)]
146 +
    unsafe fn perform_final_reduction<T: ArchOps>(
147 +
        state: T::Vector,
148 +
        reflected: bool,
149 +
        keys: &[u64; 23],
150 +
        ops: &T,
151 +
    ) -> Self::Value
152 +
    where
153 +
        T::Vector: Copy,
154 +
    {
155 +
        let mut crc_state = CrcState {
156 +
            value: state,
157 +
            reflected,
158 +
        };
159 +
160 +
        // Fold 16 bytes into 8 bytes
161 +
        Self::fold_width(&mut crc_state, keys[6], keys[5], ops);
162 +
163 +
        // Perform Barrett reduction to finalize
164 +
        Self::barrett_reduction(&crc_state, keys[8], keys[7], ops)
165 +
    }
166 +
167 +
    #[inline(always)]
168 +
    fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) {
169 +
        use crate::crc64::consts::{PSBTBL_FORWARD, PSBTBL_REVERSE};
170 +
171 +
        if reflected {
172 +
            // For reflected mode
173 +
            let base_ptr = &PSBTBL_REVERSE as *const _ as *const u8;
174 +
            let offset = if remaining_len <= CRC_CHUNK_SIZE {
175 +
                remaining_len
176 +
            } else {
177 +
                let real_remaining = remaining_len % CRC_CHUNK_SIZE;
178 +
                if real_remaining == 0 {
179 +
                    0
180 +
                } else {
181 +
                    real_remaining
182 +
                }
183 +
            };
184 +
185 +
            (base_ptr, offset)
186 +
        } else {
187 +
            // For non-reflected mode
188 +
            let base_ptr = &PSBTBL_FORWARD as *const _ as *const u8;
189 +
            let offset = if remaining_len <= CRC_CHUNK_SIZE {
190 +
                CRC_CHUNK_SIZE - remaining_len
191 +
            } else {
192 +
                let real_remaining = remaining_len % CRC_CHUNK_SIZE;
193 +
                if real_remaining == 0 {
194 +
                    0
195 +
                } else {
196 +
                    CRC_CHUNK_SIZE - real_remaining
197 +
                }
198 +
            };
199 +
200 +
            (base_ptr, offset)
201 +
        }
202 +
    }
203 +
}
204 +
205 +
/// Process inputs smaller than 16 bytes
206 +
#[inline]
207 +
#[cfg_attr(
208 +
    any(target_arch = "x86", target_arch = "x86_64"),
209 +
    target_feature(enable = "ssse3,sse4.1,pclmulqdq")
210 +
)]
211 +
#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
212 +
pub(crate) unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(
213 +
    data: &[u8],
214 +
    state: &mut CrcState<T::Vector>,
215 +
    reflector: &Reflector<T::Vector>,
216 +
    keys: &[u64; 23],
217 +
    ops: &T,
218 +
) -> W::Value
219 +
where
220 +
    T::Vector: Copy,
221 +
{
222 +
    // Create a zero-initialized aligned buffer
223 +
    let mut buffer = [0u8; CRC_CHUNK_SIZE];
224 +
225 +
    // Copy input data into the buffer
226 +
    buffer[..data.len()].copy_from_slice(data);
227 +
228 +
    // Get the length for processing
229 +
    let len = data.len() as i32;
230 +
231 +
    // Process the buffer
232 +
    let xmm7 = if state.reflected {
233 +
        // Get base pointer and standard offset from the trait method
234 +
        let (base_ptr, standard_offset) = W::get_last_bytes_table_ptr(true, len as usize);
235 +
236 +
        // Apply special adjustment for 1-7 bytes
237 +
        let ptr = if len < CRC_HALF_CHUNK_SIZE as i32 {
238 +
            // For 1-7 bytes: Add CRC_HALF_CHUNK_SIZE (8) to the offset
239 +
            base_ptr.add(standard_offset + CRC_HALF_CHUNK_SIZE)
240 +
        } else {
241 +
            // For 8-15 bytes: Use the standard offset directly
242 +
            base_ptr.add(standard_offset)
243 +
        };
244 +
245 +
        // Load shuffle mask
246 +
        let xmm0 = ops.load_bytes(ptr);
247 +
248 +
        // Apply shuffle to data XORed with initial state
249 +
        let data_with_crc = ops.xor_vectors(ops.load_bytes(buffer.as_ptr()), state.value);
250 +
251 +
        ops.shuffle_bytes(data_with_crc, xmm0)
252 +
    } else {
253 +
        // Calculate pointer offset for forward table
254 +
        // For non-reflected mode, we need to apply a special base offset
255 +
        let base_offset = if len < CRC_HALF_CHUNK_SIZE as i32 {
256 +
            24
257 +
        } else {
258 +
            16
259 +
        };
260 +
261 +
        // Use the trait method to get the base pointer and standard offset
262 +
        let (base_ptr, _) = W::get_last_bytes_table_ptr(false, len as usize);
263 +
264 +
        // Instead of using standard_offset directly, we use our special base_offset
265 +
        // This is the key difference that makes the code work correctly
266 +
        let ptr = base_ptr.add(base_offset - len as usize);
267 +
268 +
        // Load and reflect data
269 +
        let reflected_data =
270 +
            algorithm::reflect_bytes(reflector, ops.load_bytes(buffer.as_ptr()), ops);
271 +
        let data_with_crc = ops.xor_vectors(reflected_data, state.value);
272 +
273 +
        // Load shuffle mask
274 +
        let x0 = ops.load_bytes(ptr);
275 +
276 +
        if len >= CRC_HALF_CHUNK_SIZE as i32 {
277 +
            // For lengths 8-15, XOR with mask1
278 +
            let mask1 = ops.load_aligned(&SIMD_CONSTANTS[1]);
279 +
            ops.shuffle_bytes(data_with_crc, ops.xor_vectors(x0, mask1))
280 +
        } else {
281 +
            // For lengths 1-7, just return shuffled data
282 +
            ops.shuffle_bytes(data_with_crc, x0)
283 +
        }
284 +
    };
285 +
286 +
    if len >= CRC_HALF_CHUNK_SIZE as i32 {
287 +
        // For 8-15 bytes, perform additional folding
288 +
        return W::perform_final_reduction(xmm7, state.reflected, keys, ops);
289 +
    }
290 +
291 +
    let final_state = CrcState {
292 +
        value: xmm7,
293 +
        reflected: state.reflected,
294 +
    };
295 +
296 +
    // Barrett reduction to finalize
297 +
    W::barrett_reduction(&final_state, keys[8], keys[7], ops)
298 +
}
added vendor/crc-fast/src/crc64/consts.rs +411 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![allow(dead_code)]
4 +
5 +
use crate::consts::*;
6 +
use crate::structs::Algorithm;
7 +
use crate::CrcAlgorithm;
8 +
use crate::CrcParams;
9 +
10 +
pub const CRC_64_ECMA_182: Algorithm<u64> = Algorithm {
11 +
    width: 64,
12 +
    poly: 0x42f0e1eba9ea3693,
13 +
    init: 0x0,
14 +
    refin: false,
15 +
    refout: false,
16 +
    xorout: 0x0,
17 +
    check: 0x6c40df5f0b497347,
18 +
    residue: 0x0,
19 +
};
20 +
21 +
pub const CRC_64_GO_ISO: Algorithm<u64> = Algorithm {
22 +
    width: 64,
23 +
    poly: 0x1b,
24 +
    init: 0xffffffffffffffff,
25 +
    refin: true,
26 +
    refout: true,
27 +
    xorout: 0xffffffffffffffff,
28 +
    check: 0xb90956c775a41001,
29 +
    residue: 0x5300000000000000,
30 +
};
31 +
32 +
pub const CRC_64_MS: Algorithm<u64> = Algorithm {
33 +
    width: 64,
34 +
    poly: 0x259c84cba6426349,
35 +
    init: 0xffffffffffffffff,
36 +
    refin: true,
37 +
    refout: true,
38 +
    xorout: 0x0,
39 +
    check: 0x75d4b74f024eceea,
40 +
    residue: 0x0,
41 +
};
42 +
43 +
pub const CRC_64_NVME: Algorithm<u64> = Algorithm {
44 +
    width: 64,
45 +
    poly: 0xad93d23594c93659,
46 +
    init: 0xffffffffffffffff,
47 +
    refin: true,
48 +
    refout: true,
49 +
    xorout: 0xffffffffffffffff,
50 +
    check: 0xae8b14860a799888,
51 +
    residue: 0xf310303b2b6f6e42,
52 +
};
53 +
54 +
pub const CRC_64_REDIS: Algorithm<u64> = Algorithm {
55 +
    width: 64,
56 +
    poly: 0xad93d23594c935a9,
57 +
    init: 0x0,
58 +
    refin: true,
59 +
    refout: true,
60 +
    xorout: 0x0,
61 +
    check: 0xe9c6d914c4b8d9ca,
62 +
    residue: 0x0,
63 +
};
64 +
65 +
pub const CRC_64_WE: Algorithm<u64> = Algorithm {
66 +
    width: 64,
67 +
    poly: 0x42f0e1eba9ea3693,
68 +
    init: 0xffffffffffffffff,
69 +
    refin: false,
70 +
    refout: false,
71 +
    xorout: 0xffffffffffffffff,
72 +
    check: 0x62ec59e3f1a4f00a,
73 +
    residue: 0xfcacbebd5931a992,
74 +
};
75 +
76 +
pub const CRC_64_XZ: Algorithm<u64> = Algorithm {
77 +
    width: 64,
78 +
    poly: 0x42f0e1eba9ea3693,
79 +
    init: 0xffffffffffffffff,
80 +
    refin: true,
81 +
    refout: true,
82 +
    xorout: 0xffffffffffffffff,
83 +
    check: 0x995dc9bbdf1939fa,
84 +
    residue: 0x49958c9abd7d353f,
85 +
};
86 +
87 +
// width=64 poly=0x42f0e1eba9ea3693 init=0x0000000000000000 refin=false refout=false xorout=0x0000000000000000 check=0x6c40df5f0b497347 residue=0x0000000000000000 name="CRC-64/ECMA-182"
88 +
pub const CRC64_ECMA_182: CrcParams = CrcParams {
89 +
    algorithm: CrcAlgorithm::Crc64Ecma182,
90 +
    name: NAME_CRC64_ECMA_182,
91 +
    width: CRC_64_ECMA_182.width,
92 +
    poly: CRC_64_ECMA_182.poly,
93 +
    init: CRC_64_ECMA_182.init,
94 +
    init_algorithm: CRC_64_ECMA_182.init,
95 +
    refin: CRC_64_ECMA_182.refin,   // false
96 +
    refout: CRC_64_ECMA_182.refout, // false
97 +
    xorout: CRC_64_ECMA_182.xorout,
98 +
    check: CRC_64_ECMA_182.check,
99 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_42F0E1EBA9EA3693_FORWARD),
100 +
};
101 +
102 +
// width=64 poly=0x000000000000001b init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0xb90956c775a41001 residue=0x5300000000000000 name="CRC-64/GO-ISO"
103 +
pub const CRC64_GO_ISO: CrcParams = CrcParams {
104 +
    algorithm: CrcAlgorithm::Crc64GoIso,
105 +
    name: NAME_CRC64_GO_ISO,
106 +
    width: CRC_64_GO_ISO.width,
107 +
    poly: CRC_64_GO_ISO.poly,
108 +
    init: CRC_64_GO_ISO.init,
109 +
    init_algorithm: CRC_64_GO_ISO.init,
110 +
    refin: CRC_64_GO_ISO.refin,   // true
111 +
    refout: CRC_64_GO_ISO.refout, // true
112 +
    xorout: CRC_64_GO_ISO.xorout,
113 +
    check: CRC_64_GO_ISO.check,
114 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_000000000000001B_REFLECTED),
115 +
};
116 +
117 +
// width=64 poly=0x259c84cba6426349 init=0xffffffffffffffff refin=true refout=true xorout=0x0000000000000000 check=0x75d4b74f024eceea residue=0x0000000000000000 name="CRC-64/MS"
118 +
pub const CRC64_MS: CrcParams = CrcParams {
119 +
    algorithm: CrcAlgorithm::Crc64Ms,
120 +
    name: NAME_CRC64_MS,
121 +
    width: 64,
122 +
    poly: CRC_64_MS.poly,
123 +
    init: CRC_64_MS.init,
124 +
    init_algorithm: CRC_64_MS.init,
125 +
    refin: CRC_64_MS.refin,   // true
126 +
    refout: CRC_64_MS.refout, // true
127 +
    xorout: CRC_64_MS.xorout,
128 +
    check: CRC_64_MS.check,
129 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_259C84CBA6426349_REFLECTED),
130 +
};
131 +
132 +
// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme
133 +
// width=64 poly=0xad93d23594c93659 init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0xae8b14860a799888 residue=0xf310303b2b6f6e42 name="CRC-64/NVME"
134 +
pub const CRC64_NVME: CrcParams = CrcParams {
135 +
    algorithm: CrcAlgorithm::Crc64Nvme,
136 +
    name: NAME_CRC64_NVME,
137 +
    width: CRC_64_NVME.width,
138 +
    poly: CRC_64_NVME.poly,
139 +
    init: CRC_64_NVME.init,
140 +
    init_algorithm: CRC_64_NVME.init,
141 +
    refin: CRC_64_NVME.refin,   // true
142 +
    refout: CRC_64_NVME.refout, // true
143 +
    xorout: CRC_64_NVME.xorout,
144 +
    check: CRC_64_NVME.check,
145 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_AD93D23594C93659_REFLECTED),
146 +
};
147 +
148 +
// width=64 poly=0xad93d23594c935a9 init=0x0000000000000000 refin=true refout=true xorout=0x0000000000000000 check=0xe9c6d914c4b8d9ca residue=0x0000000000000000 name="CRC-64/REDIS"
149 +
pub const CRC64_REDIS: CrcParams = CrcParams {
150 +
    algorithm: CrcAlgorithm::Crc64Redis,
151 +
    name: NAME_CRC64_REDIS,
152 +
    width: CRC_64_REDIS.width,
153 +
    poly: CRC_64_REDIS.poly,
154 +
    init: CRC_64_REDIS.init,
155 +
    init_algorithm: CRC_64_REDIS.init,
156 +
    refin: CRC_64_REDIS.refin,   // true
157 +
    refout: CRC_64_REDIS.refout, // true
158 +
    xorout: CRC_64_REDIS.xorout,
159 +
    check: CRC_64_REDIS.check,
160 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_AD93D23594C935A9_REFLECTED),
161 +
};
162 +
163 +
// width=64 poly=0x42f0e1eba9ea3693 init=0xffffffffffffffff refin=false refout=false xorout=0xffffffffffffffff check=0x62ec59e3f1a4f00a residue=0xfcacbebd5931a992 name="CRC-64/WE"
164 +
pub const CRC64_WE: CrcParams = CrcParams {
165 +
    algorithm: CrcAlgorithm::Crc64We,
166 +
    name: NAME_CRC64_WE,
167 +
    width: CRC_64_WE.width,
168 +
    poly: CRC_64_WE.poly,
169 +
    init: CRC_64_WE.init,
170 +
    init_algorithm: CRC_64_WE.init,
171 +
    refin: CRC_64_WE.refin,   // false
172 +
    refout: CRC_64_WE.refout, // false
173 +
    xorout: CRC_64_WE.xorout,
174 +
    check: CRC_64_WE.check,
175 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_42F0E1EBA9EA3693_FORWARD),
176 +
};
177 +
178 +
// width=64 poly=0x42f0e1eba9ea3693 init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0x995dc9bbdf1939fa residue=0x49958c9abd7d353f name="CRC-64/XZ"
179 +
pub const CRC64_XZ: CrcParams = CrcParams {
180 +
    algorithm: CrcAlgorithm::Crc64Xz,
181 +
    name: NAME_CRC64_XZ,
182 +
    width: CRC_64_XZ.width,
183 +
    poly: CRC_64_XZ.poly,
184 +
    init: CRC_64_XZ.init,
185 +
    init_algorithm: CRC_64_XZ.init,
186 +
    refin: CRC_64_XZ.refin,   // true
187 +
    refout: CRC_64_XZ.refout, // true
188 +
    xorout: CRC_64_XZ.xorout,
189 +
    check: CRC_64_XZ.check,
190 +
    keys: crate::CrcKeysStorage::from_keys_fold_256(KEYS_42F0E1EBA9EA3693_REFLECTED),
191 +
};
192 +
193 +
// CRC-64/MS
194 +
const KEYS_259C84CBA6426349_REFLECTED: [u64; 23] = [
195 +
    0x0000000000000000,
196 +
    0xcef05cca14bbf4df,
197 +
    0xfd5d7a0700b5ba38,
198 +
    0xafde70a30ebb4286,
199 +
    0xe7a651bf12fbb17b,
200 +
    0xcef05cca14bbf4df,
201 +
    0x0000000000000000,
202 +
    0xd7eb06822197a109,
203 +
    0x258c84cba6427349,
204 +
    0x9f5bbc2a0e2e4c6f,
205 +
    0x50e15bfbd337753a,
206 +
    0x064a94c5212d44f4,
207 +
    0x4aaa0531d46f3c70,
208 +
    0xebd4e5a2eb6d83a1,
209 +
    0x295b872fea8473f0,
210 +
    0xa62bc2d50bf03c03,
211 +
    0xd3e2dc3a51dacee1,
212 +
    0x4aa4564b4042092b,
213 +
    0x717984ed338c465f,
214 +
    0x70bd522114faceb8,
215 +
    0x2188097f5687b43c,
216 +
    0xb7c2f9fa47c4fe55,
217 +
    0x8dccaf9d6169d0fa,
218 +
];
219 +
220 +
// CRC-64/REDIS
221 +
const KEYS_AD93D23594C935A9_REFLECTED: [u64; 23] = [
222 +
    0x0000000000000000,
223 +
    0x381d0015c96f4444,
224 +
    0xd9d7be7d505da32c,
225 +
    0x768361524d29ed0b,
226 +
    0xcc26fa7c57f8054c,
227 +
    0x381d0015c96f4444,
228 +
    0x0000000000000000,
229 +
    0x3e6cfa329aef9f77,
230 +
    0x2b5926535897936b,
231 +
    0x5bc94ba8e2087636,
232 +
    0x6cf09c8f37710b75,
233 +
    0x3885fd59e440d95a,
234 +
    0xbccba3936411fb7e,
235 +
    0xe4dd0d81cbfce585,
236 +
    0xb715e37b96ed8633,
237 +
    0xf49784a634f014e4,
238 +
    0xaf86efb16d9ab4fb,
239 +
    0x7b3211a760160db8,
240 +
    0xa062b2319d66692f,
241 +
    0xef3d1d18ed889ed2,
242 +
    0x6ba4d760ab38201e,
243 +
    0x9471a5389095fe44,
244 +
    0x9a8908341a6d6d52,
245 +
];
246 +
247 +
// CRC-64/ECMA-182, CRC-64/WE
248 +
const KEYS_42F0E1EBA9EA3693_FORWARD: [u64; 23] = [
249 +
    0x0000000000000000, // unused placeholder to match 1-based indexing
250 +
    0x05f5c3c7eb52fab6, // 2^(64* 2) mod P(x)
251 +
    0x4eb938a7d257740e, // 2^(64* 3) mod P(x)
252 +
    0x05cf79dea9ac37d6, // 2^(64*16) mod P(x)
253 +
    0x001067e571d7d5c2, // 2^(64*17) mod P(x)
254 +
    0x05f5c3c7eb52fab6, // 2^(64* 2) mod P(x)
255 +
    0x0000000000000000, // 2^(64* 1) mod P(x)
256 +
    0x578d29d06cc4f872, // floor(2^128/P(x)) - 2^64, mu
257 +
    0x42f0e1eba9ea3693, // P(x) - 2^64, poly_simd
258 +
    0xe464f4df5fb60ac1, // 2^(64*14) mod P(x)
259 +
    0xb649c5b35a759cf2, // 2^(64*15) mod P(x)
260 +
    0x9af04e1eff82d0dd, // 2^(64*12) mod P(x)
261 +
    0x6e82e609297f8fe8, // 2^(64*13) mod P(x)
262 +
    0x097c516e98bd2e73, // 2^(64*10) mod P(x)
263 +
    0x0b76477b31e22e7b, // 2^(64*11) mod P(x)
264 +
    0x5f6843ca540df020, // 2^(64* 8) mod P(x)
265 +
    0xddf4b6981205b83f, // 2^(64* 9) mod P(x)
266 +
    0x54819d8713758b2c, // 2^(64* 6) mod P(x)
267 +
    0x4a6b90073eb0af5a, // 2^(64* 7) mod P(x)
268 +
    0x571bee0a227ef92b, // 2^(64* 4) mod P(x)
269 +
    0x44bef2a201b5200c, // 2^(64* 5) mod P(x)
270 +
    0x7f52691a60ddc70d,
271 +
    0x7036b0389f6a0c82,
272 +
];
273 +
274 +
// CRC-64/XZ
275 +
const KEYS_42F0E1EBA9EA3693_REFLECTED: [u64; 23] = [
276 +
    0x0000000000000000, // unused placeholder to match 1-based indexing
277 +
    0xdabe95afc7875f40, // 2^((64* 2)-1) mod P(x)
278 +
    0xe05dd497ca393ae4, // 2^((64* 3)-1) mod P(x)
279 +
    0xd7d86b2af73de740, // 2^((64*16)-1) mod P(x)
280 +
    0x8757d71d4fcc1000, // 2^((64*17)-1) mod P(x)
281 +
    0xdabe95afc7875f40, // 2^((64* 2)-1) mod P(x)
282 +
    0x0000000000000000, // 2^((64* 1)-1) mod P(x)
283 +
    0x9c3e466c172963d5, // floor((2^127)/(P(x)), mu
284 +
    0x92d8af2baf0e1e85, // P(x) - 1, poly_simd
285 +
    0x947874de595052cb, // 2^((64*14)-1) mod P(x)
286 +
    0x9e735cb59b4724da, // 2^((64*15)-1) mod P(x)
287 +
    0xe4ce2cd55fea0037, // 2^((64*12)-1) mod P(x)
288 +
    0x2fe3fd2920ce82ec, // 2^((64*13)-1) mod P(x)
289 +
    0x0e31d519421a63a5, // 2^((64*10)-1) mod P(x)
290 +
    0x2e30203212cac325, // 2^((64*11)-1) mod P(x)
291 +
    0x081f6054a7842df4, // 2^((64* 8)-1) mod P(x)
292 +
    0x6ae3efbb9dd441f3, // 2^((64* 9)-1) mod P(x)
293 +
    0x69a35d91c3730254, // 2^((64* 6)-1) mod P(x)
294 +
    0xb5ea1af9c013aca4, // 2^((64* 7)-1) mod P(x)
295 +
    0x3be653a30fe1af51, // 2^((64* 4)-1) mod P(x)
296 +
    0x60095b008a9efa44, // 2^((64* 5)-1) mod P(x)
297 +
    0xf31fd9271e228b79,
298 +
    0x8260adf2381ad81c,
299 +
];
300 +
301 +
// CRC-64/GO-ISO
302 +
const KEYS_000000000000001B_REFLECTED: [u64; 23] = [
303 +
    0x0000000000000000, // unused placeholder to match 1-based indexing
304 +
    0xf500000000000001, // 2^((64* 2)-1) mod P(x)
305 +
    0x6b70000000000001, // 2^((64* 3)-1) mod P(x)
306 +
    0xb001000000010000, // 2^((64*16)-1) mod P(x)
307 +
    0xf501b0000001b000, // 2^((64*17)-1) mod P(x)
308 +
    0xf500000000000001, // 2^((64* 2)-1) mod P(x)
309 +
    0x0000000000000000, // 2^((64* 1)-1) mod P(x)
310 +
    0xb000000000000001, // floor((2^127)/(P(x)), mu
311 +
    0xb000000000000001, // P(x) - 1, poly_simd
312 +
    0xe014514514501501, // 2^((64*14)-1) mod P(x)
313 +
    0x771db6db6db71c71, // 2^((64*15)-1) mod P(x)
314 +
    0xa101101101110001, // 2^((64*12)-1) mod P(x)
315 +
    0x1ab1ab1ab1aab001, // 2^((64*13)-1) mod P(x)
316 +
    0xf445014445000001, // 2^((64*10)-1) mod P(x)
317 +
    0x6aab71daab700001, // 2^((64*11)-1) mod P(x)
318 +
    0xb100010100000001, // 2^((64* 8)-1) mod P(x)
319 +
    0x01b001b1b0000001, // 2^((64* 9)-1) mod P(x)
320 +
    0xe145150000000001, // 2^((64* 6)-1) mod P(x)
321 +
    0x76db6c7000000001, // 2^((64* 7)-1) mod P(x)
322 +
    0xa011000000000001, // 2^((64* 4)-1) mod P(x)
323 +
    0x1b1ab00000000001, // 2^((64* 5)-1) mod P(x)
324 +
    0x45000000b0000000,
325 +
    0x6b700000f5000000,
326 +
];
327 +
328 +
// CRC-64/NVME
329 +
const KEYS_AD93D23594C93659_REFLECTED: [u64; 23] = [
330 +
    0x0000000000000000, // unused placeholder to match 1-based indexing
331 +
    0x21e9_761e_2526_21ac,
332 +
    0xeadc_41fd_2ba3_d420,
333 +
    0x5f85_2fb6_1e8d_92dc,
334 +
    0xa1ca_681e_733f_9c40,
335 +
    0x21e9_761e_2526_21ac,
336 +
    0x0000000000000000,
337 +
    0x27ec_fa32_9aef_9f77, // mu
338 +
    0x34d9_2653_5897_936b, // poly
339 +
    0x9465_8840_3d4a_dcbc,
340 +
    0xd083_dd59_4d96_319d,
341 +
    0x34f5_a24e_22d6_6e90,
342 +
    0x3c25_5f5e_bc41_4423,
343 +
    0x0336_3823_e6e7_91e5,
344 +
    0x7b0a_b10d_d0f8_09fe,
345 +
    0x6224_2240_ace5_045a,
346 +
    0x0c32_cdb3_1e18_a84a,
347 +
    0xa3ff_dc1f_e8e8_2a8b,
348 +
    0xbdd7_ac0e_e1a4_a0f0,
349 +
    0xe1e0_bb9d_45d7_a44c,
350 +
    0xb0bc_2e58_9204_f500,
351 +
    0xa043_808c_0f78_2663,
352 +
    0x37cc_d3e1_4069_cabc,
353 +
];
354 +
355 +
pub const SIMD_CONSTANTS: [[u64; 2]; 4] = [
356 +
    [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
357 +
    [0x8080808080808080, 0x8080808080808080], // mask1
358 +
    [0xffffffffffffffff, 0x00000000ffffffff], // mask2
359 +
    [0x0000000000000000, 0xffffffffffffffff], // mask3
360 +
];
361 +
362 +
/// Lookup tables for byte reflection and other operations
363 +
#[repr(C, align(16))]
364 +
pub struct AlignedTableReverse {
365 +
    row1: [u8; 16],
366 +
    row2: [u8; 16],
367 +
}
368 +
369 +
pub const PSBTBL_REVERSE: AlignedTableReverse = AlignedTableReverse {
370 +
    row1: [
371 +
        // First row (quadwords 1&2): 08786858483828100h, 08f8e8d8c8b8a8988h
372 +
        0x00, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
373 +
        0x8f,
374 +
    ],
375 +
    row2: [
376 +
        // Second row (quadwords 3&4): 00706050403020100h, 0000e0d0c0b0a0908h
377 +
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
378 +
        0x00,
379 +
    ],
380 +
};
381 +
382 +
#[repr(C, align(16))]
383 +
pub struct AlignedTableForward {
384 +
    row1: [u8; 16],
385 +
    row2: [u8; 16],
386 +
    row3: [u8; 16],
387 +
    row4: [u8; 16],
388 +
}
389 +
390 +
pub const PSBTBL_FORWARD: AlignedTableForward = AlignedTableForward {
391 +
    // First row: 08786858483828100h, 08f8e8d8c8b8a8988h
392 +
    row1: [
393 +
        0x00, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
394 +
        0x8f,
395 +
    ],
396 +
    // Second row: 00706050403020100h, 00f0e0d0c0b0a0908h
397 +
    row2: [
398 +
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
399 +
        0x0f,
400 +
    ],
401 +
    // Third row: 08080808080808080h, 00f0e0d0c0b0a0908h
402 +
    row3: [
403 +
        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
404 +
        0x0f,
405 +
    ],
406 +
    // Fourth row: 08080808080808080h, 08080808080808080h
407 +
    row4: [
408 +
        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
409 +
        0x80,
410 +
    ],
411 +
};
added vendor/crc-fast/src/crc64/mod.rs +64 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides CRC-64 support.
4 +
5 +
pub mod algorithm;
6 +
pub mod consts;
7 +
pub mod utils;
8 +
9 +
#[cfg(test)]
10 +
mod property_tests {
11 +
    use crate::test::miri_compatible_proptest_config;
12 +
    use crate::{checksum, CrcAlgorithm};
13 +
    use proptest::prelude::*;
14 +
15 +
    proptest! {
16 +
        #![proptest_config(miri_compatible_proptest_config())]
17 +
18 +
        /// Feature: crc16-hardware-acceleration, Property 4: CRC-32 and CRC-64 backwards compatibility
19 +
        /// *For any* existing CRC-32 or CRC-64 configuration and any input byte sequence, the
20 +
        /// computed checksum SHALL match the result from the `crc` crate reference implementation,
21 +
        /// ensuring no regression from CRC-16 changes.
22 +
        /// **Validates: Requirements 3.1, 3.2, 3.4**
23 +
        #[test]
24 +
        fn prop_crc64_compatibility(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
25 +
            use crate::test::consts::{RUST_CRC64_NVME, RUST_CRC64_XZ, RUST_CRC64_ECMA_182, RUST_CRC64_GO_ISO};
26 +
27 +
            // Test CRC-64/NVME (reflected)
28 +
            let our_nvme = checksum(CrcAlgorithm::Crc64Nvme, &data);
29 +
            let ref_nvme = RUST_CRC64_NVME.checksum(&data);
30 +
            prop_assert_eq!(
31 +
                our_nvme, ref_nvme,
32 +
                "CRC-64/NVME mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}",
33 +
                data.len(), our_nvme, ref_nvme
34 +
            );
35 +
36 +
            // Test CRC-64/XZ (reflected)
37 +
            let our_xz = checksum(CrcAlgorithm::Crc64Xz, &data);
38 +
            let ref_xz = RUST_CRC64_XZ.checksum(&data);
39 +
            prop_assert_eq!(
40 +
                our_xz, ref_xz,
41 +
                "CRC-64/XZ mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}",
42 +
                data.len(), our_xz, ref_xz
43 +
            );
44 +
45 +
            // Test CRC-64/ECMA-182 (forward/non-reflected)
46 +
            let our_ecma = checksum(CrcAlgorithm::Crc64Ecma182, &data);
47 +
            let ref_ecma = RUST_CRC64_ECMA_182.checksum(&data);
48 +
            prop_assert_eq!(
49 +
                our_ecma, ref_ecma,
50 +
                "CRC-64/ECMA-182 mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}",
51 +
                data.len(), our_ecma, ref_ecma
52 +
            );
53 +
54 +
            // Test CRC-64/GO-ISO (reflected)
55 +
            let our_go_iso = checksum(CrcAlgorithm::Crc64GoIso, &data);
56 +
            let ref_go_iso = RUST_CRC64_GO_ISO.checksum(&data);
57 +
            prop_assert_eq!(
58 +
                our_go_iso, ref_go_iso,
59 +
                "CRC-64/GO-ISO mismatch for {} bytes: our=0x{:016X}, ref=0x{:016X}",
60 +
                data.len(), our_go_iso, ref_go_iso
61 +
            );
62 +
        }
63 +
    }
64 +
}
added vendor/crc-fast/src/crc64/utils.rs +64 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
4 +
5 +
// SIMD intrinsics for debug printing (std only)
6 +
#[cfg(all(feature = "std", target_arch = "aarch64"))]
7 +
use core::arch::aarch64::*;
8 +
9 +
#[cfg(all(feature = "std", target_arch = "x86"))]
10 +
use core::arch::x86::*;
11 +
12 +
#[cfg(all(feature = "std", target_arch = "x86_64"))]
13 +
use core::arch::x86_64::*;
14 +
15 +
// ArchOps trait for generic vector printing (std only)
16 +
#[cfg(feature = "std")]
17 +
use crate::traits::ArchOps;
18 +
19 +
#[cfg(all(feature = "std", target_arch = "aarch64"))]
20 +
#[allow(dead_code)]
21 +
#[target_feature(enable = "aes")]
22 +
pub(crate) unsafe fn print_xmm_hex(prefix: &str, xmm: uint8x16_t) {
23 +
    let mut temp = [0u64; 2];
24 +
    vst1q_u64(temp.as_mut_ptr(), vreinterpretq_u64_u8(xmm));
25 +
    println!("{}={:#016x}{:016x}", prefix, temp[1], temp[0]);
26 +
}
27 +
28 +
#[cfg(all(feature = "std", any(target_arch = "x86", target_arch = "x86_64")))]
29 +
#[allow(dead_code)]
30 +
#[target_feature(enable = "sse4.1")]
31 +
pub(crate) unsafe fn print_xmm_hex(prefix: &str, xmm: __m128i) {
32 +
    let mut temp = [0u64; 2];
33 +
    _mm_storeu_si128(temp.as_mut_ptr() as *mut __m128i, xmm);
34 +
    println!("{}={:#016x}{:016x}", prefix, temp[1], temp[0]);
35 +
}
36 +
37 +
#[cfg(feature = "std")]
38 +
#[allow(dead_code)]
39 +
pub(crate) unsafe fn print_vector_hex<T: ArchOps>(prefix: &str, vector: T::Vector, ops: &T) {
40 +
    // Extract the u64 values from the vector using the ArchOps trait
41 +
    let values = ops.extract_u64s(vector);
42 +
43 +
    // Print in the same format as your original functions
44 +
    println!("{}={:#016x}_{:016x}", prefix, values[1], values[0]);
45 +
}
46 +
47 +
/// Print a vector as u8 array (useful for byte-level debugging)
48 +
#[cfg(feature = "std")]
49 +
#[allow(dead_code)]
50 +
pub(crate) unsafe fn print_vector_bytes<T: ArchOps>(prefix: &str, vector: T::Vector, ops: &T) {
51 +
    // Extract the u64 values
52 +
    let values = ops.extract_u64s(vector);
53 +
54 +
    // Convert to bytes for detailed inspection
55 +
    let bytes: [u8; 16] = core::mem::transmute([values[0], values[1]]);
56 +
57 +
    println!("{}=[{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x},{:02x}]",
58 +
             prefix,
59 +
             bytes[0], bytes[1], bytes[2], bytes[3],
60 +
             bytes[4], bytes[5], bytes[6], bytes[7],
61 +
             bytes[8], bytes[9], bytes[10], bytes[11],
62 +
             bytes[12], bytes[13], bytes[14], bytes[15]
63 +
    );
64 +
}
added vendor/crc-fast/src/enums.rs +159 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
use crate::consts::*;
4 +
use crate::CrcAlgorithm;
5 +
use core::fmt::{Display, Formatter};
6 +
use core::str::FromStr;
7 +
8 +
impl FromStr for CrcAlgorithm {
9 +
    type Err = ();
10 +
11 +
    fn from_str(s: &str) -> Result<Self, Self::Err> {
12 +
        match s {
13 +
            NAME_CRC16_ARC => Ok(CrcAlgorithm::Crc16Arc),
14 +
            NAME_CRC16_CDMA2000 => Ok(CrcAlgorithm::Crc16Cdma2000),
15 +
            NAME_CRC16_CMS => Ok(CrcAlgorithm::Crc16Cms),
16 +
            NAME_CRC16_DDS_110 => Ok(CrcAlgorithm::Crc16Dds110),
17 +
            NAME_CRC16_DECT_R => Ok(CrcAlgorithm::Crc16DectR),
18 +
            NAME_CRC16_DECT_X => Ok(CrcAlgorithm::Crc16DectX),
19 +
            NAME_CRC16_DNP => Ok(CrcAlgorithm::Crc16Dnp),
20 +
            NAME_CRC16_EN_13757 => Ok(CrcAlgorithm::Crc16En13757),
21 +
            NAME_CRC16_GENIBUS => Ok(CrcAlgorithm::Crc16Genibus),
22 +
            NAME_CRC16_GSM => Ok(CrcAlgorithm::Crc16Gsm),
23 +
            NAME_CRC16_IBM_3740 => Ok(CrcAlgorithm::Crc16Ibm3740),
24 +
            NAME_CRC16_IBM_SDLC => Ok(CrcAlgorithm::Crc16IbmSdlc),
25 +
            NAME_CRC16_ISO_IEC_14443_3_A => Ok(CrcAlgorithm::Crc16IsoIec144433A),
26 +
            NAME_CRC16_KERMIT => Ok(CrcAlgorithm::Crc16Kermit),
27 +
            NAME_CRC16_LJ1200 => Ok(CrcAlgorithm::Crc16Lj1200),
28 +
            NAME_CRC16_M17 => Ok(CrcAlgorithm::Crc16M17),
29 +
            NAME_CRC16_MAXIM_DOW => Ok(CrcAlgorithm::Crc16MaximDow),
30 +
            NAME_CRC16_MCRF4XX => Ok(CrcAlgorithm::Crc16Mcrf4xx),
31 +
            NAME_CRC16_MODBUS => Ok(CrcAlgorithm::Crc16Modbus),
32 +
            NAME_CRC16_NRSC_5 => Ok(CrcAlgorithm::Crc16Nrsc5),
33 +
            NAME_CRC16_OPENSAFETY_A => Ok(CrcAlgorithm::Crc16OpensafetyA),
34 +
            NAME_CRC16_OPENSAFETY_B => Ok(CrcAlgorithm::Crc16OpensafetyB),
35 +
            NAME_CRC16_PROFIBUS => Ok(CrcAlgorithm::Crc16Profibus),
36 +
            NAME_CRC16_RIELLO => Ok(CrcAlgorithm::Crc16Riello),
37 +
            NAME_CRC16_SPI_FUJITSU => Ok(CrcAlgorithm::Crc16SpiFujitsu),
38 +
            NAME_CRC16_T10_DIF => Ok(CrcAlgorithm::Crc16T10Dif),
39 +
            NAME_CRC16_TELEDISK => Ok(CrcAlgorithm::Crc16Teledisk),
40 +
            NAME_CRC16_TMS37157 => Ok(CrcAlgorithm::Crc16Tms37157),
41 +
            NAME_CRC16_UMTS => Ok(CrcAlgorithm::Crc16Umts),
42 +
            NAME_CRC16_USB => Ok(CrcAlgorithm::Crc16Usb),
43 +
            NAME_CRC16_XMODEM => Ok(CrcAlgorithm::Crc16Xmodem),
44 +
            NAME_CRC32_AIXM => Ok(CrcAlgorithm::Crc32Aixm),
45 +
            NAME_CRC32_AUTOSAR => Ok(CrcAlgorithm::Crc32Autosar),
46 +
            NAME_CRC32_BASE91_D => Ok(CrcAlgorithm::Crc32Base91D),
47 +
            NAME_CRC32_BZIP2 => Ok(CrcAlgorithm::Crc32Bzip2),
48 +
            NAME_CRC32_CD_ROM_EDC => Ok(CrcAlgorithm::Crc32CdRomEdc),
49 +
            NAME_CRC32_CKSUM => Ok(CrcAlgorithm::Crc32Cksum),
50 +
            NAME_CRC32_ISCSI => Ok(CrcAlgorithm::Crc32Iscsi),
51 +
            NAME_CRC32_ISO_HDLC => Ok(CrcAlgorithm::Crc32IsoHdlc),
52 +
            NAME_CRC32_JAMCRC => Ok(CrcAlgorithm::Crc32Jamcrc),
53 +
            NAME_CRC32_MEF => Ok(CrcAlgorithm::Crc32Mef),
54 +
            NAME_CRC32_MPEG_2 => Ok(CrcAlgorithm::Crc32Mpeg2),
55 +
            NAME_CRC32_XFER => Ok(CrcAlgorithm::Crc32Xfer),
56 +
            NAME_CRC64_GO_ISO => Ok(CrcAlgorithm::Crc64GoIso),
57 +
            NAME_CRC64_MS => Ok(CrcAlgorithm::Crc64Ms),
58 +
            NAME_CRC64_NVME => Ok(CrcAlgorithm::Crc64Nvme),
59 +
            NAME_CRC64_REDIS => Ok(CrcAlgorithm::Crc64Redis),
60 +
            NAME_CRC64_XZ => Ok(CrcAlgorithm::Crc64Xz),
61 +
            NAME_CRC64_ECMA_182 => Ok(CrcAlgorithm::Crc64Ecma182),
62 +
            NAME_CRC64_WE => Ok(CrcAlgorithm::Crc64We),
63 +
            _ => Err(()),
64 +
        }
65 +
    }
66 +
}
67 +
68 +
#[allow(deprecated)]
69 +
impl Display for CrcAlgorithm {
70 +
    fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
71 +
        match self {
72 +
            CrcAlgorithm::Crc16Arc => write!(f, "{NAME_CRC16_ARC}"),
73 +
            CrcAlgorithm::Crc16Cdma2000 => write!(f, "{NAME_CRC16_CDMA2000}"),
74 +
            CrcAlgorithm::Crc16Cms => write!(f, "{NAME_CRC16_CMS}"),
75 +
            CrcAlgorithm::Crc16Dds110 => write!(f, "{NAME_CRC16_DDS_110}"),
76 +
            CrcAlgorithm::Crc16DectR => write!(f, "{NAME_CRC16_DECT_R}"),
77 +
            CrcAlgorithm::Crc16DectX => write!(f, "{NAME_CRC16_DECT_X}"),
78 +
            CrcAlgorithm::Crc16Dnp => write!(f, "{NAME_CRC16_DNP}"),
79 +
            CrcAlgorithm::Crc16En13757 => write!(f, "{NAME_CRC16_EN_13757}"),
80 +
            CrcAlgorithm::Crc16Genibus => write!(f, "{NAME_CRC16_GENIBUS}"),
81 +
            CrcAlgorithm::Crc16Gsm => write!(f, "{NAME_CRC16_GSM}"),
82 +
            CrcAlgorithm::Crc16Ibm3740 => write!(f, "{NAME_CRC16_IBM_3740}",),
83 +
            CrcAlgorithm::Crc16IbmSdlc => write!(f, "{NAME_CRC16_IBM_SDLC}",),
84 +
            CrcAlgorithm::Crc16IsoIec144433A => {
85 +
                write!(f, "{NAME_CRC16_ISO_IEC_14443_3_A}",)
86 +
            }
87 +
            CrcAlgorithm::Crc16Kermit => write!(f, "{NAME_CRC16_KERMIT}"),
88 +
            CrcAlgorithm::Crc16Lj1200 => write!(f, "{NAME_CRC16_LJ1200}"),
89 +
            CrcAlgorithm::Crc16M17 => write!(f, "{NAME_CRC16_M17}"),
90 +
            CrcAlgorithm::Crc16MaximDow => write!(f, "{NAME_CRC16_MAXIM_DOW}"),
91 +
            CrcAlgorithm::Crc16Mcrf4xx => write!(f, "{NAME_CRC16_MCRF4XX}"),
92 +
            CrcAlgorithm::Crc16Modbus => write!(f, "{NAME_CRC16_MODBUS}"),
93 +
            CrcAlgorithm::Crc16Nrsc5 => write!(f, "{NAME_CRC16_NRSC_5}"),
94 +
            CrcAlgorithm::Crc16OpensafetyA => write!(f, "{NAME_CRC16_OPENSAFETY_A}"),
95 +
            CrcAlgorithm::Crc16OpensafetyB => write!(f, "{NAME_CRC16_OPENSAFETY_B}"),
96 +
            CrcAlgorithm::Crc16Profibus => write!(f, "{NAME_CRC16_PROFIBUS}"),
97 +
            CrcAlgorithm::Crc16Riello => write!(f, "{NAME_CRC16_RIELLO}"),
98 +
            CrcAlgorithm::Crc16SpiFujitsu => write!(f, "{NAME_CRC16_SPI_FUJITSU}"),
99 +
            CrcAlgorithm::Crc16T10Dif => write!(f, "{NAME_CRC16_T10_DIF}",),
100 +
            CrcAlgorithm::Crc16Teledisk => write!(f, "{NAME_CRC16_TELEDISK}"),
101 +
            CrcAlgorithm::Crc16Tms37157 => write!(f, "{NAME_CRC16_TMS37157}"),
102 +
            CrcAlgorithm::Crc16Umts => write!(f, "{NAME_CRC16_UMTS}"),
103 +
            CrcAlgorithm::Crc16Usb => write!(f, "{NAME_CRC16_USB}"),
104 +
            CrcAlgorithm::Crc16Xmodem => write!(f, "{NAME_CRC16_XMODEM}"),
105 +
            CrcAlgorithm::Crc32Aixm => write!(f, "{NAME_CRC32_AIXM}",),
106 +
            CrcAlgorithm::Crc32Autosar => write!(f, "{NAME_CRC32_AUTOSAR}",),
107 +
            CrcAlgorithm::Crc32Base91D => write!(f, "{NAME_CRC32_BASE91_D}",),
108 +
            CrcAlgorithm::Crc32Bzip2 => write!(f, "{NAME_CRC32_BZIP2}",),
109 +
            CrcAlgorithm::Crc32CdRomEdc => write!(f, "{NAME_CRC32_CD_ROM_EDC}",),
110 +
            CrcAlgorithm::Crc32Cksum => write!(f, "{NAME_CRC32_CKSUM}",),
111 +
            CrcAlgorithm::Crc32Custom => write!(f, "CRC-32/CUSTOM"),
112 +
            CrcAlgorithm::Crc32Iscsi => write!(f, "{NAME_CRC32_ISCSI}",),
113 +
            CrcAlgorithm::Crc32IsoHdlc => write!(f, "{NAME_CRC32_ISO_HDLC}",),
114 +
            CrcAlgorithm::Crc32Jamcrc => write!(f, "{NAME_CRC32_JAMCRC}",),
115 +
            CrcAlgorithm::Crc32Mef => write!(f, "{NAME_CRC32_MEF}",),
116 +
            CrcAlgorithm::Crc32Mpeg2 => write!(f, "{NAME_CRC32_MPEG_2}",),
117 +
            CrcAlgorithm::Crc32Xfer => write!(f, "{NAME_CRC32_XFER}",),
118 +
            CrcAlgorithm::CrcCustom => write!(f, "CRC/CUSTOM"),
119 +
            CrcAlgorithm::Crc64Custom => write!(f, "CRC-64/CUSTOM"),
120 +
            CrcAlgorithm::Crc64GoIso => write!(f, "{NAME_CRC64_GO_ISO}",),
121 +
            CrcAlgorithm::Crc64Ms => write!(f, "{NAME_CRC64_MS}",),
122 +
            CrcAlgorithm::Crc64Nvme => write!(f, "{NAME_CRC64_NVME}",),
123 +
            CrcAlgorithm::Crc64Redis => write!(f, "{NAME_CRC64_REDIS}",),
124 +
            CrcAlgorithm::Crc64Xz => write!(f, "{NAME_CRC64_XZ}",),
125 +
            CrcAlgorithm::Crc64Ecma182 => write!(f, "{NAME_CRC64_ECMA_182}",),
126 +
            CrcAlgorithm::Crc64We => write!(f, "{NAME_CRC64_WE}",),
127 +
        }
128 +
    }
129 +
}
130 +
131 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
132 +
#[derive(Debug, Copy, Clone)]
133 +
pub(crate) enum Reflector<T> {
134 +
    NoReflector,
135 +
    ForwardReflector { smask: T },
136 +
}
137 +
138 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
139 +
/// Different processing strategies based on data length
140 +
pub(crate) enum DataChunkProcessor {
141 +
    From0To15,   // 0-15 bytes
142 +
    From16,      // exactly 16 bytes
143 +
    From17To31,  // 17-31 bytes
144 +
    From32To255, // 32-255 bytes
145 +
}
146 +
147 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
148 +
impl DataChunkProcessor {
149 +
    /// Select the appropriate processor based on data length
150 +
    pub fn for_length(len: usize) -> Self {
151 +
        match len {
152 +
            0..=15 => Self::From0To15,
153 +
            16 => Self::From16,
154 +
            17..=31 => Self::From17To31,
155 +
            32..=255 => Self::From32To255,
156 +
            _ => panic!("data length too large"),
157 +
        }
158 +
    }
159 +
}
added vendor/crc-fast/src/feature_detection.rs +1149 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! Feature detection system for safe and efficient hardware acceleration across different
4 +
//! platforms.
5 +
6 +
#[cfg(all(
7 +
    not(feature = "std"),
8 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
9 +
))]
10 +
use spin::Once;
11 +
#[cfg(all(
12 +
    feature = "std",
13 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
14 +
))]
15 +
use std::sync::OnceLock;
16 +
17 +
#[cfg(all(feature = "alloc", not(feature = "std")))]
18 +
extern crate alloc;
19 +
#[cfg(all(
20 +
    feature = "alloc",
21 +
    not(feature = "std"),
22 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
23 +
))]
24 +
use alloc::string::{String, ToString};
25 +
#[cfg(any(
26 +
    test,
27 +
    all(
28 +
        feature = "std",
29 +
        any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
30 +
    )
31 +
))]
32 +
use std::string::{String, ToString};
33 +
34 +
/// Global ArchOps instance cache - initialized once based on feature detection results
35 +
#[cfg(all(
36 +
    feature = "std",
37 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
38 +
))]
39 +
static ARCH_OPS_INSTANCE: OnceLock<ArchOpsInstance> = OnceLock::new();
40 +
#[cfg(all(
41 +
    not(feature = "std"),
42 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
43 +
))]
44 +
static ARCH_OPS_INSTANCE: Once<ArchOpsInstance> = Once::new();
45 +
46 +
/// Performance tiers representing different hardware capability levels
47 +
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
48 +
#[allow(dead_code)] // Some variants may not be constructed on all target architectures
49 +
pub enum PerformanceTier {
50 +
    // AArch64 tiers
51 +
    AArch64AesSha3,
52 +
    AArch64Aes,
53 +
54 +
    // x86_64 tiers
55 +
    X86_64Avx512Vpclmulqdq,
56 +
    X86_64Avx512Pclmulqdq,
57 +
    X86_64SsePclmulqdq,
58 +
59 +
    // x86 tiers
60 +
    X86SsePclmulqdq,
61 +
62 +
    // Fallback
63 +
    SoftwareTable,
64 +
}
65 +
66 +
/// Architecture-specific capabilities
67 +
#[derive(Debug, Clone, Copy)]
68 +
#[allow(dead_code)] // Some fields may not be read on all target architectures
69 +
pub struct ArchCapabilities {
70 +
    // AArch64 features
71 +
    pub has_aes: bool, // provides PMULL support for CRC calculations (NEON is implicit)
72 +
    pub has_crc: bool, // provides native CRC32 instructions for fusion techniques
73 +
    pub has_sha3: bool, // requires 'aes', provides EOR3 for XOR3 operations
74 +
75 +
    // x86/x86_64 features
76 +
    pub has_sse41: bool,
77 +
    pub has_sse42: bool, // provides native CRC32C instructions for fusion techniques
78 +
    pub has_pclmulqdq: bool,
79 +
    pub has_avx512vl: bool, // implicitly enables avx512f, has XOR3 operations
80 +
    pub has_vpclmulqdq: bool,
81 +
}
82 +
83 +
/// Helper function to convert a performance tier to a human-readable target string
84 +
/// Format: {architecture}-{intrinsics-family}-{intrinsics-features}
85 +
#[cfg(any(
86 +
    test,
87 +
    all(
88 +
        feature = "alloc",
89 +
        any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
90 +
    )
91 +
))]
92 +
#[inline(always)]
93 +
fn tier_to_target_string(tier: PerformanceTier) -> String {
94 +
    match tier {
95 +
        PerformanceTier::AArch64AesSha3 => "aarch64-neon-pmull-sha3".to_string(),
96 +
        PerformanceTier::AArch64Aes => "aarch64-neon-pmull".to_string(),
97 +
        PerformanceTier::X86_64Avx512Vpclmulqdq => "x86_64-avx512-vpclmulqdq".to_string(),
98 +
        PerformanceTier::X86_64Avx512Pclmulqdq => "x86_64-avx512-pclmulqdq".to_string(),
99 +
        PerformanceTier::X86_64SsePclmulqdq => "x86_64-sse-pclmulqdq".to_string(),
100 +
        PerformanceTier::X86SsePclmulqdq => "x86-sse-pclmulqdq".to_string(),
101 +
        PerformanceTier::SoftwareTable => "software-fallback-tables".to_string(),
102 +
    }
103 +
}
104 +
105 +
/// Detect architecture-specific capabilities combining compile-time and runtime checks
106 +
///
107 +
/// # Safety
108 +
/// Uses runtime feature detection which may access CPU-specific registers
109 +
#[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))]
110 +
unsafe fn detect_arch_capabilities() -> ArchCapabilities {
111 +
    #[cfg(target_arch = "aarch64")]
112 +
    {
113 +
        detect_aarch64_features()
114 +
    }
115 +
116 +
    #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
117 +
    {
118 +
        detect_x86_features()
119 +
    }
120 +
121 +
    #[cfg(not(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")))]
122 +
    {
123 +
        // Other architectures use software fallback
124 +
        ArchCapabilities {
125 +
            has_aes: false,
126 +
            has_crc: false,
127 +
            has_sha3: false,
128 +
            has_sse41: false,
129 +
            has_sse42: false,
130 +
            has_pclmulqdq: false,
131 +
            has_avx512vl: false,
132 +
            has_vpclmulqdq: false,
133 +
        }
134 +
    }
135 +
}
136 +
137 +
/// AArch64-specific feature detection
138 +
///
139 +
/// Note: NEON is always available on AArch64 and is implicitly enabled by AES support.
140 +
/// AES support provides the PMULL instructions needed for CRC calculations.
141 +
#[inline(always)]
142 +
#[cfg(all(target_arch = "aarch64", feature = "std"))]
143 +
unsafe fn detect_aarch64_features() -> ArchCapabilities {
144 +
    use std::arch::is_aarch64_feature_detected;
145 +
146 +
    // AES is available on essentially all AArch64 CPUs and provides the PMULL instructions
147 +
    let has_aes = is_aarch64_feature_detected!("aes");
148 +
149 +
    // CRC provides native CRC32 instructions for fusion techniques
150 +
    let has_crc = is_aarch64_feature_detected!("crc");
151 +
152 +
    // SHA3 is available on modern Aarch64 CPUs, and provides the EOR3 instruction for efficient
153 +
    // XOR3 operations.
154 +
    let has_sha3 = is_aarch64_feature_detected!("sha3");
155 +
156 +
    ArchCapabilities {
157 +
        has_aes,
158 +
        has_crc,
159 +
        has_sha3,
160 +
        has_sse41: false,
161 +
        has_sse42: false,
162 +
        has_pclmulqdq: false,
163 +
        has_avx512vl: false,
164 +
        has_vpclmulqdq: false,
165 +
    }
166 +
}
167 +
168 +
#[inline(always)]
169 +
#[cfg(all(target_arch = "aarch64", not(feature = "std")))]
170 +
unsafe fn detect_aarch64_features() -> ArchCapabilities {
171 +
    ArchCapabilities {
172 +
        has_aes: cfg!(target_feature = "aes"),
173 +
        has_crc: cfg!(target_feature = "crc"),
174 +
        has_sha3: cfg!(target_feature = "sha3"),
175 +
        has_sse41: false,
176 +
        has_sse42: false,
177 +
        has_pclmulqdq: false,
178 +
        has_avx512vl: false,
179 +
        has_vpclmulqdq: false,
180 +
    }
181 +
}
182 +
183 +
/// x86/x86_64-specific feature detection
184 +
#[inline(always)]
185 +
#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), feature = "std"))]
186 +
unsafe fn detect_x86_features() -> ArchCapabilities {
187 +
    use std::arch::is_x86_feature_detected;
188 +
189 +
    // SSE 4.1 and PCLMULQDQ support are the baseline for hardware acceleration
190 +
    let has_sse41 = is_x86_feature_detected!("sse4.1");
191 +
    let has_pclmulqdq = has_sse41 && is_x86_feature_detected!("pclmulqdq");
192 +
193 +
    let has_avx512vl = has_pclmulqdq && is_x86_feature_detected!("avx512vl");
194 +
    let has_vpclmulqdq = has_avx512vl && is_x86_feature_detected!("vpclmulqdq");
195 +
    // SSE 4.2 provides native CRC32C instructions for fusion techniques
196 +
    let has_sse42 = is_x86_feature_detected!("sse4.2");
197 +
198 +
    ArchCapabilities {
199 +
        has_aes: false,
200 +
        has_crc: false,
201 +
        has_sha3: false,
202 +
        has_sse41,
203 +
        has_sse42,
204 +
        has_pclmulqdq,
205 +
        has_avx512vl,
206 +
        has_vpclmulqdq,
207 +
    }
208 +
}
209 +
210 +
#[inline(always)]
211 +
#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), not(feature = "std")))]
212 +
unsafe fn detect_x86_features() -> ArchCapabilities {
213 +
    let has_sse41 = cfg!(target_feature = "sse4.1");
214 +
    let has_sse42 = cfg!(target_feature = "sse4.2");
215 +
    let has_pclmulqdq = has_sse41 && cfg!(target_feature = "pclmulqdq");
216 +
    let has_avx512vl = has_pclmulqdq && cfg!(target_feature = "avx512vl");
217 +
    let has_vpclmulqdq = has_avx512vl && cfg!(target_feature = "vpclmulqdq");
218 +
219 +
    ArchCapabilities {
220 +
        has_aes: false,
221 +
        has_crc: false,
222 +
        has_sha3: false,
223 +
        has_sse41,
224 +
        has_sse42,
225 +
        has_pclmulqdq,
226 +
        has_avx512vl,
227 +
        has_vpclmulqdq,
228 +
    }
229 +
}
230 +
231 +
/// Select the appropriate performance tier based on detected capabilities
232 +
#[inline(always)]
233 +
#[allow(unused)]
234 +
pub(crate) fn select_performance_tier(capabilities: &ArchCapabilities) -> PerformanceTier {
235 +
    #[cfg(target_arch = "aarch64")]
236 +
    {
237 +
        if capabilities.has_sha3 && capabilities.has_aes {
238 +
            return PerformanceTier::AArch64AesSha3;
239 +
        }
240 +
241 +
        if capabilities.has_aes {
242 +
            return PerformanceTier::AArch64Aes;
243 +
        }
244 +
    }
245 +
246 +
    #[cfg(target_arch = "x86_64")]
247 +
    {
248 +
        if capabilities.has_vpclmulqdq {
249 +
            return PerformanceTier::X86_64Avx512Vpclmulqdq;
250 +
        }
251 +
        if capabilities.has_avx512vl {
252 +
            return PerformanceTier::X86_64Avx512Pclmulqdq;
253 +
        }
254 +
        if capabilities.has_pclmulqdq {
255 +
            return PerformanceTier::X86_64SsePclmulqdq;
256 +
        }
257 +
    }
258 +
259 +
    #[cfg(target_arch = "x86")]
260 +
    {
261 +
        if capabilities.has_pclmulqdq {
262 +
            return PerformanceTier::X86SsePclmulqdq;
263 +
        }
264 +
    }
265 +
266 +
    // Fallback to software implementation
267 +
    PerformanceTier::SoftwareTable
268 +
}
269 +
270 +
/// Enum that holds the different ArchOps implementations for compile-time dispatch
271 +
/// This avoids the need for trait objects while still providing factory-based selection
272 +
#[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))]
273 +
#[derive(Debug, Clone, Copy)]
274 +
pub enum ArchOpsInstance {
275 +
    #[cfg(target_arch = "aarch64")]
276 +
    Aarch64Aes(crate::arch::aarch64::aes::Aarch64AesOps),
277 +
    #[cfg(target_arch = "aarch64")]
278 +
    Aarch64AesSha3(crate::arch::aarch64::aes_sha3::Aarch64AesSha3Ops),
279 +
    #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
280 +
    X86SsePclmulqdq(crate::arch::x86::sse::X86SsePclmulqdqOps),
281 +
    #[cfg(target_arch = "x86_64")]
282 +
    X86_64Avx512Pclmulqdq(crate::arch::x86_64::avx512::X86_64Avx512PclmulqdqOps),
283 +
    #[cfg(target_arch = "x86_64")]
284 +
    X86_64Avx512Vpclmulqdq(crate::arch::x86_64::avx512_vpclmulqdq::X86_64Avx512VpclmulqdqOps),
285 +
    /// Software fallback - no ArchOps struct needed
286 +
    SoftwareFallback,
287 +
}
288 +
289 +
#[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))]
290 +
impl ArchOpsInstance {
291 +
    #[inline(always)]
292 +
    pub fn get_tier(&self) -> PerformanceTier {
293 +
        match self {
294 +
            #[cfg(target_arch = "aarch64")]
295 +
            ArchOpsInstance::Aarch64Aes(_) => PerformanceTier::AArch64Aes,
296 +
            #[cfg(target_arch = "aarch64")]
297 +
            ArchOpsInstance::Aarch64AesSha3(_) => PerformanceTier::AArch64AesSha3,
298 +
            #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
299 +
            ArchOpsInstance::X86SsePclmulqdq(_) => PerformanceTier::X86SsePclmulqdq,
300 +
            #[cfg(target_arch = "x86_64")]
301 +
            ArchOpsInstance::X86_64Avx512Pclmulqdq(_) => PerformanceTier::X86_64Avx512Pclmulqdq,
302 +
            #[cfg(target_arch = "x86_64")]
303 +
            ArchOpsInstance::X86_64Avx512Vpclmulqdq(_) => PerformanceTier::X86_64Avx512Vpclmulqdq,
304 +
            ArchOpsInstance::SoftwareFallback => PerformanceTier::SoftwareTable,
305 +
        }
306 +
    }
307 +
308 +
    /// Get a human-readable target string describing the active configuration
309 +
    #[cfg(all(
310 +
        feature = "alloc",
311 +
        any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
312 +
    ))]
313 +
    #[inline(always)]
314 +
    pub fn get_target_string(&self) -> String {
315 +
        tier_to_target_string(self.get_tier())
316 +
    }
317 +
}
318 +
319 +
/// Get the global ArchOps instance (thread-safe, initialized once based on feature detection)
320 +
///
321 +
/// This function provides access to the cached ArchOps instance that was selected based on
322 +
/// feature detection results at library initialization time, eliminating runtime feature
323 +
/// detection overhead from hot paths.
324 +
#[cfg(all(
325 +
    feature = "std",
326 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
327 +
))]
328 +
pub fn get_arch_ops() -> &'static ArchOpsInstance {
329 +
    ARCH_OPS_INSTANCE.get_or_init(create_arch_ops)
330 +
}
331 +
332 +
#[cfg(all(
333 +
    not(feature = "std"),
334 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
335 +
))]
336 +
pub fn get_arch_ops() -> &'static ArchOpsInstance {
337 +
    ARCH_OPS_INSTANCE.call_once(create_arch_ops)
338 +
}
339 +
340 +
/// Factory function that creates the appropriate ArchOps struct based on cached feature detection
341 +
///
342 +
/// This function uses the cached feature detection results to select the optimal
343 +
/// architecture-specific implementation at library initialization time, eliminating
344 +
/// runtime feature detection overhead from hot paths.
345 +
#[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))]
346 +
fn create_arch_ops() -> ArchOpsInstance {
347 +
    let capabilities = unsafe { detect_arch_capabilities() };
348 +
    let tier = select_performance_tier(&capabilities);
349 +
350 +
    create_arch_ops_from_tier(tier)
351 +
}
352 +
353 +
/// Helper function to create ArchOpsInstance from a performance tier
354 +
#[cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))]
355 +
fn create_arch_ops_from_tier(tier: PerformanceTier) -> ArchOpsInstance {
356 +
    match tier {
357 +
        #[cfg(target_arch = "aarch64")]
358 +
        PerformanceTier::AArch64AesSha3 => {
359 +
            use crate::arch::aarch64::aes_sha3::Aarch64AesSha3Ops;
360 +
            ArchOpsInstance::Aarch64AesSha3(Aarch64AesSha3Ops::new())
361 +
        }
362 +
        #[cfg(target_arch = "aarch64")]
363 +
        PerformanceTier::AArch64Aes => {
364 +
            use crate::arch::aarch64::aes::Aarch64AesOps;
365 +
            ArchOpsInstance::Aarch64Aes(Aarch64AesOps)
366 +
        }
367 +
        #[cfg(target_arch = "x86_64")]
368 +
        PerformanceTier::X86_64Avx512Vpclmulqdq => {
369 +
            use crate::arch::x86_64::avx512_vpclmulqdq::X86_64Avx512VpclmulqdqOps;
370 +
            ArchOpsInstance::X86_64Avx512Vpclmulqdq(X86_64Avx512VpclmulqdqOps::new())
371 +
        }
372 +
        #[cfg(target_arch = "x86_64")]
373 +
        PerformanceTier::X86_64Avx512Pclmulqdq => {
374 +
            use crate::arch::x86_64::avx512::X86_64Avx512PclmulqdqOps;
375 +
            ArchOpsInstance::X86_64Avx512Pclmulqdq(X86_64Avx512PclmulqdqOps::new())
376 +
        }
377 +
        #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
378 +
        PerformanceTier::X86_64SsePclmulqdq | PerformanceTier::X86SsePclmulqdq => {
379 +
            create_x86_sse_pclmulqdq_ops()
380 +
        }
381 +
        PerformanceTier::SoftwareTable => {
382 +
            // Use software fallback
383 +
            ArchOpsInstance::SoftwareFallback
384 +
        }
385 +
        // Handle cases where the performance tier doesn't match the current architecture
386 +
        _ => {
387 +
            // This can happen when a tier is selected for a different architecture
388 +
            // Fall back to software implementation
389 +
            ArchOpsInstance::SoftwareFallback
390 +
        }
391 +
    }
392 +
}
393 +
394 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
395 +
fn create_x86_sse_pclmulqdq_ops() -> ArchOpsInstance {
396 +
    use crate::arch::x86::sse::X86SsePclmulqdqOps;
397 +
    ArchOpsInstance::X86SsePclmulqdq(X86SsePclmulqdqOps)
398 +
}
399 +
/// Test-specific tier selection that works across all architectures for comprehensive testing
400 +
#[cfg(test)]
401 +
pub fn select_performance_tier_for_test(capabilities: &ArchCapabilities) -> PerformanceTier {
402 +
    // AArch64 tier selection - SHA3 requires AES to be available
403 +
    if capabilities.has_sha3 && capabilities.has_aes {
404 +
        return PerformanceTier::AArch64AesSha3;
405 +
    }
406 +
407 +
    if capabilities.has_aes {
408 +
        return PerformanceTier::AArch64Aes;
409 +
    }
410 +
411 +
    // x86_64 tier selection - VPCLMULQDQ requires AVX512VL
412 +
    if capabilities.has_vpclmulqdq && capabilities.has_avx512vl {
413 +
        return PerformanceTier::X86_64Avx512Vpclmulqdq;
414 +
    }
415 +
416 +
    // AVX512VL requires PCLMULQDQ and SSE4.1
417 +
    if capabilities.has_avx512vl && capabilities.has_pclmulqdq {
418 +
        return PerformanceTier::X86_64Avx512Pclmulqdq;
419 +
    }
420 +
421 +
    // PCLMULQDQ requires SSE4.1
422 +
    if capabilities.has_pclmulqdq && capabilities.has_sse41 {
423 +
        return PerformanceTier::X86_64SsePclmulqdq;
424 +
    }
425 +
426 +
    // Fallback to software implementation
427 +
    PerformanceTier::SoftwareTable
428 +
}
429 +
430 +
#[cfg(test)]
431 +
mod tests {
432 +
    use super::*;
433 +
434 +
    #[test]
435 +
    fn test_aarch64_tier_selection() {
436 +
        // Test that aarch64 tier selection follows the expected hierarchy
437 +
438 +
        // Test SHA3 + AES (highest tier) - NEON is implicit with AES
439 +
        let capabilities_sha3 = ArchCapabilities {
440 +
            has_aes: true,
441 +
            has_crc: false,
442 +
            has_sha3: true,
443 +
            has_sse41: false,
444 +
            has_sse42: false,
445 +
            has_pclmulqdq: false,
446 +
            has_avx512vl: false,
447 +
            has_vpclmulqdq: false,
448 +
        };
449 +
        assert_eq!(
450 +
            select_performance_tier_for_test(&capabilities_sha3),
451 +
            PerformanceTier::AArch64AesSha3
452 +
        );
453 +
454 +
        // Test AES only (baseline tier) - NEON is implicit with AES
455 +
        let capabilities_aes = ArchCapabilities {
456 +
            has_aes: true,
457 +
            has_crc: false,
458 +
            has_sha3: false,
459 +
            has_sse41: false,
460 +
            has_sse42: false,
461 +
            has_pclmulqdq: false,
462 +
            has_avx512vl: false,
463 +
            has_vpclmulqdq: false,
464 +
        };
465 +
        assert_eq!(
466 +
            select_performance_tier_for_test(&capabilities_aes),
467 +
            PerformanceTier::AArch64Aes
468 +
        );
469 +
470 +
        // Test missing AES (should fall back to software)
471 +
        let capabilities_no_aes = ArchCapabilities {
472 +
            has_aes: false,
473 +
            has_crc: false,
474 +
            has_sha3: false,
475 +
            has_sse41: false,
476 +
            has_sse42: false,
477 +
            has_pclmulqdq: false,
478 +
            has_avx512vl: false,
479 +
            has_vpclmulqdq: false,
480 +
        };
481 +
        assert_eq!(
482 +
            select_performance_tier_for_test(&capabilities_no_aes),
483 +
            PerformanceTier::SoftwareTable
484 +
        );
485 +
    }
486 +
487 +
    #[test]
488 +
    fn test_aarch64_feature_hierarchy() {
489 +
        // Test that AArch64 feature hierarchy is properly maintained
490 +
        // NEON is always available on AArch64 and implicit with AES
491 +
        // AES provides PMULL instructions, SHA3 provides EOR3
492 +
493 +
        // Create test capabilities with AES support (NEON is implicit)
494 +
        let capabilities_with_aes = ArchCapabilities {
495 +
            has_aes: true,
496 +
            has_crc: false,
497 +
            has_sha3: false,
498 +
            has_sse41: false,
499 +
            has_sse42: false,
500 +
            has_pclmulqdq: false,
501 +
            has_avx512vl: false,
502 +
            has_vpclmulqdq: false,
503 +
        };
504 +
505 +
        // AES support means we have PMULL instructions available for CRC calculations
506 +
        assert!(capabilities_with_aes.has_aes);
507 +
508 +
        // SHA3 requires AES to be available first
509 +
        let capabilities_with_sha3 = ArchCapabilities {
510 +
            has_aes: true,
511 +
            has_crc: false,
512 +
            has_sha3: true,
513 +
            has_sse41: false,
514 +
            has_sse42: false,
515 +
            has_pclmulqdq: false,
516 +
            has_avx512vl: false,
517 +
            has_vpclmulqdq: false,
518 +
        };
519 +
520 +
        assert!(capabilities_with_sha3.has_aes);
521 +
        assert!(capabilities_with_sha3.has_sha3);
522 +
    }
523 +
524 +
    #[test]
525 +
    #[cfg(target_arch = "x86_64")]
526 +
    fn test_x86_64_tier_selection() {
527 +
        // Test that x86_64 tier selection follows the expected hierarchy
528 +
529 +
        // Test VPCLMULQDQ + AVX512 (highest tier)
530 +
        let capabilities_vpclmulqdq = ArchCapabilities {
531 +
            has_aes: false,
532 +
            has_crc: false,
533 +
            has_sha3: false,
534 +
            has_sse41: true,
535 +
            has_sse42: false,
536 +
            has_pclmulqdq: true,
537 +
            has_avx512vl: true,
538 +
            has_vpclmulqdq: true,
539 +
        };
540 +
        assert_eq!(
541 +
            select_performance_tier_for_test(&capabilities_vpclmulqdq),
542 +
            PerformanceTier::X86_64Avx512Vpclmulqdq
543 +
        );
544 +
545 +
        // Test AVX512 + PCLMULQDQ (mid-tier)
546 +
        let capabilities_avx512 = ArchCapabilities {
547 +
            has_aes: false,
548 +
            has_crc: false,
549 +
            has_sha3: false,
550 +
            has_sse41: true,
551 +
            has_sse42: false,
552 +
            has_pclmulqdq: true,
553 +
            has_avx512vl: true,
554 +
            has_vpclmulqdq: false,
555 +
        };
556 +
        assert_eq!(
557 +
            select_performance_tier_for_test(&capabilities_avx512),
558 +
            PerformanceTier::X86_64Avx512Pclmulqdq
559 +
        );
560 +
561 +
        // Test SSE + PCLMULQDQ (baseline tier)
562 +
        let capabilities_sse = ArchCapabilities {
563 +
            has_aes: false,
564 +
            has_crc: false,
565 +
            has_sha3: false,
566 +
            has_sse41: true,
567 +
            has_sse42: false,
568 +
            has_pclmulqdq: true,
569 +
            has_avx512vl: false,
570 +
            has_vpclmulqdq: false,
571 +
        };
572 +
        assert_eq!(
573 +
            select_performance_tier_for_test(&capabilities_sse),
574 +
            PerformanceTier::X86_64SsePclmulqdq
575 +
        );
576 +
577 +
        // Test missing PCLMULQDQ (should fall back to software)
578 +
        let capabilities_no_pclmul = ArchCapabilities {
579 +
            has_aes: false,
580 +
            has_crc: false,
581 +
            has_sha3: false,
582 +
            has_sse41: true,
583 +
            has_sse42: false,
584 +
            has_pclmulqdq: false,
585 +
            has_avx512vl: false,
586 +
            has_vpclmulqdq: false,
587 +
        };
588 +
        assert_eq!(
589 +
            select_performance_tier_for_test(&capabilities_no_pclmul),
590 +
            PerformanceTier::SoftwareTable
591 +
        );
592 +
    }
593 +
594 +
    #[test]
595 +
    #[cfg(target_arch = "x86")]
596 +
    fn test_x86_tier_selection() {
597 +
        // Test that x86 (32-bit) tier selection works correctly
598 +
599 +
        // Test SSE + PCLMULQDQ (only available tier for x86)
600 +
        let capabilities_sse = ArchCapabilities {
601 +
            has_aes: false,
602 +
            has_crc: false,
603 +
            has_sha3: false,
604 +
            has_sse41: true,
605 +
            has_sse42: false,
606 +
            has_pclmulqdq: true,
607 +
            has_avx512vl: false,
608 +
            has_vpclmulqdq: false,
609 +
        };
610 +
        assert_eq!(
611 +
            select_performance_tier_for_test(&capabilities_sse),
612 +
            PerformanceTier::X86_64SsePclmulqdq
613 +
        );
614 +
615 +
        // For x86 32-bit testing, we need a special case since AVX512VL indicates x86_64
616 +
        // Create capabilities without AVX512VL to simulate x86 32-bit
617 +
        let capabilities_x86_sse = ArchCapabilities {
618 +
            has_aes: false,
619 +
            has_crc: false,
620 +
            has_sha3: false,
621 +
            has_sse41: true,
622 +
            has_sse42: false,
623 +
            has_pclmulqdq: true,
624 +
            has_avx512vl: false, // No AVX512 on 32-bit x86
625 +
            has_vpclmulqdq: false,
626 +
        };
627 +
        // This should select x86_64 tier since we're testing the general case
628 +
        assert_eq!(
629 +
            select_performance_tier_for_test(&capabilities_x86_sse),
630 +
            PerformanceTier::X86_64SsePclmulqdq
631 +
        );
632 +
633 +
        // Test missing PCLMULQDQ (should fall back to software)
634 +
        let capabilities_no_pclmul = ArchCapabilities {
635 +
            has_aes: false,
636 +
            has_crc: false,
637 +
            has_sha3: false,
638 +
            has_sse41: true,
639 +
            has_sse42: false,
640 +
            has_pclmulqdq: false,
641 +
            has_avx512vl: false,
642 +
            has_vpclmulqdq: false,
643 +
        };
644 +
        assert_eq!(
645 +
            select_performance_tier_for_test(&capabilities_no_pclmul),
646 +
            PerformanceTier::SoftwareTable
647 +
        );
648 +
    }
649 +
650 +
    #[test]
651 +
    fn test_x86_feature_hierarchy() {
652 +
        // Test that x86 feature hierarchy is properly maintained
653 +
        // SSE4.1 is required for PCLMULQDQ
654 +
        // AVX512VL requires PCLMULQDQ
655 +
        // VPCLMULQDQ requires AVX512VL
656 +
657 +
        // Test feature dependencies are enforced
658 +
        let capabilities_full = ArchCapabilities {
659 +
            has_aes: false,
660 +
            has_crc: false,
661 +
            has_sha3: false,
662 +
            has_sse41: true,
663 +
            has_sse42: false,
664 +
            has_pclmulqdq: true,
665 +
            has_avx512vl: true,
666 +
            has_vpclmulqdq: true,
667 +
        };
668 +
669 +
        // All x86 features should be available when hierarchy is satisfied
670 +
        assert!(capabilities_full.has_sse41);
671 +
        assert!(capabilities_full.has_pclmulqdq);
672 +
        assert!(capabilities_full.has_avx512vl);
673 +
        assert!(capabilities_full.has_vpclmulqdq);
674 +
    }
675 +
676 +
    // Mock tests for compile-time and runtime feature agreement scenarios
677 +
    mod mock_feature_agreement_tests {
678 +
        use super::*;
679 +
680 +
        #[test]
681 +
        fn test_feature_dependency_validation() {
682 +
            // Test that feature dependencies are properly validated
683 +
684 +
            // SHA3 without AES should not be possible
685 +
            let invalid_sha3_caps = ArchCapabilities {
686 +
                has_aes: false, // Missing required dependency
687 +
                has_crc: false,
688 +
                has_sha3: true, // This should be impossible in real detection
689 +
                has_sse41: false,
690 +
                has_sse42: false,
691 +
                has_pclmulqdq: false,
692 +
                has_avx512vl: false,
693 +
                has_vpclmulqdq: false,
694 +
            };
695 +
696 +
            // Should fall back to software since AES is required for SHA3
697 +
            assert_eq!(
698 +
                select_performance_tier_for_test(&invalid_sha3_caps),
699 +
                PerformanceTier::SoftwareTable
700 +
            );
701 +
702 +
            // VPCLMULQDQ without AVX512VL should not be possible
703 +
            let invalid_vpclmul_caps = ArchCapabilities {
704 +
                has_aes: false,
705 +
                has_crc: false,
706 +
                has_sha3: false,
707 +
                has_sse41: true,
708 +
                has_sse42: false,
709 +
                has_pclmulqdq: true,
710 +
                has_avx512vl: false,  // Missing required dependency
711 +
                has_vpclmulqdq: true, // This should be impossible in real detection
712 +
            };
713 +
714 +
            // Should fall back to SSE tier since AVX512VL is required for VPCLMULQDQ
715 +
            assert_eq!(
716 +
                select_performance_tier_for_test(&invalid_vpclmul_caps),
717 +
                PerformanceTier::X86_64SsePclmulqdq
718 +
            );
719 +
        }
720 +
    }
721 +
722 +
    // Comprehensive tier selection tests across different hardware configurations
723 +
    mod tier_selection_comprehensive_tests {
724 +
        use super::*;
725 +
726 +
        #[test]
727 +
        fn test_all_aarch64_tier_combinations() {
728 +
            // Test all possible AArch64 capability combinations
729 +
730 +
            // No features - software fallback
731 +
            let no_features = ArchCapabilities {
732 +
                has_aes: false,
733 +
                has_crc: false,
734 +
                has_sha3: false,
735 +
                has_sse41: false,
736 +
                has_sse42: false,
737 +
                has_pclmulqdq: false,
738 +
                has_avx512vl: false,
739 +
                has_vpclmulqdq: false,
740 +
            };
741 +
            assert_eq!(
742 +
                select_performance_tier_for_test(&no_features),
743 +
                PerformanceTier::SoftwareTable
744 +
            );
745 +
746 +
            // AES only - baseline AArch64 tier
747 +
            let aes_only = ArchCapabilities {
748 +
                has_aes: true,
749 +
                has_crc: false,
750 +
                has_sha3: false,
751 +
                has_sse41: false,
752 +
                has_sse42: false,
753 +
                has_pclmulqdq: false,
754 +
                has_avx512vl: false,
755 +
                has_vpclmulqdq: false,
756 +
            };
757 +
            assert_eq!(
758 +
                select_performance_tier_for_test(&aes_only),
759 +
                PerformanceTier::AArch64Aes
760 +
            );
761 +
762 +
            // AES + SHA3 - highest AArch64 tier
763 +
            let aes_sha3 = ArchCapabilities {
764 +
                has_aes: true,
765 +
                has_crc: false,
766 +
                has_sha3: true,
767 +
                has_sse41: false,
768 +
                has_sse42: false,
769 +
                has_pclmulqdq: false,
770 +
                has_avx512vl: false,
771 +
                has_vpclmulqdq: false,
772 +
            };
773 +
            assert_eq!(
774 +
                select_performance_tier_for_test(&aes_sha3),
775 +
                PerformanceTier::AArch64AesSha3
776 +
            );
777 +
        }
778 +
779 +
        #[test]
780 +
        fn test_all_x86_64_tier_combinations() {
781 +
            // Test all possible x86_64 capability combinations
782 +
783 +
            // No features - software fallback
784 +
            let no_features = ArchCapabilities {
785 +
                has_aes: false,
786 +
                has_crc: false,
787 +
                has_sha3: false,
788 +
                has_sse41: false,
789 +
                has_sse42: false,
790 +
                has_pclmulqdq: false,
791 +
                has_avx512vl: false,
792 +
                has_vpclmulqdq: false,
793 +
            };
794 +
            assert_eq!(
795 +
                select_performance_tier_for_test(&no_features),
796 +
                PerformanceTier::SoftwareTable
797 +
            );
798 +
799 +
            // SSE4.1 only - software fallback (PCLMULQDQ required)
800 +
            let sse_only = ArchCapabilities {
801 +
                has_aes: false,
802 +
                has_crc: false,
803 +
                has_sha3: false,
804 +
                has_sse41: true,
805 +
                has_sse42: false,
806 +
                has_pclmulqdq: false,
807 +
                has_avx512vl: false,
808 +
                has_vpclmulqdq: false,
809 +
            };
810 +
            assert_eq!(
811 +
                select_performance_tier_for_test(&sse_only),
812 +
                PerformanceTier::SoftwareTable
813 +
            );
814 +
815 +
            // SSE4.1 + PCLMULQDQ - baseline x86_64 tier
816 +
            let sse_pclmul = ArchCapabilities {
817 +
                has_aes: false,
818 +
                has_crc: false,
819 +
                has_sha3: false,
820 +
                has_sse41: true,
821 +
                has_sse42: false,
822 +
                has_pclmulqdq: true,
823 +
                has_avx512vl: false,
824 +
                has_vpclmulqdq: false,
825 +
            };
826 +
            assert_eq!(
827 +
                select_performance_tier_for_test(&sse_pclmul),
828 +
                PerformanceTier::X86_64SsePclmulqdq
829 +
            );
830 +
831 +
            // SSE4.1 + PCLMULQDQ + AVX512VL - mid-tier
832 +
            let avx512_pclmul_new_rust = ArchCapabilities {
833 +
                has_aes: false,
834 +
                has_crc: false,
835 +
                has_sha3: false,
836 +
                has_sse41: true,
837 +
                has_sse42: false,
838 +
                has_pclmulqdq: true,
839 +
                has_avx512vl: true,
840 +
                has_vpclmulqdq: false,
841 +
            };
842 +
            assert_eq!(
843 +
                select_performance_tier_for_test(&avx512_pclmul_new_rust),
844 +
                PerformanceTier::X86_64Avx512Pclmulqdq
845 +
            );
846 +
847 +
            // All features - highest tier
848 +
            let all_features_new_rust = ArchCapabilities {
849 +
                has_aes: false,
850 +
                has_crc: false,
851 +
                has_sha3: false,
852 +
                has_sse41: true,
853 +
                has_sse42: false,
854 +
                has_pclmulqdq: true,
855 +
                has_avx512vl: true,
856 +
                has_vpclmulqdq: true,
857 +
            };
858 +
            assert_eq!(
859 +
                select_performance_tier_for_test(&all_features_new_rust),
860 +
                PerformanceTier::X86_64Avx512Vpclmulqdq
861 +
            );
862 +
        }
863 +
864 +
        #[test]
865 +
        fn test_x86_32bit_tier_combinations() {
866 +
            // Test x86 (32-bit) capability combinations
867 +
868 +
            // No features - software fallback
869 +
            let no_features = ArchCapabilities {
870 +
                has_aes: false,
871 +
                has_crc: false,
872 +
                has_sha3: false,
873 +
                has_sse41: false,
874 +
                has_sse42: false,
875 +
                has_pclmulqdq: false,
876 +
                has_avx512vl: false,
877 +
                has_vpclmulqdq: false,
878 +
            };
879 +
            assert_eq!(
880 +
                select_performance_tier_for_test(&no_features),
881 +
                PerformanceTier::SoftwareTable
882 +
            );
883 +
884 +
            // SSE4.1 + PCLMULQDQ - for x86 32-bit testing, we expect x86_64 tier in our test function
885 +
            // since the test function doesn't distinguish between x86 and x86_64 architectures
886 +
            let sse_pclmul = ArchCapabilities {
887 +
                has_aes: false,
888 +
                has_crc: false,
889 +
                has_sha3: false,
890 +
                has_sse41: true,
891 +
                has_sse42: false,
892 +
                has_pclmulqdq: true,
893 +
                has_avx512vl: false, // AVX512 not available on 32-bit x86
894 +
                has_vpclmulqdq: false,
895 +
            };
896 +
            // The test function will return x86_64 tier since it doesn't distinguish architectures
897 +
            assert_eq!(
898 +
                select_performance_tier_for_test(&sse_pclmul),
899 +
                PerformanceTier::X86_64SsePclmulqdq
900 +
            );
901 +
        }
902 +
903 +
        #[test]
904 +
        fn test_target_string_consistency() {
905 +
            // Test that target strings are consistent with selected tiers
906 +
907 +
            let test_cases = [
908 +
                (PerformanceTier::AArch64AesSha3, "aarch64-neon-pmull-sha3"),
909 +
                (PerformanceTier::AArch64Aes, "aarch64-neon-pmull"),
910 +
                (
911 +
                    PerformanceTier::X86_64Avx512Vpclmulqdq,
912 +
                    "x86_64-avx512-vpclmulqdq",
913 +
                ),
914 +
                (
915 +
                    PerformanceTier::X86_64Avx512Pclmulqdq,
916 +
                    "x86_64-avx512-pclmulqdq",
917 +
                ),
918 +
                (PerformanceTier::X86_64SsePclmulqdq, "x86_64-sse-pclmulqdq"),
919 +
                (PerformanceTier::X86SsePclmulqdq, "x86-sse-pclmulqdq"),
920 +
                (PerformanceTier::SoftwareTable, "software-fallback-tables"),
921 +
            ];
922 +
923 +
            for (tier, expected_string) in test_cases {
924 +
                assert_eq!(tier_to_target_string(tier), expected_string);
925 +
            }
926 +
        }
927 +
    }
928 +
929 +
    // Tests for graceful degradation between performance tiers
930 +
    mod graceful_degradation_tests {
931 +
        use super::*;
932 +
933 +
        #[test]
934 +
        fn test_aarch64_degradation_path() {
935 +
            // Test the degradation path for AArch64: SHA3+AES -> AES -> Software
936 +
937 +
            // Start with highest tier capabilities
938 +
            let mut capabilities = ArchCapabilities {
939 +
                has_aes: true,
940 +
                has_crc: false,
941 +
                has_sha3: true,
942 +
                has_sse41: false,
943 +
                has_sse42: false,
944 +
                has_pclmulqdq: false,
945 +
                has_avx512vl: false,
946 +
                has_vpclmulqdq: false,
947 +
            };
948 +
949 +
            // Should select highest tier
950 +
            assert_eq!(
951 +
                select_performance_tier_for_test(&capabilities),
952 +
                PerformanceTier::AArch64AesSha3
953 +
            );
954 +
955 +
            // Remove SHA3 - should degrade to AES tier
956 +
            capabilities.has_sha3 = false;
957 +
            assert_eq!(
958 +
                select_performance_tier_for_test(&capabilities),
959 +
                PerformanceTier::AArch64Aes
960 +
            );
961 +
962 +
            // Remove AES - should degrade to software
963 +
            capabilities.has_aes = false;
964 +
            assert_eq!(
965 +
                select_performance_tier_for_test(&capabilities),
966 +
                PerformanceTier::SoftwareTable
967 +
            );
968 +
        }
969 +
970 +
        #[test]
971 +
        fn test_x86_64_degradation_path() {
972 +
            // Test the degradation path for x86_64: VPCLMULQDQ -> AVX512 -> SSE -> Software
973 +
974 +
            // Start with highest tier capabilities
975 +
            let mut capabilities = ArchCapabilities {
976 +
                has_aes: false,
977 +
                has_crc: false,
978 +
                has_sha3: false,
979 +
                has_sse41: true,
980 +
                has_sse42: false,
981 +
                has_pclmulqdq: true,
982 +
                has_avx512vl: true,
983 +
                has_vpclmulqdq: true,
984 +
            };
985 +
986 +
            // Should select highest tier
987 +
            assert_eq!(
988 +
                select_performance_tier_for_test(&capabilities),
989 +
                PerformanceTier::X86_64Avx512Vpclmulqdq
990 +
            );
991 +
992 +
            // Remove VPCLMULQDQ - should degrade to AVX512 tier
993 +
            capabilities.has_vpclmulqdq = false;
994 +
            assert_eq!(
995 +
                select_performance_tier_for_test(&capabilities),
996 +
                PerformanceTier::X86_64Avx512Pclmulqdq
997 +
            );
998 +
999 +
            // Remove AVX512VL - should degrade to SSE tier
1000 +
            capabilities.has_avx512vl = false;
1001 +
            assert_eq!(
1002 +
                select_performance_tier_for_test(&capabilities),
1003 +
                PerformanceTier::X86_64SsePclmulqdq
1004 +
            );
1005 +
1006 +
            // Remove PCLMULQDQ - should degrade to software
1007 +
            capabilities.has_pclmulqdq = false;
1008 +
            assert_eq!(
1009 +
                select_performance_tier_for_test(&capabilities),
1010 +
                PerformanceTier::SoftwareTable
1011 +
            );
1012 +
1013 +
            // Remove SSE4.1 - should still be software (already at lowest tier)
1014 +
            capabilities.has_sse41 = false;
1015 +
            assert_eq!(
1016 +
                select_performance_tier_for_test(&capabilities),
1017 +
                PerformanceTier::SoftwareTable
1018 +
            );
1019 +
        }
1020 +
1021 +
        #[test]
1022 +
        fn test_partial_feature_availability() {
1023 +
            // Test scenarios where only some features in a tier are available
1024 +
1025 +
            // AArch64: SHA3 available but AES not (impossible in real hardware, but test safety)
1026 +
            let aarch64_partial = ArchCapabilities {
1027 +
                has_aes: false,
1028 +
                has_crc: false,
1029 +
                has_sha3: true, // This would be impossible in real detection
1030 +
                has_sse41: false,
1031 +
                has_sse42: false,
1032 +
                has_pclmulqdq: false,
1033 +
                has_avx512vl: false,
1034 +
                has_vpclmulqdq: false,
1035 +
            };
1036 +
            // Should fall back to software since AES is required for SHA3
1037 +
            assert_eq!(
1038 +
                select_performance_tier_for_test(&aarch64_partial),
1039 +
                PerformanceTier::SoftwareTable
1040 +
            );
1041 +
1042 +
            // x86_64: VPCLMULQDQ available but AVX512VL not (impossible in real hardware)
1043 +
            let x86_64_partial = ArchCapabilities {
1044 +
                has_aes: false,
1045 +
                has_crc: false,
1046 +
                has_sha3: false,
1047 +
                has_sse41: true,
1048 +
                has_sse42: false,
1049 +
                has_pclmulqdq: true,
1050 +
                has_avx512vl: false,
1051 +
                has_vpclmulqdq: true, // This would be impossible in real detection
1052 +
            };
1053 +
            // Should fall back to SSE tier since AVX512VL is required for VPCLMULQDQ
1054 +
            assert_eq!(
1055 +
                select_performance_tier_for_test(&x86_64_partial),
1056 +
                PerformanceTier::X86_64SsePclmulqdq
1057 +
            );
1058 +
        }
1059 +
    }
1060 +
}
1061 +
1062 +
#[cfg(test)]
1063 +
mod software_fallback_tests {
1064 +
    use super::*;
1065 +
    #[test]
1066 +
    fn test_aarch64_without_aes_falls_back_to_software() {
1067 +
        // Test that AArch64 without AES support falls back to software implementation
1068 +
        let capabilities_no_aes = ArchCapabilities {
1069 +
            has_aes: false, // No AES support
1070 +
            has_crc: false,
1071 +
            has_sha3: false, // SHA3 requires AES, so also false
1072 +
            has_sse41: false,
1073 +
            has_sse42: false,
1074 +
            has_pclmulqdq: false,
1075 +
            has_avx512vl: false,
1076 +
            has_vpclmulqdq: false,
1077 +
        };
1078 +
1079 +
        let tier = select_performance_tier_for_test(&capabilities_no_aes);
1080 +
        assert_eq!(
1081 +
            tier,
1082 +
            PerformanceTier::SoftwareTable,
1083 +
            "AArch64 without AES should fall back to software implementation"
1084 +
        );
1085 +
    }
1086 +
1087 +
    #[test]
1088 +
    fn test_x86_without_pclmulqdq_falls_back_to_software() {
1089 +
        // Test that x86 without SSE4.1/PCLMULQDQ falls back to software implementation
1090 +
        let capabilities_no_pclmul = ArchCapabilities {
1091 +
            has_aes: false,
1092 +
            has_crc: false,
1093 +
            has_sha3: false,
1094 +
            has_sse41: true, // SSE4.1 available
1095 +
            has_sse42: false,
1096 +
            has_pclmulqdq: false, // But PCLMULQDQ not available
1097 +
            has_avx512vl: false,
1098 +
            has_vpclmulqdq: false,
1099 +
        };
1100 +
1101 +
        let tier = select_performance_tier_for_test(&capabilities_no_pclmul);
1102 +
        assert_eq!(
1103 +
            tier,
1104 +
            PerformanceTier::SoftwareTable,
1105 +
            "x86 without PCLMULQDQ should fall back to software implementation"
1106 +
        );
1107 +
1108 +
        // Test x86 without SSE4.1
1109 +
        let capabilities_no_sse = ArchCapabilities {
1110 +
            has_aes: false,
1111 +
            has_crc: false,
1112 +
            has_sha3: false,
1113 +
            has_sse41: false, // No SSE4.1 support
1114 +
            has_sse42: false,
1115 +
            has_pclmulqdq: false, // PCLMULQDQ requires SSE4.1
1116 +
            has_avx512vl: false,
1117 +
            has_vpclmulqdq: false,
1118 +
        };
1119 +
1120 +
        let tier = select_performance_tier_for_test(&capabilities_no_sse);
1121 +
        assert_eq!(
1122 +
            tier,
1123 +
            PerformanceTier::SoftwareTable,
1124 +
            "x86 without SSE4.1 should fall back to software implementation"
1125 +
        );
1126 +
    }
1127 +
1128 +
    #[test]
1129 +
    fn test_conditional_compilation_coverage() {
1130 +
        // Test that software fallback is properly conditionally compiled
1131 +
        // This test ensures the conditional compilation logic is working correctly
1132 +
1133 +
        // Software fallback should be available when needed
1134 +
        #[cfg(any(
1135 +
            not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")),
1136 +
            target_arch = "x86",
1137 +
            all(target_arch = "aarch64", not(target_feature = "aes"))
1138 +
        ))]
1139 +
        {
1140 +
            // Software fallback should be compiled in these cases
1141 +
            use crate::arch::software;
1142 +
            let _test_fn = software::update;
1143 +
            // This test passes if it compiles successfully
1144 +
        }
1145 +
1146 +
        // For x86_64, software fallback should not be needed since SSE4.1/PCLMULQDQ are always available
1147 +
        // But it may still be compiled for testing purposes
1148 +
    }
1149 +
}
added vendor/crc-fast/src/ffi.rs +965 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! FFI bindings for the Rust library
4 +
//!
5 +
//! This module provides a C-compatible interface for the Rust library, allowing
6 +
//! C programs to use the library's functionality.
7 +
8 +
#![cfg(all(
9 +
    feature = "ffi",
10 +
    any(target_arch = "aarch64", target_arch = "x86_64", target_arch = "x86")
11 +
))]
12 +
13 +
use crate::CrcAlgorithm;
14 +
use crate::CrcParams;
15 +
use crate::{get_calculator_target, Digest};
16 +
use std::collections::HashMap;
17 +
use std::collections::HashSet;
18 +
use std::ffi::CStr;
19 +
use std::os::raw::c_char;
20 +
use std::slice;
21 +
use std::sync::{Mutex, OnceLock};
22 +
23 +
static STRING_CACHE: OnceLock<Mutex<HashSet<&'static str>>> = OnceLock::new();
24 +
25 +
/// Error codes for FFI operations
26 +
#[repr(C)]
27 +
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
28 +
pub enum CrcFastError {
29 +
    /// Operation completed successfully
30 +
    Success = 0,
31 +
    /// Lock was poisoned (thread panicked while holding lock)
32 +
    LockPoisoned = 1,
33 +
    /// Null pointer was passed where non-null required
34 +
    NullPointer = 2,
35 +
    /// Invalid key count for CRC parameters
36 +
    InvalidKeyCount = 3,
37 +
    /// Unsupported CRC width (must be 32 or 64)
38 +
    UnsupportedWidth = 4,
39 +
    /// Invalid UTF-8 string
40 +
    InvalidUtf8 = 5,
41 +
    /// File I/O error
42 +
    IoError = 6,
43 +
    /// Internal string conversion error
44 +
    StringConversionError = 7,
45 +
}
46 +
47 +
impl CrcFastError {
48 +
    /// Returns a static string describing the error
49 +
    fn message(&self) -> &'static str {
50 +
        match self {
51 +
            CrcFastError::Success => "Operation completed successfully",
52 +
            CrcFastError::LockPoisoned => "Lock was poisoned (thread panicked while holding lock)",
53 +
            CrcFastError::NullPointer => "Null pointer was passed where non-null required",
54 +
            CrcFastError::InvalidKeyCount => "Invalid key count for CRC parameters",
55 +
            CrcFastError::UnsupportedWidth => "Unsupported CRC width (must be 32 or 64)",
56 +
            CrcFastError::InvalidUtf8 => "Invalid UTF-8 string",
57 +
            CrcFastError::IoError => "File I/O error",
58 +
            CrcFastError::StringConversionError => "Internal string conversion error",
59 +
        }
60 +
    }
61 +
}
62 +
63 +
// Thread-local storage for the last error that occurred
64 +
thread_local! {
65 +
    static LAST_ERROR: std::cell::Cell<CrcFastError> = const { std::cell::Cell::new(CrcFastError::Success) };
66 +
}
67 +
68 +
/// Sets the thread-local last error
69 +
fn set_last_error(error: CrcFastError) {
70 +
    LAST_ERROR.with(|e| e.set(error));
71 +
}
72 +
73 +
/// Clears the thread-local last error (sets it to Success)
74 +
fn clear_last_error() {
75 +
    LAST_ERROR.with(|e| e.set(CrcFastError::Success));
76 +
}
77 +
78 +
// Global storage for stable key pointers to ensure they remain valid across FFI boundary
79 +
static STABLE_KEY_STORAGE: OnceLock<Mutex<HashMap<u64, Box<[u64]>>>> = OnceLock::new();
80 +
81 +
/// Creates a stable pointer to the keys for FFI usage.
82 +
/// The keys are stored in global memory to ensure the pointer remains valid.
83 +
/// Returns (pointer, count) on success, or (null, 0) on error.
84 +
/// Sets CrcFastError::LockPoisoned on lock failure.
85 +
fn create_stable_key_pointer(keys: &crate::CrcKeysStorage) -> (*const u64, u32) {
86 +
    let storage = STABLE_KEY_STORAGE.get_or_init(|| Mutex::new(HashMap::new()));
87 +
88 +
    // Create a unique hash for this key set to avoid duplicates
89 +
    let key_hash = match keys {
90 +
        crate::CrcKeysStorage::KeysFold256(keys) => {
91 +
            let mut hasher = std::collections::hash_map::DefaultHasher::new();
92 +
            use std::hash::{Hash, Hasher};
93 +
            keys.hash(&mut hasher);
94 +
            hasher.finish()
95 +
        }
96 +
        crate::CrcKeysStorage::KeysFutureTest(keys) => {
97 +
            let mut hasher = std::collections::hash_map::DefaultHasher::new();
98 +
            use std::hash::{Hash, Hasher};
99 +
            keys.hash(&mut hasher);
100 +
            hasher.finish()
101 +
        }
102 +
    };
103 +
104 +
    let mut storage_map = match storage.lock() {
105 +
        Ok(guard) => guard,
106 +
        Err(_) => {
107 +
            set_last_error(CrcFastError::LockPoisoned);
108 +
            return (std::ptr::null(), 0);
109 +
        }
110 +
    };
111 +
112 +
    // Check if we already have this key set stored
113 +
    if let Some(stored_keys) = storage_map.get(&key_hash) {
114 +
        return (stored_keys.as_ptr(), stored_keys.len() as u32);
115 +
    }
116 +
117 +
    // Store the keys in stable memory
118 +
    let key_vec: Vec<u64> = match keys {
119 +
        crate::CrcKeysStorage::KeysFold256(keys) => keys.to_vec(),
120 +
        crate::CrcKeysStorage::KeysFutureTest(keys) => keys.to_vec(),
121 +
    };
122 +
123 +
    let boxed_keys = key_vec.into_boxed_slice();
124 +
    let count = boxed_keys.len() as u32;
125 +
126 +
    storage_map.insert(key_hash, boxed_keys);
127 +
128 +
    let ptr = storage_map.get(&key_hash).expect("just inserted").as_ptr();
129 +
130 +
    (ptr, count)
131 +
}
132 +
133 +
/// A handle to the Digest object
134 +
#[repr(C)]
135 +
pub struct CrcFastDigestHandle(*mut Digest);
136 +
137 +
/// The supported CRC algorithms
138 +
#[repr(C)]
139 +
#[derive(Clone, Copy)]
140 +
pub enum CrcFastAlgorithm {
141 +
    // CrcCustom works with any supported widths (16, 32, 64)
142 +
    CrcCustom,
143 +
    Crc16Arc,
144 +
    Crc16Cdma2000,
145 +
    Crc16Cms,
146 +
    Crc16Dds110,
147 +
    Crc16DectR,
148 +
    Crc16DectX,
149 +
    Crc16Dnp,
150 +
    Crc16En13757,
151 +
    Crc16Genibus,
152 +
    Crc16Gsm,
153 +
    Crc16Ibm3740,
154 +
    Crc16IbmSdlc,
155 +
    Crc16IsoIec144433A,
156 +
    Crc16Kermit,
157 +
    Crc16Lj1200,
158 +
    Crc16M17,
159 +
    Crc16MaximDow,
160 +
    Crc16Mcrf4xx,
161 +
    Crc16Modbus,
162 +
    Crc16Nrsc5,
163 +
    Crc16OpensafetyA,
164 +
    Crc16OpensafetyB,
165 +
    Crc16Profibus,
166 +
    Crc16Riello,
167 +
    Crc16SpiFujitsu,
168 +
    Crc16T10Dif,
169 +
    Crc16Teledisk,
170 +
    Crc16Tms37157,
171 +
    Crc16Umts,
172 +
    Crc16Usb,
173 +
    Crc16Xmodem,
174 +
    Crc32Aixm,
175 +
    Crc32Autosar,
176 +
    Crc32Base91D,
177 +
    Crc32Bzip2,
178 +
    Crc32CdRomEdc,
179 +
    Crc32Cksum,
180 +
    Crc32Custom,
181 +
    Crc32Iscsi,
182 +
    Crc32IsoHdlc,
183 +
    Crc32Jamcrc,
184 +
    Crc32Mef,
185 +
    Crc32Mpeg2,
186 +
    Crc32Xfer,
187 +
    Crc64Custom,
188 +
    Crc64Ecma182,
189 +
    Crc64GoIso,
190 +
    Crc64Ms,
191 +
    Crc64Nvme,
192 +
    Crc64Redis,
193 +
    Crc64We,
194 +
    Crc64Xz,
195 +
}
196 +
197 +
// Convert from FFI enum to internal enum
198 +
#[allow(deprecated)]
199 +
impl From<CrcFastAlgorithm> for CrcAlgorithm {
200 +
    fn from(value: CrcFastAlgorithm) -> Self {
201 +
        match value {
202 +
            CrcFastAlgorithm::Crc16Arc => CrcAlgorithm::Crc16Arc,
203 +
            CrcFastAlgorithm::Crc16Cdma2000 => CrcAlgorithm::Crc16Cdma2000,
204 +
            CrcFastAlgorithm::Crc16Cms => CrcAlgorithm::Crc16Cms,
205 +
            CrcFastAlgorithm::Crc16Dds110 => CrcAlgorithm::Crc16Dds110,
206 +
            CrcFastAlgorithm::Crc16DectR => CrcAlgorithm::Crc16DectR,
207 +
            CrcFastAlgorithm::Crc16DectX => CrcAlgorithm::Crc16DectX,
208 +
            CrcFastAlgorithm::Crc16Dnp => CrcAlgorithm::Crc16Dnp,
209 +
            CrcFastAlgorithm::Crc16En13757 => CrcAlgorithm::Crc16En13757,
210 +
            CrcFastAlgorithm::Crc16Genibus => CrcAlgorithm::Crc16Genibus,
211 +
            CrcFastAlgorithm::Crc16Gsm => CrcAlgorithm::Crc16Gsm,
212 +
            CrcFastAlgorithm::Crc16Ibm3740 => CrcAlgorithm::Crc16Ibm3740,
213 +
            CrcFastAlgorithm::Crc16IbmSdlc => CrcAlgorithm::Crc16IbmSdlc,
214 +
            CrcFastAlgorithm::Crc16IsoIec144433A => CrcAlgorithm::Crc16IsoIec144433A,
215 +
            CrcFastAlgorithm::Crc16Kermit => CrcAlgorithm::Crc16Kermit,
216 +
            CrcFastAlgorithm::Crc16Lj1200 => CrcAlgorithm::Crc16Lj1200,
217 +
            CrcFastAlgorithm::Crc16M17 => CrcAlgorithm::Crc16M17,
218 +
            CrcFastAlgorithm::Crc16MaximDow => CrcAlgorithm::Crc16MaximDow,
219 +
            CrcFastAlgorithm::Crc16Mcrf4xx => CrcAlgorithm::Crc16Mcrf4xx,
220 +
            CrcFastAlgorithm::Crc16Modbus => CrcAlgorithm::Crc16Modbus,
221 +
            CrcFastAlgorithm::Crc16Nrsc5 => CrcAlgorithm::Crc16Nrsc5,
222 +
            CrcFastAlgorithm::Crc16OpensafetyA => CrcAlgorithm::Crc16OpensafetyA,
223 +
            CrcFastAlgorithm::Crc16OpensafetyB => CrcAlgorithm::Crc16OpensafetyB,
224 +
            CrcFastAlgorithm::Crc16Profibus => CrcAlgorithm::Crc16Profibus,
225 +
            CrcFastAlgorithm::Crc16Riello => CrcAlgorithm::Crc16Riello,
226 +
            CrcFastAlgorithm::Crc16SpiFujitsu => CrcAlgorithm::Crc16SpiFujitsu,
227 +
            CrcFastAlgorithm::Crc16T10Dif => CrcAlgorithm::Crc16T10Dif,
228 +
            CrcFastAlgorithm::Crc16Teledisk => CrcAlgorithm::Crc16Teledisk,
229 +
            CrcFastAlgorithm::Crc16Tms37157 => CrcAlgorithm::Crc16Tms37157,
230 +
            CrcFastAlgorithm::Crc16Umts => CrcAlgorithm::Crc16Umts,
231 +
            CrcFastAlgorithm::Crc16Usb => CrcAlgorithm::Crc16Usb,
232 +
            CrcFastAlgorithm::Crc16Xmodem => CrcAlgorithm::Crc16Xmodem,
233 +
            CrcFastAlgorithm::Crc32Aixm => CrcAlgorithm::Crc32Aixm,
234 +
            CrcFastAlgorithm::Crc32Autosar => CrcAlgorithm::Crc32Autosar,
235 +
            CrcFastAlgorithm::Crc32Base91D => CrcAlgorithm::Crc32Base91D,
236 +
            CrcFastAlgorithm::Crc32Bzip2 => CrcAlgorithm::Crc32Bzip2,
237 +
            CrcFastAlgorithm::Crc32CdRomEdc => CrcAlgorithm::Crc32CdRomEdc,
238 +
            CrcFastAlgorithm::Crc32Cksum => CrcAlgorithm::Crc32Cksum,
239 +
            CrcFastAlgorithm::Crc32Custom => CrcAlgorithm::Crc32Custom,
240 +
            CrcFastAlgorithm::Crc32Iscsi => CrcAlgorithm::Crc32Iscsi,
241 +
            CrcFastAlgorithm::Crc32IsoHdlc => CrcAlgorithm::Crc32IsoHdlc,
242 +
            CrcFastAlgorithm::Crc32Jamcrc => CrcAlgorithm::Crc32Jamcrc,
243 +
            CrcFastAlgorithm::Crc32Mef => CrcAlgorithm::Crc32Mef,
244 +
            CrcFastAlgorithm::Crc32Mpeg2 => CrcAlgorithm::Crc32Mpeg2,
245 +
            CrcFastAlgorithm::Crc32Xfer => CrcAlgorithm::Crc32Xfer,
246 +
            CrcFastAlgorithm::CrcCustom => CrcAlgorithm::CrcCustom,
247 +
            CrcFastAlgorithm::Crc64Custom => CrcAlgorithm::Crc64Custom,
248 +
            CrcFastAlgorithm::Crc64Ecma182 => CrcAlgorithm::Crc64Ecma182,
249 +
            CrcFastAlgorithm::Crc64GoIso => CrcAlgorithm::Crc64GoIso,
250 +
            CrcFastAlgorithm::Crc64Ms => CrcAlgorithm::Crc64Ms,
251 +
            CrcFastAlgorithm::Crc64Nvme => CrcAlgorithm::Crc64Nvme,
252 +
            CrcFastAlgorithm::Crc64Redis => CrcAlgorithm::Crc64Redis,
253 +
            CrcFastAlgorithm::Crc64We => CrcAlgorithm::Crc64We,
254 +
            CrcFastAlgorithm::Crc64Xz => CrcAlgorithm::Crc64Xz,
255 +
        }
256 +
    }
257 +
}
258 +
259 +
/// Gets the last error that occurred in the current thread
260 +
/// Returns CrcFastError::Success if no error has occurred
261 +
#[no_mangle]
262 +
pub extern "C" fn crc_fast_get_last_error() -> CrcFastError {
263 +
    LAST_ERROR.with(|e| e.get())
264 +
}
265 +
266 +
/// Clears the last error for the current thread
267 +
#[no_mangle]
268 +
pub extern "C" fn crc_fast_clear_error() {
269 +
    clear_last_error();
270 +
}
271 +
272 +
/// Gets a human-readable error message for the given error code
273 +
/// Returns a pointer to a static string (do not free)
274 +
#[no_mangle]
275 +
pub extern "C" fn crc_fast_error_message(error: CrcFastError) -> *const c_char {
276 +
    let message = error.message();
277 +
    // These are static strings, so we can safely return them as C strings
278 +
    // The strings are guaranteed to be valid UTF-8 and null-terminated
279 +
    match std::ffi::CString::new(message) {
280 +
        Ok(c_str) => {
281 +
            // Leak the string so it remains valid for the lifetime of the program
282 +
            // This is safe because error messages are static and small
283 +
            Box::leak(Box::new(c_str)).as_ptr()
284 +
        }
285 +
        Err(_) => std::ptr::null(),
286 +
    }
287 +
}
288 +
289 +
/// Custom CRC parameters
290 +
#[repr(C)]
291 +
pub struct CrcFastParams {
292 +
    pub algorithm: CrcFastAlgorithm,
293 +
    pub width: u8,
294 +
    pub poly: u64,
295 +
    pub init: u64,
296 +
    pub refin: bool,
297 +
    pub refout: bool,
298 +
    pub xorout: u64,
299 +
    pub check: u64,
300 +
    pub key_count: u32,
301 +
    pub keys: *const u64,
302 +
}
303 +
304 +
/// Fallible conversion from FFI struct to internal struct
305 +
/// Returns None if the parameters are invalid (unsupported key count)
306 +
fn try_params_from_ffi(value: &CrcFastParams) -> Option<CrcParams> {
307 +
    // Validate key pointer
308 +
    if value.keys.is_null() {
309 +
        return None;
310 +
    }
311 +
312 +
    // Convert C array back to appropriate CrcKeysStorage
313 +
    let keys = unsafe { std::slice::from_raw_parts(value.keys, value.key_count as usize) };
314 +
315 +
    let storage = match value.key_count {
316 +
        23 => match keys.try_into() {
317 +
            Ok(arr) => crate::CrcKeysStorage::from_keys_fold_256(arr),
318 +
            Err(_) => return None,
319 +
        },
320 +
        25 => match keys.try_into() {
321 +
            Ok(arr) => crate::CrcKeysStorage::from_keys_fold_future_test(arr),
322 +
            Err(_) => return None,
323 +
        },
324 +
        _ => return None, // Unsupported key count
325 +
    };
326 +
327 +
    // For reflected CRC-16, bit-reverse the init value for the SIMD algorithm
328 +
    let init_algorithm = if value.width == 16 && value.refin {
329 +
        (value.init as u16).reverse_bits() as u64
330 +
    } else {
331 +
        value.init
332 +
    };
333 +
334 +
    Some(CrcParams {
335 +
        algorithm: value.algorithm.into(),
336 +
        name: "custom", // C interface doesn't need the name field
337 +
        width: value.width,
338 +
        poly: value.poly,
339 +
        init: value.init,
340 +
        init_algorithm,
341 +
        refin: value.refin,
342 +
        refout: value.refout,
343 +
        xorout: value.xorout,
344 +
        check: value.check,
345 +
        keys: storage,
346 +
    })
347 +
}
348 +
349 +
// Convert from FFI struct to internal struct (legacy, may panic)
350 +
// For backwards compatibility, but prefer try_params_from_ffi
351 +
impl From<CrcFastParams> for CrcParams {
352 +
    fn from(value: CrcFastParams) -> Self {
353 +
        try_params_from_ffi(&value)
354 +
            .expect("Invalid CRC parameters: unsupported key count or null pointer")
355 +
    }
356 +
}
357 +
358 +
// Convert from internal struct to FFI struct
359 +
#[allow(deprecated)]
360 +
impl From<CrcParams> for CrcFastParams {
361 +
    fn from(params: CrcParams) -> Self {
362 +
        // Create stable key pointer for FFI usage
363 +
        let (keys_ptr, key_count) = create_stable_key_pointer(&params.keys);
364 +
365 +
        CrcFastParams {
366 +
            algorithm: match params.algorithm {
367 +
                CrcAlgorithm::Crc16Arc => CrcFastAlgorithm::Crc16Arc,
368 +
                CrcAlgorithm::Crc16Cdma2000 => CrcFastAlgorithm::Crc16Cdma2000,
369 +
                CrcAlgorithm::Crc16Cms => CrcFastAlgorithm::Crc16Cms,
370 +
                CrcAlgorithm::Crc16Dds110 => CrcFastAlgorithm::Crc16Dds110,
371 +
                CrcAlgorithm::Crc16DectR => CrcFastAlgorithm::Crc16DectR,
372 +
                CrcAlgorithm::Crc16DectX => CrcFastAlgorithm::Crc16DectX,
373 +
                CrcAlgorithm::Crc16Dnp => CrcFastAlgorithm::Crc16Dnp,
374 +
                CrcAlgorithm::Crc16En13757 => CrcFastAlgorithm::Crc16En13757,
375 +
                CrcAlgorithm::Crc16Genibus => CrcFastAlgorithm::Crc16Genibus,
376 +
                CrcAlgorithm::Crc16Gsm => CrcFastAlgorithm::Crc16Gsm,
377 +
                CrcAlgorithm::Crc16Ibm3740 => CrcFastAlgorithm::Crc16Ibm3740,
378 +
                CrcAlgorithm::Crc16IbmSdlc => CrcFastAlgorithm::Crc16IbmSdlc,
379 +
                CrcAlgorithm::Crc16IsoIec144433A => CrcFastAlgorithm::Crc16IsoIec144433A,
380 +
                CrcAlgorithm::Crc16Kermit => CrcFastAlgorithm::Crc16Kermit,
381 +
                CrcAlgorithm::Crc16Lj1200 => CrcFastAlgorithm::Crc16Lj1200,
382 +
                CrcAlgorithm::Crc16M17 => CrcFastAlgorithm::Crc16M17,
383 +
                CrcAlgorithm::Crc16MaximDow => CrcFastAlgorithm::Crc16MaximDow,
384 +
                CrcAlgorithm::Crc16Mcrf4xx => CrcFastAlgorithm::Crc16Mcrf4xx,
385 +
                CrcAlgorithm::Crc16Modbus => CrcFastAlgorithm::Crc16Modbus,
386 +
                CrcAlgorithm::Crc16Nrsc5 => CrcFastAlgorithm::Crc16Nrsc5,
387 +
                CrcAlgorithm::Crc16OpensafetyA => CrcFastAlgorithm::Crc16OpensafetyA,
388 +
                CrcAlgorithm::Crc16OpensafetyB => CrcFastAlgorithm::Crc16OpensafetyB,
389 +
                CrcAlgorithm::Crc16Profibus => CrcFastAlgorithm::Crc16Profibus,
390 +
                CrcAlgorithm::Crc16Riello => CrcFastAlgorithm::Crc16Riello,
391 +
                CrcAlgorithm::Crc16SpiFujitsu => CrcFastAlgorithm::Crc16SpiFujitsu,
392 +
                CrcAlgorithm::Crc16T10Dif => CrcFastAlgorithm::Crc16T10Dif,
393 +
                CrcAlgorithm::Crc16Teledisk => CrcFastAlgorithm::Crc16Teledisk,
394 +
                CrcAlgorithm::Crc16Tms37157 => CrcFastAlgorithm::Crc16Tms37157,
395 +
                CrcAlgorithm::Crc16Umts => CrcFastAlgorithm::Crc16Umts,
396 +
                CrcAlgorithm::Crc16Usb => CrcFastAlgorithm::Crc16Usb,
397 +
                CrcAlgorithm::Crc16Xmodem => CrcFastAlgorithm::Crc16Xmodem,
398 +
                CrcAlgorithm::Crc32Aixm => CrcFastAlgorithm::Crc32Aixm,
399 +
                CrcAlgorithm::Crc32Autosar => CrcFastAlgorithm::Crc32Autosar,
400 +
                CrcAlgorithm::Crc32Base91D => CrcFastAlgorithm::Crc32Base91D,
401 +
                CrcAlgorithm::Crc32Bzip2 => CrcFastAlgorithm::Crc32Bzip2,
402 +
                CrcAlgorithm::Crc32CdRomEdc => CrcFastAlgorithm::Crc32CdRomEdc,
403 +
                CrcAlgorithm::Crc32Cksum => CrcFastAlgorithm::Crc32Cksum,
404 +
                CrcAlgorithm::Crc32Custom => CrcFastAlgorithm::Crc32Custom,
405 +
                CrcAlgorithm::Crc32Iscsi => CrcFastAlgorithm::Crc32Iscsi,
406 +
                CrcAlgorithm::Crc32IsoHdlc => CrcFastAlgorithm::Crc32IsoHdlc,
407 +
                CrcAlgorithm::Crc32Jamcrc => CrcFastAlgorithm::Crc32Jamcrc,
408 +
                CrcAlgorithm::Crc32Mef => CrcFastAlgorithm::Crc32Mef,
409 +
                CrcAlgorithm::Crc32Mpeg2 => CrcFastAlgorithm::Crc32Mpeg2,
410 +
                CrcAlgorithm::Crc32Xfer => CrcFastAlgorithm::Crc32Xfer,
411 +
                CrcAlgorithm::CrcCustom => CrcFastAlgorithm::CrcCustom,
412 +
                CrcAlgorithm::Crc64Custom => CrcFastAlgorithm::Crc64Custom,
413 +
                CrcAlgorithm::Crc64Ecma182 => CrcFastAlgorithm::Crc64Ecma182,
414 +
                CrcAlgorithm::Crc64GoIso => CrcFastAlgorithm::Crc64GoIso,
415 +
                CrcAlgorithm::Crc64Ms => CrcFastAlgorithm::Crc64Ms,
416 +
                CrcAlgorithm::Crc64Nvme => CrcFastAlgorithm::Crc64Nvme,
417 +
                CrcAlgorithm::Crc64Redis => CrcFastAlgorithm::Crc64Redis,
418 +
                CrcAlgorithm::Crc64We => CrcFastAlgorithm::Crc64We,
419 +
                CrcAlgorithm::Crc64Xz => CrcFastAlgorithm::Crc64Xz,
420 +
            },
421 +
            width: params.width,
422 +
            poly: params.poly,
423 +
            init: params.init,
424 +
            refin: params.refin,
425 +
            refout: params.refout,
426 +
            xorout: params.xorout,
427 +
            check: params.check,
428 +
            key_count,
429 +
            keys: keys_ptr,
430 +
        }
431 +
    }
432 +
}
433 +
434 +
/// Creates a new Digest to compute CRC checksums using algorithm
435 +
#[no_mangle]
436 +
pub extern "C" fn crc_fast_digest_new(algorithm: CrcFastAlgorithm) -> *mut CrcFastDigestHandle {
437 +
    clear_last_error();
438 +
    let digest = Box::new(Digest::new(algorithm.into()));
439 +
    let handle = Box::new(CrcFastDigestHandle(Box::into_raw(digest)));
440 +
    Box::into_raw(handle)
441 +
}
442 +
443 +
/// Creates a new Digest with a custom initial state
444 +
#[no_mangle]
445 +
pub extern "C" fn crc_fast_digest_new_with_init_state(
446 +
    algorithm: CrcFastAlgorithm,
447 +
    init_state: u64,
448 +
) -> *mut CrcFastDigestHandle {
449 +
    clear_last_error();
450 +
    let digest = Box::new(Digest::new_with_init_state(algorithm.into(), init_state));
451 +
    let handle = Box::new(CrcFastDigestHandle(Box::into_raw(digest)));
452 +
    Box::into_raw(handle)
453 +
}
454 +
455 +
/// Creates a new Digest to compute CRC checksums using custom parameters
456 +
/// Returns NULL if parameters are invalid (invalid key count or null pointer)
457 +
/// Call crc_fast_get_last_error() to get the specific error code
458 +
#[no_mangle]
459 +
pub extern "C" fn crc_fast_digest_new_with_params(
460 +
    params: CrcFastParams,
461 +
) -> *mut CrcFastDigestHandle {
462 +
    clear_last_error();
463 +
    match try_params_from_ffi(&params) {
464 +
        Some(crc_params) => {
465 +
            let digest = Box::new(Digest::new_with_params(crc_params));
466 +
            let handle = Box::new(CrcFastDigestHandle(Box::into_raw(digest)));
467 +
            Box::into_raw(handle)
468 +
        }
469 +
        None => {
470 +
            // Set appropriate error based on the failure
471 +
            if params.keys.is_null() {
472 +
                set_last_error(CrcFastError::NullPointer);
473 +
            } else {
474 +
                set_last_error(CrcFastError::InvalidKeyCount);
475 +
            }
476 +
            std::ptr::null_mut()
477 +
        }
478 +
    }
479 +
}
480 +
481 +
/// Updates the Digest with data
482 +
#[no_mangle]
483 +
pub extern "C" fn crc_fast_digest_update(
484 +
    handle: *mut CrcFastDigestHandle,
485 +
    data: *const c_char,
486 +
    len: usize,
487 +
) {
488 +
    if handle.is_null() {
489 +
        set_last_error(CrcFastError::NullPointer);
490 +
        return;
491 +
    }
492 +
    if data.is_null() {
493 +
        set_last_error(CrcFastError::NullPointer);
494 +
        return;
495 +
    }
496 +
497 +
    clear_last_error();
498 +
    unsafe {
499 +
        let digest = &mut *(*handle).0;
500 +
501 +
        #[allow(clippy::unnecessary_cast)]
502 +
        let bytes = slice::from_raw_parts(data as *const u8, len);
503 +
        digest.update(bytes);
504 +
    }
505 +
}
506 +
507 +
/// Calculates the CRC checksum for data that's been written to the Digest
508 +
/// Returns 0 on error (e.g. null handle)
509 +
#[no_mangle]
510 +
pub extern "C" fn crc_fast_digest_finalize(handle: *mut CrcFastDigestHandle) -> u64 {
511 +
    if handle.is_null() {
512 +
        set_last_error(CrcFastError::NullPointer);
513 +
        return 0;
514 +
    }
515 +
516 +
    clear_last_error();
517 +
    unsafe {
518 +
        let digest = &*(*handle).0;
519 +
        digest.finalize()
520 +
    }
521 +
}
522 +
523 +
/// Free the Digest resources without finalizing
524 +
#[no_mangle]
525 +
pub extern "C" fn crc_fast_digest_free(handle: *mut CrcFastDigestHandle) {
526 +
    if handle.is_null() {
527 +
        set_last_error(CrcFastError::NullPointer);
528 +
        return;
529 +
    }
530 +
531 +
    clear_last_error();
532 +
    unsafe {
533 +
        let handle = Box::from_raw(handle);
534 +
        let _ = Box::from_raw(handle.0); // This drops the digest
535 +
    }
536 +
}
537 +
538 +
/// Reset the Digest state
539 +
#[no_mangle]
540 +
pub extern "C" fn crc_fast_digest_reset(handle: *mut CrcFastDigestHandle) {
541 +
    if handle.is_null() {
542 +
        set_last_error(CrcFastError::NullPointer);
543 +
        return;
544 +
    }
545 +
546 +
    clear_last_error();
547 +
    unsafe {
548 +
        let digest = &mut *(*handle).0;
549 +
550 +
        digest.reset();
551 +
    }
552 +
}
553 +
554 +
/// Finalize and reset the Digest in one operation
555 +
/// Returns 0 on error (e.g. null handle)
556 +
#[no_mangle]
557 +
pub extern "C" fn crc_fast_digest_finalize_reset(handle: *mut CrcFastDigestHandle) -> u64 {
558 +
    if handle.is_null() {
559 +
        set_last_error(CrcFastError::NullPointer);
560 +
        return 0;
561 +
    }
562 +
563 +
    clear_last_error();
564 +
    unsafe {
565 +
        let digest = &mut *(*handle).0;
566 +
567 +
        digest.finalize_reset()
568 +
    }
569 +
}
570 +
571 +
/// Combine two Digest checksums
572 +
#[no_mangle]
573 +
pub extern "C" fn crc_fast_digest_combine(
574 +
    handle1: *mut CrcFastDigestHandle,
575 +
    handle2: *mut CrcFastDigestHandle,
576 +
) {
577 +
    if handle1.is_null() || handle2.is_null() {
578 +
        set_last_error(CrcFastError::NullPointer);
579 +
        return;
580 +
    }
581 +
582 +
    clear_last_error();
583 +
    unsafe {
584 +
        let digest1 = &mut *(*handle1).0;
585 +
        let digest2 = &*(*handle2).0;
586 +
        digest1.combine(digest2);
587 +
    }
588 +
}
589 +
590 +
/// Gets the amount of data processed by the Digest so far
591 +
/// Returns 0 on error (e.g. null handle)
592 +
#[no_mangle]
593 +
pub extern "C" fn crc_fast_digest_get_amount(handle: *mut CrcFastDigestHandle) -> u64 {
594 +
    if handle.is_null() {
595 +
        set_last_error(CrcFastError::NullPointer);
596 +
        return 0;
597 +
    }
598 +
599 +
    clear_last_error();
600 +
    unsafe {
601 +
        let digest = &*(*handle).0;
602 +
        digest.get_amount()
603 +
    }
604 +
}
605 +
606 +
/// Gets the current state of the Digest
607 +
/// Returns 0 on error (e.g. null handle)
608 +
#[no_mangle]
609 +
pub extern "C" fn crc_fast_digest_get_state(handle: *mut CrcFastDigestHandle) -> u64 {
610 +
    if handle.is_null() {
611 +
        set_last_error(CrcFastError::NullPointer);
612 +
        return 0;
613 +
    }
614 +
    clear_last_error();
615 +
    unsafe {
616 +
        let digest = &*(*handle).0;
617 +
        digest.get_state()
618 +
    }
619 +
}
620 +
621 +
/// Helper method to calculate a CRC checksum directly for a string using algorithm
622 +
/// Returns 0 on error (e.g. null data pointer)
623 +
#[no_mangle]
624 +
pub extern "C" fn crc_fast_checksum(
625 +
    algorithm: CrcFastAlgorithm,
626 +
    data: *const c_char,
627 +
    len: usize,
628 +
) -> u64 {
629 +
    if data.is_null() {
630 +
        set_last_error(CrcFastError::NullPointer);
631 +
        return 0;
632 +
    }
633 +
    clear_last_error();
634 +
    unsafe {
635 +
        #[allow(clippy::unnecessary_cast)]
636 +
        let bytes = slice::from_raw_parts(data as *const u8, len);
637 +
        crate::checksum(algorithm.into(), bytes)
638 +
    }
639 +
}
640 +
641 +
/// Helper method to calculate a CRC checksum directly for data using custom parameters
642 +
/// Returns 0 if parameters are invalid or data is null
643 +
/// Call crc_fast_get_last_error() to get the specific error code
644 +
#[no_mangle]
645 +
pub extern "C" fn crc_fast_checksum_with_params(
646 +
    params: CrcFastParams,
647 +
    data: *const c_char,
648 +
    len: usize,
649 +
) -> u64 {
650 +
    if data.is_null() {
651 +
        set_last_error(CrcFastError::NullPointer);
652 +
        return 0;
653 +
    }
654 +
    match try_params_from_ffi(&params) {
655 +
        Some(crc_params) => {
656 +
            clear_last_error();
657 +
            unsafe {
658 +
                #[allow(clippy::unnecessary_cast)]
659 +
                let bytes = slice::from_raw_parts(data as *const u8, len);
660 +
                crate::checksum_with_params(crc_params, bytes)
661 +
            }
662 +
        }
663 +
        None => {
664 +
            if params.keys.is_null() {
665 +
                set_last_error(CrcFastError::NullPointer);
666 +
            } else {
667 +
                set_last_error(CrcFastError::InvalidKeyCount);
668 +
            }
669 +
            0
670 +
        }
671 +
    }
672 +
}
673 +
674 +
/// Helper method to just calculate a CRC checksum directly for a file using algorithm
675 +
/// Returns 0 if path is null or file I/O fails
676 +
/// Call crc_fast_get_last_error() to get the specific error code
677 +
#[no_mangle]
678 +
pub extern "C" fn crc_fast_checksum_file(
679 +
    algorithm: CrcFastAlgorithm,
680 +
    path_ptr: *const u8,
681 +
    path_len: usize,
682 +
) -> u64 {
683 +
    if path_ptr.is_null() {
684 +
        set_last_error(CrcFastError::NullPointer);
685 +
        return 0;
686 +
    }
687 +
688 +
    unsafe {
689 +
        match crate::checksum_file(
690 +
            algorithm.into(),
691 +
            &convert_to_string(path_ptr, path_len),
692 +
            None,
693 +
        ) {
694 +
            Ok(result) => {
695 +
                clear_last_error();
696 +
                result
697 +
            }
698 +
            Err(_) => {
699 +
                set_last_error(CrcFastError::IoError);
700 +
                0
701 +
            }
702 +
        }
703 +
    }
704 +
}
705 +
706 +
/// Helper method to calculate a CRC checksum directly for a file using custom parameters
707 +
/// Returns 0 if parameters are invalid, path is null, or file I/O fails
708 +
/// Call crc_fast_get_last_error() to get the specific error code
709 +
#[no_mangle]
710 +
pub extern "C" fn crc_fast_checksum_file_with_params(
711 +
    params: CrcFastParams,
712 +
    path_ptr: *const u8,
713 +
    path_len: usize,
714 +
) -> u64 {
715 +
    if path_ptr.is_null() {
716 +
        set_last_error(CrcFastError::NullPointer);
717 +
        return 0;
718 +
    }
719 +
720 +
    match try_params_from_ffi(&params) {
721 +
        Some(crc_params) => unsafe {
722 +
            match crate::checksum_file_with_params(
723 +
                crc_params,
724 +
                &convert_to_string(path_ptr, path_len),
725 +
                None,
726 +
            ) {
727 +
                Ok(result) => {
728 +
                    clear_last_error();
729 +
                    result
730 +
                }
731 +
                Err(_) => {
732 +
                    set_last_error(CrcFastError::IoError);
733 +
                    0
734 +
                }
735 +
            }
736 +
        },
737 +
        None => {
738 +
            if params.keys.is_null() {
739 +
                set_last_error(CrcFastError::NullPointer);
740 +
            } else {
741 +
                set_last_error(CrcFastError::InvalidKeyCount);
742 +
            }
743 +
            0
744 +
        }
745 +
    }
746 +
}
747 +
748 +
/// Combine two CRC checksums using algorithm
749 +
#[no_mangle]
750 +
pub extern "C" fn crc_fast_checksum_combine(
751 +
    algorithm: CrcFastAlgorithm,
752 +
    checksum1: u64,
753 +
    checksum2: u64,
754 +
    checksum2_len: u64,
755 +
) -> u64 {
756 +
    clear_last_error();
757 +
    crate::checksum_combine(algorithm.into(), checksum1, checksum2, checksum2_len)
758 +
}
759 +
760 +
/// Combine two CRC checksums using custom parameters
761 +
/// Returns 0 if parameters are invalid
762 +
/// Call crc_fast_get_last_error() to get the specific error code
763 +
#[no_mangle]
764 +
pub extern "C" fn crc_fast_checksum_combine_with_params(
765 +
    params: CrcFastParams,
766 +
    checksum1: u64,
767 +
    checksum2: u64,
768 +
    checksum2_len: u64,
769 +
) -> u64 {
770 +
    match try_params_from_ffi(&params) {
771 +
        Some(crc_params) => {
772 +
            clear_last_error();
773 +
            crate::checksum_combine_with_params(crc_params, checksum1, checksum2, checksum2_len)
774 +
        }
775 +
        None => {
776 +
            if params.keys.is_null() {
777 +
                set_last_error(CrcFastError::NullPointer);
778 +
            } else {
779 +
                set_last_error(CrcFastError::InvalidKeyCount);
780 +
            }
781 +
            0
782 +
        }
783 +
    }
784 +
}
785 +
786 +
/// Returns the custom CRC parameters for a given set of Rocksoft CRC parameters
787 +
/// If width is not 32 or 64, sets error to UnsupportedWidth
788 +
#[no_mangle]
789 +
pub extern "C" fn crc_fast_get_custom_params(
790 +
    name_ptr: *const c_char,
791 +
    width: u8,
792 +
    poly: u64,
793 +
    init: u64,
794 +
    reflected: bool,
795 +
    xorout: u64,
796 +
    check: u64,
797 +
) -> CrcFastParams {
798 +
    // Validate width
799 +
    if width != 32 && width != 64 {
800 +
        set_last_error(CrcFastError::UnsupportedWidth);
801 +
    } else {
802 +
        clear_last_error();
803 +
    }
804 +
805 +
    let name = if name_ptr.is_null() {
806 +
        "custom"
807 +
    } else {
808 +
        unsafe {
809 +
            match CStr::from_ptr(name_ptr).to_str() {
810 +
                Ok(s) => s,
811 +
                Err(_) => {
812 +
                    set_last_error(CrcFastError::InvalidUtf8);
813 +
                    "custom"
814 +
                }
815 +
            }
816 +
        }
817 +
    };
818 +
819 +
    // Get the custom params from the library
820 +
    let params = CrcParams::new(
821 +
        get_or_leak_string(name), // ✅ Use cached leak
822 +
        width,
823 +
        poly,
824 +
        init,
825 +
        reflected,
826 +
        xorout,
827 +
        check,
828 +
    );
829 +
830 +
    // Create stable key pointer for FFI usage
831 +
    let (keys_ptr, key_count) = create_stable_key_pointer(&params.keys);
832 +
833 +
    // Convert to FFI struct - use CrcCustom for all widths since CrcParams::new now uses it
834 +
    CrcFastParams {
835 +
        algorithm: CrcFastAlgorithm::CrcCustom,
836 +
        width: params.width,
837 +
        poly: params.poly,
838 +
        init: params.init,
839 +
        refin: params.refin,
840 +
        refout: params.refout,
841 +
        xorout: params.xorout,
842 +
        check: params.check,
843 +
        key_count,
844 +
        keys: keys_ptr,
845 +
    }
846 +
}
847 +
848 +
/// Gets the target build properties (CPU architecture and fine-tuning parameters) for this algorithm
849 +
/// Returns NULL if string conversion fails
850 +
/// Call crc_fast_get_last_error() to get the specific error code
851 +
#[no_mangle]
852 +
pub extern "C" fn crc_fast_get_calculator_target(algorithm: CrcFastAlgorithm) -> *const c_char {
853 +
    let target = get_calculator_target(algorithm.into());
854 +
855 +
    match std::ffi::CString::new(target) {
856 +
        Ok(s) => {
857 +
            clear_last_error();
858 +
            s.into_raw()
859 +
        }
860 +
        Err(_) => {
861 +
            set_last_error(CrcFastError::StringConversionError);
862 +
            std::ptr::null_mut()
863 +
        }
864 +
    }
865 +
}
866 +
867 +
/// Gets the version of this library
868 +
/// Returns a pointer to "unknown" if version string is invalid
869 +
#[no_mangle]
870 +
pub extern "C" fn crc_fast_get_version() -> *const c_char {
871 +
    const VERSION: &CStr =
872 +
        match CStr::from_bytes_with_nul(concat!(env!("CARGO_PKG_VERSION"), "\0").as_bytes()) {
873 +
            Ok(version) => version,
874 +
            // Fallback to "unknown" if version string is malformed
875 +
            Err(_) => c"unknown",
876 +
        };
877 +
878 +
    VERSION.as_ptr()
879 +
}
880 +
881 +
/// Calculates the CRC-32/ISCSI checksum (commonly called "crc32c" in many, but not all,
882 +
/// implementations).
883 +
///
884 +
/// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iscsi
885 +
///
886 +
/// Returns 0 on error (e.g. null data pointer)
887 +
#[no_mangle]
888 +
pub extern "C" fn crc_fast_crc32_iscsi(data: *const c_char, len: usize) -> u32 {
889 +
    if data.is_null() {
890 +
        set_last_error(CrcFastError::NullPointer);
891 +
        return 0;
892 +
    }
893 +
    clear_last_error();
894 +
    unsafe {
895 +
        #[allow(clippy::unnecessary_cast)]
896 +
        let bytes = slice::from_raw_parts(data as *const u8, len);
897 +
        crate::crc32_iscsi(bytes)
898 +
    }
899 +
}
900 +
901 +
/// Calculates the CRC-32/ISO-HDLC checksum (commonly called "crc32" in many, but not all,
902 +
/// implementations).
903 +
///
904 +
/// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc
905 +
///
906 +
/// Returns 0 on error (e.g. null data pointer)
907 +
#[no_mangle]
908 +
pub extern "C" fn crc_fast_crc32_iso_hdlc(data: *const c_char, len: usize) -> u32 {
909 +
    if data.is_null() {
910 +
        set_last_error(CrcFastError::NullPointer);
911 +
        return 0;
912 +
    }
913 +
    clear_last_error();
914 +
    unsafe {
915 +
        #[allow(clippy::unnecessary_cast)]
916 +
        let bytes = slice::from_raw_parts(data as *const u8, len);
917 +
        crate::crc32_iso_hdlc(bytes)
918 +
    }
919 +
}
920 +
921 +
/// Calculates the CRC-64/NVME checksum.
922 +
///
923 +
/// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme
924 +
///
925 +
/// Returns 0 on error (e.g. null data pointer)
926 +
#[no_mangle]
927 +
pub extern "C" fn crc_fast_crc64_nvme(data: *const c_char, len: usize) -> u64 {
928 +
    if data.is_null() {
929 +
        set_last_error(CrcFastError::NullPointer);
930 +
        return 0;
931 +
    }
932 +
    clear_last_error();
933 +
    unsafe {
934 +
        #[allow(clippy::unnecessary_cast)]
935 +
        let bytes = slice::from_raw_parts(data as *const u8, len);
936 +
        crate::crc64_nvme(bytes)
937 +
    }
938 +
}
939 +
940 +
unsafe fn convert_to_string(data: *const u8, len: usize) -> String {
941 +
    if data.is_null() {
942 +
        return String::new();
943 +
    }
944 +
945 +
    // Safely construct string slice from raw parts
946 +
    match std::str::from_utf8(slice::from_raw_parts(data, len)) {
947 +
        Ok(s) => s.to_string(),
948 +
        Err(_) => String::new(), // Return empty string for invalid UTF-8
949 +
    }
950 +
}
951 +
952 +
fn get_or_leak_string(s: &str) -> &'static str {
953 +
    let cache = STRING_CACHE.get_or_init(|| Mutex::new(HashSet::new()));
954 +
    let mut cache = cache.lock().unwrap();
955 +
956 +
    // Check if we already have this string
957 +
    if let Some(&cached) = cache.get(s) {
958 +
        return cached;
959 +
    }
960 +
961 +
    // Leak it and cache the result
962 +
    let leaked: &'static str = Box::leak(s.to_string().into_boxed_str());
963 +
    cache.insert(leaked);
964 +
    leaked
965 +
}
added vendor/crc-fast/src/generate.rs +838 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module calculates the keys needed for CRC calculations using PCLMULQDQ.
4 +
//!
5 +
//! Docs generated by Claude.ai
6 +
//!
7 +
//! # Overview
8 +
//!
9 +
//! This implements key generation for hardware-accelerated CRC computation using Intel's
10 +
//! PCLMULQDQ instruction (carryless multiplication). The keys enable a "fold-by-8" algorithm
11 +
//! that processes data in parallel chunks.
12 +
//!
13 +
//! # The PCLMULQDQ Algorithm
14 +
//!
15 +
//! Traditional CRC computation processes data byte-by-byte, which is slow. The PCLMULQDQ
16 +
//! instruction enables parallel processing by treating CRC computation as polynomial
17 +
//! multiplication in GF(2) (Galois Field with 2 elements, where addition is XOR).
18 +
//!
19 +
//! The algorithm works by:
20 +
//! 1. Loading multiple data chunks into SIMD registers
21 +
//! 2. Using precomputed keys to "fold" distant chunks together
22 +
//! 3. Reducing the result modulo the CRC polynomial
23 +
//!
24 +
//! # What Are "Keys"?
25 +
//!
26 +
//! Keys are precomputed constants representing x^n mod P(x), where:
27 +
//! - x^n represents a bit shift of n positions
28 +
//! - P(x) is the CRC polynomial
29 +
//! - The modulo operation is polynomial division in GF(2)
30 +
//!
31 +
//! Each key answers: "If I have a CRC value, and I want to shift it by N bits and reduce it,
32 +
//! what constant should I multiply by?"
33 +
//!
34 +
//! # The Distance Concept
35 +
//!
36 +
//! The "distance" or "exponent" refers to how many bits apart two data chunks are. When
37 +
//! processing data in 128-bit (16-byte) SIMD registers:
38 +
//!
39 +
//! - For fold-by-8: We process 8 registers (128 bytes) at once
40 +
//! - Keys at distance 32*N (CRC-32) or 64*N (CRC-64) let us combine chunks N registers apart
41 +
//!
42 +
//! Example for CRC-32:
43 +
//! - Distance 32*3 = 96 bits = 12 bytes (3 registers of 32-bit data)
44 +
//! - This key folds together data chunks that are 12 bytes apart
45 +
//!
46 +
//! The larger distances (32*63, 32*65) handle 256-byte chunks for very high throughput, such as
47 +
//! using AVX-512 VPCLMULQDQ.
48 +
49 +
//! # Why CRC-32 and CRC-64 Implementations Differ So Greatly
50 +
//!
51 +
//! The implementations look very different, but they're solving the same problem at
52 +
//! different scales. Here are the key differences:
53 +
//!
54 +
//! ## 1. Polynomial Size
55 +
//!
56 +
//! - **CRC-32**: 33-bit polynomial (32 data bits + implicit leading 1)
57 +
//! - **CRC-64**: 65-bit polynomial (64 data bits + implicit leading 1)
58 +
//!
59 +
//! This fundamental difference cascades through every function.
60 +
//!
61 +
//! ## 2. Register Representation
62 +
//!
63 +
//! - **CRC-32**: Uses u64 with values in upper bits (e.g., 0x080000000 = bit 35)
64 +
//!   - Has "headroom" above 32 bits for intermediate calculations
65 +
//!   - Results often need alignment shifts (>> 31)
66 +
//!
67 +
//! - **CRC-64**: Uses u64 directly (e.g., 0x8000000000000000 = bit 63)
68 +
//!   - No headroom - must use two u64s for μ calculation
69 +
//!   - Results are naturally aligned, no extra shifts needed
70 +
//!
71 +
//! ## 3. Distance Scaling
72 +
//!
73 +
//! Both algorithms fold data in chunks, but the chunk sizes differ:
74 +
//!
75 +
//! | Concept | CRC-32 | CRC-64 | Why? |
76 +
//! |---------|--------|--------|------|
77 +
//! | Base unit | 32 bits (4 bytes) | 64 bits (8 bytes) | Matches polynomial width |
78 +
//! | Distance 1 | 96 bits (12 bytes) | 128 bits (16 bytes) | 3× vs 2× base unit |
79 +
//! | Large chunk | 2016 bits (252 bytes) | 2048 bits (256 bytes) | Aligned to cache lines |
80 +
//!
81 +
//! The multipliers are smaller for CRC-64 (2×, 3× vs 3×, 5×) because the base unit
82 +
//! is already larger.
83 +
//!
84 +
//! ## 4. Algorithm Variations
85 +
//!
86 +
//! - **Key generation**: CRC-32 uses simple if-check; CRC-64 uses bit-mask trick
87 +
//!   - Both compute x^n mod P(x), but CRC-64's approach is more efficient
88 +
//!
89 +
//! - **Mu calculation**: CRC-32 uses single u64; CRC-64 needs double-register
90 +
//!   - CRC-64 can't fit x^128 ÷ P(x) in one u64
91 +
//!
92 +
//! - **Iteration counts**: Off-by-one differences everywhere
93 +
//!   - Reflects different starting points and alignment requirements
94 +
//!
95 +
//! ## 5. Reflection Handling
96 +
//!
97 +
//! - **CRC-32**: Reverses 32 bits, then shifts by 31
98 +
//! - **CRC-64**: Reverses 64 bits, no additional shift
99 +
//!
100 +
//! Both create the reflected representation needed for LSB-first CRCs, but
101 +
//! CRC-64's cleaner alignment means less post-processing.
102 +
//!
103 +
//! ## The Big Picture
104 +
//!
105 +
//! Despite the implementation differences, both are doing the same thing:
106 +
//! precomputing constants that let PCLMULQDQ fold distant data chunks together
107 +
//! efficiently. The differences arise from working with different-sized polynomials
108 +
//! within the constraints of fixed-size integer types (u64).
109 +
110 +
#![allow(dead_code)]
111 +
112 +
use core::ops::{BitAnd, BitOr, Shl, Shr};
113 +
114 +
/// Exponents (bit distances) for CRC-16 key generation.
115 +
///
116 +
/// CRC-16 uses the same exponents as CRC-32 because the folding algorithm operates on
117 +
/// 128-bit SIMD registers regardless of CRC width. CRC-16 computation is performed by
118 +
/// scaling 16-bit values to 32-bit space, using the CRC-32 algorithm infrastructure,
119 +
/// and then scaling the result back to 16 bits.
120 +
///
121 +
/// See CRC32_EXPONENTS for detailed documentation of the exponent values.
122 +
const CRC16_EXPONENTS: [u64; 23] = [
123 +
    0, // unused, just aligns indexes with the literature
124 +
    32 * 3,
125 +
    32 * 5,
126 +
    32 * 31,
127 +
    32 * 33,
128 +
    32 * 3,
129 +
    32 * 2,
130 +
    0, // mu, generate separately
131 +
    0, // poly, generate separately
132 +
    32 * 27,
133 +
    32 * 29,
134 +
    32 * 23,
135 +
    32 * 25,
136 +
    32 * 19,
137 +
    32 * 21,
138 +
    32 * 15,
139 +
    32 * 17,
140 +
    32 * 11,
141 +
    32 * 13,
142 +
    32 * 7,
143 +
    32 * 9,
144 +
    32 * 63, // for 256 byte distances (2048 - 32)
145 +
    32 * 65, // for 256 byte distances (2048 + 32)
146 +
];
147 +
148 +
/// Exponents (bit distances) for CRC-32 key generation.
149 +
///
150 +
/// These represent bit distances for the fold-by-8 algorithm. Each exponent defines
151 +
/// how many bits apart two data chunks are when folding.
152 +
///
153 +
/// # Why These Specific Values?
154 +
///
155 +
/// For CRC-32, the polynomial is 33 bits (including the implicit leading 1), so we work
156 +
/// with 32-bit data chunks. The exponents are designed to efficiently fold 128-byte chunks:
157 +
///
158 +
/// - Indices 1-4: Primary folding constants for 8-chunk (128-byte) processing
159 +
///   - 32*3, 32*5: Used for folding the first half
160 +
///   - 32*31, 32*33: Used for folding the second half
161 +
/// - Indices 5-6: Short-distance folding
162 +
///   - 32*3, 32*2: For final reduction stages
163 +
/// - Indices 7-8: Special values (mu and polynomial) computed separately
164 +
/// - Indices 9-20: Additional folding distances for progressive reduction
165 +
///   - These allow folding from 8 chunks down to 4, then 2, then 1
166 +
/// - Indices 21-22: Large distances for 256-byte chunk processing, such as using AVX-512 VPCLMULQDQ
167 +
///   - 32*63 = 2016 bits (252 bytes)
168 +
///   - 32*65 = 2080 bits (260 bytes)
169 +
///   - These enable very high-throughput processing of large buffers
170 +
const CRC32_EXPONENTS: [u64; 23] = [
171 +
    0, // unused, just aligns indexes with the literature
172 +
    32 * 3,
173 +
    32 * 5,
174 +
    32 * 31,
175 +
    32 * 33,
176 +
    32 * 3,
177 +
    32 * 2,
178 +
    0, // mu, generate separately
179 +
    0, // poly, generate separately
180 +
    32 * 27,
181 +
    32 * 29,
182 +
    32 * 23,
183 +
    32 * 25,
184 +
    32 * 19,
185 +
    32 * 21,
186 +
    32 * 15,
187 +
    32 * 17,
188 +
    32 * 11,
189 +
    32 * 13,
190 +
    32 * 7,
191 +
    32 * 9,
192 +
    32 * 63, // for 256 byte distances (2048 - 32)
193 +
    32 * 65, // for 256 byte distances (2048 + 32)
194 +
];
195 +
196 +
/// Exponents (bit distances) for CRC-64 key generation.
197 +
///
198 +
/// Similar to CRC32_EXPONENTS but scaled for 64-bit CRC polynomials.
199 +
///
200 +
/// # Why Different From CRC-32?
201 +
///
202 +
/// CRC-64 uses a 65-bit polynomial (64 bits + implicit leading 1), so:
203 +
/// - Data chunks are 64 bits instead of 32
204 +
/// - All distances are in multiples of 64 instead of 32
205 +
/// - The actual byte distances are larger (64*N bits = 8*N bytes)
206 +
///
207 +
/// # Distance Comparison
208 +
///
209 +
/// | Index | CRC-32 Distance | CRC-64 Distance | Purpose              |
210 +
/// |-------|-----------------|-----------------|----------------------|
211 +
/// | 1     | 96 bits (12B)   | 128 bits (16B)  | Primary fold         |
212 +
/// | 2     | 160 bits (20B)  | 192 bits (24B)  | Primary fold         |
213 +
/// | 21    | 2016 bits (252B)| 2048 bits (256B)| Large chunk folding  |
214 +
///
215 +
/// The smaller multipliers (2, 3 vs 3, 5) reflect the larger base unit (64 vs 32 bits).
216 +
const CRC64_EXPONENTS: [u64; 23] = [
217 +
    0, // unused, just aligns indexes with the literature
218 +
    64 * 2,
219 +
    64 * 3,
220 +
    64 * 16,
221 +
    64 * 17,
222 +
    64 * 2,
223 +
    64,
224 +
    0, // mu, generate separately
225 +
    0, // poly, generate separately
226 +
    64 * 14,
227 +
    64 * 15,
228 +
    64 * 12,
229 +
    64 * 13,
230 +
    64 * 10,
231 +
    64 * 11,
232 +
    64 * 8,
233 +
    64 * 9,
234 +
    64 * 6,
235 +
    64 * 7,
236 +
    64 * 4,
237 +
    64 * 5,
238 +
    64 * 32, // for 256 byte distances (2048)
239 +
    64 * 33, // for 256 byte distances (2048 + 64)
240 +
];
241 +
242 +
/// Generates the 23 keys needed to calculate CRCs for a given polynomial using PCLMULQDQ when
243 +
/// folding by 8.
244 +
pub fn keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] {
245 +
    let mut keys: [u64; 23] = [0; 23];
246 +
247 +
    let exponents = if 16 == width {
248 +
        CRC16_EXPONENTS
249 +
    } else if 32 == width {
250 +
        CRC32_EXPONENTS
251 +
    } else if 64 == width {
252 +
        CRC64_EXPONENTS
253 +
    } else {
254 +
        panic!("Unsupported width: {width}",);
255 +
    };
256 +
257 +
    let poly = if 16 == width {
258 +
        // CRC-16 uses a 17-bit polynomial (16 bits + implicit leading 1) scaled to 32-bit space
259 +
        (poly << 16) | (1u64 << 32)
260 +
    } else if 32 == width {
261 +
        poly | (1u64 << 32)
262 +
    } else {
263 +
        poly
264 +
    };
265 +
266 +
    for i in 1..23 {
267 +
        keys[i] = key(width, poly, reflected, exponents[i]);
268 +
    }
269 +
270 +
    keys[7] = mu(width, poly, reflected);
271 +
    keys[8] = polynomial(width, poly, reflected);
272 +
273 +
    keys
274 +
}
275 +
276 +
fn key(width: u8, poly: u64, reflected: bool, exponent: u64) -> u64 {
277 +
    if width == 16 {
278 +
        crc16_key(exponent, reflected, poly)
279 +
    } else if width == 32 {
280 +
        crc32_key(exponent, reflected, poly)
281 +
    } else if width == 64 {
282 +
        crc64_key(exponent, reflected, poly)
283 +
    } else {
284 +
        panic!("Unsupported width: {width}",);
285 +
    }
286 +
}
287 +
288 +
/// Computes a CRC-16 folding key for a given bit distance (exponent).
289 +
///
290 +
/// # Algorithm
291 +
///
292 +
/// CRC-16 key generation uses the same algorithm as CRC-32 because CRC-16 computation
293 +
/// is performed by scaling 16-bit values to 32-bit space. The polynomial is already
294 +
/// scaled to 32-bit space (poly << 16 | 1 << 32) before this function is called.
295 +
///
296 +
/// 1. Start with x^32 (represented as 0x080000000, bit 35 set)
297 +
/// 2. Multiply by x repeatedly (left shift), reducing modulo P(x) each time
298 +
/// 3. After (exponent - 31) iterations, we have x^exponent mod P(x)
299 +
///
300 +
/// # Reflection
301 +
///
302 +
/// For reflected CRC-16, we bit-reverse the 16-bit result and shift right by 31 bits
303 +
/// to align it properly for PCLMULQDQ operations.
304 +
fn crc16_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 {
305 +
    if exponent < 32 {
306 +
        return 0;
307 +
    }
308 +
309 +
    let mut n: u64 = 0x080000000;
310 +
    let e = exponent - 31;
311 +
312 +
    for _ in 0..e {
313 +
        n <<= 1;
314 +
        if (n & 0x100000000) != 0 {
315 +
            n ^= polynomial;
316 +
        }
317 +
    }
318 +
319 +
    if reflected {
320 +
        bit_reverse(n) >> 31
321 +
    } else {
322 +
        n << 32
323 +
    }
324 +
}
325 +
326 +
/// Computes a CRC-32 folding key for a given bit distance (exponent).
327 +
///
328 +
/// # Algorithm
329 +
///
330 +
/// This calculates x^exponent mod P(x) where P(x) is the CRC-32 polynomial.
331 +
///
332 +
/// 1. Start with x^32 (represented as 0x080000000, bit 35 set)
333 +
/// 2. Multiply by x repeatedly (left shift), reducing modulo P(x) each time
334 +
/// 3. After (exponent - 31) iterations, we have x^exponent mod P(x)
335 +
///
336 +
/// # Why Start at x^32?
337 +
///
338 +
/// For CRC-32, we're working with 33-bit polynomials (32 data bits + leading 1).
339 +
/// Starting at x^32 (bit 35 in a 36-bit representation) gives us the right alignment
340 +
/// for the first reduction step.
341 +
///
342 +
/// # Why exponent - 31?
343 +
///
344 +
/// We start at x^32 and want to reach x^exponent, so we need (exponent - 32) more
345 +
/// multiplications. But the first shift happens before the first check, so it's
346 +
/// actually (exponent - 31) iterations.
347 +
///
348 +
/// # Reflection
349 +
///
350 +
/// If the CRC is reflected (LSB-first), we bit-reverse the result and shift right
351 +
/// by 31 bits to align it properly for PCLMULQDQ operations.
352 +
fn crc32_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 {
353 +
    if exponent < 32 {
354 +
        return 0;
355 +
    }
356 +
357 +
    let mut n: u64 = 0x080000000;
358 +
    let e = exponent - 31;
359 +
360 +
    for _ in 0..e {
361 +
        n <<= 1;
362 +
        if (n & 0x100000000) != 0 {
363 +
            n ^= polynomial;
364 +
        }
365 +
    }
366 +
367 +
    if reflected {
368 +
        bit_reverse(n) >> 31
369 +
    } else {
370 +
        n << 32
371 +
    }
372 +
}
373 +
374 +
/// Computes a CRC-64 folding key for a given bit distance (exponent).
375 +
///
376 +
/// # Algorithm
377 +
///
378 +
/// Similar to CRC-32 but adapted for 64-bit polynomials:
379 +
///
380 +
/// 1. Start with x^63 (represented as 0x8000000000000000, bit 63 set)
381 +
/// 2. Multiply by x repeatedly, reducing modulo P(x) each time
382 +
/// 3. After (exponent - 63 or - 64) iterations, we have x^exponent mod P(x)
383 +
///
384 +
/// # Key Differences From CRC-32
385 +
///
386 +
/// 1. **Starting point**: 0x8000000000000000 vs 0x080000000
387 +
///    - CRC-64 uses bit 63 (the MSB of a 64-bit value)
388 +
///    - CRC-32 uses bit 35 (extended beyond 32 bits)
389 +
///
390 +
/// 2. **Iteration count**: Depends on reflection
391 +
///    - Reflected: exponent - 64 (because we iterate from x^64)
392 +
///    - Non-reflected: exponent - 63 (because we start at x^63)
393 +
///
394 +
/// 3. **Reduction step**: Uses a more efficient formulation
395 +
///    - `(n << 1) ^ ((0_u64.wrapping_sub(n >> 63)) & polynomial)`
396 +
///    - This is equivalent to: if MSB is set, shift and XOR with poly; else just shift
397 +
///    - The wrapping_sub creates a mask of all 1s or all 0s based on the MSB
398 +
///
399 +
/// 4. **No additional shift in result**: The result is already properly aligned
400 +
///    - CRC-32 needs `>> 31` adjustment for reflected case
401 +
///    - CRC-64 doesn't need this because it operates on full 64-bit values
402 +
fn crc64_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 {
403 +
    if exponent <= 64 {
404 +
        return 0;
405 +
    }
406 +
407 +
    let mut n: u64 = 0x8000000000000000;
408 +
    let e = if reflected {
409 +
        exponent - 64
410 +
    } else {
411 +
        exponent - 63
412 +
    };
413 +
414 +
    for _ in 0..e {
415 +
        n = (n << 1) ^ ((0_u64.wrapping_sub(n >> 63)) & polynomial);
416 +
    }
417 +
418 +
    if reflected {
419 +
        bit_reverse(n)
420 +
    } else {
421 +
        n
422 +
    }
423 +
}
424 +
425 +
fn polynomial(width: u8, polynomial: u64, reflected: bool) -> u64 {
426 +
    if width == 16 {
427 +
        crc16_polynomial(polynomial, reflected)
428 +
    } else if width == 32 {
429 +
        crc32_polynomial(polynomial, reflected)
430 +
    } else if width == 64 {
431 +
        crc64_polynomial(polynomial, reflected)
432 +
    } else {
433 +
        panic!("Unsupported width: {width}",);
434 +
    }
435 +
}
436 +
437 +
/// Formats a CRC-16 polynomial for use in PCLMULQDQ operations.
438 +
///
439 +
/// # Polynomial Representation
440 +
///
441 +
/// The polynomial passed to this function is already scaled to 32-bit space
442 +
/// (original_poly << 16 | 1 << 32). This function formats it for PCLMULQDQ.
443 +
///
444 +
/// # Non-Reflected Case
445 +
///
446 +
/// For non-reflected CRCs, the polynomial is already in the correct format
447 +
/// from the scaling done in keys().
448 +
///
449 +
/// # Reflected Case
450 +
///
451 +
/// For reflected (LSB-first) CRCs, we need to:
452 +
/// 1. Extract the original 16-bit polynomial from the scaled value
453 +
/// 2. Bit-reverse the 16-bit polynomial
454 +
/// 3. Shift left by 1 bit and set the LSB to 1
455 +
fn crc16_polynomial(polynomial: u64, reflected: bool) -> u64 {
456 +
    if !reflected {
457 +
        return polynomial;
458 +
    }
459 +
460 +
    // Extract original 16-bit poly from scaled polynomial (poly << 16 | 1 << 32)
461 +
    let original_poly = ((polynomial >> 16) & 0xFFFF) as u16;
462 +
    let reversed = bit_reverse(original_poly);
463 +
    ((reversed as u64) << 1) | 1
464 +
}
465 +
466 +
/// Formats a CRC-32 polynomial for use in PCLMULQDQ operations.
467 +
///
468 +
/// # Polynomial Representation
469 +
///
470 +
/// CRC polynomials are typically written without the implicit leading 1. For example:
471 +
/// - CRC-32 (IEEE 802.3): 0x04C11DB7
472 +
/// - The full polynomial is actually 0x104C11DB7 (33 bits)
473 +
///
474 +
/// # Non-Reflected Case
475 +
///
476 +
/// For non-reflected CRCs, we simply add the leading 1:
477 +
/// - Input: 0x04C11DB7
478 +
/// - Output: 0x104C11DB7 (bit 32 set)
479 +
///
480 +
/// # Reflected Case
481 +
///
482 +
/// For reflected (LSB-first) CRCs, we need to:
483 +
/// 1. Bit-reverse the 32-bit polynomial value
484 +
/// 2. Shift left by 1 bit
485 +
/// 3. Set the LSB to 1
486 +
///
487 +
/// This creates the reflected polynomial in the format expected by PCLMULQDQ.
488 +
///
489 +
/// Example:
490 +
/// - Original: 0x04C11DB7
491 +
/// - Bit-reversed: 0xEDB88320
492 +
/// - Shifted and ORed: 0x1DB710641
493 +
fn crc32_polynomial(polynomial: u64, reflected: bool) -> u64 {
494 +
    if !reflected {
495 +
        return polynomial | (1u64 << 32);
496 +
    };
497 +
498 +
    // For 32-bit polynomials, operate on full 33 bits including leading 1
499 +
    let reversed = bit_reverse((polynomial & 0xFFFFFFFF) as u32);
500 +
    // Need to set bit 32 (33rd bit) to get the 1 in the right position after reflection
501 +
    ((reversed as u64) << 1) | 1
502 +
}
503 +
504 +
/// Formats a CRC-64 polynomial for use in PCLMULQDQ operations.
505 +
///
506 +
/// # Key Difference From CRC-32
507 +
///
508 +
/// # Non-Reflected Case
509 +
///
510 +
/// For non-reflected CRCs, we simply return the polynomial as-is.
511 +
///
512 +
/// # Reflected Case
513 +
///
514 +
/// For reflected CRC-64:
515 +
/// 1. Bit-reverse all 64 bits of the polynomial
516 +
/// 2. Shift left by 1
517 +
/// 3. Set LSB to 1
518 +
///
519 +
/// Unlike CRC-32 which only reverses 32 bits, this reverses the full 64-bit value.
520 +
fn crc64_polynomial(polynomial: u64, reflected: bool) -> u64 {
521 +
    if !reflected {
522 +
        return polynomial;
523 +
    };
524 +
525 +
    // For 64-bit polynomials, operate on all 64 bits
526 +
    (bit_reverse(polynomial) << 1) | 1
527 +
}
528 +
529 +
fn mu(width: u8, polynomial: u64, reflected: bool) -> u64 {
530 +
    if width == 16 {
531 +
        crc16_mu(polynomial, reflected)
532 +
    } else if width == 32 {
533 +
        crc32_mu(polynomial, reflected)
534 +
    } else if width == 64 {
535 +
        crc64_mu(polynomial, reflected)
536 +
    } else {
537 +
        panic!("Unsupported width: {width}",);
538 +
    }
539 +
}
540 +
541 +
/// Computes the Barrett reduction constant (μ) for CRC-16.
542 +
///
543 +
/// # What Is μ (Mu)?
544 +
///
545 +
/// Mu is used in Barrett reduction for fast modular reduction without division.
546 +
/// For CRC-16 operations (scaled to 32-bit space), μ = floor(x^64 / P(x)).
547 +
///
548 +
/// # Algorithm
549 +
///
550 +
/// This uses the same algorithm as CRC-32 mu calculation because CRC-16 is
551 +
/// computed in 32-bit space. The polynomial is already scaled (poly << 16 | 1 << 32).
552 +
///
553 +
/// 1. Start with x^64 (represented as 0x100000000, bit 32 set)
554 +
/// 2. For each bit position from MSB down:
555 +
///    - If the dividend has a bit at position 32, record a 1 in quotient
556 +
///    - XOR the dividend with the polynomial
557 +
///    - Shift dividend left
558 +
/// 3. After 33 iterations, q contains μ
559 +
fn crc16_mu(polynomial: u64, reflected: bool) -> u64 {
560 +
    let mut n: u64 = 0x100000000;
561 +
    let mut q: u64 = 0;
562 +
563 +
    for _ in 0..33 {
564 +
        q <<= 1;
565 +
        if n & 0x100000000 != 0 {
566 +
            q |= 1;
567 +
            n ^= polynomial;
568 +
        }
569 +
        n <<= 1;
570 +
    }
571 +
572 +
    if reflected {
573 +
        bit_reverse(q) >> 31
574 +
    } else {
575 +
        q
576 +
    }
577 +
}
578 +
579 +
/// Computes the Barrett reduction constant (μ) for CRC-32.
580 +
///
581 +
/// # What Is μ (Mu)?
582 +
///
583 +
/// Mu is used in Barrett reduction, an algorithm for fast modular reduction without division.
584 +
/// For CRC operations, μ = floor(x^(2n) / P(x)) where n is the polynomial degree.
585 +
///
586 +
/// # Algorithm
587 +
///
588 +
/// This performs polynomial long division:
589 +
/// 1. Start with x^64 (represented as 0x100000000, bit 32 set in a 65-bit view)
590 +
/// 2. For each bit position from MSB down:
591 +
///    - If the dividend has a bit at position 32, record a 1 in quotient
592 +
///    - XOR the dividend with the polynomial (subtract in GF(2))
593 +
///    - Shift dividend left
594 +
/// 3. After 33 iterations, q contains μ
595 +
///
596 +
/// # Why 33 Iterations?
597 +
///
598 +
/// We're dividing a 65-bit value (x^64) by a 33-bit polynomial, giving a 33-bit quotient.
599 +
///
600 +
/// # Reflection
601 +
///
602 +
/// If reflected, the result is bit-reversed and shifted right by 31 to align properly.
603 +
fn crc32_mu(polynomial: u64, reflected: bool) -> u64 {
604 +
    let mut n: u64 = 0x100000000;
605 +
    let mut q: u64 = 0;
606 +
607 +
    for _ in 0..33 {
608 +
        q <<= 1;
609 +
        if n & 0x100000000 != 0 {
610 +
            q |= 1;
611 +
            n ^= polynomial;
612 +
        }
613 +
        n <<= 1;
614 +
    }
615 +
616 +
    if reflected {
617 +
        bit_reverse(q) >> 31
618 +
    } else {
619 +
        q
620 +
    }
621 +
}
622 +
623 +
/// Computes the Barrett reduction constant (μ) for CRC-64.
624 +
///
625 +
/// # Key Differences From CRC-32
626 +
///
627 +
/// CRC-64 requires dividing a 129-bit value (x^128) by a 65-bit polynomial, which
628 +
/// doesn't fit in a single u64. This implementation uses two u64 variables to represent
629 +
/// a 128-bit dividend.
630 +
///
631 +
/// # Algorithm
632 +
///
633 +
/// 1. Start with x^128 represented as (n_hi=1, n_lo=0)
634 +
/// 2. For each bit position:
635 +
///    - If n_hi is non-zero, record 1 in quotient and XOR n_lo with polynomial
636 +
///    - Shift the double-register left: n_hi = n_lo >> 63; n_lo <<= 1
637 +
/// 3. After 64 or 65 iterations, q contains μ
638 +
///
639 +
/// # Why Two Registers?
640 +
///
641 +
/// - n_hi:n_lo forms a 128-bit value
642 +
/// - We can only XOR with the polynomial when "bit 64" is set (n_hi != 0)
643 +
/// - The shift operation propagates the MSB of n_lo into n_hi
644 +
///
645 +
/// # Iteration Count Difference
646 +
///
647 +
/// - Reflected: 64 iterations (matches the polynomial degree)
648 +
/// - Non-reflected: 65 iterations (one extra for proper alignment)
649 +
///
650 +
/// This asymmetry exists because reflected CRCs process data LSB-first,
651 +
/// changing the division mechanics slightly.
652 +
///
653 +
/// # No Additional Shift
654 +
///
655 +
/// Unlike CRC-32's `>> 31`, CRC-64 doesn't need an extra shift in the reflected
656 +
/// case because the 64-bit result is already properly aligned.
657 +
fn crc64_mu(polynomial: u64, reflected: bool) -> u64 {
658 +
    let mut n_hi: u64 = 0x0000000000000001;
659 +
    let mut n_lo: u64 = 0x0000000000000000;
660 +
    let mut q: u64 = 0;
661 +
662 +
    let max = if reflected { 64 } else { 65 };
663 +
664 +
    for _ in 0..max {
665 +
        q <<= 1;
666 +
        if n_hi != 0 {
667 +
            q |= 1;
668 +
            n_lo ^= polynomial;
669 +
        }
670 +
        n_hi = n_lo >> 63;
671 +
        n_lo <<= 1;
672 +
    }
673 +
674 +
    if reflected {
675 +
        bit_reverse(q)
676 +
    } else {
677 +
        q
678 +
    }
679 +
}
680 +
681 +
/// Reverses the bits of a value (MSB becomes LSB and vice versa).
682 +
///
683 +
/// # Purpose in CRC Calculations
684 +
///
685 +
/// Reflected (LSB-first) CRCs process data in reverse bit order. This function
686 +
/// converts between normal and reflected representations.
687 +
///
688 +
/// # Why Generic?
689 +
///
690 +
/// This works with any unsigned integer type (u32, u64) through trait bounds,
691 +
/// allowing the same code to handle both CRC-32 (which reverses 32 bits) and
692 +
/// CRC-64 (which reverses 64 bits).
693 +
///
694 +
/// # Example
695 +
///
696 +
/// For u32: 0x12345678 → 0x1E6A2C48
697 +
/// - Binary: 0001 0010 0011 0100 0101 0110 0111 1000
698 +
/// - Reversed: 0001 1110 0110 1010 0010 1100 0100 1000
699 +
fn bit_reverse<T>(mut value: T) -> T
700 +
where
701 +
    T: Copy
702 +
        + Default
703 +
        + PartialEq
704 +
        + BitAnd<Output = T>
705 +
        + BitOr<Output = T>
706 +
        + Shl<usize, Output = T>
707 +
        + Shr<usize, Output = T>
708 +
        + From<u8>,
709 +
{
710 +
    let one = T::from(1u8);
711 +
    let mut result = T::default(); // Zero value
712 +
713 +
    // Get the bit size of type T
714 +
    let bit_size = core::mem::size_of::<T>() * 8;
715 +
716 +
    for _ in 0..bit_size {
717 +
        // Shift result left by 1
718 +
        result = result << 1;
719 +
720 +
        // OR with least significant bit of value
721 +
        result = result | (value & one);
722 +
723 +
        // Shift value right by 1
724 +
        value = value >> 1;
725 +
    }
726 +
727 +
    result
728 +
}
729 +
730 +
#[cfg(test)]
731 +
mod tests {
732 +
    use super::*;
733 +
    use crate::crc16::consts::{KEYS_1021_REVERSE, KEYS_8BB7_FORWARD};
734 +
    use crate::test::consts::TEST_ALL_CONFIGS;
735 +
736 +
    #[test]
737 +
    fn test_all() {
738 +
        for config in TEST_ALL_CONFIGS {
739 +
            let keys = keys(config.get_width(), config.get_poly(), config.get_refin());
740 +
            let expected = config.get_keys();
741 +
742 +
            for (i, key) in keys.iter().enumerate() {
743 +
                assert_eq!(
744 +
                    *key,
745 +
                    expected[i],
746 +
                    "Mismatch in keys for {} at index {}: expected 0x{:016x}, got 0x{:016x}",
747 +
                    config.get_name(),
748 +
                    i,
749 +
                    expected[i],
750 +
                    *key
751 +
                );
752 +
            }
753 +
        }
754 +
    }
755 +
756 +
    #[test]
757 +
    fn test_crc16_t10_dif_keys() {
758 +
        // CRC-16/T10-DIF: forward mode, poly=0x8BB7
759 +
        let generated = keys(16, 0x8BB7, false);
760 +
761 +
        for (i, key) in generated.iter().enumerate().take(21) {
762 +
            assert_eq!(
763 +
                *key, KEYS_8BB7_FORWARD[i],
764 +
                "CRC-16/T10-DIF key mismatch at index {}: expected 0x{:016x}, got 0x{:016x}",
765 +
                i, KEYS_8BB7_FORWARD[i], *key
766 +
            );
767 +
        }
768 +
    }
769 +
770 +
    #[test]
771 +
    fn test_crc16_ibm_sdlc_keys() {
772 +
        // CRC-16/IBM-SDLC: reflected mode, poly=0x1021
773 +
        let generated = keys(16, 0x1021, true);
774 +
775 +
        for (i, key) in generated.iter().enumerate().take(21) {
776 +
            assert_eq!(
777 +
                *key, KEYS_1021_REVERSE[i],
778 +
                "CRC-16/IBM-SDLC key mismatch at index {}: expected 0x{:016x}, got 0x{:016x}",
779 +
                i, KEYS_1021_REVERSE[i], *key
780 +
            );
781 +
        }
782 +
    }
783 +
}
784 +
785 +
#[cfg(test)]
786 +
mod property_tests {
787 +
    use super::*;
788 +
    use crate::test::miri_compatible_proptest_config;
789 +
    use proptest::prelude::*;
790 +
791 +
    /// Helper function to bit-reverse a 16-bit value
792 +
    fn bit_reverse_16(value: u16) -> u16 {
793 +
        let mut v = value;
794 +
        let mut result: u16 = 0;
795 +
        for _ in 0..16 {
796 +
            result = (result << 1) | (v & 1);
797 +
            v >>= 1;
798 +
        }
799 +
        result
800 +
    }
801 +
802 +
    proptest! {
803 +
        #![proptest_config(miri_compatible_proptest_config())]
804 +
805 +
        /// Feature: crc16-hardware-acceleration, Property 1: Forward polynomial formatting
806 +
        /// *For any* 16-bit polynomial value P, when generating the polynomial key for forward
807 +
        /// (non-reflected) CRC-16, the result SHALL equal `(P << 16) | (1 << 32)`.
808 +
        /// **Validates: Requirements 1.5**
809 +
        #[test]
810 +
        fn prop_forward_polynomial_formatting(poly in 0u16..=0xFFFFu16) {
811 +
            let generated_keys = keys(16, poly as u64, false);
812 +
            let polynomial_key = generated_keys[8];
813 +
            let expected = ((poly as u64) << 16) | (1u64 << 32);
814 +
            prop_assert_eq!(
815 +
                polynomial_key, expected,
816 +
                "Forward polynomial formatting failed for poly=0x{:04X}: expected 0x{:016X}, got 0x{:016X}",
817 +
                poly, expected, polynomial_key
818 +
            );
819 +
        }
820 +
821 +
        /// Feature: crc16-hardware-acceleration, Property 2: Reflected polynomial formatting
822 +
        /// *For any* 16-bit polynomial value P, when generating the polynomial key for reflected
823 +
        /// CRC-16, the result SHALL equal `(bit_reverse_16(P) << 1) | 1`.
824 +
        /// **Validates: Requirements 1.6**
825 +
        #[test]
826 +
        fn prop_reflected_polynomial_formatting(poly in 0u16..=0xFFFFu16) {
827 +
            let generated_keys = keys(16, poly as u64, true);
828 +
            let polynomial_key = generated_keys[8];
829 +
            let reversed = bit_reverse_16(poly);
830 +
            let expected = ((reversed as u64) << 1) | 1;
831 +
            prop_assert_eq!(
832 +
                polynomial_key, expected,
833 +
                "Reflected polynomial formatting failed for poly=0x{:04X}: expected 0x{:016X}, got 0x{:016X}",
834 +
                poly, expected, polynomial_key
835 +
            );
836 +
        }
837 +
    }
838 +
}
added vendor/crc-fast/src/lib.rs +2072 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
// Future proofing for no_std support
3 +
#![cfg_attr(not(feature = "std"), no_std)]
4 +
5 +
//! `crc-fast`
6 +
//! ===========
7 +
//!
8 +
//! Hardware-accelerated CRC calculation for
9 +
//! [all known CRC-32 and CRC-64 variants](https://reveng.sourceforge.io/crc-catalogue/all.htm)
10 +
//! using SIMD intrinsics which can exceed 100GiB/s for CRC-32 and 50GiB/s for CRC-64 on modern
11 +
//! systems.
12 +
//!
13 +
//! # Other languages
14 +
//!
15 +
//! Supplies a C-compatible shared library for use with other non-Rust languages. See
16 +
//! [PHP extension](https://github.com/awesomized/crc-fast-php-ext) example.
17 +
//!
18 +
//! # Background
19 +
//!
20 +
//! The implementation is based on Intel's
21 +
//! [Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction](https://web.archive.org/web/20131224125630/https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf),
22 +
//! white paper though it folds 8-at-a-time, like other modern implementations, rather than the
23 +
//! 4-at-a-time as in Intel's paper.
24 +
//!
25 +
//! Works on `aarch64`, `x86_64`, and `x86` architectures, and is hardware-accelerated and optimized
26 +
//! for each architecture.
27 +
//!
28 +
//! Inspired by [`crc32fast`](https://crates.io/crates/crc32fast),
29 +
//! [`crc64fast`](https://crates.io/crates/crc64fast),
30 +
//! and [`crc64fast-nvme`](https://crates.io/crates/crc64fast-nvme), each of which only accelerates
31 +
//! a single, different CRC variant, and all of them were "reflected" variants.
32 +
//!
33 +
//! In contrast, this library accelerates _every known variant_ (and should accelerate any future
34 +
//! variants without changes), including all the "non-reflected" variants.
35 +
//!
36 +
//! # Usage
37 +
//!
38 +
//! ## Digest
39 +
//!
40 +
//! Implements the [digest::DynDigest](https://docs.rs/digest/latest/digest/trait.DynDigest.html)
41 +
//! trait for easier integration with existing code.
42 +
//!
43 +
//! ```rust
44 +
//! use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc};
45 +
//!
46 +
//! let mut digest = Digest::new(Crc32IsoHdlc);
47 +
//! digest.update(b"1234");
48 +
//! digest.update(b"56789");
49 +
//! let checksum = digest.finalize();
50 +
//!
51 +
//! assert_eq!(checksum, 0xcbf43926);
52 +
//! ```
53 +
//!
54 +
//! ## Digest Write
55 +
//!
56 +
//! Implements the [std::io::Write](https://doc.rust-lang.org/std/io/trait.Write.html) trait for
57 +
//! easier integration with existing code.
58 +
//!
59 +
//! ```rust
60 +
//! use std::env;
61 +
//! use std::fs::File;
62 +
//! use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc};
63 +
//!
64 +
//! // for example/test purposes only, use your own file path
65 +
//! let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt");
66 +
//! let file_on_disk = file_path.to_str().unwrap();
67 +
//!
68 +
//! // actual usage
69 +
//! let mut digest = Digest::new(Crc32IsoHdlc);
70 +
//! let mut file = File::open(file_on_disk).unwrap();
71 +
//! std::io::copy(&mut file, &mut digest).unwrap();
72 +
//! let checksum = digest.finalize();
73 +
//!
74 +
//! assert_eq!(checksum, 0xcbf43926);
75 +
//! ```
76 +
//! ## checksum
77 +
//!```rust
78 +
//! use crc_fast::{checksum, CrcAlgorithm::Crc32IsoHdlc};
79 +
//!
80 +
//! let checksum = checksum(Crc32IsoHdlc, b"123456789");
81 +
//!
82 +
//! assert_eq!(checksum, 0xcbf43926);
83 +
//! ```
84 +
//!
85 +
//! ## checksum_combine
86 +
//!```rust
87 +
//! use crc_fast::{checksum, checksum_combine, CrcAlgorithm::Crc32IsoHdlc};
88 +
//!
89 +
//! let checksum_1 = checksum(Crc32IsoHdlc, b"1234");
90 +
//! let checksum_2 = checksum(Crc32IsoHdlc, b"56789");
91 +
//! let checksum = checksum_combine(Crc32IsoHdlc, checksum_1, checksum_2, 5);
92 +
//!
93 +
//! assert_eq!(checksum, 0xcbf43926);
94 +
//! ```
95 +
//!
96 +
//! ## checksum_file
97 +
//!```rust
98 +
//! use std::env;
99 +
//! use crc_fast::{checksum_file, CrcAlgorithm::Crc32IsoHdlc};
100 +
//!
101 +
//! // for example/test purposes only, use your own file path
102 +
//! let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt");
103 +
//! let file_on_disk = file_path.to_str().unwrap();
104 +
//!
105 +
//! let checksum = checksum_file(Crc32IsoHdlc, file_on_disk, None);
106 +
//!
107 +
//! assert_eq!(checksum.unwrap(), 0xcbf43926);
108 +
//! ```
109 +
//!
110 +
//! ## Custom CRC Parameters
111 +
//!
112 +
//! For cases where you need to use CRC variants not included in the predefined algorithms,
113 +
//! you can define custom CRC parameters using `CrcParams::new()` and use the `*_with_params` functions.
114 +
//!
115 +
//! ## checksum_with_params
116 +
//!```rust
117 +
//! use crc_fast::{checksum_with_params, CrcParams};
118 +
//!
119 +
//! // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
120 +
//! let custom_params = CrcParams::new(
121 +
//!     "CRC-32/CUSTOM",
122 +
//!     32,
123 +
//!     0x04c11db7,
124 +
//!     0xffffffff,
125 +
//!     true,
126 +
//!     0xffffffff,
127 +
//!     0xcbf43926,
128 +
//! );
129 +
//!
130 +
//! let checksum = checksum_with_params(custom_params, b"123456789");
131 +
//!
132 +
//! assert_eq!(checksum, 0xcbf43926);
133 +
//! ```
134 +
//!
135 +
//! # no_std Support
136 +
//!
137 +
//! Supports `no_std` environments. Use `default-features = false` in Cargo.toml.
138 +
//!
139 +
//! Note: When using this library in a `no_std` environment, the final binary must provide:
140 +
//! - A `#[panic_handler]` (e.g., via the `panic-halt` crate)
141 +
//! - A `#[global_allocator]` if using the `alloc` feature
142 +
143 +
// Provide a panic handler for no_std library checks
144 +
// Disabled with default-features = false (which binaries should use)
145 +
#[cfg(all(
146 +
    feature = "panic-handler",
147 +
    not(feature = "std"),
148 +
    not(test),
149 +
    not(doctest)
150 +
))]
151 +
#[panic_handler]
152 +
fn panic(_info: &core::panic::PanicInfo) -> ! {
153 +
    loop {}
154 +
}
155 +
156 +
// Provide a global allocator for no_std + alloc library checks
157 +
// Disabled with default-features = false (which binaries should use)
158 +
#[cfg(all(
159 +
    feature = "panic-handler",
160 +
    feature = "alloc",
161 +
    not(feature = "std"),
162 +
    not(test),
163 +
    not(doctest)
164 +
))]
165 +
#[global_allocator]
166 +
static ALLOCATOR: StubAllocator = StubAllocator;
167 +
168 +
#[cfg(all(
169 +
    feature = "panic-handler",
170 +
    feature = "alloc",
171 +
    not(feature = "std"),
172 +
    not(test),
173 +
    not(doctest)
174 +
))]
175 +
struct StubAllocator;
176 +
177 +
#[cfg(all(
178 +
    feature = "panic-handler",
179 +
    feature = "alloc",
180 +
    not(feature = "std"),
181 +
    not(test),
182 +
    not(doctest)
183 +
))]
184 +
unsafe impl core::alloc::GlobalAlloc for StubAllocator {
185 +
    unsafe fn alloc(&self, _layout: core::alloc::Layout) -> *mut u8 {
186 +
        core::ptr::null_mut()
187 +
    }
188 +
    unsafe fn dealloc(&self, _ptr: *mut u8, _layout: core::alloc::Layout) {}
189 +
}
190 +
191 +
use crate::crc16::consts::{
192 +
    CRC16_ARC, CRC16_CDMA2000, CRC16_CMS, CRC16_DDS_110, CRC16_DECT_R, CRC16_DECT_X, CRC16_DNP,
193 +
    CRC16_EN_13757, CRC16_GENIBUS, CRC16_GSM, CRC16_IBM_3740, CRC16_IBM_SDLC,
194 +
    CRC16_ISO_IEC_14443_3_A, CRC16_KERMIT, CRC16_LJ1200, CRC16_M17, CRC16_MAXIM_DOW, CRC16_MCRF4XX,
195 +
    CRC16_MODBUS, CRC16_NRSC_5, CRC16_OPENSAFETY_A, CRC16_OPENSAFETY_B, CRC16_PROFIBUS,
196 +
    CRC16_RIELLO, CRC16_SPI_FUJITSU, CRC16_T10_DIF, CRC16_TELEDISK, CRC16_TMS37157, CRC16_UMTS,
197 +
    CRC16_USB, CRC16_XMODEM,
198 +
};
199 +
200 +
use crate::crc32::consts::{
201 +
    CRC32_AIXM, CRC32_AUTOSAR, CRC32_BASE91_D, CRC32_BZIP2, CRC32_CD_ROM_EDC, CRC32_CKSUM,
202 +
    CRC32_ISCSI, CRC32_ISO_HDLC, CRC32_JAMCRC, CRC32_MEF, CRC32_MPEG_2, CRC32_XFER,
203 +
};
204 +
205 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
206 +
#[cfg(feature = "std")]
207 +
use crate::crc32::fusion;
208 +
209 +
use crate::crc64::consts::{
210 +
    CRC64_ECMA_182, CRC64_GO_ISO, CRC64_MS, CRC64_NVME, CRC64_REDIS, CRC64_WE, CRC64_XZ,
211 +
};
212 +
use crate::structs::Calculator;
213 +
use crate::traits::CrcCalculator;
214 +
#[cfg(feature = "alloc")]
215 +
use digest::DynDigest;
216 +
#[cfg(feature = "alloc")]
217 +
use digest::InvalidBufferSize;
218 +
219 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
220 +
use crate::feature_detection::get_arch_ops;
221 +
#[cfg(feature = "std")]
222 +
use std::fs::File;
223 +
#[cfg(feature = "std")]
224 +
use std::io::{Read, Write};
225 +
226 +
#[cfg(all(feature = "alloc", not(feature = "std")))]
227 +
extern crate alloc;
228 +
#[cfg(all(feature = "alloc", not(feature = "std")))]
229 +
use alloc::boxed::Box;
230 +
#[cfg(all(feature = "alloc", not(feature = "std")))]
231 +
use alloc::string::String;
232 +
233 +
mod algorithm;
234 +
pub mod arch;
235 +
mod cache;
236 +
mod combine;
237 +
mod consts;
238 +
mod crc16;
239 +
mod crc32;
240 +
mod crc64;
241 +
mod enums;
242 +
mod feature_detection;
243 +
#[cfg(feature = "ffi")]
244 +
mod ffi;
245 +
mod generate;
246 +
mod structs;
247 +
mod tables;
248 +
mod test;
249 +
mod traits;
250 +
251 +
/// Supported CRC-16, CRC-32, and CRC-64 variants
252 +
#[derive(Debug, Clone, Copy, PartialEq)]
253 +
pub enum CrcAlgorithm {
254 +
    /// Generic custom CRC variant that works with any supported width (16, 32, 64).
255 +
    /// The actual width is determined by the `width` field in `CrcParams`.
256 +
    CrcCustom,
257 +
    Crc16Arc,
258 +
    Crc16Cdma2000,
259 +
    Crc16Cms,
260 +
    Crc16Dds110,
261 +
    Crc16DectR,
262 +
    Crc16DectX,
263 +
    Crc16Dnp,
264 +
    Crc16En13757,
265 +
    Crc16Genibus,
266 +
    Crc16Gsm,
267 +
    Crc16Ibm3740,
268 +
    Crc16IbmSdlc,
269 +
    Crc16IsoIec144433A,
270 +
    Crc16Kermit,
271 +
    Crc16Lj1200,
272 +
    Crc16M17,
273 +
    Crc16MaximDow,
274 +
    Crc16Mcrf4xx,
275 +
    Crc16Modbus,
276 +
    Crc16Nrsc5,
277 +
    Crc16OpensafetyA,
278 +
    Crc16OpensafetyB,
279 +
    Crc16Profibus,
280 +
    Crc16Riello,
281 +
    Crc16SpiFujitsu,
282 +
    Crc16T10Dif,
283 +
    Crc16Teledisk,
284 +
    Crc16Tms37157,
285 +
    Crc16Umts,
286 +
    Crc16Usb,
287 +
    Crc16Xmodem,
288 +
    Crc32Aixm,
289 +
    Crc32Autosar,
290 +
    Crc32Base91D,
291 +
    Crc32Bzip2,
292 +
    Crc32CdRomEdc,
293 +
    Crc32Cksum,
294 +
    #[deprecated(
295 +
        since = "1.9.0",
296 +
        note = "Use CrcCustom instead, which works with any supported width (16, 32, 64)"
297 +
    )]
298 +
    Crc32Custom, // Custom CRC-32 implementation, not defined in consts
299 +
    Crc32Iscsi,
300 +
    Crc32IsoHdlc,
301 +
    Crc32Jamcrc,
302 +
    Crc32Mef,
303 +
    Crc32Mpeg2,
304 +
    Crc32Xfer,
305 +
    #[deprecated(
306 +
        since = "1.9.0",
307 +
        note = "Use CrcCustom instead, which works with any supported width (16, 32, 64)"
308 +
    )]
309 +
    Crc64Custom, // Custom CRC-64 implementation, not defined in consts
310 +
    Crc64Ecma182,
311 +
    Crc64GoIso,
312 +
    Crc64Ms,
313 +
    Crc64Nvme,
314 +
    Crc64Redis,
315 +
    Crc64We,
316 +
    Crc64Xz,
317 +
}
318 +
319 +
/// Internal storage for CRC folding keys that can accommodate different array sizes.
320 +
/// This enum allows future expansion to support larger folding distances while maintaining
321 +
/// backwards compatibility with existing const definitions.
322 +
#[derive(Clone, Copy, Debug, PartialEq)]
323 +
pub enum CrcKeysStorage {
324 +
    /// Current 23-key format for existing algorithms (supports up to 256-byte folding distances)
325 +
    KeysFold256([u64; 23]),
326 +
    /// Future 25-key format for potential expanded folding distances (testing purposes only)
327 +
    KeysFutureTest([u64; 25]),
328 +
}
329 +
330 +
impl CrcKeysStorage {
331 +
    /// Safe key access with bounds checking. Returns 0 for out-of-bounds indices.
332 +
    #[inline(always)]
333 +
    const fn get_key(self, index: usize) -> u64 {
334 +
        match self {
335 +
            CrcKeysStorage::KeysFold256(keys) => {
336 +
                if index < 23 {
337 +
                    keys[index]
338 +
                } else {
339 +
                    0
340 +
                }
341 +
            }
342 +
            CrcKeysStorage::KeysFutureTest(keys) => {
343 +
                if index < 25 {
344 +
                    keys[index]
345 +
                } else {
346 +
                    0
347 +
                }
348 +
            }
349 +
        }
350 +
    }
351 +
352 +
    /// Returns the number of keys available in this storage variant.
353 +
    #[inline(always)]
354 +
    const fn key_count(self) -> usize {
355 +
        match self {
356 +
            CrcKeysStorage::KeysFold256(_) => 23,
357 +
            CrcKeysStorage::KeysFutureTest(_) => 25,
358 +
        }
359 +
    }
360 +
361 +
    /// Const constructor for 23-key arrays (current format).
362 +
    #[inline(always)]
363 +
    const fn from_keys_fold_256(keys: [u64; 23]) -> Self {
364 +
        CrcKeysStorage::KeysFold256(keys)
365 +
    }
366 +
367 +
    /// Const constructor for 25-key arrays (future expansion testing).
368 +
    #[inline(always)]
369 +
    #[allow(dead_code)] // Reserved for future expansion
370 +
    const fn from_keys_fold_future_test(keys: [u64; 25]) -> Self {
371 +
        CrcKeysStorage::KeysFutureTest(keys)
372 +
    }
373 +
374 +
    /// Extracts keys as a [u64; 23] array for FFI compatibility.
375 +
    /// For variants with more than 23 keys, only the first 23 are returned.
376 +
    /// For variants with fewer keys, remaining slots are filled with 0.
377 +
    #[inline(always)]
378 +
    pub fn to_keys_array_23(self) -> [u64; 23] {
379 +
        match self {
380 +
            CrcKeysStorage::KeysFold256(keys) => keys,
381 +
            CrcKeysStorage::KeysFutureTest(keys) => {
382 +
                let mut result = [0u64; 23];
383 +
                result.copy_from_slice(&keys[..23]);
384 +
                result
385 +
            }
386 +
        }
387 +
    }
388 +
}
389 +
390 +
// Implement PartialEq between CrcKeysStorage and [u64; 23] for test compatibility
391 +
impl PartialEq<[u64; 23]> for CrcKeysStorage {
392 +
    fn eq(&self, other: &[u64; 23]) -> bool {
393 +
        self.to_keys_array_23() == *other
394 +
    }
395 +
}
396 +
397 +
impl PartialEq<CrcKeysStorage> for [u64; 23] {
398 +
    fn eq(&self, other: &CrcKeysStorage) -> bool {
399 +
        *self == other.to_keys_array_23()
400 +
    }
401 +
}
402 +
403 +
/// Parameters for CRC computation, including polynomial, initial value, and other settings.
404 +
#[derive(Clone, Copy, Debug)]
405 +
pub struct CrcParams {
406 +
    pub algorithm: CrcAlgorithm,
407 +
    pub name: &'static str,
408 +
    pub width: u8,
409 +
    pub poly: u64,
410 +
    pub init: u64,
411 +
    /// The init value in "algorithm form" for the SIMD implementation.
412 +
    ///
413 +
    /// For most CRC variants, this equals `init`. However, for reflected CRC-16 variants
414 +
    /// with non-symmetric init values (e.g., CRC-16/ISO-IEC-14443-3-A with init=0xC6C6),
415 +
    /// this stores the bit-reversed init value. This avoids runtime bit-reversal on every
416 +
    /// update() call, which would otherwise be needed because the SIMD algorithm operates
417 +
    /// on data in a different bit order than the catalog specification.
418 +
    ///
419 +
    /// Examples:
420 +
    /// - CRC-16/IBM-SDLC: init=0xFFFF, init_algorithm=0xFFFF (symmetric)
421 +
    /// - CRC-16/ISO-IEC-14443-3-A: init=0xC6C6, init_algorithm=0x6363 (0xC6C6.reverse_bits())
422 +
    pub init_algorithm: u64,
423 +
    pub refin: bool,
424 +
    pub refout: bool,
425 +
    pub xorout: u64,
426 +
    pub check: u64,
427 +
    pub keys: CrcKeysStorage,
428 +
}
429 +
430 +
/// Type alias for a function pointer that represents a CRC calculation function.
431 +
///
432 +
/// The function takes the following parameters:
433 +
/// - `state`: The current state of the CRC computation.
434 +
/// - `data`: A slice of bytes to be processed.
435 +
/// - `params`: The parameters for the CRC computation, such as polynomial, initial value, etc.
436 +
///
437 +
/// The function returns the updated state after processing the data.
438 +
///
439 +
/// Note: CrcParams is passed by reference to avoid copying the large struct (200+ bytes)
440 +
/// which causes significant overhead for small data sizes.
441 +
type CalculatorFn = fn(
442 +
    u64,        // state
443 +
    &[u8],      // data
444 +
    &CrcParams, // CRC implementation parameters
445 +
) -> u64;
446 +
447 +
/// Represents a CRC Digest, which is used to compute CRC checksums.
448 +
///
449 +
/// The `Digest` struct maintains the state of the CRC computation, including
450 +
/// the current state, the amount of data processed, the CRC parameters, and
451 +
/// the calculator function used to perform the CRC calculation.
452 +
#[derive(Copy, Clone, Debug)]
453 +
pub struct Digest {
454 +
    /// The current state of the CRC computation.
455 +
    state: u64,
456 +
457 +
    /// The total amount of data processed so far.
458 +
    amount: u64,
459 +
460 +
    /// The parameters for the CRC computation, such as polynomial, initial value, etc.
461 +
    params: CrcParams,
462 +
463 +
    /// The function used to perform the CRC calculation.
464 +
    calculator: CalculatorFn,
465 +
}
466 +
467 +
#[cfg(feature = "alloc")]
468 +
impl DynDigest for Digest {
469 +
    #[inline(always)]
470 +
    fn update(&mut self, data: &[u8]) {
471 +
        self.update(data);
472 +
    }
473 +
474 +
    #[inline(always)]
475 +
    fn finalize_into(self, buf: &mut [u8]) -> Result<(), InvalidBufferSize> {
476 +
        if buf.len() != self.output_size() {
477 +
            return Err(InvalidBufferSize);
478 +
        }
479 +
480 +
        let result = self.finalize();
481 +
        let be_bytes = result.to_be_bytes();
482 +
        let start = 8 - self.output_size();
483 +
        buf.copy_from_slice(&be_bytes[start..]);
484 +
485 +
        Ok(())
486 +
    }
487 +
488 +
    #[inline(always)]
489 +
    fn finalize_into_reset(&mut self, out: &mut [u8]) -> Result<(), InvalidBufferSize> {
490 +
        if out.len() != self.output_size() {
491 +
            return Err(InvalidBufferSize);
492 +
        }
493 +
        let result = self.finalize();
494 +
        self.reset();
495 +
        let be_bytes = result.to_be_bytes();
496 +
        let start = 8 - self.output_size();
497 +
        out.copy_from_slice(&be_bytes[start..]);
498 +
        Ok(())
499 +
    }
500 +
501 +
    #[inline(always)]
502 +
    fn reset(&mut self) {
503 +
        self.reset();
504 +
    }
505 +
506 +
    #[inline(always)]
507 +
    fn output_size(&self) -> usize {
508 +
        self.params.width as usize / 8
509 +
    }
510 +
511 +
    fn box_clone(&self) -> Box<dyn DynDigest> {
512 +
        Box::new(*self)
513 +
    }
514 +
}
515 +
516 +
impl Digest {
517 +
    /// Creates a new `Digest` instance for the specified CRC algorithm.
518 +
    ///
519 +
    /// # Examples
520 +
    ///
521 +
    /// ```rust
522 +
    /// use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc};
523 +
    ///
524 +
    /// let mut digest = Digest::new(Crc32IsoHdlc);
525 +
    /// digest.update(b"123456789");
526 +
    /// let checksum = digest.finalize();
527 +
    ///
528 +
    /// assert_eq!(checksum, 0xcbf43926);
529 +
    /// ```
530 +
    #[inline(always)]
531 +
    pub fn new(algorithm: CrcAlgorithm) -> Self {
532 +
        let (calculator, params) = get_calculator_params(algorithm);
533 +
534 +
        Self {
535 +
            state: params.init_algorithm,
536 +
            amount: 0,
537 +
            params,
538 +
            calculator,
539 +
        }
540 +
    }
541 +
542 +
    /// Creates a new `Digest` instance for the specified CRC algorithm with a custom initial state.
543 +
    ///
544 +
    /// # Examples
545 +
    ///
546 +
    /// ```rust
547 +
    /// use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc};
548 +
    ///
549 +
    /// // CRC-32/ISO-HDLC with initial state of 0x00000000, instead of the default initial state
550 +
    /// // of 0xffffffff,
551 +
    /// let mut digest = Digest::new_with_init_state(Crc32IsoHdlc, 0x00000000);
552 +
    /// digest.update(b"123456789");
553 +
    /// let checksum = digest.finalize();
554 +
    ///
555 +
    /// // different initial state, so checksum will be different
556 +
    /// assert_eq!(checksum, 0xd202d277);
557 +
    ///
558 +
    /// let mut digest = Digest::new_with_init_state(Crc32IsoHdlc, 0xffffffff);
559 +
    /// digest.update(b"123456789");
560 +
    /// let checksum = digest.finalize();
561 +
    ///
562 +
    /// // same initial state as the default, so checksum will be the same
563 +
    /// assert_eq!(checksum, 0xcbf43926);
564 +
    /// ```
565 +
    #[inline(always)]
566 +
    pub fn new_with_init_state(algorithm: CrcAlgorithm, init_state: u64) -> Self {
567 +
        let (calculator, params) = get_calculator_params(algorithm);
568 +
569 +
        Self {
570 +
            state: init_state,
571 +
            amount: 0,
572 +
            params,
573 +
            calculator,
574 +
        }
575 +
    }
576 +
577 +
    /// Creates a new `Digest` instance with custom CRC parameters.
578 +
    ///
579 +
    /// # Examples
580 +
    ///
581 +
    /// ```rust
582 +
    /// use crc_fast::{Digest, CrcParams};
583 +
    ///
584 +
    /// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
585 +
    /// let custom_params = CrcParams::new(
586 +
    ///     "CRC-32/CUSTOM",
587 +
    ///     32,
588 +
    ///     0x04c11db7,
589 +
    ///     0xffffffff,
590 +
    ///     true,
591 +
    ///     0xffffffff,
592 +
    ///     0xcbf43926,
593 +
    /// );
594 +
    ///
595 +
    /// let mut digest = Digest::new_with_params(custom_params);
596 +
    /// digest.update(b"123456789");
597 +
    /// let checksum = digest.finalize();
598 +
    ///
599 +
    /// assert_eq!(checksum, 0xcbf43926);
600 +
    /// ```
601 +
    #[inline(always)]
602 +
    pub fn new_with_params(params: CrcParams) -> Self {
603 +
        let calculator = Calculator::calculate as CalculatorFn;
604 +
605 +
        Self {
606 +
            state: params.init_algorithm,
607 +
            amount: 0,
608 +
            params,
609 +
            calculator,
610 +
        }
611 +
    }
612 +
613 +
    /// Updates the CRC state with the given data.
614 +
    #[inline(always)]
615 +
    pub fn update(&mut self, data: &[u8]) {
616 +
        self.state = (self.calculator)(self.state, data, &self.params);
617 +
        self.amount += data.len() as u64;
618 +
    }
619 +
620 +
    /// Finalizes the CRC computation and returns the result.
621 +
    #[inline(always)]
622 +
    pub fn finalize(&self) -> u64 {
623 +
        self.state ^ self.params.xorout
624 +
    }
625 +
626 +
    /// Finalizes the CRC computation, resets the state, and returns the result.
627 +
    #[inline(always)]
628 +
    pub fn finalize_reset(&mut self) -> u64 {
629 +
        let result = self.finalize();
630 +
        self.reset();
631 +
632 +
        result
633 +
    }
634 +
635 +
    /// Resets the CRC state to its initial value.
636 +
    #[inline(always)]
637 +
    pub fn reset(&mut self) {
638 +
        self.state = self.params.init_algorithm;
639 +
        self.amount = 0;
640 +
    }
641 +
642 +
    /// Combines the CRC state with a second `Digest` instance.
643 +
    #[inline(always)]
644 +
    pub fn combine(&mut self, other: &Self) {
645 +
        self.amount += other.amount;
646 +
        let other_crc = other.finalize();
647 +
648 +
        // note the xorout for the input, since it's already been applied so it has to be removed,
649 +
        // and then re-adding it on the final output
650 +
        self.state = combine::checksums(
651 +
            self.state ^ self.params.xorout,
652 +
            other_crc,
653 +
            other.amount,
654 +
            &self.params,
655 +
        ) ^ self.params.xorout;
656 +
    }
657 +
658 +
    /// Gets the amount of data processed so far
659 +
    #[inline(always)]
660 +
    pub fn get_amount(&self) -> u64 {
661 +
        self.amount
662 +
    }
663 +
664 +
    /// Gets the current CRC state.
665 +
    ///
666 +
    /// # Examples
667 +
    /// ```rust
668 +
    /// use crc_fast::{Digest, CrcAlgorithm::Crc32IsoHdlc};
669 +
    ///
670 +
    /// let mut digest = Digest::new(Crc32IsoHdlc);
671 +
    /// digest.update(b"123456789");
672 +
    /// let state = digest.get_state();
673 +
    ///
674 +
    /// // non-finalized state, so it won't match the final checksum
675 +
    /// assert_eq!(state, 0x340bc6d9);
676 +
    ///
677 +
    /// // finalized state will match the checksum
678 +
    /// assert_eq!(digest.finalize(), 0xcbf43926);
679 +
    /// ```
680 +
    #[inline(always)]
681 +
    pub fn get_state(&self) -> u64 {
682 +
        self.state
683 +
    }
684 +
}
685 +
686 +
#[cfg(feature = "std")]
687 +
impl Write for Digest {
688 +
    #[inline(always)]
689 +
    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
690 +
        self.update(buf);
691 +
        Ok(buf.len())
692 +
    }
693 +
694 +
    #[inline(always)]
695 +
    fn write_vectored(&mut self, bufs: &[std::io::IoSlice<'_>]) -> std::io::Result<usize> {
696 +
        let len: usize = bufs
697 +
            .iter()
698 +
            .map(|buf| {
699 +
                self.update(buf);
700 +
                buf.len()
701 +
            })
702 +
            .sum();
703 +
704 +
        Ok(len)
705 +
    }
706 +
707 +
    #[inline(always)]
708 +
    fn flush(&mut self) -> std::io::Result<()> {
709 +
        Ok(())
710 +
    }
711 +
712 +
    #[inline(always)]
713 +
    fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> {
714 +
        self.update(buf);
715 +
716 +
        Ok(())
717 +
    }
718 +
}
719 +
720 +
/// Computes the CRC checksum for the given data using the specified algorithm.
721 +
///
722 +
///```rust
723 +
/// use crc_fast::{checksum, CrcAlgorithm::Crc32IsoHdlc};
724 +
/// let checksum = checksum(Crc32IsoHdlc, b"123456789");
725 +
///
726 +
/// assert_eq!(checksum, 0xcbf43926);
727 +
/// ```
728 +
#[inline]
729 +
#[allow(deprecated)]
730 +
pub fn checksum(algorithm: CrcAlgorithm, buf: &[u8]) -> u64 {
731 +
    // avoid using get_calculator_params() here to reduce overhead for small data sizes
732 +
    match algorithm {
733 +
        CrcAlgorithm::Crc16Arc => {
734 +
            Calculator::calculate(CRC16_ARC.init, buf, &CRC16_ARC) ^ CRC16_ARC.xorout
735 +
        }
736 +
        CrcAlgorithm::Crc16Cdma2000 => {
737 +
            Calculator::calculate(CRC16_CDMA2000.init, buf, &CRC16_CDMA2000) ^ CRC16_CDMA2000.xorout
738 +
        }
739 +
        CrcAlgorithm::Crc16Cms => {
740 +
            Calculator::calculate(CRC16_CMS.init, buf, &CRC16_CMS) ^ CRC16_CMS.xorout
741 +
        }
742 +
        CrcAlgorithm::Crc16Dds110 => {
743 +
            Calculator::calculate(CRC16_DDS_110.init, buf, &CRC16_DDS_110) ^ CRC16_DDS_110.xorout
744 +
        }
745 +
        CrcAlgorithm::Crc16DectR => {
746 +
            Calculator::calculate(CRC16_DECT_R.init, buf, &CRC16_DECT_R) ^ CRC16_DECT_R.xorout
747 +
        }
748 +
        CrcAlgorithm::Crc16DectX => {
749 +
            Calculator::calculate(CRC16_DECT_X.init, buf, &CRC16_DECT_X) ^ CRC16_DECT_X.xorout
750 +
        }
751 +
        CrcAlgorithm::Crc16Dnp => {
752 +
            Calculator::calculate(CRC16_DNP.init, buf, &CRC16_DNP) ^ CRC16_DNP.xorout
753 +
        }
754 +
        CrcAlgorithm::Crc16En13757 => {
755 +
            Calculator::calculate(CRC16_EN_13757.init, buf, &CRC16_EN_13757) ^ CRC16_EN_13757.xorout
756 +
        }
757 +
        CrcAlgorithm::Crc16Genibus => {
758 +
            Calculator::calculate(CRC16_GENIBUS.init, buf, &CRC16_GENIBUS) ^ CRC16_GENIBUS.xorout
759 +
        }
760 +
        CrcAlgorithm::Crc16Gsm => {
761 +
            Calculator::calculate(CRC16_GSM.init, buf, &CRC16_GSM) ^ CRC16_GSM.xorout
762 +
        }
763 +
        CrcAlgorithm::Crc16Ibm3740 => {
764 +
            Calculator::calculate(CRC16_IBM_3740.init, buf, &CRC16_IBM_3740) ^ CRC16_IBM_3740.xorout
765 +
        }
766 +
        CrcAlgorithm::Crc16IbmSdlc => {
767 +
            Calculator::calculate(CRC16_IBM_SDLC.init, buf, &CRC16_IBM_SDLC) ^ CRC16_IBM_SDLC.xorout
768 +
        }
769 +
        CrcAlgorithm::Crc16IsoIec144433A => {
770 +
            Calculator::calculate(
771 +
                CRC16_ISO_IEC_14443_3_A.init_algorithm,
772 +
                buf,
773 +
                &CRC16_ISO_IEC_14443_3_A,
774 +
            ) ^ CRC16_ISO_IEC_14443_3_A.xorout
775 +
        }
776 +
        CrcAlgorithm::Crc16Kermit => {
777 +
            Calculator::calculate(CRC16_KERMIT.init, buf, &CRC16_KERMIT) ^ CRC16_KERMIT.xorout
778 +
        }
779 +
        CrcAlgorithm::Crc16Lj1200 => {
780 +
            Calculator::calculate(CRC16_LJ1200.init, buf, &CRC16_LJ1200) ^ CRC16_LJ1200.xorout
781 +
        }
782 +
        CrcAlgorithm::Crc16M17 => {
783 +
            Calculator::calculate(CRC16_M17.init, buf, &CRC16_M17) ^ CRC16_M17.xorout
784 +
        }
785 +
        CrcAlgorithm::Crc16MaximDow => {
786 +
            Calculator::calculate(CRC16_MAXIM_DOW.init, buf, &CRC16_MAXIM_DOW)
787 +
                ^ CRC16_MAXIM_DOW.xorout
788 +
        }
789 +
        CrcAlgorithm::Crc16Mcrf4xx => {
790 +
            Calculator::calculate(CRC16_MCRF4XX.init, buf, &CRC16_MCRF4XX) ^ CRC16_MCRF4XX.xorout
791 +
        }
792 +
        CrcAlgorithm::Crc16Modbus => {
793 +
            Calculator::calculate(CRC16_MODBUS.init, buf, &CRC16_MODBUS) ^ CRC16_MODBUS.xorout
794 +
        }
795 +
        CrcAlgorithm::Crc16Nrsc5 => {
796 +
            Calculator::calculate(CRC16_NRSC_5.init, buf, &CRC16_NRSC_5) ^ CRC16_NRSC_5.xorout
797 +
        }
798 +
        CrcAlgorithm::Crc16OpensafetyA => {
799 +
            Calculator::calculate(CRC16_OPENSAFETY_A.init, buf, &CRC16_OPENSAFETY_A)
800 +
                ^ CRC16_OPENSAFETY_A.xorout
801 +
        }
802 +
        CrcAlgorithm::Crc16OpensafetyB => {
803 +
            Calculator::calculate(CRC16_OPENSAFETY_B.init, buf, &CRC16_OPENSAFETY_B)
804 +
                ^ CRC16_OPENSAFETY_B.xorout
805 +
        }
806 +
        CrcAlgorithm::Crc16Profibus => {
807 +
            Calculator::calculate(CRC16_PROFIBUS.init, buf, &CRC16_PROFIBUS) ^ CRC16_PROFIBUS.xorout
808 +
        }
809 +
        CrcAlgorithm::Crc16Riello => {
810 +
            Calculator::calculate(CRC16_RIELLO.init_algorithm, buf, &CRC16_RIELLO)
811 +
                ^ CRC16_RIELLO.xorout
812 +
        }
813 +
        CrcAlgorithm::Crc16SpiFujitsu => {
814 +
            Calculator::calculate(CRC16_SPI_FUJITSU.init, buf, &CRC16_SPI_FUJITSU)
815 +
                ^ CRC16_SPI_FUJITSU.xorout
816 +
        }
817 +
        CrcAlgorithm::Crc16T10Dif => {
818 +
            Calculator::calculate(CRC16_T10_DIF.init, buf, &CRC16_T10_DIF) ^ CRC16_T10_DIF.xorout
819 +
        }
820 +
        CrcAlgorithm::Crc16Teledisk => {
821 +
            Calculator::calculate(CRC16_TELEDISK.init, buf, &CRC16_TELEDISK) ^ CRC16_TELEDISK.xorout
822 +
        }
823 +
        CrcAlgorithm::Crc16Tms37157 => {
824 +
            Calculator::calculate(CRC16_TMS37157.init_algorithm, buf, &CRC16_TMS37157)
825 +
                ^ CRC16_TMS37157.xorout
826 +
        }
827 +
        CrcAlgorithm::Crc16Umts => {
828 +
            Calculator::calculate(CRC16_UMTS.init, buf, &CRC16_UMTS) ^ CRC16_UMTS.xorout
829 +
        }
830 +
        CrcAlgorithm::Crc16Usb => {
831 +
            Calculator::calculate(CRC16_USB.init, buf, &CRC16_USB) ^ CRC16_USB.xorout
832 +
        }
833 +
        CrcAlgorithm::Crc16Xmodem => {
834 +
            Calculator::calculate(CRC16_XMODEM.init, buf, &CRC16_XMODEM) ^ CRC16_XMODEM.xorout
835 +
        }
836 +
        CrcAlgorithm::Crc32Aixm => {
837 +
            Calculator::calculate(CRC32_AIXM.init, buf, &CRC32_AIXM) ^ CRC32_AIXM.xorout
838 +
        }
839 +
        CrcAlgorithm::Crc32Autosar => {
840 +
            Calculator::calculate(CRC32_AUTOSAR.init, buf, &CRC32_AUTOSAR) ^ CRC32_AUTOSAR.xorout
841 +
        }
842 +
        CrcAlgorithm::Crc32Base91D => {
843 +
            Calculator::calculate(CRC32_BASE91_D.init, buf, &CRC32_BASE91_D) ^ CRC32_BASE91_D.xorout
844 +
        }
845 +
        CrcAlgorithm::Crc32Bzip2 => {
846 +
            Calculator::calculate(CRC32_BZIP2.init, buf, &CRC32_BZIP2) ^ CRC32_BZIP2.xorout
847 +
        }
848 +
        CrcAlgorithm::Crc32CdRomEdc => {
849 +
            Calculator::calculate(CRC32_CD_ROM_EDC.init, buf, &CRC32_CD_ROM_EDC)
850 +
                ^ CRC32_CD_ROM_EDC.xorout
851 +
        }
852 +
        CrcAlgorithm::Crc32Cksum => {
853 +
            Calculator::calculate(CRC32_CKSUM.init, buf, &CRC32_CKSUM) ^ CRC32_CKSUM.xorout
854 +
        }
855 +
        CrcAlgorithm::Crc32Custom => {
856 +
            panic!("Custom CRC-32 requires parameters via CrcParams::new()")
857 +
        }
858 +
        CrcAlgorithm::Crc32Iscsi => {
859 +
            crc32_iscsi_calculator(CRC32_ISCSI.init, buf, &CRC32_ISCSI) ^ CRC32_ISCSI.xorout
860 +
        }
861 +
        CrcAlgorithm::Crc32IsoHdlc => {
862 +
            crc32_iso_hdlc_calculator(CRC32_ISO_HDLC.init, buf, &CRC32_ISO_HDLC)
863 +
                ^ CRC32_ISO_HDLC.xorout
864 +
        }
865 +
        CrcAlgorithm::Crc32Jamcrc => {
866 +
            Calculator::calculate(CRC32_JAMCRC.init, buf, &CRC32_JAMCRC) ^ CRC32_JAMCRC.xorout
867 +
        }
868 +
        CrcAlgorithm::Crc32Mef => {
869 +
            Calculator::calculate(CRC32_MEF.init, buf, &CRC32_MEF) ^ CRC32_MEF.xorout
870 +
        }
871 +
        CrcAlgorithm::Crc32Mpeg2 => {
872 +
            Calculator::calculate(CRC32_MPEG_2.init, buf, &CRC32_MPEG_2) ^ CRC32_MPEG_2.xorout
873 +
        }
874 +
        CrcAlgorithm::Crc32Xfer => {
875 +
            Calculator::calculate(CRC32_XFER.init, buf, &CRC32_XFER) ^ CRC32_XFER.xorout
876 +
        }
877 +
        CrcAlgorithm::CrcCustom => {
878 +
            panic!("Custom CRC requires parameters via CrcParams::new()")
879 +
        }
880 +
        CrcAlgorithm::Crc64Custom => {
881 +
            panic!("Custom CRC-64 requires parameters via CrcParams::new()")
882 +
        }
883 +
        CrcAlgorithm::Crc64Ecma182 => {
884 +
            Calculator::calculate(CRC64_ECMA_182.init, buf, &CRC64_ECMA_182) ^ CRC64_ECMA_182.xorout
885 +
        }
886 +
        CrcAlgorithm::Crc64GoIso => {
887 +
            Calculator::calculate(CRC64_GO_ISO.init, buf, &CRC64_GO_ISO) ^ CRC64_GO_ISO.xorout
888 +
        }
889 +
        CrcAlgorithm::Crc64Ms => {
890 +
            Calculator::calculate(CRC64_MS.init, buf, &CRC64_MS) ^ CRC64_MS.xorout
891 +
        }
892 +
        CrcAlgorithm::Crc64Nvme => {
893 +
            Calculator::calculate(CRC64_NVME.init, buf, &CRC64_NVME) ^ CRC64_NVME.xorout
894 +
        }
895 +
        CrcAlgorithm::Crc64Redis => {
896 +
            Calculator::calculate(CRC64_REDIS.init, buf, &CRC64_REDIS) ^ CRC64_REDIS.xorout
897 +
        }
898 +
        CrcAlgorithm::Crc64We => {
899 +
            Calculator::calculate(CRC64_WE.init, buf, &CRC64_WE) ^ CRC64_WE.xorout
900 +
        }
901 +
        CrcAlgorithm::Crc64Xz => {
902 +
            Calculator::calculate(CRC64_XZ.init, buf, &CRC64_XZ) ^ CRC64_XZ.xorout
903 +
        }
904 +
    }
905 +
}
906 +
907 +
/// Computes the CRC checksum for the given data using custom CRC parameters.
908 +
///
909 +
/// # Examples
910 +
///
911 +
/// ```rust
912 +
/// use crc_fast::{checksum_with_params, CrcParams};
913 +
///
914 +
/// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
915 +
/// let custom_params = CrcParams::new(
916 +
///     "CRC-32/CUSTOM",
917 +
///     32,
918 +
///     0x04c11db7,
919 +
///     0xffffffff,
920 +
///     true,
921 +
///     0xffffffff,
922 +
///     0xcbf43926,
923 +
/// );
924 +
///
925 +
/// let checksum = checksum_with_params(custom_params, b"123456789");
926 +
///
927 +
/// assert_eq!(checksum, 0xcbf43926);
928 +
/// ```
929 +
pub fn checksum_with_params(params: CrcParams, buf: &[u8]) -> u64 {
930 +
    let calculator = Calculator::calculate as CalculatorFn;
931 +
932 +
    calculator(params.init_algorithm, buf, &params) ^ params.xorout
933 +
}
934 +
935 +
/// Computes the CRC checksum for the given file using the specified algorithm.
936 +
///
937 +
/// Appears to be much faster (~2X) than using Writer and io::*, at least on Apple M2 Ultra
938 +
///
939 +
/// # Errors
940 +
///
941 +
/// This function will return an error if the file cannot be read.
942 +
///
943 +
/// # Examples
944 +
/// ### checksum_file
945 +
///```rust
946 +
/// use std::env;
947 +
/// use crc_fast::{checksum_file, CrcAlgorithm::Crc32IsoHdlc};
948 +
///
949 +
/// // for example/test purposes only, use your own file path
950 +
/// let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt");
951 +
/// let file_on_disk = file_path.to_str().unwrap();
952 +
///
953 +
/// let checksum = checksum_file(Crc32IsoHdlc, file_on_disk, None);
954 +
///
955 +
/// assert_eq!(checksum.unwrap(), 0xcbf43926);
956 +
/// ```
957 +
#[cfg(feature = "std")]
958 +
#[inline(always)]
959 +
pub fn checksum_file(
960 +
    algorithm: CrcAlgorithm,
961 +
    path: &str,
962 +
    chunk_size: Option<usize>,
963 +
) -> Result<u64, std::io::Error> {
964 +
    checksum_file_with_digest(Digest::new(algorithm), path, chunk_size)
965 +
}
966 +
967 +
/// Computes the CRC checksum for the given file using custom CRC parameters.
968 +
///
969 +
/// Appears to be much faster (~2X) than using Writer and io::*, at least on Apple M2 Ultra
970 +
///
971 +
/// # Errors
972 +
///
973 +
/// This function will return an error if the file cannot be read.
974 +
///
975 +
/// # Examples
976 +
///
977 +
/// ```rust
978 +
/// use std::env;
979 +
/// use crc_fast::{checksum_file_with_params, CrcParams};
980 +
///
981 +
/// // for example/test purposes only, use your own file path
982 +
/// let file_path = env::current_dir().expect("missing working dir").join("crc-check.txt");
983 +
/// let file_on_disk = file_path.to_str().unwrap();
984 +
///
985 +
/// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
986 +
/// let custom_params = CrcParams::new(
987 +
///     "CRC-32/CUSTOM",
988 +
///     32,
989 +
///     0x04c11db7,
990 +
///     0xffffffff,
991 +
///     true,
992 +
///     0xffffffff,
993 +
///     0xcbf43926,
994 +
/// );
995 +
///
996 +
/// let checksum = checksum_file_with_params(custom_params, file_on_disk, None);
997 +
///
998 +
/// assert_eq!(checksum.unwrap(), 0xcbf43926);
999 +
/// ```
1000 +
#[cfg(feature = "std")]
1001 +
pub fn checksum_file_with_params(
1002 +
    params: CrcParams,
1003 +
    path: &str,
1004 +
    chunk_size: Option<usize>,
1005 +
) -> Result<u64, std::io::Error> {
1006 +
    checksum_file_with_digest(Digest::new_with_params(params), path, chunk_size)
1007 +
}
1008 +
1009 +
/// Computes the CRC checksum for the given file using the specified Digest.
1010 +
///
1011 +
/// # Errors
1012 +
///
1013 +
/// This function will return an error if the file cannot be read.
1014 +
#[cfg(feature = "std")]
1015 +
fn checksum_file_with_digest(
1016 +
    mut digest: Digest,
1017 +
    path: &str,
1018 +
    chunk_size: Option<usize>,
1019 +
) -> Result<u64, std::io::Error> {
1020 +
    let mut file = File::open(path)?;
1021 +
1022 +
    // 512KiB KiB was fastest in my benchmarks on an Apple M2 Ultra
1023 +
    //
1024 +
    // 4KiB ~7GiB/s
1025 +
    // 64KiB ~22 GiB/s
1026 +
    // 512KiB ~24 GiB/s
1027 +
    let chunk_size = chunk_size.unwrap_or(524288);
1028 +
1029 +
    let mut buf = vec![0; chunk_size];
1030 +
1031 +
    while let Ok(n) = file.read(&mut buf) {
1032 +
        if n == 0 {
1033 +
            break;
1034 +
        }
1035 +
        digest.update(&buf[..n]);
1036 +
    }
1037 +
1038 +
    Ok(digest.finalize())
1039 +
}
1040 +
1041 +
/// Combines two CRC checksums using the specified algorithm.
1042 +
///
1043 +
/// # Examples
1044 +
///```rust
1045 +
/// use crc_fast::{checksum, checksum_combine, CrcAlgorithm::Crc32IsoHdlc};
1046 +
///
1047 +
/// let checksum_1 = checksum(Crc32IsoHdlc, b"1234");
1048 +
/// let checksum_2 = checksum(Crc32IsoHdlc, b"56789");
1049 +
/// let checksum = checksum_combine(Crc32IsoHdlc, checksum_1, checksum_2, 5);
1050 +
///
1051 +
/// assert_eq!(checksum, 0xcbf43926);
1052 +
/// ```
1053 +
#[inline(always)]
1054 +
pub fn checksum_combine(
1055 +
    algorithm: CrcAlgorithm,
1056 +
    checksum1: u64,
1057 +
    checksum2: u64,
1058 +
    checksum2_len: u64,
1059 +
) -> u64 {
1060 +
    let params = get_calculator_params(algorithm).1;
1061 +
1062 +
    combine::checksums(checksum1, checksum2, checksum2_len, &params)
1063 +
}
1064 +
1065 +
/// Combines two CRC checksums using custom CRC parameters.
1066 +
///
1067 +
/// # Examples
1068 +
///
1069 +
/// ```rust
1070 +
/// use crc_fast::{checksum_with_params, checksum_combine_with_params, CrcParams};
1071 +
///
1072 +
/// // Define custom CRC-32 parameters (equivalent to CRC-32/ISO-HDLC)
1073 +
/// let custom_params = CrcParams::new(
1074 +
///     "CRC-32/CUSTOM",
1075 +
///     32,
1076 +
///     0x04c11db7,
1077 +
///     0xffffffff,
1078 +
///     true,
1079 +
///     0xffffffff,
1080 +
///     0xcbf43926,
1081 +
/// );
1082 +
///
1083 +
/// let checksum_1 = checksum_with_params(custom_params, b"1234");
1084 +
/// let checksum_2 = checksum_with_params(custom_params, b"56789");
1085 +
/// let checksum = checksum_combine_with_params(custom_params, checksum_1, checksum_2, 5);
1086 +
///
1087 +
/// assert_eq!(checksum, 0xcbf43926);
1088 +
/// ```
1089 +
pub fn checksum_combine_with_params(
1090 +
    params: CrcParams,
1091 +
    checksum1: u64,
1092 +
    checksum2: u64,
1093 +
    checksum2_len: u64,
1094 +
) -> u64 {
1095 +
    combine::checksums(checksum1, checksum2, checksum2_len, &params)
1096 +
}
1097 +
1098 +
/// Returns the target used to calculate the CRC checksum for the specified algorithm.
1099 +
///
1100 +
/// This function provides visibility into the active performance tier being used for CRC calculations.
1101 +
/// The target string follows the format `{architecture}-{intrinsics-family}-{intrinsics-features}`,
1102 +
/// such as `aarch64-aes-sha3` or `x86_64-avx512-vpclmulqdq`.
1103 +
///
1104 +
/// The performance tier system provides graceful degradation across different hardware capabilities:
1105 +
/// - **AArch64**: `aarch64-aes-sha3` (highest) → `aarch64-aes-pmull` (baseline)
1106 +
/// - **x86_64**: `x86_64-avx512-vpclmulqdq` (highest) → `x86_64-avx512-pclmulqdq` (mid) → `x86_64-sse-pclmulqdq` (baseline)
1107 +
/// - **x86**: `x86-sse-pclmulqdq` (baseline) → `software-fallback-tables` (fallback)
1108 +
/// - **Other architectures**: `software-fallback-tables`
1109 +
///
1110 +
/// The tier selection is deterministic and consistent across runs on the same hardware,
1111 +
/// combining compile-time and runtime feature detection for safety and optimal performance.
1112 +
///
1113 +
/// These strings are informational only, not stable, and shouldn't be relied on to match across
1114 +
/// versions.
1115 +
///
1116 +
/// # Examples
1117 +
///```rust
1118 +
/// use crc_fast::{get_calculator_target, CrcAlgorithm::Crc32IsoHdlc};
1119 +
///
1120 +
/// let target = get_calculator_target(Crc32IsoHdlc);
1121 +
/// println!("Using performance tier: {}", target);
1122 +
/// // Example outputs:
1123 +
/// // "aarch64-aes-sha3" - AArch64 with SHA3 and AES support
1124 +
/// // "x86_64-avx512-vpclmulqdq" - x86_64 with VPCLMULQDQ support
1125 +
/// // "x86_64-sse-pclmulqdq" - x86_64 baseline with SSE4.1 and PCLMULQDQ
1126 +
/// ```
1127 +
#[cfg(all(
1128 +
    feature = "alloc",
1129 +
    any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")
1130 +
))]
1131 +
pub fn get_calculator_target(_algorithm: CrcAlgorithm) -> String {
1132 +
    let arch_ops = get_arch_ops();
1133 +
    arch_ops.get_target_string()
1134 +
}
1135 +
1136 +
/// Calculates the CRC-32/ISCSI checksum (commonly called "crc32c" in many, but not all,
1137 +
/// implementations).
1138 +
///
1139 +
/// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iscsi
1140 +
///
1141 +
/// Nano-optimized to be faster than calling checksum() for this specific algorithm, since it avoids
1142 +
/// the match statement overhead.
1143 +
///
1144 +
/// # Examples
1145 +
///
1146 +
/// ```rust
1147 +
/// use crc_fast::crc32_iscsi;
1148 +
/// let checksum = crc32_iscsi(b"123456789");
1149 +
/// assert_eq!(checksum, 0xe3069283);
1150 +
/// ```
1151 +
#[inline(always)]
1152 +
pub fn crc32_iscsi(data: &[u8]) -> u32 {
1153 +
    crc32_iscsi_calculator(CRC32_ISCSI.init, data, &CRC32_ISCSI) as u32 ^ CRC32_ISCSI.xorout as u32
1154 +
}
1155 +
1156 +
/// Calculates the CRC-32/ISO-HDLC checksum (commonly called "crc32" in many, but not all,
1157 +
/// implementations).
1158 +
///
1159 +
/// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-32-iso-hdlc
1160 +
///
1161 +
/// Nano-optimized to be faster than calling checksum() for this specific algorithm, since it avoids
1162 +
/// the match statement overhead.
1163 +
///
1164 +
/// # Examples
1165 +
///
1166 +
/// ```rust
1167 +
/// use crc_fast::crc32_iso_hdlc;
1168 +
/// let checksum = crc32_iso_hdlc(b"123456789");
1169 +
/// assert_eq!(checksum, 0xcbf43926);
1170 +
/// ```
1171 +
#[inline(always)]
1172 +
pub fn crc32_iso_hdlc(data: &[u8]) -> u32 {
1173 +
    crc32_iso_hdlc_calculator(CRC32_ISO_HDLC.init, data, &CRC32_ISO_HDLC) as u32
1174 +
        ^ CRC32_ISO_HDLC.xorout as u32
1175 +
}
1176 +
1177 +
/// Calculates the CRC-64/NVME checksum.
1178 +
///
1179 +
/// https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-64-nvme
1180 +
///
1181 +
/// Nano-optimized to be faster than calling checksum() for this specific algorithm, since it avoids
1182 +
/// the match statement overhead.
1183 +
///
1184 +
/// # Examples
1185 +
///
1186 +
/// ```rust
1187 +
/// use crc_fast::crc64_nvme;
1188 +
/// let checksum = crc64_nvme(b"123456789");
1189 +
/// assert_eq!(checksum, 0xae8b14860a799888);
1190 +
/// ```
1191 +
#[inline(always)]
1192 +
pub fn crc64_nvme(data: &[u8]) -> u64 {
1193 +
    Calculator::calculate(CRC64_NVME.init, data, &CRC64_NVME) ^ CRC64_NVME.xorout
1194 +
}
1195 +
1196 +
/// Fallback version of get_calculator_target for unsupported architectures
1197 +
#[cfg(all(
1198 +
    feature = "alloc",
1199 +
    not(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64"))
1200 +
))]
1201 +
pub fn get_calculator_target(_algorithm: CrcAlgorithm) -> String {
1202 +
    extern crate alloc;
1203 +
    use alloc::string::ToString;
1204 +
    "software-fallback-tables".to_string()
1205 +
}
1206 +
1207 +
/// Returns the calculator function and parameters for the specified CRC algorithm.
1208 +
#[inline(always)]
1209 +
#[allow(deprecated)]
1210 +
fn get_calculator_params(algorithm: CrcAlgorithm) -> (CalculatorFn, CrcParams) {
1211 +
    match algorithm {
1212 +
        CrcAlgorithm::Crc16Arc => (Calculator::calculate as CalculatorFn, CRC16_ARC),
1213 +
        CrcAlgorithm::Crc16Cdma2000 => (Calculator::calculate as CalculatorFn, CRC16_CDMA2000),
1214 +
        CrcAlgorithm::Crc16Cms => (Calculator::calculate as CalculatorFn, CRC16_CMS),
1215 +
        CrcAlgorithm::Crc16Dds110 => (Calculator::calculate as CalculatorFn, CRC16_DDS_110),
1216 +
        CrcAlgorithm::Crc16DectR => (Calculator::calculate as CalculatorFn, CRC16_DECT_R),
1217 +
        CrcAlgorithm::Crc16DectX => (Calculator::calculate as CalculatorFn, CRC16_DECT_X),
1218 +
        CrcAlgorithm::Crc16Dnp => (Calculator::calculate as CalculatorFn, CRC16_DNP),
1219 +
        CrcAlgorithm::Crc16En13757 => (Calculator::calculate as CalculatorFn, CRC16_EN_13757),
1220 +
        CrcAlgorithm::Crc16Genibus => (Calculator::calculate as CalculatorFn, CRC16_GENIBUS),
1221 +
        CrcAlgorithm::Crc16Gsm => (Calculator::calculate as CalculatorFn, CRC16_GSM),
1222 +
        CrcAlgorithm::Crc16Ibm3740 => (Calculator::calculate as CalculatorFn, CRC16_IBM_3740),
1223 +
        CrcAlgorithm::Crc16IbmSdlc => (Calculator::calculate as CalculatorFn, CRC16_IBM_SDLC),
1224 +
        CrcAlgorithm::Crc16IsoIec144433A => (
1225 +
            Calculator::calculate as CalculatorFn,
1226 +
            CRC16_ISO_IEC_14443_3_A,
1227 +
        ),
1228 +
        CrcAlgorithm::Crc16Kermit => (Calculator::calculate as CalculatorFn, CRC16_KERMIT),
1229 +
        CrcAlgorithm::Crc16Lj1200 => (Calculator::calculate as CalculatorFn, CRC16_LJ1200),
1230 +
        CrcAlgorithm::Crc16M17 => (Calculator::calculate as CalculatorFn, CRC16_M17),
1231 +
        CrcAlgorithm::Crc16MaximDow => (Calculator::calculate as CalculatorFn, CRC16_MAXIM_DOW),
1232 +
        CrcAlgorithm::Crc16Mcrf4xx => (Calculator::calculate as CalculatorFn, CRC16_MCRF4XX),
1233 +
        CrcAlgorithm::Crc16Modbus => (Calculator::calculate as CalculatorFn, CRC16_MODBUS),
1234 +
        CrcAlgorithm::Crc16Nrsc5 => (Calculator::calculate as CalculatorFn, CRC16_NRSC_5),
1235 +
        CrcAlgorithm::Crc16OpensafetyA => {
1236 +
            (Calculator::calculate as CalculatorFn, CRC16_OPENSAFETY_A)
1237 +
        }
1238 +
        CrcAlgorithm::Crc16OpensafetyB => {
1239 +
            (Calculator::calculate as CalculatorFn, CRC16_OPENSAFETY_B)
1240 +
        }
1241 +
        CrcAlgorithm::Crc16Profibus => (Calculator::calculate as CalculatorFn, CRC16_PROFIBUS),
1242 +
        CrcAlgorithm::Crc16Riello => (Calculator::calculate as CalculatorFn, CRC16_RIELLO),
1243 +
        CrcAlgorithm::Crc16SpiFujitsu => (Calculator::calculate as CalculatorFn, CRC16_SPI_FUJITSU),
1244 +
        CrcAlgorithm::Crc16T10Dif => (Calculator::calculate as CalculatorFn, CRC16_T10_DIF),
1245 +
        CrcAlgorithm::Crc16Teledisk => (Calculator::calculate as CalculatorFn, CRC16_TELEDISK),
1246 +
        CrcAlgorithm::Crc16Tms37157 => (Calculator::calculate as CalculatorFn, CRC16_TMS37157),
1247 +
        CrcAlgorithm::Crc16Umts => (Calculator::calculate as CalculatorFn, CRC16_UMTS),
1248 +
        CrcAlgorithm::Crc16Usb => (Calculator::calculate as CalculatorFn, CRC16_USB),
1249 +
        CrcAlgorithm::Crc16Xmodem => (Calculator::calculate as CalculatorFn, CRC16_XMODEM),
1250 +
        CrcAlgorithm::Crc32Aixm => (Calculator::calculate as CalculatorFn, CRC32_AIXM),
1251 +
        CrcAlgorithm::Crc32Autosar => (Calculator::calculate as CalculatorFn, CRC32_AUTOSAR),
1252 +
        CrcAlgorithm::Crc32Base91D => (Calculator::calculate as CalculatorFn, CRC32_BASE91_D),
1253 +
        CrcAlgorithm::Crc32Bzip2 => (Calculator::calculate as CalculatorFn, CRC32_BZIP2),
1254 +
        CrcAlgorithm::Crc32CdRomEdc => (Calculator::calculate as CalculatorFn, CRC32_CD_ROM_EDC),
1255 +
        CrcAlgorithm::Crc32Cksum => (Calculator::calculate as CalculatorFn, CRC32_CKSUM),
1256 +
        CrcAlgorithm::Crc32Custom => {
1257 +
            panic!("Custom CRC-32 requires parameters via CrcParams::new()")
1258 +
        }
1259 +
        CrcAlgorithm::Crc32Iscsi => (crc32_iscsi_calculator as CalculatorFn, CRC32_ISCSI),
1260 +
        CrcAlgorithm::Crc32IsoHdlc => (crc32_iso_hdlc_calculator as CalculatorFn, CRC32_ISO_HDLC),
1261 +
        CrcAlgorithm::Crc32Jamcrc => (Calculator::calculate as CalculatorFn, CRC32_JAMCRC),
1262 +
        CrcAlgorithm::Crc32Mef => (Calculator::calculate as CalculatorFn, CRC32_MEF),
1263 +
        CrcAlgorithm::Crc32Mpeg2 => (Calculator::calculate as CalculatorFn, CRC32_MPEG_2),
1264 +
        CrcAlgorithm::Crc32Xfer => (Calculator::calculate as CalculatorFn, CRC32_XFER),
1265 +
        CrcAlgorithm::CrcCustom => {
1266 +
            panic!("Custom CRC requires parameters via CrcParams::new()")
1267 +
        }
1268 +
        CrcAlgorithm::Crc64Custom => {
1269 +
            panic!("Custom CRC-64 requires parameters via CrcParams::new()")
1270 +
        }
1271 +
        CrcAlgorithm::Crc64Ecma182 => (Calculator::calculate as CalculatorFn, CRC64_ECMA_182),
1272 +
        CrcAlgorithm::Crc64GoIso => (Calculator::calculate as CalculatorFn, CRC64_GO_ISO),
1273 +
        CrcAlgorithm::Crc64Ms => (Calculator::calculate as CalculatorFn, CRC64_MS),
1274 +
        CrcAlgorithm::Crc64Nvme => (Calculator::calculate as CalculatorFn, CRC64_NVME),
1275 +
        CrcAlgorithm::Crc64Redis => (Calculator::calculate as CalculatorFn, CRC64_REDIS),
1276 +
        CrcAlgorithm::Crc64We => (Calculator::calculate as CalculatorFn, CRC64_WE),
1277 +
        CrcAlgorithm::Crc64Xz => (Calculator::calculate as CalculatorFn, CRC64_XZ),
1278 +
    }
1279 +
}
1280 +
1281 +
/// Calculates the CRC-32/ISCSI (commonly called "crc32c" in many, but not all, implementations)
1282 +
/// checksum.
1283 +
///
1284 +
/// Because both aarch64 and x86 have native hardware support for CRC-32/ISCSI, we can use
1285 +
/// fusion techniques to accelerate the calculation beyond what SIMD can do alone.
1286 +
#[inline(always)]
1287 +
fn crc32_iscsi_calculator(state: u64, data: &[u8], _params: &CrcParams) -> u64 {
1288 +
    #[cfg(all(target_arch = "aarch64", feature = "std"))]
1289 +
    {
1290 +
        use crate::feature_detection::PerformanceTier;
1291 +
1292 +
        let arch_ops = get_arch_ops();
1293 +
        match arch_ops.get_tier() {
1294 +
            PerformanceTier::AArch64AesSha3 | PerformanceTier::AArch64Aes => {
1295 +
                return fusion::crc32_iscsi(state as u32, data) as u64;
1296 +
            }
1297 +
            _ => {}
1298 +
        }
1299 +
    }
1300 +
1301 +
    #[cfg(all(any(target_arch = "x86_64", target_arch = "x86"), feature = "std"))]
1302 +
    {
1303 +
        use crate::feature_detection::PerformanceTier;
1304 +
1305 +
        let arch_ops = get_arch_ops();
1306 +
        match arch_ops.get_tier() {
1307 +
            PerformanceTier::X86_64Avx512Vpclmulqdq
1308 +
            | PerformanceTier::X86_64Avx512Pclmulqdq
1309 +
            | PerformanceTier::X86_64SsePclmulqdq
1310 +
            | PerformanceTier::X86SsePclmulqdq => {
1311 +
                // fusion path requires both pclmulqdq (checked by tier) and sse4.2 (for CRC32 instructions)
1312 +
                if is_x86_feature_detected!("sse4.2") {
1313 +
                    return fusion::crc32_iscsi(state as u32, data) as u64;
1314 +
                }
1315 +
            }
1316 +
            _ => {}
1317 +
        }
1318 +
    }
1319 +
1320 +
    Calculator::calculate(state, data, _params)
1321 +
}
1322 +
1323 +
/// Calculates the CRC-32/ISO-HDLC (commonly called "crc32" in many, but not all, implementations)
1324 +
/// checksum.
1325 +
///
1326 +
/// Because aarch64 has native hardware support for CRC-32/ISO-HDLC, we can use fusion techniques
1327 +
/// to accelerate the calculation beyond what SIMD can do alone. x86 does not have native support,
1328 +
/// so we use the traditional calculation.
1329 +
#[inline(always)]
1330 +
fn crc32_iso_hdlc_calculator(state: u64, data: &[u8], _params: &CrcParams) -> u64 {
1331 +
    #[cfg(all(target_arch = "aarch64", feature = "std"))]
1332 +
    {
1333 +
        use crate::feature_detection::{get_arch_ops, PerformanceTier};
1334 +
        let arch_ops = get_arch_ops();
1335 +
1336 +
        match arch_ops.get_tier() {
1337 +
            PerformanceTier::AArch64AesSha3 | PerformanceTier::AArch64Aes => {
1338 +
                return fusion::crc32_iso_hdlc(state as u32, data) as u64;
1339 +
            }
1340 +
            _ => {}
1341 +
        }
1342 +
    }
1343 +
1344 +
    Calculator::calculate(state, data, _params)
1345 +
}
1346 +
1347 +
#[cfg(test)]
1348 +
mod lib {
1349 +
    #![allow(unused)]
1350 +
1351 +
    use super::*;
1352 +
    use crate::test::consts::{TEST_ALL_CONFIGS, TEST_CHECK_STRING};
1353 +
    use crate::test::enums::AnyCrcTestConfig;
1354 +
    use cbindgen::Language::C;
1355 +
    use cbindgen::Style::Both;
1356 +
    use rand::{rng, Rng};
1357 +
    use std::fs::{read, write};
1358 +
1359 +
    #[test]
1360 +
    fn test_checksum_check() {
1361 +
        for config in TEST_ALL_CONFIGS {
1362 +
            assert_eq!(
1363 +
                checksum(config.get_algorithm(), TEST_CHECK_STRING),
1364 +
                config.get_check()
1365 +
            );
1366 +
        }
1367 +
    }
1368 +
1369 +
    #[test]
1370 +
    fn test_checksum_reference() {
1371 +
        for config in TEST_ALL_CONFIGS {
1372 +
            assert_eq!(
1373 +
                checksum(config.get_algorithm(), TEST_CHECK_STRING),
1374 +
                config.checksum_with_reference(TEST_CHECK_STRING)
1375 +
            );
1376 +
        }
1377 +
    }
1378 +
1379 +
    #[test]
1380 +
    fn test_checksum_with_custom_params() {
1381 +
        crate::cache::clear_cache();
1382 +
1383 +
        // CRC-32 reflected
1384 +
        assert_eq!(
1385 +
            checksum_with_params(get_custom_crc32_reflected(), TEST_CHECK_STRING),
1386 +
            CRC32_ISCSI.check,
1387 +
        );
1388 +
1389 +
        // CRC-32 forward
1390 +
        assert_eq!(
1391 +
            checksum_with_params(get_custom_crc32_forward(), TEST_CHECK_STRING),
1392 +
            CRC32_BZIP2.check,
1393 +
        );
1394 +
1395 +
        // CRC-64 reflected
1396 +
        assert_eq!(
1397 +
            checksum_with_params(get_custom_crc64_reflected(), TEST_CHECK_STRING),
1398 +
            CRC64_NVME.check,
1399 +
        );
1400 +
1401 +
        // CRC-64 forward
1402 +
        assert_eq!(
1403 +
            checksum_with_params(get_custom_crc64_forward(), TEST_CHECK_STRING),
1404 +
            CRC64_ECMA_182.check,
1405 +
        );
1406 +
    }
1407 +
1408 +
    #[test]
1409 +
    fn test_get_custom_params() {
1410 +
        crate::cache::clear_cache();
1411 +
1412 +
        assert_eq!(
1413 +
            checksum_with_params(get_custom_crc32_reflected(), TEST_CHECK_STRING),
1414 +
            CRC32_ISCSI.check,
1415 +
        );
1416 +
1417 +
        assert_eq!(
1418 +
            checksum_with_params(get_custom_crc32_forward(), TEST_CHECK_STRING),
1419 +
            CRC32_BZIP2.check,
1420 +
        );
1421 +
1422 +
        assert_eq!(
1423 +
            checksum_with_params(get_custom_crc64_reflected(), TEST_CHECK_STRING),
1424 +
            CRC64_NVME.check,
1425 +
        );
1426 +
1427 +
        assert_eq!(
1428 +
            checksum_with_params(get_custom_crc64_forward(), TEST_CHECK_STRING),
1429 +
            CRC64_ECMA_182.check,
1430 +
        );
1431 +
    }
1432 +
1433 +
    #[test]
1434 +
    fn test_get_calculator_target_format() {
1435 +
        let target = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc);
1436 +
1437 +
        // Target string should not be empty
1438 +
        assert!(!target.is_empty());
1439 +
1440 +
        // Should follow the expected format with valid architecture prefixes
1441 +
        let valid_prefixes = ["aarch64-", "x86_64-", "x86-", "software-"];
1442 +
        assert!(
1443 +
            valid_prefixes
1444 +
                .iter()
1445 +
                .any(|prefix| target.starts_with(prefix)),
1446 +
            "Target '{}' should start with a valid architecture prefix",
1447 +
            target
1448 +
        );
1449 +
1450 +
        // Should contain intrinsics family and features information
1451 +
        let parts: Vec<&str> = target.split('-').collect();
1452 +
        assert!(
1453 +
            parts.len() >= 3,
1454 +
            "Target '{}' should have at least 3 parts: architecture-family-features",
1455 +
            target
1456 +
        );
1457 +
    }
1458 +
1459 +
    #[test]
1460 +
    fn test_get_calculator_target_consistency() {
1461 +
        // Multiple calls should return the same result (deterministic)
1462 +
        let target1 = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc);
1463 +
        let target2 = get_calculator_target(CrcAlgorithm::Crc32Iscsi);
1464 +
        let target3 = get_calculator_target(CrcAlgorithm::Crc64Nvme);
1465 +
1466 +
        assert_eq!(
1467 +
            target1, target2,
1468 +
            "Target should be consistent across different CRC-32 algorithms"
1469 +
        );
1470 +
        assert_eq!(
1471 +
            target1, target3,
1472 +
            "Target should be consistent across CRC-32 and CRC-64 algorithms"
1473 +
        );
1474 +
    }
1475 +
1476 +
    #[test]
1477 +
    fn test_get_calculator_target_uses_cached_detection() {
1478 +
        // This test verifies that the function uses cached feature detection
1479 +
        // by checking that multiple calls are consistent and don't perform
1480 +
        // redundant feature detection
1481 +
1482 +
        let target1 = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc);
1483 +
        let target2 = get_calculator_target(CrcAlgorithm::Crc32IsoHdlc);
1484 +
1485 +
        assert_eq!(
1486 +
            target1, target2,
1487 +
            "Cached detection should return identical results"
1488 +
        );
1489 +
    }
1490 +
1491 +
    #[test]
1492 +
    fn test_digest_updates_check() {
1493 +
        for config in TEST_ALL_CONFIGS {
1494 +
            check_digest(Digest::new(config.get_algorithm()), config.get_check());
1495 +
        }
1496 +
    }
1497 +
1498 +
    #[test]
1499 +
    fn test_digest_updates_check_with_custom_params() {
1500 +
        crate::cache::clear_cache();
1501 +
1502 +
        // CRC-32 reflected
1503 +
        check_digest(
1504 +
            Digest::new_with_params(get_custom_crc32_reflected()),
1505 +
            CRC32_ISCSI.check,
1506 +
        );
1507 +
1508 +
        // CRC-32 forward
1509 +
        check_digest(
1510 +
            Digest::new_with_params(get_custom_crc32_forward()),
1511 +
            CRC32_BZIP2.check,
1512 +
        );
1513 +
1514 +
        // CRC-64 reflected
1515 +
        check_digest(
1516 +
            Digest::new_with_params(get_custom_crc64_reflected()),
1517 +
            CRC64_NVME.check,
1518 +
        );
1519 +
1520 +
        // CRC-64 forward
1521 +
        check_digest(
1522 +
            Digest::new_with_params(get_custom_crc64_forward()),
1523 +
            CRC64_ECMA_182.check,
1524 +
        );
1525 +
    }
1526 +
1527 +
    fn check_digest(mut digest: Digest, check: u64) {
1528 +
        digest.update(b"123");
1529 +
        digest.update(b"456");
1530 +
        digest.update(b"789");
1531 +
        assert_eq!(digest.finalize(), check,);
1532 +
    }
1533 +
1534 +
    #[test]
1535 +
    fn test_1024_length() {
1536 +
        for config in TEST_ALL_CONFIGS {
1537 +
            test_length(1024, config);
1538 +
        }
1539 +
    }
1540 +
1541 +
    /// Skipping for Miri runs due to time constraints, underlying code already covered by other
1542 +
    /// tests.
1543 +
    #[test]
1544 +
    #[cfg_attr(miri, ignore)]
1545 +
    fn test_small_all_lengths() {
1546 +
        for config in TEST_ALL_CONFIGS {
1547 +
            // Test each length from 1 to 255
1548 +
            for len in 1..=255 {
1549 +
                test_length(len, config);
1550 +
            }
1551 +
        }
1552 +
    }
1553 +
1554 +
    /// Skipping for Miri runs due to time constraints, underlying code already covered by other
1555 +
    /// tests.
1556 +
    #[test]
1557 +
    #[cfg_attr(miri, ignore)]
1558 +
    fn test_medium_lengths() {
1559 +
        for config in TEST_ALL_CONFIGS {
1560 +
            // Test each length from 256 to 1024, which should fold and include handling remainders
1561 +
            for len in 256..=1024 {
1562 +
                test_length(len, config);
1563 +
            }
1564 +
        }
1565 +
    }
1566 +
1567 +
    /// Skipping for Miri runs due to time constraints, underlying code already covered by other
1568 +
    /// tests.
1569 +
    #[test]
1570 +
    #[cfg_attr(miri, ignore)]
1571 +
    fn test_large_lengths() {
1572 +
        for config in TEST_ALL_CONFIGS {
1573 +
            // Test 1 MiB just before, at, and just after the folding boundaries
1574 +
            for len in 1048575..1048577 {
1575 +
                test_length(len, config);
1576 +
            }
1577 +
        }
1578 +
    }
1579 +
1580 +
    fn test_length(length: usize, config: &AnyCrcTestConfig) {
1581 +
        let mut data = vec![0u8; length];
1582 +
        rng().fill(&mut data[..]);
1583 +
1584 +
        // Calculate expected CRC using the reference implementation
1585 +
        let expected = config.checksum_with_reference(&data);
1586 +
1587 +
        let result = checksum(config.get_algorithm(), &data);
1588 +
1589 +
        assert_eq!(
1590 +
            result,
1591 +
            expected,
1592 +
            "Failed for algorithm: {:?}, length: {}, expected: {:#x}, got: {:#x}",
1593 +
            config.get_algorithm(),
1594 +
            length,
1595 +
            expected,
1596 +
            result
1597 +
        );
1598 +
    }
1599 +
1600 +
    #[test]
1601 +
    fn test_combine() {
1602 +
        for config in TEST_ALL_CONFIGS {
1603 +
            let algorithm = config.get_algorithm();
1604 +
            let check = config.get_check();
1605 +
1606 +
            // checksums
1607 +
            let checksum1 = checksum(algorithm, "1234".as_ref());
1608 +
            let checksum2 = checksum(algorithm, "56789".as_ref());
1609 +
1610 +
            // checksum_combine()
1611 +
            assert_eq!(checksum_combine(algorithm, checksum1, checksum2, 5), check);
1612 +
1613 +
            // Digest
1614 +
            let mut digest1 = Digest::new(algorithm);
1615 +
            digest1.update("1234".as_ref());
1616 +
1617 +
            let mut digest2 = Digest::new(algorithm);
1618 +
            digest2.update("56789".as_ref());
1619 +
1620 +
            digest1.combine(&digest2);
1621 +
1622 +
            assert_eq!(digest1.finalize(), check)
1623 +
        }
1624 +
    }
1625 +
1626 +
    #[test]
1627 +
    fn test_combine_with_custom_params() {
1628 +
        crate::cache::clear_cache();
1629 +
1630 +
        // CRC-32 reflected
1631 +
        let crc32_params = get_custom_crc32_reflected();
1632 +
        let checksum1 = checksum_with_params(crc32_params, "1234".as_ref());
1633 +
        let checksum2 = checksum_with_params(crc32_params, "56789".as_ref());
1634 +
        assert_eq!(
1635 +
            checksum_combine_with_params(crc32_params, checksum1, checksum2, 5),
1636 +
            CRC32_ISCSI.check,
1637 +
        );
1638 +
1639 +
        // CRC-32 forward
1640 +
        let crc32_params = get_custom_crc32_forward();
1641 +
        let checksum1 = checksum_with_params(crc32_params, "1234".as_ref());
1642 +
        let checksum2 = checksum_with_params(crc32_params, "56789".as_ref());
1643 +
        assert_eq!(
1644 +
            checksum_combine_with_params(crc32_params, checksum1, checksum2, 5),
1645 +
            CRC32_BZIP2.check,
1646 +
        );
1647 +
1648 +
        // CRC-64 reflected
1649 +
        let crc64_params = get_custom_crc64_reflected();
1650 +
        let checksum1 = checksum_with_params(crc64_params, "1234".as_ref());
1651 +
        let checksum2 = checksum_with_params(crc64_params, "56789".as_ref());
1652 +
        assert_eq!(
1653 +
            checksum_combine_with_params(crc64_params, checksum1, checksum2, 5),
1654 +
            CRC64_NVME.check,
1655 +
        );
1656 +
1657 +
        // CRC-64 forward
1658 +
        let crc64_params = get_custom_crc64_forward();
1659 +
        let checksum1 = checksum_with_params(crc64_params, "1234".as_ref());
1660 +
        let checksum2 = checksum_with_params(crc64_params, "56789".as_ref());
1661 +
        assert_eq!(
1662 +
            checksum_combine_with_params(crc64_params, checksum1, checksum2, 5),
1663 +
            CRC64_ECMA_182.check,
1664 +
        );
1665 +
    }
1666 +
1667 +
    /// Skipping for Miri runs due to isolation constraints, underlying code other than I/O already
1668 +
    /// covered by other tests.
1669 +
    #[test]
1670 +
    #[cfg_attr(miri, ignore)]
1671 +
    fn test_checksum_file() {
1672 +
        // Create a test file with repeating zeros
1673 +
        let test_file_path = "test/test_crc32_hash_file.bin";
1674 +
        let data = vec![0u8; 1024 * 1024]; // 1 MiB of zeros
1675 +
        if let Err(e) = write(test_file_path, &data) {
1676 +
            eprintln!("Skipping test due to write error: {}", e);
1677 +
            return;
1678 +
        }
1679 +
1680 +
        for config in TEST_ALL_CONFIGS {
1681 +
            let result = checksum_file(config.get_algorithm(), test_file_path, None).unwrap();
1682 +
            assert_eq!(result, config.checksum_with_reference(&data));
1683 +
        }
1684 +
1685 +
        std::fs::remove_file(test_file_path).unwrap();
1686 +
    }
1687 +
1688 +
    /// Skipping for Miri runs due to isolation constraints, underlying code other than I/O already
1689 +
    /// covered by other tests.
1690 +
    #[test]
1691 +
    #[cfg_attr(miri, ignore)]
1692 +
    fn test_checksum_file_with_custom_params() {
1693 +
        crate::cache::clear_cache();
1694 +
1695 +
        // Create a test file with repeating zeros
1696 +
        let test_file_path = "test/test_crc32_hash_file_custom.bin";
1697 +
        let data = vec![0u8; 1024 * 1024]; // 1 MiB of zeros
1698 +
        if let Err(e) = write(test_file_path, &data) {
1699 +
            eprintln!("Skipping test due to write error: {}", e);
1700 +
            return;
1701 +
        }
1702 +
1703 +
        // CRC-32 reflected
1704 +
        check_file(
1705 +
            get_custom_crc32_reflected(),
1706 +
            test_file_path,
1707 +
            CRC32_ISCSI.check,
1708 +
        );
1709 +
1710 +
        // CRC-32 forward
1711 +
        check_file(
1712 +
            get_custom_crc32_forward(),
1713 +
            test_file_path,
1714 +
            CRC32_BZIP2.check,
1715 +
        );
1716 +
1717 +
        // CRC-64 reflected
1718 +
        check_file(
1719 +
            get_custom_crc64_reflected(),
1720 +
            test_file_path,
1721 +
            CRC64_NVME.check,
1722 +
        );
1723 +
1724 +
        // CRC-64 forward
1725 +
        check_file(
1726 +
            get_custom_crc64_forward(),
1727 +
            test_file_path,
1728 +
            CRC64_ECMA_182.check,
1729 +
        );
1730 +
1731 +
        std::fs::remove_file(test_file_path).unwrap();
1732 +
    }
1733 +
1734 +
    fn check_file(params: CrcParams, file_path: &str, check: u64) {
1735 +
        let result = checksum_file_with_params(params, file_path, None).unwrap();
1736 +
        assert_eq!(result, check);
1737 +
    }
1738 +
1739 +
    /// Skipping for Miri runs due to isolation constraints, underlying code other than I/O already
1740 +
    /// covered by other tests.
1741 +
    #[test]
1742 +
    #[cfg_attr(miri, ignore)]
1743 +
    fn test_writer() {
1744 +
        // Create a test file with repeating zeros
1745 +
        let test_file_path = "test/test_crc32_writer_file.bin";
1746 +
        let data = vec![0u8; 1024 * 1024]; // 1 MiB of zeros
1747 +
        if let Err(e) = std::fs::write(test_file_path, &data) {
1748 +
            eprintln!("Skipping test due to write error: {}", e);
1749 +
            return;
1750 +
        }
1751 +
1752 +
        for config in TEST_ALL_CONFIGS {
1753 +
            let mut digest = Digest::new(config.get_algorithm());
1754 +
            let mut file = File::open(test_file_path).unwrap();
1755 +
            std::io::copy(&mut file, &mut digest).unwrap();
1756 +
            assert_eq!(digest.finalize(), config.checksum_with_reference(&data));
1757 +
        }
1758 +
1759 +
        std::fs::remove_file(test_file_path).unwrap();
1760 +
    }
1761 +
    #[test]
1762 +
    fn test_digest_reset() {
1763 +
        for config in TEST_ALL_CONFIGS {
1764 +
            let mut digest = Digest::new(config.get_algorithm());
1765 +
            digest.update(b"42");
1766 +
            digest.reset();
1767 +
            digest.update(TEST_CHECK_STRING);
1768 +
            assert_eq!(digest.finalize(), config.get_check());
1769 +
        }
1770 +
    }
1771 +
1772 +
    #[test]
1773 +
    fn test_digest_finalize_reset() {
1774 +
        for config in TEST_ALL_CONFIGS {
1775 +
            let check = config.get_check();
1776 +
1777 +
            let mut digest = Digest::new(config.get_algorithm());
1778 +
            digest.update(TEST_CHECK_STRING);
1779 +
            assert_eq!(digest.finalize_reset(), check);
1780 +
1781 +
            digest.update(TEST_CHECK_STRING);
1782 +
            assert_eq!(digest.finalize(), check);
1783 +
        }
1784 +
    }
1785 +
1786 +
    #[test]
1787 +
    fn test_digest_finalize_into() {
1788 +
        for config in TEST_ALL_CONFIGS {
1789 +
            let mut digest = Digest::new(config.get_algorithm());
1790 +
            digest.update(TEST_CHECK_STRING);
1791 +
1792 +
            match digest.params.width {
1793 +
                16 => {
1794 +
                    let mut output = [0u8; 2];
1795 +
                    digest.finalize_into(&mut output).unwrap();
1796 +
                    let result = u16::from_be_bytes(output) as u64;
1797 +
                    assert_eq!(result, config.get_check());
1798 +
                }
1799 +
                32 => {
1800 +
                    let mut output = [0u8; 4];
1801 +
                    digest.finalize_into(&mut output).unwrap();
1802 +
                    let result = u32::from_be_bytes(output) as u64;
1803 +
                    assert_eq!(result, config.get_check());
1804 +
                }
1805 +
                64 => {
1806 +
                    let mut output = [0u8; 8];
1807 +
                    digest.finalize_into(&mut output).unwrap();
1808 +
                    let result = u64::from_be_bytes(output);
1809 +
                    assert_eq!(result, config.get_check());
1810 +
                }
1811 +
                _ => panic!("Unsupported CRC width"),
1812 +
            }
1813 +
        }
1814 +
    }
1815 +
1816 +
    #[test]
1817 +
    fn test_digest_finalize_into_reset() {
1818 +
        for config in TEST_ALL_CONFIGS {
1819 +
            let mut digest = Digest::new(config.get_algorithm());
1820 +
            digest.update(TEST_CHECK_STRING);
1821 +
1822 +
            let mut output: Vec<u8> = match digest.params.width {
1823 +
                16 => vec![0u8; 2],
1824 +
                32 => vec![0u8; 4],
1825 +
                64 => vec![0u8; 8],
1826 +
                _ => panic!("Unsupported CRC width"),
1827 +
            };
1828 +
1829 +
            digest.finalize_into_reset(&mut output).unwrap();
1830 +
            let result = match output.len() {
1831 +
                2 => u16::from_be_bytes(output.try_into().unwrap()) as u64,
1832 +
                4 => u32::from_be_bytes(output.try_into().unwrap()) as u64,
1833 +
                8 => u64::from_be_bytes(output.try_into().unwrap()),
1834 +
                _ => panic!("Unsupported CRC width"),
1835 +
            };
1836 +
            assert_eq!(result, config.get_check());
1837 +
1838 +
            digest.update(TEST_CHECK_STRING);
1839 +
            assert_eq!(digest.finalize(), config.get_check());
1840 +
        }
1841 +
    }
1842 +
1843 +
    /// Tests whether the FFI header is up-to-date
1844 +
    #[test]
1845 +
    #[cfg_attr(miri, ignore)]
1846 +
    fn test_ffi_header() -> Result<(), String> {
1847 +
        #[cfg(target_os = "windows")]
1848 +
        {
1849 +
            // Skip this test on Windows, since CRLF vs LF is a PITA
1850 +
            eprintln!("Skipping test on Windows");
1851 +
1852 +
            return Ok(());
1853 +
        }
1854 +
1855 +
        const HEADER: &str = "libcrc_fast.h";
1856 +
1857 +
        let crate_dir = std::env::var("CARGO_MANIFEST_DIR").map_err(|error| error.to_string())?;
1858 +
1859 +
        let mut expected = Vec::new();
1860 +
        cbindgen::Builder::new()
1861 +
            .with_crate(crate_dir)
1862 +
            .with_include_guard("CRC_FAST_H")
1863 +
            .with_header("/* crc_fast library C/C++ API - Copyright 2025 Don MacAskill */\n/* This header is auto-generated. Do not edit directly. */\n")
1864 +
            // exclude internal implementation functions
1865 +
            .exclude_item("crc32_iscsi_impl")
1866 +
            .exclude_item("crc32_iso_hdlc_impl")
1867 +
            .exclude_item("get_iscsi_target")
1868 +
            .exclude_item("get_iso_hdlc_target")
1869 +
            .exclude_item("ISO_HDLC_TARGET")
1870 +
            .exclude_item("ISCSI_TARGET")
1871 +
            .exclude_item("CrcParams")
1872 +
            .rename_item("Digest", "CrcFastDigest")
1873 +
            .with_style(Both)
1874 +
            // generate C header
1875 +
            .with_language(C)
1876 +
            // with C++ compatibility
1877 +
            .with_cpp_compat(true)
1878 +
            .generate()
1879 +
            .map_err(|error| error.to_string())?
1880 +
            .write(&mut expected);
1881 +
1882 +
        // Convert the expected bytes to string for pattern replacement, since cbindgen
1883 +
        // generates an annoying amount of empty contiguous newlines
1884 +
        let header_content = String::from_utf8(expected).map_err(|error| error.to_string())?;
1885 +
1886 +
        // Replace excessive newlines (3 or more consecutive newlines) with 2 newlines
1887 +
        let regex = regex::Regex::new(r"\n{3,}").map_err(|error| error.to_string())?;
1888 +
        let cleaned_content = regex.replace_all(&header_content, "\n\n").to_string();
1889 +
1890 +
        // Convert back to bytes
1891 +
        expected = cleaned_content.into_bytes();
1892 +
1893 +
        let actual = read(HEADER).map_err(|error| error.to_string())?;
1894 +
1895 +
        if expected != actual {
1896 +
            write(HEADER, expected).map_err(|error| error.to_string())?;
1897 +
            return Err(format!(
1898 +
                "{HEADER} is not up-to-date, commit the generated file and try again"
1899 +
            ));
1900 +
        }
1901 +
1902 +
        Ok(())
1903 +
    }
1904 +
1905 +
    fn get_custom_crc32_reflected() -> CrcParams {
1906 +
        CrcParams::new(
1907 +
            "Custom CRC-32/ISCSI",
1908 +
            32,
1909 +
            CRC32_ISCSI.poly,
1910 +
            CRC32_ISCSI.init,
1911 +
            CRC32_ISCSI.refin,
1912 +
            CRC32_ISCSI.xorout,
1913 +
            CRC32_ISCSI.check,
1914 +
        )
1915 +
    }
1916 +
1917 +
    fn get_custom_crc32_forward() -> CrcParams {
1918 +
        CrcParams::new(
1919 +
            "Custom CRC-32/BZIP2",
1920 +
            32,
1921 +
            CRC32_BZIP2.poly,
1922 +
            CRC32_BZIP2.init,
1923 +
            CRC32_BZIP2.refin,
1924 +
            CRC32_BZIP2.xorout,
1925 +
            CRC32_BZIP2.check,
1926 +
        )
1927 +
    }
1928 +
1929 +
    fn get_custom_crc64_reflected() -> CrcParams {
1930 +
        CrcParams::new(
1931 +
            "Custom CRC-64/NVME",
1932 +
            64,
1933 +
            CRC64_NVME.poly,
1934 +
            CRC64_NVME.init,
1935 +
            CRC64_NVME.refin,
1936 +
            CRC64_NVME.xorout,
1937 +
            CRC64_NVME.check,
1938 +
        )
1939 +
    }
1940 +
1941 +
    fn get_custom_crc64_forward() -> CrcParams {
1942 +
        CrcParams::new(
1943 +
            "Custom CRC-64/ECMA-182",
1944 +
            64,
1945 +
            CRC64_ECMA_182.poly,
1946 +
            CRC64_ECMA_182.init,
1947 +
            CRC64_ECMA_182.refin,
1948 +
            CRC64_ECMA_182.xorout,
1949 +
            CRC64_ECMA_182.check,
1950 +
        )
1951 +
    }
1952 +
1953 +
    #[test]
1954 +
    #[allow(clippy::needless_range_loop)] // Intentionally testing indexed get_key() method
1955 +
    fn test_crc_keys_storage_fold_256() {
1956 +
        let test_keys = [
1957 +
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
1958 +
        ];
1959 +
        let storage = CrcKeysStorage::from_keys_fold_256(test_keys);
1960 +
1961 +
        // Test valid key access
1962 +
        for i in 0..23 {
1963 +
            assert_eq!(storage.get_key(i), test_keys[i]);
1964 +
        }
1965 +
1966 +
        // Test out-of-bounds access returns 0
1967 +
        assert_eq!(storage.get_key(23), 0);
1968 +
        assert_eq!(storage.get_key(24), 0);
1969 +
        assert_eq!(storage.get_key(100), 0);
1970 +
1971 +
        // Test key count
1972 +
        assert_eq!(storage.key_count(), 23);
1973 +
    }
1974 +
1975 +
    #[test]
1976 +
    #[allow(clippy::needless_range_loop)] // Intentionally testing indexed get_key() method
1977 +
    fn test_crc_keys_storage_future_test() {
1978 +
        let test_keys = [
1979 +
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1980 +
            25,
1981 +
        ];
1982 +
        let storage = CrcKeysStorage::from_keys_fold_future_test(test_keys);
1983 +
1984 +
        // Test valid key access
1985 +
        for i in 0..25 {
1986 +
            assert_eq!(storage.get_key(i), test_keys[i]);
1987 +
        }
1988 +
1989 +
        // Test out-of-bounds access returns 0
1990 +
        assert_eq!(storage.get_key(25), 0);
1991 +
        assert_eq!(storage.get_key(26), 0);
1992 +
        assert_eq!(storage.get_key(100), 0);
1993 +
1994 +
        // Test key count
1995 +
        assert_eq!(storage.key_count(), 25);
1996 +
    }
1997 +
1998 +
    #[test]
1999 +
    #[allow(clippy::needless_range_loop)] // Intentionally testing indexed get_key() and get_key_checked() methods
2000 +
    fn test_crc_params_safe_accessors() {
2001 +
        // Create a test CrcParams with known keys
2002 +
        let test_keys = [
2003 +
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
2004 +
        ];
2005 +
        let params = CrcParams {
2006 +
            algorithm: CrcAlgorithm::Crc32IsoHdlc,
2007 +
            name: "test",
2008 +
            width: 32,
2009 +
            poly: 0x04C11DB7,
2010 +
            init: 0xFFFFFFFF,
2011 +
            init_algorithm: 0xFFFFFFFF,
2012 +
            refin: true,
2013 +
            refout: true,
2014 +
            xorout: 0xFFFFFFFF,
2015 +
            check: 0xCBF43926,
2016 +
            keys: CrcKeysStorage::from_keys_fold_256(test_keys),
2017 +
        };
2018 +
2019 +
        // Test valid key access
2020 +
        for i in 0..23 {
2021 +
            assert_eq!(params.get_key(i), test_keys[i]);
2022 +
            assert_eq!(params.get_key_checked(i), Some(test_keys[i]));
2023 +
        }
2024 +
2025 +
        // Test out-of-bounds access
2026 +
        assert_eq!(params.get_key(23), 0);
2027 +
        assert_eq!(params.get_key(24), 0);
2028 +
        assert_eq!(params.get_key(100), 0);
2029 +
2030 +
        assert_eq!(params.get_key_checked(23), None);
2031 +
        assert_eq!(params.get_key_checked(24), None);
2032 +
        assert_eq!(params.get_key_checked(100), None);
2033 +
2034 +
        // Test key count
2035 +
        assert_eq!(params.key_count(), 23);
2036 +
    }
2037 +
2038 +
    #[test]
2039 +
    fn test_crc_keys_storage_const_constructors() {
2040 +
        // Test that const constructors work in const context
2041 +
        const TEST_KEYS_23: [u64; 23] = [1; 23];
2042 +
        const TEST_KEYS_25: [u64; 25] = [2; 25];
2043 +
2044 +
        const STORAGE_256: CrcKeysStorage = CrcKeysStorage::from_keys_fold_256(TEST_KEYS_23);
2045 +
        const STORAGE_FUTURE: CrcKeysStorage =
2046 +
            CrcKeysStorage::from_keys_fold_future_test(TEST_KEYS_25);
2047 +
2048 +
        // Verify the const constructors work correctly
2049 +
        assert_eq!(STORAGE_256.get_key(0), 1);
2050 +
        assert_eq!(STORAGE_256.key_count(), 23);
2051 +
2052 +
        assert_eq!(STORAGE_FUTURE.get_key(0), 2);
2053 +
        assert_eq!(STORAGE_FUTURE.key_count(), 25);
2054 +
    }
2055 +
2056 +
    #[test]
2057 +
    fn test_crc_keys_storage_bounds_safety() {
2058 +
        let storage_256 = CrcKeysStorage::from_keys_fold_256([42; 23]);
2059 +
        let storage_future = CrcKeysStorage::from_keys_fold_future_test([84; 25]);
2060 +
2061 +
        // Test edge cases for bounds checking
2062 +
        assert_eq!(storage_256.get_key(22), 42); // Last valid index
2063 +
        assert_eq!(storage_256.get_key(23), 0); // First invalid index
2064 +
2065 +
        assert_eq!(storage_future.get_key(24), 84); // Last valid index
2066 +
        assert_eq!(storage_future.get_key(25), 0); // First invalid index
2067 +
2068 +
        // Test very large indices
2069 +
        assert_eq!(storage_256.get_key(usize::MAX), 0);
2070 +
        assert_eq!(storage_future.get_key(usize::MAX), 0);
2071 +
    }
2072 +
}
added vendor/crc-fast/src/structs.rs +154 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![allow(dead_code)]
4 +
5 +
use crate::traits::{CrcCalculator, CrcWidth};
6 +
use crate::{arch, cache, CrcAlgorithm, CrcParams};
7 +
8 +
/// CRC algorithm parameters matching the CRC catalogue specification.
9 +
///
10 +
/// This struct describes a CRC algorithm using the fields specified by the
11 +
/// [Catalogue of parametrised CRC algorithms](https://reveng.sourceforge.io/crc-catalogue/all.htm).
12 +
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
13 +
pub struct Algorithm<W> {
14 +
    /// The number of bit cells in the linear feedback shift register; the degree of the generator
15 +
    /// polynomial, minus one.
16 +
    pub width: u8,
17 +
    /// The generator polynomial that sets the feedback tap positions of the shift register.
18 +
    pub poly: W,
19 +
    /// The settings of the bit cells at the start of each calculation, before reading the first
20 +
    /// message bit.
21 +
    pub init: W,
22 +
    /// If `true`, characters are read bit-by-bit, least significant bit (LSB) first;
23 +
    /// if `false`, most significant bit (MSB) first.
24 +
    pub refin: bool,
25 +
    /// If `true`, the contents of the register after reading the last message bit are reflected
26 +
    /// before presentation; if `false`, they are unreflected.
27 +
    pub refout: bool,
28 +
    /// The XOR value applied to the contents of the register after the last message bit has been
29 +
    /// read and after the optional reflection.
30 +
    pub xorout: W,
31 +
    /// The contents of the register after initialising, reading the UTF-8 string `"123456789"`,
32 +
    /// optionally reflecting, and applying the final XOR.
33 +
    pub check: W,
34 +
    /// The contents of the register after initialising, reading an error-free codeword and
35 +
    /// optionally reflecting the register, but not applying the final XOR.
36 +
    pub residue: W,
37 +
}
38 +
39 +
/// CRC-16 width implementation
40 +
#[derive(Clone, Copy)]
41 +
pub struct Width16;
42 +
43 +
impl CrcWidth for Width16 {
44 +
    const WIDTH: u32 = 16;
45 +
    type Value = u16;
46 +
}
47 +
48 +
/// CRC-32 width implementation
49 +
#[derive(Clone, Copy)]
50 +
pub struct Width32;
51 +
52 +
impl CrcWidth for Width32 {
53 +
    const WIDTH: u32 = 32;
54 +
    type Value = u32;
55 +
}
56 +
57 +
/// CRC-64 width implementation
58 +
#[derive(Clone, Copy)]
59 +
pub struct Width64;
60 +
61 +
impl CrcWidth for Width64 {
62 +
    const WIDTH: u32 = 64;
63 +
    type Value = u64;
64 +
}
65 +
66 +
/// CRC State wrapper to manage the SIMD operations and reflection mode
67 +
#[derive(Debug, Clone, Copy)]
68 +
pub struct CrcState<T> {
69 +
    pub value: T,
70 +
    pub reflected: bool,
71 +
}
72 +
73 +
pub(crate) struct Calculator {}
74 +
75 +
impl CrcCalculator for Calculator {
76 +
    #[inline(always)]
77 +
    fn calculate(state: u64, data: &[u8], params: &CrcParams) -> u64 {
78 +
        unsafe { arch::update(state, data, params) }
79 +
    }
80 +
}
81 +
82 +
impl CrcParams {
83 +
    /// Creates custom CRC parameters for a given set of Rocksoft CRC parameters.
84 +
    ///
85 +
    /// Uses an internal cache to avoid regenerating folding keys for identical parameter sets.
86 +
    /// The first call with a given set of parameters will generate and cache the keys, while
87 +
    /// subsequent calls with the same parameters will use the cached keys for optimal performance.
88 +
    ///
89 +
    /// Does not support mis-matched refin/refout parameters, so both must be true or both false.
90 +
    ///
91 +
    /// Rocksoft parameters for lots of variants: https://reveng.sourceforge.io/crc-catalogue/all.htm
92 +
    pub fn new(
93 +
        name: &'static str,
94 +
        width: u8,
95 +
        poly: u64,
96 +
        init: u64,
97 +
        reflected: bool,
98 +
        xorout: u64,
99 +
        check: u64,
100 +
    ) -> Self {
101 +
        let keys_array = cache::get_or_generate_keys(width, poly, reflected);
102 +
        let keys = crate::CrcKeysStorage::from_keys_fold_256(keys_array);
103 +
104 +
        // Validate width is supported
105 +
        if width != 16 && width != 32 && width != 64 {
106 +
            panic!("Unsupported width: {width}");
107 +
        }
108 +
109 +
        // For reflected CRC-16, bit-reverse the init value for the SIMD algorithm
110 +
        let init_algorithm = if width == 16 && reflected {
111 +
            (init as u16).reverse_bits() as u64
112 +
        } else {
113 +
            init
114 +
        };
115 +
116 +
        Self {
117 +
            algorithm: CrcAlgorithm::CrcCustom,
118 +
            name,
119 +
            width,
120 +
            poly,
121 +
            init,
122 +
            init_algorithm,
123 +
            refin: reflected,
124 +
            refout: reflected,
125 +
            xorout,
126 +
            check,
127 +
            keys,
128 +
        }
129 +
    }
130 +
131 +
    /// Gets a key at the specified index, returning 0 if out of bounds.
132 +
    /// This provides safe access regardless of internal key storage format.
133 +
    #[inline(always)]
134 +
    pub fn get_key(&self, index: usize) -> u64 {
135 +
        self.keys.get_key(index)
136 +
    }
137 +
138 +
    /// Gets a key at the specified index, returning None if out of bounds.
139 +
    /// This provides optional key access for cases where bounds checking is needed.
140 +
    #[inline(always)]
141 +
    pub fn get_key_checked(&self, index: usize) -> Option<u64> {
142 +
        if index < self.keys.key_count() {
143 +
            Some(self.keys.get_key(index))
144 +
        } else {
145 +
            None
146 +
        }
147 +
    }
148 +
149 +
    /// Returns the number of keys available in this CrcParams instance.
150 +
    #[inline(always)]
151 +
    pub fn key_count(&self) -> usize {
152 +
        self.keys.key_count()
153 +
    }
154 +
}
added vendor/crc-fast/src/tables.rs +49450 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! Pre-generated 16-lane lookup tables for CRC calculations.
4 +
//!
5 +
//! This file is auto-generated by `cargo run --bin generate_tables`.
6 +
//! Do not edit manually.
7 +
8 +
#![allow(dead_code)]
9 +
10 +
pub mod crc16 {
11 +
    //! CRC-16 lookup tables
12 +
13 +
    pub static CRC16_ARC_TABLE: [[u16; 256]; 16] = [
14 +
        [
15 +
            0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780,
16 +
            0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1,
17 +
            0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801,
18 +
            0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40,
19 +
            0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680,
20 +
            0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0,
21 +
            0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501,
22 +
            0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
23 +
            0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981,
24 +
            0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1,
25 +
            0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200,
26 +
            0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141,
27 +
            0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480,
28 +
            0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0,
29 +
            0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01,
30 +
            0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
31 +
            0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381,
32 +
            0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0,
33 +
            0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01,
34 +
            0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40,
35 +
            0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81,
36 +
            0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1,
37 +
            0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100,
38 +
            0x81c1, 0x8081, 0x4040,
39 +
        ],
40 +
        [
41 +
            0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006,
42 +
            0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e,
43 +
            0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019,
44 +
            0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e,
45 +
            0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017,
46 +
            0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030,
47 +
            0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034,
48 +
            0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e,
49 +
            0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029,
50 +
            0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c,
51 +
            0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022,
52 +
            0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061,
53 +
            0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065,
54 +
            0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a,
55 +
            0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a,
56 +
            0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d,
57 +
            0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073,
58 +
            0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053,
59 +
            0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d,
60 +
            0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a,
61 +
            0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a,
62 +
            0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045,
63 +
            0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041,
64 +
            0x9040, 0x6040, 0xf041,
65 +
        ],
66 +
        [
67 +
            0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220,
68 +
            0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411,
69 +
            0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01,
70 +
            0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870,
71 +
            0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0,
72 +
            0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450,
73 +
            0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1,
74 +
            0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1,
75 +
            0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1,
76 +
            0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91,
77 +
            0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980,
78 +
            0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1,
79 +
            0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60,
80 +
            0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0,
81 +
            0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341,
82 +
            0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130,
83 +
            0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521,
84 +
            0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10,
85 +
            0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901,
86 +
            0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70,
87 +
            0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1,
88 +
            0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351,
89 +
            0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0,
90 +
            0xf091, 0xf061, 0x3030,
91 +
        ],
92 +
        [
93 +
            0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803,
94 +
            0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04,
95 +
            0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b,
96 +
            0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409,
97 +
            0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f,
98 +
            0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14,
99 +
            0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016,
100 +
            0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410,
101 +
            0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f,
102 +
            0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c,
103 +
            0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018,
104 +
            0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429,
105 +
            0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b,
106 +
            0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e,
107 +
            0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023,
108 +
            0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421,
109 +
            0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825,
110 +
            0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c,
111 +
            0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038,
112 +
            0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a,
113 +
            0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837,
114 +
            0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32,
115 +
            0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030,
116 +
            0xac31, 0xe831, 0x1430,
117 +
        ],
118 +
        [
119 +
            0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198,
120 +
            0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d,
121 +
            0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781,
122 +
            0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624,
123 +
            0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8,
124 +
            0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c,
125 +
            0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11,
126 +
            0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75,
127 +
            0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9,
128 +
            0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad,
129 +
            0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0,
130 +
            0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45,
131 +
            0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68,
132 +
            0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c,
133 +
            0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971,
134 +
            0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4,
135 +
            0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9,
136 +
            0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc,
137 +
            0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1,
138 +
            0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364,
139 +
            0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609,
140 +
            0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d,
141 +
            0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450,
142 +
            0xd46d, 0xd429, 0x1414,
143 +
        ],
144 +
        [
145 +
            0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00,
146 +
            0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502,
147 +
            0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007,
148 +
            0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06,
149 +
            0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605,
150 +
            0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f,
151 +
            0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e,
152 +
            0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d,
153 +
            0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208,
154 +
            0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08,
155 +
            0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a,
156 +
            0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f,
157 +
            0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e,
158 +
            0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d,
159 +
            0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419,
160 +
            0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18,
161 +
            0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a,
162 +
            0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511,
163 +
            0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013,
164 +
            0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12,
165 +
            0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616,
166 +
            0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115,
167 +
            0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14,
168 +
            0xed15, 0xde15, 0x0f14,
169 +
        ],
170 +
        [
171 +
            0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa,
172 +
            0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144,
173 +
            0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221,
174 +
            0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b,
175 +
            0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356,
176 +
            0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451,
177 +
            0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d,
178 +
            0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526,
179 +
            0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643,
180 +
            0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc,
181 +
            0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8,
182 +
            0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2,
183 +
            0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e,
184 +
            0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909,
185 +
            0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5,
186 +
            0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f,
187 +
            0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b,
188 +
            0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95,
189 +
            0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1,
190 +
            0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b,
191 +
            0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87,
192 +
            0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0,
193 +
            0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c,
194 +
            0xcf2c, 0xcf1f, 0x0f0f,
195 +
        ],
196 +
        [
197 +
            0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80,
198 +
            0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1,
199 +
            0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802,
200 +
            0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43,
201 +
            0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83,
202 +
            0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5,
203 +
            0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504,
204 +
            0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44,
205 +
            0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187,
206 +
            0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7,
207 +
            0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206,
208 +
            0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548,
209 +
            0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89,
210 +
            0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9,
211 +
            0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b,
212 +
            0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a,
213 +
            0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b,
214 +
            0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc,
215 +
            0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d,
216 +
            0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c,
217 +
            0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e,
218 +
            0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce,
219 +
            0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f,
220 +
            0xddce, 0xc88e, 0x044f,
221 +
        ],
222 +
        [
223 +
            0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e,
224 +
            0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2,
225 +
            0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199,
226 +
            0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea,
227 +
            0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f,
228 +
            0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c,
229 +
            0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364,
230 +
            0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da,
231 +
            0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1,
232 +
            0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0,
233 +
            0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202,
234 +
            0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675,
235 +
            0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d,
236 +
            0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6,
237 +
            0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca,
238 +
            0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9,
239 +
            0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b,
240 +
            0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f,
241 +
            0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d,
242 +
            0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee,
243 +
            0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2,
244 +
            0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409,
245 +
            0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451,
246 +
            0x945c, 0x6448, 0xf445,
247 +
        ],
248 +
        [
249 +
            0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020,
250 +
            0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511,
251 +
            0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01,
252 +
            0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70,
253 +
            0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0,
254 +
            0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153,
255 +
            0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2,
256 +
            0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2,
257 +
            0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2,
258 +
            0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492,
259 +
            0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183,
260 +
            0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7,
261 +
            0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66,
262 +
            0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6,
263 +
            0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747,
264 +
            0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236,
265 +
            0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727,
266 +
            0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15,
267 +
            0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904,
268 +
            0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75,
269 +
            0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4,
270 +
            0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654,
271 +
            0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5,
272 +
            0x3994, 0x3664, 0xf335,
273 +
        ],
274 +
        [
275 +
            0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821,
276 +
            0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45,
277 +
            0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab,
278 +
            0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e,
279 +
            0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1,
280 +
            0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51,
281 +
            0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a,
282 +
            0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b,
283 +
            0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5,
284 +
            0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5,
285 +
            0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180,
286 +
            0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6,
287 +
            0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d,
288 +
            0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3,
289 +
            0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217,
290 +
            0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632,
291 +
            0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77,
292 +
            0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed,
293 +
            0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8,
294 +
            0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d,
295 +
            0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49,
296 +
            0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07,
297 +
            0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c,
298 +
            0xaf38, 0xeb37, 0x1733,
299 +
        ],
300 +
        [
301 +
            0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818,
302 +
            0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd,
303 +
            0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81,
304 +
            0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464,
305 +
            0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848,
306 +
            0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc,
307 +
            0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11,
308 +
            0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35,
309 +
            0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779,
310 +
            0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d,
311 +
            0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0,
312 +
            0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06,
313 +
            0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb,
314 +
            0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf,
315 +
            0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72,
316 +
            0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597,
317 +
            0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a,
318 +
            0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f,
319 +
            0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2,
320 +
            0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527,
321 +
            0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a,
322 +
            0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be,
323 +
            0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153,
324 +
            0xd2ae, 0xd6aa, 0x1557,
325 +
        ],
326 +
        [
327 +
            0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18,
328 +
            0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532,
329 +
            0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f,
330 +
            0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65,
331 +
            0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648,
332 +
            0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc,
333 +
            0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef,
334 +
            0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb,
335 +
            0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286,
336 +
            0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92,
337 +
            0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0,
338 +
            0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa,
339 +
            0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9,
340 +
            0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc,
341 +
            0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e,
342 +
            0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94,
343 +
            0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6,
344 +
            0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d,
345 +
            0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f,
346 +
            0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25,
347 +
            0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777,
348 +
            0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042,
349 +
            0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51,
350 +
            0xbc53, 0x7f56, 0xfe54,
351 +
        ],
352 +
        [
353 +
            0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a,
354 +
            0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514,
355 +
            0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021,
356 +
            0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b,
357 +
            0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636,
358 +
            0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141,
359 +
            0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d,
360 +
            0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756,
361 +
            0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263,
362 +
            0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c,
363 +
            0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878,
364 +
            0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382,
365 +
            0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e,
366 +
            0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999,
367 +
            0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5,
368 +
            0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf,
369 +
            0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb,
370 +
            0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5,
371 +
            0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1,
372 +
            0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb,
373 +
            0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7,
374 +
            0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0,
375 +
            0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc,
376 +
            0x3dfc, 0x3eff, 0xffff,
377 +
        ],
378 +
        [
379 +
            0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a,
380 +
            0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5,
381 +
            0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820,
382 +
            0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b,
383 +
            0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6,
384 +
            0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081,
385 +
            0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c,
386 +
            0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17,
387 +
            0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2,
388 +
            0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad,
389 +
            0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278,
390 +
            0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3,
391 +
            0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e,
392 +
            0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59,
393 +
            0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4,
394 +
            0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef,
395 +
            0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a,
396 +
            0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305,
397 +
            0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0,
398 +
            0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b,
399 +
            0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66,
400 +
            0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431,
401 +
            0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc,
402 +
            0x413d, 0x407e, 0x40bf,
403 +
        ],
404 +
        [
405 +
            0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786,
406 +
            0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce,
407 +
            0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819,
408 +
            0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e,
409 +
            0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697,
410 +
            0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0,
411 +
            0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534,
412 +
            0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e,
413 +
            0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9,
414 +
            0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec,
415 +
            0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222,
416 +
            0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121,
417 +
            0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5,
418 +
            0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa,
419 +
            0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a,
420 +
            0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d,
421 +
            0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3,
422 +
            0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393,
423 +
            0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d,
424 +
            0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a,
425 +
            0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca,
426 +
            0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485,
427 +
            0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141,
428 +
            0xd180, 0x20c0, 0xb001,
429 +
        ],
430 +
    ];
431 +
432 +
    pub static CRC16_CDMA2000_TABLE: [[u16; 256]; 16] = [
433 +
        [
434 +
            0x0000, 0xc867, 0x58a9, 0x90ce, 0xb152, 0x7935, 0xe9fb, 0x219c, 0xaac3, 0x62a4, 0xf26a,
435 +
            0x3a0d, 0x1b91, 0xd3f6, 0x4338, 0x8b5f, 0x9de1, 0x5586, 0xc548, 0x0d2f, 0x2cb3, 0xe4d4,
436 +
            0x741a, 0xbc7d, 0x3722, 0xff45, 0x6f8b, 0xa7ec, 0x8670, 0x4e17, 0xded9, 0x16be, 0xf3a5,
437 +
            0x3bc2, 0xab0c, 0x636b, 0x42f7, 0x8a90, 0x1a5e, 0xd239, 0x5966, 0x9101, 0x01cf, 0xc9a8,
438 +
            0xe834, 0x2053, 0xb09d, 0x78fa, 0x6e44, 0xa623, 0x36ed, 0xfe8a, 0xdf16, 0x1771, 0x87bf,
439 +
            0x4fd8, 0xc487, 0x0ce0, 0x9c2e, 0x5449, 0x75d5, 0xbdb2, 0x2d7c, 0xe51b, 0x2f2d, 0xe74a,
440 +
            0x7784, 0xbfe3, 0x9e7f, 0x5618, 0xc6d6, 0x0eb1, 0x85ee, 0x4d89, 0xdd47, 0x1520, 0x34bc,
441 +
            0xfcdb, 0x6c15, 0xa472, 0xb2cc, 0x7aab, 0xea65, 0x2202, 0x039e, 0xcbf9, 0x5b37, 0x9350,
442 +
            0x180f, 0xd068, 0x40a6, 0x88c1, 0xa95d, 0x613a, 0xf1f4, 0x3993, 0xdc88, 0x14ef, 0x8421,
443 +
            0x4c46, 0x6dda, 0xa5bd, 0x3573, 0xfd14, 0x764b, 0xbe2c, 0x2ee2, 0xe685, 0xc719, 0x0f7e,
444 +
            0x9fb0, 0x57d7, 0x4169, 0x890e, 0x19c0, 0xd1a7, 0xf03b, 0x385c, 0xa892, 0x60f5, 0xebaa,
445 +
            0x23cd, 0xb303, 0x7b64, 0x5af8, 0x929f, 0x0251, 0xca36, 0x5e5a, 0x963d, 0x06f3, 0xce94,
446 +
            0xef08, 0x276f, 0xb7a1, 0x7fc6, 0xf499, 0x3cfe, 0xac30, 0x6457, 0x45cb, 0x8dac, 0x1d62,
447 +
            0xd505, 0xc3bb, 0x0bdc, 0x9b12, 0x5375, 0x72e9, 0xba8e, 0x2a40, 0xe227, 0x6978, 0xa11f,
448 +
            0x31d1, 0xf9b6, 0xd82a, 0x104d, 0x8083, 0x48e4, 0xadff, 0x6598, 0xf556, 0x3d31, 0x1cad,
449 +
            0xd4ca, 0x4404, 0x8c63, 0x073c, 0xcf5b, 0x5f95, 0x97f2, 0xb66e, 0x7e09, 0xeec7, 0x26a0,
450 +
            0x301e, 0xf879, 0x68b7, 0xa0d0, 0x814c, 0x492b, 0xd9e5, 0x1182, 0x9add, 0x52ba, 0xc274,
451 +
            0x0a13, 0x2b8f, 0xe3e8, 0x7326, 0xbb41, 0x7177, 0xb910, 0x29de, 0xe1b9, 0xc025, 0x0842,
452 +
            0x988c, 0x50eb, 0xdbb4, 0x13d3, 0x831d, 0x4b7a, 0x6ae6, 0xa281, 0x324f, 0xfa28, 0xec96,
453 +
            0x24f1, 0xb43f, 0x7c58, 0x5dc4, 0x95a3, 0x056d, 0xcd0a, 0x4655, 0x8e32, 0x1efc, 0xd69b,
454 +
            0xf707, 0x3f60, 0xafae, 0x67c9, 0x82d2, 0x4ab5, 0xda7b, 0x121c, 0x3380, 0xfbe7, 0x6b29,
455 +
            0xa34e, 0x2811, 0xe076, 0x70b8, 0xb8df, 0x9943, 0x5124, 0xc1ea, 0x098d, 0x1f33, 0xd754,
456 +
            0x479a, 0x8ffd, 0xae61, 0x6606, 0xf6c8, 0x3eaf, 0xb5f0, 0x7d97, 0xed59, 0x253e, 0x04a2,
457 +
            0xccc5, 0x5c0b, 0x946c,
458 +
        ],
459 +
        [
460 +
            0x0000, 0xbcb4, 0xb10f, 0x0dbb, 0xaa79, 0x16cd, 0x1b76, 0xa7c2, 0x9c95, 0x2021, 0x2d9a,
461 +
            0x912e, 0x36ec, 0x8a58, 0x87e3, 0x3b57, 0xf14d, 0x4df9, 0x4042, 0xfcf6, 0x5b34, 0xe780,
462 +
            0xea3b, 0x568f, 0x6dd8, 0xd16c, 0xdcd7, 0x6063, 0xc7a1, 0x7b15, 0x76ae, 0xca1a, 0x2afd,
463 +
            0x9649, 0x9bf2, 0x2746, 0x8084, 0x3c30, 0x318b, 0x8d3f, 0xb668, 0x0adc, 0x0767, 0xbbd3,
464 +
            0x1c11, 0xa0a5, 0xad1e, 0x11aa, 0xdbb0, 0x6704, 0x6abf, 0xd60b, 0x71c9, 0xcd7d, 0xc0c6,
465 +
            0x7c72, 0x4725, 0xfb91, 0xf62a, 0x4a9e, 0xed5c, 0x51e8, 0x5c53, 0xe0e7, 0x55fa, 0xe94e,
466 +
            0xe4f5, 0x5841, 0xff83, 0x4337, 0x4e8c, 0xf238, 0xc96f, 0x75db, 0x7860, 0xc4d4, 0x6316,
467 +
            0xdfa2, 0xd219, 0x6ead, 0xa4b7, 0x1803, 0x15b8, 0xa90c, 0x0ece, 0xb27a, 0xbfc1, 0x0375,
468 +
            0x3822, 0x8496, 0x892d, 0x3599, 0x925b, 0x2eef, 0x2354, 0x9fe0, 0x7f07, 0xc3b3, 0xce08,
469 +
            0x72bc, 0xd57e, 0x69ca, 0x6471, 0xd8c5, 0xe392, 0x5f26, 0x529d, 0xee29, 0x49eb, 0xf55f,
470 +
            0xf8e4, 0x4450, 0x8e4a, 0x32fe, 0x3f45, 0x83f1, 0x2433, 0x9887, 0x953c, 0x2988, 0x12df,
471 +
            0xae6b, 0xa3d0, 0x1f64, 0xb8a6, 0x0412, 0x09a9, 0xb51d, 0xabf4, 0x1740, 0x1afb, 0xa64f,
472 +
            0x018d, 0xbd39, 0xb082, 0x0c36, 0x3761, 0x8bd5, 0x866e, 0x3ada, 0x9d18, 0x21ac, 0x2c17,
473 +
            0x90a3, 0x5ab9, 0xe60d, 0xebb6, 0x5702, 0xf0c0, 0x4c74, 0x41cf, 0xfd7b, 0xc62c, 0x7a98,
474 +
            0x7723, 0xcb97, 0x6c55, 0xd0e1, 0xdd5a, 0x61ee, 0x8109, 0x3dbd, 0x3006, 0x8cb2, 0x2b70,
475 +
            0x97c4, 0x9a7f, 0x26cb, 0x1d9c, 0xa128, 0xac93, 0x1027, 0xb7e5, 0x0b51, 0x06ea, 0xba5e,
476 +
            0x7044, 0xccf0, 0xc14b, 0x7dff, 0xda3d, 0x6689, 0x6b32, 0xd786, 0xecd1, 0x5065, 0x5dde,
477 +
            0xe16a, 0x46a8, 0xfa1c, 0xf7a7, 0x4b13, 0xfe0e, 0x42ba, 0x4f01, 0xf3b5, 0x5477, 0xe8c3,
478 +
            0xe578, 0x59cc, 0x629b, 0xde2f, 0xd394, 0x6f20, 0xc8e2, 0x7456, 0x79ed, 0xc559, 0x0f43,
479 +
            0xb3f7, 0xbe4c, 0x02f8, 0xa53a, 0x198e, 0x1435, 0xa881, 0x93d6, 0x2f62, 0x22d9, 0x9e6d,
480 +
            0x39af, 0x851b, 0x88a0, 0x3414, 0xd4f3, 0x6847, 0x65fc, 0xd948, 0x7e8a, 0xc23e, 0xcf85,
481 +
            0x7331, 0x4866, 0xf4d2, 0xf969, 0x45dd, 0xe21f, 0x5eab, 0x5310, 0xefa4, 0x25be, 0x990a,
482 +
            0x94b1, 0x2805, 0x8fc7, 0x3373, 0x3ec8, 0x827c, 0xb92b, 0x059f, 0x0824, 0xb490, 0x1352,
483 +
            0xafe6, 0xa25d, 0x1ee9,
484 +
        ],
485 +
        [
486 +
            0x0000, 0x9f8f, 0xf779, 0x68f6, 0x2695, 0xb91a, 0xd1ec, 0x4e63, 0x4d2a, 0xd2a5, 0xba53,
487 +
            0x25dc, 0x6bbf, 0xf430, 0x9cc6, 0x0349, 0x9a54, 0x05db, 0x6d2d, 0xf2a2, 0xbcc1, 0x234e,
488 +
            0x4bb8, 0xd437, 0xd77e, 0x48f1, 0x2007, 0xbf88, 0xf1eb, 0x6e64, 0x0692, 0x991d, 0xfccf,
489 +
            0x6340, 0x0bb6, 0x9439, 0xda5a, 0x45d5, 0x2d23, 0xb2ac, 0xb1e5, 0x2e6a, 0x469c, 0xd913,
490 +
            0x9770, 0x08ff, 0x6009, 0xff86, 0x669b, 0xf914, 0x91e2, 0x0e6d, 0x400e, 0xdf81, 0xb777,
491 +
            0x28f8, 0x2bb1, 0xb43e, 0xdcc8, 0x4347, 0x0d24, 0x92ab, 0xfa5d, 0x65d2, 0x31f9, 0xae76,
492 +
            0xc680, 0x590f, 0x176c, 0x88e3, 0xe015, 0x7f9a, 0x7cd3, 0xe35c, 0x8baa, 0x1425, 0x5a46,
493 +
            0xc5c9, 0xad3f, 0x32b0, 0xabad, 0x3422, 0x5cd4, 0xc35b, 0x8d38, 0x12b7, 0x7a41, 0xe5ce,
494 +
            0xe687, 0x7908, 0x11fe, 0x8e71, 0xc012, 0x5f9d, 0x376b, 0xa8e4, 0xcd36, 0x52b9, 0x3a4f,
495 +
            0xa5c0, 0xeba3, 0x742c, 0x1cda, 0x8355, 0x801c, 0x1f93, 0x7765, 0xe8ea, 0xa689, 0x3906,
496 +
            0x51f0, 0xce7f, 0x5762, 0xc8ed, 0xa01b, 0x3f94, 0x71f7, 0xee78, 0x868e, 0x1901, 0x1a48,
497 +
            0x85c7, 0xed31, 0x72be, 0x3cdd, 0xa352, 0xcba4, 0x542b, 0x63f2, 0xfc7d, 0x948b, 0x0b04,
498 +
            0x4567, 0xdae8, 0xb21e, 0x2d91, 0x2ed8, 0xb157, 0xd9a1, 0x462e, 0x084d, 0x97c2, 0xff34,
499 +
            0x60bb, 0xf9a6, 0x6629, 0x0edf, 0x9150, 0xdf33, 0x40bc, 0x284a, 0xb7c5, 0xb48c, 0x2b03,
500 +
            0x43f5, 0xdc7a, 0x9219, 0x0d96, 0x6560, 0xfaef, 0x9f3d, 0x00b2, 0x6844, 0xf7cb, 0xb9a8,
501 +
            0x2627, 0x4ed1, 0xd15e, 0xd217, 0x4d98, 0x256e, 0xbae1, 0xf482, 0x6b0d, 0x03fb, 0x9c74,
502 +
            0x0569, 0x9ae6, 0xf210, 0x6d9f, 0x23fc, 0xbc73, 0xd485, 0x4b0a, 0x4843, 0xd7cc, 0xbf3a,
503 +
            0x20b5, 0x6ed6, 0xf159, 0x99af, 0x0620, 0x520b, 0xcd84, 0xa572, 0x3afd, 0x749e, 0xeb11,
504 +
            0x83e7, 0x1c68, 0x1f21, 0x80ae, 0xe858, 0x77d7, 0x39b4, 0xa63b, 0xcecd, 0x5142, 0xc85f,
505 +
            0x57d0, 0x3f26, 0xa0a9, 0xeeca, 0x7145, 0x19b3, 0x863c, 0x8575, 0x1afa, 0x720c, 0xed83,
506 +
            0xa3e0, 0x3c6f, 0x5499, 0xcb16, 0xaec4, 0x314b, 0x59bd, 0xc632, 0x8851, 0x17de, 0x7f28,
507 +
            0xe0a7, 0xe3ee, 0x7c61, 0x1497, 0x8b18, 0xc57b, 0x5af4, 0x3202, 0xad8d, 0x3490, 0xab1f,
508 +
            0xc3e9, 0x5c66, 0x1205, 0x8d8a, 0xe57c, 0x7af3, 0x79ba, 0xe635, 0x8ec3, 0x114c, 0x5f2f,
509 +
            0xc0a0, 0xa856, 0x37d9,
510 +
        ],
511 +
        [
512 +
            0x0000, 0xc7e4, 0x47af, 0x804b, 0x8f5e, 0x48ba, 0xc8f1, 0x0f15, 0xd6db, 0x113f, 0x9174,
513 +
            0x5690, 0x5985, 0x9e61, 0x1e2a, 0xd9ce, 0x65d1, 0xa235, 0x227e, 0xe59a, 0xea8f, 0x2d6b,
514 +
            0xad20, 0x6ac4, 0xb30a, 0x74ee, 0xf4a5, 0x3341, 0x3c54, 0xfbb0, 0x7bfb, 0xbc1f, 0xcba2,
515 +
            0x0c46, 0x8c0d, 0x4be9, 0x44fc, 0x8318, 0x0353, 0xc4b7, 0x1d79, 0xda9d, 0x5ad6, 0x9d32,
516 +
            0x9227, 0x55c3, 0xd588, 0x126c, 0xae73, 0x6997, 0xe9dc, 0x2e38, 0x212d, 0xe6c9, 0x6682,
517 +
            0xa166, 0x78a8, 0xbf4c, 0x3f07, 0xf8e3, 0xf7f6, 0x3012, 0xb059, 0x77bd, 0x5f23, 0x98c7,
518 +
            0x188c, 0xdf68, 0xd07d, 0x1799, 0x97d2, 0x5036, 0x89f8, 0x4e1c, 0xce57, 0x09b3, 0x06a6,
519 +
            0xc142, 0x4109, 0x86ed, 0x3af2, 0xfd16, 0x7d5d, 0xbab9, 0xb5ac, 0x7248, 0xf203, 0x35e7,
520 +
            0xec29, 0x2bcd, 0xab86, 0x6c62, 0x6377, 0xa493, 0x24d8, 0xe33c, 0x9481, 0x5365, 0xd32e,
521 +
            0x14ca, 0x1bdf, 0xdc3b, 0x5c70, 0x9b94, 0x425a, 0x85be, 0x05f5, 0xc211, 0xcd04, 0x0ae0,
522 +
            0x8aab, 0x4d4f, 0xf150, 0x36b4, 0xb6ff, 0x711b, 0x7e0e, 0xb9ea, 0x39a1, 0xfe45, 0x278b,
523 +
            0xe06f, 0x6024, 0xa7c0, 0xa8d5, 0x6f31, 0xef7a, 0x289e, 0xbe46, 0x79a2, 0xf9e9, 0x3e0d,
524 +
            0x3118, 0xf6fc, 0x76b7, 0xb153, 0x689d, 0xaf79, 0x2f32, 0xe8d6, 0xe7c3, 0x2027, 0xa06c,
525 +
            0x6788, 0xdb97, 0x1c73, 0x9c38, 0x5bdc, 0x54c9, 0x932d, 0x1366, 0xd482, 0x0d4c, 0xcaa8,
526 +
            0x4ae3, 0x8d07, 0x8212, 0x45f6, 0xc5bd, 0x0259, 0x75e4, 0xb200, 0x324b, 0xf5af, 0xfaba,
527 +
            0x3d5e, 0xbd15, 0x7af1, 0xa33f, 0x64db, 0xe490, 0x2374, 0x2c61, 0xeb85, 0x6bce, 0xac2a,
528 +
            0x1035, 0xd7d1, 0x579a, 0x907e, 0x9f6b, 0x588f, 0xd8c4, 0x1f20, 0xc6ee, 0x010a, 0x8141,
529 +
            0x46a5, 0x49b0, 0x8e54, 0x0e1f, 0xc9fb, 0xe165, 0x2681, 0xa6ca, 0x612e, 0x6e3b, 0xa9df,
530 +
            0x2994, 0xee70, 0x37be, 0xf05a, 0x7011, 0xb7f5, 0xb8e0, 0x7f04, 0xff4f, 0x38ab, 0x84b4,
531 +
            0x4350, 0xc31b, 0x04ff, 0x0bea, 0xcc0e, 0x4c45, 0x8ba1, 0x526f, 0x958b, 0x15c0, 0xd224,
532 +
            0xdd31, 0x1ad5, 0x9a9e, 0x5d7a, 0x2ac7, 0xed23, 0x6d68, 0xaa8c, 0xa599, 0x627d, 0xe236,
533 +
            0x25d2, 0xfc1c, 0x3bf8, 0xbbb3, 0x7c57, 0x7342, 0xb4a6, 0x34ed, 0xf309, 0x4f16, 0x88f2,
534 +
            0x08b9, 0xcf5d, 0xc048, 0x07ac, 0x87e7, 0x4003, 0x99cd, 0x5e29, 0xde62, 0x1986, 0x1693,
535 +
            0xd177, 0x513c, 0x96d8,
536 +
        ],
537 +
        [
538 +
            0x0000, 0xb4eb, 0xa1b1, 0x155a, 0x8b05, 0x3fee, 0x2ab4, 0x9e5f, 0xde6d, 0x6a86, 0x7fdc,
539 +
            0xcb37, 0x5568, 0xe183, 0xf4d9, 0x4032, 0x74bd, 0xc056, 0xd50c, 0x61e7, 0xffb8, 0x4b53,
540 +
            0x5e09, 0xeae2, 0xaad0, 0x1e3b, 0x0b61, 0xbf8a, 0x21d5, 0x953e, 0x8064, 0x348f, 0xe97a,
541 +
            0x5d91, 0x48cb, 0xfc20, 0x627f, 0xd694, 0xc3ce, 0x7725, 0x3717, 0x83fc, 0x96a6, 0x224d,
542 +
            0xbc12, 0x08f9, 0x1da3, 0xa948, 0x9dc7, 0x292c, 0x3c76, 0x889d, 0x16c2, 0xa229, 0xb773,
543 +
            0x0398, 0x43aa, 0xf741, 0xe21b, 0x56f0, 0xc8af, 0x7c44, 0x691e, 0xddf5, 0x1a93, 0xae78,
544 +
            0xbb22, 0x0fc9, 0x9196, 0x257d, 0x3027, 0x84cc, 0xc4fe, 0x7015, 0x654f, 0xd1a4, 0x4ffb,
545 +
            0xfb10, 0xee4a, 0x5aa1, 0x6e2e, 0xdac5, 0xcf9f, 0x7b74, 0xe52b, 0x51c0, 0x449a, 0xf071,
546 +
            0xb043, 0x04a8, 0x11f2, 0xa519, 0x3b46, 0x8fad, 0x9af7, 0x2e1c, 0xf3e9, 0x4702, 0x5258,
547 +
            0xe6b3, 0x78ec, 0xcc07, 0xd95d, 0x6db6, 0x2d84, 0x996f, 0x8c35, 0x38de, 0xa681, 0x126a,
548 +
            0x0730, 0xb3db, 0x8754, 0x33bf, 0x26e5, 0x920e, 0x0c51, 0xb8ba, 0xade0, 0x190b, 0x5939,
549 +
            0xedd2, 0xf888, 0x4c63, 0xd23c, 0x66d7, 0x738d, 0xc766, 0x3526, 0x81cd, 0x9497, 0x207c,
550 +
            0xbe23, 0x0ac8, 0x1f92, 0xab79, 0xeb4b, 0x5fa0, 0x4afa, 0xfe11, 0x604e, 0xd4a5, 0xc1ff,
551 +
            0x7514, 0x419b, 0xf570, 0xe02a, 0x54c1, 0xca9e, 0x7e75, 0x6b2f, 0xdfc4, 0x9ff6, 0x2b1d,
552 +
            0x3e47, 0x8aac, 0x14f3, 0xa018, 0xb542, 0x01a9, 0xdc5c, 0x68b7, 0x7ded, 0xc906, 0x5759,
553 +
            0xe3b2, 0xf6e8, 0x4203, 0x0231, 0xb6da, 0xa380, 0x176b, 0x8934, 0x3ddf, 0x2885, 0x9c6e,
554 +
            0xa8e1, 0x1c0a, 0x0950, 0xbdbb, 0x23e4, 0x970f, 0x8255, 0x36be, 0x768c, 0xc267, 0xd73d,
555 +
            0x63d6, 0xfd89, 0x4962, 0x5c38, 0xe8d3, 0x2fb5, 0x9b5e, 0x8e04, 0x3aef, 0xa4b0, 0x105b,
556 +
            0x0501, 0xb1ea, 0xf1d8, 0x4533, 0x5069, 0xe482, 0x7add, 0xce36, 0xdb6c, 0x6f87, 0x5b08,
557 +
            0xefe3, 0xfab9, 0x4e52, 0xd00d, 0x64e6, 0x71bc, 0xc557, 0x8565, 0x318e, 0x24d4, 0x903f,
558 +
            0x0e60, 0xba8b, 0xafd1, 0x1b3a, 0xc6cf, 0x7224, 0x677e, 0xd395, 0x4dca, 0xf921, 0xec7b,
559 +
            0x5890, 0x18a2, 0xac49, 0xb913, 0x0df8, 0x93a7, 0x274c, 0x3216, 0x86fd, 0xb272, 0x0699,
560 +
            0x13c3, 0xa728, 0x3977, 0x8d9c, 0x98c6, 0x2c2d, 0x6c1f, 0xd8f4, 0xcdae, 0x7945, 0xe71a,
561 +
            0x53f1, 0x46ab, 0xf240,
562 +
        ],
563 +
        [
564 +
            0x0000, 0x6a4c, 0xd498, 0xbed4, 0x6157, 0x0b1b, 0xb5cf, 0xdf83, 0xc2ae, 0xa8e2, 0x1636,
565 +
            0x7c7a, 0xa3f9, 0xc9b5, 0x7761, 0x1d2d, 0x4d3b, 0x2777, 0x99a3, 0xf3ef, 0x2c6c, 0x4620,
566 +
            0xf8f4, 0x92b8, 0x8f95, 0xe5d9, 0x5b0d, 0x3141, 0xeec2, 0x848e, 0x3a5a, 0x5016, 0x9a76,
567 +
            0xf03a, 0x4eee, 0x24a2, 0xfb21, 0x916d, 0x2fb9, 0x45f5, 0x58d8, 0x3294, 0x8c40, 0xe60c,
568 +
            0x398f, 0x53c3, 0xed17, 0x875b, 0xd74d, 0xbd01, 0x03d5, 0x6999, 0xb61a, 0xdc56, 0x6282,
569 +
            0x08ce, 0x15e3, 0x7faf, 0xc17b, 0xab37, 0x74b4, 0x1ef8, 0xa02c, 0xca60, 0xfc8b, 0x96c7,
570 +
            0x2813, 0x425f, 0x9ddc, 0xf790, 0x4944, 0x2308, 0x3e25, 0x5469, 0xeabd, 0x80f1, 0x5f72,
571 +
            0x353e, 0x8bea, 0xe1a6, 0xb1b0, 0xdbfc, 0x6528, 0x0f64, 0xd0e7, 0xbaab, 0x047f, 0x6e33,
572 +
            0x731e, 0x1952, 0xa786, 0xcdca, 0x1249, 0x7805, 0xc6d1, 0xac9d, 0x66fd, 0x0cb1, 0xb265,
573 +
            0xd829, 0x07aa, 0x6de6, 0xd332, 0xb97e, 0xa453, 0xce1f, 0x70cb, 0x1a87, 0xc504, 0xaf48,
574 +
            0x119c, 0x7bd0, 0x2bc6, 0x418a, 0xff5e, 0x9512, 0x4a91, 0x20dd, 0x9e09, 0xf445, 0xe968,
575 +
            0x8324, 0x3df0, 0x57bc, 0x883f, 0xe273, 0x5ca7, 0x36eb, 0x3171, 0x5b3d, 0xe5e9, 0x8fa5,
576 +
            0x5026, 0x3a6a, 0x84be, 0xeef2, 0xf3df, 0x9993, 0x2747, 0x4d0b, 0x9288, 0xf8c4, 0x4610,
577 +
            0x2c5c, 0x7c4a, 0x1606, 0xa8d2, 0xc29e, 0x1d1d, 0x7751, 0xc985, 0xa3c9, 0xbee4, 0xd4a8,
578 +
            0x6a7c, 0x0030, 0xdfb3, 0xb5ff, 0x0b2b, 0x6167, 0xab07, 0xc14b, 0x7f9f, 0x15d3, 0xca50,
579 +
            0xa01c, 0x1ec8, 0x7484, 0x69a9, 0x03e5, 0xbd31, 0xd77d, 0x08fe, 0x62b2, 0xdc66, 0xb62a,
580 +
            0xe63c, 0x8c70, 0x32a4, 0x58e8, 0x876b, 0xed27, 0x53f3, 0x39bf, 0x2492, 0x4ede, 0xf00a,
581 +
            0x9a46, 0x45c5, 0x2f89, 0x915d, 0xfb11, 0xcdfa, 0xa7b6, 0x1962, 0x732e, 0xacad, 0xc6e1,
582 +
            0x7835, 0x1279, 0x0f54, 0x6518, 0xdbcc, 0xb180, 0x6e03, 0x044f, 0xba9b, 0xd0d7, 0x80c1,
583 +
            0xea8d, 0x5459, 0x3e15, 0xe196, 0x8bda, 0x350e, 0x5f42, 0x426f, 0x2823, 0x96f7, 0xfcbb,
584 +
            0x2338, 0x4974, 0xf7a0, 0x9dec, 0x578c, 0x3dc0, 0x8314, 0xe958, 0x36db, 0x5c97, 0xe243,
585 +
            0x880f, 0x9522, 0xff6e, 0x41ba, 0x2bf6, 0xf475, 0x9e39, 0x20ed, 0x4aa1, 0x1ab7, 0x70fb,
586 +
            0xce2f, 0xa463, 0x7be0, 0x11ac, 0xaf78, 0xc534, 0xd819, 0xb255, 0x0c81, 0x66cd, 0xb94e,
587 +
            0xd302, 0x6dd6, 0x079a,
588 +
        ],
589 +
        [
590 +
            0x0000, 0x62e2, 0xc5c4, 0xa726, 0x43ef, 0x210d, 0x862b, 0xe4c9, 0x87de, 0xe53c, 0x421a,
591 +
            0x20f8, 0xc431, 0xa6d3, 0x01f5, 0x6317, 0xc7db, 0xa539, 0x021f, 0x60fd, 0x8434, 0xe6d6,
592 +
            0x41f0, 0x2312, 0x4005, 0x22e7, 0x85c1, 0xe723, 0x03ea, 0x6108, 0xc62e, 0xa4cc, 0x47d1,
593 +
            0x2533, 0x8215, 0xe0f7, 0x043e, 0x66dc, 0xc1fa, 0xa318, 0xc00f, 0xa2ed, 0x05cb, 0x6729,
594 +
            0x83e0, 0xe102, 0x4624, 0x24c6, 0x800a, 0xe2e8, 0x45ce, 0x272c, 0xc3e5, 0xa107, 0x0621,
595 +
            0x64c3, 0x07d4, 0x6536, 0xc210, 0xa0f2, 0x443b, 0x26d9, 0x81ff, 0xe31d, 0x8fa2, 0xed40,
596 +
            0x4a66, 0x2884, 0xcc4d, 0xaeaf, 0x0989, 0x6b6b, 0x087c, 0x6a9e, 0xcdb8, 0xaf5a, 0x4b93,
597 +
            0x2971, 0x8e57, 0xecb5, 0x4879, 0x2a9b, 0x8dbd, 0xef5f, 0x0b96, 0x6974, 0xce52, 0xacb0,
598 +
            0xcfa7, 0xad45, 0x0a63, 0x6881, 0x8c48, 0xeeaa, 0x498c, 0x2b6e, 0xc873, 0xaa91, 0x0db7,
599 +
            0x6f55, 0x8b9c, 0xe97e, 0x4e58, 0x2cba, 0x4fad, 0x2d4f, 0x8a69, 0xe88b, 0x0c42, 0x6ea0,
600 +
            0xc986, 0xab64, 0x0fa8, 0x6d4a, 0xca6c, 0xa88e, 0x4c47, 0x2ea5, 0x8983, 0xeb61, 0x8876,
601 +
            0xea94, 0x4db2, 0x2f50, 0xcb99, 0xa97b, 0x0e5d, 0x6cbf, 0xd723, 0xb5c1, 0x12e7, 0x7005,
602 +
            0x94cc, 0xf62e, 0x5108, 0x33ea, 0x50fd, 0x321f, 0x9539, 0xf7db, 0x1312, 0x71f0, 0xd6d6,
603 +
            0xb434, 0x10f8, 0x721a, 0xd53c, 0xb7de, 0x5317, 0x31f5, 0x96d3, 0xf431, 0x9726, 0xf5c4,
604 +
            0x52e2, 0x3000, 0xd4c9, 0xb62b, 0x110d, 0x73ef, 0x90f2, 0xf210, 0x5536, 0x37d4, 0xd31d,
605 +
            0xb1ff, 0x16d9, 0x743b, 0x172c, 0x75ce, 0xd2e8, 0xb00a, 0x54c3, 0x3621, 0x9107, 0xf3e5,
606 +
            0x5729, 0x35cb, 0x92ed, 0xf00f, 0x14c6, 0x7624, 0xd102, 0xb3e0, 0xd0f7, 0xb215, 0x1533,
607 +
            0x77d1, 0x9318, 0xf1fa, 0x56dc, 0x343e, 0x5881, 0x3a63, 0x9d45, 0xffa7, 0x1b6e, 0x798c,
608 +
            0xdeaa, 0xbc48, 0xdf5f, 0xbdbd, 0x1a9b, 0x7879, 0x9cb0, 0xfe52, 0x5974, 0x3b96, 0x9f5a,
609 +
            0xfdb8, 0x5a9e, 0x387c, 0xdcb5, 0xbe57, 0x1971, 0x7b93, 0x1884, 0x7a66, 0xdd40, 0xbfa2,
610 +
            0x5b6b, 0x3989, 0x9eaf, 0xfc4d, 0x1f50, 0x7db2, 0xda94, 0xb876, 0x5cbf, 0x3e5d, 0x997b,
611 +
            0xfb99, 0x988e, 0xfa6c, 0x5d4a, 0x3fa8, 0xdb61, 0xb983, 0x1ea5, 0x7c47, 0xd88b, 0xba69,
612 +
            0x1d4f, 0x7fad, 0x9b64, 0xf986, 0x5ea0, 0x3c42, 0x5f55, 0x3db7, 0x9a91, 0xf873, 0x1cba,
613 +
            0x7e58, 0xd97e, 0xbb9c,
614 +
        ],
615 +
        [
616 +
            0x0000, 0x6621, 0xcc42, 0xaa63, 0x50e3, 0x36c2, 0x9ca1, 0xfa80, 0xa1c6, 0xc7e7, 0x6d84,
617 +
            0x0ba5, 0xf125, 0x9704, 0x3d67, 0x5b46, 0x8beb, 0xedca, 0x47a9, 0x2188, 0xdb08, 0xbd29,
618 +
            0x174a, 0x716b, 0x2a2d, 0x4c0c, 0xe66f, 0x804e, 0x7ace, 0x1cef, 0xb68c, 0xd0ad, 0xdfb1,
619 +
            0xb990, 0x13f3, 0x75d2, 0x8f52, 0xe973, 0x4310, 0x2531, 0x7e77, 0x1856, 0xb235, 0xd414,
620 +
            0x2e94, 0x48b5, 0xe2d6, 0x84f7, 0x545a, 0x327b, 0x9818, 0xfe39, 0x04b9, 0x6298, 0xc8fb,
621 +
            0xaeda, 0xf59c, 0x93bd, 0x39de, 0x5fff, 0xa57f, 0xc35e, 0x693d, 0x0f1c, 0x7705, 0x1124,
622 +
            0xbb47, 0xdd66, 0x27e6, 0x41c7, 0xeba4, 0x8d85, 0xd6c3, 0xb0e2, 0x1a81, 0x7ca0, 0x8620,
623 +
            0xe001, 0x4a62, 0x2c43, 0xfcee, 0x9acf, 0x30ac, 0x568d, 0xac0d, 0xca2c, 0x604f, 0x066e,
624 +
            0x5d28, 0x3b09, 0x916a, 0xf74b, 0x0dcb, 0x6bea, 0xc189, 0xa7a8, 0xa8b4, 0xce95, 0x64f6,
625 +
            0x02d7, 0xf857, 0x9e76, 0x3415, 0x5234, 0x0972, 0x6f53, 0xc530, 0xa311, 0x5991, 0x3fb0,
626 +
            0x95d3, 0xf3f2, 0x235f, 0x457e, 0xef1d, 0x893c, 0x73bc, 0x159d, 0xbffe, 0xd9df, 0x8299,
627 +
            0xe4b8, 0x4edb, 0x28fa, 0xd27a, 0xb45b, 0x1e38, 0x7819, 0xee0a, 0x882b, 0x2248, 0x4469,
628 +
            0xbee9, 0xd8c8, 0x72ab, 0x148a, 0x4fcc, 0x29ed, 0x838e, 0xe5af, 0x1f2f, 0x790e, 0xd36d,
629 +
            0xb54c, 0x65e1, 0x03c0, 0xa9a3, 0xcf82, 0x3502, 0x5323, 0xf940, 0x9f61, 0xc427, 0xa206,
630 +
            0x0865, 0x6e44, 0x94c4, 0xf2e5, 0x5886, 0x3ea7, 0x31bb, 0x579a, 0xfdf9, 0x9bd8, 0x6158,
631 +
            0x0779, 0xad1a, 0xcb3b, 0x907d, 0xf65c, 0x5c3f, 0x3a1e, 0xc09e, 0xa6bf, 0x0cdc, 0x6afd,
632 +
            0xba50, 0xdc71, 0x7612, 0x1033, 0xeab3, 0x8c92, 0x26f1, 0x40d0, 0x1b96, 0x7db7, 0xd7d4,
633 +
            0xb1f5, 0x4b75, 0x2d54, 0x8737, 0xe116, 0x990f, 0xff2e, 0x554d, 0x336c, 0xc9ec, 0xafcd,
634 +
            0x05ae, 0x638f, 0x38c9, 0x5ee8, 0xf48b, 0x92aa, 0x682a, 0x0e0b, 0xa468, 0xc249, 0x12e4,
635 +
            0x74c5, 0xdea6, 0xb887, 0x4207, 0x2426, 0x8e45, 0xe864, 0xb322, 0xd503, 0x7f60, 0x1941,
636 +
            0xe3c1, 0x85e0, 0x2f83, 0x49a2, 0x46be, 0x209f, 0x8afc, 0xecdd, 0x165d, 0x707c, 0xda1f,
637 +
            0xbc3e, 0xe778, 0x8159, 0x2b3a, 0x4d1b, 0xb79b, 0xd1ba, 0x7bd9, 0x1df8, 0xcd55, 0xab74,
638 +
            0x0117, 0x6736, 0x9db6, 0xfb97, 0x51f4, 0x37d5, 0x6c93, 0x0ab2, 0xa0d1, 0xc6f0, 0x3c70,
639 +
            0x5a51, 0xf032, 0x9613,
640 +
        ],
641 +
        [
642 +
            0x0000, 0x1473, 0x28e6, 0x3c95, 0x51cc, 0x45bf, 0x792a, 0x6d59, 0xa398, 0xb7eb, 0x8b7e,
643 +
            0x9f0d, 0xf254, 0xe627, 0xdab2, 0xcec1, 0x8f57, 0x9b24, 0xa7b1, 0xb3c2, 0xde9b, 0xcae8,
644 +
            0xf67d, 0xe20e, 0x2ccf, 0x38bc, 0x0429, 0x105a, 0x7d03, 0x6970, 0x55e5, 0x4196, 0xd6c9,
645 +
            0xc2ba, 0xfe2f, 0xea5c, 0x8705, 0x9376, 0xafe3, 0xbb90, 0x7551, 0x6122, 0x5db7, 0x49c4,
646 +
            0x249d, 0x30ee, 0x0c7b, 0x1808, 0x599e, 0x4ded, 0x7178, 0x650b, 0x0852, 0x1c21, 0x20b4,
647 +
            0x34c7, 0xfa06, 0xee75, 0xd2e0, 0xc693, 0xabca, 0xbfb9, 0x832c, 0x975f, 0x65f5, 0x7186,
648 +
            0x4d13, 0x5960, 0x3439, 0x204a, 0x1cdf, 0x08ac, 0xc66d, 0xd21e, 0xee8b, 0xfaf8, 0x97a1,
649 +
            0x83d2, 0xbf47, 0xab34, 0xeaa2, 0xfed1, 0xc244, 0xd637, 0xbb6e, 0xaf1d, 0x9388, 0x87fb,
650 +
            0x493a, 0x5d49, 0x61dc, 0x75af, 0x18f6, 0x0c85, 0x3010, 0x2463, 0xb33c, 0xa74f, 0x9bda,
651 +
            0x8fa9, 0xe2f0, 0xf683, 0xca16, 0xde65, 0x10a4, 0x04d7, 0x3842, 0x2c31, 0x4168, 0x551b,
652 +
            0x698e, 0x7dfd, 0x3c6b, 0x2818, 0x148d, 0x00fe, 0x6da7, 0x79d4, 0x4541, 0x5132, 0x9ff3,
653 +
            0x8b80, 0xb715, 0xa366, 0xce3f, 0xda4c, 0xe6d9, 0xf2aa, 0xcbea, 0xdf99, 0xe30c, 0xf77f,
654 +
            0x9a26, 0x8e55, 0xb2c0, 0xa6b3, 0x6872, 0x7c01, 0x4094, 0x54e7, 0x39be, 0x2dcd, 0x1158,
655 +
            0x052b, 0x44bd, 0x50ce, 0x6c5b, 0x7828, 0x1571, 0x0102, 0x3d97, 0x29e4, 0xe725, 0xf356,
656 +
            0xcfc3, 0xdbb0, 0xb6e9, 0xa29a, 0x9e0f, 0x8a7c, 0x1d23, 0x0950, 0x35c5, 0x21b6, 0x4cef,
657 +
            0x589c, 0x6409, 0x707a, 0xbebb, 0xaac8, 0x965d, 0x822e, 0xef77, 0xfb04, 0xc791, 0xd3e2,
658 +
            0x9274, 0x8607, 0xba92, 0xaee1, 0xc3b8, 0xd7cb, 0xeb5e, 0xff2d, 0x31ec, 0x259f, 0x190a,
659 +
            0x0d79, 0x6020, 0x7453, 0x48c6, 0x5cb5, 0xae1f, 0xba6c, 0x86f9, 0x928a, 0xffd3, 0xeba0,
660 +
            0xd735, 0xc346, 0x0d87, 0x19f4, 0x2561, 0x3112, 0x5c4b, 0x4838, 0x74ad, 0x60de, 0x2148,
661 +
            0x353b, 0x09ae, 0x1ddd, 0x7084, 0x64f7, 0x5862, 0x4c11, 0x82d0, 0x96a3, 0xaa36, 0xbe45,
662 +
            0xd31c, 0xc76f, 0xfbfa, 0xef89, 0x78d6, 0x6ca5, 0x5030, 0x4443, 0x291a, 0x3d69, 0x01fc,
663 +
            0x158f, 0xdb4e, 0xcf3d, 0xf3a8, 0xe7db, 0x8a82, 0x9ef1, 0xa264, 0xb617, 0xf781, 0xe3f2,
664 +
            0xdf67, 0xcb14, 0xa64d, 0xb23e, 0x8eab, 0x9ad8, 0x5419, 0x406a, 0x7cff, 0x688c, 0x05d5,
665 +
            0x11a6, 0x2d33, 0x3940,
666 +
        ],
667 +
        [
668 +
            0x0000, 0x5fb3, 0xbf66, 0xe0d5, 0xb6ab, 0xe918, 0x09cd, 0x567e, 0xa531, 0xfa82, 0x1a57,
669 +
            0x45e4, 0x139a, 0x4c29, 0xacfc, 0xf34f, 0x8205, 0xddb6, 0x3d63, 0x62d0, 0x34ae, 0x6b1d,
670 +
            0x8bc8, 0xd47b, 0x2734, 0x7887, 0x9852, 0xc7e1, 0x919f, 0xce2c, 0x2ef9, 0x714a, 0xcc6d,
671 +
            0x93de, 0x730b, 0x2cb8, 0x7ac6, 0x2575, 0xc5a0, 0x9a13, 0x695c, 0x36ef, 0xd63a, 0x8989,
672 +
            0xdff7, 0x8044, 0x6091, 0x3f22, 0x4e68, 0x11db, 0xf10e, 0xaebd, 0xf8c3, 0xa770, 0x47a5,
673 +
            0x1816, 0xeb59, 0xb4ea, 0x543f, 0x0b8c, 0x5df2, 0x0241, 0xe294, 0xbd27, 0x50bd, 0x0f0e,
674 +
            0xefdb, 0xb068, 0xe616, 0xb9a5, 0x5970, 0x06c3, 0xf58c, 0xaa3f, 0x4aea, 0x1559, 0x4327,
675 +
            0x1c94, 0xfc41, 0xa3f2, 0xd2b8, 0x8d0b, 0x6dde, 0x326d, 0x6413, 0x3ba0, 0xdb75, 0x84c6,
676 +
            0x7789, 0x283a, 0xc8ef, 0x975c, 0xc122, 0x9e91, 0x7e44, 0x21f7, 0x9cd0, 0xc363, 0x23b6,
677 +
            0x7c05, 0x2a7b, 0x75c8, 0x951d, 0xcaae, 0x39e1, 0x6652, 0x8687, 0xd934, 0x8f4a, 0xd0f9,
678 +
            0x302c, 0x6f9f, 0x1ed5, 0x4166, 0xa1b3, 0xfe00, 0xa87e, 0xf7cd, 0x1718, 0x48ab, 0xbbe4,
679 +
            0xe457, 0x0482, 0x5b31, 0x0d4f, 0x52fc, 0xb229, 0xed9a, 0xa17a, 0xfec9, 0x1e1c, 0x41af,
680 +
            0x17d1, 0x4862, 0xa8b7, 0xf704, 0x044b, 0x5bf8, 0xbb2d, 0xe49e, 0xb2e0, 0xed53, 0x0d86,
681 +
            0x5235, 0x237f, 0x7ccc, 0x9c19, 0xc3aa, 0x95d4, 0xca67, 0x2ab2, 0x7501, 0x864e, 0xd9fd,
682 +
            0x3928, 0x669b, 0x30e5, 0x6f56, 0x8f83, 0xd030, 0x6d17, 0x32a4, 0xd271, 0x8dc2, 0xdbbc,
683 +
            0x840f, 0x64da, 0x3b69, 0xc826, 0x9795, 0x7740, 0x28f3, 0x7e8d, 0x213e, 0xc1eb, 0x9e58,
684 +
            0xef12, 0xb0a1, 0x5074, 0x0fc7, 0x59b9, 0x060a, 0xe6df, 0xb96c, 0x4a23, 0x1590, 0xf545,
685 +
            0xaaf6, 0xfc88, 0xa33b, 0x43ee, 0x1c5d, 0xf1c7, 0xae74, 0x4ea1, 0x1112, 0x476c, 0x18df,
686 +
            0xf80a, 0xa7b9, 0x54f6, 0x0b45, 0xeb90, 0xb423, 0xe25d, 0xbdee, 0x5d3b, 0x0288, 0x73c2,
687 +
            0x2c71, 0xcca4, 0x9317, 0xc569, 0x9ada, 0x7a0f, 0x25bc, 0xd6f3, 0x8940, 0x6995, 0x3626,
688 +
            0x6058, 0x3feb, 0xdf3e, 0x808d, 0x3daa, 0x6219, 0x82cc, 0xdd7f, 0x8b01, 0xd4b2, 0x3467,
689 +
            0x6bd4, 0x989b, 0xc728, 0x27fd, 0x784e, 0x2e30, 0x7183, 0x9156, 0xcee5, 0xbfaf, 0xe01c,
690 +
            0x00c9, 0x5f7a, 0x0904, 0x56b7, 0xb662, 0xe9d1, 0x1a9e, 0x452d, 0xa5f8, 0xfa4b, 0xac35,
691 +
            0xf386, 0x1353, 0x4ce0,
692 +
        ],
693 +
        [
694 +
            0x0000, 0x8a93, 0xdd41, 0x57d2, 0x72e5, 0xf876, 0xafa4, 0x2537, 0xe5ca, 0x6f59, 0x388b,
695 +
            0xb218, 0x972f, 0x1dbc, 0x4a6e, 0xc0fd, 0x03f3, 0x8960, 0xdeb2, 0x5421, 0x7116, 0xfb85,
696 +
            0xac57, 0x26c4, 0xe639, 0x6caa, 0x3b78, 0xb1eb, 0x94dc, 0x1e4f, 0x499d, 0xc30e, 0x07e6,
697 +
            0x8d75, 0xdaa7, 0x5034, 0x7503, 0xff90, 0xa842, 0x22d1, 0xe22c, 0x68bf, 0x3f6d, 0xb5fe,
698 +
            0x90c9, 0x1a5a, 0x4d88, 0xc71b, 0x0415, 0x8e86, 0xd954, 0x53c7, 0x76f0, 0xfc63, 0xabb1,
699 +
            0x2122, 0xe1df, 0x6b4c, 0x3c9e, 0xb60d, 0x933a, 0x19a9, 0x4e7b, 0xc4e8, 0x0fcc, 0x855f,
700 +
            0xd28d, 0x581e, 0x7d29, 0xf7ba, 0xa068, 0x2afb, 0xea06, 0x6095, 0x3747, 0xbdd4, 0x98e3,
701 +
            0x1270, 0x45a2, 0xcf31, 0x0c3f, 0x86ac, 0xd17e, 0x5bed, 0x7eda, 0xf449, 0xa39b, 0x2908,
702 +
            0xe9f5, 0x6366, 0x34b4, 0xbe27, 0x9b10, 0x1183, 0x4651, 0xccc2, 0x082a, 0x82b9, 0xd56b,
703 +
            0x5ff8, 0x7acf, 0xf05c, 0xa78e, 0x2d1d, 0xede0, 0x6773, 0x30a1, 0xba32, 0x9f05, 0x1596,
704 +
            0x4244, 0xc8d7, 0x0bd9, 0x814a, 0xd698, 0x5c0b, 0x793c, 0xf3af, 0xa47d, 0x2eee, 0xee13,
705 +
            0x6480, 0x3352, 0xb9c1, 0x9cf6, 0x1665, 0x41b7, 0xcb24, 0x1f98, 0x950b, 0xc2d9, 0x484a,
706 +
            0x6d7d, 0xe7ee, 0xb03c, 0x3aaf, 0xfa52, 0x70c1, 0x2713, 0xad80, 0x88b7, 0x0224, 0x55f6,
707 +
            0xdf65, 0x1c6b, 0x96f8, 0xc12a, 0x4bb9, 0x6e8e, 0xe41d, 0xb3cf, 0x395c, 0xf9a1, 0x7332,
708 +
            0x24e0, 0xae73, 0x8b44, 0x01d7, 0x5605, 0xdc96, 0x187e, 0x92ed, 0xc53f, 0x4fac, 0x6a9b,
709 +
            0xe008, 0xb7da, 0x3d49, 0xfdb4, 0x7727, 0x20f5, 0xaa66, 0x8f51, 0x05c2, 0x5210, 0xd883,
710 +
            0x1b8d, 0x911e, 0xc6cc, 0x4c5f, 0x6968, 0xe3fb, 0xb429, 0x3eba, 0xfe47, 0x74d4, 0x2306,
711 +
            0xa995, 0x8ca2, 0x0631, 0x51e3, 0xdb70, 0x1054, 0x9ac7, 0xcd15, 0x4786, 0x62b1, 0xe822,
712 +
            0xbff0, 0x3563, 0xf59e, 0x7f0d, 0x28df, 0xa24c, 0x877b, 0x0de8, 0x5a3a, 0xd0a9, 0x13a7,
713 +
            0x9934, 0xcee6, 0x4475, 0x6142, 0xebd1, 0xbc03, 0x3690, 0xf66d, 0x7cfe, 0x2b2c, 0xa1bf,
714 +
            0x8488, 0x0e1b, 0x59c9, 0xd35a, 0x17b2, 0x9d21, 0xcaf3, 0x4060, 0x6557, 0xefc4, 0xb816,
715 +
            0x3285, 0xf278, 0x78eb, 0x2f39, 0xa5aa, 0x809d, 0x0a0e, 0x5ddc, 0xd74f, 0x1441, 0x9ed2,
716 +
            0xc900, 0x4393, 0x66a4, 0xec37, 0xbbe5, 0x3176, 0xf18b, 0x7b18, 0x2cca, 0xa659, 0x836e,
717 +
            0x09fd, 0x5e2f, 0xd4bc,
718 +
        ],
719 +
        [
720 +
            0x0000, 0x3f30, 0x7e60, 0x4150, 0xfcc0, 0xc3f0, 0x82a0, 0xbd90, 0x31e7, 0x0ed7, 0x4f87,
721 +
            0x70b7, 0xcd27, 0xf217, 0xb347, 0x8c77, 0x63ce, 0x5cfe, 0x1dae, 0x229e, 0x9f0e, 0xa03e,
722 +
            0xe16e, 0xde5e, 0x5229, 0x6d19, 0x2c49, 0x1379, 0xaee9, 0x91d9, 0xd089, 0xefb9, 0xc79c,
723 +
            0xf8ac, 0xb9fc, 0x86cc, 0x3b5c, 0x046c, 0x453c, 0x7a0c, 0xf67b, 0xc94b, 0x881b, 0xb72b,
724 +
            0x0abb, 0x358b, 0x74db, 0x4beb, 0xa452, 0x9b62, 0xda32, 0xe502, 0x5892, 0x67a2, 0x26f2,
725 +
            0x19c2, 0x95b5, 0xaa85, 0xebd5, 0xd4e5, 0x6975, 0x5645, 0x1715, 0x2825, 0x475f, 0x786f,
726 +
            0x393f, 0x060f, 0xbb9f, 0x84af, 0xc5ff, 0xfacf, 0x76b8, 0x4988, 0x08d8, 0x37e8, 0x8a78,
727 +
            0xb548, 0xf418, 0xcb28, 0x2491, 0x1ba1, 0x5af1, 0x65c1, 0xd851, 0xe761, 0xa631, 0x9901,
728 +
            0x1576, 0x2a46, 0x6b16, 0x5426, 0xe9b6, 0xd686, 0x97d6, 0xa8e6, 0x80c3, 0xbff3, 0xfea3,
729 +
            0xc193, 0x7c03, 0x4333, 0x0263, 0x3d53, 0xb124, 0x8e14, 0xcf44, 0xf074, 0x4de4, 0x72d4,
730 +
            0x3384, 0x0cb4, 0xe30d, 0xdc3d, 0x9d6d, 0xa25d, 0x1fcd, 0x20fd, 0x61ad, 0x5e9d, 0xd2ea,
731 +
            0xedda, 0xac8a, 0x93ba, 0x2e2a, 0x111a, 0x504a, 0x6f7a, 0x8ebe, 0xb18e, 0xf0de, 0xcfee,
732 +
            0x727e, 0x4d4e, 0x0c1e, 0x332e, 0xbf59, 0x8069, 0xc139, 0xfe09, 0x4399, 0x7ca9, 0x3df9,
733 +
            0x02c9, 0xed70, 0xd240, 0x9310, 0xac20, 0x11b0, 0x2e80, 0x6fd0, 0x50e0, 0xdc97, 0xe3a7,
734 +
            0xa2f7, 0x9dc7, 0x2057, 0x1f67, 0x5e37, 0x6107, 0x4922, 0x7612, 0x3742, 0x0872, 0xb5e2,
735 +
            0x8ad2, 0xcb82, 0xf4b2, 0x78c5, 0x47f5, 0x06a5, 0x3995, 0x8405, 0xbb35, 0xfa65, 0xc555,
736 +
            0x2aec, 0x15dc, 0x548c, 0x6bbc, 0xd62c, 0xe91c, 0xa84c, 0x977c, 0x1b0b, 0x243b, 0x656b,
737 +
            0x5a5b, 0xe7cb, 0xd8fb, 0x99ab, 0xa69b, 0xc9e1, 0xf6d1, 0xb781, 0x88b1, 0x3521, 0x0a11,
738 +
            0x4b41, 0x7471, 0xf806, 0xc736, 0x8666, 0xb956, 0x04c6, 0x3bf6, 0x7aa6, 0x4596, 0xaa2f,
739 +
            0x951f, 0xd44f, 0xeb7f, 0x56ef, 0x69df, 0x288f, 0x17bf, 0x9bc8, 0xa4f8, 0xe5a8, 0xda98,
740 +
            0x6708, 0x5838, 0x1968, 0x2658, 0x0e7d, 0x314d, 0x701d, 0x4f2d, 0xf2bd, 0xcd8d, 0x8cdd,
741 +
            0xb3ed, 0x3f9a, 0x00aa, 0x41fa, 0x7eca, 0xc35a, 0xfc6a, 0xbd3a, 0x820a, 0x6db3, 0x5283,
742 +
            0x13d3, 0x2ce3, 0x9173, 0xae43, 0xef13, 0xd023, 0x5c54, 0x6364, 0x2234, 0x1d04, 0xa094,
743 +
            0x9fa4, 0xdef4, 0xe1c4,
744 +
        ],
745 +
        [
746 +
            0x0000, 0xd51b, 0x6251, 0xb74a, 0xc4a2, 0x11b9, 0xa6f3, 0x73e8, 0x4123, 0x9438, 0x2372,
747 +
            0xf669, 0x8581, 0x509a, 0xe7d0, 0x32cb, 0x8246, 0x575d, 0xe017, 0x350c, 0x46e4, 0x93ff,
748 +
            0x24b5, 0xf1ae, 0xc365, 0x167e, 0xa134, 0x742f, 0x07c7, 0xd2dc, 0x6596, 0xb08d, 0xcceb,
749 +
            0x19f0, 0xaeba, 0x7ba1, 0x0849, 0xdd52, 0x6a18, 0xbf03, 0x8dc8, 0x58d3, 0xef99, 0x3a82,
750 +
            0x496a, 0x9c71, 0x2b3b, 0xfe20, 0x4ead, 0x9bb6, 0x2cfc, 0xf9e7, 0x8a0f, 0x5f14, 0xe85e,
751 +
            0x3d45, 0x0f8e, 0xda95, 0x6ddf, 0xb8c4, 0xcb2c, 0x1e37, 0xa97d, 0x7c66, 0x51b1, 0x84aa,
752 +
            0x33e0, 0xe6fb, 0x9513, 0x4008, 0xf742, 0x2259, 0x1092, 0xc589, 0x72c3, 0xa7d8, 0xd430,
753 +
            0x012b, 0xb661, 0x637a, 0xd3f7, 0x06ec, 0xb1a6, 0x64bd, 0x1755, 0xc24e, 0x7504, 0xa01f,
754 +
            0x92d4, 0x47cf, 0xf085, 0x259e, 0x5676, 0x836d, 0x3427, 0xe13c, 0x9d5a, 0x4841, 0xff0b,
755 +
            0x2a10, 0x59f8, 0x8ce3, 0x3ba9, 0xeeb2, 0xdc79, 0x0962, 0xbe28, 0x6b33, 0x18db, 0xcdc0,
756 +
            0x7a8a, 0xaf91, 0x1f1c, 0xca07, 0x7d4d, 0xa856, 0xdbbe, 0x0ea5, 0xb9ef, 0x6cf4, 0x5e3f,
757 +
            0x8b24, 0x3c6e, 0xe975, 0x9a9d, 0x4f86, 0xf8cc, 0x2dd7, 0xa362, 0x7679, 0xc133, 0x1428,
758 +
            0x67c0, 0xb2db, 0x0591, 0xd08a, 0xe241, 0x375a, 0x8010, 0x550b, 0x26e3, 0xf3f8, 0x44b2,
759 +
            0x91a9, 0x2124, 0xf43f, 0x4375, 0x966e, 0xe586, 0x309d, 0x87d7, 0x52cc, 0x6007, 0xb51c,
760 +
            0x0256, 0xd74d, 0xa4a5, 0x71be, 0xc6f4, 0x13ef, 0x6f89, 0xba92, 0x0dd8, 0xd8c3, 0xab2b,
761 +
            0x7e30, 0xc97a, 0x1c61, 0x2eaa, 0xfbb1, 0x4cfb, 0x99e0, 0xea08, 0x3f13, 0x8859, 0x5d42,
762 +
            0xedcf, 0x38d4, 0x8f9e, 0x5a85, 0x296d, 0xfc76, 0x4b3c, 0x9e27, 0xacec, 0x79f7, 0xcebd,
763 +
            0x1ba6, 0x684e, 0xbd55, 0x0a1f, 0xdf04, 0xf2d3, 0x27c8, 0x9082, 0x4599, 0x3671, 0xe36a,
764 +
            0x5420, 0x813b, 0xb3f0, 0x66eb, 0xd1a1, 0x04ba, 0x7752, 0xa249, 0x1503, 0xc018, 0x7095,
765 +
            0xa58e, 0x12c4, 0xc7df, 0xb437, 0x612c, 0xd666, 0x037d, 0x31b6, 0xe4ad, 0x53e7, 0x86fc,
766 +
            0xf514, 0x200f, 0x9745, 0x425e, 0x3e38, 0xeb23, 0x5c69, 0x8972, 0xfa9a, 0x2f81, 0x98cb,
767 +
            0x4dd0, 0x7f1b, 0xaa00, 0x1d4a, 0xc851, 0xbbb9, 0x6ea2, 0xd9e8, 0x0cf3, 0xbc7e, 0x6965,
768 +
            0xde2f, 0x0b34, 0x78dc, 0xadc7, 0x1a8d, 0xcf96, 0xfd5d, 0x2846, 0x9f0c, 0x4a17, 0x39ff,
769 +
            0xece4, 0x5bae, 0x8eb5,
770 +
        ],
771 +
        [
772 +
            0x0000, 0x8ea3, 0xd521, 0x5b82, 0x6225, 0xec86, 0xb704, 0x39a7, 0xc44a, 0x4ae9, 0x116b,
773 +
            0x9fc8, 0xa66f, 0x28cc, 0x734e, 0xfded, 0x40f3, 0xce50, 0x95d2, 0x1b71, 0x22d6, 0xac75,
774 +
            0xf7f7, 0x7954, 0x84b9, 0x0a1a, 0x5198, 0xdf3b, 0xe69c, 0x683f, 0x33bd, 0xbd1e, 0x81e6,
775 +
            0x0f45, 0x54c7, 0xda64, 0xe3c3, 0x6d60, 0x36e2, 0xb841, 0x45ac, 0xcb0f, 0x908d, 0x1e2e,
776 +
            0x2789, 0xa92a, 0xf2a8, 0x7c0b, 0xc115, 0x4fb6, 0x1434, 0x9a97, 0xa330, 0x2d93, 0x7611,
777 +
            0xf8b2, 0x055f, 0x8bfc, 0xd07e, 0x5edd, 0x677a, 0xe9d9, 0xb25b, 0x3cf8, 0xcbab, 0x4508,
778 +
            0x1e8a, 0x9029, 0xa98e, 0x272d, 0x7caf, 0xf20c, 0x0fe1, 0x8142, 0xdac0, 0x5463, 0x6dc4,
779 +
            0xe367, 0xb8e5, 0x3646, 0x8b58, 0x05fb, 0x5e79, 0xd0da, 0xe97d, 0x67de, 0x3c5c, 0xb2ff,
780 +
            0x4f12, 0xc1b1, 0x9a33, 0x1490, 0x2d37, 0xa394, 0xf816, 0x76b5, 0x4a4d, 0xc4ee, 0x9f6c,
781 +
            0x11cf, 0x2868, 0xa6cb, 0xfd49, 0x73ea, 0x8e07, 0x00a4, 0x5b26, 0xd585, 0xec22, 0x6281,
782 +
            0x3903, 0xb7a0, 0x0abe, 0x841d, 0xdf9f, 0x513c, 0x689b, 0xe638, 0xbdba, 0x3319, 0xcef4,
783 +
            0x4057, 0x1bd5, 0x9576, 0xacd1, 0x2272, 0x79f0, 0xf753, 0x5f31, 0xd192, 0x8a10, 0x04b3,
784 +
            0x3d14, 0xb3b7, 0xe835, 0x6696, 0x9b7b, 0x15d8, 0x4e5a, 0xc0f9, 0xf95e, 0x77fd, 0x2c7f,
785 +
            0xa2dc, 0x1fc2, 0x9161, 0xcae3, 0x4440, 0x7de7, 0xf344, 0xa8c6, 0x2665, 0xdb88, 0x552b,
786 +
            0x0ea9, 0x800a, 0xb9ad, 0x370e, 0x6c8c, 0xe22f, 0xded7, 0x5074, 0x0bf6, 0x8555, 0xbcf2,
787 +
            0x3251, 0x69d3, 0xe770, 0x1a9d, 0x943e, 0xcfbc, 0x411f, 0x78b8, 0xf61b, 0xad99, 0x233a,
788 +
            0x9e24, 0x1087, 0x4b05, 0xc5a6, 0xfc01, 0x72a2, 0x2920, 0xa783, 0x5a6e, 0xd4cd, 0x8f4f,
789 +
            0x01ec, 0x384b, 0xb6e8, 0xed6a, 0x63c9, 0x949a, 0x1a39, 0x41bb, 0xcf18, 0xf6bf, 0x781c,
790 +
            0x239e, 0xad3d, 0x50d0, 0xde73, 0x85f1, 0x0b52, 0x32f5, 0xbc56, 0xe7d4, 0x6977, 0xd469,
791 +
            0x5aca, 0x0148, 0x8feb, 0xb64c, 0x38ef, 0x636d, 0xedce, 0x1023, 0x9e80, 0xc502, 0x4ba1,
792 +
            0x7206, 0xfca5, 0xa727, 0x2984, 0x157c, 0x9bdf, 0xc05d, 0x4efe, 0x7759, 0xf9fa, 0xa278,
793 +
            0x2cdb, 0xd136, 0x5f95, 0x0417, 0x8ab4, 0xb313, 0x3db0, 0x6632, 0xe891, 0x558f, 0xdb2c,
794 +
            0x80ae, 0x0e0d, 0x37aa, 0xb909, 0xe28b, 0x6c28, 0x91c5, 0x1f66, 0x44e4, 0xca47, 0xf3e0,
795 +
            0x7d43, 0x26c1, 0xa862,
796 +
        ],
797 +
        [
798 +
            0x0000, 0xbe62, 0xb4a3, 0x0ac1, 0xa121, 0x1f43, 0x1582, 0xabe0, 0x8a25, 0x3447, 0x3e86,
799 +
            0x80e4, 0x2b04, 0x9566, 0x9fa7, 0x21c5, 0xdc2d, 0x624f, 0x688e, 0xd6ec, 0x7d0c, 0xc36e,
800 +
            0xc9af, 0x77cd, 0x5608, 0xe86a, 0xe2ab, 0x5cc9, 0xf729, 0x494b, 0x438a, 0xfde8, 0x703d,
801 +
            0xce5f, 0xc49e, 0x7afc, 0xd11c, 0x6f7e, 0x65bf, 0xdbdd, 0xfa18, 0x447a, 0x4ebb, 0xf0d9,
802 +
            0x5b39, 0xe55b, 0xef9a, 0x51f8, 0xac10, 0x1272, 0x18b3, 0xa6d1, 0x0d31, 0xb353, 0xb992,
803 +
            0x07f0, 0x2635, 0x9857, 0x9296, 0x2cf4, 0x8714, 0x3976, 0x33b7, 0x8dd5, 0xe07a, 0x5e18,
804 +
            0x54d9, 0xeabb, 0x415b, 0xff39, 0xf5f8, 0x4b9a, 0x6a5f, 0xd43d, 0xdefc, 0x609e, 0xcb7e,
805 +
            0x751c, 0x7fdd, 0xc1bf, 0x3c57, 0x8235, 0x88f4, 0x3696, 0x9d76, 0x2314, 0x29d5, 0x97b7,
806 +
            0xb672, 0x0810, 0x02d1, 0xbcb3, 0x1753, 0xa931, 0xa3f0, 0x1d92, 0x9047, 0x2e25, 0x24e4,
807 +
            0x9a86, 0x3166, 0x8f04, 0x85c5, 0x3ba7, 0x1a62, 0xa400, 0xaec1, 0x10a3, 0xbb43, 0x0521,
808 +
            0x0fe0, 0xb182, 0x4c6a, 0xf208, 0xf8c9, 0x46ab, 0xed4b, 0x5329, 0x59e8, 0xe78a, 0xc64f,
809 +
            0x782d, 0x72ec, 0xcc8e, 0x676e, 0xd90c, 0xd3cd, 0x6daf, 0x0893, 0xb6f1, 0xbc30, 0x0252,
810 +
            0xa9b2, 0x17d0, 0x1d11, 0xa373, 0x82b6, 0x3cd4, 0x3615, 0x8877, 0x2397, 0x9df5, 0x9734,
811 +
            0x2956, 0xd4be, 0x6adc, 0x601d, 0xde7f, 0x759f, 0xcbfd, 0xc13c, 0x7f5e, 0x5e9b, 0xe0f9,
812 +
            0xea38, 0x545a, 0xffba, 0x41d8, 0x4b19, 0xf57b, 0x78ae, 0xc6cc, 0xcc0d, 0x726f, 0xd98f,
813 +
            0x67ed, 0x6d2c, 0xd34e, 0xf28b, 0x4ce9, 0x4628, 0xf84a, 0x53aa, 0xedc8, 0xe709, 0x596b,
814 +
            0xa483, 0x1ae1, 0x1020, 0xae42, 0x05a2, 0xbbc0, 0xb101, 0x0f63, 0x2ea6, 0x90c4, 0x9a05,
815 +
            0x2467, 0x8f87, 0x31e5, 0x3b24, 0x8546, 0xe8e9, 0x568b, 0x5c4a, 0xe228, 0x49c8, 0xf7aa,
816 +
            0xfd6b, 0x4309, 0x62cc, 0xdcae, 0xd66f, 0x680d, 0xc3ed, 0x7d8f, 0x774e, 0xc92c, 0x34c4,
817 +
            0x8aa6, 0x8067, 0x3e05, 0x95e5, 0x2b87, 0x2146, 0x9f24, 0xbee1, 0x0083, 0x0a42, 0xb420,
818 +
            0x1fc0, 0xa1a2, 0xab63, 0x1501, 0x98d4, 0x26b6, 0x2c77, 0x9215, 0x39f5, 0x8797, 0x8d56,
819 +
            0x3334, 0x12f1, 0xac93, 0xa652, 0x1830, 0xb3d0, 0x0db2, 0x0773, 0xb911, 0x44f9, 0xfa9b,
820 +
            0xf05a, 0x4e38, 0xe5d8, 0x5bba, 0x517b, 0xef19, 0xcedc, 0x70be, 0x7a7f, 0xc41d, 0x6ffd,
821 +
            0xd19f, 0xdb5e, 0x653c,
822 +
        ],
823 +
        [
824 +
            0x0000, 0x1126, 0x224c, 0x336a, 0x4498, 0x55be, 0x66d4, 0x77f2, 0x8930, 0x9816, 0xab7c,
825 +
            0xba5a, 0xcda8, 0xdc8e, 0xefe4, 0xfec2, 0xda07, 0xcb21, 0xf84b, 0xe96d, 0x9e9f, 0x8fb9,
826 +
            0xbcd3, 0xadf5, 0x5337, 0x4211, 0x717b, 0x605d, 0x17af, 0x0689, 0x35e3, 0x24c5, 0x7c69,
827 +
            0x6d4f, 0x5e25, 0x4f03, 0x38f1, 0x29d7, 0x1abd, 0x0b9b, 0xf559, 0xe47f, 0xd715, 0xc633,
828 +
            0xb1c1, 0xa0e7, 0x938d, 0x82ab, 0xa66e, 0xb748, 0x8422, 0x9504, 0xe2f6, 0xf3d0, 0xc0ba,
829 +
            0xd19c, 0x2f5e, 0x3e78, 0x0d12, 0x1c34, 0x6bc6, 0x7ae0, 0x498a, 0x58ac, 0xf8d2, 0xe9f4,
830 +
            0xda9e, 0xcbb8, 0xbc4a, 0xad6c, 0x9e06, 0x8f20, 0x71e2, 0x60c4, 0x53ae, 0x4288, 0x357a,
831 +
            0x245c, 0x1736, 0x0610, 0x22d5, 0x33f3, 0x0099, 0x11bf, 0x664d, 0x776b, 0x4401, 0x5527,
832 +
            0xabe5, 0xbac3, 0x89a9, 0x988f, 0xef7d, 0xfe5b, 0xcd31, 0xdc17, 0x84bb, 0x959d, 0xa6f7,
833 +
            0xb7d1, 0xc023, 0xd105, 0xe26f, 0xf349, 0x0d8b, 0x1cad, 0x2fc7, 0x3ee1, 0x4913, 0x5835,
834 +
            0x6b5f, 0x7a79, 0x5ebc, 0x4f9a, 0x7cf0, 0x6dd6, 0x1a24, 0x0b02, 0x3868, 0x294e, 0xd78c,
835 +
            0xc6aa, 0xf5c0, 0xe4e6, 0x9314, 0x8232, 0xb158, 0xa07e, 0x39c3, 0x28e5, 0x1b8f, 0x0aa9,
836 +
            0x7d5b, 0x6c7d, 0x5f17, 0x4e31, 0xb0f3, 0xa1d5, 0x92bf, 0x8399, 0xf46b, 0xe54d, 0xd627,
837 +
            0xc701, 0xe3c4, 0xf2e2, 0xc188, 0xd0ae, 0xa75c, 0xb67a, 0x8510, 0x9436, 0x6af4, 0x7bd2,
838 +
            0x48b8, 0x599e, 0x2e6c, 0x3f4a, 0x0c20, 0x1d06, 0x45aa, 0x548c, 0x67e6, 0x76c0, 0x0132,
839 +
            0x1014, 0x237e, 0x3258, 0xcc9a, 0xddbc, 0xeed6, 0xfff0, 0x8802, 0x9924, 0xaa4e, 0xbb68,
840 +
            0x9fad, 0x8e8b, 0xbde1, 0xacc7, 0xdb35, 0xca13, 0xf979, 0xe85f, 0x169d, 0x07bb, 0x34d1,
841 +
            0x25f7, 0x5205, 0x4323, 0x7049, 0x616f, 0xc111, 0xd037, 0xe35d, 0xf27b, 0x8589, 0x94af,
842 +
            0xa7c5, 0xb6e3, 0x4821, 0x5907, 0x6a6d, 0x7b4b, 0x0cb9, 0x1d9f, 0x2ef5, 0x3fd3, 0x1b16,
843 +
            0x0a30, 0x395a, 0x287c, 0x5f8e, 0x4ea8, 0x7dc2, 0x6ce4, 0x9226, 0x8300, 0xb06a, 0xa14c,
844 +
            0xd6be, 0xc798, 0xf4f2, 0xe5d4, 0xbd78, 0xac5e, 0x9f34, 0x8e12, 0xf9e0, 0xe8c6, 0xdbac,
845 +
            0xca8a, 0x3448, 0x256e, 0x1604, 0x0722, 0x70d0, 0x61f6, 0x529c, 0x43ba, 0x677f, 0x7659,
846 +
            0x4533, 0x5415, 0x23e7, 0x32c1, 0x01ab, 0x108d, 0xee4f, 0xff69, 0xcc03, 0xdd25, 0xaad7,
847 +
            0xbbf1, 0x889b, 0x99bd,
848 +
        ],
849 +
    ];
850 +
851 +
    pub static CRC16_CMS_TABLE: [[u16; 256]; 16] = [
852 +
        [
853 +
            0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, 0x8033, 0x0036, 0x003c,
854 +
            0x8039, 0x0028, 0x802d, 0x8027, 0x0022, 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d,
855 +
            0x8077, 0x0072, 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, 0x80c3,
856 +
            0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, 0x00f0, 0x80f5, 0x80ff, 0x00fa,
857 +
            0x80eb, 0x00ee, 0x00e4, 0x80e1, 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4,
858 +
            0x80b1, 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, 0x8183, 0x0186,
859 +
            0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab,
860 +
            0x01ae, 0x01a4, 0x81a1, 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
861 +
            0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, 0x0140, 0x8145, 0x814f,
862 +
            0x014a, 0x815b, 0x015e, 0x0154, 0x8151, 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d,
863 +
            0x8167, 0x0162, 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, 0x0110,
864 +
            0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, 0x8303, 0x0306, 0x030c, 0x8309,
865 +
            0x0318, 0x831d, 0x8317, 0x0312, 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324,
866 +
            0x8321, 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, 0x8353, 0x0356,
867 +
            0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db,
868 +
            0x03de, 0x03d4, 0x83d1, 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
869 +
            0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, 0x0390, 0x8395, 0x839f,
870 +
            0x039a, 0x838b, 0x038e, 0x0384, 0x8381, 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e,
871 +
            0x0294, 0x8291, 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, 0x82e3,
872 +
            0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, 0x02d0, 0x82d5, 0x82df, 0x02da,
873 +
            0x82cb, 0x02ce, 0x02c4, 0x82c1, 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257,
874 +
            0x0252, 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, 0x0220, 0x8225,
875 +
            0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, 0x8213, 0x0216, 0x021c, 0x8219, 0x0208,
876 +
            0x820d, 0x8207, 0x0202,
877 +
        ],
878 +
        [
879 +
            0x0000, 0x8603, 0x8c03, 0x0a00, 0x9803, 0x1e00, 0x1400, 0x9203, 0xb003, 0x3600, 0x3c00,
880 +
            0xba03, 0x2800, 0xae03, 0xa403, 0x2200, 0xe003, 0x6600, 0x6c00, 0xea03, 0x7800, 0xfe03,
881 +
            0xf403, 0x7200, 0x5000, 0xd603, 0xdc03, 0x5a00, 0xc803, 0x4e00, 0x4400, 0xc203, 0x4003,
882 +
            0xc600, 0xcc00, 0x4a03, 0xd800, 0x5e03, 0x5403, 0xd200, 0xf000, 0x7603, 0x7c03, 0xfa00,
883 +
            0x6803, 0xee00, 0xe400, 0x6203, 0xa000, 0x2603, 0x2c03, 0xaa00, 0x3803, 0xbe00, 0xb400,
884 +
            0x3203, 0x1003, 0x9600, 0x9c00, 0x1a03, 0x8800, 0x0e03, 0x0403, 0x8200, 0x8006, 0x0605,
885 +
            0x0c05, 0x8a06, 0x1805, 0x9e06, 0x9406, 0x1205, 0x3005, 0xb606, 0xbc06, 0x3a05, 0xa806,
886 +
            0x2e05, 0x2405, 0xa206, 0x6005, 0xe606, 0xec06, 0x6a05, 0xf806, 0x7e05, 0x7405, 0xf206,
887 +
            0xd006, 0x5605, 0x5c05, 0xda06, 0x4805, 0xce06, 0xc406, 0x4205, 0xc005, 0x4606, 0x4c06,
888 +
            0xca05, 0x5806, 0xde05, 0xd405, 0x5206, 0x7006, 0xf605, 0xfc05, 0x7a06, 0xe805, 0x6e06,
889 +
            0x6406, 0xe205, 0x2006, 0xa605, 0xac05, 0x2a06, 0xb805, 0x3e06, 0x3406, 0xb205, 0x9005,
890 +
            0x1606, 0x1c06, 0x9a05, 0x0806, 0x8e05, 0x8405, 0x0206, 0x8009, 0x060a, 0x0c0a, 0x8a09,
891 +
            0x180a, 0x9e09, 0x9409, 0x120a, 0x300a, 0xb609, 0xbc09, 0x3a0a, 0xa809, 0x2e0a, 0x240a,
892 +
            0xa209, 0x600a, 0xe609, 0xec09, 0x6a0a, 0xf809, 0x7e0a, 0x740a, 0xf209, 0xd009, 0x560a,
893 +
            0x5c0a, 0xda09, 0x480a, 0xce09, 0xc409, 0x420a, 0xc00a, 0x4609, 0x4c09, 0xca0a, 0x5809,
894 +
            0xde0a, 0xd40a, 0x5209, 0x7009, 0xf60a, 0xfc0a, 0x7a09, 0xe80a, 0x6e09, 0x6409, 0xe20a,
895 +
            0x2009, 0xa60a, 0xac0a, 0x2a09, 0xb80a, 0x3e09, 0x3409, 0xb20a, 0x900a, 0x1609, 0x1c09,
896 +
            0x9a0a, 0x0809, 0x8e0a, 0x840a, 0x0209, 0x000f, 0x860c, 0x8c0c, 0x0a0f, 0x980c, 0x1e0f,
897 +
            0x140f, 0x920c, 0xb00c, 0x360f, 0x3c0f, 0xba0c, 0x280f, 0xae0c, 0xa40c, 0x220f, 0xe00c,
898 +
            0x660f, 0x6c0f, 0xea0c, 0x780f, 0xfe0c, 0xf40c, 0x720f, 0x500f, 0xd60c, 0xdc0c, 0x5a0f,
899 +
            0xc80c, 0x4e0f, 0x440f, 0xc20c, 0x400c, 0xc60f, 0xcc0f, 0x4a0c, 0xd80f, 0x5e0c, 0x540c,
900 +
            0xd20f, 0xf00f, 0x760c, 0x7c0c, 0xfa0f, 0x680c, 0xee0f, 0xe40f, 0x620c, 0xa00f, 0x260c,
901 +
            0x2c0c, 0xaa0f, 0x380c, 0xbe0f, 0xb40f, 0x320c, 0x100c, 0x960f, 0x9c0f, 0x1a0c, 0x880f,
902 +
            0x0e0c, 0x040c, 0x820f,
903 +
        ],
904 +
        [
905 +
            0x0000, 0x8017, 0x802b, 0x003c, 0x8053, 0x0044, 0x0078, 0x806f, 0x80a3, 0x00b4, 0x0088,
906 +
            0x809f, 0x00f0, 0x80e7, 0x80db, 0x00cc, 0x8143, 0x0154, 0x0168, 0x817f, 0x0110, 0x8107,
907 +
            0x813b, 0x012c, 0x01e0, 0x81f7, 0x81cb, 0x01dc, 0x81b3, 0x01a4, 0x0198, 0x818f, 0x8283,
908 +
            0x0294, 0x02a8, 0x82bf, 0x02d0, 0x82c7, 0x82fb, 0x02ec, 0x0220, 0x8237, 0x820b, 0x021c,
909 +
            0x8273, 0x0264, 0x0258, 0x824f, 0x03c0, 0x83d7, 0x83eb, 0x03fc, 0x8393, 0x0384, 0x03b8,
910 +
            0x83af, 0x8363, 0x0374, 0x0348, 0x835f, 0x0330, 0x8327, 0x831b, 0x030c, 0x8503, 0x0514,
911 +
            0x0528, 0x853f, 0x0550, 0x8547, 0x857b, 0x056c, 0x05a0, 0x85b7, 0x858b, 0x059c, 0x85f3,
912 +
            0x05e4, 0x05d8, 0x85cf, 0x0440, 0x8457, 0x846b, 0x047c, 0x8413, 0x0404, 0x0438, 0x842f,
913 +
            0x84e3, 0x04f4, 0x04c8, 0x84df, 0x04b0, 0x84a7, 0x849b, 0x048c, 0x0780, 0x8797, 0x87ab,
914 +
            0x07bc, 0x87d3, 0x07c4, 0x07f8, 0x87ef, 0x8723, 0x0734, 0x0708, 0x871f, 0x0770, 0x8767,
915 +
            0x875b, 0x074c, 0x86c3, 0x06d4, 0x06e8, 0x86ff, 0x0690, 0x8687, 0x86bb, 0x06ac, 0x0660,
916 +
            0x8677, 0x864b, 0x065c, 0x8633, 0x0624, 0x0618, 0x860f, 0x8a03, 0x0a14, 0x0a28, 0x8a3f,
917 +
            0x0a50, 0x8a47, 0x8a7b, 0x0a6c, 0x0aa0, 0x8ab7, 0x8a8b, 0x0a9c, 0x8af3, 0x0ae4, 0x0ad8,
918 +
            0x8acf, 0x0b40, 0x8b57, 0x8b6b, 0x0b7c, 0x8b13, 0x0b04, 0x0b38, 0x8b2f, 0x8be3, 0x0bf4,
919 +
            0x0bc8, 0x8bdf, 0x0bb0, 0x8ba7, 0x8b9b, 0x0b8c, 0x0880, 0x8897, 0x88ab, 0x08bc, 0x88d3,
920 +
            0x08c4, 0x08f8, 0x88ef, 0x8823, 0x0834, 0x0808, 0x881f, 0x0870, 0x8867, 0x885b, 0x084c,
921 +
            0x89c3, 0x09d4, 0x09e8, 0x89ff, 0x0990, 0x8987, 0x89bb, 0x09ac, 0x0960, 0x8977, 0x894b,
922 +
            0x095c, 0x8933, 0x0924, 0x0918, 0x890f, 0x0f00, 0x8f17, 0x8f2b, 0x0f3c, 0x8f53, 0x0f44,
923 +
            0x0f78, 0x8f6f, 0x8fa3, 0x0fb4, 0x0f88, 0x8f9f, 0x0ff0, 0x8fe7, 0x8fdb, 0x0fcc, 0x8e43,
924 +
            0x0e54, 0x0e68, 0x8e7f, 0x0e10, 0x8e07, 0x8e3b, 0x0e2c, 0x0ee0, 0x8ef7, 0x8ecb, 0x0edc,
925 +
            0x8eb3, 0x0ea4, 0x0e98, 0x8e8f, 0x8d83, 0x0d94, 0x0da8, 0x8dbf, 0x0dd0, 0x8dc7, 0x8dfb,
926 +
            0x0dec, 0x0d20, 0x8d37, 0x8d0b, 0x0d1c, 0x8d73, 0x0d64, 0x0d58, 0x8d4f, 0x0cc0, 0x8cd7,
927 +
            0x8ceb, 0x0cfc, 0x8c93, 0x0c84, 0x0cb8, 0x8caf, 0x8c63, 0x0c74, 0x0c48, 0x8c5f, 0x0c30,
928 +
            0x8c27, 0x8c1b, 0x0c0c,
929 +
        ],
930 +
        [
931 +
            0x0000, 0x9403, 0xa803, 0x3c00, 0xd003, 0x4400, 0x7800, 0xec03, 0x2003, 0xb400, 0x8800,
932 +
            0x1c03, 0xf000, 0x6403, 0x5803, 0xcc00, 0x4006, 0xd405, 0xe805, 0x7c06, 0x9005, 0x0406,
933 +
            0x3806, 0xac05, 0x6005, 0xf406, 0xc806, 0x5c05, 0xb006, 0x2405, 0x1805, 0x8c06, 0x800c,
934 +
            0x140f, 0x280f, 0xbc0c, 0x500f, 0xc40c, 0xf80c, 0x6c0f, 0xa00f, 0x340c, 0x080c, 0x9c0f,
935 +
            0x700c, 0xe40f, 0xd80f, 0x4c0c, 0xc00a, 0x5409, 0x6809, 0xfc0a, 0x1009, 0x840a, 0xb80a,
936 +
            0x2c09, 0xe009, 0x740a, 0x480a, 0xdc09, 0x300a, 0xa409, 0x9809, 0x0c0a, 0x801d, 0x141e,
937 +
            0x281e, 0xbc1d, 0x501e, 0xc41d, 0xf81d, 0x6c1e, 0xa01e, 0x341d, 0x081d, 0x9c1e, 0x701d,
938 +
            0xe41e, 0xd81e, 0x4c1d, 0xc01b, 0x5418, 0x6818, 0xfc1b, 0x1018, 0x841b, 0xb81b, 0x2c18,
939 +
            0xe018, 0x741b, 0x481b, 0xdc18, 0x301b, 0xa418, 0x9818, 0x0c1b, 0x0011, 0x9412, 0xa812,
940 +
            0x3c11, 0xd012, 0x4411, 0x7811, 0xec12, 0x2012, 0xb411, 0x8811, 0x1c12, 0xf011, 0x6412,
941 +
            0x5812, 0xcc11, 0x4017, 0xd414, 0xe814, 0x7c17, 0x9014, 0x0417, 0x3817, 0xac14, 0x6014,
942 +
            0xf417, 0xc817, 0x5c14, 0xb017, 0x2414, 0x1814, 0x8c17, 0x803f, 0x143c, 0x283c, 0xbc3f,
943 +
            0x503c, 0xc43f, 0xf83f, 0x6c3c, 0xa03c, 0x343f, 0x083f, 0x9c3c, 0x703f, 0xe43c, 0xd83c,
944 +
            0x4c3f, 0xc039, 0x543a, 0x683a, 0xfc39, 0x103a, 0x8439, 0xb839, 0x2c3a, 0xe03a, 0x7439,
945 +
            0x4839, 0xdc3a, 0x3039, 0xa43a, 0x983a, 0x0c39, 0x0033, 0x9430, 0xa830, 0x3c33, 0xd030,
946 +
            0x4433, 0x7833, 0xec30, 0x2030, 0xb433, 0x8833, 0x1c30, 0xf033, 0x6430, 0x5830, 0xcc33,
947 +
            0x4035, 0xd436, 0xe836, 0x7c35, 0x9036, 0x0435, 0x3835, 0xac36, 0x6036, 0xf435, 0xc835,
948 +
            0x5c36, 0xb035, 0x2436, 0x1836, 0x8c35, 0x0022, 0x9421, 0xa821, 0x3c22, 0xd021, 0x4422,
949 +
            0x7822, 0xec21, 0x2021, 0xb422, 0x8822, 0x1c21, 0xf022, 0x6421, 0x5821, 0xcc22, 0x4024,
950 +
            0xd427, 0xe827, 0x7c24, 0x9027, 0x0424, 0x3824, 0xac27, 0x6027, 0xf424, 0xc824, 0x5c27,
951 +
            0xb024, 0x2427, 0x1827, 0x8c24, 0x802e, 0x142d, 0x282d, 0xbc2e, 0x502d, 0xc42e, 0xf82e,
952 +
            0x6c2d, 0xa02d, 0x342e, 0x082e, 0x9c2d, 0x702e, 0xe42d, 0xd82d, 0x4c2e, 0xc028, 0x542b,
953 +
            0x682b, 0xfc28, 0x102b, 0x8428, 0xb828, 0x2c2b, 0xe02b, 0x7428, 0x4828, 0xdc2b, 0x3028,
954 +
            0xa42b, 0x982b, 0x0c28,
955 +
        ],
956 +
        [
957 +
            0x0000, 0x807b, 0x80f3, 0x0088, 0x81e3, 0x0198, 0x0110, 0x816b, 0x83c3, 0x03b8, 0x0330,
958 +
            0x834b, 0x0220, 0x825b, 0x82d3, 0x02a8, 0x8783, 0x07f8, 0x0770, 0x870b, 0x0660, 0x861b,
959 +
            0x8693, 0x06e8, 0x0440, 0x843b, 0x84b3, 0x04c8, 0x85a3, 0x05d8, 0x0550, 0x852b, 0x8f03,
960 +
            0x0f78, 0x0ff0, 0x8f8b, 0x0ee0, 0x8e9b, 0x8e13, 0x0e68, 0x0cc0, 0x8cbb, 0x8c33, 0x0c48,
961 +
            0x8d23, 0x0d58, 0x0dd0, 0x8dab, 0x0880, 0x88fb, 0x8873, 0x0808, 0x8963, 0x0918, 0x0990,
962 +
            0x89eb, 0x8b43, 0x0b38, 0x0bb0, 0x8bcb, 0x0aa0, 0x8adb, 0x8a53, 0x0a28, 0x9e03, 0x1e78,
963 +
            0x1ef0, 0x9e8b, 0x1fe0, 0x9f9b, 0x9f13, 0x1f68, 0x1dc0, 0x9dbb, 0x9d33, 0x1d48, 0x9c23,
964 +
            0x1c58, 0x1cd0, 0x9cab, 0x1980, 0x99fb, 0x9973, 0x1908, 0x9863, 0x1818, 0x1890, 0x98eb,
965 +
            0x9a43, 0x1a38, 0x1ab0, 0x9acb, 0x1ba0, 0x9bdb, 0x9b53, 0x1b28, 0x1100, 0x917b, 0x91f3,
966 +
            0x1188, 0x90e3, 0x1098, 0x1010, 0x906b, 0x92c3, 0x12b8, 0x1230, 0x924b, 0x1320, 0x935b,
967 +
            0x93d3, 0x13a8, 0x9683, 0x16f8, 0x1670, 0x960b, 0x1760, 0x971b, 0x9793, 0x17e8, 0x1540,
968 +
            0x953b, 0x95b3, 0x15c8, 0x94a3, 0x14d8, 0x1450, 0x942b, 0xbc03, 0x3c78, 0x3cf0, 0xbc8b,
969 +
            0x3de0, 0xbd9b, 0xbd13, 0x3d68, 0x3fc0, 0xbfbb, 0xbf33, 0x3f48, 0xbe23, 0x3e58, 0x3ed0,
970 +
            0xbeab, 0x3b80, 0xbbfb, 0xbb73, 0x3b08, 0xba63, 0x3a18, 0x3a90, 0xbaeb, 0xb843, 0x3838,
971 +
            0x38b0, 0xb8cb, 0x39a0, 0xb9db, 0xb953, 0x3928, 0x3300, 0xb37b, 0xb3f3, 0x3388, 0xb2e3,
972 +
            0x3298, 0x3210, 0xb26b, 0xb0c3, 0x30b8, 0x3030, 0xb04b, 0x3120, 0xb15b, 0xb1d3, 0x31a8,
973 +
            0xb483, 0x34f8, 0x3470, 0xb40b, 0x3560, 0xb51b, 0xb593, 0x35e8, 0x3740, 0xb73b, 0xb7b3,
974 +
            0x37c8, 0xb6a3, 0x36d8, 0x3650, 0xb62b, 0x2200, 0xa27b, 0xa2f3, 0x2288, 0xa3e3, 0x2398,
975 +
            0x2310, 0xa36b, 0xa1c3, 0x21b8, 0x2130, 0xa14b, 0x2020, 0xa05b, 0xa0d3, 0x20a8, 0xa583,
976 +
            0x25f8, 0x2570, 0xa50b, 0x2460, 0xa41b, 0xa493, 0x24e8, 0x2640, 0xa63b, 0xa6b3, 0x26c8,
977 +
            0xa7a3, 0x27d8, 0x2750, 0xa72b, 0xad03, 0x2d78, 0x2df0, 0xad8b, 0x2ce0, 0xac9b, 0xac13,
978 +
            0x2c68, 0x2ec0, 0xaebb, 0xae33, 0x2e48, 0xaf23, 0x2f58, 0x2fd0, 0xafab, 0x2a80, 0xaafb,
979 +
            0xaa73, 0x2a08, 0xab63, 0x2b18, 0x2b90, 0xabeb, 0xa943, 0x2938, 0x29b0, 0xa9cb, 0x28a0,
980 +
            0xa8db, 0xa853, 0x2828,
981 +
        ],
982 +
        [
983 +
            0x0000, 0xf803, 0x7003, 0x8800, 0xe006, 0x1805, 0x9005, 0x6806, 0x4009, 0xb80a, 0x300a,
984 +
            0xc809, 0xa00f, 0x580c, 0xd00c, 0x280f, 0x8012, 0x7811, 0xf011, 0x0812, 0x6014, 0x9817,
985 +
            0x1017, 0xe814, 0xc01b, 0x3818, 0xb018, 0x481b, 0x201d, 0xd81e, 0x501e, 0xa81d, 0x8021,
986 +
            0x7822, 0xf022, 0x0821, 0x6027, 0x9824, 0x1024, 0xe827, 0xc028, 0x382b, 0xb02b, 0x4828,
987 +
            0x202e, 0xd82d, 0x502d, 0xa82e, 0x0033, 0xf830, 0x7030, 0x8833, 0xe035, 0x1836, 0x9036,
988 +
            0x6835, 0x403a, 0xb839, 0x3039, 0xc83a, 0xa03c, 0x583f, 0xd03f, 0x283c, 0x8047, 0x7844,
989 +
            0xf044, 0x0847, 0x6041, 0x9842, 0x1042, 0xe841, 0xc04e, 0x384d, 0xb04d, 0x484e, 0x2048,
990 +
            0xd84b, 0x504b, 0xa848, 0x0055, 0xf856, 0x7056, 0x8855, 0xe053, 0x1850, 0x9050, 0x6853,
991 +
            0x405c, 0xb85f, 0x305f, 0xc85c, 0xa05a, 0x5859, 0xd059, 0x285a, 0x0066, 0xf865, 0x7065,
992 +
            0x8866, 0xe060, 0x1863, 0x9063, 0x6860, 0x406f, 0xb86c, 0x306c, 0xc86f, 0xa069, 0x586a,
993 +
            0xd06a, 0x2869, 0x8074, 0x7877, 0xf077, 0x0874, 0x6072, 0x9871, 0x1071, 0xe872, 0xc07d,
994 +
            0x387e, 0xb07e, 0x487d, 0x207b, 0xd878, 0x5078, 0xa87b, 0x808b, 0x7888, 0xf088, 0x088b,
995 +
            0x608d, 0x988e, 0x108e, 0xe88d, 0xc082, 0x3881, 0xb081, 0x4882, 0x2084, 0xd887, 0x5087,
996 +
            0xa884, 0x0099, 0xf89a, 0x709a, 0x8899, 0xe09f, 0x189c, 0x909c, 0x689f, 0x4090, 0xb893,
997 +
            0x3093, 0xc890, 0xa096, 0x5895, 0xd095, 0x2896, 0x00aa, 0xf8a9, 0x70a9, 0x88aa, 0xe0ac,
998 +
            0x18af, 0x90af, 0x68ac, 0x40a3, 0xb8a0, 0x30a0, 0xc8a3, 0xa0a5, 0x58a6, 0xd0a6, 0x28a5,
999 +
            0x80b8, 0x78bb, 0xf0bb, 0x08b8, 0x60be, 0x98bd, 0x10bd, 0xe8be, 0xc0b1, 0x38b2, 0xb0b2,
1000 +
            0x48b1, 0x20b7, 0xd8b4, 0x50b4, 0xa8b7, 0x00cc, 0xf8cf, 0x70cf, 0x88cc, 0xe0ca, 0x18c9,
1001 +
            0x90c9, 0x68ca, 0x40c5, 0xb8c6, 0x30c6, 0xc8c5, 0xa0c3, 0x58c0, 0xd0c0, 0x28c3, 0x80de,
1002 +
            0x78dd, 0xf0dd, 0x08de, 0x60d8, 0x98db, 0x10db, 0xe8d8, 0xc0d7, 0x38d4, 0xb0d4, 0x48d7,
1003 +
            0x20d1, 0xd8d2, 0x50d2, 0xa8d1, 0x80ed, 0x78ee, 0xf0ee, 0x08ed, 0x60eb, 0x98e8, 0x10e8,
1004 +
            0xe8eb, 0xc0e4, 0x38e7, 0xb0e7, 0x48e4, 0x20e2, 0xd8e1, 0x50e1, 0xa8e2, 0x00ff, 0xf8fc,
1005 +
            0x70fc, 0x88ff, 0xe0f9, 0x18fa, 0x90fa, 0x68f9, 0x40f6, 0xb8f5, 0x30f5, 0xc8f6, 0xa0f0,
1006 +
            0x58f3, 0xd0f3, 0x28f0,
1007 +
        ],
1008 +
        [
1009 +
            0x0000, 0x8113, 0x8223, 0x0330, 0x8443, 0x0550, 0x0660, 0x8773, 0x8883, 0x0990, 0x0aa0,
1010 +
            0x8bb3, 0x0cc0, 0x8dd3, 0x8ee3, 0x0ff0, 0x9103, 0x1010, 0x1320, 0x9233, 0x1540, 0x9453,
1011 +
            0x9763, 0x1670, 0x1980, 0x9893, 0x9ba3, 0x1ab0, 0x9dc3, 0x1cd0, 0x1fe0, 0x9ef3, 0xa203,
1012 +
            0x2310, 0x2020, 0xa133, 0x2640, 0xa753, 0xa463, 0x2570, 0x2a80, 0xab93, 0xa8a3, 0x29b0,
1013 +
            0xaec3, 0x2fd0, 0x2ce0, 0xadf3, 0x3300, 0xb213, 0xb123, 0x3030, 0xb743, 0x3650, 0x3560,
1014 +
            0xb473, 0xbb83, 0x3a90, 0x39a0, 0xb8b3, 0x3fc0, 0xbed3, 0xbde3, 0x3cf0, 0xc403, 0x4510,
1015 +
            0x4620, 0xc733, 0x4040, 0xc153, 0xc263, 0x4370, 0x4c80, 0xcd93, 0xcea3, 0x4fb0, 0xc8c3,
1016 +
            0x49d0, 0x4ae0, 0xcbf3, 0x5500, 0xd413, 0xd723, 0x5630, 0xd143, 0x5050, 0x5360, 0xd273,
1017 +
            0xdd83, 0x5c90, 0x5fa0, 0xdeb3, 0x59c0, 0xd8d3, 0xdbe3, 0x5af0, 0x6600, 0xe713, 0xe423,
1018 +
            0x6530, 0xe243, 0x6350, 0x6060, 0xe173, 0xee83, 0x6f90, 0x6ca0, 0xedb3, 0x6ac0, 0xebd3,
1019 +
            0xe8e3, 0x69f0, 0xf703, 0x7610, 0x7520, 0xf433, 0x7340, 0xf253, 0xf163, 0x7070, 0x7f80,
1020 +
            0xfe93, 0xfda3, 0x7cb0, 0xfbc3, 0x7ad0, 0x79e0, 0xf8f3, 0x0803, 0x8910, 0x8a20, 0x0b33,
1021 +
            0x8c40, 0x0d53, 0x0e63, 0x8f70, 0x8080, 0x0193, 0x02a3, 0x83b0, 0x04c3, 0x85d0, 0x86e0,
1022 +
            0x07f3, 0x9900, 0x1813, 0x1b23, 0x9a30, 0x1d43, 0x9c50, 0x9f60, 0x1e73, 0x1183, 0x9090,
1023 +
            0x93a0, 0x12b3, 0x95c0, 0x14d3, 0x17e3, 0x96f0, 0xaa00, 0x2b13, 0x2823, 0xa930, 0x2e43,
1024 +
            0xaf50, 0xac60, 0x2d73, 0x2283, 0xa390, 0xa0a0, 0x21b3, 0xa6c0, 0x27d3, 0x24e3, 0xa5f0,
1025 +
            0x3b03, 0xba10, 0xb920, 0x3833, 0xbf40, 0x3e53, 0x3d63, 0xbc70, 0xb380, 0x3293, 0x31a3,
1026 +
            0xb0b0, 0x37c3, 0xb6d0, 0xb5e0, 0x34f3, 0xcc00, 0x4d13, 0x4e23, 0xcf30, 0x4843, 0xc950,
1027 +
            0xca60, 0x4b73, 0x4483, 0xc590, 0xc6a0, 0x47b3, 0xc0c0, 0x41d3, 0x42e3, 0xc3f0, 0x5d03,
1028 +
            0xdc10, 0xdf20, 0x5e33, 0xd940, 0x5853, 0x5b63, 0xda70, 0xd580, 0x5493, 0x57a3, 0xd6b0,
1029 +
            0x51c3, 0xd0d0, 0xd3e0, 0x52f3, 0x6e03, 0xef10, 0xec20, 0x6d33, 0xea40, 0x6b53, 0x6863,
1030 +
            0xe970, 0xe680, 0x6793, 0x64a3, 0xe5b0, 0x62c3, 0xe3d0, 0xe0e0, 0x61f3, 0xff00, 0x7e13,
1031 +
            0x7d23, 0xfc30, 0x7b43, 0xfa50, 0xf960, 0x7873, 0x7783, 0xf690, 0xf5a0, 0x74b3, 0xf3c0,
1032 +
            0x72d3, 0x71e3, 0xf0f0,
1033 +
        ],
1034 +
        [
1035 +
            0x0000, 0x1006, 0x200c, 0x300a, 0x4018, 0x501e, 0x6014, 0x7012, 0x8030, 0x9036, 0xa03c,
1036 +
            0xb03a, 0xc028, 0xd02e, 0xe024, 0xf022, 0x8065, 0x9063, 0xa069, 0xb06f, 0xc07d, 0xd07b,
1037 +
            0xe071, 0xf077, 0x0055, 0x1053, 0x2059, 0x305f, 0x404d, 0x504b, 0x6041, 0x7047, 0x80cf,
1038 +
            0x90c9, 0xa0c3, 0xb0c5, 0xc0d7, 0xd0d1, 0xe0db, 0xf0dd, 0x00ff, 0x10f9, 0x20f3, 0x30f5,
1039 +
            0x40e7, 0x50e1, 0x60eb, 0x70ed, 0x00aa, 0x10ac, 0x20a6, 0x30a0, 0x40b2, 0x50b4, 0x60be,
1040 +
            0x70b8, 0x809a, 0x909c, 0xa096, 0xb090, 0xc082, 0xd084, 0xe08e, 0xf088, 0x819b, 0x919d,
1041 +
            0xa197, 0xb191, 0xc183, 0xd185, 0xe18f, 0xf189, 0x01ab, 0x11ad, 0x21a7, 0x31a1, 0x41b3,
1042 +
            0x51b5, 0x61bf, 0x71b9, 0x01fe, 0x11f8, 0x21f2, 0x31f4, 0x41e6, 0x51e0, 0x61ea, 0x71ec,
1043 +
            0x81ce, 0x91c8, 0xa1c2, 0xb1c4, 0xc1d6, 0xd1d0, 0xe1da, 0xf1dc, 0x0154, 0x1152, 0x2158,
1044 +
            0x315e, 0x414c, 0x514a, 0x6140, 0x7146, 0x8164, 0x9162, 0xa168, 0xb16e, 0xc17c, 0xd17a,
1045 +
            0xe170, 0xf176, 0x8131, 0x9137, 0xa13d, 0xb13b, 0xc129, 0xd12f, 0xe125, 0xf123, 0x0101,
1046 +
            0x1107, 0x210d, 0x310b, 0x4119, 0x511f, 0x6115, 0x7113, 0x8333, 0x9335, 0xa33f, 0xb339,
1047 +
            0xc32b, 0xd32d, 0xe327, 0xf321, 0x0303, 0x1305, 0x230f, 0x3309, 0x431b, 0x531d, 0x6317,
1048 +
            0x7311, 0x0356, 0x1350, 0x235a, 0x335c, 0x434e, 0x5348, 0x6342, 0x7344, 0x8366, 0x9360,
1049 +
            0xa36a, 0xb36c, 0xc37e, 0xd378, 0xe372, 0xf374, 0x03fc, 0x13fa, 0x23f0, 0x33f6, 0x43e4,
1050 +
            0x53e2, 0x63e8, 0x73ee, 0x83cc, 0x93ca, 0xa3c0, 0xb3c6, 0xc3d4, 0xd3d2, 0xe3d8, 0xf3de,
1051 +
            0x8399, 0x939f, 0xa395, 0xb393, 0xc381, 0xd387, 0xe38d, 0xf38b, 0x03a9, 0x13af, 0x23a5,
1052 +
            0x33a3, 0x43b1, 0x53b7, 0x63bd, 0x73bb, 0x02a8, 0x12ae, 0x22a4, 0x32a2, 0x42b0, 0x52b6,
1053 +
            0x62bc, 0x72ba, 0x8298, 0x929e, 0xa294, 0xb292, 0xc280, 0xd286, 0xe28c, 0xf28a, 0x82cd,
1054 +
            0x92cb, 0xa2c1, 0xb2c7, 0xc2d5, 0xd2d3, 0xe2d9, 0xf2df, 0x02fd, 0x12fb, 0x22f1, 0x32f7,
1055 +
            0x42e5, 0x52e3, 0x62e9, 0x72ef, 0x8267, 0x9261, 0xa26b, 0xb26d, 0xc27f, 0xd279, 0xe273,
1056 +
            0xf275, 0x0257, 0x1251, 0x225b, 0x325d, 0x424f, 0x5249, 0x6243, 0x7245, 0x0202, 0x1204,
1057 +
            0x220e, 0x3208, 0x421a, 0x521c, 0x6216, 0x7210, 0x8232, 0x9234, 0xa23e, 0xb238, 0xc22a,
1058 +
            0xd22c, 0xe226, 0xf220,
1059 +
        ],
1060 +
        [
1061 +
            0x0000, 0x8663, 0x8cc3, 0x0aa0, 0x9983, 0x1fe0, 0x1540, 0x9323, 0xb303, 0x3560, 0x3fc0,
1062 +
            0xb9a3, 0x2a80, 0xace3, 0xa643, 0x2020, 0xe603, 0x6060, 0x6ac0, 0xeca3, 0x7f80, 0xf9e3,
1063 +
            0xf343, 0x7520, 0x5500, 0xd363, 0xd9c3, 0x5fa0, 0xcc83, 0x4ae0, 0x4040, 0xc623, 0x4c03,
1064 +
            0xca60, 0xc0c0, 0x46a3, 0xd580, 0x53e3, 0x5943, 0xdf20, 0xff00, 0x7963, 0x73c3, 0xf5a0,
1065 +
            0x6683, 0xe0e0, 0xea40, 0x6c23, 0xaa00, 0x2c63, 0x26c3, 0xa0a0, 0x3383, 0xb5e0, 0xbf40,
1066 +
            0x3923, 0x1903, 0x9f60, 0x95c0, 0x13a3, 0x8080, 0x06e3, 0x0c43, 0x8a20, 0x9806, 0x1e65,
1067 +
            0x14c5, 0x92a6, 0x0185, 0x87e6, 0x8d46, 0x0b25, 0x2b05, 0xad66, 0xa7c6, 0x21a5, 0xb286,
1068 +
            0x34e5, 0x3e45, 0xb826, 0x7e05, 0xf866, 0xf2c6, 0x74a5, 0xe786, 0x61e5, 0x6b45, 0xed26,
1069 +
            0xcd06, 0x4b65, 0x41c5, 0xc7a6, 0x5485, 0xd2e6, 0xd846, 0x5e25, 0xd405, 0x5266, 0x58c6,
1070 +
            0xdea5, 0x4d86, 0xcbe5, 0xc145, 0x4726, 0x6706, 0xe165, 0xebc5, 0x6da6, 0xfe85, 0x78e6,
1071 +
            0x7246, 0xf425, 0x3206, 0xb465, 0xbec5, 0x38a6, 0xab85, 0x2de6, 0x2746, 0xa125, 0x8105,
1072 +
            0x0766, 0x0dc6, 0x8ba5, 0x1886, 0x9ee5, 0x9445, 0x1226, 0xb009, 0x366a, 0x3cca, 0xbaa9,
1073 +
            0x298a, 0xafe9, 0xa549, 0x232a, 0x030a, 0x8569, 0x8fc9, 0x09aa, 0x9a89, 0x1cea, 0x164a,
1074 +
            0x9029, 0x560a, 0xd069, 0xdac9, 0x5caa, 0xcf89, 0x49ea, 0x434a, 0xc529, 0xe509, 0x636a,
1075 +
            0x69ca, 0xefa9, 0x7c8a, 0xfae9, 0xf049, 0x762a, 0xfc0a, 0x7a69, 0x70c9, 0xf6aa, 0x6589,
1076 +
            0xe3ea, 0xe94a, 0x6f29, 0x4f09, 0xc96a, 0xc3ca, 0x45a9, 0xd68a, 0x50e9, 0x5a49, 0xdc2a,
1077 +
            0x1a09, 0x9c6a, 0x96ca, 0x10a9, 0x838a, 0x05e9, 0x0f49, 0x892a, 0xa90a, 0x2f69, 0x25c9,
1078 +
            0xa3aa, 0x3089, 0xb6ea, 0xbc4a, 0x3a29, 0x280f, 0xae6c, 0xa4cc, 0x22af, 0xb18c, 0x37ef,
1079 +
            0x3d4f, 0xbb2c, 0x9b0c, 0x1d6f, 0x17cf, 0x91ac, 0x028f, 0x84ec, 0x8e4c, 0x082f, 0xce0c,
1080 +
            0x486f, 0x42cf, 0xc4ac, 0x578f, 0xd1ec, 0xdb4c, 0x5d2f, 0x7d0f, 0xfb6c, 0xf1cc, 0x77af,
1081 +
            0xe48c, 0x62ef, 0x684f, 0xee2c, 0x640c, 0xe26f, 0xe8cf, 0x6eac, 0xfd8f, 0x7bec, 0x714c,
1082 +
            0xf72f, 0xd70f, 0x516c, 0x5bcc, 0xddaf, 0x4e8c, 0xc8ef, 0xc24f, 0x442c, 0x820f, 0x046c,
1083 +
            0x0ecc, 0x88af, 0x1b8c, 0x9def, 0x974f, 0x112c, 0x310c, 0xb76f, 0xbdcf, 0x3bac, 0xa88f,
1084 +
            0x2eec, 0x244c, 0xa22f,
1085 +
        ],
1086 +
        [
1087 +
            0x0000, 0xe017, 0x402b, 0xa03c, 0x8056, 0x6041, 0xc07d, 0x206a, 0x80a9, 0x60be, 0xc082,
1088 +
            0x2095, 0x00ff, 0xe0e8, 0x40d4, 0xa0c3, 0x8157, 0x6140, 0xc17c, 0x216b, 0x0101, 0xe116,
1089 +
            0x412a, 0xa13d, 0x01fe, 0xe1e9, 0x41d5, 0xa1c2, 0x81a8, 0x61bf, 0xc183, 0x2194, 0x82ab,
1090 +
            0x62bc, 0xc280, 0x2297, 0x02fd, 0xe2ea, 0x42d6, 0xa2c1, 0x0202, 0xe215, 0x4229, 0xa23e,
1091 +
            0x8254, 0x6243, 0xc27f, 0x2268, 0x03fc, 0xe3eb, 0x43d7, 0xa3c0, 0x83aa, 0x63bd, 0xc381,
1092 +
            0x2396, 0x8355, 0x6342, 0xc37e, 0x2369, 0x0303, 0xe314, 0x4328, 0xa33f, 0x8553, 0x6544,
1093 +
            0xc578, 0x256f, 0x0505, 0xe512, 0x452e, 0xa539, 0x05fa, 0xe5ed, 0x45d1, 0xa5c6, 0x85ac,
1094 +
            0x65bb, 0xc587, 0x2590, 0x0404, 0xe413, 0x442f, 0xa438, 0x8452, 0x6445, 0xc479, 0x246e,
1095 +
            0x84ad, 0x64ba, 0xc486, 0x2491, 0x04fb, 0xe4ec, 0x44d0, 0xa4c7, 0x07f8, 0xe7ef, 0x47d3,
1096 +
            0xa7c4, 0x87ae, 0x67b9, 0xc785, 0x2792, 0x8751, 0x6746, 0xc77a, 0x276d, 0x0707, 0xe710,
1097 +
            0x472c, 0xa73b, 0x86af, 0x66b8, 0xc684, 0x2693, 0x06f9, 0xe6ee, 0x46d2, 0xa6c5, 0x0606,
1098 +
            0xe611, 0x462d, 0xa63a, 0x8650, 0x6647, 0xc67b, 0x266c, 0x8aa3, 0x6ab4, 0xca88, 0x2a9f,
1099 +
            0x0af5, 0xeae2, 0x4ade, 0xaac9, 0x0a0a, 0xea1d, 0x4a21, 0xaa36, 0x8a5c, 0x6a4b, 0xca77,
1100 +
            0x2a60, 0x0bf4, 0xebe3, 0x4bdf, 0xabc8, 0x8ba2, 0x6bb5, 0xcb89, 0x2b9e, 0x8b5d, 0x6b4a,
1101 +
            0xcb76, 0x2b61, 0x0b0b, 0xeb1c, 0x4b20, 0xab37, 0x0808, 0xe81f, 0x4823, 0xa834, 0x885e,
1102 +
            0x6849, 0xc875, 0x2862, 0x88a1, 0x68b6, 0xc88a, 0x289d, 0x08f7, 0xe8e0, 0x48dc, 0xa8cb,
1103 +
            0x895f, 0x6948, 0xc974, 0x2963, 0x0909, 0xe91e, 0x4922, 0xa935, 0x09f6, 0xe9e1, 0x49dd,
1104 +
            0xa9ca, 0x89a0, 0x69b7, 0xc98b, 0x299c, 0x0ff0, 0xefe7, 0x4fdb, 0xafcc, 0x8fa6, 0x6fb1,
1105 +
            0xcf8d, 0x2f9a, 0x8f59, 0x6f4e, 0xcf72, 0x2f65, 0x0f0f, 0xef18, 0x4f24, 0xaf33, 0x8ea7,
1106 +
            0x6eb0, 0xce8c, 0x2e9b, 0x0ef1, 0xeee6, 0x4eda, 0xaecd, 0x0e0e, 0xee19, 0x4e25, 0xae32,
1107 +
            0x8e58, 0x6e4f, 0xce73, 0x2e64, 0x8d5b, 0x6d4c, 0xcd70, 0x2d67, 0x0d0d, 0xed1a, 0x4d26,
1108 +
            0xad31, 0x0df2, 0xede5, 0x4dd9, 0xadce, 0x8da4, 0x6db3, 0xcd8f, 0x2d98, 0x0c0c, 0xec1b,
1109 +
            0x4c27, 0xac30, 0x8c5a, 0x6c4d, 0xcc71, 0x2c66, 0x8ca5, 0x6cb2, 0xcc8e, 0x2c99, 0x0cf3,
1110 +
            0xece4, 0x4cd8, 0xaccf,
1111 +
        ],
1112 +
        [
1113 +
            0x0000, 0x9543, 0xaa83, 0x3fc0, 0xd503, 0x4040, 0x7f80, 0xeac3, 0x2a03, 0xbf40, 0x8080,
1114 +
            0x15c3, 0xff00, 0x6a43, 0x5583, 0xc0c0, 0x5406, 0xc145, 0xfe85, 0x6bc6, 0x8105, 0x1446,
1115 +
            0x2b86, 0xbec5, 0x7e05, 0xeb46, 0xd486, 0x41c5, 0xab06, 0x3e45, 0x0185, 0x94c6, 0xa80c,
1116 +
            0x3d4f, 0x028f, 0x97cc, 0x7d0f, 0xe84c, 0xd78c, 0x42cf, 0x820f, 0x174c, 0x288c, 0xbdcf,
1117 +
            0x570c, 0xc24f, 0xfd8f, 0x68cc, 0xfc0a, 0x6949, 0x5689, 0xc3ca, 0x2909, 0xbc4a, 0x838a,
1118 +
            0x16c9, 0xd609, 0x434a, 0x7c8a, 0xe9c9, 0x030a, 0x9649, 0xa989, 0x3cca, 0xd01d, 0x455e,
1119 +
            0x7a9e, 0xefdd, 0x051e, 0x905d, 0xaf9d, 0x3ade, 0xfa1e, 0x6f5d, 0x509d, 0xc5de, 0x2f1d,
1120 +
            0xba5e, 0x859e, 0x10dd, 0x841b, 0x1158, 0x2e98, 0xbbdb, 0x5118, 0xc45b, 0xfb9b, 0x6ed8,
1121 +
            0xae18, 0x3b5b, 0x049b, 0x91d8, 0x7b1b, 0xee58, 0xd198, 0x44db, 0x7811, 0xed52, 0xd292,
1122 +
            0x47d1, 0xad12, 0x3851, 0x0791, 0x92d2, 0x5212, 0xc751, 0xf891, 0x6dd2, 0x8711, 0x1252,
1123 +
            0x2d92, 0xb8d1, 0x2c17, 0xb954, 0x8694, 0x13d7, 0xf914, 0x6c57, 0x5397, 0xc6d4, 0x0614,
1124 +
            0x9357, 0xac97, 0x39d4, 0xd317, 0x4654, 0x7994, 0xecd7, 0x203f, 0xb57c, 0x8abc, 0x1fff,
1125 +
            0xf53c, 0x607f, 0x5fbf, 0xcafc, 0x0a3c, 0x9f7f, 0xa0bf, 0x35fc, 0xdf3f, 0x4a7c, 0x75bc,
1126 +
            0xe0ff, 0x7439, 0xe17a, 0xdeba, 0x4bf9, 0xa13a, 0x3479, 0x0bb9, 0x9efa, 0x5e3a, 0xcb79,
1127 +
            0xf4b9, 0x61fa, 0x8b39, 0x1e7a, 0x21ba, 0xb4f9, 0x8833, 0x1d70, 0x22b0, 0xb7f3, 0x5d30,
1128 +
            0xc873, 0xf7b3, 0x62f0, 0xa230, 0x3773, 0x08b3, 0x9df0, 0x7733, 0xe270, 0xddb0, 0x48f3,
1129 +
            0xdc35, 0x4976, 0x76b6, 0xe3f5, 0x0936, 0x9c75, 0xa3b5, 0x36f6, 0xf636, 0x6375, 0x5cb5,
1130 +
            0xc9f6, 0x2335, 0xb676, 0x89b6, 0x1cf5, 0xf022, 0x6561, 0x5aa1, 0xcfe2, 0x2521, 0xb062,
1131 +
            0x8fa2, 0x1ae1, 0xda21, 0x4f62, 0x70a2, 0xe5e1, 0x0f22, 0x9a61, 0xa5a1, 0x30e2, 0xa424,
1132 +
            0x3167, 0x0ea7, 0x9be4, 0x7127, 0xe464, 0xdba4, 0x4ee7, 0x8e27, 0x1b64, 0x24a4, 0xb1e7,
1133 +
            0x5b24, 0xce67, 0xf1a7, 0x64e4, 0x582e, 0xcd6d, 0xf2ad, 0x67ee, 0x8d2d, 0x186e, 0x27ae,
1134 +
            0xb2ed, 0x722d, 0xe76e, 0xd8ae, 0x4ded, 0xa72e, 0x326d, 0x0dad, 0x98ee, 0x0c28, 0x996b,
1135 +
            0xa6ab, 0x33e8, 0xd92b, 0x4c68, 0x73a8, 0xe6eb, 0x262b, 0xb368, 0x8ca8, 0x19eb, 0xf328,
1136 +
            0x666b, 0x59ab, 0xcce8,
1137 +
        ],
1138 +
        [
1139 +
            0x0000, 0x407e, 0x80fc, 0xc082, 0x81fd, 0xc183, 0x0101, 0x417f, 0x83ff, 0xc381, 0x0303,
1140 +
            0x437d, 0x0202, 0x427c, 0x82fe, 0xc280, 0x87fb, 0xc785, 0x0707, 0x4779, 0x0606, 0x4678,
1141 +
            0x86fa, 0xc684, 0x0404, 0x447a, 0x84f8, 0xc486, 0x85f9, 0xc587, 0x0505, 0x457b, 0x8ff3,
1142 +
            0xcf8d, 0x0f0f, 0x4f71, 0x0e0e, 0x4e70, 0x8ef2, 0xce8c, 0x0c0c, 0x4c72, 0x8cf0, 0xcc8e,
1143 +
            0x8df1, 0xcd8f, 0x0d0d, 0x4d73, 0x0808, 0x4876, 0x88f4, 0xc88a, 0x89f5, 0xc98b, 0x0909,
1144 +
            0x4977, 0x8bf7, 0xcb89, 0x0b0b, 0x4b75, 0x0a0a, 0x4a74, 0x8af6, 0xca88, 0x9fe3, 0xdf9d,
1145 +
            0x1f1f, 0x5f61, 0x1e1e, 0x5e60, 0x9ee2, 0xde9c, 0x1c1c, 0x5c62, 0x9ce0, 0xdc9e, 0x9de1,
1146 +
            0xdd9f, 0x1d1d, 0x5d63, 0x1818, 0x5866, 0x98e4, 0xd89a, 0x99e5, 0xd99b, 0x1919, 0x5967,
1147 +
            0x9be7, 0xdb99, 0x1b1b, 0x5b65, 0x1a1a, 0x5a64, 0x9ae6, 0xda98, 0x1010, 0x506e, 0x90ec,
1148 +
            0xd092, 0x91ed, 0xd193, 0x1111, 0x516f, 0x93ef, 0xd391, 0x1313, 0x536d, 0x1212, 0x526c,
1149 +
            0x92ee, 0xd290, 0x97eb, 0xd795, 0x1717, 0x5769, 0x1616, 0x5668, 0x96ea, 0xd694, 0x1414,
1150 +
            0x546a, 0x94e8, 0xd496, 0x95e9, 0xd597, 0x1515, 0x556b, 0xbfc3, 0xffbd, 0x3f3f, 0x7f41,
1151 +
            0x3e3e, 0x7e40, 0xbec2, 0xfebc, 0x3c3c, 0x7c42, 0xbcc0, 0xfcbe, 0xbdc1, 0xfdbf, 0x3d3d,
1152 +
            0x7d43, 0x3838, 0x7846, 0xb8c4, 0xf8ba, 0xb9c5, 0xf9bb, 0x3939, 0x7947, 0xbbc7, 0xfbb9,
1153 +
            0x3b3b, 0x7b45, 0x3a3a, 0x7a44, 0xbac6, 0xfab8, 0x3030, 0x704e, 0xb0cc, 0xf0b2, 0xb1cd,
1154 +
            0xf1b3, 0x3131, 0x714f, 0xb3cf, 0xf3b1, 0x3333, 0x734d, 0x3232, 0x724c, 0xb2ce, 0xf2b0,
1155 +
            0xb7cb, 0xf7b5, 0x3737, 0x7749, 0x3636, 0x7648, 0xb6ca, 0xf6b4, 0x3434, 0x744a, 0xb4c8,
1156 +
            0xf4b6, 0xb5c9, 0xf5b7, 0x3535, 0x754b, 0x2020, 0x605e, 0xa0dc, 0xe0a2, 0xa1dd, 0xe1a3,
1157 +
            0x2121, 0x615f, 0xa3df, 0xe3a1, 0x2323, 0x635d, 0x2222, 0x625c, 0xa2de, 0xe2a0, 0xa7db,
1158 +
            0xe7a5, 0x2727, 0x6759, 0x2626, 0x6658, 0xa6da, 0xe6a4, 0x2424, 0x645a, 0xa4d8, 0xe4a6,
1159 +
            0xa5d9, 0xe5a7, 0x2525, 0x655b, 0xafd3, 0xefad, 0x2f2f, 0x6f51, 0x2e2e, 0x6e50, 0xaed2,
1160 +
            0xeeac, 0x2c2c, 0x6c52, 0xacd0, 0xecae, 0xadd1, 0xedaf, 0x2d2d, 0x6d53, 0x2828, 0x6856,
1161 +
            0xa8d4, 0xe8aa, 0xa9d5, 0xe9ab, 0x2929, 0x6957, 0xabd7, 0xeba9, 0x2b2b, 0x6b55, 0x2a2a,
1162 +
            0x6a54, 0xaad6, 0xeaa8,
1163 +
        ],
1164 +
        [
1165 +
            0x0000, 0xff83, 0x7f03, 0x8080, 0xfe06, 0x0185, 0x8105, 0x7e86, 0x7c09, 0x838a, 0x030a,
1166 +
            0xfc89, 0x820f, 0x7d8c, 0xfd0c, 0x028f, 0xf812, 0x0791, 0x8711, 0x7892, 0x0614, 0xf997,
1167 +
            0x7917, 0x8694, 0x841b, 0x7b98, 0xfb18, 0x049b, 0x7a1d, 0x859e, 0x051e, 0xfa9d, 0x7021,
1168 +
            0x8fa2, 0x0f22, 0xf0a1, 0x8e27, 0x71a4, 0xf124, 0x0ea7, 0x0c28, 0xf3ab, 0x732b, 0x8ca8,
1169 +
            0xf22e, 0x0dad, 0x8d2d, 0x72ae, 0x8833, 0x77b0, 0xf730, 0x08b3, 0x7635, 0x89b6, 0x0936,
1170 +
            0xf6b5, 0xf43a, 0x0bb9, 0x8b39, 0x74ba, 0x0a3c, 0xf5bf, 0x753f, 0x8abc, 0xe042, 0x1fc1,
1171 +
            0x9f41, 0x60c2, 0x1e44, 0xe1c7, 0x6147, 0x9ec4, 0x9c4b, 0x63c8, 0xe348, 0x1ccb, 0x624d,
1172 +
            0x9dce, 0x1d4e, 0xe2cd, 0x1850, 0xe7d3, 0x6753, 0x98d0, 0xe656, 0x19d5, 0x9955, 0x66d6,
1173 +
            0x6459, 0x9bda, 0x1b5a, 0xe4d9, 0x9a5f, 0x65dc, 0xe55c, 0x1adf, 0x9063, 0x6fe0, 0xef60,
1174 +
            0x10e3, 0x6e65, 0x91e6, 0x1166, 0xeee5, 0xec6a, 0x13e9, 0x9369, 0x6cea, 0x126c, 0xedef,
1175 +
            0x6d6f, 0x92ec, 0x6871, 0x97f2, 0x1772, 0xe8f1, 0x9677, 0x69f4, 0xe974, 0x16f7, 0x1478,
1176 +
            0xebfb, 0x6b7b, 0x94f8, 0xea7e, 0x15fd, 0x957d, 0x6afe, 0x4081, 0xbf02, 0x3f82, 0xc001,
1177 +
            0xbe87, 0x4104, 0xc184, 0x3e07, 0x3c88, 0xc30b, 0x438b, 0xbc08, 0xc28e, 0x3d0d, 0xbd8d,
1178 +
            0x420e, 0xb893, 0x4710, 0xc790, 0x3813, 0x4695, 0xb916, 0x3996, 0xc615, 0xc49a, 0x3b19,
1179 +
            0xbb99, 0x441a, 0x3a9c, 0xc51f, 0x459f, 0xba1c, 0x30a0, 0xcf23, 0x4fa3, 0xb020, 0xcea6,
1180 +
            0x3125, 0xb1a5, 0x4e26, 0x4ca9, 0xb32a, 0x33aa, 0xcc29, 0xb2af, 0x4d2c, 0xcdac, 0x322f,
1181 +
            0xc8b2, 0x3731, 0xb7b1, 0x4832, 0x36b4, 0xc937, 0x49b7, 0xb634, 0xb4bb, 0x4b38, 0xcbb8,
1182 +
            0x343b, 0x4abd, 0xb53e, 0x35be, 0xca3d, 0xa0c3, 0x5f40, 0xdfc0, 0x2043, 0x5ec5, 0xa146,
1183 +
            0x21c6, 0xde45, 0xdcca, 0x2349, 0xa3c9, 0x5c4a, 0x22cc, 0xdd4f, 0x5dcf, 0xa24c, 0x58d1,
1184 +
            0xa752, 0x27d2, 0xd851, 0xa6d7, 0x5954, 0xd9d4, 0x2657, 0x24d8, 0xdb5b, 0x5bdb, 0xa458,
1185 +
            0xdade, 0x255d, 0xa5dd, 0x5a5e, 0xd0e2, 0x2f61, 0xafe1, 0x5062, 0x2ee4, 0xd167, 0x51e7,
1186 +
            0xae64, 0xaceb, 0x5368, 0xd3e8, 0x2c6b, 0x52ed, 0xad6e, 0x2dee, 0xd26d, 0x28f0, 0xd773,
1187 +
            0x57f3, 0xa870, 0xd6f6, 0x2975, 0xa9f5, 0x5676, 0x54f9, 0xab7a, 0x2bfa, 0xd479, 0xaaff,
1188 +
            0x557c, 0xd5fc, 0x2a7f,
1189 +
        ],
1190 +
        [
1191 +
            0x0000, 0x8102, 0x8201, 0x0303, 0x8407, 0x0505, 0x0606, 0x8704, 0x880b, 0x0909, 0x0a0a,
1192 +
            0x8b08, 0x0c0c, 0x8d0e, 0x8e0d, 0x0f0f, 0x9013, 0x1111, 0x1212, 0x9310, 0x1414, 0x9516,
1193 +
            0x9615, 0x1717, 0x1818, 0x991a, 0x9a19, 0x1b1b, 0x9c1f, 0x1d1d, 0x1e1e, 0x9f1c, 0xa023,
1194 +
            0x2121, 0x2222, 0xa320, 0x2424, 0xa526, 0xa625, 0x2727, 0x2828, 0xa92a, 0xaa29, 0x2b2b,
1195 +
            0xac2f, 0x2d2d, 0x2e2e, 0xaf2c, 0x3030, 0xb132, 0xb231, 0x3333, 0xb437, 0x3535, 0x3636,
1196 +
            0xb734, 0xb83b, 0x3939, 0x3a3a, 0xbb38, 0x3c3c, 0xbd3e, 0xbe3d, 0x3f3f, 0xc043, 0x4141,
1197 +
            0x4242, 0xc340, 0x4444, 0xc546, 0xc645, 0x4747, 0x4848, 0xc94a, 0xca49, 0x4b4b, 0xcc4f,
1198 +
            0x4d4d, 0x4e4e, 0xcf4c, 0x5050, 0xd152, 0xd251, 0x5353, 0xd457, 0x5555, 0x5656, 0xd754,
1199 +
            0xd85b, 0x5959, 0x5a5a, 0xdb58, 0x5c5c, 0xdd5e, 0xde5d, 0x5f5f, 0x6060, 0xe162, 0xe261,
1200 +
            0x6363, 0xe467, 0x6565, 0x6666, 0xe764, 0xe86b, 0x6969, 0x6a6a, 0xeb68, 0x6c6c, 0xed6e,
1201 +
            0xee6d, 0x6f6f, 0xf073, 0x7171, 0x7272, 0xf370, 0x7474, 0xf576, 0xf675, 0x7777, 0x7878,
1202 +
            0xf97a, 0xfa79, 0x7b7b, 0xfc7f, 0x7d7d, 0x7e7e, 0xff7c, 0x0083, 0x8181, 0x8282, 0x0380,
1203 +
            0x8484, 0x0586, 0x0685, 0x8787, 0x8888, 0x098a, 0x0a89, 0x8b8b, 0x0c8f, 0x8d8d, 0x8e8e,
1204 +
            0x0f8c, 0x9090, 0x1192, 0x1291, 0x9393, 0x1497, 0x9595, 0x9696, 0x1794, 0x189b, 0x9999,
1205 +
            0x9a9a, 0x1b98, 0x9c9c, 0x1d9e, 0x1e9d, 0x9f9f, 0xa0a0, 0x21a2, 0x22a1, 0xa3a3, 0x24a7,
1206 +
            0xa5a5, 0xa6a6, 0x27a4, 0x28ab, 0xa9a9, 0xaaaa, 0x2ba8, 0xacac, 0x2dae, 0x2ead, 0xafaf,
1207 +
            0x30b3, 0xb1b1, 0xb2b2, 0x33b0, 0xb4b4, 0x35b6, 0x36b5, 0xb7b7, 0xb8b8, 0x39ba, 0x3ab9,
1208 +
            0xbbbb, 0x3cbf, 0xbdbd, 0xbebe, 0x3fbc, 0xc0c0, 0x41c2, 0x42c1, 0xc3c3, 0x44c7, 0xc5c5,
1209 +
            0xc6c6, 0x47c4, 0x48cb, 0xc9c9, 0xcaca, 0x4bc8, 0xcccc, 0x4dce, 0x4ecd, 0xcfcf, 0x50d3,
1210 +
            0xd1d1, 0xd2d2, 0x53d0, 0xd4d4, 0x55d6, 0x56d5, 0xd7d7, 0xd8d8, 0x59da, 0x5ad9, 0xdbdb,
1211 +
            0x5cdf, 0xdddd, 0xdede, 0x5fdc, 0x60e3, 0xe1e1, 0xe2e2, 0x63e0, 0xe4e4, 0x65e6, 0x66e5,
1212 +
            0xe7e7, 0xe8e8, 0x69ea, 0x6ae9, 0xebeb, 0x6cef, 0xeded, 0xeeee, 0x6fec, 0xf0f0, 0x71f2,
1213 +
            0x72f1, 0xf3f3, 0x74f7, 0xf5f5, 0xf6f6, 0x77f4, 0x78fb, 0xf9f9, 0xfafa, 0x7bf8, 0xfcfc,
1214 +
            0x7dfe, 0x7efd, 0xffff,
1215 +
        ],
1216 +
        [
1217 +
            0x0000, 0x0106, 0x020c, 0x030a, 0x0418, 0x051e, 0x0614, 0x0712, 0x0830, 0x0936, 0x0a3c,
1218 +
            0x0b3a, 0x0c28, 0x0d2e, 0x0e24, 0x0f22, 0x1060, 0x1166, 0x126c, 0x136a, 0x1478, 0x157e,
1219 +
            0x1674, 0x1772, 0x1850, 0x1956, 0x1a5c, 0x1b5a, 0x1c48, 0x1d4e, 0x1e44, 0x1f42, 0x20c0,
1220 +
            0x21c6, 0x22cc, 0x23ca, 0x24d8, 0x25de, 0x26d4, 0x27d2, 0x28f0, 0x29f6, 0x2afc, 0x2bfa,
1221 +
            0x2ce8, 0x2dee, 0x2ee4, 0x2fe2, 0x30a0, 0x31a6, 0x32ac, 0x33aa, 0x34b8, 0x35be, 0x36b4,
1222 +
            0x37b2, 0x3890, 0x3996, 0x3a9c, 0x3b9a, 0x3c88, 0x3d8e, 0x3e84, 0x3f82, 0x4180, 0x4086,
1223 +
            0x438c, 0x428a, 0x4598, 0x449e, 0x4794, 0x4692, 0x49b0, 0x48b6, 0x4bbc, 0x4aba, 0x4da8,
1224 +
            0x4cae, 0x4fa4, 0x4ea2, 0x51e0, 0x50e6, 0x53ec, 0x52ea, 0x55f8, 0x54fe, 0x57f4, 0x56f2,
1225 +
            0x59d0, 0x58d6, 0x5bdc, 0x5ada, 0x5dc8, 0x5cce, 0x5fc4, 0x5ec2, 0x6140, 0x6046, 0x634c,
1226 +
            0x624a, 0x6558, 0x645e, 0x6754, 0x6652, 0x6970, 0x6876, 0x6b7c, 0x6a7a, 0x6d68, 0x6c6e,
1227 +
            0x6f64, 0x6e62, 0x7120, 0x7026, 0x732c, 0x722a, 0x7538, 0x743e, 0x7734, 0x7632, 0x7910,
1228 +
            0x7816, 0x7b1c, 0x7a1a, 0x7d08, 0x7c0e, 0x7f04, 0x7e02, 0x8300, 0x8206, 0x810c, 0x800a,
1229 +
            0x8718, 0x861e, 0x8514, 0x8412, 0x8b30, 0x8a36, 0x893c, 0x883a, 0x8f28, 0x8e2e, 0x8d24,
1230 +
            0x8c22, 0x9360, 0x9266, 0x916c, 0x906a, 0x9778, 0x967e, 0x9574, 0x9472, 0x9b50, 0x9a56,
1231 +
            0x995c, 0x985a, 0x9f48, 0x9e4e, 0x9d44, 0x9c42, 0xa3c0, 0xa2c6, 0xa1cc, 0xa0ca, 0xa7d8,
1232 +
            0xa6de, 0xa5d4, 0xa4d2, 0xabf0, 0xaaf6, 0xa9fc, 0xa8fa, 0xafe8, 0xaeee, 0xade4, 0xace2,
1233 +
            0xb3a0, 0xb2a6, 0xb1ac, 0xb0aa, 0xb7b8, 0xb6be, 0xb5b4, 0xb4b2, 0xbb90, 0xba96, 0xb99c,
1234 +
            0xb89a, 0xbf88, 0xbe8e, 0xbd84, 0xbc82, 0xc280, 0xc386, 0xc08c, 0xc18a, 0xc698, 0xc79e,
1235 +
            0xc494, 0xc592, 0xcab0, 0xcbb6, 0xc8bc, 0xc9ba, 0xcea8, 0xcfae, 0xcca4, 0xcda2, 0xd2e0,
1236 +
            0xd3e6, 0xd0ec, 0xd1ea, 0xd6f8, 0xd7fe, 0xd4f4, 0xd5f2, 0xdad0, 0xdbd6, 0xd8dc, 0xd9da,
1237 +
            0xdec8, 0xdfce, 0xdcc4, 0xddc2, 0xe240, 0xe346, 0xe04c, 0xe14a, 0xe658, 0xe75e, 0xe454,
1238 +
            0xe552, 0xea70, 0xeb76, 0xe87c, 0xe97a, 0xee68, 0xef6e, 0xec64, 0xed62, 0xf220, 0xf326,
1239 +
            0xf02c, 0xf12a, 0xf638, 0xf73e, 0xf434, 0xf532, 0xfa10, 0xfb16, 0xf81c, 0xf91a, 0xfe08,
1240 +
            0xff0e, 0xfc04, 0xfd02,
1241 +
        ],
1242 +
        [
1243 +
            0x0000, 0x8605, 0x8c0f, 0x0a0a, 0x981b, 0x1e1e, 0x1414, 0x9211, 0xb033, 0x3636, 0x3c3c,
1244 +
            0xba39, 0x2828, 0xae2d, 0xa427, 0x2222, 0xe063, 0x6666, 0x6c6c, 0xea69, 0x7878, 0xfe7d,
1245 +
            0xf477, 0x7272, 0x5050, 0xd655, 0xdc5f, 0x5a5a, 0xc84b, 0x4e4e, 0x4444, 0xc241, 0x40c3,
1246 +
            0xc6c6, 0xcccc, 0x4ac9, 0xd8d8, 0x5edd, 0x54d7, 0xd2d2, 0xf0f0, 0x76f5, 0x7cff, 0xfafa,
1247 +
            0x68eb, 0xeeee, 0xe4e4, 0x62e1, 0xa0a0, 0x26a5, 0x2caf, 0xaaaa, 0x38bb, 0xbebe, 0xb4b4,
1248 +
            0x32b1, 0x1093, 0x9696, 0x9c9c, 0x1a99, 0x8888, 0x0e8d, 0x0487, 0x8282, 0x8186, 0x0783,
1249 +
            0x0d89, 0x8b8c, 0x199d, 0x9f98, 0x9592, 0x1397, 0x31b5, 0xb7b0, 0xbdba, 0x3bbf, 0xa9ae,
1250 +
            0x2fab, 0x25a1, 0xa3a4, 0x61e5, 0xe7e0, 0xedea, 0x6bef, 0xf9fe, 0x7ffb, 0x75f1, 0xf3f4,
1251 +
            0xd1d6, 0x57d3, 0x5dd9, 0xdbdc, 0x49cd, 0xcfc8, 0xc5c2, 0x43c7, 0xc145, 0x4740, 0x4d4a,
1252 +
            0xcb4f, 0x595e, 0xdf5b, 0xd551, 0x5354, 0x7176, 0xf773, 0xfd79, 0x7b7c, 0xe96d, 0x6f68,
1253 +
            0x6562, 0xe367, 0x2126, 0xa723, 0xad29, 0x2b2c, 0xb93d, 0x3f38, 0x3532, 0xb337, 0x9115,
1254 +
            0x1710, 0x1d1a, 0x9b1f, 0x090e, 0x8f0b, 0x8501, 0x0304, 0x8309, 0x050c, 0x0f06, 0x8903,
1255 +
            0x1b12, 0x9d17, 0x971d, 0x1118, 0x333a, 0xb53f, 0xbf35, 0x3930, 0xab21, 0x2d24, 0x272e,
1256 +
            0xa12b, 0x636a, 0xe56f, 0xef65, 0x6960, 0xfb71, 0x7d74, 0x777e, 0xf17b, 0xd359, 0x555c,
1257 +
            0x5f56, 0xd953, 0x4b42, 0xcd47, 0xc74d, 0x4148, 0xc3ca, 0x45cf, 0x4fc5, 0xc9c0, 0x5bd1,
1258 +
            0xddd4, 0xd7de, 0x51db, 0x73f9, 0xf5fc, 0xfff6, 0x79f3, 0xebe2, 0x6de7, 0x67ed, 0xe1e8,
1259 +
            0x23a9, 0xa5ac, 0xafa6, 0x29a3, 0xbbb2, 0x3db7, 0x37bd, 0xb1b8, 0x939a, 0x159f, 0x1f95,
1260 +
            0x9990, 0x0b81, 0x8d84, 0x878e, 0x018b, 0x028f, 0x848a, 0x8e80, 0x0885, 0x9a94, 0x1c91,
1261 +
            0x169b, 0x909e, 0xb2bc, 0x34b9, 0x3eb3, 0xb8b6, 0x2aa7, 0xaca2, 0xa6a8, 0x20ad, 0xe2ec,
1262 +
            0x64e9, 0x6ee3, 0xe8e6, 0x7af7, 0xfcf2, 0xf6f8, 0x70fd, 0x52df, 0xd4da, 0xded0, 0x58d5,
1263 +
            0xcac4, 0x4cc1, 0x46cb, 0xc0ce, 0x424c, 0xc449, 0xce43, 0x4846, 0xda57, 0x5c52, 0x5658,
1264 +
            0xd05d, 0xf27f, 0x747a, 0x7e70, 0xf875, 0x6a64, 0xec61, 0xe66b, 0x606e, 0xa22f, 0x242a,
1265 +
            0x2e20, 0xa825, 0x3a34, 0xbc31, 0xb63b, 0x303e, 0x121c, 0x9419, 0x9e13, 0x1816, 0x8a07,
1266 +
            0x0c02, 0x0608, 0x800d,
1267 +
        ],
1268 +
    ];
1269 +
1270 +
    pub static CRC16_DDS_110_TABLE: [[u16; 256]; 16] = [
1271 +
        [
1272 +
            0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, 0x8033, 0x0036, 0x003c,
1273 +
            0x8039, 0x0028, 0x802d, 0x8027, 0x0022, 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d,
1274 +
            0x8077, 0x0072, 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, 0x80c3,
1275 +
            0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, 0x00f0, 0x80f5, 0x80ff, 0x00fa,
1276 +
            0x80eb, 0x00ee, 0x00e4, 0x80e1, 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4,
1277 +
            0x80b1, 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, 0x8183, 0x0186,
1278 +
            0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab,
1279 +
            0x01ae, 0x01a4, 0x81a1, 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
1280 +
            0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, 0x0140, 0x8145, 0x814f,
1281 +
            0x014a, 0x815b, 0x015e, 0x0154, 0x8151, 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d,
1282 +
            0x8167, 0x0162, 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, 0x0110,
1283 +
            0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, 0x8303, 0x0306, 0x030c, 0x8309,
1284 +
            0x0318, 0x831d, 0x8317, 0x0312, 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324,
1285 +
            0x8321, 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, 0x8353, 0x0356,
1286 +
            0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db,
1287 +
            0x03de, 0x03d4, 0x83d1, 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
1288 +
            0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, 0x0390, 0x8395, 0x839f,
1289 +
            0x039a, 0x838b, 0x038e, 0x0384, 0x8381, 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e,
1290 +
            0x0294, 0x8291, 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, 0x82e3,
1291 +
            0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, 0x02d0, 0x82d5, 0x82df, 0x02da,
1292 +
            0x82cb, 0x02ce, 0x02c4, 0x82c1, 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257,
1293 +
            0x0252, 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, 0x0220, 0x8225,
1294 +
            0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, 0x8213, 0x0216, 0x021c, 0x8219, 0x0208,
1295 +
            0x820d, 0x8207, 0x0202,
1296 +
        ],
1297 +
        [
1298 +
            0x0000, 0x8603, 0x8c03, 0x0a00, 0x9803, 0x1e00, 0x1400, 0x9203, 0xb003, 0x3600, 0x3c00,
1299 +
            0xba03, 0x2800, 0xae03, 0xa403, 0x2200, 0xe003, 0x6600, 0x6c00, 0xea03, 0x7800, 0xfe03,
1300 +
            0xf403, 0x7200, 0x5000, 0xd603, 0xdc03, 0x5a00, 0xc803, 0x4e00, 0x4400, 0xc203, 0x4003,
1301 +
            0xc600, 0xcc00, 0x4a03, 0xd800, 0x5e03, 0x5403, 0xd200, 0xf000, 0x7603, 0x7c03, 0xfa00,
1302 +
            0x6803, 0xee00, 0xe400, 0x6203, 0xa000, 0x2603, 0x2c03, 0xaa00, 0x3803, 0xbe00, 0xb400,
1303 +
            0x3203, 0x1003, 0x9600, 0x9c00, 0x1a03, 0x8800, 0x0e03, 0x0403, 0x8200, 0x8006, 0x0605,
1304 +
            0x0c05, 0x8a06, 0x1805, 0x9e06, 0x9406, 0x1205, 0x3005, 0xb606, 0xbc06, 0x3a05, 0xa806,
1305 +
            0x2e05, 0x2405, 0xa206, 0x6005, 0xe606, 0xec06, 0x6a05, 0xf806, 0x7e05, 0x7405, 0xf206,
1306 +
            0xd006, 0x5605, 0x5c05, 0xda06, 0x4805, 0xce06, 0xc406, 0x4205, 0xc005, 0x4606, 0x4c06,
1307 +
            0xca05, 0x5806, 0xde05, 0xd405, 0x5206, 0x7006, 0xf605, 0xfc05, 0x7a06, 0xe805, 0x6e06,
1308 +
            0x6406, 0xe205, 0x2006, 0xa605, 0xac05, 0x2a06, 0xb805, 0x3e06, 0x3406, 0xb205, 0x9005,
1309 +
            0x1606, 0x1c06, 0x9a05, 0x0806, 0x8e05, 0x8405, 0x0206, 0x8009, 0x060a, 0x0c0a, 0x8a09,
1310 +
            0x180a, 0x9e09, 0x9409, 0x120a, 0x300a, 0xb609, 0xbc09, 0x3a0a, 0xa809, 0x2e0a, 0x240a,
1311 +
            0xa209, 0x600a, 0xe609, 0xec09, 0x6a0a, 0xf809, 0x7e0a, 0x740a, 0xf209, 0xd009, 0x560a,
1312 +
            0x5c0a, 0xda09, 0x480a, 0xce09, 0xc409, 0x420a, 0xc00a, 0x4609, 0x4c09, 0xca0a, 0x5809,
1313 +
            0xde0a, 0xd40a, 0x5209, 0x7009, 0xf60a, 0xfc0a, 0x7a09, 0xe80a, 0x6e09, 0x6409, 0xe20a,
1314 +
            0x2009, 0xa60a, 0xac0a, 0x2a09, 0xb80a, 0x3e09, 0x3409, 0xb20a, 0x900a, 0x1609, 0x1c09,
1315 +
            0x9a0a, 0x0809, 0x8e0a, 0x840a, 0x0209, 0x000f, 0x860c, 0x8c0c, 0x0a0f, 0x980c, 0x1e0f,
1316 +
            0x140f, 0x920c, 0xb00c, 0x360f, 0x3c0f, 0xba0c, 0x280f, 0xae0c, 0xa40c, 0x220f, 0xe00c,
1317 +
            0x660f, 0x6c0f, 0xea0c, 0x780f, 0xfe0c, 0xf40c, 0x720f, 0x500f, 0xd60c, 0xdc0c, 0x5a0f,
1318 +
            0xc80c, 0x4e0f, 0x440f, 0xc20c, 0x400c, 0xc60f, 0xcc0f, 0x4a0c, 0xd80f, 0x5e0c, 0x540c,
1319 +
            0xd20f, 0xf00f, 0x760c, 0x7c0c, 0xfa0f, 0x680c, 0xee0f, 0xe40f, 0x620c, 0xa00f, 0x260c,
1320 +
            0x2c0c, 0xaa0f, 0x380c, 0xbe0f, 0xb40f, 0x320c, 0x100c, 0x960f, 0x9c0f, 0x1a0c, 0x880f,
1321 +
            0x0e0c, 0x040c, 0x820f,
1322 +
        ],
1323 +
        [
1324 +
            0x0000, 0x8017, 0x802b, 0x003c, 0x8053, 0x0044, 0x0078, 0x806f, 0x80a3, 0x00b4, 0x0088,
1325 +
            0x809f, 0x00f0, 0x80e7, 0x80db, 0x00cc, 0x8143, 0x0154, 0x0168, 0x817f, 0x0110, 0x8107,
1326 +
            0x813b, 0x012c, 0x01e0, 0x81f7, 0x81cb, 0x01dc, 0x81b3, 0x01a4, 0x0198, 0x818f, 0x8283,
1327 +
            0x0294, 0x02a8, 0x82bf, 0x02d0, 0x82c7, 0x82fb, 0x02ec, 0x0220, 0x8237, 0x820b, 0x021c,
1328 +
            0x8273, 0x0264, 0x0258, 0x824f, 0x03c0, 0x83d7, 0x83eb, 0x03fc, 0x8393, 0x0384, 0x03b8,
1329 +
            0x83af, 0x8363, 0x0374, 0x0348, 0x835f, 0x0330, 0x8327, 0x831b, 0x030c, 0x8503, 0x0514,
1330 +
            0x0528, 0x853f, 0x0550, 0x8547, 0x857b, 0x056c, 0x05a0, 0x85b7, 0x858b, 0x059c, 0x85f3,
1331 +
            0x05e4, 0x05d8, 0x85cf, 0x0440, 0x8457, 0x846b, 0x047c, 0x8413, 0x0404, 0x0438, 0x842f,
1332 +
            0x84e3, 0x04f4, 0x04c8, 0x84df, 0x04b0, 0x84a7, 0x849b, 0x048c, 0x0780, 0x8797, 0x87ab,
1333 +
            0x07bc, 0x87d3, 0x07c4, 0x07f8, 0x87ef, 0x8723, 0x0734, 0x0708, 0x871f, 0x0770, 0x8767,
1334 +
            0x875b, 0x074c, 0x86c3, 0x06d4, 0x06e8, 0x86ff, 0x0690, 0x8687, 0x86bb, 0x06ac, 0x0660,
1335 +
            0x8677, 0x864b, 0x065c, 0x8633, 0x0624, 0x0618, 0x860f, 0x8a03, 0x0a14, 0x0a28, 0x8a3f,
1336 +
            0x0a50, 0x8a47, 0x8a7b, 0x0a6c, 0x0aa0, 0x8ab7, 0x8a8b, 0x0a9c, 0x8af3, 0x0ae4, 0x0ad8,
1337 +
            0x8acf, 0x0b40, 0x8b57, 0x8b6b, 0x0b7c, 0x8b13, 0x0b04, 0x0b38, 0x8b2f, 0x8be3, 0x0bf4,
1338 +
            0x0bc8, 0x8bdf, 0x0bb0, 0x8ba7, 0x8b9b, 0x0b8c, 0x0880, 0x8897, 0x88ab, 0x08bc, 0x88d3,
1339 +
            0x08c4, 0x08f8, 0x88ef, 0x8823, 0x0834, 0x0808, 0x881f, 0x0870, 0x8867, 0x885b, 0x084c,
1340 +
            0x89c3, 0x09d4, 0x09e8, 0x89ff, 0x0990, 0x8987, 0x89bb, 0x09ac, 0x0960, 0x8977, 0x894b,
1341 +
            0x095c, 0x8933, 0x0924, 0x0918, 0x890f, 0x0f00, 0x8f17, 0x8f2b, 0x0f3c, 0x8f53, 0x0f44,
1342 +
            0x0f78, 0x8f6f, 0x8fa3, 0x0fb4, 0x0f88, 0x8f9f, 0x0ff0, 0x8fe7, 0x8fdb, 0x0fcc, 0x8e43,
1343 +
            0x0e54, 0x0e68, 0x8e7f, 0x0e10, 0x8e07, 0x8e3b, 0x0e2c, 0x0ee0, 0x8ef7, 0x8ecb, 0x0edc,
1344 +
            0x8eb3, 0x0ea4, 0x0e98, 0x8e8f, 0x8d83, 0x0d94, 0x0da8, 0x8dbf, 0x0dd0, 0x8dc7, 0x8dfb,
1345 +
            0x0dec, 0x0d20, 0x8d37, 0x8d0b, 0x0d1c, 0x8d73, 0x0d64, 0x0d58, 0x8d4f, 0x0cc0, 0x8cd7,
1346 +
            0x8ceb, 0x0cfc, 0x8c93, 0x0c84, 0x0cb8, 0x8caf, 0x8c63, 0x0c74, 0x0c48, 0x8c5f, 0x0c30,
1347 +
            0x8c27, 0x8c1b, 0x0c0c,
1348 +
        ],
1349 +
        [
1350 +
            0x0000, 0x9403, 0xa803, 0x3c00, 0xd003, 0x4400, 0x7800, 0xec03, 0x2003, 0xb400, 0x8800,
1351 +
            0x1c03, 0xf000, 0x6403, 0x5803, 0xcc00, 0x4006, 0xd405, 0xe805, 0x7c06, 0x9005, 0x0406,
1352 +
            0x3806, 0xac05, 0x6005, 0xf406, 0xc806, 0x5c05, 0xb006, 0x2405, 0x1805, 0x8c06, 0x800c,
1353 +
            0x140f, 0x280f, 0xbc0c, 0x500f, 0xc40c, 0xf80c, 0x6c0f, 0xa00f, 0x340c, 0x080c, 0x9c0f,
1354 +
            0x700c, 0xe40f, 0xd80f, 0x4c0c, 0xc00a, 0x5409, 0x6809, 0xfc0a, 0x1009, 0x840a, 0xb80a,
1355 +
            0x2c09, 0xe009, 0x740a, 0x480a, 0xdc09, 0x300a, 0xa409, 0x9809, 0x0c0a, 0x801d, 0x141e,
1356 +
            0x281e, 0xbc1d, 0x501e, 0xc41d, 0xf81d, 0x6c1e, 0xa01e, 0x341d, 0x081d, 0x9c1e, 0x701d,
1357 +
            0xe41e, 0xd81e, 0x4c1d, 0xc01b, 0x5418, 0x6818, 0xfc1b, 0x1018, 0x841b, 0xb81b, 0x2c18,
1358 +
            0xe018, 0x741b, 0x481b, 0xdc18, 0x301b, 0xa418, 0x9818, 0x0c1b, 0x0011, 0x9412, 0xa812,
1359 +
            0x3c11, 0xd012, 0x4411, 0x7811, 0xec12, 0x2012, 0xb411, 0x8811, 0x1c12, 0xf011, 0x6412,
1360 +
            0x5812, 0xcc11, 0x4017, 0xd414, 0xe814, 0x7c17, 0x9014, 0x0417, 0x3817, 0xac14, 0x6014,
1361 +
            0xf417, 0xc817, 0x5c14, 0xb017, 0x2414, 0x1814, 0x8c17, 0x803f, 0x143c, 0x283c, 0xbc3f,
1362 +
            0x503c, 0xc43f, 0xf83f, 0x6c3c, 0xa03c, 0x343f, 0x083f, 0x9c3c, 0x703f, 0xe43c, 0xd83c,
1363 +
            0x4c3f, 0xc039, 0x543a, 0x683a, 0xfc39, 0x103a, 0x8439, 0xb839, 0x2c3a, 0xe03a, 0x7439,
1364 +
            0x4839, 0xdc3a, 0x3039, 0xa43a, 0x983a, 0x0c39, 0x0033, 0x9430, 0xa830, 0x3c33, 0xd030,
1365 +
            0x4433, 0x7833, 0xec30, 0x2030, 0xb433, 0x8833, 0x1c30, 0xf033, 0x6430, 0x5830, 0xcc33,
1366 +
            0x4035, 0xd436, 0xe836, 0x7c35, 0x9036, 0x0435, 0x3835, 0xac36, 0x6036, 0xf435, 0xc835,
1367 +
            0x5c36, 0xb035, 0x2436, 0x1836, 0x8c35, 0x0022, 0x9421, 0xa821, 0x3c22, 0xd021, 0x4422,
1368 +
            0x7822, 0xec21, 0x2021, 0xb422, 0x8822, 0x1c21, 0xf022, 0x6421, 0x5821, 0xcc22, 0x4024,
1369 +
            0xd427, 0xe827, 0x7c24, 0x9027, 0x0424, 0x3824, 0xac27, 0x6027, 0xf424, 0xc824, 0x5c27,
1370 +
            0xb024, 0x2427, 0x1827, 0x8c24, 0x802e, 0x142d, 0x282d, 0xbc2e, 0x502d, 0xc42e, 0xf82e,
1371 +
            0x6c2d, 0xa02d, 0x342e, 0x082e, 0x9c2d, 0x702e, 0xe42d, 0xd82d, 0x4c2e, 0xc028, 0x542b,
1372 +
            0x682b, 0xfc28, 0x102b, 0x8428, 0xb828, 0x2c2b, 0xe02b, 0x7428, 0x4828, 0xdc2b, 0x3028,
1373 +
            0xa42b, 0x982b, 0x0c28,
1374 +
        ],
1375 +
        [
1376 +
            0x0000, 0x807b, 0x80f3, 0x0088, 0x81e3, 0x0198, 0x0110, 0x816b, 0x83c3, 0x03b8, 0x0330,
1377 +
            0x834b, 0x0220, 0x825b, 0x82d3, 0x02a8, 0x8783, 0x07f8, 0x0770, 0x870b, 0x0660, 0x861b,
1378 +
            0x8693, 0x06e8, 0x0440, 0x843b, 0x84b3, 0x04c8, 0x85a3, 0x05d8, 0x0550, 0x852b, 0x8f03,
1379 +
            0x0f78, 0x0ff0, 0x8f8b, 0x0ee0, 0x8e9b, 0x8e13, 0x0e68, 0x0cc0, 0x8cbb, 0x8c33, 0x0c48,
1380 +
            0x8d23, 0x0d58, 0x0dd0, 0x8dab, 0x0880, 0x88fb, 0x8873, 0x0808, 0x8963, 0x0918, 0x0990,
1381 +
            0x89eb, 0x8b43, 0x0b38, 0x0bb0, 0x8bcb, 0x0aa0, 0x8adb, 0x8a53, 0x0a28, 0x9e03, 0x1e78,
1382 +
            0x1ef0, 0x9e8b, 0x1fe0, 0x9f9b, 0x9f13, 0x1f68, 0x1dc0, 0x9dbb, 0x9d33, 0x1d48, 0x9c23,
1383 +
            0x1c58, 0x1cd0, 0x9cab, 0x1980, 0x99fb, 0x9973, 0x1908, 0x9863, 0x1818, 0x1890, 0x98eb,
1384 +
            0x9a43, 0x1a38, 0x1ab0, 0x9acb, 0x1ba0, 0x9bdb, 0x9b53, 0x1b28, 0x1100, 0x917b, 0x91f3,
1385 +
            0x1188, 0x90e3, 0x1098, 0x1010, 0x906b, 0x92c3, 0x12b8, 0x1230, 0x924b, 0x1320, 0x935b,
1386 +
            0x93d3, 0x13a8, 0x9683, 0x16f8, 0x1670, 0x960b, 0x1760, 0x971b, 0x9793, 0x17e8, 0x1540,
1387 +
            0x953b, 0x95b3, 0x15c8, 0x94a3, 0x14d8, 0x1450, 0x942b, 0xbc03, 0x3c78, 0x3cf0, 0xbc8b,
1388 +
            0x3de0, 0xbd9b, 0xbd13, 0x3d68, 0x3fc0, 0xbfbb, 0xbf33, 0x3f48, 0xbe23, 0x3e58, 0x3ed0,
1389 +
            0xbeab, 0x3b80, 0xbbfb, 0xbb73, 0x3b08, 0xba63, 0x3a18, 0x3a90, 0xbaeb, 0xb843, 0x3838,
1390 +
            0x38b0, 0xb8cb, 0x39a0, 0xb9db, 0xb953, 0x3928, 0x3300, 0xb37b, 0xb3f3, 0x3388, 0xb2e3,
1391 +
            0x3298, 0x3210, 0xb26b, 0xb0c3, 0x30b8, 0x3030, 0xb04b, 0x3120, 0xb15b, 0xb1d3, 0x31a8,
1392 +
            0xb483, 0x34f8, 0x3470, 0xb40b, 0x3560, 0xb51b, 0xb593, 0x35e8, 0x3740, 0xb73b, 0xb7b3,
1393 +
            0x37c8, 0xb6a3, 0x36d8, 0x3650, 0xb62b, 0x2200, 0xa27b, 0xa2f3, 0x2288, 0xa3e3, 0x2398,
1394 +
            0x2310, 0xa36b, 0xa1c3, 0x21b8, 0x2130, 0xa14b, 0x2020, 0xa05b, 0xa0d3, 0x20a8, 0xa583,
1395 +
            0x25f8, 0x2570, 0xa50b, 0x2460, 0xa41b, 0xa493, 0x24e8, 0x2640, 0xa63b, 0xa6b3, 0x26c8,
1396 +
            0xa7a3, 0x27d8, 0x2750, 0xa72b, 0xad03, 0x2d78, 0x2df0, 0xad8b, 0x2ce0, 0xac9b, 0xac13,
1397 +
            0x2c68, 0x2ec0, 0xaebb, 0xae33, 0x2e48, 0xaf23, 0x2f58, 0x2fd0, 0xafab, 0x2a80, 0xaafb,
1398 +
            0xaa73, 0x2a08, 0xab63, 0x2b18, 0x2b90, 0xabeb, 0xa943, 0x2938, 0x29b0, 0xa9cb, 0x28a0,
1399 +
            0xa8db, 0xa853, 0x2828,
1400 +
        ],
1401 +
        [
1402 +
            0x0000, 0xf803, 0x7003, 0x8800, 0xe006, 0x1805, 0x9005, 0x6806, 0x4009, 0xb80a, 0x300a,
1403 +
            0xc809, 0xa00f, 0x580c, 0xd00c, 0x280f, 0x8012, 0x7811, 0xf011, 0x0812, 0x6014, 0x9817,
1404 +
            0x1017, 0xe814, 0xc01b, 0x3818, 0xb018, 0x481b, 0x201d, 0xd81e, 0x501e, 0xa81d, 0x8021,
1405 +
            0x7822, 0xf022, 0x0821, 0x6027, 0x9824, 0x1024, 0xe827, 0xc028, 0x382b, 0xb02b, 0x4828,
1406 +
            0x202e, 0xd82d, 0x502d, 0xa82e, 0x0033, 0xf830, 0x7030, 0x8833, 0xe035, 0x1836, 0x9036,
1407 +
            0x6835, 0x403a, 0xb839, 0x3039, 0xc83a, 0xa03c, 0x583f, 0xd03f, 0x283c, 0x8047, 0x7844,
1408 +
            0xf044, 0x0847, 0x6041, 0x9842, 0x1042, 0xe841, 0xc04e, 0x384d, 0xb04d, 0x484e, 0x2048,
1409 +
            0xd84b, 0x504b, 0xa848, 0x0055, 0xf856, 0x7056, 0x8855, 0xe053, 0x1850, 0x9050, 0x6853,
1410 +
            0x405c, 0xb85f, 0x305f, 0xc85c, 0xa05a, 0x5859, 0xd059, 0x285a, 0x0066, 0xf865, 0x7065,
1411 +
            0x8866, 0xe060, 0x1863, 0x9063, 0x6860, 0x406f, 0xb86c, 0x306c, 0xc86f, 0xa069, 0x586a,
1412 +
            0xd06a, 0x2869, 0x8074, 0x7877, 0xf077, 0x0874, 0x6072, 0x9871, 0x1071, 0xe872, 0xc07d,
1413 +
            0x387e, 0xb07e, 0x487d, 0x207b, 0xd878, 0x5078, 0xa87b, 0x808b, 0x7888, 0xf088, 0x088b,
1414 +
            0x608d, 0x988e, 0x108e, 0xe88d, 0xc082, 0x3881, 0xb081, 0x4882, 0x2084, 0xd887, 0x5087,
1415 +
            0xa884, 0x0099, 0xf89a, 0x709a, 0x8899, 0xe09f, 0x189c, 0x909c, 0x689f, 0x4090, 0xb893,
1416 +
            0x3093, 0xc890, 0xa096, 0x5895, 0xd095, 0x2896, 0x00aa, 0xf8a9, 0x70a9, 0x88aa, 0xe0ac,
1417 +
            0x18af, 0x90af, 0x68ac, 0x40a3, 0xb8a0, 0x30a0, 0xc8a3, 0xa0a5, 0x58a6, 0xd0a6, 0x28a5,
1418 +
            0x80b8, 0x78bb, 0xf0bb, 0x08b8, 0x60be, 0x98bd, 0x10bd, 0xe8be, 0xc0b1, 0x38b2, 0xb0b2,
1419 +
            0x48b1, 0x20b7, 0xd8b4, 0x50b4, 0xa8b7, 0x00cc, 0xf8cf, 0x70cf, 0x88cc, 0xe0ca, 0x18c9,
1420 +
            0x90c9, 0x68ca, 0x40c5, 0xb8c6, 0x30c6, 0xc8c5, 0xa0c3, 0x58c0, 0xd0c0, 0x28c3, 0x80de,
1421 +
            0x78dd, 0xf0dd, 0x08de, 0x60d8, 0x98db, 0x10db, 0xe8d8, 0xc0d7, 0x38d4, 0xb0d4, 0x48d7,
1422 +
            0x20d1, 0xd8d2, 0x50d2, 0xa8d1, 0x80ed, 0x78ee, 0xf0ee, 0x08ed, 0x60eb, 0x98e8, 0x10e8,
1423 +
            0xe8eb, 0xc0e4, 0x38e7, 0xb0e7, 0x48e4, 0x20e2, 0xd8e1, 0x50e1, 0xa8e2, 0x00ff, 0xf8fc,
1424 +
            0x70fc, 0x88ff, 0xe0f9, 0x18fa, 0x90fa, 0x68f9, 0x40f6, 0xb8f5, 0x30f5, 0xc8f6, 0xa0f0,
1425 +
            0x58f3, 0xd0f3, 0x28f0,
1426 +
        ],
1427 +
        [
1428 +
            0x0000, 0x8113, 0x8223, 0x0330, 0x8443, 0x0550, 0x0660, 0x8773, 0x8883, 0x0990, 0x0aa0,
1429 +
            0x8bb3, 0x0cc0, 0x8dd3, 0x8ee3, 0x0ff0, 0x9103, 0x1010, 0x1320, 0x9233, 0x1540, 0x9453,
1430 +
            0x9763, 0x1670, 0x1980, 0x9893, 0x9ba3, 0x1ab0, 0x9dc3, 0x1cd0, 0x1fe0, 0x9ef3, 0xa203,
1431 +
            0x2310, 0x2020, 0xa133, 0x2640, 0xa753, 0xa463, 0x2570, 0x2a80, 0xab93, 0xa8a3, 0x29b0,
1432 +
            0xaec3, 0x2fd0, 0x2ce0, 0xadf3, 0x3300, 0xb213, 0xb123, 0x3030, 0xb743, 0x3650, 0x3560,
1433 +
            0xb473, 0xbb83, 0x3a90, 0x39a0, 0xb8b3, 0x3fc0, 0xbed3, 0xbde3, 0x3cf0, 0xc403, 0x4510,
1434 +
            0x4620, 0xc733, 0x4040, 0xc153, 0xc263, 0x4370, 0x4c80, 0xcd93, 0xcea3, 0x4fb0, 0xc8c3,
1435 +
            0x49d0, 0x4ae0, 0xcbf3, 0x5500, 0xd413, 0xd723, 0x5630, 0xd143, 0x5050, 0x5360, 0xd273,
1436 +
            0xdd83, 0x5c90, 0x5fa0, 0xdeb3, 0x59c0, 0xd8d3, 0xdbe3, 0x5af0, 0x6600, 0xe713, 0xe423,
1437 +
            0x6530, 0xe243, 0x6350, 0x6060, 0xe173, 0xee83, 0x6f90, 0x6ca0, 0xedb3, 0x6ac0, 0xebd3,
1438 +
            0xe8e3, 0x69f0, 0xf703, 0x7610, 0x7520, 0xf433, 0x7340, 0xf253, 0xf163, 0x7070, 0x7f80,
1439 +
            0xfe93, 0xfda3, 0x7cb0, 0xfbc3, 0x7ad0, 0x79e0, 0xf8f3, 0x0803, 0x8910, 0x8a20, 0x0b33,
1440 +
            0x8c40, 0x0d53, 0x0e63, 0x8f70, 0x8080, 0x0193, 0x02a3, 0x83b0, 0x04c3, 0x85d0, 0x86e0,
1441 +
            0x07f3, 0x9900, 0x1813, 0x1b23, 0x9a30, 0x1d43, 0x9c50, 0x9f60, 0x1e73, 0x1183, 0x9090,
1442 +
            0x93a0, 0x12b3, 0x95c0, 0x14d3, 0x17e3, 0x96f0, 0xaa00, 0x2b13, 0x2823, 0xa930, 0x2e43,
1443 +
            0xaf50, 0xac60, 0x2d73, 0x2283, 0xa390, 0xa0a0, 0x21b3, 0xa6c0, 0x27d3, 0x24e3, 0xa5f0,
1444 +
            0x3b03, 0xba10, 0xb920, 0x3833, 0xbf40, 0x3e53, 0x3d63, 0xbc70, 0xb380, 0x3293, 0x31a3,
1445 +
            0xb0b0, 0x37c3, 0xb6d0, 0xb5e0, 0x34f3, 0xcc00, 0x4d13, 0x4e23, 0xcf30, 0x4843, 0xc950,
1446 +
            0xca60, 0x4b73, 0x4483, 0xc590, 0xc6a0, 0x47b3, 0xc0c0, 0x41d3, 0x42e3, 0xc3f0, 0x5d03,
1447 +
            0xdc10, 0xdf20, 0x5e33, 0xd940, 0x5853, 0x5b63, 0xda70, 0xd580, 0x5493, 0x57a3, 0xd6b0,
1448 +
            0x51c3, 0xd0d0, 0xd3e0, 0x52f3, 0x6e03, 0xef10, 0xec20, 0x6d33, 0xea40, 0x6b53, 0x6863,
1449 +
            0xe970, 0xe680, 0x6793, 0x64a3, 0xe5b0, 0x62c3, 0xe3d0, 0xe0e0, 0x61f3, 0xff00, 0x7e13,
1450 +
            0x7d23, 0xfc30, 0x7b43, 0xfa50, 0xf960, 0x7873, 0x7783, 0xf690, 0xf5a0, 0x74b3, 0xf3c0,
1451 +
            0x72d3, 0x71e3, 0xf0f0,
1452 +
        ],
1453 +
        [
1454 +
            0x0000, 0x1006, 0x200c, 0x300a, 0x4018, 0x501e, 0x6014, 0x7012, 0x8030, 0x9036, 0xa03c,
1455 +
            0xb03a, 0xc028, 0xd02e, 0xe024, 0xf022, 0x8065, 0x9063, 0xa069, 0xb06f, 0xc07d, 0xd07b,
1456 +
            0xe071, 0xf077, 0x0055, 0x1053, 0x2059, 0x305f, 0x404d, 0x504b, 0x6041, 0x7047, 0x80cf,
1457 +
            0x90c9, 0xa0c3, 0xb0c5, 0xc0d7, 0xd0d1, 0xe0db, 0xf0dd, 0x00ff, 0x10f9, 0x20f3, 0x30f5,
1458 +
            0x40e7, 0x50e1, 0x60eb, 0x70ed, 0x00aa, 0x10ac, 0x20a6, 0x30a0, 0x40b2, 0x50b4, 0x60be,
1459 +
            0x70b8, 0x809a, 0x909c, 0xa096, 0xb090, 0xc082, 0xd084, 0xe08e, 0xf088, 0x819b, 0x919d,
1460 +
            0xa197, 0xb191, 0xc183, 0xd185, 0xe18f, 0xf189, 0x01ab, 0x11ad, 0x21a7, 0x31a1, 0x41b3,
1461 +
            0x51b5, 0x61bf, 0x71b9, 0x01fe, 0x11f8, 0x21f2, 0x31f4, 0x41e6, 0x51e0, 0x61ea, 0x71ec,
1462 +
            0x81ce, 0x91c8, 0xa1c2, 0xb1c4, 0xc1d6, 0xd1d0, 0xe1da, 0xf1dc, 0x0154, 0x1152, 0x2158,
1463 +
            0x315e, 0x414c, 0x514a, 0x6140, 0x7146, 0x8164, 0x9162, 0xa168, 0xb16e, 0xc17c, 0xd17a,
1464 +
            0xe170, 0xf176, 0x8131, 0x9137, 0xa13d, 0xb13b, 0xc129, 0xd12f, 0xe125, 0xf123, 0x0101,
1465 +
            0x1107, 0x210d, 0x310b, 0x4119, 0x511f, 0x6115, 0x7113, 0x8333, 0x9335, 0xa33f, 0xb339,
1466 +
            0xc32b, 0xd32d, 0xe327, 0xf321, 0x0303, 0x1305, 0x230f, 0x3309, 0x431b, 0x531d, 0x6317,
1467 +
            0x7311, 0x0356, 0x1350, 0x235a, 0x335c, 0x434e, 0x5348, 0x6342, 0x7344, 0x8366, 0x9360,
1468 +
            0xa36a, 0xb36c, 0xc37e, 0xd378, 0xe372, 0xf374, 0x03fc, 0x13fa, 0x23f0, 0x33f6, 0x43e4,
1469 +
            0x53e2, 0x63e8, 0x73ee, 0x83cc, 0x93ca, 0xa3c0, 0xb3c6, 0xc3d4, 0xd3d2, 0xe3d8, 0xf3de,
1470 +
            0x8399, 0x939f, 0xa395, 0xb393, 0xc381, 0xd387, 0xe38d, 0xf38b, 0x03a9, 0x13af, 0x23a5,
1471 +
            0x33a3, 0x43b1, 0x53b7, 0x63bd, 0x73bb, 0x02a8, 0x12ae, 0x22a4, 0x32a2, 0x42b0, 0x52b6,
1472 +
            0x62bc, 0x72ba, 0x8298, 0x929e, 0xa294, 0xb292, 0xc280, 0xd286, 0xe28c, 0xf28a, 0x82cd,
1473 +
            0x92cb, 0xa2c1, 0xb2c7, 0xc2d5, 0xd2d3, 0xe2d9, 0xf2df, 0x02fd, 0x12fb, 0x22f1, 0x32f7,
1474 +
            0x42e5, 0x52e3, 0x62e9, 0x72ef, 0x8267, 0x9261, 0xa26b, 0xb26d, 0xc27f, 0xd279, 0xe273,
1475 +
            0xf275, 0x0257, 0x1251, 0x225b, 0x325d, 0x424f, 0x5249, 0x6243, 0x7245, 0x0202, 0x1204,
1476 +
            0x220e, 0x3208, 0x421a, 0x521c, 0x6216, 0x7210, 0x8232, 0x9234, 0xa23e, 0xb238, 0xc22a,
1477 +
            0xd22c, 0xe226, 0xf220,
1478 +
        ],
1479 +
        [
1480 +
            0x0000, 0x8663, 0x8cc3, 0x0aa0, 0x9983, 0x1fe0, 0x1540, 0x9323, 0xb303, 0x3560, 0x3fc0,
1481 +
            0xb9a3, 0x2a80, 0xace3, 0xa643, 0x2020, 0xe603, 0x6060, 0x6ac0, 0xeca3, 0x7f80, 0xf9e3,
1482 +
            0xf343, 0x7520, 0x5500, 0xd363, 0xd9c3, 0x5fa0, 0xcc83, 0x4ae0, 0x4040, 0xc623, 0x4c03,
1483 +
            0xca60, 0xc0c0, 0x46a3, 0xd580, 0x53e3, 0x5943, 0xdf20, 0xff00, 0x7963, 0x73c3, 0xf5a0,
1484 +
            0x6683, 0xe0e0, 0xea40, 0x6c23, 0xaa00, 0x2c63, 0x26c3, 0xa0a0, 0x3383, 0xb5e0, 0xbf40,
1485 +
            0x3923, 0x1903, 0x9f60, 0x95c0, 0x13a3, 0x8080, 0x06e3, 0x0c43, 0x8a20, 0x9806, 0x1e65,
1486 +
            0x14c5, 0x92a6, 0x0185, 0x87e6, 0x8d46, 0x0b25, 0x2b05, 0xad66, 0xa7c6, 0x21a5, 0xb286,
1487 +
            0x34e5, 0x3e45, 0xb826, 0x7e05, 0xf866, 0xf2c6, 0x74a5, 0xe786, 0x61e5, 0x6b45, 0xed26,
1488 +
            0xcd06, 0x4b65, 0x41c5, 0xc7a6, 0x5485, 0xd2e6, 0xd846, 0x5e25, 0xd405, 0x5266, 0x58c6,
1489 +
            0xdea5, 0x4d86, 0xcbe5, 0xc145, 0x4726, 0x6706, 0xe165, 0xebc5, 0x6da6, 0xfe85, 0x78e6,
1490 +
            0x7246, 0xf425, 0x3206, 0xb465, 0xbec5, 0x38a6, 0xab85, 0x2de6, 0x2746, 0xa125, 0x8105,
1491 +
            0x0766, 0x0dc6, 0x8ba5, 0x1886, 0x9ee5, 0x9445, 0x1226, 0xb009, 0x366a, 0x3cca, 0xbaa9,
1492 +
            0x298a, 0xafe9, 0xa549, 0x232a, 0x030a, 0x8569, 0x8fc9, 0x09aa, 0x9a89, 0x1cea, 0x164a,
1493 +
            0x9029, 0x560a, 0xd069, 0xdac9, 0x5caa, 0xcf89, 0x49ea, 0x434a, 0xc529, 0xe509, 0x636a,
1494 +
            0x69ca, 0xefa9, 0x7c8a, 0xfae9, 0xf049, 0x762a, 0xfc0a, 0x7a69, 0x70c9, 0xf6aa, 0x6589,
1495 +
            0xe3ea, 0xe94a, 0x6f29, 0x4f09, 0xc96a, 0xc3ca, 0x45a9, 0xd68a, 0x50e9, 0x5a49, 0xdc2a,
1496 +
            0x1a09, 0x9c6a, 0x96ca, 0x10a9, 0x838a, 0x05e9, 0x0f49, 0x892a, 0xa90a, 0x2f69, 0x25c9,
1497 +
            0xa3aa, 0x3089, 0xb6ea, 0xbc4a, 0x3a29, 0x280f, 0xae6c, 0xa4cc, 0x22af, 0xb18c, 0x37ef,
1498 +
            0x3d4f, 0xbb2c, 0x9b0c, 0x1d6f, 0x17cf, 0x91ac, 0x028f, 0x84ec, 0x8e4c, 0x082f, 0xce0c,
1499 +
            0x486f, 0x42cf, 0xc4ac, 0x578f, 0xd1ec, 0xdb4c, 0x5d2f, 0x7d0f, 0xfb6c, 0xf1cc, 0x77af,
1500 +
            0xe48c, 0x62ef, 0x684f, 0xee2c, 0x640c, 0xe26f, 0xe8cf, 0x6eac, 0xfd8f, 0x7bec, 0x714c,
1501 +
            0xf72f, 0xd70f, 0x516c, 0x5bcc, 0xddaf, 0x4e8c, 0xc8ef, 0xc24f, 0x442c, 0x820f, 0x046c,
1502 +
            0x0ecc, 0x88af, 0x1b8c, 0x9def, 0x974f, 0x112c, 0x310c, 0xb76f, 0xbdcf, 0x3bac, 0xa88f,
1503 +
            0x2eec, 0x244c, 0xa22f,
1504 +
        ],
1505 +
        [
1506 +
            0x0000, 0xe017, 0x402b, 0xa03c, 0x8056, 0x6041, 0xc07d, 0x206a, 0x80a9, 0x60be, 0xc082,
1507 +
            0x2095, 0x00ff, 0xe0e8, 0x40d4, 0xa0c3, 0x8157, 0x6140, 0xc17c, 0x216b, 0x0101, 0xe116,
1508 +
            0x412a, 0xa13d, 0x01fe, 0xe1e9, 0x41d5, 0xa1c2, 0x81a8, 0x61bf, 0xc183, 0x2194, 0x82ab,
1509 +
            0x62bc, 0xc280, 0x2297, 0x02fd, 0xe2ea, 0x42d6, 0xa2c1, 0x0202, 0xe215, 0x4229, 0xa23e,
1510 +
            0x8254, 0x6243, 0xc27f, 0x2268, 0x03fc, 0xe3eb, 0x43d7, 0xa3c0, 0x83aa, 0x63bd, 0xc381,
1511 +
            0x2396, 0x8355, 0x6342, 0xc37e, 0x2369, 0x0303, 0xe314, 0x4328, 0xa33f, 0x8553, 0x6544,
1512 +
            0xc578, 0x256f, 0x0505, 0xe512, 0x452e, 0xa539, 0x05fa, 0xe5ed, 0x45d1, 0xa5c6, 0x85ac,
1513 +
            0x65bb, 0xc587, 0x2590, 0x0404, 0xe413, 0x442f, 0xa438, 0x8452, 0x6445, 0xc479, 0x246e,
1514 +
            0x84ad, 0x64ba, 0xc486, 0x2491, 0x04fb, 0xe4ec, 0x44d0, 0xa4c7, 0x07f8, 0xe7ef, 0x47d3,
1515 +
            0xa7c4, 0x87ae, 0x67b9, 0xc785, 0x2792, 0x8751, 0x6746, 0xc77a, 0x276d, 0x0707, 0xe710,
1516 +
            0x472c, 0xa73b, 0x86af, 0x66b8, 0xc684, 0x2693, 0x06f9, 0xe6ee, 0x46d2, 0xa6c5, 0x0606,
1517 +
            0xe611, 0x462d, 0xa63a, 0x8650, 0x6647, 0xc67b, 0x266c, 0x8aa3, 0x6ab4, 0xca88, 0x2a9f,
1518 +
            0x0af5, 0xeae2, 0x4ade, 0xaac9, 0x0a0a, 0xea1d, 0x4a21, 0xaa36, 0x8a5c, 0x6a4b, 0xca77,
1519 +
            0x2a60, 0x0bf4, 0xebe3, 0x4bdf, 0xabc8, 0x8ba2, 0x6bb5, 0xcb89, 0x2b9e, 0x8b5d, 0x6b4a,
1520 +
            0xcb76, 0x2b61, 0x0b0b, 0xeb1c, 0x4b20, 0xab37, 0x0808, 0xe81f, 0x4823, 0xa834, 0x885e,
1521 +
            0x6849, 0xc875, 0x2862, 0x88a1, 0x68b6, 0xc88a, 0x289d, 0x08f7, 0xe8e0, 0x48dc, 0xa8cb,
1522 +
            0x895f, 0x6948, 0xc974, 0x2963, 0x0909, 0xe91e, 0x4922, 0xa935, 0x09f6, 0xe9e1, 0x49dd,
1523 +
            0xa9ca, 0x89a0, 0x69b7, 0xc98b, 0x299c, 0x0ff0, 0xefe7, 0x4fdb, 0xafcc, 0x8fa6, 0x6fb1,
1524 +
            0xcf8d, 0x2f9a, 0x8f59, 0x6f4e, 0xcf72, 0x2f65, 0x0f0f, 0xef18, 0x4f24, 0xaf33, 0x8ea7,
1525 +
            0x6eb0, 0xce8c, 0x2e9b, 0x0ef1, 0xeee6, 0x4eda, 0xaecd, 0x0e0e, 0xee19, 0x4e25, 0xae32,
1526 +
            0x8e58, 0x6e4f, 0xce73, 0x2e64, 0x8d5b, 0x6d4c, 0xcd70, 0x2d67, 0x0d0d, 0xed1a, 0x4d26,
1527 +
            0xad31, 0x0df2, 0xede5, 0x4dd9, 0xadce, 0x8da4, 0x6db3, 0xcd8f, 0x2d98, 0x0c0c, 0xec1b,
1528 +
            0x4c27, 0xac30, 0x8c5a, 0x6c4d, 0xcc71, 0x2c66, 0x8ca5, 0x6cb2, 0xcc8e, 0x2c99, 0x0cf3,
1529 +
            0xece4, 0x4cd8, 0xaccf,
1530 +
        ],
1531 +
        [
1532 +
            0x0000, 0x9543, 0xaa83, 0x3fc0, 0xd503, 0x4040, 0x7f80, 0xeac3, 0x2a03, 0xbf40, 0x8080,
1533 +
            0x15c3, 0xff00, 0x6a43, 0x5583, 0xc0c0, 0x5406, 0xc145, 0xfe85, 0x6bc6, 0x8105, 0x1446,
1534 +
            0x2b86, 0xbec5, 0x7e05, 0xeb46, 0xd486, 0x41c5, 0xab06, 0x3e45, 0x0185, 0x94c6, 0xa80c,
1535 +
            0x3d4f, 0x028f, 0x97cc, 0x7d0f, 0xe84c, 0xd78c, 0x42cf, 0x820f, 0x174c, 0x288c, 0xbdcf,
1536 +
            0x570c, 0xc24f, 0xfd8f, 0x68cc, 0xfc0a, 0x6949, 0x5689, 0xc3ca, 0x2909, 0xbc4a, 0x838a,
1537 +
            0x16c9, 0xd609, 0x434a, 0x7c8a, 0xe9c9, 0x030a, 0x9649, 0xa989, 0x3cca, 0xd01d, 0x455e,
1538 +
            0x7a9e, 0xefdd, 0x051e, 0x905d, 0xaf9d, 0x3ade, 0xfa1e, 0x6f5d, 0x509d, 0xc5de, 0x2f1d,
1539 +
            0xba5e, 0x859e, 0x10dd, 0x841b, 0x1158, 0x2e98, 0xbbdb, 0x5118, 0xc45b, 0xfb9b, 0x6ed8,
1540 +
            0xae18, 0x3b5b, 0x049b, 0x91d8, 0x7b1b, 0xee58, 0xd198, 0x44db, 0x7811, 0xed52, 0xd292,
1541 +
            0x47d1, 0xad12, 0x3851, 0x0791, 0x92d2, 0x5212, 0xc751, 0xf891, 0x6dd2, 0x8711, 0x1252,
1542 +
            0x2d92, 0xb8d1, 0x2c17, 0xb954, 0x8694, 0x13d7, 0xf914, 0x6c57, 0x5397, 0xc6d4, 0x0614,
1543 +
            0x9357, 0xac97, 0x39d4, 0xd317, 0x4654, 0x7994, 0xecd7, 0x203f, 0xb57c, 0x8abc, 0x1fff,
1544 +
            0xf53c, 0x607f, 0x5fbf, 0xcafc, 0x0a3c, 0x9f7f, 0xa0bf, 0x35fc, 0xdf3f, 0x4a7c, 0x75bc,
1545 +
            0xe0ff, 0x7439, 0xe17a, 0xdeba, 0x4bf9, 0xa13a, 0x3479, 0x0bb9, 0x9efa, 0x5e3a, 0xcb79,
1546 +
            0xf4b9, 0x61fa, 0x8b39, 0x1e7a, 0x21ba, 0xb4f9, 0x8833, 0x1d70, 0x22b0, 0xb7f3, 0x5d30,
1547 +
            0xc873, 0xf7b3, 0x62f0, 0xa230, 0x3773, 0x08b3, 0x9df0, 0x7733, 0xe270, 0xddb0, 0x48f3,
1548 +
            0xdc35, 0x4976, 0x76b6, 0xe3f5, 0x0936, 0x9c75, 0xa3b5, 0x36f6, 0xf636, 0x6375, 0x5cb5,
1549 +
            0xc9f6, 0x2335, 0xb676, 0x89b6, 0x1cf5, 0xf022, 0x6561, 0x5aa1, 0xcfe2, 0x2521, 0xb062,
1550 +
            0x8fa2, 0x1ae1, 0xda21, 0x4f62, 0x70a2, 0xe5e1, 0x0f22, 0x9a61, 0xa5a1, 0x30e2, 0xa424,
1551 +
            0x3167, 0x0ea7, 0x9be4, 0x7127, 0xe464, 0xdba4, 0x4ee7, 0x8e27, 0x1b64, 0x24a4, 0xb1e7,
1552 +
            0x5b24, 0xce67, 0xf1a7, 0x64e4, 0x582e, 0xcd6d, 0xf2ad, 0x67ee, 0x8d2d, 0x186e, 0x27ae,
1553 +
            0xb2ed, 0x722d, 0xe76e, 0xd8ae, 0x4ded, 0xa72e, 0x326d, 0x0dad, 0x98ee, 0x0c28, 0x996b,
1554 +
            0xa6ab, 0x33e8, 0xd92b, 0x4c68, 0x73a8, 0xe6eb, 0x262b, 0xb368, 0x8ca8, 0x19eb, 0xf328,
1555 +
            0x666b, 0x59ab, 0xcce8,
1556 +
        ],
1557 +
        [
1558 +
            0x0000, 0x407e, 0x80fc, 0xc082, 0x81fd, 0xc183, 0x0101, 0x417f, 0x83ff, 0xc381, 0x0303,
1559 +
            0x437d, 0x0202, 0x427c, 0x82fe, 0xc280, 0x87fb, 0xc785, 0x0707, 0x4779, 0x0606, 0x4678,
1560 +
            0x86fa, 0xc684, 0x0404, 0x447a, 0x84f8, 0xc486, 0x85f9, 0xc587, 0x0505, 0x457b, 0x8ff3,
1561 +
            0xcf8d, 0x0f0f, 0x4f71, 0x0e0e, 0x4e70, 0x8ef2, 0xce8c, 0x0c0c, 0x4c72, 0x8cf0, 0xcc8e,
1562 +
            0x8df1, 0xcd8f, 0x0d0d, 0x4d73, 0x0808, 0x4876, 0x88f4, 0xc88a, 0x89f5, 0xc98b, 0x0909,
1563 +
            0x4977, 0x8bf7, 0xcb89, 0x0b0b, 0x4b75, 0x0a0a, 0x4a74, 0x8af6, 0xca88, 0x9fe3, 0xdf9d,
1564 +
            0x1f1f, 0x5f61, 0x1e1e, 0x5e60, 0x9ee2, 0xde9c, 0x1c1c, 0x5c62, 0x9ce0, 0xdc9e, 0x9de1,
1565 +
            0xdd9f, 0x1d1d, 0x5d63, 0x1818, 0x5866, 0x98e4, 0xd89a, 0x99e5, 0xd99b, 0x1919, 0x5967,
1566 +
            0x9be7, 0xdb99, 0x1b1b, 0x5b65, 0x1a1a, 0x5a64, 0x9ae6, 0xda98, 0x1010, 0x506e, 0x90ec,
1567 +
            0xd092, 0x91ed, 0xd193, 0x1111, 0x516f, 0x93ef, 0xd391, 0x1313, 0x536d, 0x1212, 0x526c,
1568 +
            0x92ee, 0xd290, 0x97eb, 0xd795, 0x1717, 0x5769, 0x1616, 0x5668, 0x96ea, 0xd694, 0x1414,
1569 +
            0x546a, 0x94e8, 0xd496, 0x95e9, 0xd597, 0x1515, 0x556b, 0xbfc3, 0xffbd, 0x3f3f, 0x7f41,
1570 +
            0x3e3e, 0x7e40, 0xbec2, 0xfebc, 0x3c3c, 0x7c42, 0xbcc0, 0xfcbe, 0xbdc1, 0xfdbf, 0x3d3d,
1571 +
            0x7d43, 0x3838, 0x7846, 0xb8c4, 0xf8ba, 0xb9c5, 0xf9bb, 0x3939, 0x7947, 0xbbc7, 0xfbb9,
1572 +
            0x3b3b, 0x7b45, 0x3a3a, 0x7a44, 0xbac6, 0xfab8, 0x3030, 0x704e, 0xb0cc, 0xf0b2, 0xb1cd,
1573 +
            0xf1b3, 0x3131, 0x714f, 0xb3cf, 0xf3b1, 0x3333, 0x734d, 0x3232, 0x724c, 0xb2ce, 0xf2b0,
1574 +
            0xb7cb, 0xf7b5, 0x3737, 0x7749, 0x3636, 0x7648, 0xb6ca, 0xf6b4, 0x3434, 0x744a, 0xb4c8,
1575 +
            0xf4b6, 0xb5c9, 0xf5b7, 0x3535, 0x754b, 0x2020, 0x605e, 0xa0dc, 0xe0a2, 0xa1dd, 0xe1a3,
1576 +
            0x2121, 0x615f, 0xa3df, 0xe3a1, 0x2323, 0x635d, 0x2222, 0x625c, 0xa2de, 0xe2a0, 0xa7db,
1577 +
            0xe7a5, 0x2727, 0x6759, 0x2626, 0x6658, 0xa6da, 0xe6a4, 0x2424, 0x645a, 0xa4d8, 0xe4a6,
1578 +
            0xa5d9, 0xe5a7, 0x2525, 0x655b, 0xafd3, 0xefad, 0x2f2f, 0x6f51, 0x2e2e, 0x6e50, 0xaed2,
1579 +
            0xeeac, 0x2c2c, 0x6c52, 0xacd0, 0xecae, 0xadd1, 0xedaf, 0x2d2d, 0x6d53, 0x2828, 0x6856,
1580 +
            0xa8d4, 0xe8aa, 0xa9d5, 0xe9ab, 0x2929, 0x6957, 0xabd7, 0xeba9, 0x2b2b, 0x6b55, 0x2a2a,
1581 +
            0x6a54, 0xaad6, 0xeaa8,
1582 +
        ],
1583 +
        [
1584 +
            0x0000, 0xff83, 0x7f03, 0x8080, 0xfe06, 0x0185, 0x8105, 0x7e86, 0x7c09, 0x838a, 0x030a,
1585 +
            0xfc89, 0x820f, 0x7d8c, 0xfd0c, 0x028f, 0xf812, 0x0791, 0x8711, 0x7892, 0x0614, 0xf997,
1586 +
            0x7917, 0x8694, 0x841b, 0x7b98, 0xfb18, 0x049b, 0x7a1d, 0x859e, 0x051e, 0xfa9d, 0x7021,
1587 +
            0x8fa2, 0x0f22, 0xf0a1, 0x8e27, 0x71a4, 0xf124, 0x0ea7, 0x0c28, 0xf3ab, 0x732b, 0x8ca8,
1588 +
            0xf22e, 0x0dad, 0x8d2d, 0x72ae, 0x8833, 0x77b0, 0xf730, 0x08b3, 0x7635, 0x89b6, 0x0936,
1589 +
            0xf6b5, 0xf43a, 0x0bb9, 0x8b39, 0x74ba, 0x0a3c, 0xf5bf, 0x753f, 0x8abc, 0xe042, 0x1fc1,
1590 +
            0x9f41, 0x60c2, 0x1e44, 0xe1c7, 0x6147, 0x9ec4, 0x9c4b, 0x63c8, 0xe348, 0x1ccb, 0x624d,
1591 +
            0x9dce, 0x1d4e, 0xe2cd, 0x1850, 0xe7d3, 0x6753, 0x98d0, 0xe656, 0x19d5, 0x9955, 0x66d6,
1592 +
            0x6459, 0x9bda, 0x1b5a, 0xe4d9, 0x9a5f, 0x65dc, 0xe55c, 0x1adf, 0x9063, 0x6fe0, 0xef60,
1593 +
            0x10e3, 0x6e65, 0x91e6, 0x1166, 0xeee5, 0xec6a, 0x13e9, 0x9369, 0x6cea, 0x126c, 0xedef,
1594 +
            0x6d6f, 0x92ec, 0x6871, 0x97f2, 0x1772, 0xe8f1, 0x9677, 0x69f4, 0xe974, 0x16f7, 0x1478,
1595 +
            0xebfb, 0x6b7b, 0x94f8, 0xea7e, 0x15fd, 0x957d, 0x6afe, 0x4081, 0xbf02, 0x3f82, 0xc001,
1596 +
            0xbe87, 0x4104, 0xc184, 0x3e07, 0x3c88, 0xc30b, 0x438b, 0xbc08, 0xc28e, 0x3d0d, 0xbd8d,
1597 +
            0x420e, 0xb893, 0x4710, 0xc790, 0x3813, 0x4695, 0xb916, 0x3996, 0xc615, 0xc49a, 0x3b19,
1598 +
            0xbb99, 0x441a, 0x3a9c, 0xc51f, 0x459f, 0xba1c, 0x30a0, 0xcf23, 0x4fa3, 0xb020, 0xcea6,
1599 +
            0x3125, 0xb1a5, 0x4e26, 0x4ca9, 0xb32a, 0x33aa, 0xcc29, 0xb2af, 0x4d2c, 0xcdac, 0x322f,
1600 +
            0xc8b2, 0x3731, 0xb7b1, 0x4832, 0x36b4, 0xc937, 0x49b7, 0xb634, 0xb4bb, 0x4b38, 0xcbb8,
1601 +
            0x343b, 0x4abd, 0xb53e, 0x35be, 0xca3d, 0xa0c3, 0x5f40, 0xdfc0, 0x2043, 0x5ec5, 0xa146,
1602 +
            0x21c6, 0xde45, 0xdcca, 0x2349, 0xa3c9, 0x5c4a, 0x22cc, 0xdd4f, 0x5dcf, 0xa24c, 0x58d1,
1603 +
            0xa752, 0x27d2, 0xd851, 0xa6d7, 0x5954, 0xd9d4, 0x2657, 0x24d8, 0xdb5b, 0x5bdb, 0xa458,
1604 +
            0xdade, 0x255d, 0xa5dd, 0x5a5e, 0xd0e2, 0x2f61, 0xafe1, 0x5062, 0x2ee4, 0xd167, 0x51e7,
1605 +
            0xae64, 0xaceb, 0x5368, 0xd3e8, 0x2c6b, 0x52ed, 0xad6e, 0x2dee, 0xd26d, 0x28f0, 0xd773,
1606 +
            0x57f3, 0xa870, 0xd6f6, 0x2975, 0xa9f5, 0x5676, 0x54f9, 0xab7a, 0x2bfa, 0xd479, 0xaaff,
1607 +
            0x557c, 0xd5fc, 0x2a7f,
1608 +
        ],
1609 +
        [
1610 +
            0x0000, 0x8102, 0x8201, 0x0303, 0x8407, 0x0505, 0x0606, 0x8704, 0x880b, 0x0909, 0x0a0a,
1611 +
            0x8b08, 0x0c0c, 0x8d0e, 0x8e0d, 0x0f0f, 0x9013, 0x1111, 0x1212, 0x9310, 0x1414, 0x9516,
1612 +
            0x9615, 0x1717, 0x1818, 0x991a, 0x9a19, 0x1b1b, 0x9c1f, 0x1d1d, 0x1e1e, 0x9f1c, 0xa023,
1613 +
            0x2121, 0x2222, 0xa320, 0x2424, 0xa526, 0xa625, 0x2727, 0x2828, 0xa92a, 0xaa29, 0x2b2b,
1614 +
            0xac2f, 0x2d2d, 0x2e2e, 0xaf2c, 0x3030, 0xb132, 0xb231, 0x3333, 0xb437, 0x3535, 0x3636,
1615 +
            0xb734, 0xb83b, 0x3939, 0x3a3a, 0xbb38, 0x3c3c, 0xbd3e, 0xbe3d, 0x3f3f, 0xc043, 0x4141,
1616 +
            0x4242, 0xc340, 0x4444, 0xc546, 0xc645, 0x4747, 0x4848, 0xc94a, 0xca49, 0x4b4b, 0xcc4f,
1617 +
            0x4d4d, 0x4e4e, 0xcf4c, 0x5050, 0xd152, 0xd251, 0x5353, 0xd457, 0x5555, 0x5656, 0xd754,
1618 +
            0xd85b, 0x5959, 0x5a5a, 0xdb58, 0x5c5c, 0xdd5e, 0xde5d, 0x5f5f, 0x6060, 0xe162, 0xe261,
1619 +
            0x6363, 0xe467, 0x6565, 0x6666, 0xe764, 0xe86b, 0x6969, 0x6a6a, 0xeb68, 0x6c6c, 0xed6e,
1620 +
            0xee6d, 0x6f6f, 0xf073, 0x7171, 0x7272, 0xf370, 0x7474, 0xf576, 0xf675, 0x7777, 0x7878,
1621 +
            0xf97a, 0xfa79, 0x7b7b, 0xfc7f, 0x7d7d, 0x7e7e, 0xff7c, 0x0083, 0x8181, 0x8282, 0x0380,
1622 +
            0x8484, 0x0586, 0x0685, 0x8787, 0x8888, 0x098a, 0x0a89, 0x8b8b, 0x0c8f, 0x8d8d, 0x8e8e,
1623 +
            0x0f8c, 0x9090, 0x1192, 0x1291, 0x9393, 0x1497, 0x9595, 0x9696, 0x1794, 0x189b, 0x9999,
1624 +
            0x9a9a, 0x1b98, 0x9c9c, 0x1d9e, 0x1e9d, 0x9f9f, 0xa0a0, 0x21a2, 0x22a1, 0xa3a3, 0x24a7,
1625 +
            0xa5a5, 0xa6a6, 0x27a4, 0x28ab, 0xa9a9, 0xaaaa, 0x2ba8, 0xacac, 0x2dae, 0x2ead, 0xafaf,
1626 +
            0x30b3, 0xb1b1, 0xb2b2, 0x33b0, 0xb4b4, 0x35b6, 0x36b5, 0xb7b7, 0xb8b8, 0x39ba, 0x3ab9,
1627 +
            0xbbbb, 0x3cbf, 0xbdbd, 0xbebe, 0x3fbc, 0xc0c0, 0x41c2, 0x42c1, 0xc3c3, 0x44c7, 0xc5c5,
1628 +
            0xc6c6, 0x47c4, 0x48cb, 0xc9c9, 0xcaca, 0x4bc8, 0xcccc, 0x4dce, 0x4ecd, 0xcfcf, 0x50d3,
1629 +
            0xd1d1, 0xd2d2, 0x53d0, 0xd4d4, 0x55d6, 0x56d5, 0xd7d7, 0xd8d8, 0x59da, 0x5ad9, 0xdbdb,
1630 +
            0x5cdf, 0xdddd, 0xdede, 0x5fdc, 0x60e3, 0xe1e1, 0xe2e2, 0x63e0, 0xe4e4, 0x65e6, 0x66e5,
1631 +
            0xe7e7, 0xe8e8, 0x69ea, 0x6ae9, 0xebeb, 0x6cef, 0xeded, 0xeeee, 0x6fec, 0xf0f0, 0x71f2,
1632 +
            0x72f1, 0xf3f3, 0x74f7, 0xf5f5, 0xf6f6, 0x77f4, 0x78fb, 0xf9f9, 0xfafa, 0x7bf8, 0xfcfc,
1633 +
            0x7dfe, 0x7efd, 0xffff,
1634 +
        ],
1635 +
        [
1636 +
            0x0000, 0x0106, 0x020c, 0x030a, 0x0418, 0x051e, 0x0614, 0x0712, 0x0830, 0x0936, 0x0a3c,
1637 +
            0x0b3a, 0x0c28, 0x0d2e, 0x0e24, 0x0f22, 0x1060, 0x1166, 0x126c, 0x136a, 0x1478, 0x157e,
1638 +
            0x1674, 0x1772, 0x1850, 0x1956, 0x1a5c, 0x1b5a, 0x1c48, 0x1d4e, 0x1e44, 0x1f42, 0x20c0,
1639 +
            0x21c6, 0x22cc, 0x23ca, 0x24d8, 0x25de, 0x26d4, 0x27d2, 0x28f0, 0x29f6, 0x2afc, 0x2bfa,
1640 +
            0x2ce8, 0x2dee, 0x2ee4, 0x2fe2, 0x30a0, 0x31a6, 0x32ac, 0x33aa, 0x34b8, 0x35be, 0x36b4,
1641 +
            0x37b2, 0x3890, 0x3996, 0x3a9c, 0x3b9a, 0x3c88, 0x3d8e, 0x3e84, 0x3f82, 0x4180, 0x4086,
1642 +
            0x438c, 0x428a, 0x4598, 0x449e, 0x4794, 0x4692, 0x49b0, 0x48b6, 0x4bbc, 0x4aba, 0x4da8,
1643 +
            0x4cae, 0x4fa4, 0x4ea2, 0x51e0, 0x50e6, 0x53ec, 0x52ea, 0x55f8, 0x54fe, 0x57f4, 0x56f2,
1644 +
            0x59d0, 0x58d6, 0x5bdc, 0x5ada, 0x5dc8, 0x5cce, 0x5fc4, 0x5ec2, 0x6140, 0x6046, 0x634c,
1645 +
            0x624a, 0x6558, 0x645e, 0x6754, 0x6652, 0x6970, 0x6876, 0x6b7c, 0x6a7a, 0x6d68, 0x6c6e,
1646 +
            0x6f64, 0x6e62, 0x7120, 0x7026, 0x732c, 0x722a, 0x7538, 0x743e, 0x7734, 0x7632, 0x7910,
1647 +
            0x7816, 0x7b1c, 0x7a1a, 0x7d08, 0x7c0e, 0x7f04, 0x7e02, 0x8300, 0x8206, 0x810c, 0x800a,
1648 +
            0x8718, 0x861e, 0x8514, 0x8412, 0x8b30, 0x8a36, 0x893c, 0x883a, 0x8f28, 0x8e2e, 0x8d24,
1649 +
            0x8c22, 0x9360, 0x9266, 0x916c, 0x906a, 0x9778, 0x967e, 0x9574, 0x9472, 0x9b50, 0x9a56,
1650 +
            0x995c, 0x985a, 0x9f48, 0x9e4e, 0x9d44, 0x9c42, 0xa3c0, 0xa2c6, 0xa1cc, 0xa0ca, 0xa7d8,
1651 +
            0xa6de, 0xa5d4, 0xa4d2, 0xabf0, 0xaaf6, 0xa9fc, 0xa8fa, 0xafe8, 0xaeee, 0xade4, 0xace2,
1652 +
            0xb3a0, 0xb2a6, 0xb1ac, 0xb0aa, 0xb7b8, 0xb6be, 0xb5b4, 0xb4b2, 0xbb90, 0xba96, 0xb99c,
1653 +
            0xb89a, 0xbf88, 0xbe8e, 0xbd84, 0xbc82, 0xc280, 0xc386, 0xc08c, 0xc18a, 0xc698, 0xc79e,
1654 +
            0xc494, 0xc592, 0xcab0, 0xcbb6, 0xc8bc, 0xc9ba, 0xcea8, 0xcfae, 0xcca4, 0xcda2, 0xd2e0,
1655 +
            0xd3e6, 0xd0ec, 0xd1ea, 0xd6f8, 0xd7fe, 0xd4f4, 0xd5f2, 0xdad0, 0xdbd6, 0xd8dc, 0xd9da,
1656 +
            0xdec8, 0xdfce, 0xdcc4, 0xddc2, 0xe240, 0xe346, 0xe04c, 0xe14a, 0xe658, 0xe75e, 0xe454,
1657 +
            0xe552, 0xea70, 0xeb76, 0xe87c, 0xe97a, 0xee68, 0xef6e, 0xec64, 0xed62, 0xf220, 0xf326,
1658 +
            0xf02c, 0xf12a, 0xf638, 0xf73e, 0xf434, 0xf532, 0xfa10, 0xfb16, 0xf81c, 0xf91a, 0xfe08,
1659 +
            0xff0e, 0xfc04, 0xfd02,
1660 +
        ],
1661 +
        [
1662 +
            0x0000, 0x8605, 0x8c0f, 0x0a0a, 0x981b, 0x1e1e, 0x1414, 0x9211, 0xb033, 0x3636, 0x3c3c,
1663 +
            0xba39, 0x2828, 0xae2d, 0xa427, 0x2222, 0xe063, 0x6666, 0x6c6c, 0xea69, 0x7878, 0xfe7d,
1664 +
            0xf477, 0x7272, 0x5050, 0xd655, 0xdc5f, 0x5a5a, 0xc84b, 0x4e4e, 0x4444, 0xc241, 0x40c3,
1665 +
            0xc6c6, 0xcccc, 0x4ac9, 0xd8d8, 0x5edd, 0x54d7, 0xd2d2, 0xf0f0, 0x76f5, 0x7cff, 0xfafa,
1666 +
            0x68eb, 0xeeee, 0xe4e4, 0x62e1, 0xa0a0, 0x26a5, 0x2caf, 0xaaaa, 0x38bb, 0xbebe, 0xb4b4,
1667 +
            0x32b1, 0x1093, 0x9696, 0x9c9c, 0x1a99, 0x8888, 0x0e8d, 0x0487, 0x8282, 0x8186, 0x0783,
1668 +
            0x0d89, 0x8b8c, 0x199d, 0x9f98, 0x9592, 0x1397, 0x31b5, 0xb7b0, 0xbdba, 0x3bbf, 0xa9ae,
1669 +
            0x2fab, 0x25a1, 0xa3a4, 0x61e5, 0xe7e0, 0xedea, 0x6bef, 0xf9fe, 0x7ffb, 0x75f1, 0xf3f4,
1670 +
            0xd1d6, 0x57d3, 0x5dd9, 0xdbdc, 0x49cd, 0xcfc8, 0xc5c2, 0x43c7, 0xc145, 0x4740, 0x4d4a,
1671 +
            0xcb4f, 0x595e, 0xdf5b, 0xd551, 0x5354, 0x7176, 0xf773, 0xfd79, 0x7b7c, 0xe96d, 0x6f68,
1672 +
            0x6562, 0xe367, 0x2126, 0xa723, 0xad29, 0x2b2c, 0xb93d, 0x3f38, 0x3532, 0xb337, 0x9115,
1673 +
            0x1710, 0x1d1a, 0x9b1f, 0x090e, 0x8f0b, 0x8501, 0x0304, 0x8309, 0x050c, 0x0f06, 0x8903,
1674 +
            0x1b12, 0x9d17, 0x971d, 0x1118, 0x333a, 0xb53f, 0xbf35, 0x3930, 0xab21, 0x2d24, 0x272e,
1675 +
            0xa12b, 0x636a, 0xe56f, 0xef65, 0x6960, 0xfb71, 0x7d74, 0x777e, 0xf17b, 0xd359, 0x555c,
1676 +
            0x5f56, 0xd953, 0x4b42, 0xcd47, 0xc74d, 0x4148, 0xc3ca, 0x45cf, 0x4fc5, 0xc9c0, 0x5bd1,
1677 +
            0xddd4, 0xd7de, 0x51db, 0x73f9, 0xf5fc, 0xfff6, 0x79f3, 0xebe2, 0x6de7, 0x67ed, 0xe1e8,
1678 +
            0x23a9, 0xa5ac, 0xafa6, 0x29a3, 0xbbb2, 0x3db7, 0x37bd, 0xb1b8, 0x939a, 0x159f, 0x1f95,
1679 +
            0x9990, 0x0b81, 0x8d84, 0x878e, 0x018b, 0x028f, 0x848a, 0x8e80, 0x0885, 0x9a94, 0x1c91,
1680 +
            0x169b, 0x909e, 0xb2bc, 0x34b9, 0x3eb3, 0xb8b6, 0x2aa7, 0xaca2, 0xa6a8, 0x20ad, 0xe2ec,
1681 +
            0x64e9, 0x6ee3, 0xe8e6, 0x7af7, 0xfcf2, 0xf6f8, 0x70fd, 0x52df, 0xd4da, 0xded0, 0x58d5,
1682 +
            0xcac4, 0x4cc1, 0x46cb, 0xc0ce, 0x424c, 0xc449, 0xce43, 0x4846, 0xda57, 0x5c52, 0x5658,
1683 +
            0xd05d, 0xf27f, 0x747a, 0x7e70, 0xf875, 0x6a64, 0xec61, 0xe66b, 0x606e, 0xa22f, 0x242a,
1684 +
            0x2e20, 0xa825, 0x3a34, 0xbc31, 0xb63b, 0x303e, 0x121c, 0x9419, 0x9e13, 0x1816, 0x8a07,
1685 +
            0x0c02, 0x0608, 0x800d,
1686 +
        ],
1687 +
    ];
1688 +
1689 +
    pub static CRC16_DECT_R_TABLE: [[u16; 256]; 16] = [
1690 +
        [
1691 +
            0x0000, 0x0589, 0x0b12, 0x0e9b, 0x1624, 0x13ad, 0x1d36, 0x18bf, 0x2c48, 0x29c1, 0x275a,
1692 +
            0x22d3, 0x3a6c, 0x3fe5, 0x317e, 0x34f7, 0x5890, 0x5d19, 0x5382, 0x560b, 0x4eb4, 0x4b3d,
1693 +
            0x45a6, 0x402f, 0x74d8, 0x7151, 0x7fca, 0x7a43, 0x62fc, 0x6775, 0x69ee, 0x6c67, 0xb120,
1694 +
            0xb4a9, 0xba32, 0xbfbb, 0xa704, 0xa28d, 0xac16, 0xa99f, 0x9d68, 0x98e1, 0x967a, 0x93f3,
1695 +
            0x8b4c, 0x8ec5, 0x805e, 0x85d7, 0xe9b0, 0xec39, 0xe2a2, 0xe72b, 0xff94, 0xfa1d, 0xf486,
1696 +
            0xf10f, 0xc5f8, 0xc071, 0xceea, 0xcb63, 0xd3dc, 0xd655, 0xd8ce, 0xdd47, 0x67c9, 0x6240,
1697 +
            0x6cdb, 0x6952, 0x71ed, 0x7464, 0x7aff, 0x7f76, 0x4b81, 0x4e08, 0x4093, 0x451a, 0x5da5,
1698 +
            0x582c, 0x56b7, 0x533e, 0x3f59, 0x3ad0, 0x344b, 0x31c2, 0x297d, 0x2cf4, 0x226f, 0x27e6,
1699 +
            0x1311, 0x1698, 0x1803, 0x1d8a, 0x0535, 0x00bc, 0x0e27, 0x0bae, 0xd6e9, 0xd360, 0xddfb,
1700 +
            0xd872, 0xc0cd, 0xc544, 0xcbdf, 0xce56, 0xfaa1, 0xff28, 0xf1b3, 0xf43a, 0xec85, 0xe90c,
1701 +
            0xe797, 0xe21e, 0x8e79, 0x8bf0, 0x856b, 0x80e2, 0x985d, 0x9dd4, 0x934f, 0x96c6, 0xa231,
1702 +
            0xa7b8, 0xa923, 0xacaa, 0xb415, 0xb19c, 0xbf07, 0xba8e, 0xcf92, 0xca1b, 0xc480, 0xc109,
1703 +
            0xd9b6, 0xdc3f, 0xd2a4, 0xd72d, 0xe3da, 0xe653, 0xe8c8, 0xed41, 0xf5fe, 0xf077, 0xfeec,
1704 +
            0xfb65, 0x9702, 0x928b, 0x9c10, 0x9999, 0x8126, 0x84af, 0x8a34, 0x8fbd, 0xbb4a, 0xbec3,
1705 +
            0xb058, 0xb5d1, 0xad6e, 0xa8e7, 0xa67c, 0xa3f5, 0x7eb2, 0x7b3b, 0x75a0, 0x7029, 0x6896,
1706 +
            0x6d1f, 0x6384, 0x660d, 0x52fa, 0x5773, 0x59e8, 0x5c61, 0x44de, 0x4157, 0x4fcc, 0x4a45,
1707 +
            0x2622, 0x23ab, 0x2d30, 0x28b9, 0x3006, 0x358f, 0x3b14, 0x3e9d, 0x0a6a, 0x0fe3, 0x0178,
1708 +
            0x04f1, 0x1c4e, 0x19c7, 0x175c, 0x12d5, 0xa85b, 0xadd2, 0xa349, 0xa6c0, 0xbe7f, 0xbbf6,
1709 +
            0xb56d, 0xb0e4, 0x8413, 0x819a, 0x8f01, 0x8a88, 0x9237, 0x97be, 0x9925, 0x9cac, 0xf0cb,
1710 +
            0xf542, 0xfbd9, 0xfe50, 0xe6ef, 0xe366, 0xedfd, 0xe874, 0xdc83, 0xd90a, 0xd791, 0xd218,
1711 +
            0xcaa7, 0xcf2e, 0xc1b5, 0xc43c, 0x197b, 0x1cf2, 0x1269, 0x17e0, 0x0f5f, 0x0ad6, 0x044d,
1712 +
            0x01c4, 0x3533, 0x30ba, 0x3e21, 0x3ba8, 0x2317, 0x269e, 0x2805, 0x2d8c, 0x41eb, 0x4462,
1713 +
            0x4af9, 0x4f70, 0x57cf, 0x5246, 0x5cdd, 0x5954, 0x6da3, 0x682a, 0x66b1, 0x6338, 0x7b87,
1714 +
            0x7e0e, 0x7095, 0x751c,
1715 +
        ],
1716 +
        [
1717 +
            0x0000, 0x9aad, 0x30d3, 0xaa7e, 0x61a6, 0xfb0b, 0x5175, 0xcbd8, 0xc34c, 0x59e1, 0xf39f,
1718 +
            0x6932, 0xa2ea, 0x3847, 0x9239, 0x0894, 0x8311, 0x19bc, 0xb3c2, 0x296f, 0xe2b7, 0x781a,
1719 +
            0xd264, 0x48c9, 0x405d, 0xdaf0, 0x708e, 0xea23, 0x21fb, 0xbb56, 0x1128, 0x8b85, 0x03ab,
1720 +
            0x9906, 0x3378, 0xa9d5, 0x620d, 0xf8a0, 0x52de, 0xc873, 0xc0e7, 0x5a4a, 0xf034, 0x6a99,
1721 +
            0xa141, 0x3bec, 0x9192, 0x0b3f, 0x80ba, 0x1a17, 0xb069, 0x2ac4, 0xe11c, 0x7bb1, 0xd1cf,
1722 +
            0x4b62, 0x43f6, 0xd95b, 0x7325, 0xe988, 0x2250, 0xb8fd, 0x1283, 0x882e, 0x0756, 0x9dfb,
1723 +
            0x3785, 0xad28, 0x66f0, 0xfc5d, 0x5623, 0xcc8e, 0xc41a, 0x5eb7, 0xf4c9, 0x6e64, 0xa5bc,
1724 +
            0x3f11, 0x956f, 0x0fc2, 0x8447, 0x1eea, 0xb494, 0x2e39, 0xe5e1, 0x7f4c, 0xd532, 0x4f9f,
1725 +
            0x470b, 0xdda6, 0x77d8, 0xed75, 0x26ad, 0xbc00, 0x167e, 0x8cd3, 0x04fd, 0x9e50, 0x342e,
1726 +
            0xae83, 0x655b, 0xfff6, 0x5588, 0xcf25, 0xc7b1, 0x5d1c, 0xf762, 0x6dcf, 0xa617, 0x3cba,
1727 +
            0x96c4, 0x0c69, 0x87ec, 0x1d41, 0xb73f, 0x2d92, 0xe64a, 0x7ce7, 0xd699, 0x4c34, 0x44a0,
1728 +
            0xde0d, 0x7473, 0xeede, 0x2506, 0xbfab, 0x15d5, 0x8f78, 0x0eac, 0x9401, 0x3e7f, 0xa4d2,
1729 +
            0x6f0a, 0xf5a7, 0x5fd9, 0xc574, 0xcde0, 0x574d, 0xfd33, 0x679e, 0xac46, 0x36eb, 0x9c95,
1730 +
            0x0638, 0x8dbd, 0x1710, 0xbd6e, 0x27c3, 0xec1b, 0x76b6, 0xdcc8, 0x4665, 0x4ef1, 0xd45c,
1731 +
            0x7e22, 0xe48f, 0x2f57, 0xb5fa, 0x1f84, 0x8529, 0x0d07, 0x97aa, 0x3dd4, 0xa779, 0x6ca1,
1732 +
            0xf60c, 0x5c72, 0xc6df, 0xce4b, 0x54e6, 0xfe98, 0x6435, 0xafed, 0x3540, 0x9f3e, 0x0593,
1733 +
            0x8e16, 0x14bb, 0xbec5, 0x2468, 0xefb0, 0x751d, 0xdf63, 0x45ce, 0x4d5a, 0xd7f7, 0x7d89,
1734 +
            0xe724, 0x2cfc, 0xb651, 0x1c2f, 0x8682, 0x09fa, 0x9357, 0x3929, 0xa384, 0x685c, 0xf2f1,
1735 +
            0x588f, 0xc222, 0xcab6, 0x501b, 0xfa65, 0x60c8, 0xab10, 0x31bd, 0x9bc3, 0x016e, 0x8aeb,
1736 +
            0x1046, 0xba38, 0x2095, 0xeb4d, 0x71e0, 0xdb9e, 0x4133, 0x49a7, 0xd30a, 0x7974, 0xe3d9,
1737 +
            0x2801, 0xb2ac, 0x18d2, 0x827f, 0x0a51, 0x90fc, 0x3a82, 0xa02f, 0x6bf7, 0xf15a, 0x5b24,
1738 +
            0xc189, 0xc91d, 0x53b0, 0xf9ce, 0x6363, 0xa8bb, 0x3216, 0x9868, 0x02c5, 0x8940, 0x13ed,
1739 +
            0xb993, 0x233e, 0xe8e6, 0x724b, 0xd835, 0x4298, 0x4a0c, 0xd0a1, 0x7adf, 0xe072, 0x2baa,
1740 +
            0xb107, 0x1b79, 0x81d4,
1741 +
        ],
1742 +
        [
1743 +
            0x0000, 0x1d58, 0x3ab0, 0x27e8, 0x7560, 0x6838, 0x4fd0, 0x5288, 0xeac0, 0xf798, 0xd070,
1744 +
            0xcd28, 0x9fa0, 0x82f8, 0xa510, 0xb848, 0xd009, 0xcd51, 0xeab9, 0xf7e1, 0xa569, 0xb831,
1745 +
            0x9fd9, 0x8281, 0x3ac9, 0x2791, 0x0079, 0x1d21, 0x4fa9, 0x52f1, 0x7519, 0x6841, 0xa59b,
1746 +
            0xb8c3, 0x9f2b, 0x8273, 0xd0fb, 0xcda3, 0xea4b, 0xf713, 0x4f5b, 0x5203, 0x75eb, 0x68b3,
1747 +
            0x3a3b, 0x2763, 0x008b, 0x1dd3, 0x7592, 0x68ca, 0x4f22, 0x527a, 0x00f2, 0x1daa, 0x3a42,
1748 +
            0x271a, 0x9f52, 0x820a, 0xa5e2, 0xb8ba, 0xea32, 0xf76a, 0xd082, 0xcdda, 0x4ebf, 0x53e7,
1749 +
            0x740f, 0x6957, 0x3bdf, 0x2687, 0x016f, 0x1c37, 0xa47f, 0xb927, 0x9ecf, 0x8397, 0xd11f,
1750 +
            0xcc47, 0xebaf, 0xf6f7, 0x9eb6, 0x83ee, 0xa406, 0xb95e, 0xebd6, 0xf68e, 0xd166, 0xcc3e,
1751 +
            0x7476, 0x692e, 0x4ec6, 0x539e, 0x0116, 0x1c4e, 0x3ba6, 0x26fe, 0xeb24, 0xf67c, 0xd194,
1752 +
            0xcccc, 0x9e44, 0x831c, 0xa4f4, 0xb9ac, 0x01e4, 0x1cbc, 0x3b54, 0x260c, 0x7484, 0x69dc,
1753 +
            0x4e34, 0x536c, 0x3b2d, 0x2675, 0x019d, 0x1cc5, 0x4e4d, 0x5315, 0x74fd, 0x69a5, 0xd1ed,
1754 +
            0xccb5, 0xeb5d, 0xf605, 0xa48d, 0xb9d5, 0x9e3d, 0x8365, 0x9d7e, 0x8026, 0xa7ce, 0xba96,
1755 +
            0xe81e, 0xf546, 0xd2ae, 0xcff6, 0x77be, 0x6ae6, 0x4d0e, 0x5056, 0x02de, 0x1f86, 0x386e,
1756 +
            0x2536, 0x4d77, 0x502f, 0x77c7, 0x6a9f, 0x3817, 0x254f, 0x02a7, 0x1fff, 0xa7b7, 0xbaef,
1757 +
            0x9d07, 0x805f, 0xd2d7, 0xcf8f, 0xe867, 0xf53f, 0x38e5, 0x25bd, 0x0255, 0x1f0d, 0x4d85,
1758 +
            0x50dd, 0x7735, 0x6a6d, 0xd225, 0xcf7d, 0xe895, 0xf5cd, 0xa745, 0xba1d, 0x9df5, 0x80ad,
1759 +
            0xe8ec, 0xf5b4, 0xd25c, 0xcf04, 0x9d8c, 0x80d4, 0xa73c, 0xba64, 0x022c, 0x1f74, 0x389c,
1760 +
            0x25c4, 0x774c, 0x6a14, 0x4dfc, 0x50a4, 0xd3c1, 0xce99, 0xe971, 0xf429, 0xa6a1, 0xbbf9,
1761 +
            0x9c11, 0x8149, 0x3901, 0x2459, 0x03b1, 0x1ee9, 0x4c61, 0x5139, 0x76d1, 0x6b89, 0x03c8,
1762 +
            0x1e90, 0x3978, 0x2420, 0x76a8, 0x6bf0, 0x4c18, 0x5140, 0xe908, 0xf450, 0xd3b8, 0xcee0,
1763 +
            0x9c68, 0x8130, 0xa6d8, 0xbb80, 0x765a, 0x6b02, 0x4cea, 0x51b2, 0x033a, 0x1e62, 0x398a,
1764 +
            0x24d2, 0x9c9a, 0x81c2, 0xa62a, 0xbb72, 0xe9fa, 0xf4a2, 0xd34a, 0xce12, 0xa653, 0xbb0b,
1765 +
            0x9ce3, 0x81bb, 0xd333, 0xce6b, 0xe983, 0xf4db, 0x4c93, 0x51cb, 0x7623, 0x6b7b, 0x39f3,
1766 +
            0x24ab, 0x0343, 0x1e1b,
1767 +
        ],
1768 +
        [
1769 +
            0x0000, 0x3f75, 0x7eea, 0x419f, 0xfdd4, 0xc2a1, 0x833e, 0xbc4b, 0xfe21, 0xc154, 0x80cb,
1770 +
            0xbfbe, 0x03f5, 0x3c80, 0x7d1f, 0x426a, 0xf9cb, 0xc6be, 0x8721, 0xb854, 0x041f, 0x3b6a,
1771 +
            0x7af5, 0x4580, 0x07ea, 0x389f, 0x7900, 0x4675, 0xfa3e, 0xc54b, 0x84d4, 0xbba1, 0xf61f,
1772 +
            0xc96a, 0x88f5, 0xb780, 0x0bcb, 0x34be, 0x7521, 0x4a54, 0x083e, 0x374b, 0x76d4, 0x49a1,
1773 +
            0xf5ea, 0xca9f, 0x8b00, 0xb475, 0x0fd4, 0x30a1, 0x713e, 0x4e4b, 0xf200, 0xcd75, 0x8cea,
1774 +
            0xb39f, 0xf1f5, 0xce80, 0x8f1f, 0xb06a, 0x0c21, 0x3354, 0x72cb, 0x4dbe, 0xe9b7, 0xd6c2,
1775 +
            0x975d, 0xa828, 0x1463, 0x2b16, 0x6a89, 0x55fc, 0x1796, 0x28e3, 0x697c, 0x5609, 0xea42,
1776 +
            0xd537, 0x94a8, 0xabdd, 0x107c, 0x2f09, 0x6e96, 0x51e3, 0xeda8, 0xd2dd, 0x9342, 0xac37,
1777 +
            0xee5d, 0xd128, 0x90b7, 0xafc2, 0x1389, 0x2cfc, 0x6d63, 0x5216, 0x1fa8, 0x20dd, 0x6142,
1778 +
            0x5e37, 0xe27c, 0xdd09, 0x9c96, 0xa3e3, 0xe189, 0xdefc, 0x9f63, 0xa016, 0x1c5d, 0x2328,
1779 +
            0x62b7, 0x5dc2, 0xe663, 0xd916, 0x9889, 0xa7fc, 0x1bb7, 0x24c2, 0x655d, 0x5a28, 0x1842,
1780 +
            0x2737, 0x66a8, 0x59dd, 0xe596, 0xdae3, 0x9b7c, 0xa409, 0xd6e7, 0xe992, 0xa80d, 0x9778,
1781 +
            0x2b33, 0x1446, 0x55d9, 0x6aac, 0x28c6, 0x17b3, 0x562c, 0x6959, 0xd512, 0xea67, 0xabf8,
1782 +
            0x948d, 0x2f2c, 0x1059, 0x51c6, 0x6eb3, 0xd2f8, 0xed8d, 0xac12, 0x9367, 0xd10d, 0xee78,
1783 +
            0xafe7, 0x9092, 0x2cd9, 0x13ac, 0x5233, 0x6d46, 0x20f8, 0x1f8d, 0x5e12, 0x6167, 0xdd2c,
1784 +
            0xe259, 0xa3c6, 0x9cb3, 0xded9, 0xe1ac, 0xa033, 0x9f46, 0x230d, 0x1c78, 0x5de7, 0x6292,
1785 +
            0xd933, 0xe646, 0xa7d9, 0x98ac, 0x24e7, 0x1b92, 0x5a0d, 0x6578, 0x2712, 0x1867, 0x59f8,
1786 +
            0x668d, 0xdac6, 0xe5b3, 0xa42c, 0x9b59, 0x3f50, 0x0025, 0x41ba, 0x7ecf, 0xc284, 0xfdf1,
1787 +
            0xbc6e, 0x831b, 0xc171, 0xfe04, 0xbf9b, 0x80ee, 0x3ca5, 0x03d0, 0x424f, 0x7d3a, 0xc69b,
1788 +
            0xf9ee, 0xb871, 0x8704, 0x3b4f, 0x043a, 0x45a5, 0x7ad0, 0x38ba, 0x07cf, 0x4650, 0x7925,
1789 +
            0xc56e, 0xfa1b, 0xbb84, 0x84f1, 0xc94f, 0xf63a, 0xb7a5, 0x88d0, 0x349b, 0x0bee, 0x4a71,
1790 +
            0x7504, 0x376e, 0x081b, 0x4984, 0x76f1, 0xcaba, 0xf5cf, 0xb450, 0x8b25, 0x3084, 0x0ff1,
1791 +
            0x4e6e, 0x711b, 0xcd50, 0xf225, 0xb3ba, 0x8ccf, 0xcea5, 0xf1d0, 0xb04f, 0x8f3a, 0x3371,
1792 +
            0x0c04, 0x4d9b, 0x72ee,
1793 +
        ],
1794 +
        [
1795 +
            0x0000, 0xa847, 0x5507, 0xfd40, 0xaa0e, 0x0249, 0xff09, 0x574e, 0x5195, 0xf9d2, 0x0492,
1796 +
            0xacd5, 0xfb9b, 0x53dc, 0xae9c, 0x06db, 0xa32a, 0x0b6d, 0xf62d, 0x5e6a, 0x0924, 0xa163,
1797 +
            0x5c23, 0xf464, 0xf2bf, 0x5af8, 0xa7b8, 0x0fff, 0x58b1, 0xf0f6, 0x0db6, 0xa5f1, 0x43dd,
1798 +
            0xeb9a, 0x16da, 0xbe9d, 0xe9d3, 0x4194, 0xbcd4, 0x1493, 0x1248, 0xba0f, 0x474f, 0xef08,
1799 +
            0xb846, 0x1001, 0xed41, 0x4506, 0xe0f7, 0x48b0, 0xb5f0, 0x1db7, 0x4af9, 0xe2be, 0x1ffe,
1800 +
            0xb7b9, 0xb162, 0x1925, 0xe465, 0x4c22, 0x1b6c, 0xb32b, 0x4e6b, 0xe62c, 0x87ba, 0x2ffd,
1801 +
            0xd2bd, 0x7afa, 0x2db4, 0x85f3, 0x78b3, 0xd0f4, 0xd62f, 0x7e68, 0x8328, 0x2b6f, 0x7c21,
1802 +
            0xd466, 0x2926, 0x8161, 0x2490, 0x8cd7, 0x7197, 0xd9d0, 0x8e9e, 0x26d9, 0xdb99, 0x73de,
1803 +
            0x7505, 0xdd42, 0x2002, 0x8845, 0xdf0b, 0x774c, 0x8a0c, 0x224b, 0xc467, 0x6c20, 0x9160,
1804 +
            0x3927, 0x6e69, 0xc62e, 0x3b6e, 0x9329, 0x95f2, 0x3db5, 0xc0f5, 0x68b2, 0x3ffc, 0x97bb,
1805 +
            0x6afb, 0xc2bc, 0x674d, 0xcf0a, 0x324a, 0x9a0d, 0xcd43, 0x6504, 0x9844, 0x3003, 0x36d8,
1806 +
            0x9e9f, 0x63df, 0xcb98, 0x9cd6, 0x3491, 0xc9d1, 0x6196, 0x0afd, 0xa2ba, 0x5ffa, 0xf7bd,
1807 +
            0xa0f3, 0x08b4, 0xf5f4, 0x5db3, 0x5b68, 0xf32f, 0x0e6f, 0xa628, 0xf166, 0x5921, 0xa461,
1808 +
            0x0c26, 0xa9d7, 0x0190, 0xfcd0, 0x5497, 0x03d9, 0xab9e, 0x56de, 0xfe99, 0xf842, 0x5005,
1809 +
            0xad45, 0x0502, 0x524c, 0xfa0b, 0x074b, 0xaf0c, 0x4920, 0xe167, 0x1c27, 0xb460, 0xe32e,
1810 +
            0x4b69, 0xb629, 0x1e6e, 0x18b5, 0xb0f2, 0x4db2, 0xe5f5, 0xb2bb, 0x1afc, 0xe7bc, 0x4ffb,
1811 +
            0xea0a, 0x424d, 0xbf0d, 0x174a, 0x4004, 0xe843, 0x1503, 0xbd44, 0xbb9f, 0x13d8, 0xee98,
1812 +
            0x46df, 0x1191, 0xb9d6, 0x4496, 0xecd1, 0x8d47, 0x2500, 0xd840, 0x7007, 0x2749, 0x8f0e,
1813 +
            0x724e, 0xda09, 0xdcd2, 0x7495, 0x89d5, 0x2192, 0x76dc, 0xde9b, 0x23db, 0x8b9c, 0x2e6d,
1814 +
            0x862a, 0x7b6a, 0xd32d, 0x8463, 0x2c24, 0xd164, 0x7923, 0x7ff8, 0xd7bf, 0x2aff, 0x82b8,
1815 +
            0xd5f6, 0x7db1, 0x80f1, 0x28b6, 0xce9a, 0x66dd, 0x9b9d, 0x33da, 0x6494, 0xccd3, 0x3193,
1816 +
            0x99d4, 0x9f0f, 0x3748, 0xca08, 0x624f, 0x3501, 0x9d46, 0x6006, 0xc841, 0x6db0, 0xc5f7,
1817 +
            0x38b7, 0x90f0, 0xc7be, 0x6ff9, 0x92b9, 0x3afe, 0x3c25, 0x9462, 0x6922, 0xc165, 0x962b,
1818 +
            0x3e6c, 0xc32c, 0x6b6b,
1819 +
        ],
1820 +
        [
1821 +
            0x0000, 0x15fa, 0x2bf4, 0x3e0e, 0x57e8, 0x4212, 0x7c1c, 0x69e6, 0xafd0, 0xba2a, 0x8424,
1822 +
            0x91de, 0xf838, 0xedc2, 0xd3cc, 0xc636, 0x5a29, 0x4fd3, 0x71dd, 0x6427, 0x0dc1, 0x183b,
1823 +
            0x2635, 0x33cf, 0xf5f9, 0xe003, 0xde0d, 0xcbf7, 0xa211, 0xb7eb, 0x89e5, 0x9c1f, 0xb452,
1824 +
            0xa1a8, 0x9fa6, 0x8a5c, 0xe3ba, 0xf640, 0xc84e, 0xddb4, 0x1b82, 0x0e78, 0x3076, 0x258c,
1825 +
            0x4c6a, 0x5990, 0x679e, 0x7264, 0xee7b, 0xfb81, 0xc58f, 0xd075, 0xb993, 0xac69, 0x9267,
1826 +
            0x879d, 0x41ab, 0x5451, 0x6a5f, 0x7fa5, 0x1643, 0x03b9, 0x3db7, 0x284d, 0x6d2d, 0x78d7,
1827 +
            0x46d9, 0x5323, 0x3ac5, 0x2f3f, 0x1131, 0x04cb, 0xc2fd, 0xd707, 0xe909, 0xfcf3, 0x9515,
1828 +
            0x80ef, 0xbee1, 0xab1b, 0x3704, 0x22fe, 0x1cf0, 0x090a, 0x60ec, 0x7516, 0x4b18, 0x5ee2,
1829 +
            0x98d4, 0x8d2e, 0xb320, 0xa6da, 0xcf3c, 0xdac6, 0xe4c8, 0xf132, 0xd97f, 0xcc85, 0xf28b,
1830 +
            0xe771, 0x8e97, 0x9b6d, 0xa563, 0xb099, 0x76af, 0x6355, 0x5d5b, 0x48a1, 0x2147, 0x34bd,
1831 +
            0x0ab3, 0x1f49, 0x8356, 0x96ac, 0xa8a2, 0xbd58, 0xd4be, 0xc144, 0xff4a, 0xeab0, 0x2c86,
1832 +
            0x397c, 0x0772, 0x1288, 0x7b6e, 0x6e94, 0x509a, 0x4560, 0xda5a, 0xcfa0, 0xf1ae, 0xe454,
1833 +
            0x8db2, 0x9848, 0xa646, 0xb3bc, 0x758a, 0x6070, 0x5e7e, 0x4b84, 0x2262, 0x3798, 0x0996,
1834 +
            0x1c6c, 0x8073, 0x9589, 0xab87, 0xbe7d, 0xd79b, 0xc261, 0xfc6f, 0xe995, 0x2fa3, 0x3a59,
1835 +
            0x0457, 0x11ad, 0x784b, 0x6db1, 0x53bf, 0x4645, 0x6e08, 0x7bf2, 0x45fc, 0x5006, 0x39e0,
1836 +
            0x2c1a, 0x1214, 0x07ee, 0xc1d8, 0xd422, 0xea2c, 0xffd6, 0x9630, 0x83ca, 0xbdc4, 0xa83e,
1837 +
            0x3421, 0x21db, 0x1fd5, 0x0a2f, 0x63c9, 0x7633, 0x483d, 0x5dc7, 0x9bf1, 0x8e0b, 0xb005,
1838 +
            0xa5ff, 0xcc19, 0xd9e3, 0xe7ed, 0xf217, 0xb777, 0xa28d, 0x9c83, 0x8979, 0xe09f, 0xf565,
1839 +
            0xcb6b, 0xde91, 0x18a7, 0x0d5d, 0x3353, 0x26a9, 0x4f4f, 0x5ab5, 0x64bb, 0x7141, 0xed5e,
1840 +
            0xf8a4, 0xc6aa, 0xd350, 0xbab6, 0xaf4c, 0x9142, 0x84b8, 0x428e, 0x5774, 0x697a, 0x7c80,
1841 +
            0x1566, 0x009c, 0x3e92, 0x2b68, 0x0325, 0x16df, 0x28d1, 0x3d2b, 0x54cd, 0x4137, 0x7f39,
1842 +
            0x6ac3, 0xacf5, 0xb90f, 0x8701, 0x92fb, 0xfb1d, 0xeee7, 0xd0e9, 0xc513, 0x590c, 0x4cf6,
1843 +
            0x72f8, 0x6702, 0x0ee4, 0x1b1e, 0x2510, 0x30ea, 0xf6dc, 0xe326, 0xdd28, 0xc8d2, 0xa134,
1844 +
            0xb4ce, 0x8ac0, 0x9f3a,
1845 +
        ],
1846 +
        [
1847 +
            0x0000, 0xb13d, 0x67f3, 0xd6ce, 0xcfe6, 0x7edb, 0xa815, 0x1928, 0x9a45, 0x2b78, 0xfdb6,
1848 +
            0x4c8b, 0x55a3, 0xe49e, 0x3250, 0x836d, 0x3103, 0x803e, 0x56f0, 0xe7cd, 0xfee5, 0x4fd8,
1849 +
            0x9916, 0x282b, 0xab46, 0x1a7b, 0xccb5, 0x7d88, 0x64a0, 0xd59d, 0x0353, 0xb26e, 0x6206,
1850 +
            0xd33b, 0x05f5, 0xb4c8, 0xade0, 0x1cdd, 0xca13, 0x7b2e, 0xf843, 0x497e, 0x9fb0, 0x2e8d,
1851 +
            0x37a5, 0x8698, 0x5056, 0xe16b, 0x5305, 0xe238, 0x34f6, 0x85cb, 0x9ce3, 0x2dde, 0xfb10,
1852 +
            0x4a2d, 0xc940, 0x787d, 0xaeb3, 0x1f8e, 0x06a6, 0xb79b, 0x6155, 0xd068, 0xc40c, 0x7531,
1853 +
            0xa3ff, 0x12c2, 0x0bea, 0xbad7, 0x6c19, 0xdd24, 0x5e49, 0xef74, 0x39ba, 0x8887, 0x91af,
1854 +
            0x2092, 0xf65c, 0x4761, 0xf50f, 0x4432, 0x92fc, 0x23c1, 0x3ae9, 0x8bd4, 0x5d1a, 0xec27,
1855 +
            0x6f4a, 0xde77, 0x08b9, 0xb984, 0xa0ac, 0x1191, 0xc75f, 0x7662, 0xa60a, 0x1737, 0xc1f9,
1856 +
            0x70c4, 0x69ec, 0xd8d1, 0x0e1f, 0xbf22, 0x3c4f, 0x8d72, 0x5bbc, 0xea81, 0xf3a9, 0x4294,
1857 +
            0x945a, 0x2567, 0x9709, 0x2634, 0xf0fa, 0x41c7, 0x58ef, 0xe9d2, 0x3f1c, 0x8e21, 0x0d4c,
1858 +
            0xbc71, 0x6abf, 0xdb82, 0xc2aa, 0x7397, 0xa559, 0x1464, 0x8d91, 0x3cac, 0xea62, 0x5b5f,
1859 +
            0x4277, 0xf34a, 0x2584, 0x94b9, 0x17d4, 0xa6e9, 0x7027, 0xc11a, 0xd832, 0x690f, 0xbfc1,
1860 +
            0x0efc, 0xbc92, 0x0daf, 0xdb61, 0x6a5c, 0x7374, 0xc249, 0x1487, 0xa5ba, 0x26d7, 0x97ea,
1861 +
            0x4124, 0xf019, 0xe931, 0x580c, 0x8ec2, 0x3fff, 0xef97, 0x5eaa, 0x8864, 0x3959, 0x2071,
1862 +
            0x914c, 0x4782, 0xf6bf, 0x75d2, 0xc4ef, 0x1221, 0xa31c, 0xba34, 0x0b09, 0xddc7, 0x6cfa,
1863 +
            0xde94, 0x6fa9, 0xb967, 0x085a, 0x1172, 0xa04f, 0x7681, 0xc7bc, 0x44d1, 0xf5ec, 0x2322,
1864 +
            0x921f, 0x8b37, 0x3a0a, 0xecc4, 0x5df9, 0x499d, 0xf8a0, 0x2e6e, 0x9f53, 0x867b, 0x3746,
1865 +
            0xe188, 0x50b5, 0xd3d8, 0x62e5, 0xb42b, 0x0516, 0x1c3e, 0xad03, 0x7bcd, 0xcaf0, 0x789e,
1866 +
            0xc9a3, 0x1f6d, 0xae50, 0xb778, 0x0645, 0xd08b, 0x61b6, 0xe2db, 0x53e6, 0x8528, 0x3415,
1867 +
            0x2d3d, 0x9c00, 0x4ace, 0xfbf3, 0x2b9b, 0x9aa6, 0x4c68, 0xfd55, 0xe47d, 0x5540, 0x838e,
1868 +
            0x32b3, 0xb1de, 0x00e3, 0xd62d, 0x6710, 0x7e38, 0xcf05, 0x19cb, 0xa8f6, 0x1a98, 0xaba5,
1869 +
            0x7d6b, 0xcc56, 0xd57e, 0x6443, 0xb28d, 0x03b0, 0x80dd, 0x31e0, 0xe72e, 0x5613, 0x4f3b,
1870 +
            0xfe06, 0x28c8, 0x99f5,
1871 +
        ],
1872 +
        [
1873 +
            0x0000, 0x1eab, 0x3d56, 0x23fd, 0x7aac, 0x6407, 0x47fa, 0x5951, 0xf558, 0xebf3, 0xc80e,
1874 +
            0xd6a5, 0x8ff4, 0x915f, 0xb2a2, 0xac09, 0xef39, 0xf192, 0xd26f, 0xccc4, 0x9595, 0x8b3e,
1875 +
            0xa8c3, 0xb668, 0x1a61, 0x04ca, 0x2737, 0x399c, 0x60cd, 0x7e66, 0x5d9b, 0x4330, 0xdbfb,
1876 +
            0xc550, 0xe6ad, 0xf806, 0xa157, 0xbffc, 0x9c01, 0x82aa, 0x2ea3, 0x3008, 0x13f5, 0x0d5e,
1877 +
            0x540f, 0x4aa4, 0x6959, 0x77f2, 0x34c2, 0x2a69, 0x0994, 0x173f, 0x4e6e, 0x50c5, 0x7338,
1878 +
            0x6d93, 0xc19a, 0xdf31, 0xfccc, 0xe267, 0xbb36, 0xa59d, 0x8660, 0x98cb, 0xb27f, 0xacd4,
1879 +
            0x8f29, 0x9182, 0xc8d3, 0xd678, 0xf585, 0xeb2e, 0x4727, 0x598c, 0x7a71, 0x64da, 0x3d8b,
1880 +
            0x2320, 0x00dd, 0x1e76, 0x5d46, 0x43ed, 0x6010, 0x7ebb, 0x27ea, 0x3941, 0x1abc, 0x0417,
1881 +
            0xa81e, 0xb6b5, 0x9548, 0x8be3, 0xd2b2, 0xcc19, 0xefe4, 0xf14f, 0x6984, 0x772f, 0x54d2,
1882 +
            0x4a79, 0x1328, 0x0d83, 0x2e7e, 0x30d5, 0x9cdc, 0x8277, 0xa18a, 0xbf21, 0xe670, 0xf8db,
1883 +
            0xdb26, 0xc58d, 0x86bd, 0x9816, 0xbbeb, 0xa540, 0xfc11, 0xe2ba, 0xc147, 0xdfec, 0x73e5,
1884 +
            0x6d4e, 0x4eb3, 0x5018, 0x0949, 0x17e2, 0x341f, 0x2ab4, 0x6177, 0x7fdc, 0x5c21, 0x428a,
1885 +
            0x1bdb, 0x0570, 0x268d, 0x3826, 0x942f, 0x8a84, 0xa979, 0xb7d2, 0xee83, 0xf028, 0xd3d5,
1886 +
            0xcd7e, 0x8e4e, 0x90e5, 0xb318, 0xadb3, 0xf4e2, 0xea49, 0xc9b4, 0xd71f, 0x7b16, 0x65bd,
1887 +
            0x4640, 0x58eb, 0x01ba, 0x1f11, 0x3cec, 0x2247, 0xba8c, 0xa427, 0x87da, 0x9971, 0xc020,
1888 +
            0xde8b, 0xfd76, 0xe3dd, 0x4fd4, 0x517f, 0x7282, 0x6c29, 0x3578, 0x2bd3, 0x082e, 0x1685,
1889 +
            0x55b5, 0x4b1e, 0x68e3, 0x7648, 0x2f19, 0x31b2, 0x124f, 0x0ce4, 0xa0ed, 0xbe46, 0x9dbb,
1890 +
            0x8310, 0xda41, 0xc4ea, 0xe717, 0xf9bc, 0xd308, 0xcda3, 0xee5e, 0xf0f5, 0xa9a4, 0xb70f,
1891 +
            0x94f2, 0x8a59, 0x2650, 0x38fb, 0x1b06, 0x05ad, 0x5cfc, 0x4257, 0x61aa, 0x7f01, 0x3c31,
1892 +
            0x229a, 0x0167, 0x1fcc, 0x469d, 0x5836, 0x7bcb, 0x6560, 0xc969, 0xd7c2, 0xf43f, 0xea94,
1893 +
            0xb3c5, 0xad6e, 0x8e93, 0x9038, 0x08f3, 0x1658, 0x35a5, 0x2b0e, 0x725f, 0x6cf4, 0x4f09,
1894 +
            0x51a2, 0xfdab, 0xe300, 0xc0fd, 0xde56, 0x8707, 0x99ac, 0xba51, 0xa4fa, 0xe7ca, 0xf961,
1895 +
            0xda9c, 0xc437, 0x9d66, 0x83cd, 0xa030, 0xbe9b, 0x1292, 0x0c39, 0x2fc4, 0x316f, 0x683e,
1896 +
            0x7695, 0x5568, 0x4bc3,
1897 +
        ],
1898 +
        [
1899 +
            0x0000, 0xc2ee, 0x8055, 0x42bb, 0x0523, 0xc7cd, 0x8576, 0x4798, 0x0a46, 0xc8a8, 0x8a13,
1900 +
            0x48fd, 0x0f65, 0xcd8b, 0x8f30, 0x4dde, 0x148c, 0xd662, 0x94d9, 0x5637, 0x11af, 0xd341,
1901 +
            0x91fa, 0x5314, 0x1eca, 0xdc24, 0x9e9f, 0x5c71, 0x1be9, 0xd907, 0x9bbc, 0x5952, 0x2918,
1902 +
            0xebf6, 0xa94d, 0x6ba3, 0x2c3b, 0xeed5, 0xac6e, 0x6e80, 0x235e, 0xe1b0, 0xa30b, 0x61e5,
1903 +
            0x267d, 0xe493, 0xa628, 0x64c6, 0x3d94, 0xff7a, 0xbdc1, 0x7f2f, 0x38b7, 0xfa59, 0xb8e2,
1904 +
            0x7a0c, 0x37d2, 0xf53c, 0xb787, 0x7569, 0x32f1, 0xf01f, 0xb2a4, 0x704a, 0x5230, 0x90de,
1905 +
            0xd265, 0x108b, 0x5713, 0x95fd, 0xd746, 0x15a8, 0x5876, 0x9a98, 0xd823, 0x1acd, 0x5d55,
1906 +
            0x9fbb, 0xdd00, 0x1fee, 0x46bc, 0x8452, 0xc6e9, 0x0407, 0x439f, 0x8171, 0xc3ca, 0x0124,
1907 +
            0x4cfa, 0x8e14, 0xccaf, 0x0e41, 0x49d9, 0x8b37, 0xc98c, 0x0b62, 0x7b28, 0xb9c6, 0xfb7d,
1908 +
            0x3993, 0x7e0b, 0xbce5, 0xfe5e, 0x3cb0, 0x716e, 0xb380, 0xf13b, 0x33d5, 0x744d, 0xb6a3,
1909 +
            0xf418, 0x36f6, 0x6fa4, 0xad4a, 0xeff1, 0x2d1f, 0x6a87, 0xa869, 0xead2, 0x283c, 0x65e2,
1910 +
            0xa70c, 0xe5b7, 0x2759, 0x60c1, 0xa22f, 0xe094, 0x227a, 0xa460, 0x668e, 0x2435, 0xe6db,
1911 +
            0xa143, 0x63ad, 0x2116, 0xe3f8, 0xae26, 0x6cc8, 0x2e73, 0xec9d, 0xab05, 0x69eb, 0x2b50,
1912 +
            0xe9be, 0xb0ec, 0x7202, 0x30b9, 0xf257, 0xb5cf, 0x7721, 0x359a, 0xf774, 0xbaaa, 0x7844,
1913 +
            0x3aff, 0xf811, 0xbf89, 0x7d67, 0x3fdc, 0xfd32, 0x8d78, 0x4f96, 0x0d2d, 0xcfc3, 0x885b,
1914 +
            0x4ab5, 0x080e, 0xcae0, 0x873e, 0x45d0, 0x076b, 0xc585, 0x821d, 0x40f3, 0x0248, 0xc0a6,
1915 +
            0x99f4, 0x5b1a, 0x19a1, 0xdb4f, 0x9cd7, 0x5e39, 0x1c82, 0xde6c, 0x93b2, 0x515c, 0x13e7,
1916 +
            0xd109, 0x9691, 0x547f, 0x16c4, 0xd42a, 0xf650, 0x34be, 0x7605, 0xb4eb, 0xf373, 0x319d,
1917 +
            0x7326, 0xb1c8, 0xfc16, 0x3ef8, 0x7c43, 0xbead, 0xf935, 0x3bdb, 0x7960, 0xbb8e, 0xe2dc,
1918 +
            0x2032, 0x6289, 0xa067, 0xe7ff, 0x2511, 0x67aa, 0xa544, 0xe89a, 0x2a74, 0x68cf, 0xaa21,
1919 +
            0xedb9, 0x2f57, 0x6dec, 0xaf02, 0xdf48, 0x1da6, 0x5f1d, 0x9df3, 0xda6b, 0x1885, 0x5a3e,
1920 +
            0x98d0, 0xd50e, 0x17e0, 0x555b, 0x97b5, 0xd02d, 0x12c3, 0x5078, 0x9296, 0xcbc4, 0x092a,
1921 +
            0x4b91, 0x897f, 0xcee7, 0x0c09, 0x4eb2, 0x8c5c, 0xc182, 0x036c, 0x41d7, 0x8339, 0xc4a1,
1922 +
            0x064f, 0x44f4, 0x861a,
1923 +
        ],
1924 +
        [
1925 +
            0x0000, 0x4d49, 0x9a92, 0xd7db, 0x30ad, 0x7de4, 0xaa3f, 0xe776, 0x615a, 0x2c13, 0xfbc8,
1926 +
            0xb681, 0x51f7, 0x1cbe, 0xcb65, 0x862c, 0xc2b4, 0x8ffd, 0x5826, 0x156f, 0xf219, 0xbf50,
1927 +
            0x688b, 0x25c2, 0xa3ee, 0xeea7, 0x397c, 0x7435, 0x9343, 0xde0a, 0x09d1, 0x4498, 0x80e1,
1928 +
            0xcda8, 0x1a73, 0x573a, 0xb04c, 0xfd05, 0x2ade, 0x6797, 0xe1bb, 0xacf2, 0x7b29, 0x3660,
1929 +
            0xd116, 0x9c5f, 0x4b84, 0x06cd, 0x4255, 0x0f1c, 0xd8c7, 0x958e, 0x72f8, 0x3fb1, 0xe86a,
1930 +
            0xa523, 0x230f, 0x6e46, 0xb99d, 0xf4d4, 0x13a2, 0x5eeb, 0x8930, 0xc479, 0x044b, 0x4902,
1931 +
            0x9ed9, 0xd390, 0x34e6, 0x79af, 0xae74, 0xe33d, 0x6511, 0x2858, 0xff83, 0xb2ca, 0x55bc,
1932 +
            0x18f5, 0xcf2e, 0x8267, 0xc6ff, 0x8bb6, 0x5c6d, 0x1124, 0xf652, 0xbb1b, 0x6cc0, 0x2189,
1933 +
            0xa7a5, 0xeaec, 0x3d37, 0x707e, 0x9708, 0xda41, 0x0d9a, 0x40d3, 0x84aa, 0xc9e3, 0x1e38,
1934 +
            0x5371, 0xb407, 0xf94e, 0x2e95, 0x63dc, 0xe5f0, 0xa8b9, 0x7f62, 0x322b, 0xd55d, 0x9814,
1935 +
            0x4fcf, 0x0286, 0x461e, 0x0b57, 0xdc8c, 0x91c5, 0x76b3, 0x3bfa, 0xec21, 0xa168, 0x2744,
1936 +
            0x6a0d, 0xbdd6, 0xf09f, 0x17e9, 0x5aa0, 0x8d7b, 0xc032, 0x0896, 0x45df, 0x9204, 0xdf4d,
1937 +
            0x383b, 0x7572, 0xa2a9, 0xefe0, 0x69cc, 0x2485, 0xf35e, 0xbe17, 0x5961, 0x1428, 0xc3f3,
1938 +
            0x8eba, 0xca22, 0x876b, 0x50b0, 0x1df9, 0xfa8f, 0xb7c6, 0x601d, 0x2d54, 0xab78, 0xe631,
1939 +
            0x31ea, 0x7ca3, 0x9bd5, 0xd69c, 0x0147, 0x4c0e, 0x8877, 0xc53e, 0x12e5, 0x5fac, 0xb8da,
1940 +
            0xf593, 0x2248, 0x6f01, 0xe92d, 0xa464, 0x73bf, 0x3ef6, 0xd980, 0x94c9, 0x4312, 0x0e5b,
1941 +
            0x4ac3, 0x078a, 0xd051, 0x9d18, 0x7a6e, 0x3727, 0xe0fc, 0xadb5, 0x2b99, 0x66d0, 0xb10b,
1942 +
            0xfc42, 0x1b34, 0x567d, 0x81a6, 0xccef, 0x0cdd, 0x4194, 0x964f, 0xdb06, 0x3c70, 0x7139,
1943 +
            0xa6e2, 0xebab, 0x6d87, 0x20ce, 0xf715, 0xba5c, 0x5d2a, 0x1063, 0xc7b8, 0x8af1, 0xce69,
1944 +
            0x8320, 0x54fb, 0x19b2, 0xfec4, 0xb38d, 0x6456, 0x291f, 0xaf33, 0xe27a, 0x35a1, 0x78e8,
1945 +
            0x9f9e, 0xd2d7, 0x050c, 0x4845, 0x8c3c, 0xc175, 0x16ae, 0x5be7, 0xbc91, 0xf1d8, 0x2603,
1946 +
            0x6b4a, 0xed66, 0xa02f, 0x77f4, 0x3abd, 0xddcb, 0x9082, 0x4759, 0x0a10, 0x4e88, 0x03c1,
1947 +
            0xd41a, 0x9953, 0x7e25, 0x336c, 0xe4b7, 0xa9fe, 0x2fd2, 0x629b, 0xb540, 0xf809, 0x1f7f,
1948 +
            0x5236, 0x85ed, 0xc8a4,
1949 +
        ],
1950 +
        [
1951 +
            0x0000, 0x112c, 0x2258, 0x3374, 0x44b0, 0x559c, 0x66e8, 0x77c4, 0x8960, 0x984c, 0xab38,
1952 +
            0xba14, 0xcdd0, 0xdcfc, 0xef88, 0xfea4, 0x1749, 0x0665, 0x3511, 0x243d, 0x53f9, 0x42d5,
1953 +
            0x71a1, 0x608d, 0x9e29, 0x8f05, 0xbc71, 0xad5d, 0xda99, 0xcbb5, 0xf8c1, 0xe9ed, 0x2e92,
1954 +
            0x3fbe, 0x0cca, 0x1de6, 0x6a22, 0x7b0e, 0x487a, 0x5956, 0xa7f2, 0xb6de, 0x85aa, 0x9486,
1955 +
            0xe342, 0xf26e, 0xc11a, 0xd036, 0x39db, 0x28f7, 0x1b83, 0x0aaf, 0x7d6b, 0x6c47, 0x5f33,
1956 +
            0x4e1f, 0xb0bb, 0xa197, 0x92e3, 0x83cf, 0xf40b, 0xe527, 0xd653, 0xc77f, 0x5d24, 0x4c08,
1957 +
            0x7f7c, 0x6e50, 0x1994, 0x08b8, 0x3bcc, 0x2ae0, 0xd444, 0xc568, 0xf61c, 0xe730, 0x90f4,
1958 +
            0x81d8, 0xb2ac, 0xa380, 0x4a6d, 0x5b41, 0x6835, 0x7919, 0x0edd, 0x1ff1, 0x2c85, 0x3da9,
1959 +
            0xc30d, 0xd221, 0xe155, 0xf079, 0x87bd, 0x9691, 0xa5e5, 0xb4c9, 0x73b6, 0x629a, 0x51ee,
1960 +
            0x40c2, 0x3706, 0x262a, 0x155e, 0x0472, 0xfad6, 0xebfa, 0xd88e, 0xc9a2, 0xbe66, 0xaf4a,
1961 +
            0x9c3e, 0x8d12, 0x64ff, 0x75d3, 0x46a7, 0x578b, 0x204f, 0x3163, 0x0217, 0x133b, 0xed9f,
1962 +
            0xfcb3, 0xcfc7, 0xdeeb, 0xa92f, 0xb803, 0x8b77, 0x9a5b, 0xba48, 0xab64, 0x9810, 0x893c,
1963 +
            0xfef8, 0xefd4, 0xdca0, 0xcd8c, 0x3328, 0x2204, 0x1170, 0x005c, 0x7798, 0x66b4, 0x55c0,
1964 +
            0x44ec, 0xad01, 0xbc2d, 0x8f59, 0x9e75, 0xe9b1, 0xf89d, 0xcbe9, 0xdac5, 0x2461, 0x354d,
1965 +
            0x0639, 0x1715, 0x60d1, 0x71fd, 0x4289, 0x53a5, 0x94da, 0x85f6, 0xb682, 0xa7ae, 0xd06a,
1966 +
            0xc146, 0xf232, 0xe31e, 0x1dba, 0x0c96, 0x3fe2, 0x2ece, 0x590a, 0x4826, 0x7b52, 0x6a7e,
1967 +
            0x8393, 0x92bf, 0xa1cb, 0xb0e7, 0xc723, 0xd60f, 0xe57b, 0xf457, 0x0af3, 0x1bdf, 0x28ab,
1968 +
            0x3987, 0x4e43, 0x5f6f, 0x6c1b, 0x7d37, 0xe76c, 0xf640, 0xc534, 0xd418, 0xa3dc, 0xb2f0,
1969 +
            0x8184, 0x90a8, 0x6e0c, 0x7f20, 0x4c54, 0x5d78, 0x2abc, 0x3b90, 0x08e4, 0x19c8, 0xf025,
1970 +
            0xe109, 0xd27d, 0xc351, 0xb495, 0xa5b9, 0x96cd, 0x87e1, 0x7945, 0x6869, 0x5b1d, 0x4a31,
1971 +
            0x3df5, 0x2cd9, 0x1fad, 0x0e81, 0xc9fe, 0xd8d2, 0xeba6, 0xfa8a, 0x8d4e, 0x9c62, 0xaf16,
1972 +
            0xbe3a, 0x409e, 0x51b2, 0x62c6, 0x73ea, 0x042e, 0x1502, 0x2676, 0x375a, 0xdeb7, 0xcf9b,
1973 +
            0xfcef, 0xedc3, 0x9a07, 0x8b2b, 0xb85f, 0xa973, 0x57d7, 0x46fb, 0x758f, 0x64a3, 0x1367,
1974 +
            0x024b, 0x313f, 0x2013,
1975 +
        ],
1976 +
        [
1977 +
            0x0000, 0x7119, 0xe232, 0x932b, 0xc1ed, 0xb0f4, 0x23df, 0x52c6, 0x8653, 0xf74a, 0x6461,
1978 +
            0x1578, 0x47be, 0x36a7, 0xa58c, 0xd495, 0x092f, 0x7836, 0xeb1d, 0x9a04, 0xc8c2, 0xb9db,
1979 +
            0x2af0, 0x5be9, 0x8f7c, 0xfe65, 0x6d4e, 0x1c57, 0x4e91, 0x3f88, 0xaca3, 0xddba, 0x125e,
1980 +
            0x6347, 0xf06c, 0x8175, 0xd3b3, 0xa2aa, 0x3181, 0x4098, 0x940d, 0xe514, 0x763f, 0x0726,
1981 +
            0x55e0, 0x24f9, 0xb7d2, 0xc6cb, 0x1b71, 0x6a68, 0xf943, 0x885a, 0xda9c, 0xab85, 0x38ae,
1982 +
            0x49b7, 0x9d22, 0xec3b, 0x7f10, 0x0e09, 0x5ccf, 0x2dd6, 0xbefd, 0xcfe4, 0x24bc, 0x55a5,
1983 +
            0xc68e, 0xb797, 0xe551, 0x9448, 0x0763, 0x767a, 0xa2ef, 0xd3f6, 0x40dd, 0x31c4, 0x6302,
1984 +
            0x121b, 0x8130, 0xf029, 0x2d93, 0x5c8a, 0xcfa1, 0xbeb8, 0xec7e, 0x9d67, 0x0e4c, 0x7f55,
1985 +
            0xabc0, 0xdad9, 0x49f2, 0x38eb, 0x6a2d, 0x1b34, 0x881f, 0xf906, 0x36e2, 0x47fb, 0xd4d0,
1986 +
            0xa5c9, 0xf70f, 0x8616, 0x153d, 0x6424, 0xb0b1, 0xc1a8, 0x5283, 0x239a, 0x715c, 0x0045,
1987 +
            0x936e, 0xe277, 0x3fcd, 0x4ed4, 0xddff, 0xace6, 0xfe20, 0x8f39, 0x1c12, 0x6d0b, 0xb99e,
1988 +
            0xc887, 0x5bac, 0x2ab5, 0x7873, 0x096a, 0x9a41, 0xeb58, 0x4978, 0x3861, 0xab4a, 0xda53,
1989 +
            0x8895, 0xf98c, 0x6aa7, 0x1bbe, 0xcf2b, 0xbe32, 0x2d19, 0x5c00, 0x0ec6, 0x7fdf, 0xecf4,
1990 +
            0x9ded, 0x4057, 0x314e, 0xa265, 0xd37c, 0x81ba, 0xf0a3, 0x6388, 0x1291, 0xc604, 0xb71d,
1991 +
            0x2436, 0x552f, 0x07e9, 0x76f0, 0xe5db, 0x94c2, 0x5b26, 0x2a3f, 0xb914, 0xc80d, 0x9acb,
1992 +
            0xebd2, 0x78f9, 0x09e0, 0xdd75, 0xac6c, 0x3f47, 0x4e5e, 0x1c98, 0x6d81, 0xfeaa, 0x8fb3,
1993 +
            0x5209, 0x2310, 0xb03b, 0xc122, 0x93e4, 0xe2fd, 0x71d6, 0x00cf, 0xd45a, 0xa543, 0x3668,
1994 +
            0x4771, 0x15b7, 0x64ae, 0xf785, 0x869c, 0x6dc4, 0x1cdd, 0x8ff6, 0xfeef, 0xac29, 0xdd30,
1995 +
            0x4e1b, 0x3f02, 0xeb97, 0x9a8e, 0x09a5, 0x78bc, 0x2a7a, 0x5b63, 0xc848, 0xb951, 0x64eb,
1996 +
            0x15f2, 0x86d9, 0xf7c0, 0xa506, 0xd41f, 0x4734, 0x362d, 0xe2b8, 0x93a1, 0x008a, 0x7193,
1997 +
            0x2355, 0x524c, 0xc167, 0xb07e, 0x7f9a, 0x0e83, 0x9da8, 0xecb1, 0xbe77, 0xcf6e, 0x5c45,
1998 +
            0x2d5c, 0xf9c9, 0x88d0, 0x1bfb, 0x6ae2, 0x3824, 0x493d, 0xda16, 0xab0f, 0x76b5, 0x07ac,
1999 +
            0x9487, 0xe59e, 0xb758, 0xc641, 0x556a, 0x2473, 0xf0e6, 0x81ff, 0x12d4, 0x63cd, 0x310b,
2000 +
            0x4012, 0xd339, 0xa220,
2001 +
        ],
2002 +
        [
2003 +
            0x0000, 0x92f0, 0x2069, 0xb299, 0x40d2, 0xd222, 0x60bb, 0xf24b, 0x81a4, 0x1354, 0xa1cd,
2004 +
            0x333d, 0xc176, 0x5386, 0xe11f, 0x73ef, 0x06c1, 0x9431, 0x26a8, 0xb458, 0x4613, 0xd4e3,
2005 +
            0x667a, 0xf48a, 0x8765, 0x1595, 0xa70c, 0x35fc, 0xc7b7, 0x5547, 0xe7de, 0x752e, 0x0d82,
2006 +
            0x9f72, 0x2deb, 0xbf1b, 0x4d50, 0xdfa0, 0x6d39, 0xffc9, 0x8c26, 0x1ed6, 0xac4f, 0x3ebf,
2007 +
            0xccf4, 0x5e04, 0xec9d, 0x7e6d, 0x0b43, 0x99b3, 0x2b2a, 0xb9da, 0x4b91, 0xd961, 0x6bf8,
2008 +
            0xf908, 0x8ae7, 0x1817, 0xaa8e, 0x387e, 0xca35, 0x58c5, 0xea5c, 0x78ac, 0x1b04, 0x89f4,
2009 +
            0x3b6d, 0xa99d, 0x5bd6, 0xc926, 0x7bbf, 0xe94f, 0x9aa0, 0x0850, 0xbac9, 0x2839, 0xda72,
2010 +
            0x4882, 0xfa1b, 0x68eb, 0x1dc5, 0x8f35, 0x3dac, 0xaf5c, 0x5d17, 0xcfe7, 0x7d7e, 0xef8e,
2011 +
            0x9c61, 0x0e91, 0xbc08, 0x2ef8, 0xdcb3, 0x4e43, 0xfcda, 0x6e2a, 0x1686, 0x8476, 0x36ef,
2012 +
            0xa41f, 0x5654, 0xc4a4, 0x763d, 0xe4cd, 0x9722, 0x05d2, 0xb74b, 0x25bb, 0xd7f0, 0x4500,
2013 +
            0xf799, 0x6569, 0x1047, 0x82b7, 0x302e, 0xa2de, 0x5095, 0xc265, 0x70fc, 0xe20c, 0x91e3,
2014 +
            0x0313, 0xb18a, 0x237a, 0xd131, 0x43c1, 0xf158, 0x63a8, 0x3608, 0xa4f8, 0x1661, 0x8491,
2015 +
            0x76da, 0xe42a, 0x56b3, 0xc443, 0xb7ac, 0x255c, 0x97c5, 0x0535, 0xf77e, 0x658e, 0xd717,
2016 +
            0x45e7, 0x30c9, 0xa239, 0x10a0, 0x8250, 0x701b, 0xe2eb, 0x5072, 0xc282, 0xb16d, 0x239d,
2017 +
            0x9104, 0x03f4, 0xf1bf, 0x634f, 0xd1d6, 0x4326, 0x3b8a, 0xa97a, 0x1be3, 0x8913, 0x7b58,
2018 +
            0xe9a8, 0x5b31, 0xc9c1, 0xba2e, 0x28de, 0x9a47, 0x08b7, 0xfafc, 0x680c, 0xda95, 0x4865,
2019 +
            0x3d4b, 0xafbb, 0x1d22, 0x8fd2, 0x7d99, 0xef69, 0x5df0, 0xcf00, 0xbcef, 0x2e1f, 0x9c86,
2020 +
            0x0e76, 0xfc3d, 0x6ecd, 0xdc54, 0x4ea4, 0x2d0c, 0xbffc, 0x0d65, 0x9f95, 0x6dde, 0xff2e,
2021 +
            0x4db7, 0xdf47, 0xaca8, 0x3e58, 0x8cc1, 0x1e31, 0xec7a, 0x7e8a, 0xcc13, 0x5ee3, 0x2bcd,
2022 +
            0xb93d, 0x0ba4, 0x9954, 0x6b1f, 0xf9ef, 0x4b76, 0xd986, 0xaa69, 0x3899, 0x8a00, 0x18f0,
2023 +
            0xeabb, 0x784b, 0xcad2, 0x5822, 0x208e, 0xb27e, 0x00e7, 0x9217, 0x605c, 0xf2ac, 0x4035,
2024 +
            0xd2c5, 0xa12a, 0x33da, 0x8143, 0x13b3, 0xe1f8, 0x7308, 0xc191, 0x5361, 0x264f, 0xb4bf,
2025 +
            0x0626, 0x94d6, 0x669d, 0xf46d, 0x46f4, 0xd404, 0xa7eb, 0x351b, 0x8782, 0x1572, 0xe739,
2026 +
            0x75c9, 0xc750, 0x55a0,
2027 +
        ],
2028 +
        [
2029 +
            0x0000, 0x6c10, 0xd820, 0xb430, 0xb5c9, 0xd9d9, 0x6de9, 0x01f9, 0x6e1b, 0x020b, 0xb63b,
2030 +
            0xda2b, 0xdbd2, 0xb7c2, 0x03f2, 0x6fe2, 0xdc36, 0xb026, 0x0416, 0x6806, 0x69ff, 0x05ef,
2031 +
            0xb1df, 0xddcf, 0xb22d, 0xde3d, 0x6a0d, 0x061d, 0x07e4, 0x6bf4, 0xdfc4, 0xb3d4, 0xbde5,
2032 +
            0xd1f5, 0x65c5, 0x09d5, 0x082c, 0x643c, 0xd00c, 0xbc1c, 0xd3fe, 0xbfee, 0x0bde, 0x67ce,
2033 +
            0x6637, 0x0a27, 0xbe17, 0xd207, 0x61d3, 0x0dc3, 0xb9f3, 0xd5e3, 0xd41a, 0xb80a, 0x0c3a,
2034 +
            0x602a, 0x0fc8, 0x63d8, 0xd7e8, 0xbbf8, 0xba01, 0xd611, 0x6221, 0x0e31, 0x7e43, 0x1253,
2035 +
            0xa663, 0xca73, 0xcb8a, 0xa79a, 0x13aa, 0x7fba, 0x1058, 0x7c48, 0xc878, 0xa468, 0xa591,
2036 +
            0xc981, 0x7db1, 0x11a1, 0xa275, 0xce65, 0x7a55, 0x1645, 0x17bc, 0x7bac, 0xcf9c, 0xa38c,
2037 +
            0xcc6e, 0xa07e, 0x144e, 0x785e, 0x79a7, 0x15b7, 0xa187, 0xcd97, 0xc3a6, 0xafb6, 0x1b86,
2038 +
            0x7796, 0x766f, 0x1a7f, 0xae4f, 0xc25f, 0xadbd, 0xc1ad, 0x759d, 0x198d, 0x1874, 0x7464,
2039 +
            0xc054, 0xac44, 0x1f90, 0x7380, 0xc7b0, 0xaba0, 0xaa59, 0xc649, 0x7279, 0x1e69, 0x718b,
2040 +
            0x1d9b, 0xa9ab, 0xc5bb, 0xc442, 0xa852, 0x1c62, 0x7072, 0xfc86, 0x9096, 0x24a6, 0x48b6,
2041 +
            0x494f, 0x255f, 0x916f, 0xfd7f, 0x929d, 0xfe8d, 0x4abd, 0x26ad, 0x2754, 0x4b44, 0xff74,
2042 +
            0x9364, 0x20b0, 0x4ca0, 0xf890, 0x9480, 0x9579, 0xf969, 0x4d59, 0x2149, 0x4eab, 0x22bb,
2043 +
            0x968b, 0xfa9b, 0xfb62, 0x9772, 0x2342, 0x4f52, 0x4163, 0x2d73, 0x9943, 0xf553, 0xf4aa,
2044 +
            0x98ba, 0x2c8a, 0x409a, 0x2f78, 0x4368, 0xf758, 0x9b48, 0x9ab1, 0xf6a1, 0x4291, 0x2e81,
2045 +
            0x9d55, 0xf145, 0x4575, 0x2965, 0x289c, 0x448c, 0xf0bc, 0x9cac, 0xf34e, 0x9f5e, 0x2b6e,
2046 +
            0x477e, 0x4687, 0x2a97, 0x9ea7, 0xf2b7, 0x82c5, 0xeed5, 0x5ae5, 0x36f5, 0x370c, 0x5b1c,
2047 +
            0xef2c, 0x833c, 0xecde, 0x80ce, 0x34fe, 0x58ee, 0x5917, 0x3507, 0x8137, 0xed27, 0x5ef3,
2048 +
            0x32e3, 0x86d3, 0xeac3, 0xeb3a, 0x872a, 0x331a, 0x5f0a, 0x30e8, 0x5cf8, 0xe8c8, 0x84d8,
2049 +
            0x8521, 0xe931, 0x5d01, 0x3111, 0x3f20, 0x5330, 0xe700, 0x8b10, 0x8ae9, 0xe6f9, 0x52c9,
2050 +
            0x3ed9, 0x513b, 0x3d2b, 0x891b, 0xe50b, 0xe4f2, 0x88e2, 0x3cd2, 0x50c2, 0xe316, 0x8f06,
2051 +
            0x3b36, 0x5726, 0x56df, 0x3acf, 0x8eff, 0xe2ef, 0x8d0d, 0xe11d, 0x552d, 0x393d, 0x38c4,
2052 +
            0x54d4, 0xe0e4, 0x8cf4,
2053 +
        ],
2054 +
        [
2055 +
            0x0000, 0xfc85, 0xfc83, 0x0006, 0xfc8f, 0x000a, 0x000c, 0xfc89, 0xfc97, 0x0012, 0x0014,
2056 +
            0xfc91, 0x0018, 0xfc9d, 0xfc9b, 0x001e, 0xfca7, 0x0022, 0x0024, 0xfca1, 0x0028, 0xfcad,
2057 +
            0xfcab, 0x002e, 0x0030, 0xfcb5, 0xfcb3, 0x0036, 0xfcbf, 0x003a, 0x003c, 0xfcb9, 0xfcc7,
2058 +
            0x0042, 0x0044, 0xfcc1, 0x0048, 0xfccd, 0xfccb, 0x004e, 0x0050, 0xfcd5, 0xfcd3, 0x0056,
2059 +
            0xfcdf, 0x005a, 0x005c, 0xfcd9, 0x0060, 0xfce5, 0xfce3, 0x0066, 0xfcef, 0x006a, 0x006c,
2060 +
            0xfce9, 0xfcf7, 0x0072, 0x0074, 0xfcf1, 0x0078, 0xfcfd, 0xfcfb, 0x007e, 0xfc07, 0x0082,
2061 +
            0x0084, 0xfc01, 0x0088, 0xfc0d, 0xfc0b, 0x008e, 0x0090, 0xfc15, 0xfc13, 0x0096, 0xfc1f,
2062 +
            0x009a, 0x009c, 0xfc19, 0x00a0, 0xfc25, 0xfc23, 0x00a6, 0xfc2f, 0x00aa, 0x00ac, 0xfc29,
2063 +
            0xfc37, 0x00b2, 0x00b4, 0xfc31, 0x00b8, 0xfc3d, 0xfc3b, 0x00be, 0x00c0, 0xfc45, 0xfc43,
2064 +
            0x00c6, 0xfc4f, 0x00ca, 0x00cc, 0xfc49, 0xfc57, 0x00d2, 0x00d4, 0xfc51, 0x00d8, 0xfc5d,
2065 +
            0xfc5b, 0x00de, 0xfc67, 0x00e2, 0x00e4, 0xfc61, 0x00e8, 0xfc6d, 0xfc6b, 0x00ee, 0x00f0,
2066 +
            0xfc75, 0xfc73, 0x00f6, 0xfc7f, 0x00fa, 0x00fc, 0xfc79, 0xfd87, 0x0102, 0x0104, 0xfd81,
2067 +
            0x0108, 0xfd8d, 0xfd8b, 0x010e, 0x0110, 0xfd95, 0xfd93, 0x0116, 0xfd9f, 0x011a, 0x011c,
2068 +
            0xfd99, 0x0120, 0xfda5, 0xfda3, 0x0126, 0xfdaf, 0x012a, 0x012c, 0xfda9, 0xfdb7, 0x0132,
2069 +
            0x0134, 0xfdb1, 0x0138, 0xfdbd, 0xfdbb, 0x013e, 0x0140, 0xfdc5, 0xfdc3, 0x0146, 0xfdcf,
2070 +
            0x014a, 0x014c, 0xfdc9, 0xfdd7, 0x0152, 0x0154, 0xfdd1, 0x0158, 0xfddd, 0xfddb, 0x015e,
2071 +
            0xfde7, 0x0162, 0x0164, 0xfde1, 0x0168, 0xfded, 0xfdeb, 0x016e, 0x0170, 0xfdf5, 0xfdf3,
2072 +
            0x0176, 0xfdff, 0x017a, 0x017c, 0xfdf9, 0x0180, 0xfd05, 0xfd03, 0x0186, 0xfd0f, 0x018a,
2073 +
            0x018c, 0xfd09, 0xfd17, 0x0192, 0x0194, 0xfd11, 0x0198, 0xfd1d, 0xfd1b, 0x019e, 0xfd27,
2074 +
            0x01a2, 0x01a4, 0xfd21, 0x01a8, 0xfd2d, 0xfd2b, 0x01ae, 0x01b0, 0xfd35, 0xfd33, 0x01b6,
2075 +
            0xfd3f, 0x01ba, 0x01bc, 0xfd39, 0xfd47, 0x01c2, 0x01c4, 0xfd41, 0x01c8, 0xfd4d, 0xfd4b,
2076 +
            0x01ce, 0x01d0, 0xfd55, 0xfd53, 0x01d6, 0xfd5f, 0x01da, 0x01dc, 0xfd59, 0x01e0, 0xfd65,
2077 +
            0xfd63, 0x01e6, 0xfd6f, 0x01ea, 0x01ec, 0xfd69, 0xfd77, 0x01f2, 0x01f4, 0xfd71, 0x01f8,
2078 +
            0xfd7d, 0xfd7b, 0x01fe,
2079 +
        ],
2080 +
        [
2081 +
            0x0000, 0xfe87, 0xf887, 0x0600, 0xf487, 0x0a00, 0x0c00, 0xf287, 0xec87, 0x1200, 0x1400,
2082 +
            0xea87, 0x1800, 0xe687, 0xe087, 0x1e00, 0xdc87, 0x2200, 0x2400, 0xda87, 0x2800, 0xd687,
2083 +
            0xd087, 0x2e00, 0x3000, 0xce87, 0xc887, 0x3600, 0xc487, 0x3a00, 0x3c00, 0xc287, 0xbc87,
2084 +
            0x4200, 0x4400, 0xba87, 0x4800, 0xb687, 0xb087, 0x4e00, 0x5000, 0xae87, 0xa887, 0x5600,
2085 +
            0xa487, 0x5a00, 0x5c00, 0xa287, 0x6000, 0x9e87, 0x9887, 0x6600, 0x9487, 0x6a00, 0x6c00,
2086 +
            0x9287, 0x8c87, 0x7200, 0x7400, 0x8a87, 0x7800, 0x8687, 0x8087, 0x7e00, 0x7c87, 0x8200,
2087 +
            0x8400, 0x7a87, 0x8800, 0x7687, 0x7087, 0x8e00, 0x9000, 0x6e87, 0x6887, 0x9600, 0x6487,
2088 +
            0x9a00, 0x9c00, 0x6287, 0xa000, 0x5e87, 0x5887, 0xa600, 0x5487, 0xaa00, 0xac00, 0x5287,
2089 +
            0x4c87, 0xb200, 0xb400, 0x4a87, 0xb800, 0x4687, 0x4087, 0xbe00, 0xc000, 0x3e87, 0x3887,
2090 +
            0xc600, 0x3487, 0xca00, 0xcc00, 0x3287, 0x2c87, 0xd200, 0xd400, 0x2a87, 0xd800, 0x2687,
2091 +
            0x2087, 0xde00, 0x1c87, 0xe200, 0xe400, 0x1a87, 0xe800, 0x1687, 0x1087, 0xee00, 0xf000,
2092 +
            0x0e87, 0x0887, 0xf600, 0x0487, 0xfa00, 0xfc00, 0x0287, 0xf90e, 0x0789, 0x0189, 0xff0e,
2093 +
            0x0d89, 0xf30e, 0xf50e, 0x0b89, 0x1589, 0xeb0e, 0xed0e, 0x1389, 0xe10e, 0x1f89, 0x1989,
2094 +
            0xe70e, 0x2589, 0xdb0e, 0xdd0e, 0x2389, 0xd10e, 0x2f89, 0x2989, 0xd70e, 0xc90e, 0x3789,
2095 +
            0x3189, 0xcf0e, 0x3d89, 0xc30e, 0xc50e, 0x3b89, 0x4589, 0xbb0e, 0xbd0e, 0x4389, 0xb10e,
2096 +
            0x4f89, 0x4989, 0xb70e, 0xa90e, 0x5789, 0x5189, 0xaf0e, 0x5d89, 0xa30e, 0xa50e, 0x5b89,
2097 +
            0x990e, 0x6789, 0x6189, 0x9f0e, 0x6d89, 0x930e, 0x950e, 0x6b89, 0x7589, 0x8b0e, 0x8d0e,
2098 +
            0x7389, 0x810e, 0x7f89, 0x7989, 0x870e, 0x8589, 0x7b0e, 0x7d0e, 0x8389, 0x710e, 0x8f89,
2099 +
            0x8989, 0x770e, 0x690e, 0x9789, 0x9189, 0x6f0e, 0x9d89, 0x630e, 0x650e, 0x9b89, 0x590e,
2100 +
            0xa789, 0xa189, 0x5f0e, 0xad89, 0x530e, 0x550e, 0xab89, 0xb589, 0x4b0e, 0x4d0e, 0xb389,
2101 +
            0x410e, 0xbf89, 0xb989, 0x470e, 0x390e, 0xc789, 0xc189, 0x3f0e, 0xcd89, 0x330e, 0x350e,
2102 +
            0xcb89, 0xd589, 0x2b0e, 0x2d0e, 0xd389, 0x210e, 0xdf89, 0xd989, 0x270e, 0xe589, 0x1b0e,
2103 +
            0x1d0e, 0xe389, 0x110e, 0xef89, 0xe989, 0x170e, 0x090e, 0xf789, 0xf189, 0x0f0e, 0xfd89,
2104 +
            0x030e, 0x050e, 0xfb89,
2105 +
        ],
2106 +
    ];
2107 +
2108 +
    pub static CRC16_DECT_X_TABLE: [[u16; 256]; 16] = [
2109 +
        [
2110 +
            0x0000, 0x0589, 0x0b12, 0x0e9b, 0x1624, 0x13ad, 0x1d36, 0x18bf, 0x2c48, 0x29c1, 0x275a,
2111 +
            0x22d3, 0x3a6c, 0x3fe5, 0x317e, 0x34f7, 0x5890, 0x5d19, 0x5382, 0x560b, 0x4eb4, 0x4b3d,
2112 +
            0x45a6, 0x402f, 0x74d8, 0x7151, 0x7fca, 0x7a43, 0x62fc, 0x6775, 0x69ee, 0x6c67, 0xb120,
2113 +
            0xb4a9, 0xba32, 0xbfbb, 0xa704, 0xa28d, 0xac16, 0xa99f, 0x9d68, 0x98e1, 0x967a, 0x93f3,
2114 +
            0x8b4c, 0x8ec5, 0x805e, 0x85d7, 0xe9b0, 0xec39, 0xe2a2, 0xe72b, 0xff94, 0xfa1d, 0xf486,
2115 +
            0xf10f, 0xc5f8, 0xc071, 0xceea, 0xcb63, 0xd3dc, 0xd655, 0xd8ce, 0xdd47, 0x67c9, 0x6240,
2116 +
            0x6cdb, 0x6952, 0x71ed, 0x7464, 0x7aff, 0x7f76, 0x4b81, 0x4e08, 0x4093, 0x451a, 0x5da5,
2117 +
            0x582c, 0x56b7, 0x533e, 0x3f59, 0x3ad0, 0x344b, 0x31c2, 0x297d, 0x2cf4, 0x226f, 0x27e6,
2118 +
            0x1311, 0x1698, 0x1803, 0x1d8a, 0x0535, 0x00bc, 0x0e27, 0x0bae, 0xd6e9, 0xd360, 0xddfb,
2119 +
            0xd872, 0xc0cd, 0xc544, 0xcbdf, 0xce56, 0xfaa1, 0xff28, 0xf1b3, 0xf43a, 0xec85, 0xe90c,
2120 +
            0xe797, 0xe21e, 0x8e79, 0x8bf0, 0x856b, 0x80e2, 0x985d, 0x9dd4, 0x934f, 0x96c6, 0xa231,
2121 +
            0xa7b8, 0xa923, 0xacaa, 0xb415, 0xb19c, 0xbf07, 0xba8e, 0xcf92, 0xca1b, 0xc480, 0xc109,
2122 +
            0xd9b6, 0xdc3f, 0xd2a4, 0xd72d, 0xe3da, 0xe653, 0xe8c8, 0xed41, 0xf5fe, 0xf077, 0xfeec,
2123 +
            0xfb65, 0x9702, 0x928b, 0x9c10, 0x9999, 0x8126, 0x84af, 0x8a34, 0x8fbd, 0xbb4a, 0xbec3,
2124 +
            0xb058, 0xb5d1, 0xad6e, 0xa8e7, 0xa67c, 0xa3f5, 0x7eb2, 0x7b3b, 0x75a0, 0x7029, 0x6896,
2125 +
            0x6d1f, 0x6384, 0x660d, 0x52fa, 0x5773, 0x59e8, 0x5c61, 0x44de, 0x4157, 0x4fcc, 0x4a45,
2126 +
            0x2622, 0x23ab, 0x2d30, 0x28b9, 0x3006, 0x358f, 0x3b14, 0x3e9d, 0x0a6a, 0x0fe3, 0x0178,
2127 +
            0x04f1, 0x1c4e, 0x19c7, 0x175c, 0x12d5, 0xa85b, 0xadd2, 0xa349, 0xa6c0, 0xbe7f, 0xbbf6,
2128 +
            0xb56d, 0xb0e4, 0x8413, 0x819a, 0x8f01, 0x8a88, 0x9237, 0x97be, 0x9925, 0x9cac, 0xf0cb,
2129 +
            0xf542, 0xfbd9, 0xfe50, 0xe6ef, 0xe366, 0xedfd, 0xe874, 0xdc83, 0xd90a, 0xd791, 0xd218,
2130 +
            0xcaa7, 0xcf2e, 0xc1b5, 0xc43c, 0x197b, 0x1cf2, 0x1269, 0x17e0, 0x0f5f, 0x0ad6, 0x044d,
2131 +
            0x01c4, 0x3533, 0x30ba, 0x3e21, 0x3ba8, 0x2317, 0x269e, 0x2805, 0x2d8c, 0x41eb, 0x4462,
2132 +
            0x4af9, 0x4f70, 0x57cf, 0x5246, 0x5cdd, 0x5954, 0x6da3, 0x682a, 0x66b1, 0x6338, 0x7b87,
2133 +
            0x7e0e, 0x7095, 0x751c,
2134 +
        ],
2135 +
        [
2136 +
            0x0000, 0x9aad, 0x30d3, 0xaa7e, 0x61a6, 0xfb0b, 0x5175, 0xcbd8, 0xc34c, 0x59e1, 0xf39f,
2137 +
            0x6932, 0xa2ea, 0x3847, 0x9239, 0x0894, 0x8311, 0x19bc, 0xb3c2, 0x296f, 0xe2b7, 0x781a,
2138 +
            0xd264, 0x48c9, 0x405d, 0xdaf0, 0x708e, 0xea23, 0x21fb, 0xbb56, 0x1128, 0x8b85, 0x03ab,
2139 +
            0x9906, 0x3378, 0xa9d5, 0x620d, 0xf8a0, 0x52de, 0xc873, 0xc0e7, 0x5a4a, 0xf034, 0x6a99,
2140 +
            0xa141, 0x3bec, 0x9192, 0x0b3f, 0x80ba, 0x1a17, 0xb069, 0x2ac4, 0xe11c, 0x7bb1, 0xd1cf,
2141 +
            0x4b62, 0x43f6, 0xd95b, 0x7325, 0xe988, 0x2250, 0xb8fd, 0x1283, 0x882e, 0x0756, 0x9dfb,
2142 +
            0x3785, 0xad28, 0x66f0, 0xfc5d, 0x5623, 0xcc8e, 0xc41a, 0x5eb7, 0xf4c9, 0x6e64, 0xa5bc,
2143 +
            0x3f11, 0x956f, 0x0fc2, 0x8447, 0x1eea, 0xb494, 0x2e39, 0xe5e1, 0x7f4c, 0xd532, 0x4f9f,
2144 +
            0x470b, 0xdda6, 0x77d8, 0xed75, 0x26ad, 0xbc00, 0x167e, 0x8cd3, 0x04fd, 0x9e50, 0x342e,
2145 +
            0xae83, 0x655b, 0xfff6, 0x5588, 0xcf25, 0xc7b1, 0x5d1c, 0xf762, 0x6dcf, 0xa617, 0x3cba,
2146 +
            0x96c4, 0x0c69, 0x87ec, 0x1d41, 0xb73f, 0x2d92, 0xe64a, 0x7ce7, 0xd699, 0x4c34, 0x44a0,
2147 +
            0xde0d, 0x7473, 0xeede, 0x2506, 0xbfab, 0x15d5, 0x8f78, 0x0eac, 0x9401, 0x3e7f, 0xa4d2,
2148 +
            0x6f0a, 0xf5a7, 0x5fd9, 0xc574, 0xcde0, 0x574d, 0xfd33, 0x679e, 0xac46, 0x36eb, 0x9c95,
2149 +
            0x0638, 0x8dbd, 0x1710, 0xbd6e, 0x27c3, 0xec1b, 0x76b6, 0xdcc8, 0x4665, 0x4ef1, 0xd45c,
2150 +
            0x7e22, 0xe48f, 0x2f57, 0xb5fa, 0x1f84, 0x8529, 0x0d07, 0x97aa, 0x3dd4, 0xa779, 0x6ca1,
2151 +
            0xf60c, 0x5c72, 0xc6df, 0xce4b, 0x54e6, 0xfe98, 0x6435, 0xafed, 0x3540, 0x9f3e, 0x0593,
2152 +
            0x8e16, 0x14bb, 0xbec5, 0x2468, 0xefb0, 0x751d, 0xdf63, 0x45ce, 0x4d5a, 0xd7f7, 0x7d89,
2153 +
            0xe724, 0x2cfc, 0xb651, 0x1c2f, 0x8682, 0x09fa, 0x9357, 0x3929, 0xa384, 0x685c, 0xf2f1,
2154 +
            0x588f, 0xc222, 0xcab6, 0x501b, 0xfa65, 0x60c8, 0xab10, 0x31bd, 0x9bc3, 0x016e, 0x8aeb,
2155 +
            0x1046, 0xba38, 0x2095, 0xeb4d, 0x71e0, 0xdb9e, 0x4133, 0x49a7, 0xd30a, 0x7974, 0xe3d9,
2156 +
            0x2801, 0xb2ac, 0x18d2, 0x827f, 0x0a51, 0x90fc, 0x3a82, 0xa02f, 0x6bf7, 0xf15a, 0x5b24,
2157 +
            0xc189, 0xc91d, 0x53b0, 0xf9ce, 0x6363, 0xa8bb, 0x3216, 0x9868, 0x02c5, 0x8940, 0x13ed,
2158 +
            0xb993, 0x233e, 0xe8e6, 0x724b, 0xd835, 0x4298, 0x4a0c, 0xd0a1, 0x7adf, 0xe072, 0x2baa,
2159 +
            0xb107, 0x1b79, 0x81d4,
2160 +
        ],
2161 +
        [
2162 +
            0x0000, 0x1d58, 0x3ab0, 0x27e8, 0x7560, 0x6838, 0x4fd0, 0x5288, 0xeac0, 0xf798, 0xd070,
2163 +
            0xcd28, 0x9fa0, 0x82f8, 0xa510, 0xb848, 0xd009, 0xcd51, 0xeab9, 0xf7e1, 0xa569, 0xb831,
2164 +
            0x9fd9, 0x8281, 0x3ac9, 0x2791, 0x0079, 0x1d21, 0x4fa9, 0x52f1, 0x7519, 0x6841, 0xa59b,
2165 +
            0xb8c3, 0x9f2b, 0x8273, 0xd0fb, 0xcda3, 0xea4b, 0xf713, 0x4f5b, 0x5203, 0x75eb, 0x68b3,
2166 +
            0x3a3b, 0x2763, 0x008b, 0x1dd3, 0x7592, 0x68ca, 0x4f22, 0x527a, 0x00f2, 0x1daa, 0x3a42,
2167 +
            0x271a, 0x9f52, 0x820a, 0xa5e2, 0xb8ba, 0xea32, 0xf76a, 0xd082, 0xcdda, 0x4ebf, 0x53e7,
2168 +
            0x740f, 0x6957, 0x3bdf, 0x2687, 0x016f, 0x1c37, 0xa47f, 0xb927, 0x9ecf, 0x8397, 0xd11f,
2169 +
            0xcc47, 0xebaf, 0xf6f7, 0x9eb6, 0x83ee, 0xa406, 0xb95e, 0xebd6, 0xf68e, 0xd166, 0xcc3e,
2170 +
            0x7476, 0x692e, 0x4ec6, 0x539e, 0x0116, 0x1c4e, 0x3ba6, 0x26fe, 0xeb24, 0xf67c, 0xd194,
2171 +
            0xcccc, 0x9e44, 0x831c, 0xa4f4, 0xb9ac, 0x01e4, 0x1cbc, 0x3b54, 0x260c, 0x7484, 0x69dc,
2172 +
            0x4e34, 0x536c, 0x3b2d, 0x2675, 0x019d, 0x1cc5, 0x4e4d, 0x5315, 0x74fd, 0x69a5, 0xd1ed,
2173 +
            0xccb5, 0xeb5d, 0xf605, 0xa48d, 0xb9d5, 0x9e3d, 0x8365, 0x9d7e, 0x8026, 0xa7ce, 0xba96,
2174 +
            0xe81e, 0xf546, 0xd2ae, 0xcff6, 0x77be, 0x6ae6, 0x4d0e, 0x5056, 0x02de, 0x1f86, 0x386e,
2175 +
            0x2536, 0x4d77, 0x502f, 0x77c7, 0x6a9f, 0x3817, 0x254f, 0x02a7, 0x1fff, 0xa7b7, 0xbaef,
2176 +
            0x9d07, 0x805f, 0xd2d7, 0xcf8f, 0xe867, 0xf53f, 0x38e5, 0x25bd, 0x0255, 0x1f0d, 0x4d85,
2177 +
            0x50dd, 0x7735, 0x6a6d, 0xd225, 0xcf7d, 0xe895, 0xf5cd, 0xa745, 0xba1d, 0x9df5, 0x80ad,
2178 +
            0xe8ec, 0xf5b4, 0xd25c, 0xcf04, 0x9d8c, 0x80d4, 0xa73c, 0xba64, 0x022c, 0x1f74, 0x389c,
2179 +
            0x25c4, 0x774c, 0x6a14, 0x4dfc, 0x50a4, 0xd3c1, 0xce99, 0xe971, 0xf429, 0xa6a1, 0xbbf9,
2180 +
            0x9c11, 0x8149, 0x3901, 0x2459, 0x03b1, 0x1ee9, 0x4c61, 0x5139, 0x76d1, 0x6b89, 0x03c8,
2181 +
            0x1e90, 0x3978, 0x2420, 0x76a8, 0x6bf0, 0x4c18, 0x5140, 0xe908, 0xf450, 0xd3b8, 0xcee0,
2182 +
            0x9c68, 0x8130, 0xa6d8, 0xbb80, 0x765a, 0x6b02, 0x4cea, 0x51b2, 0x033a, 0x1e62, 0x398a,
2183 +
            0x24d2, 0x9c9a, 0x81c2, 0xa62a, 0xbb72, 0xe9fa, 0xf4a2, 0xd34a, 0xce12, 0xa653, 0xbb0b,
2184 +
            0x9ce3, 0x81bb, 0xd333, 0xce6b, 0xe983, 0xf4db, 0x4c93, 0x51cb, 0x7623, 0x6b7b, 0x39f3,
2185 +
            0x24ab, 0x0343, 0x1e1b,
2186 +
        ],
2187 +
        [
2188 +
            0x0000, 0x3f75, 0x7eea, 0x419f, 0xfdd4, 0xc2a1, 0x833e, 0xbc4b, 0xfe21, 0xc154, 0x80cb,
2189 +
            0xbfbe, 0x03f5, 0x3c80, 0x7d1f, 0x426a, 0xf9cb, 0xc6be, 0x8721, 0xb854, 0x041f, 0x3b6a,
2190 +
            0x7af5, 0x4580, 0x07ea, 0x389f, 0x7900, 0x4675, 0xfa3e, 0xc54b, 0x84d4, 0xbba1, 0xf61f,
2191 +
            0xc96a, 0x88f5, 0xb780, 0x0bcb, 0x34be, 0x7521, 0x4a54, 0x083e, 0x374b, 0x76d4, 0x49a1,
2192 +
            0xf5ea, 0xca9f, 0x8b00, 0xb475, 0x0fd4, 0x30a1, 0x713e, 0x4e4b, 0xf200, 0xcd75, 0x8cea,
2193 +
            0xb39f, 0xf1f5, 0xce80, 0x8f1f, 0xb06a, 0x0c21, 0x3354, 0x72cb, 0x4dbe, 0xe9b7, 0xd6c2,
2194 +
            0x975d, 0xa828, 0x1463, 0x2b16, 0x6a89, 0x55fc, 0x1796, 0x28e3, 0x697c, 0x5609, 0xea42,
2195 +
            0xd537, 0x94a8, 0xabdd, 0x107c, 0x2f09, 0x6e96, 0x51e3, 0xeda8, 0xd2dd, 0x9342, 0xac37,
2196 +
            0xee5d, 0xd128, 0x90b7, 0xafc2, 0x1389, 0x2cfc, 0x6d63, 0x5216, 0x1fa8, 0x20dd, 0x6142,
2197 +
            0x5e37, 0xe27c, 0xdd09, 0x9c96, 0xa3e3, 0xe189, 0xdefc, 0x9f63, 0xa016, 0x1c5d, 0x2328,
2198 +
            0x62b7, 0x5dc2, 0xe663, 0xd916, 0x9889, 0xa7fc, 0x1bb7, 0x24c2, 0x655d, 0x5a28, 0x1842,
2199 +
            0x2737, 0x66a8, 0x59dd, 0xe596, 0xdae3, 0x9b7c, 0xa409, 0xd6e7, 0xe992, 0xa80d, 0x9778,
2200 +
            0x2b33, 0x1446, 0x55d9, 0x6aac, 0x28c6, 0x17b3, 0x562c, 0x6959, 0xd512, 0xea67, 0xabf8,
2201 +
            0x948d, 0x2f2c, 0x1059, 0x51c6, 0x6eb3, 0xd2f8, 0xed8d, 0xac12, 0x9367, 0xd10d, 0xee78,
2202 +
            0xafe7, 0x9092, 0x2cd9, 0x13ac, 0x5233, 0x6d46, 0x20f8, 0x1f8d, 0x5e12, 0x6167, 0xdd2c,
2203 +
            0xe259, 0xa3c6, 0x9cb3, 0xded9, 0xe1ac, 0xa033, 0x9f46, 0x230d, 0x1c78, 0x5de7, 0x6292,
2204 +
            0xd933, 0xe646, 0xa7d9, 0x98ac, 0x24e7, 0x1b92, 0x5a0d, 0x6578, 0x2712, 0x1867, 0x59f8,
2205 +
            0x668d, 0xdac6, 0xe5b3, 0xa42c, 0x9b59, 0x3f50, 0x0025, 0x41ba, 0x7ecf, 0xc284, 0xfdf1,
2206 +
            0xbc6e, 0x831b, 0xc171, 0xfe04, 0xbf9b, 0x80ee, 0x3ca5, 0x03d0, 0x424f, 0x7d3a, 0xc69b,
2207 +
            0xf9ee, 0xb871, 0x8704, 0x3b4f, 0x043a, 0x45a5, 0x7ad0, 0x38ba, 0x07cf, 0x4650, 0x7925,
2208 +
            0xc56e, 0xfa1b, 0xbb84, 0x84f1, 0xc94f, 0xf63a, 0xb7a5, 0x88d0, 0x349b, 0x0bee, 0x4a71,
2209 +
            0x7504, 0x376e, 0x081b, 0x4984, 0x76f1, 0xcaba, 0xf5cf, 0xb450, 0x8b25, 0x3084, 0x0ff1,
2210 +
            0x4e6e, 0x711b, 0xcd50, 0xf225, 0xb3ba, 0x8ccf, 0xcea5, 0xf1d0, 0xb04f, 0x8f3a, 0x3371,
2211 +
            0x0c04, 0x4d9b, 0x72ee,
2212 +
        ],
2213 +
        [
2214 +
            0x0000, 0xa847, 0x5507, 0xfd40, 0xaa0e, 0x0249, 0xff09, 0x574e, 0x5195, 0xf9d2, 0x0492,
2215 +
            0xacd5, 0xfb9b, 0x53dc, 0xae9c, 0x06db, 0xa32a, 0x0b6d, 0xf62d, 0x5e6a, 0x0924, 0xa163,
2216 +
            0x5c23, 0xf464, 0xf2bf, 0x5af8, 0xa7b8, 0x0fff, 0x58b1, 0xf0f6, 0x0db6, 0xa5f1, 0x43dd,
2217 +
            0xeb9a, 0x16da, 0xbe9d, 0xe9d3, 0x4194, 0xbcd4, 0x1493, 0x1248, 0xba0f, 0x474f, 0xef08,
2218 +
            0xb846, 0x1001, 0xed41, 0x4506, 0xe0f7, 0x48b0, 0xb5f0, 0x1db7, 0x4af9, 0xe2be, 0x1ffe,
2219 +
            0xb7b9, 0xb162, 0x1925, 0xe465, 0x4c22, 0x1b6c, 0xb32b, 0x4e6b, 0xe62c, 0x87ba, 0x2ffd,
2220 +
            0xd2bd, 0x7afa, 0x2db4, 0x85f3, 0x78b3, 0xd0f4, 0xd62f, 0x7e68, 0x8328, 0x2b6f, 0x7c21,
2221 +
            0xd466, 0x2926, 0x8161, 0x2490, 0x8cd7, 0x7197, 0xd9d0, 0x8e9e, 0x26d9, 0xdb99, 0x73de,
2222 +
            0x7505, 0xdd42, 0x2002, 0x8845, 0xdf0b, 0x774c, 0x8a0c, 0x224b, 0xc467, 0x6c20, 0x9160,
2223 +
            0x3927, 0x6e69, 0xc62e, 0x3b6e, 0x9329, 0x95f2, 0x3db5, 0xc0f5, 0x68b2, 0x3ffc, 0x97bb,
2224 +
            0x6afb, 0xc2bc, 0x674d, 0xcf0a, 0x324a, 0x9a0d, 0xcd43, 0x6504, 0x9844, 0x3003, 0x36d8,
2225 +
            0x9e9f, 0x63df, 0xcb98, 0x9cd6, 0x3491, 0xc9d1, 0x6196, 0x0afd, 0xa2ba, 0x5ffa, 0xf7bd,
2226 +
            0xa0f3, 0x08b4, 0xf5f4, 0x5db3, 0x5b68, 0xf32f, 0x0e6f, 0xa628, 0xf166, 0x5921, 0xa461,
2227 +
            0x0c26, 0xa9d7, 0x0190, 0xfcd0, 0x5497, 0x03d9, 0xab9e, 0x56de, 0xfe99, 0xf842, 0x5005,
2228 +
            0xad45, 0x0502, 0x524c, 0xfa0b, 0x074b, 0xaf0c, 0x4920, 0xe167, 0x1c27, 0xb460, 0xe32e,
2229 +
            0x4b69, 0xb629, 0x1e6e, 0x18b5, 0xb0f2, 0x4db2, 0xe5f5, 0xb2bb, 0x1afc, 0xe7bc, 0x4ffb,
2230 +
            0xea0a, 0x424d, 0xbf0d, 0x174a, 0x4004, 0xe843, 0x1503, 0xbd44, 0xbb9f, 0x13d8, 0xee98,
2231 +
            0x46df, 0x1191, 0xb9d6, 0x4496, 0xecd1, 0x8d47, 0x2500, 0xd840, 0x7007, 0x2749, 0x8f0e,
2232 +
            0x724e, 0xda09, 0xdcd2, 0x7495, 0x89d5, 0x2192, 0x76dc, 0xde9b, 0x23db, 0x8b9c, 0x2e6d,
2233 +
            0x862a, 0x7b6a, 0xd32d, 0x8463, 0x2c24, 0xd164, 0x7923, 0x7ff8, 0xd7bf, 0x2aff, 0x82b8,
2234 +
            0xd5f6, 0x7db1, 0x80f1, 0x28b6, 0xce9a, 0x66dd, 0x9b9d, 0x33da, 0x6494, 0xccd3, 0x3193,
2235 +
            0x99d4, 0x9f0f, 0x3748, 0xca08, 0x624f, 0x3501, 0x9d46, 0x6006, 0xc841, 0x6db0, 0xc5f7,
2236 +
            0x38b7, 0x90f0, 0xc7be, 0x6ff9, 0x92b9, 0x3afe, 0x3c25, 0x9462, 0x6922, 0xc165, 0x962b,
2237 +
            0x3e6c, 0xc32c, 0x6b6b,
2238 +
        ],
2239 +
        [
2240 +
            0x0000, 0x15fa, 0x2bf4, 0x3e0e, 0x57e8, 0x4212, 0x7c1c, 0x69e6, 0xafd0, 0xba2a, 0x8424,
2241 +
            0x91de, 0xf838, 0xedc2, 0xd3cc, 0xc636, 0x5a29, 0x4fd3, 0x71dd, 0x6427, 0x0dc1, 0x183b,
2242 +
            0x2635, 0x33cf, 0xf5f9, 0xe003, 0xde0d, 0xcbf7, 0xa211, 0xb7eb, 0x89e5, 0x9c1f, 0xb452,
2243 +
            0xa1a8, 0x9fa6, 0x8a5c, 0xe3ba, 0xf640, 0xc84e, 0xddb4, 0x1b82, 0x0e78, 0x3076, 0x258c,
2244 +
            0x4c6a, 0x5990, 0x679e, 0x7264, 0xee7b, 0xfb81, 0xc58f, 0xd075, 0xb993, 0xac69, 0x9267,
2245 +
            0x879d, 0x41ab, 0x5451, 0x6a5f, 0x7fa5, 0x1643, 0x03b9, 0x3db7, 0x284d, 0x6d2d, 0x78d7,
2246 +
            0x46d9, 0x5323, 0x3ac5, 0x2f3f, 0x1131, 0x04cb, 0xc2fd, 0xd707, 0xe909, 0xfcf3, 0x9515,
2247 +
            0x80ef, 0xbee1, 0xab1b, 0x3704, 0x22fe, 0x1cf0, 0x090a, 0x60ec, 0x7516, 0x4b18, 0x5ee2,
2248 +
            0x98d4, 0x8d2e, 0xb320, 0xa6da, 0xcf3c, 0xdac6, 0xe4c8, 0xf132, 0xd97f, 0xcc85, 0xf28b,
2249 +
            0xe771, 0x8e97, 0x9b6d, 0xa563, 0xb099, 0x76af, 0x6355, 0x5d5b, 0x48a1, 0x2147, 0x34bd,
2250 +
            0x0ab3, 0x1f49, 0x8356, 0x96ac, 0xa8a2, 0xbd58, 0xd4be, 0xc144, 0xff4a, 0xeab0, 0x2c86,
2251 +
            0x397c, 0x0772, 0x1288, 0x7b6e, 0x6e94, 0x509a, 0x4560, 0xda5a, 0xcfa0, 0xf1ae, 0xe454,
2252 +
            0x8db2, 0x9848, 0xa646, 0xb3bc, 0x758a, 0x6070, 0x5e7e, 0x4b84, 0x2262, 0x3798, 0x0996,
2253 +
            0x1c6c, 0x8073, 0x9589, 0xab87, 0xbe7d, 0xd79b, 0xc261, 0xfc6f, 0xe995, 0x2fa3, 0x3a59,
2254 +
            0x0457, 0x11ad, 0x784b, 0x6db1, 0x53bf, 0x4645, 0x6e08, 0x7bf2, 0x45fc, 0x5006, 0x39e0,
2255 +
            0x2c1a, 0x1214, 0x07ee, 0xc1d8, 0xd422, 0xea2c, 0xffd6, 0x9630, 0x83ca, 0xbdc4, 0xa83e,
2256 +
            0x3421, 0x21db, 0x1fd5, 0x0a2f, 0x63c9, 0x7633, 0x483d, 0x5dc7, 0x9bf1, 0x8e0b, 0xb005,
2257 +
            0xa5ff, 0xcc19, 0xd9e3, 0xe7ed, 0xf217, 0xb777, 0xa28d, 0x9c83, 0x8979, 0xe09f, 0xf565,
2258 +
            0xcb6b, 0xde91, 0x18a7, 0x0d5d, 0x3353, 0x26a9, 0x4f4f, 0x5ab5, 0x64bb, 0x7141, 0xed5e,
2259 +
            0xf8a4, 0xc6aa, 0xd350, 0xbab6, 0xaf4c, 0x9142, 0x84b8, 0x428e, 0x5774, 0x697a, 0x7c80,
2260 +
            0x1566, 0x009c, 0x3e92, 0x2b68, 0x0325, 0x16df, 0x28d1, 0x3d2b, 0x54cd, 0x4137, 0x7f39,
2261 +
            0x6ac3, 0xacf5, 0xb90f, 0x8701, 0x92fb, 0xfb1d, 0xeee7, 0xd0e9, 0xc513, 0x590c, 0x4cf6,
2262 +
            0x72f8, 0x6702, 0x0ee4, 0x1b1e, 0x2510, 0x30ea, 0xf6dc, 0xe326, 0xdd28, 0xc8d2, 0xa134,
2263 +
            0xb4ce, 0x8ac0, 0x9f3a,
2264 +
        ],
2265 +
        [
2266 +
            0x0000, 0xb13d, 0x67f3, 0xd6ce, 0xcfe6, 0x7edb, 0xa815, 0x1928, 0x9a45, 0x2b78, 0xfdb6,
2267 +
            0x4c8b, 0x55a3, 0xe49e, 0x3250, 0x836d, 0x3103, 0x803e, 0x56f0, 0xe7cd, 0xfee5, 0x4fd8,
2268 +
            0x9916, 0x282b, 0xab46, 0x1a7b, 0xccb5, 0x7d88, 0x64a0, 0xd59d, 0x0353, 0xb26e, 0x6206,
2269 +
            0xd33b, 0x05f5, 0xb4c8, 0xade0, 0x1cdd, 0xca13, 0x7b2e, 0xf843, 0x497e, 0x9fb0, 0x2e8d,
2270 +
            0x37a5, 0x8698, 0x5056, 0xe16b, 0x5305, 0xe238, 0x34f6, 0x85cb, 0x9ce3, 0x2dde, 0xfb10,
2271 +
            0x4a2d, 0xc940, 0x787d, 0xaeb3, 0x1f8e, 0x06a6, 0xb79b, 0x6155, 0xd068, 0xc40c, 0x7531,
2272 +
            0xa3ff, 0x12c2, 0x0bea, 0xbad7, 0x6c19, 0xdd24, 0x5e49, 0xef74, 0x39ba, 0x8887, 0x91af,
2273 +
            0x2092, 0xf65c, 0x4761, 0xf50f, 0x4432, 0x92fc, 0x23c1, 0x3ae9, 0x8bd4, 0x5d1a, 0xec27,
2274 +
            0x6f4a, 0xde77, 0x08b9, 0xb984, 0xa0ac, 0x1191, 0xc75f, 0x7662, 0xa60a, 0x1737, 0xc1f9,
2275 +
            0x70c4, 0x69ec, 0xd8d1, 0x0e1f, 0xbf22, 0x3c4f, 0x8d72, 0x5bbc, 0xea81, 0xf3a9, 0x4294,
2276 +
            0x945a, 0x2567, 0x9709, 0x2634, 0xf0fa, 0x41c7, 0x58ef, 0xe9d2, 0x3f1c, 0x8e21, 0x0d4c,
2277 +
            0xbc71, 0x6abf, 0xdb82, 0xc2aa, 0x7397, 0xa559, 0x1464, 0x8d91, 0x3cac, 0xea62, 0x5b5f,
2278 +
            0x4277, 0xf34a, 0x2584, 0x94b9, 0x17d4, 0xa6e9, 0x7027, 0xc11a, 0xd832, 0x690f, 0xbfc1,
2279 +
            0x0efc, 0xbc92, 0x0daf, 0xdb61, 0x6a5c, 0x7374, 0xc249, 0x1487, 0xa5ba, 0x26d7, 0x97ea,
2280 +
            0x4124, 0xf019, 0xe931, 0x580c, 0x8ec2, 0x3fff, 0xef97, 0x5eaa, 0x8864, 0x3959, 0x2071,
2281 +
            0x914c, 0x4782, 0xf6bf, 0x75d2, 0xc4ef, 0x1221, 0xa31c, 0xba34, 0x0b09, 0xddc7, 0x6cfa,
2282 +
            0xde94, 0x6fa9, 0xb967, 0x085a, 0x1172, 0xa04f, 0x7681, 0xc7bc, 0x44d1, 0xf5ec, 0x2322,
2283 +
            0x921f, 0x8b37, 0x3a0a, 0xecc4, 0x5df9, 0x499d, 0xf8a0, 0x2e6e, 0x9f53, 0x867b, 0x3746,
2284 +
            0xe188, 0x50b5, 0xd3d8, 0x62e5, 0xb42b, 0x0516, 0x1c3e, 0xad03, 0x7bcd, 0xcaf0, 0x789e,
2285 +
            0xc9a3, 0x1f6d, 0xae50, 0xb778, 0x0645, 0xd08b, 0x61b6, 0xe2db, 0x53e6, 0x8528, 0x3415,
2286 +
            0x2d3d, 0x9c00, 0x4ace, 0xfbf3, 0x2b9b, 0x9aa6, 0x4c68, 0xfd55, 0xe47d, 0x5540, 0x838e,
2287 +
            0x32b3, 0xb1de, 0x00e3, 0xd62d, 0x6710, 0x7e38, 0xcf05, 0x19cb, 0xa8f6, 0x1a98, 0xaba5,
2288 +
            0x7d6b, 0xcc56, 0xd57e, 0x6443, 0xb28d, 0x03b0, 0x80dd, 0x31e0, 0xe72e, 0x5613, 0x4f3b,
2289 +
            0xfe06, 0x28c8, 0x99f5,
2290 +
        ],
2291 +
        [
2292 +
            0x0000, 0x1eab, 0x3d56, 0x23fd, 0x7aac, 0x6407, 0x47fa, 0x5951, 0xf558, 0xebf3, 0xc80e,
2293 +
            0xd6a5, 0x8ff4, 0x915f, 0xb2a2, 0xac09, 0xef39, 0xf192, 0xd26f, 0xccc4, 0x9595, 0x8b3e,
2294 +
            0xa8c3, 0xb668, 0x1a61, 0x04ca, 0x2737, 0x399c, 0x60cd, 0x7e66, 0x5d9b, 0x4330, 0xdbfb,
2295 +
            0xc550, 0xe6ad, 0xf806, 0xa157, 0xbffc, 0x9c01, 0x82aa, 0x2ea3, 0x3008, 0x13f5, 0x0d5e,
2296 +
            0x540f, 0x4aa4, 0x6959, 0x77f2, 0x34c2, 0x2a69, 0x0994, 0x173f, 0x4e6e, 0x50c5, 0x7338,
2297 +
            0x6d93, 0xc19a, 0xdf31, 0xfccc, 0xe267, 0xbb36, 0xa59d, 0x8660, 0x98cb, 0xb27f, 0xacd4,
2298 +
            0x8f29, 0x9182, 0xc8d3, 0xd678, 0xf585, 0xeb2e, 0x4727, 0x598c, 0x7a71, 0x64da, 0x3d8b,
2299 +
            0x2320, 0x00dd, 0x1e76, 0x5d46, 0x43ed, 0x6010, 0x7ebb, 0x27ea, 0x3941, 0x1abc, 0x0417,
2300 +
            0xa81e, 0xb6b5, 0x9548, 0x8be3, 0xd2b2, 0xcc19, 0xefe4, 0xf14f, 0x6984, 0x772f, 0x54d2,
2301 +
            0x4a79, 0x1328, 0x0d83, 0x2e7e, 0x30d5, 0x9cdc, 0x8277, 0xa18a, 0xbf21, 0xe670, 0xf8db,
2302 +
            0xdb26, 0xc58d, 0x86bd, 0x9816, 0xbbeb, 0xa540, 0xfc11, 0xe2ba, 0xc147, 0xdfec, 0x73e5,
2303 +
            0x6d4e, 0x4eb3, 0x5018, 0x0949, 0x17e2, 0x341f, 0x2ab4, 0x6177, 0x7fdc, 0x5c21, 0x428a,
2304 +
            0x1bdb, 0x0570, 0x268d, 0x3826, 0x942f, 0x8a84, 0xa979, 0xb7d2, 0xee83, 0xf028, 0xd3d5,
2305 +
            0xcd7e, 0x8e4e, 0x90e5, 0xb318, 0xadb3, 0xf4e2, 0xea49, 0xc9b4, 0xd71f, 0x7b16, 0x65bd,
2306 +
            0x4640, 0x58eb, 0x01ba, 0x1f11, 0x3cec, 0x2247, 0xba8c, 0xa427, 0x87da, 0x9971, 0xc020,
2307 +
            0xde8b, 0xfd76, 0xe3dd, 0x4fd4, 0x517f, 0x7282, 0x6c29, 0x3578, 0x2bd3, 0x082e, 0x1685,
2308 +
            0x55b5, 0x4b1e, 0x68e3, 0x7648, 0x2f19, 0x31b2, 0x124f, 0x0ce4, 0xa0ed, 0xbe46, 0x9dbb,
2309 +
            0x8310, 0xda41, 0xc4ea, 0xe717, 0xf9bc, 0xd308, 0xcda3, 0xee5e, 0xf0f5, 0xa9a4, 0xb70f,
2310 +
            0x94f2, 0x8a59, 0x2650, 0x38fb, 0x1b06, 0x05ad, 0x5cfc, 0x4257, 0x61aa, 0x7f01, 0x3c31,
2311 +
            0x229a, 0x0167, 0x1fcc, 0x469d, 0x5836, 0x7bcb, 0x6560, 0xc969, 0xd7c2, 0xf43f, 0xea94,
2312 +
            0xb3c5, 0xad6e, 0x8e93, 0x9038, 0x08f3, 0x1658, 0x35a5, 0x2b0e, 0x725f, 0x6cf4, 0x4f09,
2313 +
            0x51a2, 0xfdab, 0xe300, 0xc0fd, 0xde56, 0x8707, 0x99ac, 0xba51, 0xa4fa, 0xe7ca, 0xf961,
2314 +
            0xda9c, 0xc437, 0x9d66, 0x83cd, 0xa030, 0xbe9b, 0x1292, 0x0c39, 0x2fc4, 0x316f, 0x683e,
2315 +
            0x7695, 0x5568, 0x4bc3,
2316 +
        ],
2317 +
        [
2318 +
            0x0000, 0xc2ee, 0x8055, 0x42bb, 0x0523, 0xc7cd, 0x8576, 0x4798, 0x0a46, 0xc8a8, 0x8a13,
2319 +
            0x48fd, 0x0f65, 0xcd8b, 0x8f30, 0x4dde, 0x148c, 0xd662, 0x94d9, 0x5637, 0x11af, 0xd341,
2320 +
            0x91fa, 0x5314, 0x1eca, 0xdc24, 0x9e9f, 0x5c71, 0x1be9, 0xd907, 0x9bbc, 0x5952, 0x2918,
2321 +
            0xebf6, 0xa94d, 0x6ba3, 0x2c3b, 0xeed5, 0xac6e, 0x6e80, 0x235e, 0xe1b0, 0xa30b, 0x61e5,
2322 +
            0x267d, 0xe493, 0xa628, 0x64c6, 0x3d94, 0xff7a, 0xbdc1, 0x7f2f, 0x38b7, 0xfa59, 0xb8e2,
2323 +
            0x7a0c, 0x37d2, 0xf53c, 0xb787, 0x7569, 0x32f1, 0xf01f, 0xb2a4, 0x704a, 0x5230, 0x90de,
2324 +
            0xd265, 0x108b, 0x5713, 0x95fd, 0xd746, 0x15a8, 0x5876, 0x9a98, 0xd823, 0x1acd, 0x5d55,
2325 +
            0x9fbb, 0xdd00, 0x1fee, 0x46bc, 0x8452, 0xc6e9, 0x0407, 0x439f, 0x8171, 0xc3ca, 0x0124,
2326 +
            0x4cfa, 0x8e14, 0xccaf, 0x0e41, 0x49d9, 0x8b37, 0xc98c, 0x0b62, 0x7b28, 0xb9c6, 0xfb7d,
2327 +
            0x3993, 0x7e0b, 0xbce5, 0xfe5e, 0x3cb0, 0x716e, 0xb380, 0xf13b, 0x33d5, 0x744d, 0xb6a3,
2328 +
            0xf418, 0x36f6, 0x6fa4, 0xad4a, 0xeff1, 0x2d1f, 0x6a87, 0xa869, 0xead2, 0x283c, 0x65e2,
2329 +
            0xa70c, 0xe5b7, 0x2759, 0x60c1, 0xa22f, 0xe094, 0x227a, 0xa460, 0x668e, 0x2435, 0xe6db,
2330 +
            0xa143, 0x63ad, 0x2116, 0xe3f8, 0xae26, 0x6cc8, 0x2e73, 0xec9d, 0xab05, 0x69eb, 0x2b50,
2331 +
            0xe9be, 0xb0ec, 0x7202, 0x30b9, 0xf257, 0xb5cf, 0x7721, 0x359a, 0xf774, 0xbaaa, 0x7844,
2332 +
            0x3aff, 0xf811, 0xbf89, 0x7d67, 0x3fdc, 0xfd32, 0x8d78, 0x4f96, 0x0d2d, 0xcfc3, 0x885b,
2333 +
            0x4ab5, 0x080e, 0xcae0, 0x873e, 0x45d0, 0x076b, 0xc585, 0x821d, 0x40f3, 0x0248, 0xc0a6,
2334 +
            0x99f4, 0x5b1a, 0x19a1, 0xdb4f, 0x9cd7, 0x5e39, 0x1c82, 0xde6c, 0x93b2, 0x515c, 0x13e7,
2335 +
            0xd109, 0x9691, 0x547f, 0x16c4, 0xd42a, 0xf650, 0x34be, 0x7605, 0xb4eb, 0xf373, 0x319d,
2336 +
            0x7326, 0xb1c8, 0xfc16, 0x3ef8, 0x7c43, 0xbead, 0xf935, 0x3bdb, 0x7960, 0xbb8e, 0xe2dc,
2337 +
            0x2032, 0x6289, 0xa067, 0xe7ff, 0x2511, 0x67aa, 0xa544, 0xe89a, 0x2a74, 0x68cf, 0xaa21,
2338 +
            0xedb9, 0x2f57, 0x6dec, 0xaf02, 0xdf48, 0x1da6, 0x5f1d, 0x9df3, 0xda6b, 0x1885, 0x5a3e,
2339 +
            0x98d0, 0xd50e, 0x17e0, 0x555b, 0x97b5, 0xd02d, 0x12c3, 0x5078, 0x9296, 0xcbc4, 0x092a,
2340 +
            0x4b91, 0x897f, 0xcee7, 0x0c09, 0x4eb2, 0x8c5c, 0xc182, 0x036c, 0x41d7, 0x8339, 0xc4a1,
2341 +
            0x064f, 0x44f4, 0x861a,
2342 +
        ],
2343 +
        [
2344 +
            0x0000, 0x4d49, 0x9a92, 0xd7db, 0x30ad, 0x7de4, 0xaa3f, 0xe776, 0x615a, 0x2c13, 0xfbc8,
2345 +
            0xb681, 0x51f7, 0x1cbe, 0xcb65, 0x862c, 0xc2b4, 0x8ffd, 0x5826, 0x156f, 0xf219, 0xbf50,
2346 +
            0x688b, 0x25c2, 0xa3ee, 0xeea7, 0x397c, 0x7435, 0x9343, 0xde0a, 0x09d1, 0x4498, 0x80e1,
2347 +
            0xcda8, 0x1a73, 0x573a, 0xb04c, 0xfd05, 0x2ade, 0x6797, 0xe1bb, 0xacf2, 0x7b29, 0x3660,
2348 +
            0xd116, 0x9c5f, 0x4b84, 0x06cd, 0x4255, 0x0f1c, 0xd8c7, 0x958e, 0x72f8, 0x3fb1, 0xe86a,
2349 +
            0xa523, 0x230f, 0x6e46, 0xb99d, 0xf4d4, 0x13a2, 0x5eeb, 0x8930, 0xc479, 0x044b, 0x4902,
2350 +
            0x9ed9, 0xd390, 0x34e6, 0x79af, 0xae74, 0xe33d, 0x6511, 0x2858, 0xff83, 0xb2ca, 0x55bc,
2351 +
            0x18f5, 0xcf2e, 0x8267, 0xc6ff, 0x8bb6, 0x5c6d, 0x1124, 0xf652, 0xbb1b, 0x6cc0, 0x2189,
2352 +
            0xa7a5, 0xeaec, 0x3d37, 0x707e, 0x9708, 0xda41, 0x0d9a, 0x40d3, 0x84aa, 0xc9e3, 0x1e38,
2353 +
            0x5371, 0xb407, 0xf94e, 0x2e95, 0x63dc, 0xe5f0, 0xa8b9, 0x7f62, 0x322b, 0xd55d, 0x9814,
2354 +
            0x4fcf, 0x0286, 0x461e, 0x0b57, 0xdc8c, 0x91c5, 0x76b3, 0x3bfa, 0xec21, 0xa168, 0x2744,
2355 +
            0x6a0d, 0xbdd6, 0xf09f, 0x17e9, 0x5aa0, 0x8d7b, 0xc032, 0x0896, 0x45df, 0x9204, 0xdf4d,
2356 +
            0x383b, 0x7572, 0xa2a9, 0xefe0, 0x69cc, 0x2485, 0xf35e, 0xbe17, 0x5961, 0x1428, 0xc3f3,
2357 +
            0x8eba, 0xca22, 0x876b, 0x50b0, 0x1df9, 0xfa8f, 0xb7c6, 0x601d, 0x2d54, 0xab78, 0xe631,
2358 +
            0x31ea, 0x7ca3, 0x9bd5, 0xd69c, 0x0147, 0x4c0e, 0x8877, 0xc53e, 0x12e5, 0x5fac, 0xb8da,
2359 +
            0xf593, 0x2248, 0x6f01, 0xe92d, 0xa464, 0x73bf, 0x3ef6, 0xd980, 0x94c9, 0x4312, 0x0e5b,
2360 +
            0x4ac3, 0x078a, 0xd051, 0x9d18, 0x7a6e, 0x3727, 0xe0fc, 0xadb5, 0x2b99, 0x66d0, 0xb10b,
2361 +
            0xfc42, 0x1b34, 0x567d, 0x81a6, 0xccef, 0x0cdd, 0x4194, 0x964f, 0xdb06, 0x3c70, 0x7139,
2362 +
            0xa6e2, 0xebab, 0x6d87, 0x20ce, 0xf715, 0xba5c, 0x5d2a, 0x1063, 0xc7b8, 0x8af1, 0xce69,
2363 +
            0x8320, 0x54fb, 0x19b2, 0xfec4, 0xb38d, 0x6456, 0x291f, 0xaf33, 0xe27a, 0x35a1, 0x78e8,
2364 +
            0x9f9e, 0xd2d7, 0x050c, 0x4845, 0x8c3c, 0xc175, 0x16ae, 0x5be7, 0xbc91, 0xf1d8, 0x2603,
2365 +
            0x6b4a, 0xed66, 0xa02f, 0x77f4, 0x3abd, 0xddcb, 0x9082, 0x4759, 0x0a10, 0x4e88, 0x03c1,
2366 +
            0xd41a, 0x9953, 0x7e25, 0x336c, 0xe4b7, 0xa9fe, 0x2fd2, 0x629b, 0xb540, 0xf809, 0x1f7f,
2367 +
            0x5236, 0x85ed, 0xc8a4,
2368 +
        ],
2369 +
        [
2370 +
            0x0000, 0x112c, 0x2258, 0x3374, 0x44b0, 0x559c, 0x66e8, 0x77c4, 0x8960, 0x984c, 0xab38,
2371 +
            0xba14, 0xcdd0, 0xdcfc, 0xef88, 0xfea4, 0x1749, 0x0665, 0x3511, 0x243d, 0x53f9, 0x42d5,
2372 +
            0x71a1, 0x608d, 0x9e29, 0x8f05, 0xbc71, 0xad5d, 0xda99, 0xcbb5, 0xf8c1, 0xe9ed, 0x2e92,
2373 +
            0x3fbe, 0x0cca, 0x1de6, 0x6a22, 0x7b0e, 0x487a, 0x5956, 0xa7f2, 0xb6de, 0x85aa, 0x9486,
2374 +
            0xe342, 0xf26e, 0xc11a, 0xd036, 0x39db, 0x28f7, 0x1b83, 0x0aaf, 0x7d6b, 0x6c47, 0x5f33,
2375 +
            0x4e1f, 0xb0bb, 0xa197, 0x92e3, 0x83cf, 0xf40b, 0xe527, 0xd653, 0xc77f, 0x5d24, 0x4c08,
2376 +
            0x7f7c, 0x6e50, 0x1994, 0x08b8, 0x3bcc, 0x2ae0, 0xd444, 0xc568, 0xf61c, 0xe730, 0x90f4,
2377 +
            0x81d8, 0xb2ac, 0xa380, 0x4a6d, 0x5b41, 0x6835, 0x7919, 0x0edd, 0x1ff1, 0x2c85, 0x3da9,
2378 +
            0xc30d, 0xd221, 0xe155, 0xf079, 0x87bd, 0x9691, 0xa5e5, 0xb4c9, 0x73b6, 0x629a, 0x51ee,
2379 +
            0x40c2, 0x3706, 0x262a, 0x155e, 0x0472, 0xfad6, 0xebfa, 0xd88e, 0xc9a2, 0xbe66, 0xaf4a,
2380 +
            0x9c3e, 0x8d12, 0x64ff, 0x75d3, 0x46a7, 0x578b, 0x204f, 0x3163, 0x0217, 0x133b, 0xed9f,
2381 +
            0xfcb3, 0xcfc7, 0xdeeb, 0xa92f, 0xb803, 0x8b77, 0x9a5b, 0xba48, 0xab64, 0x9810, 0x893c,
2382 +
            0xfef8, 0xefd4, 0xdca0, 0xcd8c, 0x3328, 0x2204, 0x1170, 0x005c, 0x7798, 0x66b4, 0x55c0,
2383 +
            0x44ec, 0xad01, 0xbc2d, 0x8f59, 0x9e75, 0xe9b1, 0xf89d, 0xcbe9, 0xdac5, 0x2461, 0x354d,
2384 +
            0x0639, 0x1715, 0x60d1, 0x71fd, 0x4289, 0x53a5, 0x94da, 0x85f6, 0xb682, 0xa7ae, 0xd06a,
2385 +
            0xc146, 0xf232, 0xe31e, 0x1dba, 0x0c96, 0x3fe2, 0x2ece, 0x590a, 0x4826, 0x7b52, 0x6a7e,
2386 +
            0x8393, 0x92bf, 0xa1cb, 0xb0e7, 0xc723, 0xd60f, 0xe57b, 0xf457, 0x0af3, 0x1bdf, 0x28ab,
2387 +
            0x3987, 0x4e43, 0x5f6f, 0x6c1b, 0x7d37, 0xe76c, 0xf640, 0xc534, 0xd418, 0xa3dc, 0xb2f0,
2388 +
            0x8184, 0x90a8, 0x6e0c, 0x7f20, 0x4c54, 0x5d78, 0x2abc, 0x3b90, 0x08e4, 0x19c8, 0xf025,
2389 +
            0xe109, 0xd27d, 0xc351, 0xb495, 0xa5b9, 0x96cd, 0x87e1, 0x7945, 0x6869, 0x5b1d, 0x4a31,
2390 +
            0x3df5, 0x2cd9, 0x1fad, 0x0e81, 0xc9fe, 0xd8d2, 0xeba6, 0xfa8a, 0x8d4e, 0x9c62, 0xaf16,
2391 +
            0xbe3a, 0x409e, 0x51b2, 0x62c6, 0x73ea, 0x042e, 0x1502, 0x2676, 0x375a, 0xdeb7, 0xcf9b,
2392 +
            0xfcef, 0xedc3, 0x9a07, 0x8b2b, 0xb85f, 0xa973, 0x57d7, 0x46fb, 0x758f, 0x64a3, 0x1367,
2393 +
            0x024b, 0x313f, 0x2013,
2394 +
        ],
2395 +
        [
2396 +
            0x0000, 0x7119, 0xe232, 0x932b, 0xc1ed, 0xb0f4, 0x23df, 0x52c6, 0x8653, 0xf74a, 0x6461,
2397 +
            0x1578, 0x47be, 0x36a7, 0xa58c, 0xd495, 0x092f, 0x7836, 0xeb1d, 0x9a04, 0xc8c2, 0xb9db,
2398 +
            0x2af0, 0x5be9, 0x8f7c, 0xfe65, 0x6d4e, 0x1c57, 0x4e91, 0x3f88, 0xaca3, 0xddba, 0x125e,
2399 +
            0x6347, 0xf06c, 0x8175, 0xd3b3, 0xa2aa, 0x3181, 0x4098, 0x940d, 0xe514, 0x763f, 0x0726,
2400 +
            0x55e0, 0x24f9, 0xb7d2, 0xc6cb, 0x1b71, 0x6a68, 0xf943, 0x885a, 0xda9c, 0xab85, 0x38ae,
2401 +
            0x49b7, 0x9d22, 0xec3b, 0x7f10, 0x0e09, 0x5ccf, 0x2dd6, 0xbefd, 0xcfe4, 0x24bc, 0x55a5,
2402 +
            0xc68e, 0xb797, 0xe551, 0x9448, 0x0763, 0x767a, 0xa2ef, 0xd3f6, 0x40dd, 0x31c4, 0x6302,
2403 +
            0x121b, 0x8130, 0xf029, 0x2d93, 0x5c8a, 0xcfa1, 0xbeb8, 0xec7e, 0x9d67, 0x0e4c, 0x7f55,
2404 +
            0xabc0, 0xdad9, 0x49f2, 0x38eb, 0x6a2d, 0x1b34, 0x881f, 0xf906, 0x36e2, 0x47fb, 0xd4d0,
2405 +
            0xa5c9, 0xf70f, 0x8616, 0x153d, 0x6424, 0xb0b1, 0xc1a8, 0x5283, 0x239a, 0x715c, 0x0045,
2406 +
            0x936e, 0xe277, 0x3fcd, 0x4ed4, 0xddff, 0xace6, 0xfe20, 0x8f39, 0x1c12, 0x6d0b, 0xb99e,
2407 +
            0xc887, 0x5bac, 0x2ab5, 0x7873, 0x096a, 0x9a41, 0xeb58, 0x4978, 0x3861, 0xab4a, 0xda53,
2408 +
            0x8895, 0xf98c, 0x6aa7, 0x1bbe, 0xcf2b, 0xbe32, 0x2d19, 0x5c00, 0x0ec6, 0x7fdf, 0xecf4,
2409 +
            0x9ded, 0x4057, 0x314e, 0xa265, 0xd37c, 0x81ba, 0xf0a3, 0x6388, 0x1291, 0xc604, 0xb71d,
2410 +
            0x2436, 0x552f, 0x07e9, 0x76f0, 0xe5db, 0x94c2, 0x5b26, 0x2a3f, 0xb914, 0xc80d, 0x9acb,
2411 +
            0xebd2, 0x78f9, 0x09e0, 0xdd75, 0xac6c, 0x3f47, 0x4e5e, 0x1c98, 0x6d81, 0xfeaa, 0x8fb3,
2412 +
            0x5209, 0x2310, 0xb03b, 0xc122, 0x93e4, 0xe2fd, 0x71d6, 0x00cf, 0xd45a, 0xa543, 0x3668,
2413 +
            0x4771, 0x15b7, 0x64ae, 0xf785, 0x869c, 0x6dc4, 0x1cdd, 0x8ff6, 0xfeef, 0xac29, 0xdd30,
2414 +
            0x4e1b, 0x3f02, 0xeb97, 0x9a8e, 0x09a5, 0x78bc, 0x2a7a, 0x5b63, 0xc848, 0xb951, 0x64eb,
2415 +
            0x15f2, 0x86d9, 0xf7c0, 0xa506, 0xd41f, 0x4734, 0x362d, 0xe2b8, 0x93a1, 0x008a, 0x7193,
2416 +
            0x2355, 0x524c, 0xc167, 0xb07e, 0x7f9a, 0x0e83, 0x9da8, 0xecb1, 0xbe77, 0xcf6e, 0x5c45,
2417 +
            0x2d5c, 0xf9c9, 0x88d0, 0x1bfb, 0x6ae2, 0x3824, 0x493d, 0xda16, 0xab0f, 0x76b5, 0x07ac,
2418 +
            0x9487, 0xe59e, 0xb758, 0xc641, 0x556a, 0x2473, 0xf0e6, 0x81ff, 0x12d4, 0x63cd, 0x310b,
2419 +
            0x4012, 0xd339, 0xa220,
2420 +
        ],
2421 +
        [
2422 +
            0x0000, 0x92f0, 0x2069, 0xb299, 0x40d2, 0xd222, 0x60bb, 0xf24b, 0x81a4, 0x1354, 0xa1cd,
2423 +
            0x333d, 0xc176, 0x5386, 0xe11f, 0x73ef, 0x06c1, 0x9431, 0x26a8, 0xb458, 0x4613, 0xd4e3,
2424 +
            0x667a, 0xf48a, 0x8765, 0x1595, 0xa70c, 0x35fc, 0xc7b7, 0x5547, 0xe7de, 0x752e, 0x0d82,
2425 +
            0x9f72, 0x2deb, 0xbf1b, 0x4d50, 0xdfa0, 0x6d39, 0xffc9, 0x8c26, 0x1ed6, 0xac4f, 0x3ebf,
2426 +
            0xccf4, 0x5e04, 0xec9d, 0x7e6d, 0x0b43, 0x99b3, 0x2b2a, 0xb9da, 0x4b91, 0xd961, 0x6bf8,
2427 +
            0xf908, 0x8ae7, 0x1817, 0xaa8e, 0x387e, 0xca35, 0x58c5, 0xea5c, 0x78ac, 0x1b04, 0x89f4,
2428 +
            0x3b6d, 0xa99d, 0x5bd6, 0xc926, 0x7bbf, 0xe94f, 0x9aa0, 0x0850, 0xbac9, 0x2839, 0xda72,
2429 +
            0x4882, 0xfa1b, 0x68eb, 0x1dc5, 0x8f35, 0x3dac, 0xaf5c, 0x5d17, 0xcfe7, 0x7d7e, 0xef8e,
2430 +
            0x9c61, 0x0e91, 0xbc08, 0x2ef8, 0xdcb3, 0x4e43, 0xfcda, 0x6e2a, 0x1686, 0x8476, 0x36ef,
2431 +
            0xa41f, 0x5654, 0xc4a4, 0x763d, 0xe4cd, 0x9722, 0x05d2, 0xb74b, 0x25bb, 0xd7f0, 0x4500,
2432 +
            0xf799, 0x6569, 0x1047, 0x82b7, 0x302e, 0xa2de, 0x5095, 0xc265, 0x70fc, 0xe20c, 0x91e3,
2433 +
            0x0313, 0xb18a, 0x237a, 0xd131, 0x43c1, 0xf158, 0x63a8, 0x3608, 0xa4f8, 0x1661, 0x8491,
2434 +
            0x76da, 0xe42a, 0x56b3, 0xc443, 0xb7ac, 0x255c, 0x97c5, 0x0535, 0xf77e, 0x658e, 0xd717,
2435 +
            0x45e7, 0x30c9, 0xa239, 0x10a0, 0x8250, 0x701b, 0xe2eb, 0x5072, 0xc282, 0xb16d, 0x239d,
2436 +
            0x9104, 0x03f4, 0xf1bf, 0x634f, 0xd1d6, 0x4326, 0x3b8a, 0xa97a, 0x1be3, 0x8913, 0x7b58,
2437 +
            0xe9a8, 0x5b31, 0xc9c1, 0xba2e, 0x28de, 0x9a47, 0x08b7, 0xfafc, 0x680c, 0xda95, 0x4865,
2438 +
            0x3d4b, 0xafbb, 0x1d22, 0x8fd2, 0x7d99, 0xef69, 0x5df0, 0xcf00, 0xbcef, 0x2e1f, 0x9c86,
2439 +
            0x0e76, 0xfc3d, 0x6ecd, 0xdc54, 0x4ea4, 0x2d0c, 0xbffc, 0x0d65, 0x9f95, 0x6dde, 0xff2e,
2440 +
            0x4db7, 0xdf47, 0xaca8, 0x3e58, 0x8cc1, 0x1e31, 0xec7a, 0x7e8a, 0xcc13, 0x5ee3, 0x2bcd,
2441 +
            0xb93d, 0x0ba4, 0x9954, 0x6b1f, 0xf9ef, 0x4b76, 0xd986, 0xaa69, 0x3899, 0x8a00, 0x18f0,
2442 +
            0xeabb, 0x784b, 0xcad2, 0x5822, 0x208e, 0xb27e, 0x00e7, 0x9217, 0x605c, 0xf2ac, 0x4035,
2443 +
            0xd2c5, 0xa12a, 0x33da, 0x8143, 0x13b3, 0xe1f8, 0x7308, 0xc191, 0x5361, 0x264f, 0xb4bf,
2444 +
            0x0626, 0x94d6, 0x669d, 0xf46d, 0x46f4, 0xd404, 0xa7eb, 0x351b, 0x8782, 0x1572, 0xe739,
2445 +
            0x75c9, 0xc750, 0x55a0,
2446 +
        ],
2447 +
        [
2448 +
            0x0000, 0x6c10, 0xd820, 0xb430, 0xb5c9, 0xd9d9, 0x6de9, 0x01f9, 0x6e1b, 0x020b, 0xb63b,
2449 +
            0xda2b, 0xdbd2, 0xb7c2, 0x03f2, 0x6fe2, 0xdc36, 0xb026, 0x0416, 0x6806, 0x69ff, 0x05ef,
2450 +
            0xb1df, 0xddcf, 0xb22d, 0xde3d, 0x6a0d, 0x061d, 0x07e4, 0x6bf4, 0xdfc4, 0xb3d4, 0xbde5,
2451 +
            0xd1f5, 0x65c5, 0x09d5, 0x082c, 0x643c, 0xd00c, 0xbc1c, 0xd3fe, 0xbfee, 0x0bde, 0x67ce,
2452 +
            0x6637, 0x0a27, 0xbe17, 0xd207, 0x61d3, 0x0dc3, 0xb9f3, 0xd5e3, 0xd41a, 0xb80a, 0x0c3a,
2453 +
            0x602a, 0x0fc8, 0x63d8, 0xd7e8, 0xbbf8, 0xba01, 0xd611, 0x6221, 0x0e31, 0x7e43, 0x1253,
2454 +
            0xa663, 0xca73, 0xcb8a, 0xa79a, 0x13aa, 0x7fba, 0x1058, 0x7c48, 0xc878, 0xa468, 0xa591,
2455 +
            0xc981, 0x7db1, 0x11a1, 0xa275, 0xce65, 0x7a55, 0x1645, 0x17bc, 0x7bac, 0xcf9c, 0xa38c,
2456 +
            0xcc6e, 0xa07e, 0x144e, 0x785e, 0x79a7, 0x15b7, 0xa187, 0xcd97, 0xc3a6, 0xafb6, 0x1b86,
2457 +
            0x7796, 0x766f, 0x1a7f, 0xae4f, 0xc25f, 0xadbd, 0xc1ad, 0x759d, 0x198d, 0x1874, 0x7464,
2458 +
            0xc054, 0xac44, 0x1f90, 0x7380, 0xc7b0, 0xaba0, 0xaa59, 0xc649, 0x7279, 0x1e69, 0x718b,
2459 +
            0x1d9b, 0xa9ab, 0xc5bb, 0xc442, 0xa852, 0x1c62, 0x7072, 0xfc86, 0x9096, 0x24a6, 0x48b6,
2460 +
            0x494f, 0x255f, 0x916f, 0xfd7f, 0x929d, 0xfe8d, 0x4abd, 0x26ad, 0x2754, 0x4b44, 0xff74,
2461 +
            0x9364, 0x20b0, 0x4ca0, 0xf890, 0x9480, 0x9579, 0xf969, 0x4d59, 0x2149, 0x4eab, 0x22bb,
2462 +
            0x968b, 0xfa9b, 0xfb62, 0x9772, 0x2342, 0x4f52, 0x4163, 0x2d73, 0x9943, 0xf553, 0xf4aa,
2463 +
            0x98ba, 0x2c8a, 0x409a, 0x2f78, 0x4368, 0xf758, 0x9b48, 0x9ab1, 0xf6a1, 0x4291, 0x2e81,
2464 +
            0x9d55, 0xf145, 0x4575, 0x2965, 0x289c, 0x448c, 0xf0bc, 0x9cac, 0xf34e, 0x9f5e, 0x2b6e,
2465 +
            0x477e, 0x4687, 0x2a97, 0x9ea7, 0xf2b7, 0x82c5, 0xeed5, 0x5ae5, 0x36f5, 0x370c, 0x5b1c,
2466 +
            0xef2c, 0x833c, 0xecde, 0x80ce, 0x34fe, 0x58ee, 0x5917, 0x3507, 0x8137, 0xed27, 0x5ef3,
2467 +
            0x32e3, 0x86d3, 0xeac3, 0xeb3a, 0x872a, 0x331a, 0x5f0a, 0x30e8, 0x5cf8, 0xe8c8, 0x84d8,
2468 +
            0x8521, 0xe931, 0x5d01, 0x3111, 0x3f20, 0x5330, 0xe700, 0x8b10, 0x8ae9, 0xe6f9, 0x52c9,
2469 +
            0x3ed9, 0x513b, 0x3d2b, 0x891b, 0xe50b, 0xe4f2, 0x88e2, 0x3cd2, 0x50c2, 0xe316, 0x8f06,
2470 +
            0x3b36, 0x5726, 0x56df, 0x3acf, 0x8eff, 0xe2ef, 0x8d0d, 0xe11d, 0x552d, 0x393d, 0x38c4,
2471 +
            0x54d4, 0xe0e4, 0x8cf4,
2472 +
        ],
2473 +
        [
2474 +
            0x0000, 0xfc85, 0xfc83, 0x0006, 0xfc8f, 0x000a, 0x000c, 0xfc89, 0xfc97, 0x0012, 0x0014,
2475 +
            0xfc91, 0x0018, 0xfc9d, 0xfc9b, 0x001e, 0xfca7, 0x0022, 0x0024, 0xfca1, 0x0028, 0xfcad,
2476 +
            0xfcab, 0x002e, 0x0030, 0xfcb5, 0xfcb3, 0x0036, 0xfcbf, 0x003a, 0x003c, 0xfcb9, 0xfcc7,
2477 +
            0x0042, 0x0044, 0xfcc1, 0x0048, 0xfccd, 0xfccb, 0x004e, 0x0050, 0xfcd5, 0xfcd3, 0x0056,
2478 +
            0xfcdf, 0x005a, 0x005c, 0xfcd9, 0x0060, 0xfce5, 0xfce3, 0x0066, 0xfcef, 0x006a, 0x006c,
2479 +
            0xfce9, 0xfcf7, 0x0072, 0x0074, 0xfcf1, 0x0078, 0xfcfd, 0xfcfb, 0x007e, 0xfc07, 0x0082,
2480 +
            0x0084, 0xfc01, 0x0088, 0xfc0d, 0xfc0b, 0x008e, 0x0090, 0xfc15, 0xfc13, 0x0096, 0xfc1f,
2481 +
            0x009a, 0x009c, 0xfc19, 0x00a0, 0xfc25, 0xfc23, 0x00a6, 0xfc2f, 0x00aa, 0x00ac, 0xfc29,
2482 +
            0xfc37, 0x00b2, 0x00b4, 0xfc31, 0x00b8, 0xfc3d, 0xfc3b, 0x00be, 0x00c0, 0xfc45, 0xfc43,
2483 +
            0x00c6, 0xfc4f, 0x00ca, 0x00cc, 0xfc49, 0xfc57, 0x00d2, 0x00d4, 0xfc51, 0x00d8, 0xfc5d,
2484 +
            0xfc5b, 0x00de, 0xfc67, 0x00e2, 0x00e4, 0xfc61, 0x00e8, 0xfc6d, 0xfc6b, 0x00ee, 0x00f0,
2485 +
            0xfc75, 0xfc73, 0x00f6, 0xfc7f, 0x00fa, 0x00fc, 0xfc79, 0xfd87, 0x0102, 0x0104, 0xfd81,
2486 +
            0x0108, 0xfd8d, 0xfd8b, 0x010e, 0x0110, 0xfd95, 0xfd93, 0x0116, 0xfd9f, 0x011a, 0x011c,
2487 +
            0xfd99, 0x0120, 0xfda5, 0xfda3, 0x0126, 0xfdaf, 0x012a, 0x012c, 0xfda9, 0xfdb7, 0x0132,
2488 +
            0x0134, 0xfdb1, 0x0138, 0xfdbd, 0xfdbb, 0x013e, 0x0140, 0xfdc5, 0xfdc3, 0x0146, 0xfdcf,
2489 +
            0x014a, 0x014c, 0xfdc9, 0xfdd7, 0x0152, 0x0154, 0xfdd1, 0x0158, 0xfddd, 0xfddb, 0x015e,
2490 +
            0xfde7, 0x0162, 0x0164, 0xfde1, 0x0168, 0xfded, 0xfdeb, 0x016e, 0x0170, 0xfdf5, 0xfdf3,
2491 +
            0x0176, 0xfdff, 0x017a, 0x017c, 0xfdf9, 0x0180, 0xfd05, 0xfd03, 0x0186, 0xfd0f, 0x018a,
2492 +
            0x018c, 0xfd09, 0xfd17, 0x0192, 0x0194, 0xfd11, 0x0198, 0xfd1d, 0xfd1b, 0x019e, 0xfd27,
2493 +
            0x01a2, 0x01a4, 0xfd21, 0x01a8, 0xfd2d, 0xfd2b, 0x01ae, 0x01b0, 0xfd35, 0xfd33, 0x01b6,
2494 +
            0xfd3f, 0x01ba, 0x01bc, 0xfd39, 0xfd47, 0x01c2, 0x01c4, 0xfd41, 0x01c8, 0xfd4d, 0xfd4b,
2495 +
            0x01ce, 0x01d0, 0xfd55, 0xfd53, 0x01d6, 0xfd5f, 0x01da, 0x01dc, 0xfd59, 0x01e0, 0xfd65,
2496 +
            0xfd63, 0x01e6, 0xfd6f, 0x01ea, 0x01ec, 0xfd69, 0xfd77, 0x01f2, 0x01f4, 0xfd71, 0x01f8,
2497 +
            0xfd7d, 0xfd7b, 0x01fe,
2498 +
        ],
2499 +
        [
2500 +
            0x0000, 0xfe87, 0xf887, 0x0600, 0xf487, 0x0a00, 0x0c00, 0xf287, 0xec87, 0x1200, 0x1400,
2501 +
            0xea87, 0x1800, 0xe687, 0xe087, 0x1e00, 0xdc87, 0x2200, 0x2400, 0xda87, 0x2800, 0xd687,
2502 +
            0xd087, 0x2e00, 0x3000, 0xce87, 0xc887, 0x3600, 0xc487, 0x3a00, 0x3c00, 0xc287, 0xbc87,
2503 +
            0x4200, 0x4400, 0xba87, 0x4800, 0xb687, 0xb087, 0x4e00, 0x5000, 0xae87, 0xa887, 0x5600,
2504 +
            0xa487, 0x5a00, 0x5c00, 0xa287, 0x6000, 0x9e87, 0x9887, 0x6600, 0x9487, 0x6a00, 0x6c00,
2505 +
            0x9287, 0x8c87, 0x7200, 0x7400, 0x8a87, 0x7800, 0x8687, 0x8087, 0x7e00, 0x7c87, 0x8200,
2506 +
            0x8400, 0x7a87, 0x8800, 0x7687, 0x7087, 0x8e00, 0x9000, 0x6e87, 0x6887, 0x9600, 0x6487,
2507 +
            0x9a00, 0x9c00, 0x6287, 0xa000, 0x5e87, 0x5887, 0xa600, 0x5487, 0xaa00, 0xac00, 0x5287,
2508 +
            0x4c87, 0xb200, 0xb400, 0x4a87, 0xb800, 0x4687, 0x4087, 0xbe00, 0xc000, 0x3e87, 0x3887,
2509 +
            0xc600, 0x3487, 0xca00, 0xcc00, 0x3287, 0x2c87, 0xd200, 0xd400, 0x2a87, 0xd800, 0x2687,
2510 +
            0x2087, 0xde00, 0x1c87, 0xe200, 0xe400, 0x1a87, 0xe800, 0x1687, 0x1087, 0xee00, 0xf000,
2511 +
            0x0e87, 0x0887, 0xf600, 0x0487, 0xfa00, 0xfc00, 0x0287, 0xf90e, 0x0789, 0x0189, 0xff0e,
2512 +
            0x0d89, 0xf30e, 0xf50e, 0x0b89, 0x1589, 0xeb0e, 0xed0e, 0x1389, 0xe10e, 0x1f89, 0x1989,
2513 +
            0xe70e, 0x2589, 0xdb0e, 0xdd0e, 0x2389, 0xd10e, 0x2f89, 0x2989, 0xd70e, 0xc90e, 0x3789,
2514 +
            0x3189, 0xcf0e, 0x3d89, 0xc30e, 0xc50e, 0x3b89, 0x4589, 0xbb0e, 0xbd0e, 0x4389, 0xb10e,
2515 +
            0x4f89, 0x4989, 0xb70e, 0xa90e, 0x5789, 0x5189, 0xaf0e, 0x5d89, 0xa30e, 0xa50e, 0x5b89,
2516 +
            0x990e, 0x6789, 0x6189, 0x9f0e, 0x6d89, 0x930e, 0x950e, 0x6b89, 0x7589, 0x8b0e, 0x8d0e,
2517 +
            0x7389, 0x810e, 0x7f89, 0x7989, 0x870e, 0x8589, 0x7b0e, 0x7d0e, 0x8389, 0x710e, 0x8f89,
2518 +
            0x8989, 0x770e, 0x690e, 0x9789, 0x9189, 0x6f0e, 0x9d89, 0x630e, 0x650e, 0x9b89, 0x590e,
2519 +
            0xa789, 0xa189, 0x5f0e, 0xad89, 0x530e, 0x550e, 0xab89, 0xb589, 0x4b0e, 0x4d0e, 0xb389,
2520 +
            0x410e, 0xbf89, 0xb989, 0x470e, 0x390e, 0xc789, 0xc189, 0x3f0e, 0xcd89, 0x330e, 0x350e,
2521 +
            0xcb89, 0xd589, 0x2b0e, 0x2d0e, 0xd389, 0x210e, 0xdf89, 0xd989, 0x270e, 0xe589, 0x1b0e,
2522 +
            0x1d0e, 0xe389, 0x110e, 0xef89, 0xe989, 0x170e, 0x090e, 0xf789, 0xf189, 0x0f0e, 0xfd89,
2523 +
            0x030e, 0x050e, 0xfb89,
2524 +
        ],
2525 +
    ];
2526 +
2527 +
    pub static CRC16_DNP_TABLE: [[u16; 256]; 16] = [
2528 +
        [
2529 +
            0x0000, 0x365e, 0x6cbc, 0x5ae2, 0xd978, 0xef26, 0xb5c4, 0x839a, 0xff89, 0xc9d7, 0x9335,
2530 +
            0xa56b, 0x26f1, 0x10af, 0x4a4d, 0x7c13, 0xb26b, 0x8435, 0xded7, 0xe889, 0x6b13, 0x5d4d,
2531 +
            0x07af, 0x31f1, 0x4de2, 0x7bbc, 0x215e, 0x1700, 0x949a, 0xa2c4, 0xf826, 0xce78, 0x29af,
2532 +
            0x1ff1, 0x4513, 0x734d, 0xf0d7, 0xc689, 0x9c6b, 0xaa35, 0xd626, 0xe078, 0xba9a, 0x8cc4,
2533 +
            0x0f5e, 0x3900, 0x63e2, 0x55bc, 0x9bc4, 0xad9a, 0xf778, 0xc126, 0x42bc, 0x74e2, 0x2e00,
2534 +
            0x185e, 0x644d, 0x5213, 0x08f1, 0x3eaf, 0xbd35, 0x8b6b, 0xd189, 0xe7d7, 0x535e, 0x6500,
2535 +
            0x3fe2, 0x09bc, 0x8a26, 0xbc78, 0xe69a, 0xd0c4, 0xacd7, 0x9a89, 0xc06b, 0xf635, 0x75af,
2536 +
            0x43f1, 0x1913, 0x2f4d, 0xe135, 0xd76b, 0x8d89, 0xbbd7, 0x384d, 0x0e13, 0x54f1, 0x62af,
2537 +
            0x1ebc, 0x28e2, 0x7200, 0x445e, 0xc7c4, 0xf19a, 0xab78, 0x9d26, 0x7af1, 0x4caf, 0x164d,
2538 +
            0x2013, 0xa389, 0x95d7, 0xcf35, 0xf96b, 0x8578, 0xb326, 0xe9c4, 0xdf9a, 0x5c00, 0x6a5e,
2539 +
            0x30bc, 0x06e2, 0xc89a, 0xfec4, 0xa426, 0x9278, 0x11e2, 0x27bc, 0x7d5e, 0x4b00, 0x3713,
2540 +
            0x014d, 0x5baf, 0x6df1, 0xee6b, 0xd835, 0x82d7, 0xb489, 0xa6bc, 0x90e2, 0xca00, 0xfc5e,
2541 +
            0x7fc4, 0x499a, 0x1378, 0x2526, 0x5935, 0x6f6b, 0x3589, 0x03d7, 0x804d, 0xb613, 0xecf1,
2542 +
            0xdaaf, 0x14d7, 0x2289, 0x786b, 0x4e35, 0xcdaf, 0xfbf1, 0xa113, 0x974d, 0xeb5e, 0xdd00,
2543 +
            0x87e2, 0xb1bc, 0x3226, 0x0478, 0x5e9a, 0x68c4, 0x8f13, 0xb94d, 0xe3af, 0xd5f1, 0x566b,
2544 +
            0x6035, 0x3ad7, 0x0c89, 0x709a, 0x46c4, 0x1c26, 0x2a78, 0xa9e2, 0x9fbc, 0xc55e, 0xf300,
2545 +
            0x3d78, 0x0b26, 0x51c4, 0x679a, 0xe400, 0xd25e, 0x88bc, 0xbee2, 0xc2f1, 0xf4af, 0xae4d,
2546 +
            0x9813, 0x1b89, 0x2dd7, 0x7735, 0x416b, 0xf5e2, 0xc3bc, 0x995e, 0xaf00, 0x2c9a, 0x1ac4,
2547 +
            0x4026, 0x7678, 0x0a6b, 0x3c35, 0x66d7, 0x5089, 0xd313, 0xe54d, 0xbfaf, 0x89f1, 0x4789,
2548 +
            0x71d7, 0x2b35, 0x1d6b, 0x9ef1, 0xa8af, 0xf24d, 0xc413, 0xb800, 0x8e5e, 0xd4bc, 0xe2e2,
2549 +
            0x6178, 0x5726, 0x0dc4, 0x3b9a, 0xdc4d, 0xea13, 0xb0f1, 0x86af, 0x0535, 0x336b, 0x6989,
2550 +
            0x5fd7, 0x23c4, 0x159a, 0x4f78, 0x7926, 0xfabc, 0xcce2, 0x9600, 0xa05e, 0x6e26, 0x5878,
2551 +
            0x029a, 0x34c4, 0xb75e, 0x8100, 0xdbe2, 0xedbc, 0x91af, 0xa7f1, 0xfd13, 0xcb4d, 0x48d7,
2552 +
            0x7e89, 0x246b, 0x1235,
2553 +
        ],
2554 +
        [
2555 +
            0x0000, 0xab4e, 0x1be5, 0xb0ab, 0x37ca, 0x9c84, 0x2c2f, 0x8761, 0x6f94, 0xc4da, 0x7471,
2556 +
            0xdf3f, 0x585e, 0xf310, 0x43bb, 0xe8f5, 0xdf28, 0x7466, 0xc4cd, 0x6f83, 0xe8e2, 0x43ac,
2557 +
            0xf307, 0x5849, 0xb0bc, 0x1bf2, 0xab59, 0x0017, 0x8776, 0x2c38, 0x9c93, 0x37dd, 0xf329,
2558 +
            0x5867, 0xe8cc, 0x4382, 0xc4e3, 0x6fad, 0xdf06, 0x7448, 0x9cbd, 0x37f3, 0x8758, 0x2c16,
2559 +
            0xab77, 0x0039, 0xb092, 0x1bdc, 0x2c01, 0x874f, 0x37e4, 0x9caa, 0x1bcb, 0xb085, 0x002e,
2560 +
            0xab60, 0x4395, 0xe8db, 0x5870, 0xf33e, 0x745f, 0xdf11, 0x6fba, 0xc4f4, 0xab2b, 0x0065,
2561 +
            0xb0ce, 0x1b80, 0x9ce1, 0x37af, 0x8704, 0x2c4a, 0xc4bf, 0x6ff1, 0xdf5a, 0x7414, 0xf375,
2562 +
            0x583b, 0xe890, 0x43de, 0x7403, 0xdf4d, 0x6fe6, 0xc4a8, 0x43c9, 0xe887, 0x582c, 0xf362,
2563 +
            0x1b97, 0xb0d9, 0x0072, 0xab3c, 0x2c5d, 0x8713, 0x37b8, 0x9cf6, 0x5802, 0xf34c, 0x43e7,
2564 +
            0xe8a9, 0x6fc8, 0xc486, 0x742d, 0xdf63, 0x3796, 0x9cd8, 0x2c73, 0x873d, 0x005c, 0xab12,
2565 +
            0x1bb9, 0xb0f7, 0x872a, 0x2c64, 0x9ccf, 0x3781, 0xb0e0, 0x1bae, 0xab05, 0x004b, 0xe8be,
2566 +
            0x43f0, 0xf35b, 0x5815, 0xdf74, 0x743a, 0xc491, 0x6fdf, 0x1b2f, 0xb061, 0x00ca, 0xab84,
2567 +
            0x2ce5, 0x87ab, 0x3700, 0x9c4e, 0x74bb, 0xdff5, 0x6f5e, 0xc410, 0x4371, 0xe83f, 0x5894,
2568 +
            0xf3da, 0xc407, 0x6f49, 0xdfe2, 0x74ac, 0xf3cd, 0x5883, 0xe828, 0x4366, 0xab93, 0x00dd,
2569 +
            0xb076, 0x1b38, 0x9c59, 0x3717, 0x87bc, 0x2cf2, 0xe806, 0x4348, 0xf3e3, 0x58ad, 0xdfcc,
2570 +
            0x7482, 0xc429, 0x6f67, 0x8792, 0x2cdc, 0x9c77, 0x3739, 0xb058, 0x1b16, 0xabbd, 0x00f3,
2571 +
            0x372e, 0x9c60, 0x2ccb, 0x8785, 0x00e4, 0xabaa, 0x1b01, 0xb04f, 0x58ba, 0xf3f4, 0x435f,
2572 +
            0xe811, 0x6f70, 0xc43e, 0x7495, 0xdfdb, 0xb004, 0x1b4a, 0xabe1, 0x00af, 0x87ce, 0x2c80,
2573 +
            0x9c2b, 0x3765, 0xdf90, 0x74de, 0xc475, 0x6f3b, 0xe85a, 0x4314, 0xf3bf, 0x58f1, 0x6f2c,
2574 +
            0xc462, 0x74c9, 0xdf87, 0x58e6, 0xf3a8, 0x4303, 0xe84d, 0x00b8, 0xabf6, 0x1b5d, 0xb013,
2575 +
            0x3772, 0x9c3c, 0x2c97, 0x87d9, 0x432d, 0xe863, 0x58c8, 0xf386, 0x74e7, 0xdfa9, 0x6f02,
2576 +
            0xc44c, 0x2cb9, 0x87f7, 0x375c, 0x9c12, 0x1b73, 0xb03d, 0x0096, 0xabd8, 0x9c05, 0x374b,
2577 +
            0x87e0, 0x2cae, 0xabcf, 0x0081, 0xb02a, 0x1b64, 0xf391, 0x58df, 0xe874, 0x433a, 0xc45b,
2578 +
            0x6f15, 0xdfbe, 0x74f0,
2579 +
        ],
2580 +
        [
2581 +
            0x0000, 0x19b8, 0x3370, 0x2ac8, 0x66e0, 0x7f58, 0x5590, 0x4c28, 0xcdc0, 0xd478, 0xfeb0,
2582 +
            0xe708, 0xab20, 0xb298, 0x9850, 0x81e8, 0xd6f9, 0xcf41, 0xe589, 0xfc31, 0xb019, 0xa9a1,
2583 +
            0x8369, 0x9ad1, 0x1b39, 0x0281, 0x2849, 0x31f1, 0x7dd9, 0x6461, 0x4ea9, 0x5711, 0xe08b,
2584 +
            0xf933, 0xd3fb, 0xca43, 0x866b, 0x9fd3, 0xb51b, 0xaca3, 0x2d4b, 0x34f3, 0x1e3b, 0x0783,
2585 +
            0x4bab, 0x5213, 0x78db, 0x6163, 0x3672, 0x2fca, 0x0502, 0x1cba, 0x5092, 0x492a, 0x63e2,
2586 +
            0x7a5a, 0xfbb2, 0xe20a, 0xc8c2, 0xd17a, 0x9d52, 0x84ea, 0xae22, 0xb79a, 0x8c6f, 0x95d7,
2587 +
            0xbf1f, 0xa6a7, 0xea8f, 0xf337, 0xd9ff, 0xc047, 0x41af, 0x5817, 0x72df, 0x6b67, 0x274f,
2588 +
            0x3ef7, 0x143f, 0x0d87, 0x5a96, 0x432e, 0x69e6, 0x705e, 0x3c76, 0x25ce, 0x0f06, 0x16be,
2589 +
            0x9756, 0x8eee, 0xa426, 0xbd9e, 0xf1b6, 0xe80e, 0xc2c6, 0xdb7e, 0x6ce4, 0x755c, 0x5f94,
2590 +
            0x462c, 0x0a04, 0x13bc, 0x3974, 0x20cc, 0xa124, 0xb89c, 0x9254, 0x8bec, 0xc7c4, 0xde7c,
2591 +
            0xf4b4, 0xed0c, 0xba1d, 0xa3a5, 0x896d, 0x90d5, 0xdcfd, 0xc545, 0xef8d, 0xf635, 0x77dd,
2592 +
            0x6e65, 0x44ad, 0x5d15, 0x113d, 0x0885, 0x224d, 0x3bf5, 0x55a7, 0x4c1f, 0x66d7, 0x7f6f,
2593 +
            0x3347, 0x2aff, 0x0037, 0x198f, 0x9867, 0x81df, 0xab17, 0xb2af, 0xfe87, 0xe73f, 0xcdf7,
2594 +
            0xd44f, 0x835e, 0x9ae6, 0xb02e, 0xa996, 0xe5be, 0xfc06, 0xd6ce, 0xcf76, 0x4e9e, 0x5726,
2595 +
            0x7dee, 0x6456, 0x287e, 0x31c6, 0x1b0e, 0x02b6, 0xb52c, 0xac94, 0x865c, 0x9fe4, 0xd3cc,
2596 +
            0xca74, 0xe0bc, 0xf904, 0x78ec, 0x6154, 0x4b9c, 0x5224, 0x1e0c, 0x07b4, 0x2d7c, 0x34c4,
2597 +
            0x63d5, 0x7a6d, 0x50a5, 0x491d, 0x0535, 0x1c8d, 0x3645, 0x2ffd, 0xae15, 0xb7ad, 0x9d65,
2598 +
            0x84dd, 0xc8f5, 0xd14d, 0xfb85, 0xe23d, 0xd9c8, 0xc070, 0xeab8, 0xf300, 0xbf28, 0xa690,
2599 +
            0x8c58, 0x95e0, 0x1408, 0x0db0, 0x2778, 0x3ec0, 0x72e8, 0x6b50, 0x4198, 0x5820, 0x0f31,
2600 +
            0x1689, 0x3c41, 0x25f9, 0x69d1, 0x7069, 0x5aa1, 0x4319, 0xc2f1, 0xdb49, 0xf181, 0xe839,
2601 +
            0xa411, 0xbda9, 0x9761, 0x8ed9, 0x3943, 0x20fb, 0x0a33, 0x138b, 0x5fa3, 0x461b, 0x6cd3,
2602 +
            0x756b, 0xf483, 0xed3b, 0xc7f3, 0xde4b, 0x9263, 0x8bdb, 0xa113, 0xb8ab, 0xefba, 0xf602,
2603 +
            0xdcca, 0xc572, 0x895a, 0x90e2, 0xba2a, 0xa392, 0x227a, 0x3bc2, 0x110a, 0x08b2, 0x449a,
2604 +
            0x5d22, 0x77ea, 0x6e52,
2605 +
        ],
2606 +
        [
2607 +
            0x0000, 0xc2e8, 0xc8a9, 0x0a41, 0xdc2b, 0x1ec3, 0x1482, 0xd66a, 0xf52f, 0x37c7, 0x3d86,
2608 +
            0xff6e, 0x2904, 0xebec, 0xe1ad, 0x2345, 0xa727, 0x65cf, 0x6f8e, 0xad66, 0x7b0c, 0xb9e4,
2609 +
            0xb3a5, 0x714d, 0x5208, 0x90e0, 0x9aa1, 0x5849, 0x8e23, 0x4ccb, 0x468a, 0x8462, 0x0337,
2610 +
            0xc1df, 0xcb9e, 0x0976, 0xdf1c, 0x1df4, 0x17b5, 0xd55d, 0xf618, 0x34f0, 0x3eb1, 0xfc59,
2611 +
            0x2a33, 0xe8db, 0xe29a, 0x2072, 0xa410, 0x66f8, 0x6cb9, 0xae51, 0x783b, 0xbad3, 0xb092,
2612 +
            0x727a, 0x513f, 0x93d7, 0x9996, 0x5b7e, 0x8d14, 0x4ffc, 0x45bd, 0x8755, 0x066e, 0xc486,
2613 +
            0xcec7, 0x0c2f, 0xda45, 0x18ad, 0x12ec, 0xd004, 0xf341, 0x31a9, 0x3be8, 0xf900, 0x2f6a,
2614 +
            0xed82, 0xe7c3, 0x252b, 0xa149, 0x63a1, 0x69e0, 0xab08, 0x7d62, 0xbf8a, 0xb5cb, 0x7723,
2615 +
            0x5466, 0x968e, 0x9ccf, 0x5e27, 0x884d, 0x4aa5, 0x40e4, 0x820c, 0x0559, 0xc7b1, 0xcdf0,
2616 +
            0x0f18, 0xd972, 0x1b9a, 0x11db, 0xd333, 0xf076, 0x329e, 0x38df, 0xfa37, 0x2c5d, 0xeeb5,
2617 +
            0xe4f4, 0x261c, 0xa27e, 0x6096, 0x6ad7, 0xa83f, 0x7e55, 0xbcbd, 0xb6fc, 0x7414, 0x5751,
2618 +
            0x95b9, 0x9ff8, 0x5d10, 0x8b7a, 0x4992, 0x43d3, 0x813b, 0x0cdc, 0xce34, 0xc475, 0x069d,
2619 +
            0xd0f7, 0x121f, 0x185e, 0xdab6, 0xf9f3, 0x3b1b, 0x315a, 0xf3b2, 0x25d8, 0xe730, 0xed71,
2620 +
            0x2f99, 0xabfb, 0x6913, 0x6352, 0xa1ba, 0x77d0, 0xb538, 0xbf79, 0x7d91, 0x5ed4, 0x9c3c,
2621 +
            0x967d, 0x5495, 0x82ff, 0x4017, 0x4a56, 0x88be, 0x0feb, 0xcd03, 0xc742, 0x05aa, 0xd3c0,
2622 +
            0x1128, 0x1b69, 0xd981, 0xfac4, 0x382c, 0x326d, 0xf085, 0x26ef, 0xe407, 0xee46, 0x2cae,
2623 +
            0xa8cc, 0x6a24, 0x6065, 0xa28d, 0x74e7, 0xb60f, 0xbc4e, 0x7ea6, 0x5de3, 0x9f0b, 0x954a,
2624 +
            0x57a2, 0x81c8, 0x4320, 0x4961, 0x8b89, 0x0ab2, 0xc85a, 0xc21b, 0x00f3, 0xd699, 0x1471,
2625 +
            0x1e30, 0xdcd8, 0xff9d, 0x3d75, 0x3734, 0xf5dc, 0x23b6, 0xe15e, 0xeb1f, 0x29f7, 0xad95,
2626 +
            0x6f7d, 0x653c, 0xa7d4, 0x71be, 0xb356, 0xb917, 0x7bff, 0x58ba, 0x9a52, 0x9013, 0x52fb,
2627 +
            0x8491, 0x4679, 0x4c38, 0x8ed0, 0x0985, 0xcb6d, 0xc12c, 0x03c4, 0xd5ae, 0x1746, 0x1d07,
2628 +
            0xdfef, 0xfcaa, 0x3e42, 0x3403, 0xf6eb, 0x2081, 0xe269, 0xe828, 0x2ac0, 0xaea2, 0x6c4a,
2629 +
            0x660b, 0xa4e3, 0x7289, 0xb061, 0xba20, 0x78c8, 0x5b8d, 0x9965, 0x9324, 0x51cc, 0x87a6,
2630 +
            0x454e, 0x4f0f, 0x8de7,
2631 +
        ],
2632 +
        [
2633 +
            0x0000, 0x2306, 0x460c, 0x650a, 0x8c18, 0xaf1e, 0xca14, 0xe912, 0x5549, 0x764f, 0x1345,
2634 +
            0x3043, 0xd951, 0xfa57, 0x9f5d, 0xbc5b, 0xaa92, 0x8994, 0xec9e, 0xcf98, 0x268a, 0x058c,
2635 +
            0x6086, 0x4380, 0xffdb, 0xdcdd, 0xb9d7, 0x9ad1, 0x73c3, 0x50c5, 0x35cf, 0x16c9, 0x185d,
2636 +
            0x3b5b, 0x5e51, 0x7d57, 0x9445, 0xb743, 0xd249, 0xf14f, 0x4d14, 0x6e12, 0x0b18, 0x281e,
2637 +
            0xc10c, 0xe20a, 0x8700, 0xa406, 0xb2cf, 0x91c9, 0xf4c3, 0xd7c5, 0x3ed7, 0x1dd1, 0x78db,
2638 +
            0x5bdd, 0xe786, 0xc480, 0xa18a, 0x828c, 0x6b9e, 0x4898, 0x2d92, 0x0e94, 0x30ba, 0x13bc,
2639 +
            0x76b6, 0x55b0, 0xbca2, 0x9fa4, 0xfaae, 0xd9a8, 0x65f3, 0x46f5, 0x23ff, 0x00f9, 0xe9eb,
2640 +
            0xcaed, 0xafe7, 0x8ce1, 0x9a28, 0xb92e, 0xdc24, 0xff22, 0x1630, 0x3536, 0x503c, 0x733a,
2641 +
            0xcf61, 0xec67, 0x896d, 0xaa6b, 0x4379, 0x607f, 0x0575, 0x2673, 0x28e7, 0x0be1, 0x6eeb,
2642 +
            0x4ded, 0xa4ff, 0x87f9, 0xe2f3, 0xc1f5, 0x7dae, 0x5ea8, 0x3ba2, 0x18a4, 0xf1b6, 0xd2b0,
2643 +
            0xb7ba, 0x94bc, 0x8275, 0xa173, 0xc479, 0xe77f, 0x0e6d, 0x2d6b, 0x4861, 0x6b67, 0xd73c,
2644 +
            0xf43a, 0x9130, 0xb236, 0x5b24, 0x7822, 0x1d28, 0x3e2e, 0x6174, 0x4272, 0x2778, 0x047e,
2645 +
            0xed6c, 0xce6a, 0xab60, 0x8866, 0x343d, 0x173b, 0x7231, 0x5137, 0xb825, 0x9b23, 0xfe29,
2646 +
            0xdd2f, 0xcbe6, 0xe8e0, 0x8dea, 0xaeec, 0x47fe, 0x64f8, 0x01f2, 0x22f4, 0x9eaf, 0xbda9,
2647 +
            0xd8a3, 0xfba5, 0x12b7, 0x31b1, 0x54bb, 0x77bd, 0x7929, 0x5a2f, 0x3f25, 0x1c23, 0xf531,
2648 +
            0xd637, 0xb33d, 0x903b, 0x2c60, 0x0f66, 0x6a6c, 0x496a, 0xa078, 0x837e, 0xe674, 0xc572,
2649 +
            0xd3bb, 0xf0bd, 0x95b7, 0xb6b1, 0x5fa3, 0x7ca5, 0x19af, 0x3aa9, 0x86f2, 0xa5f4, 0xc0fe,
2650 +
            0xe3f8, 0x0aea, 0x29ec, 0x4ce6, 0x6fe0, 0x51ce, 0x72c8, 0x17c2, 0x34c4, 0xddd6, 0xfed0,
2651 +
            0x9bda, 0xb8dc, 0x0487, 0x2781, 0x428b, 0x618d, 0x889f, 0xab99, 0xce93, 0xed95, 0xfb5c,
2652 +
            0xd85a, 0xbd50, 0x9e56, 0x7744, 0x5442, 0x3148, 0x124e, 0xae15, 0x8d13, 0xe819, 0xcb1f,
2653 +
            0x220d, 0x010b, 0x6401, 0x4707, 0x4993, 0x6a95, 0x0f9f, 0x2c99, 0xc58b, 0xe68d, 0x8387,
2654 +
            0xa081, 0x1cda, 0x3fdc, 0x5ad6, 0x79d0, 0x90c2, 0xb3c4, 0xd6ce, 0xf5c8, 0xe301, 0xc007,
2655 +
            0xa50d, 0x860b, 0x6f19, 0x4c1f, 0x2915, 0x0a13, 0xb648, 0x954e, 0xf044, 0xd342, 0x3a50,
2656 +
            0x1956, 0x7c5c, 0x5f5a,
2657 +
        ],
2658 +
        [
2659 +
            0x0000, 0xb5e7, 0x26b7, 0x9350, 0x4d6e, 0xf889, 0x6bd9, 0xde3e, 0x9adc, 0x2f3b, 0xbc6b,
2660 +
            0x098c, 0xd7b2, 0x6255, 0xf105, 0x44e2, 0x78c1, 0xcd26, 0x5e76, 0xeb91, 0x35af, 0x8048,
2661 +
            0x1318, 0xa6ff, 0xe21d, 0x57fa, 0xc4aa, 0x714d, 0xaf73, 0x1a94, 0x89c4, 0x3c23, 0xf182,
2662 +
            0x4465, 0xd735, 0x62d2, 0xbcec, 0x090b, 0x9a5b, 0x2fbc, 0x6b5e, 0xdeb9, 0x4de9, 0xf80e,
2663 +
            0x2630, 0x93d7, 0x0087, 0xb560, 0x8943, 0x3ca4, 0xaff4, 0x1a13, 0xc42d, 0x71ca, 0xe29a,
2664 +
            0x577d, 0x139f, 0xa678, 0x3528, 0x80cf, 0x5ef1, 0xeb16, 0x7846, 0xcda1, 0xae7d, 0x1b9a,
2665 +
            0x88ca, 0x3d2d, 0xe313, 0x56f4, 0xc5a4, 0x7043, 0x34a1, 0x8146, 0x1216, 0xa7f1, 0x79cf,
2666 +
            0xcc28, 0x5f78, 0xea9f, 0xd6bc, 0x635b, 0xf00b, 0x45ec, 0x9bd2, 0x2e35, 0xbd65, 0x0882,
2667 +
            0x4c60, 0xf987, 0x6ad7, 0xdf30, 0x010e, 0xb4e9, 0x27b9, 0x925e, 0x5fff, 0xea18, 0x7948,
2668 +
            0xccaf, 0x1291, 0xa776, 0x3426, 0x81c1, 0xc523, 0x70c4, 0xe394, 0x5673, 0x884d, 0x3daa,
2669 +
            0xaefa, 0x1b1d, 0x273e, 0x92d9, 0x0189, 0xb46e, 0x6a50, 0xdfb7, 0x4ce7, 0xf900, 0xbde2,
2670 +
            0x0805, 0x9b55, 0x2eb2, 0xf08c, 0x456b, 0xd63b, 0x63dc, 0x1183, 0xa464, 0x3734, 0x82d3,
2671 +
            0x5ced, 0xe90a, 0x7a5a, 0xcfbd, 0x8b5f, 0x3eb8, 0xade8, 0x180f, 0xc631, 0x73d6, 0xe086,
2672 +
            0x5561, 0x6942, 0xdca5, 0x4ff5, 0xfa12, 0x242c, 0x91cb, 0x029b, 0xb77c, 0xf39e, 0x4679,
2673 +
            0xd529, 0x60ce, 0xbef0, 0x0b17, 0x9847, 0x2da0, 0xe001, 0x55e6, 0xc6b6, 0x7351, 0xad6f,
2674 +
            0x1888, 0x8bd8, 0x3e3f, 0x7add, 0xcf3a, 0x5c6a, 0xe98d, 0x37b3, 0x8254, 0x1104, 0xa4e3,
2675 +
            0x98c0, 0x2d27, 0xbe77, 0x0b90, 0xd5ae, 0x6049, 0xf319, 0x46fe, 0x021c, 0xb7fb, 0x24ab,
2676 +
            0x914c, 0x4f72, 0xfa95, 0x69c5, 0xdc22, 0xbffe, 0x0a19, 0x9949, 0x2cae, 0xf290, 0x4777,
2677 +
            0xd427, 0x61c0, 0x2522, 0x90c5, 0x0395, 0xb672, 0x684c, 0xddab, 0x4efb, 0xfb1c, 0xc73f,
2678 +
            0x72d8, 0xe188, 0x546f, 0x8a51, 0x3fb6, 0xace6, 0x1901, 0x5de3, 0xe804, 0x7b54, 0xceb3,
2679 +
            0x108d, 0xa56a, 0x363a, 0x83dd, 0x4e7c, 0xfb9b, 0x68cb, 0xdd2c, 0x0312, 0xb6f5, 0x25a5,
2680 +
            0x9042, 0xd4a0, 0x6147, 0xf217, 0x47f0, 0x99ce, 0x2c29, 0xbf79, 0x0a9e, 0x36bd, 0x835a,
2681 +
            0x100a, 0xa5ed, 0x7bd3, 0xce34, 0x5d64, 0xe883, 0xac61, 0x1986, 0x8ad6, 0x3f31, 0xe10f,
2682 +
            0x54e8, 0xc7b8, 0x725f,
2683 +
        ],
2684 +
        [
2685 +
            0x0000, 0x5f62, 0xbec4, 0xe1a6, 0x30f1, 0x6f93, 0x8e35, 0xd157, 0x61e2, 0x3e80, 0xdf26,
2686 +
            0x8044, 0x5113, 0x0e71, 0xefd7, 0xb0b5, 0xc3c4, 0x9ca6, 0x7d00, 0x2262, 0xf335, 0xac57,
2687 +
            0x4df1, 0x1293, 0xa226, 0xfd44, 0x1ce2, 0x4380, 0x92d7, 0xcdb5, 0x2c13, 0x7371, 0xcaf1,
2688 +
            0x9593, 0x7435, 0x2b57, 0xfa00, 0xa562, 0x44c4, 0x1ba6, 0xab13, 0xf471, 0x15d7, 0x4ab5,
2689 +
            0x9be2, 0xc480, 0x2526, 0x7a44, 0x0935, 0x5657, 0xb7f1, 0xe893, 0x39c4, 0x66a6, 0x8700,
2690 +
            0xd862, 0x68d7, 0x37b5, 0xd613, 0x8971, 0x5826, 0x0744, 0xe6e2, 0xb980, 0xd89b, 0x87f9,
2691 +
            0x665f, 0x393d, 0xe86a, 0xb708, 0x56ae, 0x09cc, 0xb979, 0xe61b, 0x07bd, 0x58df, 0x8988,
2692 +
            0xd6ea, 0x374c, 0x682e, 0x1b5f, 0x443d, 0xa59b, 0xfaf9, 0x2bae, 0x74cc, 0x956a, 0xca08,
2693 +
            0x7abd, 0x25df, 0xc479, 0x9b1b, 0x4a4c, 0x152e, 0xf488, 0xabea, 0x126a, 0x4d08, 0xacae,
2694 +
            0xf3cc, 0x229b, 0x7df9, 0x9c5f, 0xc33d, 0x7388, 0x2cea, 0xcd4c, 0x922e, 0x4379, 0x1c1b,
2695 +
            0xfdbd, 0xa2df, 0xd1ae, 0x8ecc, 0x6f6a, 0x3008, 0xe15f, 0xbe3d, 0x5f9b, 0x00f9, 0xb04c,
2696 +
            0xef2e, 0x0e88, 0x51ea, 0x80bd, 0xdfdf, 0x3e79, 0x611b, 0xfc4f, 0xa32d, 0x428b, 0x1de9,
2697 +
            0xccbe, 0x93dc, 0x727a, 0x2d18, 0x9dad, 0xc2cf, 0x2369, 0x7c0b, 0xad5c, 0xf23e, 0x1398,
2698 +
            0x4cfa, 0x3f8b, 0x60e9, 0x814f, 0xde2d, 0x0f7a, 0x5018, 0xb1be, 0xeedc, 0x5e69, 0x010b,
2699 +
            0xe0ad, 0xbfcf, 0x6e98, 0x31fa, 0xd05c, 0x8f3e, 0x36be, 0x69dc, 0x887a, 0xd718, 0x064f,
2700 +
            0x592d, 0xb88b, 0xe7e9, 0x575c, 0x083e, 0xe998, 0xb6fa, 0x67ad, 0x38cf, 0xd969, 0x860b,
2701 +
            0xf57a, 0xaa18, 0x4bbe, 0x14dc, 0xc58b, 0x9ae9, 0x7b4f, 0x242d, 0x9498, 0xcbfa, 0x2a5c,
2702 +
            0x753e, 0xa469, 0xfb0b, 0x1aad, 0x45cf, 0x24d4, 0x7bb6, 0x9a10, 0xc572, 0x1425, 0x4b47,
2703 +
            0xaae1, 0xf583, 0x4536, 0x1a54, 0xfbf2, 0xa490, 0x75c7, 0x2aa5, 0xcb03, 0x9461, 0xe710,
2704 +
            0xb872, 0x59d4, 0x06b6, 0xd7e1, 0x8883, 0x6925, 0x3647, 0x86f2, 0xd990, 0x3836, 0x6754,
2705 +
            0xb603, 0xe961, 0x08c7, 0x57a5, 0xee25, 0xb147, 0x50e1, 0x0f83, 0xded4, 0x81b6, 0x6010,
2706 +
            0x3f72, 0x8fc7, 0xd0a5, 0x3103, 0x6e61, 0xbf36, 0xe054, 0x01f2, 0x5e90, 0x2de1, 0x7283,
2707 +
            0x9325, 0xcc47, 0x1d10, 0x4272, 0xa3d4, 0xfcb6, 0x4c03, 0x1361, 0xf2c7, 0xada5, 0x7cf2,
2708 +
            0x2390, 0xc236, 0x9d54,
2709 +
        ],
2710 +
        [
2711 +
            0x0000, 0x1612, 0x2c24, 0x3a36, 0x5848, 0x4e5a, 0x746c, 0x627e, 0xb090, 0xa682, 0x9cb4,
2712 +
            0x8aa6, 0xe8d8, 0xfeca, 0xc4fc, 0xd2ee, 0x2c59, 0x3a4b, 0x007d, 0x166f, 0x7411, 0x6203,
2713 +
            0x5835, 0x4e27, 0x9cc9, 0x8adb, 0xb0ed, 0xa6ff, 0xc481, 0xd293, 0xe8a5, 0xfeb7, 0x58b2,
2714 +
            0x4ea0, 0x7496, 0x6284, 0x00fa, 0x16e8, 0x2cde, 0x3acc, 0xe822, 0xfe30, 0xc406, 0xd214,
2715 +
            0xb06a, 0xa678, 0x9c4e, 0x8a5c, 0x74eb, 0x62f9, 0x58cf, 0x4edd, 0x2ca3, 0x3ab1, 0x0087,
2716 +
            0x1695, 0xc47b, 0xd269, 0xe85f, 0xfe4d, 0x9c33, 0x8a21, 0xb017, 0xa605, 0xb164, 0xa776,
2717 +
            0x9d40, 0x8b52, 0xe92c, 0xff3e, 0xc508, 0xd31a, 0x01f4, 0x17e6, 0x2dd0, 0x3bc2, 0x59bc,
2718 +
            0x4fae, 0x7598, 0x638a, 0x9d3d, 0x8b2f, 0xb119, 0xa70b, 0xc575, 0xd367, 0xe951, 0xff43,
2719 +
            0x2dad, 0x3bbf, 0x0189, 0x179b, 0x75e5, 0x63f7, 0x59c1, 0x4fd3, 0xe9d6, 0xffc4, 0xc5f2,
2720 +
            0xd3e0, 0xb19e, 0xa78c, 0x9dba, 0x8ba8, 0x5946, 0x4f54, 0x7562, 0x6370, 0x010e, 0x171c,
2721 +
            0x2d2a, 0x3b38, 0xc58f, 0xd39d, 0xe9ab, 0xffb9, 0x9dc7, 0x8bd5, 0xb1e3, 0xa7f1, 0x751f,
2722 +
            0x630d, 0x593b, 0x4f29, 0x2d57, 0x3b45, 0x0173, 0x1761, 0x2fb1, 0x39a3, 0x0395, 0x1587,
2723 +
            0x77f9, 0x61eb, 0x5bdd, 0x4dcf, 0x9f21, 0x8933, 0xb305, 0xa517, 0xc769, 0xd17b, 0xeb4d,
2724 +
            0xfd5f, 0x03e8, 0x15fa, 0x2fcc, 0x39de, 0x5ba0, 0x4db2, 0x7784, 0x6196, 0xb378, 0xa56a,
2725 +
            0x9f5c, 0x894e, 0xeb30, 0xfd22, 0xc714, 0xd106, 0x7703, 0x6111, 0x5b27, 0x4d35, 0x2f4b,
2726 +
            0x3959, 0x036f, 0x157d, 0xc793, 0xd181, 0xebb7, 0xfda5, 0x9fdb, 0x89c9, 0xb3ff, 0xa5ed,
2727 +
            0x5b5a, 0x4d48, 0x777e, 0x616c, 0x0312, 0x1500, 0x2f36, 0x3924, 0xebca, 0xfdd8, 0xc7ee,
2728 +
            0xd1fc, 0xb382, 0xa590, 0x9fa6, 0x89b4, 0x9ed5, 0x88c7, 0xb2f1, 0xa4e3, 0xc69d, 0xd08f,
2729 +
            0xeab9, 0xfcab, 0x2e45, 0x3857, 0x0261, 0x1473, 0x760d, 0x601f, 0x5a29, 0x4c3b, 0xb28c,
2730 +
            0xa49e, 0x9ea8, 0x88ba, 0xeac4, 0xfcd6, 0xc6e0, 0xd0f2, 0x021c, 0x140e, 0x2e38, 0x382a,
2731 +
            0x5a54, 0x4c46, 0x7670, 0x6062, 0xc667, 0xd075, 0xea43, 0xfc51, 0x9e2f, 0x883d, 0xb20b,
2732 +
            0xa419, 0x76f7, 0x60e5, 0x5ad3, 0x4cc1, 0x2ebf, 0x38ad, 0x029b, 0x1489, 0xea3e, 0xfc2c,
2733 +
            0xc61a, 0xd008, 0xb276, 0xa464, 0x9e52, 0x8840, 0x5aae, 0x4cbc, 0x768a, 0x6098, 0x02e6,
2734 +
            0x14f4, 0x2ec2, 0x38d0,
2735 +
        ],
2736 +
        [
2737 +
            0x0000, 0xdec1, 0xf0fb, 0x2e3a, 0xac8f, 0x724e, 0x5c74, 0x82b5, 0x1467, 0xcaa6, 0xe49c,
2738 +
            0x3a5d, 0xb8e8, 0x6629, 0x4813, 0x96d2, 0x28ce, 0xf60f, 0xd835, 0x06f4, 0x8441, 0x5a80,
2739 +
            0x74ba, 0xaa7b, 0x3ca9, 0xe268, 0xcc52, 0x1293, 0x9026, 0x4ee7, 0x60dd, 0xbe1c, 0x519c,
2740 +
            0x8f5d, 0xa167, 0x7fa6, 0xfd13, 0x23d2, 0x0de8, 0xd329, 0x45fb, 0x9b3a, 0xb500, 0x6bc1,
2741 +
            0xe974, 0x37b5, 0x198f, 0xc74e, 0x7952, 0xa793, 0x89a9, 0x5768, 0xd5dd, 0x0b1c, 0x2526,
2742 +
            0xfbe7, 0x6d35, 0xb3f4, 0x9dce, 0x430f, 0xc1ba, 0x1f7b, 0x3141, 0xef80, 0xa338, 0x7df9,
2743 +
            0x53c3, 0x8d02, 0x0fb7, 0xd176, 0xff4c, 0x218d, 0xb75f, 0x699e, 0x47a4, 0x9965, 0x1bd0,
2744 +
            0xc511, 0xeb2b, 0x35ea, 0x8bf6, 0x5537, 0x7b0d, 0xa5cc, 0x2779, 0xf9b8, 0xd782, 0x0943,
2745 +
            0x9f91, 0x4150, 0x6f6a, 0xb1ab, 0x331e, 0xeddf, 0xc3e5, 0x1d24, 0xf2a4, 0x2c65, 0x025f,
2746 +
            0xdc9e, 0x5e2b, 0x80ea, 0xaed0, 0x7011, 0xe6c3, 0x3802, 0x1638, 0xc8f9, 0x4a4c, 0x948d,
2747 +
            0xbab7, 0x6476, 0xda6a, 0x04ab, 0x2a91, 0xf450, 0x76e5, 0xa824, 0x861e, 0x58df, 0xce0d,
2748 +
            0x10cc, 0x3ef6, 0xe037, 0x6282, 0xbc43, 0x9279, 0x4cb8, 0x0b09, 0xd5c8, 0xfbf2, 0x2533,
2749 +
            0xa786, 0x7947, 0x577d, 0x89bc, 0x1f6e, 0xc1af, 0xef95, 0x3154, 0xb3e1, 0x6d20, 0x431a,
2750 +
            0x9ddb, 0x23c7, 0xfd06, 0xd33c, 0x0dfd, 0x8f48, 0x5189, 0x7fb3, 0xa172, 0x37a0, 0xe961,
2751 +
            0xc75b, 0x199a, 0x9b2f, 0x45ee, 0x6bd4, 0xb515, 0x5a95, 0x8454, 0xaa6e, 0x74af, 0xf61a,
2752 +
            0x28db, 0x06e1, 0xd820, 0x4ef2, 0x9033, 0xbe09, 0x60c8, 0xe27d, 0x3cbc, 0x1286, 0xcc47,
2753 +
            0x725b, 0xac9a, 0x82a0, 0x5c61, 0xded4, 0x0015, 0x2e2f, 0xf0ee, 0x663c, 0xb8fd, 0x96c7,
2754 +
            0x4806, 0xcab3, 0x1472, 0x3a48, 0xe489, 0xa831, 0x76f0, 0x58ca, 0x860b, 0x04be, 0xda7f,
2755 +
            0xf445, 0x2a84, 0xbc56, 0x6297, 0x4cad, 0x926c, 0x10d9, 0xce18, 0xe022, 0x3ee3, 0x80ff,
2756 +
            0x5e3e, 0x7004, 0xaec5, 0x2c70, 0xf2b1, 0xdc8b, 0x024a, 0x9498, 0x4a59, 0x6463, 0xbaa2,
2757 +
            0x3817, 0xe6d6, 0xc8ec, 0x162d, 0xf9ad, 0x276c, 0x0956, 0xd797, 0x5522, 0x8be3, 0xa5d9,
2758 +
            0x7b18, 0xedca, 0x330b, 0x1d31, 0xc3f0, 0x4145, 0x9f84, 0xb1be, 0x6f7f, 0xd163, 0x0fa2,
2759 +
            0x2198, 0xff59, 0x7dec, 0xa32d, 0x8d17, 0x53d6, 0xc504, 0x1bc5, 0x35ff, 0xeb3e, 0x698b,
2760 +
            0xb74a, 0x9970, 0x47b1,
2761 +
        ],
2762 +
        [
2763 +
            0x0000, 0xc362, 0xcbbd, 0x08df, 0xda03, 0x1961, 0x11be, 0xd2dc, 0xf97f, 0x3a1d, 0x32c2,
2764 +
            0xf1a0, 0x237c, 0xe01e, 0xe8c1, 0x2ba3, 0xbf87, 0x7ce5, 0x743a, 0xb758, 0x6584, 0xa6e6,
2765 +
            0xae39, 0x6d5b, 0x46f8, 0x859a, 0x8d45, 0x4e27, 0x9cfb, 0x5f99, 0x5746, 0x9424, 0x3277,
2766 +
            0xf115, 0xf9ca, 0x3aa8, 0xe874, 0x2b16, 0x23c9, 0xe0ab, 0xcb08, 0x086a, 0x00b5, 0xc3d7,
2767 +
            0x110b, 0xd269, 0xdab6, 0x19d4, 0x8df0, 0x4e92, 0x464d, 0x852f, 0x57f3, 0x9491, 0x9c4e,
2768 +
            0x5f2c, 0x748f, 0xb7ed, 0xbf32, 0x7c50, 0xae8c, 0x6dee, 0x6531, 0xa653, 0x64ee, 0xa78c,
2769 +
            0xaf53, 0x6c31, 0xbeed, 0x7d8f, 0x7550, 0xb632, 0x9d91, 0x5ef3, 0x562c, 0x954e, 0x4792,
2770 +
            0x84f0, 0x8c2f, 0x4f4d, 0xdb69, 0x180b, 0x10d4, 0xd3b6, 0x016a, 0xc208, 0xcad7, 0x09b5,
2771 +
            0x2216, 0xe174, 0xe9ab, 0x2ac9, 0xf815, 0x3b77, 0x33a8, 0xf0ca, 0x5699, 0x95fb, 0x9d24,
2772 +
            0x5e46, 0x8c9a, 0x4ff8, 0x4727, 0x8445, 0xafe6, 0x6c84, 0x645b, 0xa739, 0x75e5, 0xb687,
2773 +
            0xbe58, 0x7d3a, 0xe91e, 0x2a7c, 0x22a3, 0xe1c1, 0x331d, 0xf07f, 0xf8a0, 0x3bc2, 0x1061,
2774 +
            0xd303, 0xdbdc, 0x18be, 0xca62, 0x0900, 0x01df, 0xc2bd, 0xc9dc, 0x0abe, 0x0261, 0xc103,
2775 +
            0x13df, 0xd0bd, 0xd862, 0x1b00, 0x30a3, 0xf3c1, 0xfb1e, 0x387c, 0xeaa0, 0x29c2, 0x211d,
2776 +
            0xe27f, 0x765b, 0xb539, 0xbde6, 0x7e84, 0xac58, 0x6f3a, 0x67e5, 0xa487, 0x8f24, 0x4c46,
2777 +
            0x4499, 0x87fb, 0x5527, 0x9645, 0x9e9a, 0x5df8, 0xfbab, 0x38c9, 0x3016, 0xf374, 0x21a8,
2778 +
            0xe2ca, 0xea15, 0x2977, 0x02d4, 0xc1b6, 0xc969, 0x0a0b, 0xd8d7, 0x1bb5, 0x136a, 0xd008,
2779 +
            0x442c, 0x874e, 0x8f91, 0x4cf3, 0x9e2f, 0x5d4d, 0x5592, 0x96f0, 0xbd53, 0x7e31, 0x76ee,
2780 +
            0xb58c, 0x6750, 0xa432, 0xaced, 0x6f8f, 0xad32, 0x6e50, 0x668f, 0xa5ed, 0x7731, 0xb453,
2781 +
            0xbc8c, 0x7fee, 0x544d, 0x972f, 0x9ff0, 0x5c92, 0x8e4e, 0x4d2c, 0x45f3, 0x8691, 0x12b5,
2782 +
            0xd1d7, 0xd908, 0x1a6a, 0xc8b6, 0x0bd4, 0x030b, 0xc069, 0xebca, 0x28a8, 0x2077, 0xe315,
2783 +
            0x31c9, 0xf2ab, 0xfa74, 0x3916, 0x9f45, 0x5c27, 0x54f8, 0x979a, 0x4546, 0x8624, 0x8efb,
2784 +
            0x4d99, 0x663a, 0xa558, 0xad87, 0x6ee5, 0xbc39, 0x7f5b, 0x7784, 0xb4e6, 0x20c2, 0xe3a0,
2785 +
            0xeb7f, 0x281d, 0xfac1, 0x39a3, 0x317c, 0xf21e, 0xd9bd, 0x1adf, 0x1200, 0xd162, 0x03be,
2786 +
            0xc0dc, 0xc803, 0x0b61,
2787 +
        ],
2788 +
        [
2789 +
            0x0000, 0x168e, 0x2d1c, 0x3b92, 0x5a38, 0x4cb6, 0x7724, 0x61aa, 0xb470, 0xa2fe, 0x996c,
2790 +
            0x8fe2, 0xee48, 0xf8c6, 0xc354, 0xd5da, 0x2599, 0x3317, 0x0885, 0x1e0b, 0x7fa1, 0x692f,
2791 +
            0x52bd, 0x4433, 0x91e9, 0x8767, 0xbcf5, 0xaa7b, 0xcbd1, 0xdd5f, 0xe6cd, 0xf043, 0x4b32,
2792 +
            0x5dbc, 0x662e, 0x70a0, 0x110a, 0x0784, 0x3c16, 0x2a98, 0xff42, 0xe9cc, 0xd25e, 0xc4d0,
2793 +
            0xa57a, 0xb3f4, 0x8866, 0x9ee8, 0x6eab, 0x7825, 0x43b7, 0x5539, 0x3493, 0x221d, 0x198f,
2794 +
            0x0f01, 0xdadb, 0xcc55, 0xf7c7, 0xe149, 0x80e3, 0x966d, 0xadff, 0xbb71, 0x9664, 0x80ea,
2795 +
            0xbb78, 0xadf6, 0xcc5c, 0xdad2, 0xe140, 0xf7ce, 0x2214, 0x349a, 0x0f08, 0x1986, 0x782c,
2796 +
            0x6ea2, 0x5530, 0x43be, 0xb3fd, 0xa573, 0x9ee1, 0x886f, 0xe9c5, 0xff4b, 0xc4d9, 0xd257,
2797 +
            0x078d, 0x1103, 0x2a91, 0x3c1f, 0x5db5, 0x4b3b, 0x70a9, 0x6627, 0xdd56, 0xcbd8, 0xf04a,
2798 +
            0xe6c4, 0x876e, 0x91e0, 0xaa72, 0xbcfc, 0x6926, 0x7fa8, 0x443a, 0x52b4, 0x331e, 0x2590,
2799 +
            0x1e02, 0x088c, 0xf8cf, 0xee41, 0xd5d3, 0xc35d, 0xa2f7, 0xb479, 0x8feb, 0x9965, 0x4cbf,
2800 +
            0x5a31, 0x61a3, 0x772d, 0x1687, 0x0009, 0x3b9b, 0x2d15, 0x61b1, 0x773f, 0x4cad, 0x5a23,
2801 +
            0x3b89, 0x2d07, 0x1695, 0x001b, 0xd5c1, 0xc34f, 0xf8dd, 0xee53, 0x8ff9, 0x9977, 0xa2e5,
2802 +
            0xb46b, 0x4428, 0x52a6, 0x6934, 0x7fba, 0x1e10, 0x089e, 0x330c, 0x2582, 0xf058, 0xe6d6,
2803 +
            0xdd44, 0xcbca, 0xaa60, 0xbcee, 0x877c, 0x91f2, 0x2a83, 0x3c0d, 0x079f, 0x1111, 0x70bb,
2804 +
            0x6635, 0x5da7, 0x4b29, 0x9ef3, 0x887d, 0xb3ef, 0xa561, 0xc4cb, 0xd245, 0xe9d7, 0xff59,
2805 +
            0x0f1a, 0x1994, 0x2206, 0x3488, 0x5522, 0x43ac, 0x783e, 0x6eb0, 0xbb6a, 0xade4, 0x9676,
2806 +
            0x80f8, 0xe152, 0xf7dc, 0xcc4e, 0xdac0, 0xf7d5, 0xe15b, 0xdac9, 0xcc47, 0xaded, 0xbb63,
2807 +
            0x80f1, 0x967f, 0x43a5, 0x552b, 0x6eb9, 0x7837, 0x199d, 0x0f13, 0x3481, 0x220f, 0xd24c,
2808 +
            0xc4c2, 0xff50, 0xe9de, 0x8874, 0x9efa, 0xa568, 0xb3e6, 0x663c, 0x70b2, 0x4b20, 0x5dae,
2809 +
            0x3c04, 0x2a8a, 0x1118, 0x0796, 0xbce7, 0xaa69, 0x91fb, 0x8775, 0xe6df, 0xf051, 0xcbc3,
2810 +
            0xdd4d, 0x0897, 0x1e19, 0x258b, 0x3305, 0x52af, 0x4421, 0x7fb3, 0x693d, 0x997e, 0x8ff0,
2811 +
            0xb462, 0xa2ec, 0xc346, 0xd5c8, 0xee5a, 0xf8d4, 0x2d0e, 0x3b80, 0x0012, 0x169c, 0x7736,
2812 +
            0x61b8, 0x5a2a, 0x4ca4,
2813 +
        ],
2814 +
        [
2815 +
            0x0000, 0xece7, 0x94b7, 0x7850, 0x6417, 0x88f0, 0xf0a0, 0x1c47, 0xc82e, 0x24c9, 0x5c99,
2816 +
            0xb07e, 0xac39, 0x40de, 0x388e, 0xd469, 0xdd25, 0x31c2, 0x4992, 0xa575, 0xb932, 0x55d5,
2817 +
            0x2d85, 0xc162, 0x150b, 0xf9ec, 0x81bc, 0x6d5b, 0x711c, 0x9dfb, 0xe5ab, 0x094c, 0xf733,
2818 +
            0x1bd4, 0x6384, 0x8f63, 0x9324, 0x7fc3, 0x0793, 0xeb74, 0x3f1d, 0xd3fa, 0xabaa, 0x474d,
2819 +
            0x5b0a, 0xb7ed, 0xcfbd, 0x235a, 0x2a16, 0xc6f1, 0xbea1, 0x5246, 0x4e01, 0xa2e6, 0xdab6,
2820 +
            0x3651, 0xe238, 0x0edf, 0x768f, 0x9a68, 0x862f, 0x6ac8, 0x1298, 0xfe7f, 0xa31f, 0x4ff8,
2821 +
            0x37a8, 0xdb4f, 0xc708, 0x2bef, 0x53bf, 0xbf58, 0x6b31, 0x87d6, 0xff86, 0x1361, 0x0f26,
2822 +
            0xe3c1, 0x9b91, 0x7776, 0x7e3a, 0x92dd, 0xea8d, 0x066a, 0x1a2d, 0xf6ca, 0x8e9a, 0x627d,
2823 +
            0xb614, 0x5af3, 0x22a3, 0xce44, 0xd203, 0x3ee4, 0x46b4, 0xaa53, 0x542c, 0xb8cb, 0xc09b,
2824 +
            0x2c7c, 0x303b, 0xdcdc, 0xa48c, 0x486b, 0x9c02, 0x70e5, 0x08b5, 0xe452, 0xf815, 0x14f2,
2825 +
            0x6ca2, 0x8045, 0x8909, 0x65ee, 0x1dbe, 0xf159, 0xed1e, 0x01f9, 0x79a9, 0x954e, 0x4127,
2826 +
            0xadc0, 0xd590, 0x3977, 0x2530, 0xc9d7, 0xb187, 0x5d60, 0x0b47, 0xe7a0, 0x9ff0, 0x7317,
2827 +
            0x6f50, 0x83b7, 0xfbe7, 0x1700, 0xc369, 0x2f8e, 0x57de, 0xbb39, 0xa77e, 0x4b99, 0x33c9,
2828 +
            0xdf2e, 0xd662, 0x3a85, 0x42d5, 0xae32, 0xb275, 0x5e92, 0x26c2, 0xca25, 0x1e4c, 0xf2ab,
2829 +
            0x8afb, 0x661c, 0x7a5b, 0x96bc, 0xeeec, 0x020b, 0xfc74, 0x1093, 0x68c3, 0x8424, 0x9863,
2830 +
            0x7484, 0x0cd4, 0xe033, 0x345a, 0xd8bd, 0xa0ed, 0x4c0a, 0x504d, 0xbcaa, 0xc4fa, 0x281d,
2831 +
            0x2151, 0xcdb6, 0xb5e6, 0x5901, 0x4546, 0xa9a1, 0xd1f1, 0x3d16, 0xe97f, 0x0598, 0x7dc8,
2832 +
            0x912f, 0x8d68, 0x618f, 0x19df, 0xf538, 0xa858, 0x44bf, 0x3cef, 0xd008, 0xcc4f, 0x20a8,
2833 +
            0x58f8, 0xb41f, 0x6076, 0x8c91, 0xf4c1, 0x1826, 0x0461, 0xe886, 0x90d6, 0x7c31, 0x757d,
2834 +
            0x999a, 0xe1ca, 0x0d2d, 0x116a, 0xfd8d, 0x85dd, 0x693a, 0xbd53, 0x51b4, 0x29e4, 0xc503,
2835 +
            0xd944, 0x35a3, 0x4df3, 0xa114, 0x5f6b, 0xb38c, 0xcbdc, 0x273b, 0x3b7c, 0xd79b, 0xafcb,
2836 +
            0x432c, 0x9745, 0x7ba2, 0x03f2, 0xef15, 0xf352, 0x1fb5, 0x67e5, 0x8b02, 0x824e, 0x6ea9,
2837 +
            0x16f9, 0xfa1e, 0xe659, 0x0abe, 0x72ee, 0x9e09, 0x4a60, 0xa687, 0xded7, 0x3230, 0x2e77,
2838 +
            0xc290, 0xbac0, 0x5627,
2839 +
        ],
2840 +
        [
2841 +
            0x0000, 0x5f3b, 0xbe76, 0xe14d, 0x3195, 0x6eae, 0x8fe3, 0xd0d8, 0x632a, 0x3c11, 0xdd5c,
2842 +
            0x8267, 0x52bf, 0x0d84, 0xecc9, 0xb3f2, 0xc654, 0x996f, 0x7822, 0x2719, 0xf7c1, 0xa8fa,
2843 +
            0x49b7, 0x168c, 0xa57e, 0xfa45, 0x1b08, 0x4433, 0x94eb, 0xcbd0, 0x2a9d, 0x75a6, 0xc1d1,
2844 +
            0x9eea, 0x7fa7, 0x209c, 0xf044, 0xaf7f, 0x4e32, 0x1109, 0xa2fb, 0xfdc0, 0x1c8d, 0x43b6,
2845 +
            0x936e, 0xcc55, 0x2d18, 0x7223, 0x0785, 0x58be, 0xb9f3, 0xe6c8, 0x3610, 0x692b, 0x8866,
2846 +
            0xd75d, 0x64af, 0x3b94, 0xdad9, 0x85e2, 0x553a, 0x0a01, 0xeb4c, 0xb477, 0xcedb, 0x91e0,
2847 +
            0x70ad, 0x2f96, 0xff4e, 0xa075, 0x4138, 0x1e03, 0xadf1, 0xf2ca, 0x1387, 0x4cbc, 0x9c64,
2848 +
            0xc35f, 0x2212, 0x7d29, 0x088f, 0x57b4, 0xb6f9, 0xe9c2, 0x391a, 0x6621, 0x876c, 0xd857,
2849 +
            0x6ba5, 0x349e, 0xd5d3, 0x8ae8, 0x5a30, 0x050b, 0xe446, 0xbb7d, 0x0f0a, 0x5031, 0xb17c,
2850 +
            0xee47, 0x3e9f, 0x61a4, 0x80e9, 0xdfd2, 0x6c20, 0x331b, 0xd256, 0x8d6d, 0x5db5, 0x028e,
2851 +
            0xe3c3, 0xbcf8, 0xc95e, 0x9665, 0x7728, 0x2813, 0xf8cb, 0xa7f0, 0x46bd, 0x1986, 0xaa74,
2852 +
            0xf54f, 0x1402, 0x4b39, 0x9be1, 0xc4da, 0x2597, 0x7aac, 0xd0cf, 0x8ff4, 0x6eb9, 0x3182,
2853 +
            0xe15a, 0xbe61, 0x5f2c, 0x0017, 0xb3e5, 0xecde, 0x0d93, 0x52a8, 0x8270, 0xdd4b, 0x3c06,
2854 +
            0x633d, 0x169b, 0x49a0, 0xa8ed, 0xf7d6, 0x270e, 0x7835, 0x9978, 0xc643, 0x75b1, 0x2a8a,
2855 +
            0xcbc7, 0x94fc, 0x4424, 0x1b1f, 0xfa52, 0xa569, 0x111e, 0x4e25, 0xaf68, 0xf053, 0x208b,
2856 +
            0x7fb0, 0x9efd, 0xc1c6, 0x7234, 0x2d0f, 0xcc42, 0x9379, 0x43a1, 0x1c9a, 0xfdd7, 0xa2ec,
2857 +
            0xd74a, 0x8871, 0x693c, 0x3607, 0xe6df, 0xb9e4, 0x58a9, 0x0792, 0xb460, 0xeb5b, 0x0a16,
2858 +
            0x552d, 0x85f5, 0xdace, 0x3b83, 0x64b8, 0x1e14, 0x412f, 0xa062, 0xff59, 0x2f81, 0x70ba,
2859 +
            0x91f7, 0xcecc, 0x7d3e, 0x2205, 0xc348, 0x9c73, 0x4cab, 0x1390, 0xf2dd, 0xade6, 0xd840,
2860 +
            0x877b, 0x6636, 0x390d, 0xe9d5, 0xb6ee, 0x57a3, 0x0898, 0xbb6a, 0xe451, 0x051c, 0x5a27,
2861 +
            0x8aff, 0xd5c4, 0x3489, 0x6bb2, 0xdfc5, 0x80fe, 0x61b3, 0x3e88, 0xee50, 0xb16b, 0x5026,
2862 +
            0x0f1d, 0xbcef, 0xe3d4, 0x0299, 0x5da2, 0x8d7a, 0xd241, 0x330c, 0x6c37, 0x1991, 0x46aa,
2863 +
            0xa7e7, 0xf8dc, 0x2804, 0x773f, 0x9672, 0xc949, 0x7abb, 0x2580, 0xc4cd, 0x9bf6, 0x4b2e,
2864 +
            0x1415, 0xf558, 0xaa63,
2865 +
        ],
2866 +
        [
2867 +
            0x0000, 0x3ef0, 0x7de0, 0x4310, 0xfbc0, 0xc530, 0x8620, 0xb8d0, 0xbaf9, 0x8409, 0xc719,
2868 +
            0xf9e9, 0x4139, 0x7fc9, 0x3cd9, 0x0229, 0x388b, 0x067b, 0x456b, 0x7b9b, 0xc34b, 0xfdbb,
2869 +
            0xbeab, 0x805b, 0x8272, 0xbc82, 0xff92, 0xc162, 0x79b2, 0x4742, 0x0452, 0x3aa2, 0x7116,
2870 +
            0x4fe6, 0x0cf6, 0x3206, 0x8ad6, 0xb426, 0xf736, 0xc9c6, 0xcbef, 0xf51f, 0xb60f, 0x88ff,
2871 +
            0x302f, 0x0edf, 0x4dcf, 0x733f, 0x499d, 0x776d, 0x347d, 0x0a8d, 0xb25d, 0x8cad, 0xcfbd,
2872 +
            0xf14d, 0xf364, 0xcd94, 0x8e84, 0xb074, 0x08a4, 0x3654, 0x7544, 0x4bb4, 0xe22c, 0xdcdc,
2873 +
            0x9fcc, 0xa13c, 0x19ec, 0x271c, 0x640c, 0x5afc, 0x58d5, 0x6625, 0x2535, 0x1bc5, 0xa315,
2874 +
            0x9de5, 0xdef5, 0xe005, 0xdaa7, 0xe457, 0xa747, 0x99b7, 0x2167, 0x1f97, 0x5c87, 0x6277,
2875 +
            0x605e, 0x5eae, 0x1dbe, 0x234e, 0x9b9e, 0xa56e, 0xe67e, 0xd88e, 0x933a, 0xadca, 0xeeda,
2876 +
            0xd02a, 0x68fa, 0x560a, 0x151a, 0x2bea, 0x29c3, 0x1733, 0x5423, 0x6ad3, 0xd203, 0xecf3,
2877 +
            0xafe3, 0x9113, 0xabb1, 0x9541, 0xd651, 0xe8a1, 0x5071, 0x6e81, 0x2d91, 0x1361, 0x1148,
2878 +
            0x2fb8, 0x6ca8, 0x5258, 0xea88, 0xd478, 0x9768, 0xa998, 0x8921, 0xb7d1, 0xf4c1, 0xca31,
2879 +
            0x72e1, 0x4c11, 0x0f01, 0x31f1, 0x33d8, 0x0d28, 0x4e38, 0x70c8, 0xc818, 0xf6e8, 0xb5f8,
2880 +
            0x8b08, 0xb1aa, 0x8f5a, 0xcc4a, 0xf2ba, 0x4a6a, 0x749a, 0x378a, 0x097a, 0x0b53, 0x35a3,
2881 +
            0x76b3, 0x4843, 0xf093, 0xce63, 0x8d73, 0xb383, 0xf837, 0xc6c7, 0x85d7, 0xbb27, 0x03f7,
2882 +
            0x3d07, 0x7e17, 0x40e7, 0x42ce, 0x7c3e, 0x3f2e, 0x01de, 0xb90e, 0x87fe, 0xc4ee, 0xfa1e,
2883 +
            0xc0bc, 0xfe4c, 0xbd5c, 0x83ac, 0x3b7c, 0x058c, 0x469c, 0x786c, 0x7a45, 0x44b5, 0x07a5,
2884 +
            0x3955, 0x8185, 0xbf75, 0xfc65, 0xc295, 0x6b0d, 0x55fd, 0x16ed, 0x281d, 0x90cd, 0xae3d,
2885 +
            0xed2d, 0xd3dd, 0xd1f4, 0xef04, 0xac14, 0x92e4, 0x2a34, 0x14c4, 0x57d4, 0x6924, 0x5386,
2886 +
            0x6d76, 0x2e66, 0x1096, 0xa846, 0x96b6, 0xd5a6, 0xeb56, 0xe97f, 0xd78f, 0x949f, 0xaa6f,
2887 +
            0x12bf, 0x2c4f, 0x6f5f, 0x51af, 0x1a1b, 0x24eb, 0x67fb, 0x590b, 0xe1db, 0xdf2b, 0x9c3b,
2888 +
            0xa2cb, 0xa0e2, 0x9e12, 0xdd02, 0xe3f2, 0x5b22, 0x65d2, 0x26c2, 0x1832, 0x2290, 0x1c60,
2889 +
            0x5f70, 0x6180, 0xd950, 0xe7a0, 0xa4b0, 0x9a40, 0x9869, 0xa699, 0xe589, 0xdb79, 0x63a9,
2890 +
            0x5d59, 0x1e49, 0x20b9,
2891 +
        ],
2892 +
        [
2893 +
            0x0000, 0x6e18, 0xdc30, 0xb228, 0xf519, 0x9b01, 0x2929, 0x4731, 0xa74b, 0xc953, 0x7b7b,
2894 +
            0x1563, 0x5252, 0x3c4a, 0x8e62, 0xe07a, 0x03ef, 0x6df7, 0xdfdf, 0xb1c7, 0xf6f6, 0x98ee,
2895 +
            0x2ac6, 0x44de, 0xa4a4, 0xcabc, 0x7894, 0x168c, 0x51bd, 0x3fa5, 0x8d8d, 0xe395, 0x07de,
2896 +
            0x69c6, 0xdbee, 0xb5f6, 0xf2c7, 0x9cdf, 0x2ef7, 0x40ef, 0xa095, 0xce8d, 0x7ca5, 0x12bd,
2897 +
            0x558c, 0x3b94, 0x89bc, 0xe7a4, 0x0431, 0x6a29, 0xd801, 0xb619, 0xf128, 0x9f30, 0x2d18,
2898 +
            0x4300, 0xa37a, 0xcd62, 0x7f4a, 0x1152, 0x5663, 0x387b, 0x8a53, 0xe44b, 0x0fbc, 0x61a4,
2899 +
            0xd38c, 0xbd94, 0xfaa5, 0x94bd, 0x2695, 0x488d, 0xa8f7, 0xc6ef, 0x74c7, 0x1adf, 0x5dee,
2900 +
            0x33f6, 0x81de, 0xefc6, 0x0c53, 0x624b, 0xd063, 0xbe7b, 0xf94a, 0x9752, 0x257a, 0x4b62,
2901 +
            0xab18, 0xc500, 0x7728, 0x1930, 0x5e01, 0x3019, 0x8231, 0xec29, 0x0862, 0x667a, 0xd452,
2902 +
            0xba4a, 0xfd7b, 0x9363, 0x214b, 0x4f53, 0xaf29, 0xc131, 0x7319, 0x1d01, 0x5a30, 0x3428,
2903 +
            0x8600, 0xe818, 0x0b8d, 0x6595, 0xd7bd, 0xb9a5, 0xfe94, 0x908c, 0x22a4, 0x4cbc, 0xacc6,
2904 +
            0xc2de, 0x70f6, 0x1eee, 0x59df, 0x37c7, 0x85ef, 0xebf7, 0x1f78, 0x7160, 0xc348, 0xad50,
2905 +
            0xea61, 0x8479, 0x3651, 0x5849, 0xb833, 0xd62b, 0x6403, 0x0a1b, 0x4d2a, 0x2332, 0x911a,
2906 +
            0xff02, 0x1c97, 0x728f, 0xc0a7, 0xaebf, 0xe98e, 0x8796, 0x35be, 0x5ba6, 0xbbdc, 0xd5c4,
2907 +
            0x67ec, 0x09f4, 0x4ec5, 0x20dd, 0x92f5, 0xfced, 0x18a6, 0x76be, 0xc496, 0xaa8e, 0xedbf,
2908 +
            0x83a7, 0x318f, 0x5f97, 0xbfed, 0xd1f5, 0x63dd, 0x0dc5, 0x4af4, 0x24ec, 0x96c4, 0xf8dc,
2909 +
            0x1b49, 0x7551, 0xc779, 0xa961, 0xee50, 0x8048, 0x3260, 0x5c78, 0xbc02, 0xd21a, 0x6032,
2910 +
            0x0e2a, 0x491b, 0x2703, 0x952b, 0xfb33, 0x10c4, 0x7edc, 0xccf4, 0xa2ec, 0xe5dd, 0x8bc5,
2911 +
            0x39ed, 0x57f5, 0xb78f, 0xd997, 0x6bbf, 0x05a7, 0x4296, 0x2c8e, 0x9ea6, 0xf0be, 0x132b,
2912 +
            0x7d33, 0xcf1b, 0xa103, 0xe632, 0x882a, 0x3a02, 0x541a, 0xb460, 0xda78, 0x6850, 0x0648,
2913 +
            0x4179, 0x2f61, 0x9d49, 0xf351, 0x171a, 0x7902, 0xcb2a, 0xa532, 0xe203, 0x8c1b, 0x3e33,
2914 +
            0x502b, 0xb051, 0xde49, 0x6c61, 0x0279, 0x4548, 0x2b50, 0x9978, 0xf760, 0x14f5, 0x7aed,
2915 +
            0xc8c5, 0xa6dd, 0xe1ec, 0x8ff4, 0x3ddc, 0x53c4, 0xb3be, 0xdda6, 0x6f8e, 0x0196, 0x46a7,
2916 +
            0x28bf, 0x9a97, 0xf48f,
2917 +
        ],
2918 +
        [
2919 +
            0x0000, 0x4d8c, 0x9b18, 0xd694, 0x7b49, 0x36c5, 0xe051, 0xaddd, 0xf692, 0xbb1e, 0x6d8a,
2920 +
            0x2006, 0x8ddb, 0xc057, 0x16c3, 0x5b4f, 0xa05d, 0xedd1, 0x3b45, 0x76c9, 0xdb14, 0x9698,
2921 +
            0x400c, 0x0d80, 0x56cf, 0x1b43, 0xcdd7, 0x805b, 0x2d86, 0x600a, 0xb69e, 0xfb12, 0x0dc3,
2922 +
            0x404f, 0x96db, 0xdb57, 0x768a, 0x3b06, 0xed92, 0xa01e, 0xfb51, 0xb6dd, 0x6049, 0x2dc5,
2923 +
            0x8018, 0xcd94, 0x1b00, 0x568c, 0xad9e, 0xe012, 0x3686, 0x7b0a, 0xd6d7, 0x9b5b, 0x4dcf,
2924 +
            0x0043, 0x5b0c, 0x1680, 0xc014, 0x8d98, 0x2045, 0x6dc9, 0xbb5d, 0xf6d1, 0x1b86, 0x560a,
2925 +
            0x809e, 0xcd12, 0x60cf, 0x2d43, 0xfbd7, 0xb65b, 0xed14, 0xa098, 0x760c, 0x3b80, 0x965d,
2926 +
            0xdbd1, 0x0d45, 0x40c9, 0xbbdb, 0xf657, 0x20c3, 0x6d4f, 0xc092, 0x8d1e, 0x5b8a, 0x1606,
2927 +
            0x4d49, 0x00c5, 0xd651, 0x9bdd, 0x3600, 0x7b8c, 0xad18, 0xe094, 0x1645, 0x5bc9, 0x8d5d,
2928 +
            0xc0d1, 0x6d0c, 0x2080, 0xf614, 0xbb98, 0xe0d7, 0xad5b, 0x7bcf, 0x3643, 0x9b9e, 0xd612,
2929 +
            0x0086, 0x4d0a, 0xb618, 0xfb94, 0x2d00, 0x608c, 0xcd51, 0x80dd, 0x5649, 0x1bc5, 0x408a,
2930 +
            0x0d06, 0xdb92, 0x961e, 0x3bc3, 0x764f, 0xa0db, 0xed57, 0x370c, 0x7a80, 0xac14, 0xe198,
2931 +
            0x4c45, 0x01c9, 0xd75d, 0x9ad1, 0xc19e, 0x8c12, 0x5a86, 0x170a, 0xbad7, 0xf75b, 0x21cf,
2932 +
            0x6c43, 0x9751, 0xdadd, 0x0c49, 0x41c5, 0xec18, 0xa194, 0x7700, 0x3a8c, 0x61c3, 0x2c4f,
2933 +
            0xfadb, 0xb757, 0x1a8a, 0x5706, 0x8192, 0xcc1e, 0x3acf, 0x7743, 0xa1d7, 0xec5b, 0x4186,
2934 +
            0x0c0a, 0xda9e, 0x9712, 0xcc5d, 0x81d1, 0x5745, 0x1ac9, 0xb714, 0xfa98, 0x2c0c, 0x6180,
2935 +
            0x9a92, 0xd71e, 0x018a, 0x4c06, 0xe1db, 0xac57, 0x7ac3, 0x374f, 0x6c00, 0x218c, 0xf718,
2936 +
            0xba94, 0x1749, 0x5ac5, 0x8c51, 0xc1dd, 0x2c8a, 0x6106, 0xb792, 0xfa1e, 0x57c3, 0x1a4f,
2937 +
            0xccdb, 0x8157, 0xda18, 0x9794, 0x4100, 0x0c8c, 0xa151, 0xecdd, 0x3a49, 0x77c5, 0x8cd7,
2938 +
            0xc15b, 0x17cf, 0x5a43, 0xf79e, 0xba12, 0x6c86, 0x210a, 0x7a45, 0x37c9, 0xe15d, 0xacd1,
2939 +
            0x010c, 0x4c80, 0x9a14, 0xd798, 0x2149, 0x6cc5, 0xba51, 0xf7dd, 0x5a00, 0x178c, 0xc118,
2940 +
            0x8c94, 0xd7db, 0x9a57, 0x4cc3, 0x014f, 0xac92, 0xe11e, 0x378a, 0x7a06, 0x8114, 0xcc98,
2941 +
            0x1a0c, 0x5780, 0xfa5d, 0xb7d1, 0x6145, 0x2cc9, 0x7786, 0x3a0a, 0xec9e, 0xa112, 0x0ccf,
2942 +
            0x4143, 0x97d7, 0xda5b,
2943 +
        ],
2944 +
    ];
2945 +
2946 +
    pub static CRC16_EN_13757_TABLE: [[u16; 256]; 16] = [
2947 +
        [
2948 +
            0x0000, 0x3d65, 0x7aca, 0x47af, 0xf594, 0xc8f1, 0x8f5e, 0xb23b, 0xd64d, 0xeb28, 0xac87,
2949 +
            0x91e2, 0x23d9, 0x1ebc, 0x5913, 0x6476, 0x91ff, 0xac9a, 0xeb35, 0xd650, 0x646b, 0x590e,
2950 +
            0x1ea1, 0x23c4, 0x47b2, 0x7ad7, 0x3d78, 0x001d, 0xb226, 0x8f43, 0xc8ec, 0xf589, 0x1e9b,
2951 +
            0x23fe, 0x6451, 0x5934, 0xeb0f, 0xd66a, 0x91c5, 0xaca0, 0xc8d6, 0xf5b3, 0xb21c, 0x8f79,
2952 +
            0x3d42, 0x0027, 0x4788, 0x7aed, 0x8f64, 0xb201, 0xf5ae, 0xc8cb, 0x7af0, 0x4795, 0x003a,
2953 +
            0x3d5f, 0x5929, 0x644c, 0x23e3, 0x1e86, 0xacbd, 0x91d8, 0xd677, 0xeb12, 0x3d36, 0x0053,
2954 +
            0x47fc, 0x7a99, 0xc8a2, 0xf5c7, 0xb268, 0x8f0d, 0xeb7b, 0xd61e, 0x91b1, 0xacd4, 0x1eef,
2955 +
            0x238a, 0x6425, 0x5940, 0xacc9, 0x91ac, 0xd603, 0xeb66, 0x595d, 0x6438, 0x2397, 0x1ef2,
2956 +
            0x7a84, 0x47e1, 0x004e, 0x3d2b, 0x8f10, 0xb275, 0xf5da, 0xc8bf, 0x23ad, 0x1ec8, 0x5967,
2957 +
            0x6402, 0xd639, 0xeb5c, 0xacf3, 0x9196, 0xf5e0, 0xc885, 0x8f2a, 0xb24f, 0x0074, 0x3d11,
2958 +
            0x7abe, 0x47db, 0xb252, 0x8f37, 0xc898, 0xf5fd, 0x47c6, 0x7aa3, 0x3d0c, 0x0069, 0x641f,
2959 +
            0x597a, 0x1ed5, 0x23b0, 0x918b, 0xacee, 0xeb41, 0xd624, 0x7a6c, 0x4709, 0x00a6, 0x3dc3,
2960 +
            0x8ff8, 0xb29d, 0xf532, 0xc857, 0xac21, 0x9144, 0xd6eb, 0xeb8e, 0x59b5, 0x64d0, 0x237f,
2961 +
            0x1e1a, 0xeb93, 0xd6f6, 0x9159, 0xac3c, 0x1e07, 0x2362, 0x64cd, 0x59a8, 0x3dde, 0x00bb,
2962 +
            0x4714, 0x7a71, 0xc84a, 0xf52f, 0xb280, 0x8fe5, 0x64f7, 0x5992, 0x1e3d, 0x2358, 0x9163,
2963 +
            0xac06, 0xeba9, 0xd6cc, 0xb2ba, 0x8fdf, 0xc870, 0xf515, 0x472e, 0x7a4b, 0x3de4, 0x0081,
2964 +
            0xf508, 0xc86d, 0x8fc2, 0xb2a7, 0x009c, 0x3df9, 0x7a56, 0x4733, 0x2345, 0x1e20, 0x598f,
2965 +
            0x64ea, 0xd6d1, 0xebb4, 0xac1b, 0x917e, 0x475a, 0x7a3f, 0x3d90, 0x00f5, 0xb2ce, 0x8fab,
2966 +
            0xc804, 0xf561, 0x9117, 0xac72, 0xebdd, 0xd6b8, 0x6483, 0x59e6, 0x1e49, 0x232c, 0xd6a5,
2967 +
            0xebc0, 0xac6f, 0x910a, 0x2331, 0x1e54, 0x59fb, 0x649e, 0x00e8, 0x3d8d, 0x7a22, 0x4747,
2968 +
            0xf57c, 0xc819, 0x8fb6, 0xb2d3, 0x59c1, 0x64a4, 0x230b, 0x1e6e, 0xac55, 0x9130, 0xd69f,
2969 +
            0xebfa, 0x8f8c, 0xb2e9, 0xf546, 0xc823, 0x7a18, 0x477d, 0x00d2, 0x3db7, 0xc83e, 0xf55b,
2970 +
            0xb2f4, 0x8f91, 0x3daa, 0x00cf, 0x4760, 0x7a05, 0x1e73, 0x2316, 0x64b9, 0x59dc, 0xebe7,
2971 +
            0xd682, 0x912d, 0xac48,
2972 +
        ],
2973 +
        [
2974 +
            0x0000, 0xf4d8, 0xd4d5, 0x200d, 0x94cf, 0x6017, 0x401a, 0xb4c2, 0x14fb, 0xe023, 0xc02e,
2975 +
            0x34f6, 0x8034, 0x74ec, 0x54e1, 0xa039, 0x29f6, 0xdd2e, 0xfd23, 0x09fb, 0xbd39, 0x49e1,
2976 +
            0x69ec, 0x9d34, 0x3d0d, 0xc9d5, 0xe9d8, 0x1d00, 0xa9c2, 0x5d1a, 0x7d17, 0x89cf, 0x53ec,
2977 +
            0xa734, 0x8739, 0x73e1, 0xc723, 0x33fb, 0x13f6, 0xe72e, 0x4717, 0xb3cf, 0x93c2, 0x671a,
2978 +
            0xd3d8, 0x2700, 0x070d, 0xf3d5, 0x7a1a, 0x8ec2, 0xaecf, 0x5a17, 0xeed5, 0x1a0d, 0x3a00,
2979 +
            0xced8, 0x6ee1, 0x9a39, 0xba34, 0x4eec, 0xfa2e, 0x0ef6, 0x2efb, 0xda23, 0xa7d8, 0x5300,
2980 +
            0x730d, 0x87d5, 0x3317, 0xc7cf, 0xe7c2, 0x131a, 0xb323, 0x47fb, 0x67f6, 0x932e, 0x27ec,
2981 +
            0xd334, 0xf339, 0x07e1, 0x8e2e, 0x7af6, 0x5afb, 0xae23, 0x1ae1, 0xee39, 0xce34, 0x3aec,
2982 +
            0x9ad5, 0x6e0d, 0x4e00, 0xbad8, 0x0e1a, 0xfac2, 0xdacf, 0x2e17, 0xf434, 0x00ec, 0x20e1,
2983 +
            0xd439, 0x60fb, 0x9423, 0xb42e, 0x40f6, 0xe0cf, 0x1417, 0x341a, 0xc0c2, 0x7400, 0x80d8,
2984 +
            0xa0d5, 0x540d, 0xddc2, 0x291a, 0x0917, 0xfdcf, 0x490d, 0xbdd5, 0x9dd8, 0x6900, 0xc939,
2985 +
            0x3de1, 0x1dec, 0xe934, 0x5df6, 0xa92e, 0x8923, 0x7dfb, 0x72d5, 0x860d, 0xa600, 0x52d8,
2986 +
            0xe61a, 0x12c2, 0x32cf, 0xc617, 0x662e, 0x92f6, 0xb2fb, 0x4623, 0xf2e1, 0x0639, 0x2634,
2987 +
            0xd2ec, 0x5b23, 0xaffb, 0x8ff6, 0x7b2e, 0xcfec, 0x3b34, 0x1b39, 0xefe1, 0x4fd8, 0xbb00,
2988 +
            0x9b0d, 0x6fd5, 0xdb17, 0x2fcf, 0x0fc2, 0xfb1a, 0x2139, 0xd5e1, 0xf5ec, 0x0134, 0xb5f6,
2989 +
            0x412e, 0x6123, 0x95fb, 0x35c2, 0xc11a, 0xe117, 0x15cf, 0xa10d, 0x55d5, 0x75d8, 0x8100,
2990 +
            0x08cf, 0xfc17, 0xdc1a, 0x28c2, 0x9c00, 0x68d8, 0x48d5, 0xbc0d, 0x1c34, 0xe8ec, 0xc8e1,
2991 +
            0x3c39, 0x88fb, 0x7c23, 0x5c2e, 0xa8f6, 0xd50d, 0x21d5, 0x01d8, 0xf500, 0x41c2, 0xb51a,
2992 +
            0x9517, 0x61cf, 0xc1f6, 0x352e, 0x1523, 0xe1fb, 0x5539, 0xa1e1, 0x81ec, 0x7534, 0xfcfb,
2993 +
            0x0823, 0x282e, 0xdcf6, 0x6834, 0x9cec, 0xbce1, 0x4839, 0xe800, 0x1cd8, 0x3cd5, 0xc80d,
2994 +
            0x7ccf, 0x8817, 0xa81a, 0x5cc2, 0x86e1, 0x7239, 0x5234, 0xa6ec, 0x122e, 0xe6f6, 0xc6fb,
2995 +
            0x3223, 0x921a, 0x66c2, 0x46cf, 0xb217, 0x06d5, 0xf20d, 0xd200, 0x26d8, 0xaf17, 0x5bcf,
2996 +
            0x7bc2, 0x8f1a, 0x3bd8, 0xcf00, 0xef0d, 0x1bd5, 0xbbec, 0x4f34, 0x6f39, 0x9be1, 0x2f23,
2997 +
            0xdbfb, 0xfbf6, 0x0f2e,
2998 +
        ],
2999 +
        [
3000 +
            0x0000, 0xe5aa, 0xf631, 0x139b, 0xd107, 0x34ad, 0x2736, 0xc29c, 0x9f6b, 0x7ac1, 0x695a,
3001 +
            0x8cf0, 0x4e6c, 0xabc6, 0xb85d, 0x5df7, 0x03b3, 0xe619, 0xf582, 0x1028, 0xd2b4, 0x371e,
3002 +
            0x2485, 0xc12f, 0x9cd8, 0x7972, 0x6ae9, 0x8f43, 0x4ddf, 0xa875, 0xbbee, 0x5e44, 0x0766,
3003 +
            0xe2cc, 0xf157, 0x14fd, 0xd661, 0x33cb, 0x2050, 0xc5fa, 0x980d, 0x7da7, 0x6e3c, 0x8b96,
3004 +
            0x490a, 0xaca0, 0xbf3b, 0x5a91, 0x04d5, 0xe17f, 0xf2e4, 0x174e, 0xd5d2, 0x3078, 0x23e3,
3005 +
            0xc649, 0x9bbe, 0x7e14, 0x6d8f, 0x8825, 0x4ab9, 0xaf13, 0xbc88, 0x5922, 0x0ecc, 0xeb66,
3006 +
            0xf8fd, 0x1d57, 0xdfcb, 0x3a61, 0x29fa, 0xcc50, 0x91a7, 0x740d, 0x6796, 0x823c, 0x40a0,
3007 +
            0xa50a, 0xb691, 0x533b, 0x0d7f, 0xe8d5, 0xfb4e, 0x1ee4, 0xdc78, 0x39d2, 0x2a49, 0xcfe3,
3008 +
            0x9214, 0x77be, 0x6425, 0x818f, 0x4313, 0xa6b9, 0xb522, 0x5088, 0x09aa, 0xec00, 0xff9b,
3009 +
            0x1a31, 0xd8ad, 0x3d07, 0x2e9c, 0xcb36, 0x96c1, 0x736b, 0x60f0, 0x855a, 0x47c6, 0xa26c,
3010 +
            0xb1f7, 0x545d, 0x0a19, 0xefb3, 0xfc28, 0x1982, 0xdb1e, 0x3eb4, 0x2d2f, 0xc885, 0x9572,
3011 +
            0x70d8, 0x6343, 0x86e9, 0x4475, 0xa1df, 0xb244, 0x57ee, 0x1d98, 0xf832, 0xeba9, 0x0e03,
3012 +
            0xcc9f, 0x2935, 0x3aae, 0xdf04, 0x82f3, 0x6759, 0x74c2, 0x9168, 0x53f4, 0xb65e, 0xa5c5,
3013 +
            0x406f, 0x1e2b, 0xfb81, 0xe81a, 0x0db0, 0xcf2c, 0x2a86, 0x391d, 0xdcb7, 0x8140, 0x64ea,
3014 +
            0x7771, 0x92db, 0x5047, 0xb5ed, 0xa676, 0x43dc, 0x1afe, 0xff54, 0xeccf, 0x0965, 0xcbf9,
3015 +
            0x2e53, 0x3dc8, 0xd862, 0x8595, 0x603f, 0x73a4, 0x960e, 0x5492, 0xb138, 0xa2a3, 0x4709,
3016 +
            0x194d, 0xfce7, 0xef7c, 0x0ad6, 0xc84a, 0x2de0, 0x3e7b, 0xdbd1, 0x8626, 0x638c, 0x7017,
3017 +
            0x95bd, 0x5721, 0xb28b, 0xa110, 0x44ba, 0x1354, 0xf6fe, 0xe565, 0x00cf, 0xc253, 0x27f9,
3018 +
            0x3462, 0xd1c8, 0x8c3f, 0x6995, 0x7a0e, 0x9fa4, 0x5d38, 0xb892, 0xab09, 0x4ea3, 0x10e7,
3019 +
            0xf54d, 0xe6d6, 0x037c, 0xc1e0, 0x244a, 0x37d1, 0xd27b, 0x8f8c, 0x6a26, 0x79bd, 0x9c17,
3020 +
            0x5e8b, 0xbb21, 0xa8ba, 0x4d10, 0x1432, 0xf198, 0xe203, 0x07a9, 0xc535, 0x209f, 0x3304,
3021 +
            0xd6ae, 0x8b59, 0x6ef3, 0x7d68, 0x98c2, 0x5a5e, 0xbff4, 0xac6f, 0x49c5, 0x1781, 0xf22b,
3022 +
            0xe1b0, 0x041a, 0xc686, 0x232c, 0x30b7, 0xd51d, 0x88ea, 0x6d40, 0x7edb, 0x9b71, 0x59ed,
3023 +
            0xbc47, 0xafdc, 0x4a76,
3024 +
        ],
3025 +
        [
3026 +
            0x0000, 0x3b30, 0x7660, 0x4d50, 0xecc0, 0xd7f0, 0x9aa0, 0xa190, 0xe4e5, 0xdfd5, 0x9285,
3027 +
            0xa9b5, 0x0825, 0x3315, 0x7e45, 0x4575, 0xf4af, 0xcf9f, 0x82cf, 0xb9ff, 0x186f, 0x235f,
3028 +
            0x6e0f, 0x553f, 0x104a, 0x2b7a, 0x662a, 0x5d1a, 0xfc8a, 0xc7ba, 0x8aea, 0xb1da, 0xd43b,
3029 +
            0xef0b, 0xa25b, 0x996b, 0x38fb, 0x03cb, 0x4e9b, 0x75ab, 0x30de, 0x0bee, 0x46be, 0x7d8e,
3030 +
            0xdc1e, 0xe72e, 0xaa7e, 0x914e, 0x2094, 0x1ba4, 0x56f4, 0x6dc4, 0xcc54, 0xf764, 0xba34,
3031 +
            0x8104, 0xc471, 0xff41, 0xb211, 0x8921, 0x28b1, 0x1381, 0x5ed1, 0x65e1, 0x9513, 0xae23,
3032 +
            0xe373, 0xd843, 0x79d3, 0x42e3, 0x0fb3, 0x3483, 0x71f6, 0x4ac6, 0x0796, 0x3ca6, 0x9d36,
3033 +
            0xa606, 0xeb56, 0xd066, 0x61bc, 0x5a8c, 0x17dc, 0x2cec, 0x8d7c, 0xb64c, 0xfb1c, 0xc02c,
3034 +
            0x8559, 0xbe69, 0xf339, 0xc809, 0x6999, 0x52a9, 0x1ff9, 0x24c9, 0x4128, 0x7a18, 0x3748,
3035 +
            0x0c78, 0xade8, 0x96d8, 0xdb88, 0xe0b8, 0xa5cd, 0x9efd, 0xd3ad, 0xe89d, 0x490d, 0x723d,
3036 +
            0x3f6d, 0x045d, 0xb587, 0x8eb7, 0xc3e7, 0xf8d7, 0x5947, 0x6277, 0x2f27, 0x1417, 0x5162,
3037 +
            0x6a52, 0x2702, 0x1c32, 0xbda2, 0x8692, 0xcbc2, 0xf0f2, 0x1743, 0x2c73, 0x6123, 0x5a13,
3038 +
            0xfb83, 0xc0b3, 0x8de3, 0xb6d3, 0xf3a6, 0xc896, 0x85c6, 0xbef6, 0x1f66, 0x2456, 0x6906,
3039 +
            0x5236, 0xe3ec, 0xd8dc, 0x958c, 0xaebc, 0x0f2c, 0x341c, 0x794c, 0x427c, 0x0709, 0x3c39,
3040 +
            0x7169, 0x4a59, 0xebc9, 0xd0f9, 0x9da9, 0xa699, 0xc378, 0xf848, 0xb518, 0x8e28, 0x2fb8,
3041 +
            0x1488, 0x59d8, 0x62e8, 0x279d, 0x1cad, 0x51fd, 0x6acd, 0xcb5d, 0xf06d, 0xbd3d, 0x860d,
3042 +
            0x37d7, 0x0ce7, 0x41b7, 0x7a87, 0xdb17, 0xe027, 0xad77, 0x9647, 0xd332, 0xe802, 0xa552,
3043 +
            0x9e62, 0x3ff2, 0x04c2, 0x4992, 0x72a2, 0x8250, 0xb960, 0xf430, 0xcf00, 0x6e90, 0x55a0,
3044 +
            0x18f0, 0x23c0, 0x66b5, 0x5d85, 0x10d5, 0x2be5, 0x8a75, 0xb145, 0xfc15, 0xc725, 0x76ff,
3045 +
            0x4dcf, 0x009f, 0x3baf, 0x9a3f, 0xa10f, 0xec5f, 0xd76f, 0x921a, 0xa92a, 0xe47a, 0xdf4a,
3046 +
            0x7eda, 0x45ea, 0x08ba, 0x338a, 0x566b, 0x6d5b, 0x200b, 0x1b3b, 0xbaab, 0x819b, 0xcccb,
3047 +
            0xf7fb, 0xb28e, 0x89be, 0xc4ee, 0xffde, 0x5e4e, 0x657e, 0x282e, 0x131e, 0xa2c4, 0x99f4,
3048 +
            0xd4a4, 0xef94, 0x4e04, 0x7534, 0x3864, 0x0354, 0x4621, 0x7d11, 0x3041, 0x0b71, 0xaae1,
3049 +
            0x91d1, 0xdc81, 0xe7b1,
3050 +
        ],
3051 +
        [
3052 +
            0x0000, 0x2e86, 0x5d0c, 0x738a, 0xba18, 0x949e, 0xe714, 0xc992, 0x4955, 0x67d3, 0x1459,
3053 +
            0x3adf, 0xf34d, 0xddcb, 0xae41, 0x80c7, 0x92aa, 0xbc2c, 0xcfa6, 0xe120, 0x28b2, 0x0634,
3054 +
            0x75be, 0x5b38, 0xdbff, 0xf579, 0x86f3, 0xa875, 0x61e7, 0x4f61, 0x3ceb, 0x126d, 0x1831,
3055 +
            0x36b7, 0x453d, 0x6bbb, 0xa229, 0x8caf, 0xff25, 0xd1a3, 0x5164, 0x7fe2, 0x0c68, 0x22ee,
3056 +
            0xeb7c, 0xc5fa, 0xb670, 0x98f6, 0x8a9b, 0xa41d, 0xd797, 0xf911, 0x3083, 0x1e05, 0x6d8f,
3057 +
            0x4309, 0xc3ce, 0xed48, 0x9ec2, 0xb044, 0x79d6, 0x5750, 0x24da, 0x0a5c, 0x3062, 0x1ee4,
3058 +
            0x6d6e, 0x43e8, 0x8a7a, 0xa4fc, 0xd776, 0xf9f0, 0x7937, 0x57b1, 0x243b, 0x0abd, 0xc32f,
3059 +
            0xeda9, 0x9e23, 0xb0a5, 0xa2c8, 0x8c4e, 0xffc4, 0xd142, 0x18d0, 0x3656, 0x45dc, 0x6b5a,
3060 +
            0xeb9d, 0xc51b, 0xb691, 0x9817, 0x5185, 0x7f03, 0x0c89, 0x220f, 0x2853, 0x06d5, 0x755f,
3061 +
            0x5bd9, 0x924b, 0xbccd, 0xcf47, 0xe1c1, 0x6106, 0x4f80, 0x3c0a, 0x128c, 0xdb1e, 0xf598,
3062 +
            0x8612, 0xa894, 0xbaf9, 0x947f, 0xe7f5, 0xc973, 0x00e1, 0x2e67, 0x5ded, 0x736b, 0xf3ac,
3063 +
            0xdd2a, 0xaea0, 0x8026, 0x49b4, 0x6732, 0x14b8, 0x3a3e, 0x60c4, 0x4e42, 0x3dc8, 0x134e,
3064 +
            0xdadc, 0xf45a, 0x87d0, 0xa956, 0x2991, 0x0717, 0x749d, 0x5a1b, 0x9389, 0xbd0f, 0xce85,
3065 +
            0xe003, 0xf26e, 0xdce8, 0xaf62, 0x81e4, 0x4876, 0x66f0, 0x157a, 0x3bfc, 0xbb3b, 0x95bd,
3066 +
            0xe637, 0xc8b1, 0x0123, 0x2fa5, 0x5c2f, 0x72a9, 0x78f5, 0x5673, 0x25f9, 0x0b7f, 0xc2ed,
3067 +
            0xec6b, 0x9fe1, 0xb167, 0x31a0, 0x1f26, 0x6cac, 0x422a, 0x8bb8, 0xa53e, 0xd6b4, 0xf832,
3068 +
            0xea5f, 0xc4d9, 0xb753, 0x99d5, 0x5047, 0x7ec1, 0x0d4b, 0x23cd, 0xa30a, 0x8d8c, 0xfe06,
3069 +
            0xd080, 0x1912, 0x3794, 0x441e, 0x6a98, 0x50a6, 0x7e20, 0x0daa, 0x232c, 0xeabe, 0xc438,
3070 +
            0xb7b2, 0x9934, 0x19f3, 0x3775, 0x44ff, 0x6a79, 0xa3eb, 0x8d6d, 0xfee7, 0xd061, 0xc20c,
3071 +
            0xec8a, 0x9f00, 0xb186, 0x7814, 0x5692, 0x2518, 0x0b9e, 0x8b59, 0xa5df, 0xd655, 0xf8d3,
3072 +
            0x3141, 0x1fc7, 0x6c4d, 0x42cb, 0x4897, 0x6611, 0x159b, 0x3b1d, 0xf28f, 0xdc09, 0xaf83,
3073 +
            0x8105, 0x01c2, 0x2f44, 0x5cce, 0x7248, 0xbbda, 0x955c, 0xe6d6, 0xc850, 0xda3d, 0xf4bb,
3074 +
            0x8731, 0xa9b7, 0x6025, 0x4ea3, 0x3d29, 0x13af, 0x9368, 0xbdee, 0xce64, 0xe0e2, 0x2970,
3075 +
            0x07f6, 0x747c, 0x5afa,
3076 +
        ],
3077 +
        [
3078 +
            0x0000, 0xc188, 0xbe75, 0x7ffd, 0x418f, 0x8007, 0xfffa, 0x3e72, 0x831e, 0x4296, 0x3d6b,
3079 +
            0xfce3, 0xc291, 0x0319, 0x7ce4, 0xbd6c, 0x3b59, 0xfad1, 0x852c, 0x44a4, 0x7ad6, 0xbb5e,
3080 +
            0xc4a3, 0x052b, 0xb847, 0x79cf, 0x0632, 0xc7ba, 0xf9c8, 0x3840, 0x47bd, 0x8635, 0x76b2,
3081 +
            0xb73a, 0xc8c7, 0x094f, 0x373d, 0xf6b5, 0x8948, 0x48c0, 0xf5ac, 0x3424, 0x4bd9, 0x8a51,
3082 +
            0xb423, 0x75ab, 0x0a56, 0xcbde, 0x4deb, 0x8c63, 0xf39e, 0x3216, 0x0c64, 0xcdec, 0xb211,
3083 +
            0x7399, 0xcef5, 0x0f7d, 0x7080, 0xb108, 0x8f7a, 0x4ef2, 0x310f, 0xf087, 0xed64, 0x2cec,
3084 +
            0x5311, 0x9299, 0xaceb, 0x6d63, 0x129e, 0xd316, 0x6e7a, 0xaff2, 0xd00f, 0x1187, 0x2ff5,
3085 +
            0xee7d, 0x9180, 0x5008, 0xd63d, 0x17b5, 0x6848, 0xa9c0, 0x97b2, 0x563a, 0x29c7, 0xe84f,
3086 +
            0x5523, 0x94ab, 0xeb56, 0x2ade, 0x14ac, 0xd524, 0xaad9, 0x6b51, 0x9bd6, 0x5a5e, 0x25a3,
3087 +
            0xe42b, 0xda59, 0x1bd1, 0x642c, 0xa5a4, 0x18c8, 0xd940, 0xa6bd, 0x6735, 0x5947, 0x98cf,
3088 +
            0xe732, 0x26ba, 0xa08f, 0x6107, 0x1efa, 0xdf72, 0xe100, 0x2088, 0x5f75, 0x9efd, 0x2391,
3089 +
            0xe219, 0x9de4, 0x5c6c, 0x621e, 0xa396, 0xdc6b, 0x1de3, 0xe7ad, 0x2625, 0x59d8, 0x9850,
3090 +
            0xa622, 0x67aa, 0x1857, 0xd9df, 0x64b3, 0xa53b, 0xdac6, 0x1b4e, 0x253c, 0xe4b4, 0x9b49,
3091 +
            0x5ac1, 0xdcf4, 0x1d7c, 0x6281, 0xa309, 0x9d7b, 0x5cf3, 0x230e, 0xe286, 0x5fea, 0x9e62,
3092 +
            0xe19f, 0x2017, 0x1e65, 0xdfed, 0xa010, 0x6198, 0x911f, 0x5097, 0x2f6a, 0xeee2, 0xd090,
3093 +
            0x1118, 0x6ee5, 0xaf6d, 0x1201, 0xd389, 0xac74, 0x6dfc, 0x538e, 0x9206, 0xedfb, 0x2c73,
3094 +
            0xaa46, 0x6bce, 0x1433, 0xd5bb, 0xebc9, 0x2a41, 0x55bc, 0x9434, 0x2958, 0xe8d0, 0x972d,
3095 +
            0x56a5, 0x68d7, 0xa95f, 0xd6a2, 0x172a, 0x0ac9, 0xcb41, 0xb4bc, 0x7534, 0x4b46, 0x8ace,
3096 +
            0xf533, 0x34bb, 0x89d7, 0x485f, 0x37a2, 0xf62a, 0xc858, 0x09d0, 0x762d, 0xb7a5, 0x3190,
3097 +
            0xf018, 0x8fe5, 0x4e6d, 0x701f, 0xb197, 0xce6a, 0x0fe2, 0xb28e, 0x7306, 0x0cfb, 0xcd73,
3098 +
            0xf301, 0x3289, 0x4d74, 0x8cfc, 0x7c7b, 0xbdf3, 0xc20e, 0x0386, 0x3df4, 0xfc7c, 0x8381,
3099 +
            0x4209, 0xff65, 0x3eed, 0x4110, 0x8098, 0xbeea, 0x7f62, 0x009f, 0xc117, 0x4722, 0x86aa,
3100 +
            0xf957, 0x38df, 0x06ad, 0xc725, 0xb8d8, 0x7950, 0xc43c, 0x05b4, 0x7a49, 0xbbc1, 0x85b3,
3101 +
            0x443b, 0x3bc6, 0xfa4e,
3102 +
        ],
3103 +
        [
3104 +
            0x0000, 0xf23f, 0xd91b, 0x2b24, 0x8f53, 0x7d6c, 0x5648, 0xa477, 0x23c3, 0xd1fc, 0xfad8,
3105 +
            0x08e7, 0xac90, 0x5eaf, 0x758b, 0x87b4, 0x4786, 0xb5b9, 0x9e9d, 0x6ca2, 0xc8d5, 0x3aea,
3106 +
            0x11ce, 0xe3f1, 0x6445, 0x967a, 0xbd5e, 0x4f61, 0xeb16, 0x1929, 0x320d, 0xc032, 0x8f0c,
3107 +
            0x7d33, 0x5617, 0xa428, 0x005f, 0xf260, 0xd944, 0x2b7b, 0xaccf, 0x5ef0, 0x75d4, 0x87eb,
3108 +
            0x239c, 0xd1a3, 0xfa87, 0x08b8, 0xc88a, 0x3ab5, 0x1191, 0xe3ae, 0x47d9, 0xb5e6, 0x9ec2,
3109 +
            0x6cfd, 0xeb49, 0x1976, 0x3252, 0xc06d, 0x641a, 0x9625, 0xbd01, 0x4f3e, 0x237d, 0xd142,
3110 +
            0xfa66, 0x0859, 0xac2e, 0x5e11, 0x7535, 0x870a, 0x00be, 0xf281, 0xd9a5, 0x2b9a, 0x8fed,
3111 +
            0x7dd2, 0x56f6, 0xa4c9, 0x64fb, 0x96c4, 0xbde0, 0x4fdf, 0xeba8, 0x1997, 0x32b3, 0xc08c,
3112 +
            0x4738, 0xb507, 0x9e23, 0x6c1c, 0xc86b, 0x3a54, 0x1170, 0xe34f, 0xac71, 0x5e4e, 0x756a,
3113 +
            0x8755, 0x2322, 0xd11d, 0xfa39, 0x0806, 0x8fb2, 0x7d8d, 0x56a9, 0xa496, 0x00e1, 0xf2de,
3114 +
            0xd9fa, 0x2bc5, 0xebf7, 0x19c8, 0x32ec, 0xc0d3, 0x64a4, 0x969b, 0xbdbf, 0x4f80, 0xc834,
3115 +
            0x3a0b, 0x112f, 0xe310, 0x4767, 0xb558, 0x9e7c, 0x6c43, 0x46fa, 0xb4c5, 0x9fe1, 0x6dde,
3116 +
            0xc9a9, 0x3b96, 0x10b2, 0xe28d, 0x6539, 0x9706, 0xbc22, 0x4e1d, 0xea6a, 0x1855, 0x3371,
3117 +
            0xc14e, 0x017c, 0xf343, 0xd867, 0x2a58, 0x8e2f, 0x7c10, 0x5734, 0xa50b, 0x22bf, 0xd080,
3118 +
            0xfba4, 0x099b, 0xadec, 0x5fd3, 0x74f7, 0x86c8, 0xc9f6, 0x3bc9, 0x10ed, 0xe2d2, 0x46a5,
3119 +
            0xb49a, 0x9fbe, 0x6d81, 0xea35, 0x180a, 0x332e, 0xc111, 0x6566, 0x9759, 0xbc7d, 0x4e42,
3120 +
            0x8e70, 0x7c4f, 0x576b, 0xa554, 0x0123, 0xf31c, 0xd838, 0x2a07, 0xadb3, 0x5f8c, 0x74a8,
3121 +
            0x8697, 0x22e0, 0xd0df, 0xfbfb, 0x09c4, 0x6587, 0x97b8, 0xbc9c, 0x4ea3, 0xead4, 0x18eb,
3122 +
            0x33cf, 0xc1f0, 0x4644, 0xb47b, 0x9f5f, 0x6d60, 0xc917, 0x3b28, 0x100c, 0xe233, 0x2201,
3123 +
            0xd03e, 0xfb1a, 0x0925, 0xad52, 0x5f6d, 0x7449, 0x8676, 0x01c2, 0xf3fd, 0xd8d9, 0x2ae6,
3124 +
            0x8e91, 0x7cae, 0x578a, 0xa5b5, 0xea8b, 0x18b4, 0x3390, 0xc1af, 0x65d8, 0x97e7, 0xbcc3,
3125 +
            0x4efc, 0xc948, 0x3b77, 0x1053, 0xe26c, 0x461b, 0xb424, 0x9f00, 0x6d3f, 0xad0d, 0x5f32,
3126 +
            0x7416, 0x8629, 0x225e, 0xd061, 0xfb45, 0x097a, 0x8ece, 0x7cf1, 0x57d5, 0xa5ea, 0x019d,
3127 +
            0xf3a2, 0xd886, 0x2ab9,
3128 +
        ],
3129 +
        [
3130 +
            0x0000, 0x8df4, 0x268d, 0xab79, 0x4d1a, 0xc0ee, 0x6b97, 0xe663, 0x9a34, 0x17c0, 0xbcb9,
3131 +
            0x314d, 0xd72e, 0x5ada, 0xf1a3, 0x7c57, 0x090d, 0x84f9, 0x2f80, 0xa274, 0x4417, 0xc9e3,
3132 +
            0x629a, 0xef6e, 0x9339, 0x1ecd, 0xb5b4, 0x3840, 0xde23, 0x53d7, 0xf8ae, 0x755a, 0x121a,
3133 +
            0x9fee, 0x3497, 0xb963, 0x5f00, 0xd2f4, 0x798d, 0xf479, 0x882e, 0x05da, 0xaea3, 0x2357,
3134 +
            0xc534, 0x48c0, 0xe3b9, 0x6e4d, 0x1b17, 0x96e3, 0x3d9a, 0xb06e, 0x560d, 0xdbf9, 0x7080,
3135 +
            0xfd74, 0x8123, 0x0cd7, 0xa7ae, 0x2a5a, 0xcc39, 0x41cd, 0xeab4, 0x6740, 0x2434, 0xa9c0,
3136 +
            0x02b9, 0x8f4d, 0x692e, 0xe4da, 0x4fa3, 0xc257, 0xbe00, 0x33f4, 0x988d, 0x1579, 0xf31a,
3137 +
            0x7eee, 0xd597, 0x5863, 0x2d39, 0xa0cd, 0x0bb4, 0x8640, 0x6023, 0xedd7, 0x46ae, 0xcb5a,
3138 +
            0xb70d, 0x3af9, 0x9180, 0x1c74, 0xfa17, 0x77e3, 0xdc9a, 0x516e, 0x362e, 0xbbda, 0x10a3,
3139 +
            0x9d57, 0x7b34, 0xf6c0, 0x5db9, 0xd04d, 0xac1a, 0x21ee, 0x8a97, 0x0763, 0xe100, 0x6cf4,
3140 +
            0xc78d, 0x4a79, 0x3f23, 0xb2d7, 0x19ae, 0x945a, 0x7239, 0xffcd, 0x54b4, 0xd940, 0xa517,
3141 +
            0x28e3, 0x839a, 0x0e6e, 0xe80d, 0x65f9, 0xce80, 0x4374, 0x4868, 0xc59c, 0x6ee5, 0xe311,
3142 +
            0x0572, 0x8886, 0x23ff, 0xae0b, 0xd25c, 0x5fa8, 0xf4d1, 0x7925, 0x9f46, 0x12b2, 0xb9cb,
3143 +
            0x343f, 0x4165, 0xcc91, 0x67e8, 0xea1c, 0x0c7f, 0x818b, 0x2af2, 0xa706, 0xdb51, 0x56a5,
3144 +
            0xfddc, 0x7028, 0x964b, 0x1bbf, 0xb0c6, 0x3d32, 0x5a72, 0xd786, 0x7cff, 0xf10b, 0x1768,
3145 +
            0x9a9c, 0x31e5, 0xbc11, 0xc046, 0x4db2, 0xe6cb, 0x6b3f, 0x8d5c, 0x00a8, 0xabd1, 0x2625,
3146 +
            0x537f, 0xde8b, 0x75f2, 0xf806, 0x1e65, 0x9391, 0x38e8, 0xb51c, 0xc94b, 0x44bf, 0xefc6,
3147 +
            0x6232, 0x8451, 0x09a5, 0xa2dc, 0x2f28, 0x6c5c, 0xe1a8, 0x4ad1, 0xc725, 0x2146, 0xacb2,
3148 +
            0x07cb, 0x8a3f, 0xf668, 0x7b9c, 0xd0e5, 0x5d11, 0xbb72, 0x3686, 0x9dff, 0x100b, 0x6551,
3149 +
            0xe8a5, 0x43dc, 0xce28, 0x284b, 0xa5bf, 0x0ec6, 0x8332, 0xff65, 0x7291, 0xd9e8, 0x541c,
3150 +
            0xb27f, 0x3f8b, 0x94f2, 0x1906, 0x7e46, 0xf3b2, 0x58cb, 0xd53f, 0x335c, 0xbea8, 0x15d1,
3151 +
            0x9825, 0xe472, 0x6986, 0xc2ff, 0x4f0b, 0xa968, 0x249c, 0x8fe5, 0x0211, 0x774b, 0xfabf,
3152 +
            0x51c6, 0xdc32, 0x3a51, 0xb7a5, 0x1cdc, 0x9128, 0xed7f, 0x608b, 0xcbf2, 0x4606, 0xa065,
3153 +
            0x2d91, 0x86e8, 0x0b1c,
3154 +
        ],
3155 +
        [
3156 +
            0x0000, 0x90d0, 0x1cc5, 0x8c15, 0x398a, 0xa95a, 0x254f, 0xb59f, 0x7314, 0xe3c4, 0x6fd1,
3157 +
            0xff01, 0x4a9e, 0xda4e, 0x565b, 0xc68b, 0xe628, 0x76f8, 0xfaed, 0x6a3d, 0xdfa2, 0x4f72,
3158 +
            0xc367, 0x53b7, 0x953c, 0x05ec, 0x89f9, 0x1929, 0xacb6, 0x3c66, 0xb073, 0x20a3, 0xf135,
3159 +
            0x61e5, 0xedf0, 0x7d20, 0xc8bf, 0x586f, 0xd47a, 0x44aa, 0x8221, 0x12f1, 0x9ee4, 0x0e34,
3160 +
            0xbbab, 0x2b7b, 0xa76e, 0x37be, 0x171d, 0x87cd, 0x0bd8, 0x9b08, 0x2e97, 0xbe47, 0x3252,
3161 +
            0xa282, 0x6409, 0xf4d9, 0x78cc, 0xe81c, 0x5d83, 0xcd53, 0x4146, 0xd196, 0xdf0f, 0x4fdf,
3162 +
            0xc3ca, 0x531a, 0xe685, 0x7655, 0xfa40, 0x6a90, 0xac1b, 0x3ccb, 0xb0de, 0x200e, 0x9591,
3163 +
            0x0541, 0x8954, 0x1984, 0x3927, 0xa9f7, 0x25e2, 0xb532, 0x00ad, 0x907d, 0x1c68, 0x8cb8,
3164 +
            0x4a33, 0xdae3, 0x56f6, 0xc626, 0x73b9, 0xe369, 0x6f7c, 0xffac, 0x2e3a, 0xbeea, 0x32ff,
3165 +
            0xa22f, 0x17b0, 0x8760, 0x0b75, 0x9ba5, 0x5d2e, 0xcdfe, 0x41eb, 0xd13b, 0x64a4, 0xf474,
3166 +
            0x7861, 0xe8b1, 0xc812, 0x58c2, 0xd4d7, 0x4407, 0xf198, 0x6148, 0xed5d, 0x7d8d, 0xbb06,
3167 +
            0x2bd6, 0xa7c3, 0x3713, 0x828c, 0x125c, 0x9e49, 0x0e99, 0x837b, 0x13ab, 0x9fbe, 0x0f6e,
3168 +
            0xbaf1, 0x2a21, 0xa634, 0x36e4, 0xf06f, 0x60bf, 0xecaa, 0x7c7a, 0xc9e5, 0x5935, 0xd520,
3169 +
            0x45f0, 0x6553, 0xf583, 0x7996, 0xe946, 0x5cd9, 0xcc09, 0x401c, 0xd0cc, 0x1647, 0x8697,
3170 +
            0x0a82, 0x9a52, 0x2fcd, 0xbf1d, 0x3308, 0xa3d8, 0x724e, 0xe29e, 0x6e8b, 0xfe5b, 0x4bc4,
3171 +
            0xdb14, 0x5701, 0xc7d1, 0x015a, 0x918a, 0x1d9f, 0x8d4f, 0x38d0, 0xa800, 0x2415, 0xb4c5,
3172 +
            0x9466, 0x04b6, 0x88a3, 0x1873, 0xadec, 0x3d3c, 0xb129, 0x21f9, 0xe772, 0x77a2, 0xfbb7,
3173 +
            0x6b67, 0xdef8, 0x4e28, 0xc23d, 0x52ed, 0x5c74, 0xcca4, 0x40b1, 0xd061, 0x65fe, 0xf52e,
3174 +
            0x793b, 0xe9eb, 0x2f60, 0xbfb0, 0x33a5, 0xa375, 0x16ea, 0x863a, 0x0a2f, 0x9aff, 0xba5c,
3175 +
            0x2a8c, 0xa699, 0x3649, 0x83d6, 0x1306, 0x9f13, 0x0fc3, 0xc948, 0x5998, 0xd58d, 0x455d,
3176 +
            0xf0c2, 0x6012, 0xec07, 0x7cd7, 0xad41, 0x3d91, 0xb184, 0x2154, 0x94cb, 0x041b, 0x880e,
3177 +
            0x18de, 0xde55, 0x4e85, 0xc290, 0x5240, 0xe7df, 0x770f, 0xfb1a, 0x6bca, 0x4b69, 0xdbb9,
3178 +
            0x57ac, 0xc77c, 0x72e3, 0xe233, 0x6e26, 0xfef6, 0x387d, 0xa8ad, 0x24b8, 0xb468, 0x01f7,
3179 +
            0x9127, 0x1d32, 0x8de2,
3180 +
        ],
3181 +
        [
3182 +
            0x0000, 0x3b93, 0x7726, 0x4cb5, 0xee4c, 0xd5df, 0x996a, 0xa2f9, 0xe1fd, 0xda6e, 0x96db,
3183 +
            0xad48, 0x0fb1, 0x3422, 0x7897, 0x4304, 0xfe9f, 0xc50c, 0x89b9, 0xb22a, 0x10d3, 0x2b40,
3184 +
            0x67f5, 0x5c66, 0x1f62, 0x24f1, 0x6844, 0x53d7, 0xf12e, 0xcabd, 0x8608, 0xbd9b, 0xc05b,
3185 +
            0xfbc8, 0xb77d, 0x8cee, 0x2e17, 0x1584, 0x5931, 0x62a2, 0x21a6, 0x1a35, 0x5680, 0x6d13,
3186 +
            0xcfea, 0xf479, 0xb8cc, 0x835f, 0x3ec4, 0x0557, 0x49e2, 0x7271, 0xd088, 0xeb1b, 0xa7ae,
3187 +
            0x9c3d, 0xdf39, 0xe4aa, 0xa81f, 0x938c, 0x3175, 0x0ae6, 0x4653, 0x7dc0, 0xbdd3, 0x8640,
3188 +
            0xcaf5, 0xf166, 0x539f, 0x680c, 0x24b9, 0x1f2a, 0x5c2e, 0x67bd, 0x2b08, 0x109b, 0xb262,
3189 +
            0x89f1, 0xc544, 0xfed7, 0x434c, 0x78df, 0x346a, 0x0ff9, 0xad00, 0x9693, 0xda26, 0xe1b5,
3190 +
            0xa2b1, 0x9922, 0xd597, 0xee04, 0x4cfd, 0x776e, 0x3bdb, 0x0048, 0x7d88, 0x461b, 0x0aae,
3191 +
            0x313d, 0x93c4, 0xa857, 0xe4e2, 0xdf71, 0x9c75, 0xa7e6, 0xeb53, 0xd0c0, 0x7239, 0x49aa,
3192 +
            0x051f, 0x3e8c, 0x8317, 0xb884, 0xf431, 0xcfa2, 0x6d5b, 0x56c8, 0x1a7d, 0x21ee, 0x62ea,
3193 +
            0x5979, 0x15cc, 0x2e5f, 0x8ca6, 0xb735, 0xfb80, 0xc013, 0x46c3, 0x7d50, 0x31e5, 0x0a76,
3194 +
            0xa88f, 0x931c, 0xdfa9, 0xe43a, 0xa73e, 0x9cad, 0xd018, 0xeb8b, 0x4972, 0x72e1, 0x3e54,
3195 +
            0x05c7, 0xb85c, 0x83cf, 0xcf7a, 0xf4e9, 0x5610, 0x6d83, 0x2136, 0x1aa5, 0x59a1, 0x6232,
3196 +
            0x2e87, 0x1514, 0xb7ed, 0x8c7e, 0xc0cb, 0xfb58, 0x8698, 0xbd0b, 0xf1be, 0xca2d, 0x68d4,
3197 +
            0x5347, 0x1ff2, 0x2461, 0x6765, 0x5cf6, 0x1043, 0x2bd0, 0x8929, 0xb2ba, 0xfe0f, 0xc59c,
3198 +
            0x7807, 0x4394, 0x0f21, 0x34b2, 0x964b, 0xadd8, 0xe16d, 0xdafe, 0x99fa, 0xa269, 0xeedc,
3199 +
            0xd54f, 0x77b6, 0x4c25, 0x0090, 0x3b03, 0xfb10, 0xc083, 0x8c36, 0xb7a5, 0x155c, 0x2ecf,
3200 +
            0x627a, 0x59e9, 0x1aed, 0x217e, 0x6dcb, 0x5658, 0xf4a1, 0xcf32, 0x8387, 0xb814, 0x058f,
3201 +
            0x3e1c, 0x72a9, 0x493a, 0xebc3, 0xd050, 0x9ce5, 0xa776, 0xe472, 0xdfe1, 0x9354, 0xa8c7,
3202 +
            0x0a3e, 0x31ad, 0x7d18, 0x468b, 0x3b4b, 0x00d8, 0x4c6d, 0x77fe, 0xd507, 0xee94, 0xa221,
3203 +
            0x99b2, 0xdab6, 0xe125, 0xad90, 0x9603, 0x34fa, 0x0f69, 0x43dc, 0x784f, 0xc5d4, 0xfe47,
3204 +
            0xb2f2, 0x8961, 0x2b98, 0x100b, 0x5cbe, 0x672d, 0x2429, 0x1fba, 0x530f, 0x689c, 0xca65,
3205 +
            0xf1f6, 0xbd43, 0x86d0,
3206 +
        ],
3207 +
        [
3208 +
            0x0000, 0x8d86, 0x2669, 0xabef, 0x4cd2, 0xc154, 0x6abb, 0xe73d, 0x99a4, 0x1422, 0xbfcd,
3209 +
            0x324b, 0xd576, 0x58f0, 0xf31f, 0x7e99, 0x0e2d, 0x83ab, 0x2844, 0xa5c2, 0x42ff, 0xcf79,
3210 +
            0x6496, 0xe910, 0x9789, 0x1a0f, 0xb1e0, 0x3c66, 0xdb5b, 0x56dd, 0xfd32, 0x70b4, 0x1c5a,
3211 +
            0x91dc, 0x3a33, 0xb7b5, 0x5088, 0xdd0e, 0x76e1, 0xfb67, 0x85fe, 0x0878, 0xa397, 0x2e11,
3212 +
            0xc92c, 0x44aa, 0xef45, 0x62c3, 0x1277, 0x9ff1, 0x341e, 0xb998, 0x5ea5, 0xd323, 0x78cc,
3213 +
            0xf54a, 0x8bd3, 0x0655, 0xadba, 0x203c, 0xc701, 0x4a87, 0xe168, 0x6cee, 0x38b4, 0xb532,
3214 +
            0x1edd, 0x935b, 0x7466, 0xf9e0, 0x520f, 0xdf89, 0xa110, 0x2c96, 0x8779, 0x0aff, 0xedc2,
3215 +
            0x6044, 0xcbab, 0x462d, 0x3699, 0xbb1f, 0x10f0, 0x9d76, 0x7a4b, 0xf7cd, 0x5c22, 0xd1a4,
3216 +
            0xaf3d, 0x22bb, 0x8954, 0x04d2, 0xe3ef, 0x6e69, 0xc586, 0x4800, 0x24ee, 0xa968, 0x0287,
3217 +
            0x8f01, 0x683c, 0xe5ba, 0x4e55, 0xc3d3, 0xbd4a, 0x30cc, 0x9b23, 0x16a5, 0xf198, 0x7c1e,
3218 +
            0xd7f1, 0x5a77, 0x2ac3, 0xa745, 0x0caa, 0x812c, 0x6611, 0xeb97, 0x4078, 0xcdfe, 0xb367,
3219 +
            0x3ee1, 0x950e, 0x1888, 0xffb5, 0x7233, 0xd9dc, 0x545a, 0x7168, 0xfcee, 0x5701, 0xda87,
3220 +
            0x3dba, 0xb03c, 0x1bd3, 0x9655, 0xe8cc, 0x654a, 0xcea5, 0x4323, 0xa41e, 0x2998, 0x8277,
3221 +
            0x0ff1, 0x7f45, 0xf2c3, 0x592c, 0xd4aa, 0x3397, 0xbe11, 0x15fe, 0x9878, 0xe6e1, 0x6b67,
3222 +
            0xc088, 0x4d0e, 0xaa33, 0x27b5, 0x8c5a, 0x01dc, 0x6d32, 0xe0b4, 0x4b5b, 0xc6dd, 0x21e0,
3223 +
            0xac66, 0x0789, 0x8a0f, 0xf496, 0x7910, 0xd2ff, 0x5f79, 0xb844, 0x35c2, 0x9e2d, 0x13ab,
3224 +
            0x631f, 0xee99, 0x4576, 0xc8f0, 0x2fcd, 0xa24b, 0x09a4, 0x8422, 0xfabb, 0x773d, 0xdcd2,
3225 +
            0x5154, 0xb669, 0x3bef, 0x9000, 0x1d86, 0x49dc, 0xc45a, 0x6fb5, 0xe233, 0x050e, 0x8888,
3226 +
            0x2367, 0xaee1, 0xd078, 0x5dfe, 0xf611, 0x7b97, 0x9caa, 0x112c, 0xbac3, 0x3745, 0x47f1,
3227 +
            0xca77, 0x6198, 0xec1e, 0x0b23, 0x86a5, 0x2d4a, 0xa0cc, 0xde55, 0x53d3, 0xf83c, 0x75ba,
3228 +
            0x9287, 0x1f01, 0xb4ee, 0x3968, 0x5586, 0xd800, 0x73ef, 0xfe69, 0x1954, 0x94d2, 0x3f3d,
3229 +
            0xb2bb, 0xcc22, 0x41a4, 0xea4b, 0x67cd, 0x80f0, 0x0d76, 0xa699, 0x2b1f, 0x5bab, 0xd62d,
3230 +
            0x7dc2, 0xf044, 0x1779, 0x9aff, 0x3110, 0xbc96, 0xc20f, 0x4f89, 0xe466, 0x69e0, 0x8edd,
3231 +
            0x035b, 0xa8b4, 0x2532,
3232 +
        ],
3233 +
        [
3234 +
            0x0000, 0xe2d0, 0xf8c5, 0x1a15, 0xccef, 0x2e3f, 0x342a, 0xd6fa, 0xa4bb, 0x466b, 0x5c7e,
3235 +
            0xbeae, 0x6854, 0x8a84, 0x9091, 0x7241, 0x7413, 0x96c3, 0x8cd6, 0x6e06, 0xb8fc, 0x5a2c,
3236 +
            0x4039, 0xa2e9, 0xd0a8, 0x3278, 0x286d, 0xcabd, 0x1c47, 0xfe97, 0xe482, 0x0652, 0xe826,
3237 +
            0x0af6, 0x10e3, 0xf233, 0x24c9, 0xc619, 0xdc0c, 0x3edc, 0x4c9d, 0xae4d, 0xb458, 0x5688,
3238 +
            0x8072, 0x62a2, 0x78b7, 0x9a67, 0x9c35, 0x7ee5, 0x64f0, 0x8620, 0x50da, 0xb20a, 0xa81f,
3239 +
            0x4acf, 0x388e, 0xda5e, 0xc04b, 0x229b, 0xf461, 0x16b1, 0x0ca4, 0xee74, 0xed29, 0x0ff9,
3240 +
            0x15ec, 0xf73c, 0x21c6, 0xc316, 0xd903, 0x3bd3, 0x4992, 0xab42, 0xb157, 0x5387, 0x857d,
3241 +
            0x67ad, 0x7db8, 0x9f68, 0x993a, 0x7bea, 0x61ff, 0x832f, 0x55d5, 0xb705, 0xad10, 0x4fc0,
3242 +
            0x3d81, 0xdf51, 0xc544, 0x2794, 0xf16e, 0x13be, 0x09ab, 0xeb7b, 0x050f, 0xe7df, 0xfdca,
3243 +
            0x1f1a, 0xc9e0, 0x2b30, 0x3125, 0xd3f5, 0xa1b4, 0x4364, 0x5971, 0xbba1, 0x6d5b, 0x8f8b,
3244 +
            0x959e, 0x774e, 0x711c, 0x93cc, 0x89d9, 0x6b09, 0xbdf3, 0x5f23, 0x4536, 0xa7e6, 0xd5a7,
3245 +
            0x3777, 0x2d62, 0xcfb2, 0x1948, 0xfb98, 0xe18d, 0x035d, 0xe737, 0x05e7, 0x1ff2, 0xfd22,
3246 +
            0x2bd8, 0xc908, 0xd31d, 0x31cd, 0x438c, 0xa15c, 0xbb49, 0x5999, 0x8f63, 0x6db3, 0x77a6,
3247 +
            0x9576, 0x9324, 0x71f4, 0x6be1, 0x8931, 0x5fcb, 0xbd1b, 0xa70e, 0x45de, 0x379f, 0xd54f,
3248 +
            0xcf5a, 0x2d8a, 0xfb70, 0x19a0, 0x03b5, 0xe165, 0x0f11, 0xedc1, 0xf7d4, 0x1504, 0xc3fe,
3249 +
            0x212e, 0x3b3b, 0xd9eb, 0xabaa, 0x497a, 0x536f, 0xb1bf, 0x6745, 0x8595, 0x9f80, 0x7d50,
3250 +
            0x7b02, 0x99d2, 0x83c7, 0x6117, 0xb7ed, 0x553d, 0x4f28, 0xadf8, 0xdfb9, 0x3d69, 0x277c,
3251 +
            0xc5ac, 0x1356, 0xf186, 0xeb93, 0x0943, 0x0a1e, 0xe8ce, 0xf2db, 0x100b, 0xc6f1, 0x2421,
3252 +
            0x3e34, 0xdce4, 0xaea5, 0x4c75, 0x5660, 0xb4b0, 0x624a, 0x809a, 0x9a8f, 0x785f, 0x7e0d,
3253 +
            0x9cdd, 0x86c8, 0x6418, 0xb2e2, 0x5032, 0x4a27, 0xa8f7, 0xdab6, 0x3866, 0x2273, 0xc0a3,
3254 +
            0x1659, 0xf489, 0xee9c, 0x0c4c, 0xe238, 0x00e8, 0x1afd, 0xf82d, 0x2ed7, 0xcc07, 0xd612,
3255 +
            0x34c2, 0x4683, 0xa453, 0xbe46, 0x5c96, 0x8a6c, 0x68bc, 0x72a9, 0x9079, 0x962b, 0x74fb,
3256 +
            0x6eee, 0x8c3e, 0x5ac4, 0xb814, 0xa201, 0x40d1, 0x3290, 0xd040, 0xca55, 0x2885, 0xfe7f,
3257 +
            0x1caf, 0x06ba, 0xe46a,
3258 +
        ],
3259 +
        [
3260 +
            0x0000, 0xf30b, 0xdb73, 0x2878, 0x8b83, 0x7888, 0x50f0, 0xa3fb, 0x2a63, 0xd968, 0xf110,
3261 +
            0x021b, 0xa1e0, 0x52eb, 0x7a93, 0x8998, 0x54c6, 0xa7cd, 0x8fb5, 0x7cbe, 0xdf45, 0x2c4e,
3262 +
            0x0436, 0xf73d, 0x7ea5, 0x8dae, 0xa5d6, 0x56dd, 0xf526, 0x062d, 0x2e55, 0xdd5e, 0xa98c,
3263 +
            0x5a87, 0x72ff, 0x81f4, 0x220f, 0xd104, 0xf97c, 0x0a77, 0x83ef, 0x70e4, 0x589c, 0xab97,
3264 +
            0x086c, 0xfb67, 0xd31f, 0x2014, 0xfd4a, 0x0e41, 0x2639, 0xd532, 0x76c9, 0x85c2, 0xadba,
3265 +
            0x5eb1, 0xd729, 0x2422, 0x0c5a, 0xff51, 0x5caa, 0xafa1, 0x87d9, 0x74d2, 0x6e7d, 0x9d76,
3266 +
            0xb50e, 0x4605, 0xe5fe, 0x16f5, 0x3e8d, 0xcd86, 0x441e, 0xb715, 0x9f6d, 0x6c66, 0xcf9d,
3267 +
            0x3c96, 0x14ee, 0xe7e5, 0x3abb, 0xc9b0, 0xe1c8, 0x12c3, 0xb138, 0x4233, 0x6a4b, 0x9940,
3268 +
            0x10d8, 0xe3d3, 0xcbab, 0x38a0, 0x9b5b, 0x6850, 0x4028, 0xb323, 0xc7f1, 0x34fa, 0x1c82,
3269 +
            0xef89, 0x4c72, 0xbf79, 0x9701, 0x640a, 0xed92, 0x1e99, 0x36e1, 0xc5ea, 0x6611, 0x951a,
3270 +
            0xbd62, 0x4e69, 0x9337, 0x603c, 0x4844, 0xbb4f, 0x18b4, 0xebbf, 0xc3c7, 0x30cc, 0xb954,
3271 +
            0x4a5f, 0x6227, 0x912c, 0x32d7, 0xc1dc, 0xe9a4, 0x1aaf, 0xdcfa, 0x2ff1, 0x0789, 0xf482,
3272 +
            0x5779, 0xa472, 0x8c0a, 0x7f01, 0xf699, 0x0592, 0x2dea, 0xdee1, 0x7d1a, 0x8e11, 0xa669,
3273 +
            0x5562, 0x883c, 0x7b37, 0x534f, 0xa044, 0x03bf, 0xf0b4, 0xd8cc, 0x2bc7, 0xa25f, 0x5154,
3274 +
            0x792c, 0x8a27, 0x29dc, 0xdad7, 0xf2af, 0x01a4, 0x7576, 0x867d, 0xae05, 0x5d0e, 0xfef5,
3275 +
            0x0dfe, 0x2586, 0xd68d, 0x5f15, 0xac1e, 0x8466, 0x776d, 0xd496, 0x279d, 0x0fe5, 0xfcee,
3276 +
            0x21b0, 0xd2bb, 0xfac3, 0x09c8, 0xaa33, 0x5938, 0x7140, 0x824b, 0x0bd3, 0xf8d8, 0xd0a0,
3277 +
            0x23ab, 0x8050, 0x735b, 0x5b23, 0xa828, 0xb287, 0x418c, 0x69f4, 0x9aff, 0x3904, 0xca0f,
3278 +
            0xe277, 0x117c, 0x98e4, 0x6bef, 0x4397, 0xb09c, 0x1367, 0xe06c, 0xc814, 0x3b1f, 0xe641,
3279 +
            0x154a, 0x3d32, 0xce39, 0x6dc2, 0x9ec9, 0xb6b1, 0x45ba, 0xcc22, 0x3f29, 0x1751, 0xe45a,
3280 +
            0x47a1, 0xb4aa, 0x9cd2, 0x6fd9, 0x1b0b, 0xe800, 0xc078, 0x3373, 0x9088, 0x6383, 0x4bfb,
3281 +
            0xb8f0, 0x3168, 0xc263, 0xea1b, 0x1910, 0xbaeb, 0x49e0, 0x6198, 0x9293, 0x4fcd, 0xbcc6,
3282 +
            0x94be, 0x67b5, 0xc44e, 0x3745, 0x1f3d, 0xec36, 0x65ae, 0x96a5, 0xbedd, 0x4dd6, 0xee2d,
3283 +
            0x1d26, 0x355e, 0xc655,
3284 +
        ],
3285 +
        [
3286 +
            0x0000, 0x8491, 0x3447, 0xb0d6, 0x688e, 0xec1f, 0x5cc9, 0xd858, 0xd11c, 0x558d, 0xe55b,
3287 +
            0x61ca, 0xb992, 0x3d03, 0x8dd5, 0x0944, 0x9f5d, 0x1bcc, 0xab1a, 0x2f8b, 0xf7d3, 0x7342,
3288 +
            0xc394, 0x4705, 0x4e41, 0xcad0, 0x7a06, 0xfe97, 0x26cf, 0xa25e, 0x1288, 0x9619, 0x03df,
3289 +
            0x874e, 0x3798, 0xb309, 0x6b51, 0xefc0, 0x5f16, 0xdb87, 0xd2c3, 0x5652, 0xe684, 0x6215,
3290 +
            0xba4d, 0x3edc, 0x8e0a, 0x0a9b, 0x9c82, 0x1813, 0xa8c5, 0x2c54, 0xf40c, 0x709d, 0xc04b,
3291 +
            0x44da, 0x4d9e, 0xc90f, 0x79d9, 0xfd48, 0x2510, 0xa181, 0x1157, 0x95c6, 0x07be, 0x832f,
3292 +
            0x33f9, 0xb768, 0x6f30, 0xeba1, 0x5b77, 0xdfe6, 0xd6a2, 0x5233, 0xe2e5, 0x6674, 0xbe2c,
3293 +
            0x3abd, 0x8a6b, 0x0efa, 0x98e3, 0x1c72, 0xaca4, 0x2835, 0xf06d, 0x74fc, 0xc42a, 0x40bb,
3294 +
            0x49ff, 0xcd6e, 0x7db8, 0xf929, 0x2171, 0xa5e0, 0x1536, 0x91a7, 0x0461, 0x80f0, 0x3026,
3295 +
            0xb4b7, 0x6cef, 0xe87e, 0x58a8, 0xdc39, 0xd57d, 0x51ec, 0xe13a, 0x65ab, 0xbdf3, 0x3962,
3296 +
            0x89b4, 0x0d25, 0x9b3c, 0x1fad, 0xaf7b, 0x2bea, 0xf3b2, 0x7723, 0xc7f5, 0x4364, 0x4a20,
3297 +
            0xceb1, 0x7e67, 0xfaf6, 0x22ae, 0xa63f, 0x16e9, 0x9278, 0x0f7c, 0x8bed, 0x3b3b, 0xbfaa,
3298 +
            0x67f2, 0xe363, 0x53b5, 0xd724, 0xde60, 0x5af1, 0xea27, 0x6eb6, 0xb6ee, 0x327f, 0x82a9,
3299 +
            0x0638, 0x9021, 0x14b0, 0xa466, 0x20f7, 0xf8af, 0x7c3e, 0xcce8, 0x4879, 0x413d, 0xc5ac,
3300 +
            0x757a, 0xf1eb, 0x29b3, 0xad22, 0x1df4, 0x9965, 0x0ca3, 0x8832, 0x38e4, 0xbc75, 0x642d,
3301 +
            0xe0bc, 0x506a, 0xd4fb, 0xddbf, 0x592e, 0xe9f8, 0x6d69, 0xb531, 0x31a0, 0x8176, 0x05e7,
3302 +
            0x93fe, 0x176f, 0xa7b9, 0x2328, 0xfb70, 0x7fe1, 0xcf37, 0x4ba6, 0x42e2, 0xc673, 0x76a5,
3303 +
            0xf234, 0x2a6c, 0xaefd, 0x1e2b, 0x9aba, 0x08c2, 0x8c53, 0x3c85, 0xb814, 0x604c, 0xe4dd,
3304 +
            0x540b, 0xd09a, 0xd9de, 0x5d4f, 0xed99, 0x6908, 0xb150, 0x35c1, 0x8517, 0x0186, 0x979f,
3305 +
            0x130e, 0xa3d8, 0x2749, 0xff11, 0x7b80, 0xcb56, 0x4fc7, 0x4683, 0xc212, 0x72c4, 0xf655,
3306 +
            0x2e0d, 0xaa9c, 0x1a4a, 0x9edb, 0x0b1d, 0x8f8c, 0x3f5a, 0xbbcb, 0x6393, 0xe702, 0x57d4,
3307 +
            0xd345, 0xda01, 0x5e90, 0xee46, 0x6ad7, 0xb28f, 0x361e, 0x86c8, 0x0259, 0x9440, 0x10d1,
3308 +
            0xa007, 0x2496, 0xfcce, 0x785f, 0xc889, 0x4c18, 0x455c, 0xc1cd, 0x711b, 0xf58a, 0x2dd2,
3309 +
            0xa943, 0x1995, 0x9d04,
3310 +
        ],
3311 +
        [
3312 +
            0x0000, 0x1ef8, 0x3df0, 0x2308, 0x7be0, 0x6518, 0x4610, 0x58e8, 0xf7c0, 0xe938, 0xca30,
3313 +
            0xd4c8, 0x8c20, 0x92d8, 0xb1d0, 0xaf28, 0xd2e5, 0xcc1d, 0xef15, 0xf1ed, 0xa905, 0xb7fd,
3314 +
            0x94f5, 0x8a0d, 0x2525, 0x3bdd, 0x18d5, 0x062d, 0x5ec5, 0x403d, 0x6335, 0x7dcd, 0x98af,
3315 +
            0x8657, 0xa55f, 0xbba7, 0xe34f, 0xfdb7, 0xdebf, 0xc047, 0x6f6f, 0x7197, 0x529f, 0x4c67,
3316 +
            0x148f, 0x0a77, 0x297f, 0x3787, 0x4a4a, 0x54b2, 0x77ba, 0x6942, 0x31aa, 0x2f52, 0x0c5a,
3317 +
            0x12a2, 0xbd8a, 0xa372, 0x807a, 0x9e82, 0xc66a, 0xd892, 0xfb9a, 0xe562, 0x0c3b, 0x12c3,
3318 +
            0x31cb, 0x2f33, 0x77db, 0x6923, 0x4a2b, 0x54d3, 0xfbfb, 0xe503, 0xc60b, 0xd8f3, 0x801b,
3319 +
            0x9ee3, 0xbdeb, 0xa313, 0xdede, 0xc026, 0xe32e, 0xfdd6, 0xa53e, 0xbbc6, 0x98ce, 0x8636,
3320 +
            0x291e, 0x37e6, 0x14ee, 0x0a16, 0x52fe, 0x4c06, 0x6f0e, 0x71f6, 0x9494, 0x8a6c, 0xa964,
3321 +
            0xb79c, 0xef74, 0xf18c, 0xd284, 0xcc7c, 0x6354, 0x7dac, 0x5ea4, 0x405c, 0x18b4, 0x064c,
3322 +
            0x2544, 0x3bbc, 0x4671, 0x5889, 0x7b81, 0x6579, 0x3d91, 0x2369, 0x0061, 0x1e99, 0xb1b1,
3323 +
            0xaf49, 0x8c41, 0x92b9, 0xca51, 0xd4a9, 0xf7a1, 0xe959, 0x1876, 0x068e, 0x2586, 0x3b7e,
3324 +
            0x6396, 0x7d6e, 0x5e66, 0x409e, 0xefb6, 0xf14e, 0xd246, 0xccbe, 0x9456, 0x8aae, 0xa9a6,
3325 +
            0xb75e, 0xca93, 0xd46b, 0xf763, 0xe99b, 0xb173, 0xaf8b, 0x8c83, 0x927b, 0x3d53, 0x23ab,
3326 +
            0x00a3, 0x1e5b, 0x46b3, 0x584b, 0x7b43, 0x65bb, 0x80d9, 0x9e21, 0xbd29, 0xa3d1, 0xfb39,
3327 +
            0xe5c1, 0xc6c9, 0xd831, 0x7719, 0x69e1, 0x4ae9, 0x5411, 0x0cf9, 0x1201, 0x3109, 0x2ff1,
3328 +
            0x523c, 0x4cc4, 0x6fcc, 0x7134, 0x29dc, 0x3724, 0x142c, 0x0ad4, 0xa5fc, 0xbb04, 0x980c,
3329 +
            0x86f4, 0xde1c, 0xc0e4, 0xe3ec, 0xfd14, 0x144d, 0x0ab5, 0x29bd, 0x3745, 0x6fad, 0x7155,
3330 +
            0x525d, 0x4ca5, 0xe38d, 0xfd75, 0xde7d, 0xc085, 0x986d, 0x8695, 0xa59d, 0xbb65, 0xc6a8,
3331 +
            0xd850, 0xfb58, 0xe5a0, 0xbd48, 0xa3b0, 0x80b8, 0x9e40, 0x3168, 0x2f90, 0x0c98, 0x1260,
3332 +
            0x4a88, 0x5470, 0x7778, 0x6980, 0x8ce2, 0x921a, 0xb112, 0xafea, 0xf702, 0xe9fa, 0xcaf2,
3333 +
            0xd40a, 0x7b22, 0x65da, 0x46d2, 0x582a, 0x00c2, 0x1e3a, 0x3d32, 0x23ca, 0x5e07, 0x40ff,
3334 +
            0x63f7, 0x7d0f, 0x25e7, 0x3b1f, 0x1817, 0x06ef, 0xa9c7, 0xb73f, 0x9437, 0x8acf, 0xd227,
3335 +
            0xccdf, 0xefd7, 0xf12f,
3336 +
        ],
3337 +
        [
3338 +
            0x0000, 0x30ec, 0x61d8, 0x5134, 0xc3b0, 0xf35c, 0xa268, 0x9284, 0xba05, 0x8ae9, 0xdbdd,
3339 +
            0xeb31, 0x79b5, 0x4959, 0x186d, 0x2881, 0x496f, 0x7983, 0x28b7, 0x185b, 0x8adf, 0xba33,
3340 +
            0xeb07, 0xdbeb, 0xf36a, 0xc386, 0x92b2, 0xa25e, 0x30da, 0x0036, 0x5102, 0x61ee, 0x92de,
3341 +
            0xa232, 0xf306, 0xc3ea, 0x516e, 0x6182, 0x30b6, 0x005a, 0x28db, 0x1837, 0x4903, 0x79ef,
3342 +
            0xeb6b, 0xdb87, 0x8ab3, 0xba5f, 0xdbb1, 0xeb5d, 0xba69, 0x8a85, 0x1801, 0x28ed, 0x79d9,
3343 +
            0x4935, 0x61b4, 0x5158, 0x006c, 0x3080, 0xa204, 0x92e8, 0xc3dc, 0xf330, 0x18d9, 0x2835,
3344 +
            0x7901, 0x49ed, 0xdb69, 0xeb85, 0xbab1, 0x8a5d, 0xa2dc, 0x9230, 0xc304, 0xf3e8, 0x616c,
3345 +
            0x5180, 0x00b4, 0x3058, 0x51b6, 0x615a, 0x306e, 0x0082, 0x9206, 0xa2ea, 0xf3de, 0xc332,
3346 +
            0xebb3, 0xdb5f, 0x8a6b, 0xba87, 0x2803, 0x18ef, 0x49db, 0x7937, 0x8a07, 0xbaeb, 0xebdf,
3347 +
            0xdb33, 0x49b7, 0x795b, 0x286f, 0x1883, 0x3002, 0x00ee, 0x51da, 0x6136, 0xf3b2, 0xc35e,
3348 +
            0x926a, 0xa286, 0xc368, 0xf384, 0xa2b0, 0x925c, 0x00d8, 0x3034, 0x6100, 0x51ec, 0x796d,
3349 +
            0x4981, 0x18b5, 0x2859, 0xbadd, 0x8a31, 0xdb05, 0xebe9, 0x31b2, 0x015e, 0x506a, 0x6086,
3350 +
            0xf202, 0xc2ee, 0x93da, 0xa336, 0x8bb7, 0xbb5b, 0xea6f, 0xda83, 0x4807, 0x78eb, 0x29df,
3351 +
            0x1933, 0x78dd, 0x4831, 0x1905, 0x29e9, 0xbb6d, 0x8b81, 0xdab5, 0xea59, 0xc2d8, 0xf234,
3352 +
            0xa300, 0x93ec, 0x0168, 0x3184, 0x60b0, 0x505c, 0xa36c, 0x9380, 0xc2b4, 0xf258, 0x60dc,
3353 +
            0x5030, 0x0104, 0x31e8, 0x1969, 0x2985, 0x78b1, 0x485d, 0xdad9, 0xea35, 0xbb01, 0x8bed,
3354 +
            0xea03, 0xdaef, 0x8bdb, 0xbb37, 0x29b3, 0x195f, 0x486b, 0x7887, 0x5006, 0x60ea, 0x31de,
3355 +
            0x0132, 0x93b6, 0xa35a, 0xf26e, 0xc282, 0x296b, 0x1987, 0x48b3, 0x785f, 0xeadb, 0xda37,
3356 +
            0x8b03, 0xbbef, 0x936e, 0xa382, 0xf2b6, 0xc25a, 0x50de, 0x6032, 0x3106, 0x01ea, 0x6004,
3357 +
            0x50e8, 0x01dc, 0x3130, 0xa3b4, 0x9358, 0xc26c, 0xf280, 0xda01, 0xeaed, 0xbbd9, 0x8b35,
3358 +
            0x19b1, 0x295d, 0x7869, 0x4885, 0xbbb5, 0x8b59, 0xda6d, 0xea81, 0x7805, 0x48e9, 0x19dd,
3359 +
            0x2931, 0x01b0, 0x315c, 0x6068, 0x5084, 0xc200, 0xf2ec, 0xa3d8, 0x9334, 0xf2da, 0xc236,
3360 +
            0x9302, 0xa3ee, 0x316a, 0x0186, 0x50b2, 0x605e, 0x48df, 0x7833, 0x2907, 0x19eb, 0x8b6f,
3361 +
            0xbb83, 0xeab7, 0xda5b,
3362 +
        ],
3363 +
    ];
3364 +
3365 +
    pub static CRC16_GENIBUS_TABLE: [[u16; 256]; 16] = [
3366 +
        [
3367 +
            0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a,
3368 +
            0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294,
3369 +
            0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462,
3370 +
            0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509,
3371 +
            0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695,
3372 +
            0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,
3373 +
            0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948,
3374 +
            0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
3375 +
            0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4,
3376 +
            0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b,
3377 +
            0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f,
3378 +
            0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,
3379 +
            0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046,
3380 +
            0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290,
3381 +
            0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e,
3382 +
            0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
3383 +
            0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691,
3384 +
            0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,
3385 +
            0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d,
3386 +
            0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16,
3387 +
            0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8,
3388 +
            0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e,
3389 +
            0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93,
3390 +
            0x3eb2, 0x0ed1, 0x1ef0,
3391 +
        ],
3392 +
        [
3393 +
            0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb,
3394 +
            0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86,
3395 +
            0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6,
3396 +
            0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c,
3397 +
            0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33,
3398 +
            0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd,
3399 +
            0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1,
3400 +
            0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728,
3401 +
            0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48,
3402 +
            0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76,
3403 +
            0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0,
3404 +
            0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb,
3405 +
            0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897,
3406 +
            0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273,
3407 +
            0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba,
3408 +
            0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40,
3409 +
            0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6,
3410 +
            0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1,
3411 +
            0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527,
3412 +
            0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd,
3413 +
            0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14,
3414 +
            0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0,
3415 +
            0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac,
3416 +
            0x659d, 0x30ce, 0x03ff,
3417 +
        ],
3418 +
        [
3419 +
            0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1,
3420 +
            0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893,
3421 +
            0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6,
3422 +
            0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637,
3423 +
            0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705,
3424 +
            0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d,
3425 +
            0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc,
3426 +
            0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e,
3427 +
            0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b,
3428 +
            0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a,
3429 +
            0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9,
3430 +
            0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a,
3431 +
            0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b,
3432 +
            0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8,
3433 +
            0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c,
3434 +
            0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad,
3435 +
            0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e,
3436 +
            0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07,
3437 +
            0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594,
3438 +
            0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565,
3439 +
            0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291,
3440 +
            0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462,
3441 +
            0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633,
3442 +
            0xa103, 0xf853, 0xcf63,
3443 +
        ],
3444 +
        [
3445 +
            0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab,
3446 +
            0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2,
3447 +
            0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e,
3448 +
            0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951,
3449 +
            0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70,
3450 +
            0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828,
3451 +
            0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae,
3452 +
            0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416,
3453 +
            0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba,
3454 +
            0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054,
3455 +
            0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6,
3456 +
            0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4,
3457 +
            0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62,
3458 +
            0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8,
3459 +
            0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087,
3460 +
            0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98,
3461 +
            0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a,
3462 +
            0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1,
3463 +
            0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803,
3464 +
            0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c,
3465 +
            0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373,
3466 +
            0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9,
3467 +
            0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f,
3468 +
            0xa6cb, 0x3d17, 0x4ba3,
3469 +
        ],
3470 +
        [
3471 +
            0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae,
3472 +
            0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d,
3473 +
            0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4,
3474 +
            0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b,
3475 +
            0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b,
3476 +
            0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39,
3477 +
            0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43,
3478 +
            0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6,
3479 +
            0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f,
3480 +
            0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6,
3481 +
            0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab,
3482 +
            0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02,
3483 +
            0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78,
3484 +
            0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6,
3485 +
            0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362,
3486 +
            0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d,
3487 +
            0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890,
3488 +
            0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef,
3489 +
            0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2,
3490 +
            0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d,
3491 +
            0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689,
3492 +
            0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507,
3493 +
            0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d,
3494 +
            0x1e2c, 0xf0fe, 0x5aaf,
3495 +
        ],
3496 +
        [
3497 +
            0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602,
3498 +
            0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985,
3499 +
            0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508,
3500 +
            0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa,
3501 +
            0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d,
3502 +
            0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0,
3503 +
            0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3,
3504 +
            0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5,
3505 +
            0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458,
3506 +
            0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b,
3507 +
            0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de,
3508 +
            0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0,
3509 +
            0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483,
3510 +
            0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646,
3511 +
            0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789,
3512 +
            0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b,
3513 +
            0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae,
3514 +
            0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31,
3515 +
            0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4,
3516 +
            0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716,
3517 +
            0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9,
3518 +
            0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c,
3519 +
            0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f,
3520 +
            0xdfff, 0x111f, 0x54bf,
3521 +
        ],
3522 +
        [
3523 +
            0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e,
3524 +
            0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc,
3525 +
            0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6,
3526 +
            0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9,
3527 +
            0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8,
3528 +
            0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d,
3529 +
            0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87,
3530 +
            0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3,
3531 +
            0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9,
3532 +
            0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910,
3533 +
            0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc,
3534 +
            0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b,
3535 +
            0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971,
3536 +
            0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e,
3537 +
            0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9,
3538 +
            0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6,
3539 +
            0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a,
3540 +
            0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2,
3541 +
            0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e,
3542 +
            0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41,
3543 +
            0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6,
3544 +
            0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9,
3545 +
            0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3,
3546 +
            0xc592, 0x1d10, 0xa571,
3547 +
        ],
3548 +
        [
3549 +
            0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c,
3550 +
            0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a,
3551 +
            0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68,
3552 +
            0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7,
3553 +
            0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617,
3554 +
            0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103,
3555 +
            0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767,
3556 +
            0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c,
3557 +
            0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e,
3558 +
            0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc,
3559 +
            0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6,
3560 +
            0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4,
3561 +
            0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390,
3562 +
            0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c,
3563 +
            0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984,
3564 +
            0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b,
3565 +
            0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21,
3566 +
            0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef,
3567 +
            0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5,
3568 +
            0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a,
3569 +
            0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2,
3570 +
            0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e,
3571 +
            0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a,
3572 +
            0x1be9, 0xd39c, 0x944f,
3573 +
        ],
3574 +
        [
3575 +
            0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98,
3576 +
            0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432,
3577 +
            0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc,
3578 +
            0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347,
3579 +
            0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a,
3580 +
            0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa,
3581 +
            0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9,
3582 +
            0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c,
3583 +
            0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42,
3584 +
            0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616,
3585 +
            0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224,
3586 +
            0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6,
3587 +
            0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5,
3588 +
            0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90,
3589 +
            0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1,
3590 +
            0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a,
3591 +
            0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428,
3592 +
            0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7,
3593 +
            0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395,
3594 +
            0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e,
3595 +
            0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f,
3596 +
            0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a,
3597 +
            0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179,
3598 +
            0x4a5a, 0x671e, 0x8c3d,
3599 +
        ],
3600 +
        [
3601 +
            0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1,
3602 +
            0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6,
3603 +
            0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d,
3604 +
            0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289,
3605 +
            0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24,
3606 +
            0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f,
3607 +
            0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564,
3608 +
            0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76,
3609 +
            0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d,
3610 +
            0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c,
3611 +
            0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca,
3612 +
            0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb,
3613 +
            0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0,
3614 +
            0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac,
3615 +
            0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c,
3616 +
            0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88,
3617 +
            0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e,
3618 +
            0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e,
3619 +
            0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8,
3620 +
            0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c,
3621 +
            0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c,
3622 +
            0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0,
3623 +
            0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb,
3624 +
            0xb38e, 0x0241, 0x6d04,
3625 +
        ],
3626 +
        [
3627 +
            0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d,
3628 +
            0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33,
3629 +
            0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a,
3630 +
            0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e,
3631 +
            0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3,
3632 +
            0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c,
3633 +
            0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c,
3634 +
            0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855,
3635 +
            0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c,
3636 +
            0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f,
3637 +
            0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c,
3638 +
            0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150,
3639 +
            0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0,
3640 +
            0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650,
3641 +
            0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297,
3642 +
            0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3,
3643 +
            0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0,
3644 +
            0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471,
3645 +
            0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842,
3646 +
            0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236,
3647 +
            0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1,
3648 +
            0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71,
3649 +
            0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1,
3650 +
            0x19b8, 0x6142, 0xb90b,
3651 +
        ],
3652 +
        [
3653 +
            0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42,
3654 +
            0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1,
3655 +
            0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0,
3656 +
            0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097,
3657 +
            0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce,
3658 +
            0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35,
3659 +
            0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c,
3660 +
            0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b,
3661 +
            0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a,
3662 +
            0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9,
3663 +
            0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18,
3664 +
            0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e,
3665 +
            0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37,
3666 +
            0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c,
3667 +
            0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5,
3668 +
            0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2,
3669 +
            0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13,
3670 +
            0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940,
3671 +
            0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1,
3672 +
            0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86,
3673 +
            0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f,
3674 +
            0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64,
3675 +
            0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d,
3676 +
            0x3b18, 0x3e87, 0x3df2,
3677 +
        ],
3678 +
        [
3679 +
            0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c,
3680 +
            0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a,
3681 +
            0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68,
3682 +
            0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997,
3683 +
            0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7,
3684 +
            0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3,
3685 +
            0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427,
3686 +
            0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c,
3687 +
            0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e,
3688 +
            0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c,
3689 +
            0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56,
3690 +
            0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05,
3691 +
            0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191,
3692 +
            0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d,
3693 +
            0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65,
3694 +
            0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a,
3695 +
            0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0,
3696 +
            0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe,
3697 +
            0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4,
3698 +
            0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b,
3699 +
            0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73,
3700 +
            0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf,
3701 +
            0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b,
3702 +
            0x9f38, 0x509d, 0x15fe,
3703 +
        ],
3704 +
        [
3705 +
            0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9,
3706 +
            0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033,
3707 +
            0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf,
3708 +
            0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07,
3709 +
            0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f,
3710 +
            0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de,
3711 +
            0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71,
3712 +
            0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e,
3713 +
            0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2,
3714 +
            0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf,
3715 +
            0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec,
3716 +
            0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd,
3717 +
            0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772,
3718 +
            0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183,
3719 +
            0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714,
3720 +
            0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc,
3721 +
            0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef,
3722 +
            0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05,
3723 +
            0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36,
3724 +
            0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe,
3725 +
            0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69,
3726 +
            0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98,
3727 +
            0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137,
3728 +
            0x4a56, 0xc7f5, 0xbc94,
3729 +
        ],
3730 +
        [
3731 +
            0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c,
3732 +
            0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4,
3733 +
            0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14,
3734 +
            0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974,
3735 +
            0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5,
3736 +
            0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5,
3737 +
            0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe,
3738 +
            0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14,
3739 +
            0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4,
3740 +
            0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516,
3741 +
            0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2,
3742 +
            0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737,
3743 +
            0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c,
3744 +
            0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321,
3745 +
            0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4,
3746 +
            0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4,
3747 +
            0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10,
3748 +
            0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55,
3749 +
            0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091,
3750 +
            0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1,
3751 +
            0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564,
3752 +
            0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379,
3753 +
            0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172,
3754 +
            0xbf8e, 0x5cab, 0xf257,
3755 +
        ],
3756 +
        [
3757 +
            0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec,
3758 +
            0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc,
3759 +
            0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614,
3760 +
            0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc,
3761 +
            0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5,
3762 +
            0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c,
3763 +
            0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f,
3764 +
            0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd,
3765 +
            0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55,
3766 +
            0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f,
3767 +
            0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3,
3768 +
            0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c,
3769 +
            0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f,
3770 +
            0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da,
3771 +
            0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7,
3772 +
            0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f,
3773 +
            0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83,
3774 +
            0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf,
3775 +
            0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753,
3776 +
            0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b,
3777 +
            0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6,
3778 +
            0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963,
3779 +
            0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010,
3780 +
            0xd834, 0x3079, 0x985d,
3781 +
        ],
3782 +
    ];
3783 +
3784 +
    pub static CRC16_GSM_TABLE: [[u16; 256]; 16] = [
3785 +
        [
3786 +
            0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a,
3787 +
            0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294,
3788 +
            0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462,
3789 +
            0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509,
3790 +
            0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695,
3791 +
            0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,
3792 +
            0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948,
3793 +
            0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
3794 +
            0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4,
3795 +
            0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b,
3796 +
            0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f,
3797 +
            0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,
3798 +
            0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046,
3799 +
            0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290,
3800 +
            0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e,
3801 +
            0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
3802 +
            0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691,
3803 +
            0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,
3804 +
            0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d,
3805 +
            0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16,
3806 +
            0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8,
3807 +
            0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e,
3808 +
            0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93,
3809 +
            0x3eb2, 0x0ed1, 0x1ef0,
3810 +
        ],
3811 +
        [
3812 +
            0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb,
3813 +
            0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86,
3814 +
            0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6,
3815 +
            0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c,
3816 +
            0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33,
3817 +
            0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd,
3818 +
            0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1,
3819 +
            0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728,
3820 +
            0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48,
3821 +
            0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76,
3822 +
            0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0,
3823 +
            0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb,
3824 +
            0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897,
3825 +
            0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273,
3826 +
            0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba,
3827 +
            0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40,
3828 +
            0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6,
3829 +
            0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1,
3830 +
            0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527,
3831 +
            0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd,
3832 +
            0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14,
3833 +
            0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0,
3834 +
            0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac,
3835 +
            0x659d, 0x30ce, 0x03ff,
3836 +
        ],
3837 +
        [
3838 +
            0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1,
3839 +
            0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893,
3840 +
            0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6,
3841 +
            0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637,
3842 +
            0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705,
3843 +
            0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d,
3844 +
            0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc,
3845 +
            0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e,
3846 +
            0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b,
3847 +
            0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a,
3848 +
            0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9,
3849 +
            0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a,
3850 +
            0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b,
3851 +
            0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8,
3852 +
            0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c,
3853 +
            0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad,
3854 +
            0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e,
3855 +
            0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07,
3856 +
            0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594,
3857 +
            0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565,
3858 +
            0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291,
3859 +
            0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462,
3860 +
            0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633,
3861 +
            0xa103, 0xf853, 0xcf63,
3862 +
        ],
3863 +
        [
3864 +
            0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab,
3865 +
            0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2,
3866 +
            0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e,
3867 +
            0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951,
3868 +
            0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70,
3869 +
            0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828,
3870 +
            0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae,
3871 +
            0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416,
3872 +
            0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba,
3873 +
            0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054,
3874 +
            0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6,
3875 +
            0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4,
3876 +
            0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62,
3877 +
            0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8,
3878 +
            0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087,
3879 +
            0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98,
3880 +
            0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a,
3881 +
            0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1,
3882 +
            0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803,
3883 +
            0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c,
3884 +
            0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373,
3885 +
            0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9,
3886 +
            0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f,
3887 +
            0xa6cb, 0x3d17, 0x4ba3,
3888 +
        ],
3889 +
        [
3890 +
            0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae,
3891 +
            0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d,
3892 +
            0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4,
3893 +
            0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b,
3894 +
            0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b,
3895 +
            0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39,
3896 +
            0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43,
3897 +
            0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6,
3898 +
            0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f,
3899 +
            0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6,
3900 +
            0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab,
3901 +
            0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02,
3902 +
            0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78,
3903 +
            0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6,
3904 +
            0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362,
3905 +
            0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d,
3906 +
            0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890,
3907 +
            0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef,
3908 +
            0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2,
3909 +
            0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d,
3910 +
            0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689,
3911 +
            0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507,
3912 +
            0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d,
3913 +
            0x1e2c, 0xf0fe, 0x5aaf,
3914 +
        ],
3915 +
        [
3916 +
            0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602,
3917 +
            0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985,
3918 +
            0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508,
3919 +
            0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa,
3920 +
            0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d,
3921 +
            0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0,
3922 +
            0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3,
3923 +
            0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5,
3924 +
            0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458,
3925 +
            0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b,
3926 +
            0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de,
3927 +
            0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0,
3928 +
            0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483,
3929 +
            0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646,
3930 +
            0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789,
3931 +
            0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b,
3932 +
            0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae,
3933 +
            0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31,
3934 +
            0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4,
3935 +
            0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716,
3936 +
            0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9,
3937 +
            0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c,
3938 +
            0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f,
3939 +
            0xdfff, 0x111f, 0x54bf,
3940 +
        ],
3941 +
        [
3942 +
            0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e,
3943 +
            0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc,
3944 +
            0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6,
3945 +
            0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9,
3946 +
            0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8,
3947 +
            0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d,
3948 +
            0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87,
3949 +
            0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3,
3950 +
            0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9,
3951 +
            0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910,
3952 +
            0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc,
3953 +
            0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b,
3954 +
            0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971,
3955 +
            0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e,
3956 +
            0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9,
3957 +
            0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6,
3958 +
            0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a,
3959 +
            0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2,
3960 +
            0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e,
3961 +
            0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41,
3962 +
            0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6,
3963 +
            0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9,
3964 +
            0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3,
3965 +
            0xc592, 0x1d10, 0xa571,
3966 +
        ],
3967 +
        [
3968 +
            0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c,
3969 +
            0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a,
3970 +
            0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68,
3971 +
            0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7,
3972 +
            0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617,
3973 +
            0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103,
3974 +
            0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767,
3975 +
            0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c,
3976 +
            0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e,
3977 +
            0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc,
3978 +
            0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6,
3979 +
            0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4,
3980 +
            0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390,
3981 +
            0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c,
3982 +
            0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984,
3983 +
            0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b,
3984 +
            0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21,
3985 +
            0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef,
3986 +
            0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5,
3987 +
            0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a,
3988 +
            0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2,
3989 +
            0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e,
3990 +
            0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a,
3991 +
            0x1be9, 0xd39c, 0x944f,
3992 +
        ],
3993 +
        [
3994 +
            0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98,
3995 +
            0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432,
3996 +
            0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc,
3997 +
            0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347,
3998 +
            0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a,
3999 +
            0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa,
4000 +
            0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9,
4001 +
            0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c,
4002 +
            0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42,
4003 +
            0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616,
4004 +
            0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224,
4005 +
            0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6,
4006 +
            0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5,
4007 +
            0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90,
4008 +
            0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1,
4009 +
            0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a,
4010 +
            0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428,
4011 +
            0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7,
4012 +
            0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395,
4013 +
            0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e,
4014 +
            0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f,
4015 +
            0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a,
4016 +
            0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179,
4017 +
            0x4a5a, 0x671e, 0x8c3d,
4018 +
        ],
4019 +
        [
4020 +
            0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1,
4021 +
            0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6,
4022 +
            0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d,
4023 +
            0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289,
4024 +
            0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24,
4025 +
            0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f,
4026 +
            0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564,
4027 +
            0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76,
4028 +
            0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d,
4029 +
            0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c,
4030 +
            0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca,
4031 +
            0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb,
4032 +
            0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0,
4033 +
            0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac,
4034 +
            0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c,
4035 +
            0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88,
4036 +
            0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e,
4037 +
            0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e,
4038 +
            0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8,
4039 +
            0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c,
4040 +
            0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c,
4041 +
            0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0,
4042 +
            0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb,
4043 +
            0xb38e, 0x0241, 0x6d04,
4044 +
        ],
4045 +
        [
4046 +
            0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d,
4047 +
            0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33,
4048 +
            0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a,
4049 +
            0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e,
4050 +
            0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3,
4051 +
            0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c,
4052 +
            0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c,
4053 +
            0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855,
4054 +
            0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c,
4055 +
            0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f,
4056 +
            0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c,
4057 +
            0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150,
4058 +
            0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0,
4059 +
            0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650,
4060 +
            0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297,
4061 +
            0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3,
4062 +
            0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0,
4063 +
            0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471,
4064 +
            0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842,
4065 +
            0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236,
4066 +
            0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1,
4067 +
            0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71,
4068 +
            0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1,
4069 +
            0x19b8, 0x6142, 0xb90b,
4070 +
        ],
4071 +
        [
4072 +
            0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42,
4073 +
            0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1,
4074 +
            0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0,
4075 +
            0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097,
4076 +
            0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce,
4077 +
            0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35,
4078 +
            0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c,
4079 +
            0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b,
4080 +
            0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a,
4081 +
            0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9,
4082 +
            0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18,
4083 +
            0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e,
4084 +
            0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37,
4085 +
            0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c,
4086 +
            0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5,
4087 +
            0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2,
4088 +
            0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13,
4089 +
            0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940,
4090 +
            0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1,
4091 +
            0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86,
4092 +
            0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f,
4093 +
            0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64,
4094 +
            0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d,
4095 +
            0x3b18, 0x3e87, 0x3df2,
4096 +
        ],
4097 +
        [
4098 +
            0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c,
4099 +
            0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a,
4100 +
            0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68,
4101 +
            0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997,
4102 +
            0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7,
4103 +
            0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3,
4104 +
            0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427,
4105 +
            0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c,
4106 +
            0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e,
4107 +
            0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c,
4108 +
            0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56,
4109 +
            0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05,
4110 +
            0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191,
4111 +
            0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d,
4112 +
            0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65,
4113 +
            0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a,
4114 +
            0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0,
4115 +
            0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe,
4116 +
            0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4,
4117 +
            0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b,
4118 +
            0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73,
4119 +
            0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf,
4120 +
            0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b,
4121 +
            0x9f38, 0x509d, 0x15fe,
4122 +
        ],
4123 +
        [
4124 +
            0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9,
4125 +
            0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033,
4126 +
            0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf,
4127 +
            0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07,
4128 +
            0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f,
4129 +
            0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de,
4130 +
            0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71,
4131 +
            0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e,
4132 +
            0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2,
4133 +
            0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf,
4134 +
            0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec,
4135 +
            0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd,
4136 +
            0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772,
4137 +
            0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183,
4138 +
            0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714,
4139 +
            0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc,
4140 +
            0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef,
4141 +
            0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05,
4142 +
            0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36,
4143 +
            0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe,
4144 +
            0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69,
4145 +
            0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98,
4146 +
            0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137,
4147 +
            0x4a56, 0xc7f5, 0xbc94,
4148 +
        ],
4149 +
        [
4150 +
            0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c,
4151 +
            0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4,
4152 +
            0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14,
4153 +
            0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974,
4154 +
            0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5,
4155 +
            0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5,
4156 +
            0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe,
4157 +
            0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14,
4158 +
            0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4,
4159 +
            0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516,
4160 +
            0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2,
4161 +
            0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737,
4162 +
            0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c,
4163 +
            0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321,
4164 +
            0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4,
4165 +
            0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4,
4166 +
            0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10,
4167 +
            0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55,
4168 +
            0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091,
4169 +
            0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1,
4170 +
            0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564,
4171 +
            0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379,
4172 +
            0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172,
4173 +
            0xbf8e, 0x5cab, 0xf257,
4174 +
        ],
4175 +
        [
4176 +
            0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec,
4177 +
            0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc,
4178 +
            0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614,
4179 +
            0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc,
4180 +
            0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5,
4181 +
            0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c,
4182 +
            0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f,
4183 +
            0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd,
4184 +
            0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55,
4185 +
            0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f,
4186 +
            0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3,
4187 +
            0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c,
4188 +
            0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f,
4189 +
            0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da,
4190 +
            0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7,
4191 +
            0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f,
4192 +
            0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83,
4193 +
            0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf,
4194 +
            0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753,
4195 +
            0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b,
4196 +
            0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6,
4197 +
            0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963,
4198 +
            0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010,
4199 +
            0xd834, 0x3079, 0x985d,
4200 +
        ],
4201 +
    ];
4202 +
4203 +
    pub static CRC16_IBM_3740_TABLE: [[u16; 256]; 16] = [
4204 +
        [
4205 +
            0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a,
4206 +
            0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294,
4207 +
            0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462,
4208 +
            0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509,
4209 +
            0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695,
4210 +
            0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,
4211 +
            0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948,
4212 +
            0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
4213 +
            0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4,
4214 +
            0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b,
4215 +
            0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f,
4216 +
            0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,
4217 +
            0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046,
4218 +
            0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290,
4219 +
            0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e,
4220 +
            0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
4221 +
            0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691,
4222 +
            0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,
4223 +
            0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d,
4224 +
            0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16,
4225 +
            0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8,
4226 +
            0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e,
4227 +
            0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93,
4228 +
            0x3eb2, 0x0ed1, 0x1ef0,
4229 +
        ],
4230 +
        [
4231 +
            0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb,
4232 +
            0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86,
4233 +
            0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6,
4234 +
            0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c,
4235 +
            0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33,
4236 +
            0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd,
4237 +
            0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1,
4238 +
            0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728,
4239 +
            0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48,
4240 +
            0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76,
4241 +
            0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0,
4242 +
            0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb,
4243 +
            0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897,
4244 +
            0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273,
4245 +
            0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba,
4246 +
            0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40,
4247 +
            0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6,
4248 +
            0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1,
4249 +
            0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527,
4250 +
            0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd,
4251 +
            0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14,
4252 +
            0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0,
4253 +
            0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac,
4254 +
            0x659d, 0x30ce, 0x03ff,
4255 +
        ],
4256 +
        [
4257 +
            0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1,
4258 +
            0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893,
4259 +
            0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6,
4260 +
            0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637,
4261 +
            0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705,
4262 +
            0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d,
4263 +
            0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc,
4264 +
            0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e,
4265 +
            0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b,
4266 +
            0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a,
4267 +
            0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9,
4268 +
            0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a,
4269 +
            0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b,
4270 +
            0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8,
4271 +
            0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c,
4272 +
            0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad,
4273 +
            0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e,
4274 +
            0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07,
4275 +
            0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594,
4276 +
            0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565,
4277 +
            0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291,
4278 +
            0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462,
4279 +
            0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633,
4280 +
            0xa103, 0xf853, 0xcf63,
4281 +
        ],
4282 +
        [
4283 +
            0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab,
4284 +
            0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2,
4285 +
            0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e,
4286 +
            0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951,
4287 +
            0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70,
4288 +
            0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828,
4289 +
            0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae,
4290 +
            0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416,
4291 +
            0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba,
4292 +
            0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054,
4293 +
            0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6,
4294 +
            0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4,
4295 +
            0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62,
4296 +
            0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8,
4297 +
            0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087,
4298 +
            0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98,
4299 +
            0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a,
4300 +
            0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1,
4301 +
            0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803,
4302 +
            0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c,
4303 +
            0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373,
4304 +
            0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9,
4305 +
            0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f,
4306 +
            0xa6cb, 0x3d17, 0x4ba3,
4307 +
        ],
4308 +
        [
4309 +
            0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae,
4310 +
            0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d,
4311 +
            0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4,
4312 +
            0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b,
4313 +
            0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b,
4314 +
            0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39,
4315 +
            0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43,
4316 +
            0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6,
4317 +
            0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f,
4318 +
            0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6,
4319 +
            0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab,
4320 +
            0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02,
4321 +
            0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78,
4322 +
            0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6,
4323 +
            0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362,
4324 +
            0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d,
4325 +
            0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890,
4326 +
            0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef,
4327 +
            0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2,
4328 +
            0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d,
4329 +
            0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689,
4330 +
            0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507,
4331 +
            0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d,
4332 +
            0x1e2c, 0xf0fe, 0x5aaf,
4333 +
        ],
4334 +
        [
4335 +
            0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602,
4336 +
            0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985,
4337 +
            0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508,
4338 +
            0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa,
4339 +
            0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d,
4340 +
            0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0,
4341 +
            0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3,
4342 +
            0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5,
4343 +
            0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458,
4344 +
            0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b,
4345 +
            0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de,
4346 +
            0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0,
4347 +
            0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483,
4348 +
            0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646,
4349 +
            0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789,
4350 +
            0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b,
4351 +
            0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae,
4352 +
            0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31,
4353 +
            0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4,
4354 +
            0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716,
4355 +
            0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9,
4356 +
            0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c,
4357 +
            0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f,
4358 +
            0xdfff, 0x111f, 0x54bf,
4359 +
        ],
4360 +
        [
4361 +
            0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e,
4362 +
            0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc,
4363 +
            0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6,
4364 +
            0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9,
4365 +
            0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8,
4366 +
            0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d,
4367 +
            0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87,
4368 +
            0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3,
4369 +
            0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9,
4370 +
            0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910,
4371 +
            0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc,
4372 +
            0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b,
4373 +
            0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971,
4374 +
            0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e,
4375 +
            0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9,
4376 +
            0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6,
4377 +
            0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a,
4378 +
            0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2,
4379 +
            0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e,
4380 +
            0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41,
4381 +
            0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6,
4382 +
            0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9,
4383 +
            0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3,
4384 +
            0xc592, 0x1d10, 0xa571,
4385 +
        ],
4386 +
        [
4387 +
            0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c,
4388 +
            0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a,
4389 +
            0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68,
4390 +
            0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7,
4391 +
            0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617,
4392 +
            0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103,
4393 +
            0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767,
4394 +
            0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c,
4395 +
            0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e,
4396 +
            0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc,
4397 +
            0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6,
4398 +
            0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4,
4399 +
            0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390,
4400 +
            0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c,
4401 +
            0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984,
4402 +
            0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b,
4403 +
            0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21,
4404 +
            0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef,
4405 +
            0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5,
4406 +
            0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a,
4407 +
            0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2,
4408 +
            0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e,
4409 +
            0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a,
4410 +
            0x1be9, 0xd39c, 0x944f,
4411 +
        ],
4412 +
        [
4413 +
            0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98,
4414 +
            0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432,
4415 +
            0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc,
4416 +
            0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347,
4417 +
            0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a,
4418 +
            0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa,
4419 +
            0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9,
4420 +
            0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c,
4421 +
            0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42,
4422 +
            0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616,
4423 +
            0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224,
4424 +
            0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6,
4425 +
            0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5,
4426 +
            0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90,
4427 +
            0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1,
4428 +
            0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a,
4429 +
            0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428,
4430 +
            0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7,
4431 +
            0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395,
4432 +
            0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e,
4433 +
            0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f,
4434 +
            0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a,
4435 +
            0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179,
4436 +
            0x4a5a, 0x671e, 0x8c3d,
4437 +
        ],
4438 +
        [
4439 +
            0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1,
4440 +
            0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6,
4441 +
            0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d,
4442 +
            0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289,
4443 +
            0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24,
4444 +
            0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f,
4445 +
            0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564,
4446 +
            0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76,
4447 +
            0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d,
4448 +
            0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c,
4449 +
            0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca,
4450 +
            0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb,
4451 +
            0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0,
4452 +
            0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac,
4453 +
            0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c,
4454 +
            0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88,
4455 +
            0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e,
4456 +
            0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e,
4457 +
            0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8,
4458 +
            0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c,
4459 +
            0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c,
4460 +
            0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0,
4461 +
            0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb,
4462 +
            0xb38e, 0x0241, 0x6d04,
4463 +
        ],
4464 +
        [
4465 +
            0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d,
4466 +
            0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33,
4467 +
            0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a,
4468 +
            0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e,
4469 +
            0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3,
4470 +
            0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c,
4471 +
            0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c,
4472 +
            0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855,
4473 +
            0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c,
4474 +
            0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f,
4475 +
            0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c,
4476 +
            0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150,
4477 +
            0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0,
4478 +
            0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650,
4479 +
            0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297,
4480 +
            0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3,
4481 +
            0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0,
4482 +
            0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471,
4483 +
            0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842,
4484 +
            0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236,
4485 +
            0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1,
4486 +
            0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71,
4487 +
            0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1,
4488 +
            0x19b8, 0x6142, 0xb90b,
4489 +
        ],
4490 +
        [
4491 +
            0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42,
4492 +
            0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1,
4493 +
            0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0,
4494 +
            0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097,
4495 +
            0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce,
4496 +
            0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35,
4497 +
            0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c,
4498 +
            0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b,
4499 +
            0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a,
4500 +
            0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9,
4501 +
            0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18,
4502 +
            0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e,
4503 +
            0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37,
4504 +
            0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c,
4505 +
            0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5,
4506 +
            0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2,
4507 +
            0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13,
4508 +
            0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940,
4509 +
            0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1,
4510 +
            0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86,
4511 +
            0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f,
4512 +
            0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64,
4513 +
            0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d,
4514 +
            0x3b18, 0x3e87, 0x3df2,
4515 +
        ],
4516 +
        [
4517 +
            0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c,
4518 +
            0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a,
4519 +
            0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68,
4520 +
            0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997,
4521 +
            0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7,
4522 +
            0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3,
4523 +
            0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427,
4524 +
            0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c,
4525 +
            0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e,
4526 +
            0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c,
4527 +
            0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56,
4528 +
            0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05,
4529 +
            0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191,
4530 +
            0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d,
4531 +
            0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65,
4532 +
            0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a,
4533 +
            0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0,
4534 +
            0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe,
4535 +
            0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4,
4536 +
            0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b,
4537 +
            0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73,
4538 +
            0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf,
4539 +
            0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b,
4540 +
            0x9f38, 0x509d, 0x15fe,
4541 +
        ],
4542 +
        [
4543 +
            0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9,
4544 +
            0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033,
4545 +
            0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf,
4546 +
            0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07,
4547 +
            0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f,
4548 +
            0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de,
4549 +
            0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71,
4550 +
            0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e,
4551 +
            0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2,
4552 +
            0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf,
4553 +
            0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec,
4554 +
            0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd,
4555 +
            0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772,
4556 +
            0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183,
4557 +
            0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714,
4558 +
            0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc,
4559 +
            0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef,
4560 +
            0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05,
4561 +
            0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36,
4562 +
            0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe,
4563 +
            0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69,
4564 +
            0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98,
4565 +
            0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137,
4566 +
            0x4a56, 0xc7f5, 0xbc94,
4567 +
        ],
4568 +
        [
4569 +
            0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c,
4570 +
            0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4,
4571 +
            0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14,
4572 +
            0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974,
4573 +
            0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5,
4574 +
            0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5,
4575 +
            0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe,
4576 +
            0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14,
4577 +
            0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4,
4578 +
            0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516,
4579 +
            0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2,
4580 +
            0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737,
4581 +
            0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c,
4582 +
            0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321,
4583 +
            0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4,
4584 +
            0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4,
4585 +
            0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10,
4586 +
            0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55,
4587 +
            0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091,
4588 +
            0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1,
4589 +
            0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564,
4590 +
            0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379,
4591 +
            0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172,
4592 +
            0xbf8e, 0x5cab, 0xf257,
4593 +
        ],
4594 +
        [
4595 +
            0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec,
4596 +
            0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc,
4597 +
            0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614,
4598 +
            0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc,
4599 +
            0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5,
4600 +
            0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c,
4601 +
            0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f,
4602 +
            0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd,
4603 +
            0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55,
4604 +
            0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f,
4605 +
            0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3,
4606 +
            0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c,
4607 +
            0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f,
4608 +
            0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da,
4609 +
            0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7,
4610 +
            0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f,
4611 +
            0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83,
4612 +
            0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf,
4613 +
            0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753,
4614 +
            0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b,
4615 +
            0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6,
4616 +
            0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963,
4617 +
            0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010,
4618 +
            0xd834, 0x3079, 0x985d,
4619 +
        ],
4620 +
    ];
4621 +
4622 +
    pub static CRC16_IBM_SDLC_TABLE: [[u16; 256]; 16] = [
4623 +
        [
4624 +
            0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a,
4625 +
            0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c,
4626 +
            0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102,
4627 +
            0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1,
4628 +
            0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5,
4629 +
            0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d,
4630 +
            0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868,
4631 +
            0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
4632 +
            0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014,
4633 +
            0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3,
4634 +
            0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf,
4635 +
            0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693,
4636 +
            0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76,
4637 +
            0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948,
4638 +
            0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e,
4639 +
            0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
4640 +
            0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1,
4641 +
            0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1,
4642 +
            0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d,
4643 +
            0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e,
4644 +
            0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238,
4645 +
            0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606,
4646 +
            0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3,
4647 +
            0x2c6a, 0x1ef1, 0x0f78,
4648 +
        ],
4649 +
        [
4650 +
            0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70,
4651 +
            0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29,
4652 +
            0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333,
4653 +
            0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b,
4654 +
            0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272,
4655 +
            0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe,
4656 +
            0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6,
4657 +
            0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff,
4658 +
            0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5,
4659 +
            0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d,
4660 +
            0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04,
4661 +
            0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4,
4662 +
            0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc,
4663 +
            0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45,
4664 +
            0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f,
4665 +
            0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37,
4666 +
            0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e,
4667 +
            0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412,
4668 +
            0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b,
4669 +
            0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93,
4670 +
            0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49,
4671 +
            0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0,
4672 +
            0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8,
4673 +
            0xcc70, 0xe618, 0xffc0,
4674 +
        ],
4675 +
        [
4676 +
            0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a,
4677 +
            0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28,
4678 +
            0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b,
4679 +
            0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d,
4680 +
            0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077,
4681 +
            0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa,
4682 +
            0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5,
4683 +
            0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6,
4684 +
            0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5,
4685 +
            0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32,
4686 +
            0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a,
4687 +
            0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388,
4688 +
            0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7,
4689 +
            0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567,
4690 +
            0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6,
4691 +
            0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510,
4692 +
            0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938,
4693 +
            0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327,
4694 +
            0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f,
4695 +
            0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9,
4696 +
            0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78,
4697 +
            0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8,
4698 +
            0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997,
4699 +
            0x734b, 0x9c2f, 0xc6f3,
4700 +
        ],
4701 +
        [
4702 +
            0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae,
4703 +
            0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6,
4704 +
            0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53,
4705 +
            0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46,
4706 +
            0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768,
4707 +
            0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c,
4708 +
            0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183,
4709 +
            0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237,
4710 +
            0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092,
4711 +
            0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b,
4712 +
            0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d,
4713 +
            0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3,
4714 +
            0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c,
4715 +
            0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac,
4716 +
            0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1,
4717 +
            0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4,
4718 +
            0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32,
4719 +
            0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e,
4720 +
            0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878,
4721 +
            0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d,
4722 +
            0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10,
4723 +
            0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90,
4724 +
            0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f,
4725 +
            0xfca4, 0xd969, 0xc5d2,
4726 +
        ],
4727 +
        [
4728 +
            0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8,
4729 +
            0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214,
4730 +
            0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091,
4731 +
            0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d,
4732 +
            0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49,
4733 +
            0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66,
4734 +
            0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612,
4735 +
            0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be,
4736 +
            0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b,
4737 +
            0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7,
4738 +
            0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3,
4739 +
            0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799,
4740 +
            0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed,
4741 +
            0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71,
4742 +
            0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4,
4743 +
            0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038,
4744 +
            0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c,
4745 +
            0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23,
4746 +
            0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37,
4747 +
            0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db,
4748 +
            0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e,
4749 +
            0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2,
4750 +
            0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896,
4751 +
            0xe3d2, 0xfe1e, 0xf55a,
4752 +
        ],
4753 +
        [
4754 +
            0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e,
4755 +
            0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637,
4756 +
            0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560,
4757 +
            0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845,
4758 +
            0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a,
4759 +
            0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa,
4760 +
            0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325,
4761 +
            0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0,
4762 +
            0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7,
4763 +
            0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e,
4764 +
            0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459,
4765 +
            0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df,
4766 +
            0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00,
4767 +
            0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261,
4768 +
            0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e,
4769 +
            0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b,
4770 +
            0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c,
4771 +
            0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4,
4772 +
            0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3,
4773 +
            0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6,
4774 +
            0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9,
4775 +
            0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488,
4776 +
            0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157,
4777 +
            0xf57c, 0xf901, 0xfd2a,
4778 +
        ],
4779 +
        [
4780 +
            0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957,
4781 +
            0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a,
4782 +
            0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383,
4783 +
            0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501,
4784 +
            0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87,
4785 +
            0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3,
4786 +
            0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c,
4787 +
            0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7,
4788 +
            0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e,
4789 +
            0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca,
4790 +
            0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0,
4791 +
            0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73,
4792 +
            0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c,
4793 +
            0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed,
4794 +
            0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8,
4795 +
            0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a,
4796 +
            0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900,
4797 +
            0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8,
4798 +
            0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2,
4799 +
            0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250,
4800 +
            0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55,
4801 +
            0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884,
4802 +
            0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb,
4803 +
            0xb91e, 0x1170, 0x8ea5,
4804 +
        ],
4805 +
        [
4806 +
            0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3,
4807 +
            0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19,
4808 +
            0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0,
4809 +
            0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c,
4810 +
            0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039,
4811 +
            0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e,
4812 +
            0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93,
4813 +
            0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287,
4814 +
            0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e,
4815 +
            0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc,
4816 +
            0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5,
4817 +
            0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132,
4818 +
            0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef,
4819 +
            0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99,
4820 +
            0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc,
4821 +
            0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0,
4822 +
            0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9,
4823 +
            0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972,
4824 +
            0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b,
4825 +
            0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207,
4826 +
            0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552,
4827 +
            0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224,
4828 +
            0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9,
4829 +
            0xf946, 0x7396, 0xf229,
4830 +
        ],
4831 +
        [
4832 +
            0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430,
4833 +
            0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c,
4834 +
            0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739,
4835 +
            0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4,
4836 +
            0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2,
4837 +
            0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e,
4838 +
            0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c,
4839 +
            0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015,
4840 +
            0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0,
4841 +
            0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88,
4842 +
            0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104,
4843 +
            0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0,
4844 +
            0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02,
4845 +
            0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974,
4846 +
            0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b,
4847 +
            0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6,
4848 +
            0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a,
4849 +
            0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac,
4850 +
            0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20,
4851 +
            0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed,
4852 +
            0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192,
4853 +
            0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4,
4854 +
            0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36,
4855 +
            0x27cb, 0xf1cc, 0xbc31,
4856 +
        ],
4857 +
        [
4858 +
            0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167,
4859 +
            0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9,
4860 +
            0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5,
4861 +
            0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5,
4862 +
            0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635,
4863 +
            0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c,
4864 +
            0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce,
4865 +
            0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc,
4866 +
            0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580,
4867 +
            0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c,
4868 +
            0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5,
4869 +
            0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f,
4870 +
            0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d,
4871 +
            0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa,
4872 +
            0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf,
4873 +
            0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f,
4874 +
            0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76,
4875 +
            0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36,
4876 +
            0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df,
4877 +
            0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f,
4878 +
            0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea,
4879 +
            0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d,
4880 +
            0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df,
4881 +
            0x78f8, 0x0c91, 0x20b6,
4882 +
        ],
4883 +
        [
4884 +
            0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788,
4885 +
            0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81,
4886 +
            0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a,
4887 +
            0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093,
4888 +
            0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8,
4889 +
            0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894,
4890 +
            0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa,
4891 +
            0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6,
4892 +
            0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad,
4893 +
            0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1,
4894 +
            0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260,
4895 +
            0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8,
4896 +
            0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6,
4897 +
            0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65,
4898 +
            0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4,
4899 +
            0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd,
4900 +
            0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c,
4901 +
            0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da,
4902 +
            0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b,
4903 +
            0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42,
4904 +
            0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3,
4905 +
            0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940,
4906 +
            0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e,
4907 +
            0x7bbf, 0x850c, 0xd09d,
4908 +
        ],
4909 +
        [
4910 +
            0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857,
4911 +
            0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb,
4912 +
            0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0,
4913 +
            0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2,
4914 +
            0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5,
4915 +
            0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235,
4916 +
            0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa,
4917 +
            0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020,
4918 +
            0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b,
4919 +
            0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f,
4920 +
            0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4,
4921 +
            0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e,
4922 +
            0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1,
4923 +
            0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1,
4924 +
            0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006,
4925 +
            0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04,
4926 +
            0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff,
4927 +
            0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983,
4928 +
            0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78,
4929 +
            0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a,
4930 +
            0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd,
4931 +
            0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d,
4932 +
            0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852,
4933 +
            0x4d07, 0xcae9, 0x4fbc,
4934 +
        ],
4935 +
        [
4936 +
            0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632,
4937 +
            0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9,
4938 +
            0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0,
4939 +
            0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f,
4940 +
            0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e,
4941 +
            0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc,
4942 +
            0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d,
4943 +
            0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2,
4944 +
            0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab,
4945 +
            0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880,
4946 +
            0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149,
4947 +
            0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855,
4948 +
            0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624,
4949 +
            0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7,
4950 +
            0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6,
4951 +
            0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629,
4952 +
            0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0,
4953 +
            0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea,
4954 +
            0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23,
4955 +
            0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc,
4956 +
            0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd,
4957 +
            0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e,
4958 +
            0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f,
4959 +
            0x74f2, 0x7a05, 0x7fa8,
4960 +
        ],
4961 +
        [
4962 +
            0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7,
4963 +
            0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84,
4964 +
            0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf,
4965 +
            0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2,
4966 +
            0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05,
4967 +
            0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85,
4968 +
            0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5,
4969 +
            0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f,
4970 +
            0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04,
4971 +
            0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0,
4972 +
            0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64,
4973 +
            0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0,
4974 +
            0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0,
4975 +
            0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180,
4976 +
            0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8,
4977 +
            0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85,
4978 +
            0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701,
4979 +
            0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2,
4980 +
            0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366,
4981 +
            0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b,
4982 +
            0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63,
4983 +
            0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833,
4984 +
            0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03,
4985 +
            0xd4e9, 0x57d7, 0x293d,
4986 +
        ],
4987 +
        [
4988 +
            0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126,
4989 +
            0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277,
4990 +
            0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9,
4991 +
            0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5,
4992 +
            0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0,
4993 +
            0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398,
4994 +
            0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279,
4995 +
            0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991,
4996 +
            0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f,
4997 +
            0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a,
4998 +
            0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd,
4999 +
            0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b,
5000 +
            0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea,
5001 +
            0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9,
5002 +
            0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15,
5003 +
            0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319,
5004 +
            0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e,
5005 +
            0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454,
5006 +
            0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623,
5007 +
            0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f,
5008 +
            0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3,
5009 +
            0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0,
5010 +
            0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231,
5011 +
            0x7a1b, 0xa265, 0xea4f,
5012 +
        ],
5013 +
        [
5014 +
            0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5,
5015 +
            0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa,
5016 +
            0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01,
5017 +
            0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4,
5018 +
            0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da,
5019 +
            0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812,
5020 +
            0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4,
5021 +
            0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9,
5022 +
            0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932,
5023 +
            0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5,
5024 +
            0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f,
5025 +
            0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34,
5026 +
            0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882,
5027 +
            0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49,
5028 +
            0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776,
5029 +
            0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93,
5030 +
            0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69,
5031 +
            0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465,
5032 +
            0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f,
5033 +
            0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a,
5034 +
            0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545,
5035 +
            0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e,
5036 +
            0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038,
5037 +
            0xae28, 0x3409, 0xba19,
5038 +
        ],
5039 +
    ];
5040 +
5041 +
    pub static CRC16_ISO_IEC_14443_3_A_TABLE: [[u16; 256]; 16] = [
5042 +
        [
5043 +
            0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a,
5044 +
            0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c,
5045 +
            0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102,
5046 +
            0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1,
5047 +
            0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5,
5048 +
            0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d,
5049 +
            0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868,
5050 +
            0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
5051 +
            0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014,
5052 +
            0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3,
5053 +
            0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf,
5054 +
            0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693,
5055 +
            0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76,
5056 +
            0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948,
5057 +
            0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e,
5058 +
            0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
5059 +
            0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1,
5060 +
            0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1,
5061 +
            0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d,
5062 +
            0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e,
5063 +
            0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238,
5064 +
            0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606,
5065 +
            0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3,
5066 +
            0x2c6a, 0x1ef1, 0x0f78,
5067 +
        ],
5068 +
        [
5069 +
            0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70,
5070 +
            0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29,
5071 +
            0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333,
5072 +
            0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b,
5073 +
            0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272,
5074 +
            0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe,
5075 +
            0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6,
5076 +
            0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff,
5077 +
            0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5,
5078 +
            0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d,
5079 +
            0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04,
5080 +
            0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4,
5081 +
            0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc,
5082 +
            0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45,
5083 +
            0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f,
5084 +
            0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37,
5085 +
            0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e,
5086 +
            0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412,
5087 +
            0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b,
5088 +
            0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93,
5089 +
            0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49,
5090 +
            0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0,
5091 +
            0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8,
5092 +
            0xcc70, 0xe618, 0xffc0,
5093 +
        ],
5094 +
        [
5095 +
            0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a,
5096 +
            0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28,
5097 +
            0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b,
5098 +
            0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d,
5099 +
            0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077,
5100 +
            0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa,
5101 +
            0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5,
5102 +
            0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6,
5103 +
            0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5,
5104 +
            0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32,
5105 +
            0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a,
5106 +
            0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388,
5107 +
            0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7,
5108 +
            0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567,
5109 +
            0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6,
5110 +
            0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510,
5111 +
            0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938,
5112 +
            0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327,
5113 +
            0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f,
5114 +
            0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9,
5115 +
            0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78,
5116 +
            0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8,
5117 +
            0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997,
5118 +
            0x734b, 0x9c2f, 0xc6f3,
5119 +
        ],
5120 +
        [
5121 +
            0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae,
5122 +
            0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6,
5123 +
            0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53,
5124 +
            0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46,
5125 +
            0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768,
5126 +
            0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c,
5127 +
            0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183,
5128 +
            0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237,
5129 +
            0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092,
5130 +
            0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b,
5131 +
            0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d,
5132 +
            0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3,
5133 +
            0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c,
5134 +
            0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac,
5135 +
            0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1,
5136 +
            0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4,
5137 +
            0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32,
5138 +
            0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e,
5139 +
            0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878,
5140 +
            0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d,
5141 +
            0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10,
5142 +
            0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90,
5143 +
            0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f,
5144 +
            0xfca4, 0xd969, 0xc5d2,
5145 +
        ],
5146 +
        [
5147 +
            0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8,
5148 +
            0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214,
5149 +
            0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091,
5150 +
            0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d,
5151 +
            0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49,
5152 +
            0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66,
5153 +
            0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612,
5154 +
            0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be,
5155 +
            0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b,
5156 +
            0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7,
5157 +
            0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3,
5158 +
            0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799,
5159 +
            0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed,
5160 +
            0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71,
5161 +
            0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4,
5162 +
            0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038,
5163 +
            0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c,
5164 +
            0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23,
5165 +
            0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37,
5166 +
            0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db,
5167 +
            0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e,
5168 +
            0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2,
5169 +
            0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896,
5170 +
            0xe3d2, 0xfe1e, 0xf55a,
5171 +
        ],
5172 +
        [
5173 +
            0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e,
5174 +
            0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637,
5175 +
            0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560,
5176 +
            0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845,
5177 +
            0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a,
5178 +
            0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa,
5179 +
            0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325,
5180 +
            0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0,
5181 +
            0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7,
5182 +
            0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e,
5183 +
            0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459,
5184 +
            0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df,
5185 +
            0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00,
5186 +
            0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261,
5187 +
            0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e,
5188 +
            0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b,
5189 +
            0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c,
5190 +
            0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4,
5191 +
            0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3,
5192 +
            0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6,
5193 +
            0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9,
5194 +
            0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488,
5195 +
            0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157,
5196 +
            0xf57c, 0xf901, 0xfd2a,
5197 +
        ],
5198 +
        [
5199 +
            0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957,
5200 +
            0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a,
5201 +
            0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383,
5202 +
            0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501,
5203 +
            0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87,
5204 +
            0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3,
5205 +
            0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c,
5206 +
            0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7,
5207 +
            0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e,
5208 +
            0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca,
5209 +
            0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0,
5210 +
            0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73,
5211 +
            0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c,
5212 +
            0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed,
5213 +
            0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8,
5214 +
            0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a,
5215 +
            0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900,
5216 +
            0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8,
5217 +
            0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2,
5218 +
            0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250,
5219 +
            0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55,
5220 +
            0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884,
5221 +
            0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb,
5222 +
            0xb91e, 0x1170, 0x8ea5,
5223 +
        ],
5224 +
        [
5225 +
            0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3,
5226 +
            0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19,
5227 +
            0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0,
5228 +
            0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c,
5229 +
            0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039,
5230 +
            0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e,
5231 +
            0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93,
5232 +
            0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287,
5233 +
            0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e,
5234 +
            0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc,
5235 +
            0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5,
5236 +
            0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132,
5237 +
            0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef,
5238 +
            0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99,
5239 +
            0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc,
5240 +
            0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0,
5241 +
            0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9,
5242 +
            0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972,
5243 +
            0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b,
5244 +
            0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207,
5245 +
            0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552,
5246 +
            0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224,
5247 +
            0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9,
5248 +
            0xf946, 0x7396, 0xf229,
5249 +
        ],
5250 +
        [
5251 +
            0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430,
5252 +
            0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c,
5253 +
            0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739,
5254 +
            0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4,
5255 +
            0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2,
5256 +
            0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e,
5257 +
            0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c,
5258 +
            0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015,
5259 +
            0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0,
5260 +
            0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88,
5261 +
            0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104,
5262 +
            0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0,
5263 +
            0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02,
5264 +
            0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974,
5265 +
            0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b,
5266 +
            0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6,
5267 +
            0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a,
5268 +
            0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac,
5269 +
            0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20,
5270 +
            0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed,
5271 +
            0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192,
5272 +
            0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4,
5273 +
            0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36,
5274 +
            0x27cb, 0xf1cc, 0xbc31,
5275 +
        ],
5276 +
        [
5277 +
            0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167,
5278 +
            0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9,
5279 +
            0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5,
5280 +
            0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5,
5281 +
            0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635,
5282 +
            0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c,
5283 +
            0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce,
5284 +
            0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc,
5285 +
            0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580,
5286 +
            0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c,
5287 +
            0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5,
5288 +
            0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f,
5289 +
            0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d,
5290 +
            0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa,
5291 +
            0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf,
5292 +
            0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f,
5293 +
            0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76,
5294 +
            0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36,
5295 +
            0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df,
5296 +
            0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f,
5297 +
            0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea,
5298 +
            0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d,
5299 +
            0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df,
5300 +
            0x78f8, 0x0c91, 0x20b6,
5301 +
        ],
5302 +
        [
5303 +
            0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788,
5304 +
            0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81,
5305 +
            0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a,
5306 +
            0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093,
5307 +
            0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8,
5308 +
            0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894,
5309 +
            0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa,
5310 +
            0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6,
5311 +
            0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad,
5312 +
            0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1,
5313 +
            0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260,
5314 +
            0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8,
5315 +
            0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6,
5316 +
            0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65,
5317 +
            0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4,
5318 +
            0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd,
5319 +
            0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c,
5320 +
            0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da,
5321 +
            0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b,
5322 +
            0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42,
5323 +
            0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3,
5324 +
            0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940,
5325 +
            0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e,
5326 +
            0x7bbf, 0x850c, 0xd09d,
5327 +
        ],
5328 +
        [
5329 +
            0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857,
5330 +
            0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb,
5331 +
            0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0,
5332 +
            0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2,
5333 +
            0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5,
5334 +
            0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235,
5335 +
            0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa,
5336 +
            0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020,
5337 +
            0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b,
5338 +
            0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f,
5339 +
            0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4,
5340 +
            0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e,
5341 +
            0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1,
5342 +
            0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1,
5343 +
            0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006,
5344 +
            0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04,
5345 +
            0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff,
5346 +
            0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983,
5347 +
            0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78,
5348 +
            0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a,
5349 +
            0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd,
5350 +
            0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d,
5351 +
            0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852,
5352 +
            0x4d07, 0xcae9, 0x4fbc,
5353 +
        ],
5354 +
        [
5355 +
            0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632,
5356 +
            0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9,
5357 +
            0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0,
5358 +
            0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f,
5359 +
            0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e,
5360 +
            0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc,
5361 +
            0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d,
5362 +
            0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2,
5363 +
            0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab,
5364 +
            0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880,
5365 +
            0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149,
5366 +
            0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855,
5367 +
            0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624,
5368 +
            0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7,
5369 +
            0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6,
5370 +
            0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629,
5371 +
            0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0,
5372 +
            0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea,
5373 +
            0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23,
5374 +
            0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc,
5375 +
            0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd,
5376 +
            0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e,
5377 +
            0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f,
5378 +
            0x74f2, 0x7a05, 0x7fa8,
5379 +
        ],
5380 +
        [
5381 +
            0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7,
5382 +
            0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84,
5383 +
            0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf,
5384 +
            0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2,
5385 +
            0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05,
5386 +
            0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85,
5387 +
            0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5,
5388 +
            0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f,
5389 +
            0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04,
5390 +
            0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0,
5391 +
            0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64,
5392 +
            0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0,
5393 +
            0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0,
5394 +
            0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180,
5395 +
            0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8,
5396 +
            0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85,
5397 +
            0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701,
5398 +
            0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2,
5399 +
            0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366,
5400 +
            0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b,
5401 +
            0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63,
5402 +
            0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833,
5403 +
            0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03,
5404 +
            0xd4e9, 0x57d7, 0x293d,
5405 +
        ],
5406 +
        [
5407 +
            0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126,
5408 +
            0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277,
5409 +
            0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9,
5410 +
            0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5,
5411 +
            0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0,
5412 +
            0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398,
5413 +
            0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279,
5414 +
            0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991,
5415 +
            0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f,
5416 +
            0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a,
5417 +
            0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd,
5418 +
            0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b,
5419 +
            0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea,
5420 +
            0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9,
5421 +
            0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15,
5422 +
            0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319,
5423 +
            0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e,
5424 +
            0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454,
5425 +
            0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623,
5426 +
            0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f,
5427 +
            0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3,
5428 +
            0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0,
5429 +
            0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231,
5430 +
            0x7a1b, 0xa265, 0xea4f,
5431 +
        ],
5432 +
        [
5433 +
            0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5,
5434 +
            0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa,
5435 +
            0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01,
5436 +
            0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4,
5437 +
            0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da,
5438 +
            0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812,
5439 +
            0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4,
5440 +
            0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9,
5441 +
            0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932,
5442 +
            0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5,
5443 +
            0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f,
5444 +
            0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34,
5445 +
            0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882,
5446 +
            0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49,
5447 +
            0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776,
5448 +
            0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93,
5449 +
            0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69,
5450 +
            0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465,
5451 +
            0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f,
5452 +
            0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a,
5453 +
            0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545,
5454 +
            0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e,
5455 +
            0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038,
5456 +
            0xae28, 0x3409, 0xba19,
5457 +
        ],
5458 +
    ];
5459 +
5460 +
    pub static CRC16_KERMIT_TABLE: [[u16; 256]; 16] = [
5461 +
        [
5462 +
            0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a,
5463 +
            0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c,
5464 +
            0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102,
5465 +
            0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1,
5466 +
            0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5,
5467 +
            0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d,
5468 +
            0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868,
5469 +
            0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
5470 +
            0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014,
5471 +
            0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3,
5472 +
            0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf,
5473 +
            0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693,
5474 +
            0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76,
5475 +
            0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948,
5476 +
            0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e,
5477 +
            0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
5478 +
            0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1,
5479 +
            0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1,
5480 +
            0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d,
5481 +
            0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e,
5482 +
            0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238,
5483 +
            0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606,
5484 +
            0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3,
5485 +
            0x2c6a, 0x1ef1, 0x0f78,
5486 +
        ],
5487 +
        [
5488 +
            0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70,
5489 +
            0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29,
5490 +
            0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333,
5491 +
            0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b,
5492 +
            0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272,
5493 +
            0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe,
5494 +
            0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6,
5495 +
            0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff,
5496 +
            0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5,
5497 +
            0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d,
5498 +
            0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04,
5499 +
            0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4,
5500 +
            0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc,
5501 +
            0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45,
5502 +
            0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f,
5503 +
            0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37,
5504 +
            0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e,
5505 +
            0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412,
5506 +
            0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b,
5507 +
            0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93,
5508 +
            0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49,
5509 +
            0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0,
5510 +
            0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8,
5511 +
            0xcc70, 0xe618, 0xffc0,
5512 +
        ],
5513 +
        [
5514 +
            0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a,
5515 +
            0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28,
5516 +
            0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b,
5517 +
            0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d,
5518 +
            0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077,
5519 +
            0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa,
5520 +
            0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5,
5521 +
            0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6,
5522 +
            0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5,
5523 +
            0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32,
5524 +
            0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a,
5525 +
            0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388,
5526 +
            0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7,
5527 +
            0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567,
5528 +
            0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6,
5529 +
            0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510,
5530 +
            0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938,
5531 +
            0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327,
5532 +
            0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f,
5533 +
            0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9,
5534 +
            0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78,
5535 +
            0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8,
5536 +
            0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997,
5537 +
            0x734b, 0x9c2f, 0xc6f3,
5538 +
        ],
5539 +
        [
5540 +
            0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae,
5541 +
            0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6,
5542 +
            0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53,
5543 +
            0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46,
5544 +
            0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768,
5545 +
            0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c,
5546 +
            0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183,
5547 +
            0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237,
5548 +
            0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092,
5549 +
            0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b,
5550 +
            0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d,
5551 +
            0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3,
5552 +
            0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c,
5553 +
            0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac,
5554 +
            0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1,
5555 +
            0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4,
5556 +
            0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32,
5557 +
            0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e,
5558 +
            0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878,
5559 +
            0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d,
5560 +
            0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10,
5561 +
            0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90,
5562 +
            0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f,
5563 +
            0xfca4, 0xd969, 0xc5d2,
5564 +
        ],
5565 +
        [
5566 +
            0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8,
5567 +
            0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214,
5568 +
            0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091,
5569 +
            0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d,
5570 +
            0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49,
5571 +
            0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66,
5572 +
            0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612,
5573 +
            0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be,
5574 +
            0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b,
5575 +
            0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7,
5576 +
            0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3,
5577 +
            0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799,
5578 +
            0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed,
5579 +
            0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71,
5580 +
            0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4,
5581 +
            0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038,
5582 +
            0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c,
5583 +
            0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23,
5584 +
            0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37,
5585 +
            0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db,
5586 +
            0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e,
5587 +
            0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2,
5588 +
            0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896,
5589 +
            0xe3d2, 0xfe1e, 0xf55a,
5590 +
        ],
5591 +
        [
5592 +
            0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e,
5593 +
            0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637,
5594 +
            0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560,
5595 +
            0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845,
5596 +
            0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a,
5597 +
            0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa,
5598 +
            0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325,
5599 +
            0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0,
5600 +
            0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7,
5601 +
            0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e,
5602 +
            0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459,
5603 +
            0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df,
5604 +
            0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00,
5605 +
            0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261,
5606 +
            0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e,
5607 +
            0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b,
5608 +
            0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c,
5609 +
            0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4,
5610 +
            0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3,
5611 +
            0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6,
5612 +
            0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9,
5613 +
            0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488,
5614 +
            0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157,
5615 +
            0xf57c, 0xf901, 0xfd2a,
5616 +
        ],
5617 +
        [
5618 +
            0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957,
5619 +
            0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a,
5620 +
            0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383,
5621 +
            0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501,
5622 +
            0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87,
5623 +
            0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3,
5624 +
            0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c,
5625 +
            0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7,
5626 +
            0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e,
5627 +
            0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca,
5628 +
            0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0,
5629 +
            0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73,
5630 +
            0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c,
5631 +
            0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed,
5632 +
            0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8,
5633 +
            0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a,
5634 +
            0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900,
5635 +
            0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8,
5636 +
            0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2,
5637 +
            0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250,
5638 +
            0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55,
5639 +
            0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884,
5640 +
            0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb,
5641 +
            0xb91e, 0x1170, 0x8ea5,
5642 +
        ],
5643 +
        [
5644 +
            0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3,
5645 +
            0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19,
5646 +
            0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0,
5647 +
            0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c,
5648 +
            0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039,
5649 +
            0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e,
5650 +
            0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93,
5651 +
            0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287,
5652 +
            0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e,
5653 +
            0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc,
5654 +
            0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5,
5655 +
            0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132,
5656 +
            0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef,
5657 +
            0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99,
5658 +
            0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc,
5659 +
            0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0,
5660 +
            0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9,
5661 +
            0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972,
5662 +
            0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b,
5663 +
            0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207,
5664 +
            0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552,
5665 +
            0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224,
5666 +
            0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9,
5667 +
            0xf946, 0x7396, 0xf229,
5668 +
        ],
5669 +
        [
5670 +
            0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430,
5671 +
            0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c,
5672 +
            0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739,
5673 +
            0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4,
5674 +
            0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2,
5675 +
            0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e,
5676 +
            0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c,
5677 +
            0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015,
5678 +
            0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0,
5679 +
            0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88,
5680 +
            0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104,
5681 +
            0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0,
5682 +
            0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02,
5683 +
            0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974,
5684 +
            0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b,
5685 +
            0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6,
5686 +
            0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a,
5687 +
            0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac,
5688 +
            0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20,
5689 +
            0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed,
5690 +
            0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192,
5691 +
            0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4,
5692 +
            0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36,
5693 +
            0x27cb, 0xf1cc, 0xbc31,
5694 +
        ],
5695 +
        [
5696 +
            0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167,
5697 +
            0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9,
5698 +
            0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5,
5699 +
            0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5,
5700 +
            0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635,
5701 +
            0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c,
5702 +
            0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce,
5703 +
            0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc,
5704 +
            0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580,
5705 +
            0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c,
5706 +
            0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5,
5707 +
            0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f,
5708 +
            0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d,
5709 +
            0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa,
5710 +
            0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf,
5711 +
            0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f,
5712 +
            0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76,
5713 +
            0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36,
5714 +
            0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df,
5715 +
            0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f,
5716 +
            0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea,
5717 +
            0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d,
5718 +
            0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df,
5719 +
            0x78f8, 0x0c91, 0x20b6,
5720 +
        ],
5721 +
        [
5722 +
            0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788,
5723 +
            0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81,
5724 +
            0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a,
5725 +
            0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093,
5726 +
            0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8,
5727 +
            0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894,
5728 +
            0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa,
5729 +
            0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6,
5730 +
            0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad,
5731 +
            0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1,
5732 +
            0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260,
5733 +
            0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8,
5734 +
            0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6,
5735 +
            0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65,
5736 +
            0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4,
5737 +
            0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd,
5738 +
            0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c,
5739 +
            0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da,
5740 +
            0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b,
5741 +
            0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42,
5742 +
            0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3,
5743 +
            0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940,
5744 +
            0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e,
5745 +
            0x7bbf, 0x850c, 0xd09d,
5746 +
        ],
5747 +
        [
5748 +
            0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857,
5749 +
            0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb,
5750 +
            0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0,
5751 +
            0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2,
5752 +
            0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5,
5753 +
            0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235,
5754 +
            0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa,
5755 +
            0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020,
5756 +
            0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b,
5757 +
            0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f,
5758 +
            0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4,
5759 +
            0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e,
5760 +
            0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1,
5761 +
            0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1,
5762 +
            0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006,
5763 +
            0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04,
5764 +
            0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff,
5765 +
            0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983,
5766 +
            0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78,
5767 +
            0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a,
5768 +
            0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd,
5769 +
            0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d,
5770 +
            0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852,
5771 +
            0x4d07, 0xcae9, 0x4fbc,
5772 +
        ],
5773 +
        [
5774 +
            0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632,
5775 +
            0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9,
5776 +
            0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0,
5777 +
            0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f,
5778 +
            0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e,
5779 +
            0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc,
5780 +
            0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d,
5781 +
            0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2,
5782 +
            0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab,
5783 +
            0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880,
5784 +
            0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149,
5785 +
            0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855,
5786 +
            0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624,
5787 +
            0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7,
5788 +
            0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6,
5789 +
            0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629,
5790 +
            0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0,
5791 +
            0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea,
5792 +
            0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23,
5793 +
            0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc,
5794 +
            0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd,
5795 +
            0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e,
5796 +
            0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f,
5797 +
            0x74f2, 0x7a05, 0x7fa8,
5798 +
        ],
5799 +
        [
5800 +
            0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7,
5801 +
            0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84,
5802 +
            0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf,
5803 +
            0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2,
5804 +
            0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05,
5805 +
            0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85,
5806 +
            0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5,
5807 +
            0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f,
5808 +
            0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04,
5809 +
            0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0,
5810 +
            0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64,
5811 +
            0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0,
5812 +
            0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0,
5813 +
            0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180,
5814 +
            0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8,
5815 +
            0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85,
5816 +
            0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701,
5817 +
            0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2,
5818 +
            0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366,
5819 +
            0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b,
5820 +
            0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63,
5821 +
            0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833,
5822 +
            0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03,
5823 +
            0xd4e9, 0x57d7, 0x293d,
5824 +
        ],
5825 +
        [
5826 +
            0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126,
5827 +
            0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277,
5828 +
            0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9,
5829 +
            0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5,
5830 +
            0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0,
5831 +
            0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398,
5832 +
            0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279,
5833 +
            0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991,
5834 +
            0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f,
5835 +
            0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a,
5836 +
            0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd,
5837 +
            0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b,
5838 +
            0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea,
5839 +
            0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9,
5840 +
            0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15,
5841 +
            0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319,
5842 +
            0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e,
5843 +
            0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454,
5844 +
            0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623,
5845 +
            0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f,
5846 +
            0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3,
5847 +
            0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0,
5848 +
            0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231,
5849 +
            0x7a1b, 0xa265, 0xea4f,
5850 +
        ],
5851 +
        [
5852 +
            0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5,
5853 +
            0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa,
5854 +
            0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01,
5855 +
            0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4,
5856 +
            0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da,
5857 +
            0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812,
5858 +
            0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4,
5859 +
            0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9,
5860 +
            0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932,
5861 +
            0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5,
5862 +
            0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f,
5863 +
            0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34,
5864 +
            0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882,
5865 +
            0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49,
5866 +
            0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776,
5867 +
            0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93,
5868 +
            0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69,
5869 +
            0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465,
5870 +
            0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f,
5871 +
            0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a,
5872 +
            0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545,
5873 +
            0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e,
5874 +
            0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038,
5875 +
            0xae28, 0x3409, 0xba19,
5876 +
        ],
5877 +
    ];
5878 +
5879 +
    pub static CRC16_LJ1200_TABLE: [[u16; 256]; 16] = [
5880 +
        [
5881 +
            0x0000, 0x6f63, 0xdec6, 0xb1a5, 0xd2ef, 0xbd8c, 0x0c29, 0x634a, 0xcabd, 0xa5de, 0x147b,
5882 +
            0x7b18, 0x1852, 0x7731, 0xc694, 0xa9f7, 0xfa19, 0x957a, 0x24df, 0x4bbc, 0x28f6, 0x4795,
5883 +
            0xf630, 0x9953, 0x30a4, 0x5fc7, 0xee62, 0x8101, 0xe24b, 0x8d28, 0x3c8d, 0x53ee, 0x9b51,
5884 +
            0xf432, 0x4597, 0x2af4, 0x49be, 0x26dd, 0x9778, 0xf81b, 0x51ec, 0x3e8f, 0x8f2a, 0xe049,
5885 +
            0x8303, 0xec60, 0x5dc5, 0x32a6, 0x6148, 0x0e2b, 0xbf8e, 0xd0ed, 0xb3a7, 0xdcc4, 0x6d61,
5886 +
            0x0202, 0xabf5, 0xc496, 0x7533, 0x1a50, 0x791a, 0x1679, 0xa7dc, 0xc8bf, 0x59c1, 0x36a2,
5887 +
            0x8707, 0xe864, 0x8b2e, 0xe44d, 0x55e8, 0x3a8b, 0x937c, 0xfc1f, 0x4dba, 0x22d9, 0x4193,
5888 +
            0x2ef0, 0x9f55, 0xf036, 0xa3d8, 0xccbb, 0x7d1e, 0x127d, 0x7137, 0x1e54, 0xaff1, 0xc092,
5889 +
            0x6965, 0x0606, 0xb7a3, 0xd8c0, 0xbb8a, 0xd4e9, 0x654c, 0x0a2f, 0xc290, 0xadf3, 0x1c56,
5890 +
            0x7335, 0x107f, 0x7f1c, 0xceb9, 0xa1da, 0x082d, 0x674e, 0xd6eb, 0xb988, 0xdac2, 0xb5a1,
5891 +
            0x0404, 0x6b67, 0x3889, 0x57ea, 0xe64f, 0x892c, 0xea66, 0x8505, 0x34a0, 0x5bc3, 0xf234,
5892 +
            0x9d57, 0x2cf2, 0x4391, 0x20db, 0x4fb8, 0xfe1d, 0x917e, 0xb382, 0xdce1, 0x6d44, 0x0227,
5893 +
            0x616d, 0x0e0e, 0xbfab, 0xd0c8, 0x793f, 0x165c, 0xa7f9, 0xc89a, 0xabd0, 0xc4b3, 0x7516,
5894 +
            0x1a75, 0x499b, 0x26f8, 0x975d, 0xf83e, 0x9b74, 0xf417, 0x45b2, 0x2ad1, 0x8326, 0xec45,
5895 +
            0x5de0, 0x3283, 0x51c9, 0x3eaa, 0x8f0f, 0xe06c, 0x28d3, 0x47b0, 0xf615, 0x9976, 0xfa3c,
5896 +
            0x955f, 0x24fa, 0x4b99, 0xe26e, 0x8d0d, 0x3ca8, 0x53cb, 0x3081, 0x5fe2, 0xee47, 0x8124,
5897 +
            0xd2ca, 0xbda9, 0x0c0c, 0x636f, 0x0025, 0x6f46, 0xdee3, 0xb180, 0x1877, 0x7714, 0xc6b1,
5898 +
            0xa9d2, 0xca98, 0xa5fb, 0x145e, 0x7b3d, 0xea43, 0x8520, 0x3485, 0x5be6, 0x38ac, 0x57cf,
5899 +
            0xe66a, 0x8909, 0x20fe, 0x4f9d, 0xfe38, 0x915b, 0xf211, 0x9d72, 0x2cd7, 0x43b4, 0x105a,
5900 +
            0x7f39, 0xce9c, 0xa1ff, 0xc2b5, 0xadd6, 0x1c73, 0x7310, 0xdae7, 0xb584, 0x0421, 0x6b42,
5901 +
            0x0808, 0x676b, 0xd6ce, 0xb9ad, 0x7112, 0x1e71, 0xafd4, 0xc0b7, 0xa3fd, 0xcc9e, 0x7d3b,
5902 +
            0x1258, 0xbbaf, 0xd4cc, 0x6569, 0x0a0a, 0x6940, 0x0623, 0xb786, 0xd8e5, 0x8b0b, 0xe468,
5903 +
            0x55cd, 0x3aae, 0x59e4, 0x3687, 0x8722, 0xe841, 0x41b6, 0x2ed5, 0x9f70, 0xf013, 0x9359,
5904 +
            0xfc3a, 0x4d9f, 0x22fc,
5905 +
        ],
5906 +
        [
5907 +
            0x0000, 0x0867, 0x10ce, 0x18a9, 0x219c, 0x29fb, 0x3152, 0x3935, 0x4338, 0x4b5f, 0x53f6,
5908 +
            0x5b91, 0x62a4, 0x6ac3, 0x726a, 0x7a0d, 0x8670, 0x8e17, 0x96be, 0x9ed9, 0xa7ec, 0xaf8b,
5909 +
            0xb722, 0xbf45, 0xc548, 0xcd2f, 0xd586, 0xdde1, 0xe4d4, 0xecb3, 0xf41a, 0xfc7d, 0x6383,
5910 +
            0x6be4, 0x734d, 0x7b2a, 0x421f, 0x4a78, 0x52d1, 0x5ab6, 0x20bb, 0x28dc, 0x3075, 0x3812,
5911 +
            0x0127, 0x0940, 0x11e9, 0x198e, 0xe5f3, 0xed94, 0xf53d, 0xfd5a, 0xc46f, 0xcc08, 0xd4a1,
5912 +
            0xdcc6, 0xa6cb, 0xaeac, 0xb605, 0xbe62, 0x8757, 0x8f30, 0x9799, 0x9ffe, 0xc706, 0xcf61,
5913 +
            0xd7c8, 0xdfaf, 0xe69a, 0xeefd, 0xf654, 0xfe33, 0x843e, 0x8c59, 0x94f0, 0x9c97, 0xa5a2,
5914 +
            0xadc5, 0xb56c, 0xbd0b, 0x4176, 0x4911, 0x51b8, 0x59df, 0x60ea, 0x688d, 0x7024, 0x7843,
5915 +
            0x024e, 0x0a29, 0x1280, 0x1ae7, 0x23d2, 0x2bb5, 0x331c, 0x3b7b, 0xa485, 0xace2, 0xb44b,
5916 +
            0xbc2c, 0x8519, 0x8d7e, 0x95d7, 0x9db0, 0xe7bd, 0xefda, 0xf773, 0xff14, 0xc621, 0xce46,
5917 +
            0xd6ef, 0xde88, 0x22f5, 0x2a92, 0x323b, 0x3a5c, 0x0369, 0x0b0e, 0x13a7, 0x1bc0, 0x61cd,
5918 +
            0x69aa, 0x7103, 0x7964, 0x4051, 0x4836, 0x509f, 0x58f8, 0xe16f, 0xe908, 0xf1a1, 0xf9c6,
5919 +
            0xc0f3, 0xc894, 0xd03d, 0xd85a, 0xa257, 0xaa30, 0xb299, 0xbafe, 0x83cb, 0x8bac, 0x9305,
5920 +
            0x9b62, 0x671f, 0x6f78, 0x77d1, 0x7fb6, 0x4683, 0x4ee4, 0x564d, 0x5e2a, 0x2427, 0x2c40,
5921 +
            0x34e9, 0x3c8e, 0x05bb, 0x0ddc, 0x1575, 0x1d12, 0x82ec, 0x8a8b, 0x9222, 0x9a45, 0xa370,
5922 +
            0xab17, 0xb3be, 0xbbd9, 0xc1d4, 0xc9b3, 0xd11a, 0xd97d, 0xe048, 0xe82f, 0xf086, 0xf8e1,
5923 +
            0x049c, 0x0cfb, 0x1452, 0x1c35, 0x2500, 0x2d67, 0x35ce, 0x3da9, 0x47a4, 0x4fc3, 0x576a,
5924 +
            0x5f0d, 0x6638, 0x6e5f, 0x76f6, 0x7e91, 0x2669, 0x2e0e, 0x36a7, 0x3ec0, 0x07f5, 0x0f92,
5925 +
            0x173b, 0x1f5c, 0x6551, 0x6d36, 0x759f, 0x7df8, 0x44cd, 0x4caa, 0x5403, 0x5c64, 0xa019,
5926 +
            0xa87e, 0xb0d7, 0xb8b0, 0x8185, 0x89e2, 0x914b, 0x992c, 0xe321, 0xeb46, 0xf3ef, 0xfb88,
5927 +
            0xc2bd, 0xcada, 0xd273, 0xda14, 0x45ea, 0x4d8d, 0x5524, 0x5d43, 0x6476, 0x6c11, 0x74b8,
5928 +
            0x7cdf, 0x06d2, 0x0eb5, 0x161c, 0x1e7b, 0x274e, 0x2f29, 0x3780, 0x3fe7, 0xc39a, 0xcbfd,
5929 +
            0xd354, 0xdb33, 0xe206, 0xea61, 0xf2c8, 0xfaaf, 0x80a2, 0x88c5, 0x906c, 0x980b, 0xa13e,
5930 +
            0xa959, 0xb1f0, 0xb997,
5931 +
        ],
5932 +
        [
5933 +
            0x0000, 0xadbd, 0x3419, 0x99a4, 0x6832, 0xc58f, 0x5c2b, 0xf196, 0xd064, 0x7dd9, 0xe47d,
5934 +
            0x49c0, 0xb856, 0x15eb, 0x8c4f, 0x21f2, 0xcfab, 0x6216, 0xfbb2, 0x560f, 0xa799, 0x0a24,
5935 +
            0x9380, 0x3e3d, 0x1fcf, 0xb272, 0x2bd6, 0x866b, 0x77fd, 0xda40, 0x43e4, 0xee59, 0xf035,
5936 +
            0x5d88, 0xc42c, 0x6991, 0x9807, 0x35ba, 0xac1e, 0x01a3, 0x2051, 0x8dec, 0x1448, 0xb9f5,
5937 +
            0x4863, 0xe5de, 0x7c7a, 0xd1c7, 0x3f9e, 0x9223, 0x0b87, 0xa63a, 0x57ac, 0xfa11, 0x63b5,
5938 +
            0xce08, 0xeffa, 0x4247, 0xdbe3, 0x765e, 0x87c8, 0x2a75, 0xb3d1, 0x1e6c, 0x8f09, 0x22b4,
5939 +
            0xbb10, 0x16ad, 0xe73b, 0x4a86, 0xd322, 0x7e9f, 0x5f6d, 0xf2d0, 0x6b74, 0xc6c9, 0x375f,
5940 +
            0x9ae2, 0x0346, 0xaefb, 0x40a2, 0xed1f, 0x74bb, 0xd906, 0x2890, 0x852d, 0x1c89, 0xb134,
5941 +
            0x90c6, 0x3d7b, 0xa4df, 0x0962, 0xf8f4, 0x5549, 0xcced, 0x6150, 0x7f3c, 0xd281, 0x4b25,
5942 +
            0xe698, 0x170e, 0xbab3, 0x2317, 0x8eaa, 0xaf58, 0x02e5, 0x9b41, 0x36fc, 0xc76a, 0x6ad7,
5943 +
            0xf373, 0x5ece, 0xb097, 0x1d2a, 0x848e, 0x2933, 0xd8a5, 0x7518, 0xecbc, 0x4101, 0x60f3,
5944 +
            0xcd4e, 0x54ea, 0xf957, 0x08c1, 0xa57c, 0x3cd8, 0x9165, 0x7171, 0xdccc, 0x4568, 0xe8d5,
5945 +
            0x1943, 0xb4fe, 0x2d5a, 0x80e7, 0xa115, 0x0ca8, 0x950c, 0x38b1, 0xc927, 0x649a, 0xfd3e,
5946 +
            0x5083, 0xbeda, 0x1367, 0x8ac3, 0x277e, 0xd6e8, 0x7b55, 0xe2f1, 0x4f4c, 0x6ebe, 0xc303,
5947 +
            0x5aa7, 0xf71a, 0x068c, 0xab31, 0x3295, 0x9f28, 0x8144, 0x2cf9, 0xb55d, 0x18e0, 0xe976,
5948 +
            0x44cb, 0xdd6f, 0x70d2, 0x5120, 0xfc9d, 0x6539, 0xc884, 0x3912, 0x94af, 0x0d0b, 0xa0b6,
5949 +
            0x4eef, 0xe352, 0x7af6, 0xd74b, 0x26dd, 0x8b60, 0x12c4, 0xbf79, 0x9e8b, 0x3336, 0xaa92,
5950 +
            0x072f, 0xf6b9, 0x5b04, 0xc2a0, 0x6f1d, 0xfe78, 0x53c5, 0xca61, 0x67dc, 0x964a, 0x3bf7,
5951 +
            0xa253, 0x0fee, 0x2e1c, 0x83a1, 0x1a05, 0xb7b8, 0x462e, 0xeb93, 0x7237, 0xdf8a, 0x31d3,
5952 +
            0x9c6e, 0x05ca, 0xa877, 0x59e1, 0xf45c, 0x6df8, 0xc045, 0xe1b7, 0x4c0a, 0xd5ae, 0x7813,
5953 +
            0x8985, 0x2438, 0xbd9c, 0x1021, 0x0e4d, 0xa3f0, 0x3a54, 0x97e9, 0x667f, 0xcbc2, 0x5266,
5954 +
            0xffdb, 0xde29, 0x7394, 0xea30, 0x478d, 0xb61b, 0x1ba6, 0x8202, 0x2fbf, 0xc1e6, 0x6c5b,
5955 +
            0xf5ff, 0x5842, 0xa9d4, 0x0469, 0x9dcd, 0x3070, 0x1182, 0xbc3f, 0x259b, 0x8826, 0x79b0,
5956 +
            0xd40d, 0x4da9, 0xe014,
5957 +
        ],
5958 +
        [
5959 +
            0x0000, 0xe2e2, 0xaaa7, 0x4845, 0x3a2d, 0xd8cf, 0x908a, 0x7268, 0x745a, 0x96b8, 0xdefd,
5960 +
            0x3c1f, 0x4e77, 0xac95, 0xe4d0, 0x0632, 0xe8b4, 0x0a56, 0x4213, 0xa0f1, 0xd299, 0x307b,
5961 +
            0x783e, 0x9adc, 0x9cee, 0x7e0c, 0x3649, 0xd4ab, 0xa6c3, 0x4421, 0x0c64, 0xee86, 0xbe0b,
5962 +
            0x5ce9, 0x14ac, 0xf64e, 0x8426, 0x66c4, 0x2e81, 0xcc63, 0xca51, 0x28b3, 0x60f6, 0x8214,
5963 +
            0xf07c, 0x129e, 0x5adb, 0xb839, 0x56bf, 0xb45d, 0xfc18, 0x1efa, 0x6c92, 0x8e70, 0xc635,
5964 +
            0x24d7, 0x22e5, 0xc007, 0x8842, 0x6aa0, 0x18c8, 0xfa2a, 0xb26f, 0x508d, 0x1375, 0xf197,
5965 +
            0xb9d2, 0x5b30, 0x2958, 0xcbba, 0x83ff, 0x611d, 0x672f, 0x85cd, 0xcd88, 0x2f6a, 0x5d02,
5966 +
            0xbfe0, 0xf7a5, 0x1547, 0xfbc1, 0x1923, 0x5166, 0xb384, 0xc1ec, 0x230e, 0x6b4b, 0x89a9,
5967 +
            0x8f9b, 0x6d79, 0x253c, 0xc7de, 0xb5b6, 0x5754, 0x1f11, 0xfdf3, 0xad7e, 0x4f9c, 0x07d9,
5968 +
            0xe53b, 0x9753, 0x75b1, 0x3df4, 0xdf16, 0xd924, 0x3bc6, 0x7383, 0x9161, 0xe309, 0x01eb,
5969 +
            0x49ae, 0xab4c, 0x45ca, 0xa728, 0xef6d, 0x0d8f, 0x7fe7, 0x9d05, 0xd540, 0x37a2, 0x3190,
5970 +
            0xd372, 0x9b37, 0x79d5, 0x0bbd, 0xe95f, 0xa11a, 0x43f8, 0x26ea, 0xc408, 0x8c4d, 0x6eaf,
5971 +
            0x1cc7, 0xfe25, 0xb660, 0x5482, 0x52b0, 0xb052, 0xf817, 0x1af5, 0x689d, 0x8a7f, 0xc23a,
5972 +
            0x20d8, 0xce5e, 0x2cbc, 0x64f9, 0x861b, 0xf473, 0x1691, 0x5ed4, 0xbc36, 0xba04, 0x58e6,
5973 +
            0x10a3, 0xf241, 0x8029, 0x62cb, 0x2a8e, 0xc86c, 0x98e1, 0x7a03, 0x3246, 0xd0a4, 0xa2cc,
5974 +
            0x402e, 0x086b, 0xea89, 0xecbb, 0x0e59, 0x461c, 0xa4fe, 0xd696, 0x3474, 0x7c31, 0x9ed3,
5975 +
            0x7055, 0x92b7, 0xdaf2, 0x3810, 0x4a78, 0xa89a, 0xe0df, 0x023d, 0x040f, 0xe6ed, 0xaea8,
5976 +
            0x4c4a, 0x3e22, 0xdcc0, 0x9485, 0x7667, 0x359f, 0xd77d, 0x9f38, 0x7dda, 0x0fb2, 0xed50,
5977 +
            0xa515, 0x47f7, 0x41c5, 0xa327, 0xeb62, 0x0980, 0x7be8, 0x990a, 0xd14f, 0x33ad, 0xdd2b,
5978 +
            0x3fc9, 0x778c, 0x956e, 0xe706, 0x05e4, 0x4da1, 0xaf43, 0xa971, 0x4b93, 0x03d6, 0xe134,
5979 +
            0x935c, 0x71be, 0x39fb, 0xdb19, 0x8b94, 0x6976, 0x2133, 0xc3d1, 0xb1b9, 0x535b, 0x1b1e,
5980 +
            0xf9fc, 0xffce, 0x1d2c, 0x5569, 0xb78b, 0xc5e3, 0x2701, 0x6f44, 0x8da6, 0x6320, 0x81c2,
5981 +
            0xc987, 0x2b65, 0x590d, 0xbbef, 0xf3aa, 0x1148, 0x177a, 0xf598, 0xbddd, 0x5f3f, 0x2d57,
5982 +
            0xcfb5, 0x87f0, 0x6512,
5983 +
        ],
5984 +
        [
5985 +
            0x0000, 0x4dd4, 0x9ba8, 0xd67c, 0x5833, 0x15e7, 0xc39b, 0x8e4f, 0xb066, 0xfdb2, 0x2bce,
5986 +
            0x661a, 0xe855, 0xa581, 0x73fd, 0x3e29, 0x0faf, 0x427b, 0x9407, 0xd9d3, 0x579c, 0x1a48,
5987 +
            0xcc34, 0x81e0, 0xbfc9, 0xf21d, 0x2461, 0x69b5, 0xe7fa, 0xaa2e, 0x7c52, 0x3186, 0x1f5e,
5988 +
            0x528a, 0x84f6, 0xc922, 0x476d, 0x0ab9, 0xdcc5, 0x9111, 0xaf38, 0xe2ec, 0x3490, 0x7944,
5989 +
            0xf70b, 0xbadf, 0x6ca3, 0x2177, 0x10f1, 0x5d25, 0x8b59, 0xc68d, 0x48c2, 0x0516, 0xd36a,
5990 +
            0x9ebe, 0xa097, 0xed43, 0x3b3f, 0x76eb, 0xf8a4, 0xb570, 0x630c, 0x2ed8, 0x3ebc, 0x7368,
5991 +
            0xa514, 0xe8c0, 0x668f, 0x2b5b, 0xfd27, 0xb0f3, 0x8eda, 0xc30e, 0x1572, 0x58a6, 0xd6e9,
5992 +
            0x9b3d, 0x4d41, 0x0095, 0x3113, 0x7cc7, 0xaabb, 0xe76f, 0x6920, 0x24f4, 0xf288, 0xbf5c,
5993 +
            0x8175, 0xcca1, 0x1add, 0x5709, 0xd946, 0x9492, 0x42ee, 0x0f3a, 0x21e2, 0x6c36, 0xba4a,
5994 +
            0xf79e, 0x79d1, 0x3405, 0xe279, 0xafad, 0x9184, 0xdc50, 0x0a2c, 0x47f8, 0xc9b7, 0x8463,
5995 +
            0x521f, 0x1fcb, 0x2e4d, 0x6399, 0xb5e5, 0xf831, 0x767e, 0x3baa, 0xedd6, 0xa002, 0x9e2b,
5996 +
            0xd3ff, 0x0583, 0x4857, 0xc618, 0x8bcc, 0x5db0, 0x1064, 0x7d78, 0x30ac, 0xe6d0, 0xab04,
5997 +
            0x254b, 0x689f, 0xbee3, 0xf337, 0xcd1e, 0x80ca, 0x56b6, 0x1b62, 0x952d, 0xd8f9, 0x0e85,
5998 +
            0x4351, 0x72d7, 0x3f03, 0xe97f, 0xa4ab, 0x2ae4, 0x6730, 0xb14c, 0xfc98, 0xc2b1, 0x8f65,
5999 +
            0x5919, 0x14cd, 0x9a82, 0xd756, 0x012a, 0x4cfe, 0x6226, 0x2ff2, 0xf98e, 0xb45a, 0x3a15,
6000 +
            0x77c1, 0xa1bd, 0xec69, 0xd240, 0x9f94, 0x49e8, 0x043c, 0x8a73, 0xc7a7, 0x11db, 0x5c0f,
6001 +
            0x6d89, 0x205d, 0xf621, 0xbbf5, 0x35ba, 0x786e, 0xae12, 0xe3c6, 0xddef, 0x903b, 0x4647,
6002 +
            0x0b93, 0x85dc, 0xc808, 0x1e74, 0x53a0, 0x43c4, 0x0e10, 0xd86c, 0x95b8, 0x1bf7, 0x5623,
6003 +
            0x805f, 0xcd8b, 0xf3a2, 0xbe76, 0x680a, 0x25de, 0xab91, 0xe645, 0x3039, 0x7ded, 0x4c6b,
6004 +
            0x01bf, 0xd7c3, 0x9a17, 0x1458, 0x598c, 0x8ff0, 0xc224, 0xfc0d, 0xb1d9, 0x67a5, 0x2a71,
6005 +
            0xa43e, 0xe9ea, 0x3f96, 0x7242, 0x5c9a, 0x114e, 0xc732, 0x8ae6, 0x04a9, 0x497d, 0x9f01,
6006 +
            0xd2d5, 0xecfc, 0xa128, 0x7754, 0x3a80, 0xb4cf, 0xf91b, 0x2f67, 0x62b3, 0x5335, 0x1ee1,
6007 +
            0xc89d, 0x8549, 0x0b06, 0x46d2, 0x90ae, 0xdd7a, 0xe353, 0xae87, 0x78fb, 0x352f, 0xbb60,
6008 +
            0xf6b4, 0x20c8, 0x6d1c,
6009 +
        ],
6010 +
        [
6011 +
            0x0000, 0xfaf0, 0x9a83, 0x6073, 0x5a65, 0xa095, 0xc0e6, 0x3a16, 0xb4ca, 0x4e3a, 0x2e49,
6012 +
            0xd4b9, 0xeeaf, 0x145f, 0x742c, 0x8edc, 0x06f7, 0xfc07, 0x9c74, 0x6684, 0x5c92, 0xa662,
6013 +
            0xc611, 0x3ce1, 0xb23d, 0x48cd, 0x28be, 0xd24e, 0xe858, 0x12a8, 0x72db, 0x882b, 0x0dee,
6014 +
            0xf71e, 0x976d, 0x6d9d, 0x578b, 0xad7b, 0xcd08, 0x37f8, 0xb924, 0x43d4, 0x23a7, 0xd957,
6015 +
            0xe341, 0x19b1, 0x79c2, 0x8332, 0x0b19, 0xf1e9, 0x919a, 0x6b6a, 0x517c, 0xab8c, 0xcbff,
6016 +
            0x310f, 0xbfd3, 0x4523, 0x2550, 0xdfa0, 0xe5b6, 0x1f46, 0x7f35, 0x85c5, 0x1bdc, 0xe12c,
6017 +
            0x815f, 0x7baf, 0x41b9, 0xbb49, 0xdb3a, 0x21ca, 0xaf16, 0x55e6, 0x3595, 0xcf65, 0xf573,
6018 +
            0x0f83, 0x6ff0, 0x9500, 0x1d2b, 0xe7db, 0x87a8, 0x7d58, 0x474e, 0xbdbe, 0xddcd, 0x273d,
6019 +
            0xa9e1, 0x5311, 0x3362, 0xc992, 0xf384, 0x0974, 0x6907, 0x93f7, 0x1632, 0xecc2, 0x8cb1,
6020 +
            0x7641, 0x4c57, 0xb6a7, 0xd6d4, 0x2c24, 0xa2f8, 0x5808, 0x387b, 0xc28b, 0xf89d, 0x026d,
6021 +
            0x621e, 0x98ee, 0x10c5, 0xea35, 0x8a46, 0x70b6, 0x4aa0, 0xb050, 0xd023, 0x2ad3, 0xa40f,
6022 +
            0x5eff, 0x3e8c, 0xc47c, 0xfe6a, 0x049a, 0x64e9, 0x9e19, 0x37b8, 0xcd48, 0xad3b, 0x57cb,
6023 +
            0x6ddd, 0x972d, 0xf75e, 0x0dae, 0x8372, 0x7982, 0x19f1, 0xe301, 0xd917, 0x23e7, 0x4394,
6024 +
            0xb964, 0x314f, 0xcbbf, 0xabcc, 0x513c, 0x6b2a, 0x91da, 0xf1a9, 0x0b59, 0x8585, 0x7f75,
6025 +
            0x1f06, 0xe5f6, 0xdfe0, 0x2510, 0x4563, 0xbf93, 0x3a56, 0xc0a6, 0xa0d5, 0x5a25, 0x6033,
6026 +
            0x9ac3, 0xfab0, 0x0040, 0x8e9c, 0x746c, 0x141f, 0xeeef, 0xd4f9, 0x2e09, 0x4e7a, 0xb48a,
6027 +
            0x3ca1, 0xc651, 0xa622, 0x5cd2, 0x66c4, 0x9c34, 0xfc47, 0x06b7, 0x886b, 0x729b, 0x12e8,
6028 +
            0xe818, 0xd20e, 0x28fe, 0x488d, 0xb27d, 0x2c64, 0xd694, 0xb6e7, 0x4c17, 0x7601, 0x8cf1,
6029 +
            0xec82, 0x1672, 0x98ae, 0x625e, 0x022d, 0xf8dd, 0xc2cb, 0x383b, 0x5848, 0xa2b8, 0x2a93,
6030 +
            0xd063, 0xb010, 0x4ae0, 0x70f6, 0x8a06, 0xea75, 0x1085, 0x9e59, 0x64a9, 0x04da, 0xfe2a,
6031 +
            0xc43c, 0x3ecc, 0x5ebf, 0xa44f, 0x218a, 0xdb7a, 0xbb09, 0x41f9, 0x7bef, 0x811f, 0xe16c,
6032 +
            0x1b9c, 0x9540, 0x6fb0, 0x0fc3, 0xf533, 0xcf25, 0x35d5, 0x55a6, 0xaf56, 0x277d, 0xdd8d,
6033 +
            0xbdfe, 0x470e, 0x7d18, 0x87e8, 0xe79b, 0x1d6b, 0x93b7, 0x6947, 0x0934, 0xf3c4, 0xc9d2,
6034 +
            0x3322, 0x5351, 0xa9a1,
6035 +
        ],
6036 +
        [
6037 +
            0x0000, 0x6f70, 0xdee0, 0xb190, 0xd2a3, 0xbdd3, 0x0c43, 0x6333, 0xca25, 0xa555, 0x14c5,
6038 +
            0x7bb5, 0x1886, 0x77f6, 0xc666, 0xa916, 0xfb29, 0x9459, 0x25c9, 0x4ab9, 0x298a, 0x46fa,
6039 +
            0xf76a, 0x981a, 0x310c, 0x5e7c, 0xefec, 0x809c, 0xe3af, 0x8cdf, 0x3d4f, 0x523f, 0x9931,
6040 +
            0xf641, 0x47d1, 0x28a1, 0x4b92, 0x24e2, 0x9572, 0xfa02, 0x5314, 0x3c64, 0x8df4, 0xe284,
6041 +
            0x81b7, 0xeec7, 0x5f57, 0x3027, 0x6218, 0x0d68, 0xbcf8, 0xd388, 0xb0bb, 0xdfcb, 0x6e5b,
6042 +
            0x012b, 0xa83d, 0xc74d, 0x76dd, 0x19ad, 0x7a9e, 0x15ee, 0xa47e, 0xcb0e, 0x5d01, 0x3271,
6043 +
            0x83e1, 0xec91, 0x8fa2, 0xe0d2, 0x5142, 0x3e32, 0x9724, 0xf854, 0x49c4, 0x26b4, 0x4587,
6044 +
            0x2af7, 0x9b67, 0xf417, 0xa628, 0xc958, 0x78c8, 0x17b8, 0x748b, 0x1bfb, 0xaa6b, 0xc51b,
6045 +
            0x6c0d, 0x037d, 0xb2ed, 0xdd9d, 0xbeae, 0xd1de, 0x604e, 0x0f3e, 0xc430, 0xab40, 0x1ad0,
6046 +
            0x75a0, 0x1693, 0x79e3, 0xc873, 0xa703, 0x0e15, 0x6165, 0xd0f5, 0xbf85, 0xdcb6, 0xb3c6,
6047 +
            0x0256, 0x6d26, 0x3f19, 0x5069, 0xe1f9, 0x8e89, 0xedba, 0x82ca, 0x335a, 0x5c2a, 0xf53c,
6048 +
            0x9a4c, 0x2bdc, 0x44ac, 0x279f, 0x48ef, 0xf97f, 0x960f, 0xba02, 0xd572, 0x64e2, 0x0b92,
6049 +
            0x68a1, 0x07d1, 0xb641, 0xd931, 0x7027, 0x1f57, 0xaec7, 0xc1b7, 0xa284, 0xcdf4, 0x7c64,
6050 +
            0x1314, 0x412b, 0x2e5b, 0x9fcb, 0xf0bb, 0x9388, 0xfcf8, 0x4d68, 0x2218, 0x8b0e, 0xe47e,
6051 +
            0x55ee, 0x3a9e, 0x59ad, 0x36dd, 0x874d, 0xe83d, 0x2333, 0x4c43, 0xfdd3, 0x92a3, 0xf190,
6052 +
            0x9ee0, 0x2f70, 0x4000, 0xe916, 0x8666, 0x37f6, 0x5886, 0x3bb5, 0x54c5, 0xe555, 0x8a25,
6053 +
            0xd81a, 0xb76a, 0x06fa, 0x698a, 0x0ab9, 0x65c9, 0xd459, 0xbb29, 0x123f, 0x7d4f, 0xccdf,
6054 +
            0xa3af, 0xc09c, 0xafec, 0x1e7c, 0x710c, 0xe703, 0x8873, 0x39e3, 0x5693, 0x35a0, 0x5ad0,
6055 +
            0xeb40, 0x8430, 0x2d26, 0x4256, 0xf3c6, 0x9cb6, 0xff85, 0x90f5, 0x2165, 0x4e15, 0x1c2a,
6056 +
            0x735a, 0xc2ca, 0xadba, 0xce89, 0xa1f9, 0x1069, 0x7f19, 0xd60f, 0xb97f, 0x08ef, 0x679f,
6057 +
            0x04ac, 0x6bdc, 0xda4c, 0xb53c, 0x7e32, 0x1142, 0xa0d2, 0xcfa2, 0xac91, 0xc3e1, 0x7271,
6058 +
            0x1d01, 0xb417, 0xdb67, 0x6af7, 0x0587, 0x66b4, 0x09c4, 0xb854, 0xd724, 0x851b, 0xea6b,
6059 +
            0x5bfb, 0x348b, 0x57b8, 0x38c8, 0x8958, 0xe628, 0x4f3e, 0x204e, 0x91de, 0xfeae, 0x9d9d,
6060 +
            0xf2ed, 0x437d, 0x2c0d,
6061 +
        ],
6062 +
        [
6063 +
            0x0000, 0x1b67, 0x36ce, 0x2da9, 0x6d9c, 0x76fb, 0x5b52, 0x4035, 0xdb38, 0xc05f, 0xedf6,
6064 +
            0xf691, 0xb6a4, 0xadc3, 0x806a, 0x9b0d, 0xd913, 0xc274, 0xefdd, 0xf4ba, 0xb48f, 0xafe8,
6065 +
            0x8241, 0x9926, 0x022b, 0x194c, 0x34e5, 0x2f82, 0x6fb7, 0x74d0, 0x5979, 0x421e, 0xdd45,
6066 +
            0xc622, 0xeb8b, 0xf0ec, 0xb0d9, 0xabbe, 0x8617, 0x9d70, 0x067d, 0x1d1a, 0x30b3, 0x2bd4,
6067 +
            0x6be1, 0x7086, 0x5d2f, 0x4648, 0x0456, 0x1f31, 0x3298, 0x29ff, 0x69ca, 0x72ad, 0x5f04,
6068 +
            0x4463, 0xdf6e, 0xc409, 0xe9a0, 0xf2c7, 0xb2f2, 0xa995, 0x843c, 0x9f5b, 0xd5e9, 0xce8e,
6069 +
            0xe327, 0xf840, 0xb875, 0xa312, 0x8ebb, 0x95dc, 0x0ed1, 0x15b6, 0x381f, 0x2378, 0x634d,
6070 +
            0x782a, 0x5583, 0x4ee4, 0x0cfa, 0x179d, 0x3a34, 0x2153, 0x6166, 0x7a01, 0x57a8, 0x4ccf,
6071 +
            0xd7c2, 0xcca5, 0xe10c, 0xfa6b, 0xba5e, 0xa139, 0x8c90, 0x97f7, 0x08ac, 0x13cb, 0x3e62,
6072 +
            0x2505, 0x6530, 0x7e57, 0x53fe, 0x4899, 0xd394, 0xc8f3, 0xe55a, 0xfe3d, 0xbe08, 0xa56f,
6073 +
            0x88c6, 0x93a1, 0xd1bf, 0xcad8, 0xe771, 0xfc16, 0xbc23, 0xa744, 0x8aed, 0x918a, 0x0a87,
6074 +
            0x11e0, 0x3c49, 0x272e, 0x671b, 0x7c7c, 0x51d5, 0x4ab2, 0xc4b1, 0xdfd6, 0xf27f, 0xe918,
6075 +
            0xa92d, 0xb24a, 0x9fe3, 0x8484, 0x1f89, 0x04ee, 0x2947, 0x3220, 0x7215, 0x6972, 0x44db,
6076 +
            0x5fbc, 0x1da2, 0x06c5, 0x2b6c, 0x300b, 0x703e, 0x6b59, 0x46f0, 0x5d97, 0xc69a, 0xddfd,
6077 +
            0xf054, 0xeb33, 0xab06, 0xb061, 0x9dc8, 0x86af, 0x19f4, 0x0293, 0x2f3a, 0x345d, 0x7468,
6078 +
            0x6f0f, 0x42a6, 0x59c1, 0xc2cc, 0xd9ab, 0xf402, 0xef65, 0xaf50, 0xb437, 0x999e, 0x82f9,
6079 +
            0xc0e7, 0xdb80, 0xf629, 0xed4e, 0xad7b, 0xb61c, 0x9bb5, 0x80d2, 0x1bdf, 0x00b8, 0x2d11,
6080 +
            0x3676, 0x7643, 0x6d24, 0x408d, 0x5bea, 0x1158, 0x0a3f, 0x2796, 0x3cf1, 0x7cc4, 0x67a3,
6081 +
            0x4a0a, 0x516d, 0xca60, 0xd107, 0xfcae, 0xe7c9, 0xa7fc, 0xbc9b, 0x9132, 0x8a55, 0xc84b,
6082 +
            0xd32c, 0xfe85, 0xe5e2, 0xa5d7, 0xbeb0, 0x9319, 0x887e, 0x1373, 0x0814, 0x25bd, 0x3eda,
6083 +
            0x7eef, 0x6588, 0x4821, 0x5346, 0xcc1d, 0xd77a, 0xfad3, 0xe1b4, 0xa181, 0xbae6, 0x974f,
6084 +
            0x8c28, 0x1725, 0x0c42, 0x21eb, 0x3a8c, 0x7ab9, 0x61de, 0x4c77, 0x5710, 0x150e, 0x0e69,
6085 +
            0x23c0, 0x38a7, 0x7892, 0x63f5, 0x4e5c, 0x553b, 0xce36, 0xd551, 0xf8f8, 0xe39f, 0xa3aa,
6086 +
            0xb8cd, 0x9564, 0x8e03,
6087 +
        ],
6088 +
        [
6089 +
            0x0000, 0xe601, 0xa361, 0x4560, 0x29a1, 0xcfa0, 0x8ac0, 0x6cc1, 0x5342, 0xb543, 0xf023,
6090 +
            0x1622, 0x7ae3, 0x9ce2, 0xd982, 0x3f83, 0xa684, 0x4085, 0x05e5, 0xe3e4, 0x8f25, 0x6924,
6091 +
            0x2c44, 0xca45, 0xf5c6, 0x13c7, 0x56a7, 0xb0a6, 0xdc67, 0x3a66, 0x7f06, 0x9907, 0x226b,
6092 +
            0xc46a, 0x810a, 0x670b, 0x0bca, 0xedcb, 0xa8ab, 0x4eaa, 0x7129, 0x9728, 0xd248, 0x3449,
6093 +
            0x5888, 0xbe89, 0xfbe9, 0x1de8, 0x84ef, 0x62ee, 0x278e, 0xc18f, 0xad4e, 0x4b4f, 0x0e2f,
6094 +
            0xe82e, 0xd7ad, 0x31ac, 0x74cc, 0x92cd, 0xfe0c, 0x180d, 0x5d6d, 0xbb6c, 0x44d6, 0xa2d7,
6095 +
            0xe7b7, 0x01b6, 0x6d77, 0x8b76, 0xce16, 0x2817, 0x1794, 0xf195, 0xb4f5, 0x52f4, 0x3e35,
6096 +
            0xd834, 0x9d54, 0x7b55, 0xe252, 0x0453, 0x4133, 0xa732, 0xcbf3, 0x2df2, 0x6892, 0x8e93,
6097 +
            0xb110, 0x5711, 0x1271, 0xf470, 0x98b1, 0x7eb0, 0x3bd0, 0xddd1, 0x66bd, 0x80bc, 0xc5dc,
6098 +
            0x23dd, 0x4f1c, 0xa91d, 0xec7d, 0x0a7c, 0x35ff, 0xd3fe, 0x969e, 0x709f, 0x1c5e, 0xfa5f,
6099 +
            0xbf3f, 0x593e, 0xc039, 0x2638, 0x6358, 0x8559, 0xe998, 0x0f99, 0x4af9, 0xacf8, 0x937b,
6100 +
            0x757a, 0x301a, 0xd61b, 0xbada, 0x5cdb, 0x19bb, 0xffba, 0x89ac, 0x6fad, 0x2acd, 0xcccc,
6101 +
            0xa00d, 0x460c, 0x036c, 0xe56d, 0xdaee, 0x3cef, 0x798f, 0x9f8e, 0xf34f, 0x154e, 0x502e,
6102 +
            0xb62f, 0x2f28, 0xc929, 0x8c49, 0x6a48, 0x0689, 0xe088, 0xa5e8, 0x43e9, 0x7c6a, 0x9a6b,
6103 +
            0xdf0b, 0x390a, 0x55cb, 0xb3ca, 0xf6aa, 0x10ab, 0xabc7, 0x4dc6, 0x08a6, 0xeea7, 0x8266,
6104 +
            0x6467, 0x2107, 0xc706, 0xf885, 0x1e84, 0x5be4, 0xbde5, 0xd124, 0x3725, 0x7245, 0x9444,
6105 +
            0x0d43, 0xeb42, 0xae22, 0x4823, 0x24e2, 0xc2e3, 0x8783, 0x6182, 0x5e01, 0xb800, 0xfd60,
6106 +
            0x1b61, 0x77a0, 0x91a1, 0xd4c1, 0x32c0, 0xcd7a, 0x2b7b, 0x6e1b, 0x881a, 0xe4db, 0x02da,
6107 +
            0x47ba, 0xa1bb, 0x9e38, 0x7839, 0x3d59, 0xdb58, 0xb799, 0x5198, 0x14f8, 0xf2f9, 0x6bfe,
6108 +
            0x8dff, 0xc89f, 0x2e9e, 0x425f, 0xa45e, 0xe13e, 0x073f, 0x38bc, 0xdebd, 0x9bdd, 0x7ddc,
6109 +
            0x111d, 0xf71c, 0xb27c, 0x547d, 0xef11, 0x0910, 0x4c70, 0xaa71, 0xc6b0, 0x20b1, 0x65d1,
6110 +
            0x83d0, 0xbc53, 0x5a52, 0x1f32, 0xf933, 0x95f2, 0x73f3, 0x3693, 0xd092, 0x4995, 0xaf94,
6111 +
            0xeaf4, 0x0cf5, 0x6034, 0x8635, 0xc355, 0x2554, 0x1ad7, 0xfcd6, 0xb9b6, 0x5fb7, 0x3376,
6112 +
            0xd577, 0x9017, 0x7616,
6113 +
        ],
6114 +
        [
6115 +
            0x0000, 0x7c3b, 0xf876, 0x844d, 0x9f8f, 0xe3b4, 0x67f9, 0x1bc2, 0x507d, 0x2c46, 0xa80b,
6116 +
            0xd430, 0xcff2, 0xb3c9, 0x3784, 0x4bbf, 0xa0fa, 0xdcc1, 0x588c, 0x24b7, 0x3f75, 0x434e,
6117 +
            0xc703, 0xbb38, 0xf087, 0x8cbc, 0x08f1, 0x74ca, 0x6f08, 0x1333, 0x977e, 0xeb45, 0x2e97,
6118 +
            0x52ac, 0xd6e1, 0xaada, 0xb118, 0xcd23, 0x496e, 0x3555, 0x7eea, 0x02d1, 0x869c, 0xfaa7,
6119 +
            0xe165, 0x9d5e, 0x1913, 0x6528, 0x8e6d, 0xf256, 0x761b, 0x0a20, 0x11e2, 0x6dd9, 0xe994,
6120 +
            0x95af, 0xde10, 0xa22b, 0x2666, 0x5a5d, 0x419f, 0x3da4, 0xb9e9, 0xc5d2, 0x5d2e, 0x2115,
6121 +
            0xa558, 0xd963, 0xc2a1, 0xbe9a, 0x3ad7, 0x46ec, 0x0d53, 0x7168, 0xf525, 0x891e, 0x92dc,
6122 +
            0xeee7, 0x6aaa, 0x1691, 0xfdd4, 0x81ef, 0x05a2, 0x7999, 0x625b, 0x1e60, 0x9a2d, 0xe616,
6123 +
            0xada9, 0xd192, 0x55df, 0x29e4, 0x3226, 0x4e1d, 0xca50, 0xb66b, 0x73b9, 0x0f82, 0x8bcf,
6124 +
            0xf7f4, 0xec36, 0x900d, 0x1440, 0x687b, 0x23c4, 0x5fff, 0xdbb2, 0xa789, 0xbc4b, 0xc070,
6125 +
            0x443d, 0x3806, 0xd343, 0xaf78, 0x2b35, 0x570e, 0x4ccc, 0x30f7, 0xb4ba, 0xc881, 0x833e,
6126 +
            0xff05, 0x7b48, 0x0773, 0x1cb1, 0x608a, 0xe4c7, 0x98fc, 0xba5c, 0xc667, 0x422a, 0x3e11,
6127 +
            0x25d3, 0x59e8, 0xdda5, 0xa19e, 0xea21, 0x961a, 0x1257, 0x6e6c, 0x75ae, 0x0995, 0x8dd8,
6128 +
            0xf1e3, 0x1aa6, 0x669d, 0xe2d0, 0x9eeb, 0x8529, 0xf912, 0x7d5f, 0x0164, 0x4adb, 0x36e0,
6129 +
            0xb2ad, 0xce96, 0xd554, 0xa96f, 0x2d22, 0x5119, 0x94cb, 0xe8f0, 0x6cbd, 0x1086, 0x0b44,
6130 +
            0x777f, 0xf332, 0x8f09, 0xc4b6, 0xb88d, 0x3cc0, 0x40fb, 0x5b39, 0x2702, 0xa34f, 0xdf74,
6131 +
            0x3431, 0x480a, 0xcc47, 0xb07c, 0xabbe, 0xd785, 0x53c8, 0x2ff3, 0x644c, 0x1877, 0x9c3a,
6132 +
            0xe001, 0xfbc3, 0x87f8, 0x03b5, 0x7f8e, 0xe772, 0x9b49, 0x1f04, 0x633f, 0x78fd, 0x04c6,
6133 +
            0x808b, 0xfcb0, 0xb70f, 0xcb34, 0x4f79, 0x3342, 0x2880, 0x54bb, 0xd0f6, 0xaccd, 0x4788,
6134 +
            0x3bb3, 0xbffe, 0xc3c5, 0xd807, 0xa43c, 0x2071, 0x5c4a, 0x17f5, 0x6bce, 0xef83, 0x93b8,
6135 +
            0x887a, 0xf441, 0x700c, 0x0c37, 0xc9e5, 0xb5de, 0x3193, 0x4da8, 0x566a, 0x2a51, 0xae1c,
6136 +
            0xd227, 0x9998, 0xe5a3, 0x61ee, 0x1dd5, 0x0617, 0x7a2c, 0xfe61, 0x825a, 0x691f, 0x1524,
6137 +
            0x9169, 0xed52, 0xf690, 0x8aab, 0x0ee6, 0x72dd, 0x3962, 0x4559, 0xc114, 0xbd2f, 0xa6ed,
6138 +
            0xdad6, 0x5e9b, 0x22a0,
6139 +
        ],
6140 +
        [
6141 +
            0x0000, 0x1bdb, 0x37b6, 0x2c6d, 0x6f6c, 0x74b7, 0x58da, 0x4301, 0xded8, 0xc503, 0xe96e,
6142 +
            0xf2b5, 0xb1b4, 0xaa6f, 0x8602, 0x9dd9, 0xd2d3, 0xc908, 0xe565, 0xfebe, 0xbdbf, 0xa664,
6143 +
            0x8a09, 0x91d2, 0x0c0b, 0x17d0, 0x3bbd, 0x2066, 0x6367, 0x78bc, 0x54d1, 0x4f0a, 0xcac5,
6144 +
            0xd11e, 0xfd73, 0xe6a8, 0xa5a9, 0xbe72, 0x921f, 0x89c4, 0x141d, 0x0fc6, 0x23ab, 0x3870,
6145 +
            0x7b71, 0x60aa, 0x4cc7, 0x571c, 0x1816, 0x03cd, 0x2fa0, 0x347b, 0x777a, 0x6ca1, 0x40cc,
6146 +
            0x5b17, 0xc6ce, 0xdd15, 0xf178, 0xeaa3, 0xa9a2, 0xb279, 0x9e14, 0x85cf, 0xfae9, 0xe132,
6147 +
            0xcd5f, 0xd684, 0x9585, 0x8e5e, 0xa233, 0xb9e8, 0x2431, 0x3fea, 0x1387, 0x085c, 0x4b5d,
6148 +
            0x5086, 0x7ceb, 0x6730, 0x283a, 0x33e1, 0x1f8c, 0x0457, 0x4756, 0x5c8d, 0x70e0, 0x6b3b,
6149 +
            0xf6e2, 0xed39, 0xc154, 0xda8f, 0x998e, 0x8255, 0xae38, 0xb5e3, 0x302c, 0x2bf7, 0x079a,
6150 +
            0x1c41, 0x5f40, 0x449b, 0x68f6, 0x732d, 0xeef4, 0xf52f, 0xd942, 0xc299, 0x8198, 0x9a43,
6151 +
            0xb62e, 0xadf5, 0xe2ff, 0xf924, 0xd549, 0xce92, 0x8d93, 0x9648, 0xba25, 0xa1fe, 0x3c27,
6152 +
            0x27fc, 0x0b91, 0x104a, 0x534b, 0x4890, 0x64fd, 0x7f26, 0x9ab1, 0x816a, 0xad07, 0xb6dc,
6153 +
            0xf5dd, 0xee06, 0xc26b, 0xd9b0, 0x4469, 0x5fb2, 0x73df, 0x6804, 0x2b05, 0x30de, 0x1cb3,
6154 +
            0x0768, 0x4862, 0x53b9, 0x7fd4, 0x640f, 0x270e, 0x3cd5, 0x10b8, 0x0b63, 0x96ba, 0x8d61,
6155 +
            0xa10c, 0xbad7, 0xf9d6, 0xe20d, 0xce60, 0xd5bb, 0x5074, 0x4baf, 0x67c2, 0x7c19, 0x3f18,
6156 +
            0x24c3, 0x08ae, 0x1375, 0x8eac, 0x9577, 0xb91a, 0xa2c1, 0xe1c0, 0xfa1b, 0xd676, 0xcdad,
6157 +
            0x82a7, 0x997c, 0xb511, 0xaeca, 0xedcb, 0xf610, 0xda7d, 0xc1a6, 0x5c7f, 0x47a4, 0x6bc9,
6158 +
            0x7012, 0x3313, 0x28c8, 0x04a5, 0x1f7e, 0x6058, 0x7b83, 0x57ee, 0x4c35, 0x0f34, 0x14ef,
6159 +
            0x3882, 0x2359, 0xbe80, 0xa55b, 0x8936, 0x92ed, 0xd1ec, 0xca37, 0xe65a, 0xfd81, 0xb28b,
6160 +
            0xa950, 0x853d, 0x9ee6, 0xdde7, 0xc63c, 0xea51, 0xf18a, 0x6c53, 0x7788, 0x5be5, 0x403e,
6161 +
            0x033f, 0x18e4, 0x3489, 0x2f52, 0xaa9d, 0xb146, 0x9d2b, 0x86f0, 0xc5f1, 0xde2a, 0xf247,
6162 +
            0xe99c, 0x7445, 0x6f9e, 0x43f3, 0x5828, 0x1b29, 0x00f2, 0x2c9f, 0x3744, 0x784e, 0x6395,
6163 +
            0x4ff8, 0x5423, 0x1722, 0x0cf9, 0x2094, 0x3b4f, 0xa696, 0xbd4d, 0x9120, 0x8afb, 0xc9fa,
6164 +
            0xd221, 0xfe4c, 0xe597,
6165 +
        ],
6166 +
        [
6167 +
            0x0000, 0x5a01, 0xb402, 0xee03, 0x0767, 0x5d66, 0xb365, 0xe964, 0x0ece, 0x54cf, 0xbacc,
6168 +
            0xe0cd, 0x09a9, 0x53a8, 0xbdab, 0xe7aa, 0x1d9c, 0x479d, 0xa99e, 0xf39f, 0x1afb, 0x40fa,
6169 +
            0xaef9, 0xf4f8, 0x1352, 0x4953, 0xa750, 0xfd51, 0x1435, 0x4e34, 0xa037, 0xfa36, 0x3b38,
6170 +
            0x6139, 0x8f3a, 0xd53b, 0x3c5f, 0x665e, 0x885d, 0xd25c, 0x35f6, 0x6ff7, 0x81f4, 0xdbf5,
6171 +
            0x3291, 0x6890, 0x8693, 0xdc92, 0x26a4, 0x7ca5, 0x92a6, 0xc8a7, 0x21c3, 0x7bc2, 0x95c1,
6172 +
            0xcfc0, 0x286a, 0x726b, 0x9c68, 0xc669, 0x2f0d, 0x750c, 0x9b0f, 0xc10e, 0x7670, 0x2c71,
6173 +
            0xc272, 0x9873, 0x7117, 0x2b16, 0xc515, 0x9f14, 0x78be, 0x22bf, 0xccbc, 0x96bd, 0x7fd9,
6174 +
            0x25d8, 0xcbdb, 0x91da, 0x6bec, 0x31ed, 0xdfee, 0x85ef, 0x6c8b, 0x368a, 0xd889, 0x8288,
6175 +
            0x6522, 0x3f23, 0xd120, 0x8b21, 0x6245, 0x3844, 0xd647, 0x8c46, 0x4d48, 0x1749, 0xf94a,
6176 +
            0xa34b, 0x4a2f, 0x102e, 0xfe2d, 0xa42c, 0x4386, 0x1987, 0xf784, 0xad85, 0x44e1, 0x1ee0,
6177 +
            0xf0e3, 0xaae2, 0x50d4, 0x0ad5, 0xe4d6, 0xbed7, 0x57b3, 0x0db2, 0xe3b1, 0xb9b0, 0x5e1a,
6178 +
            0x041b, 0xea18, 0xb019, 0x597d, 0x037c, 0xed7f, 0xb77e, 0xece0, 0xb6e1, 0x58e2, 0x02e3,
6179 +
            0xeb87, 0xb186, 0x5f85, 0x0584, 0xe22e, 0xb82f, 0x562c, 0x0c2d, 0xe549, 0xbf48, 0x514b,
6180 +
            0x0b4a, 0xf17c, 0xab7d, 0x457e, 0x1f7f, 0xf61b, 0xac1a, 0x4219, 0x1818, 0xffb2, 0xa5b3,
6181 +
            0x4bb0, 0x11b1, 0xf8d5, 0xa2d4, 0x4cd7, 0x16d6, 0xd7d8, 0x8dd9, 0x63da, 0x39db, 0xd0bf,
6182 +
            0x8abe, 0x64bd, 0x3ebc, 0xd916, 0x8317, 0x6d14, 0x3715, 0xde71, 0x8470, 0x6a73, 0x3072,
6183 +
            0xca44, 0x9045, 0x7e46, 0x2447, 0xcd23, 0x9722, 0x7921, 0x2320, 0xc48a, 0x9e8b, 0x7088,
6184 +
            0x2a89, 0xc3ed, 0x99ec, 0x77ef, 0x2dee, 0x9a90, 0xc091, 0x2e92, 0x7493, 0x9df7, 0xc7f6,
6185 +
            0x29f5, 0x73f4, 0x945e, 0xce5f, 0x205c, 0x7a5d, 0x9339, 0xc938, 0x273b, 0x7d3a, 0x870c,
6186 +
            0xdd0d, 0x330e, 0x690f, 0x806b, 0xda6a, 0x3469, 0x6e68, 0x89c2, 0xd3c3, 0x3dc0, 0x67c1,
6187 +
            0x8ea5, 0xd4a4, 0x3aa7, 0x60a6, 0xa1a8, 0xfba9, 0x15aa, 0x4fab, 0xa6cf, 0xfcce, 0x12cd,
6188 +
            0x48cc, 0xaf66, 0xf567, 0x1b64, 0x4165, 0xa801, 0xf200, 0x1c03, 0x4602, 0xbc34, 0xe635,
6189 +
            0x0836, 0x5237, 0xbb53, 0xe152, 0x0f51, 0x5550, 0xb2fa, 0xe8fb, 0x06f8, 0x5cf9, 0xb59d,
6190 +
            0xef9c, 0x019f, 0x5b9e,
6191 +
        ],
6192 +
        [
6193 +
            0x0000, 0xb6a3, 0x0225, 0xb486, 0x044a, 0xb2e9, 0x066f, 0xb0cc, 0x0894, 0xbe37, 0x0ab1,
6194 +
            0xbc12, 0x0cde, 0xba7d, 0x0efb, 0xb858, 0x1128, 0xa78b, 0x130d, 0xa5ae, 0x1562, 0xa3c1,
6195 +
            0x1747, 0xa1e4, 0x19bc, 0xaf1f, 0x1b99, 0xad3a, 0x1df6, 0xab55, 0x1fd3, 0xa970, 0x2250,
6196 +
            0x94f3, 0x2075, 0x96d6, 0x261a, 0x90b9, 0x243f, 0x929c, 0x2ac4, 0x9c67, 0x28e1, 0x9e42,
6197 +
            0x2e8e, 0x982d, 0x2cab, 0x9a08, 0x3378, 0x85db, 0x315d, 0x87fe, 0x3732, 0x8191, 0x3517,
6198 +
            0x83b4, 0x3bec, 0x8d4f, 0x39c9, 0x8f6a, 0x3fa6, 0x8905, 0x3d83, 0x8b20, 0x44a0, 0xf203,
6199 +
            0x4685, 0xf026, 0x40ea, 0xf649, 0x42cf, 0xf46c, 0x4c34, 0xfa97, 0x4e11, 0xf8b2, 0x487e,
6200 +
            0xfedd, 0x4a5b, 0xfcf8, 0x5588, 0xe32b, 0x57ad, 0xe10e, 0x51c2, 0xe761, 0x53e7, 0xe544,
6201 +
            0x5d1c, 0xebbf, 0x5f39, 0xe99a, 0x5956, 0xeff5, 0x5b73, 0xedd0, 0x66f0, 0xd053, 0x64d5,
6202 +
            0xd276, 0x62ba, 0xd419, 0x609f, 0xd63c, 0x6e64, 0xd8c7, 0x6c41, 0xdae2, 0x6a2e, 0xdc8d,
6203 +
            0x680b, 0xdea8, 0x77d8, 0xc17b, 0x75fd, 0xc35e, 0x7392, 0xc531, 0x71b7, 0xc714, 0x7f4c,
6204 +
            0xc9ef, 0x7d69, 0xcbca, 0x7b06, 0xcda5, 0x7923, 0xcf80, 0x8940, 0x3fe3, 0x8b65, 0x3dc6,
6205 +
            0x8d0a, 0x3ba9, 0x8f2f, 0x398c, 0x81d4, 0x3777, 0x83f1, 0x3552, 0x859e, 0x333d, 0x87bb,
6206 +
            0x3118, 0x9868, 0x2ecb, 0x9a4d, 0x2cee, 0x9c22, 0x2a81, 0x9e07, 0x28a4, 0x90fc, 0x265f,
6207 +
            0x92d9, 0x247a, 0x94b6, 0x2215, 0x9693, 0x2030, 0xab10, 0x1db3, 0xa935, 0x1f96, 0xaf5a,
6208 +
            0x19f9, 0xad7f, 0x1bdc, 0xa384, 0x1527, 0xa1a1, 0x1702, 0xa7ce, 0x116d, 0xa5eb, 0x1348,
6209 +
            0xba38, 0x0c9b, 0xb81d, 0x0ebe, 0xbe72, 0x08d1, 0xbc57, 0x0af4, 0xb2ac, 0x040f, 0xb089,
6210 +
            0x062a, 0xb6e6, 0x0045, 0xb4c3, 0x0260, 0xcde0, 0x7b43, 0xcfc5, 0x7966, 0xc9aa, 0x7f09,
6211 +
            0xcb8f, 0x7d2c, 0xc574, 0x73d7, 0xc751, 0x71f2, 0xc13e, 0x779d, 0xc31b, 0x75b8, 0xdcc8,
6212 +
            0x6a6b, 0xdeed, 0x684e, 0xd882, 0x6e21, 0xdaa7, 0x6c04, 0xd45c, 0x62ff, 0xd679, 0x60da,
6213 +
            0xd016, 0x66b5, 0xd233, 0x6490, 0xefb0, 0x5913, 0xed95, 0x5b36, 0xebfa, 0x5d59, 0xe9df,
6214 +
            0x5f7c, 0xe724, 0x5187, 0xe501, 0x53a2, 0xe36e, 0x55cd, 0xe14b, 0x57e8, 0xfe98, 0x483b,
6215 +
            0xfcbd, 0x4a1e, 0xfad2, 0x4c71, 0xf8f7, 0x4e54, 0xf60c, 0x40af, 0xf429, 0x428a, 0xf246,
6216 +
            0x44e5, 0xf063, 0x46c0,
6217 +
        ],
6218 +
        [
6219 +
            0x0000, 0x7de3, 0xfbc6, 0x8625, 0x98ef, 0xe50c, 0x6329, 0x1eca, 0x5ebd, 0x235e, 0xa57b,
6220 +
            0xd898, 0xc652, 0xbbb1, 0x3d94, 0x4077, 0xbd7a, 0xc099, 0x46bc, 0x3b5f, 0x2595, 0x5876,
6221 +
            0xde53, 0xa3b0, 0xe3c7, 0x9e24, 0x1801, 0x65e2, 0x7b28, 0x06cb, 0x80ee, 0xfd0d, 0x1597,
6222 +
            0x6874, 0xee51, 0x93b2, 0x8d78, 0xf09b, 0x76be, 0x0b5d, 0x4b2a, 0x36c9, 0xb0ec, 0xcd0f,
6223 +
            0xd3c5, 0xae26, 0x2803, 0x55e0, 0xa8ed, 0xd50e, 0x532b, 0x2ec8, 0x3002, 0x4de1, 0xcbc4,
6224 +
            0xb627, 0xf650, 0x8bb3, 0x0d96, 0x7075, 0x6ebf, 0x135c, 0x9579, 0xe89a, 0x2b2e, 0x56cd,
6225 +
            0xd0e8, 0xad0b, 0xb3c1, 0xce22, 0x4807, 0x35e4, 0x7593, 0x0870, 0x8e55, 0xf3b6, 0xed7c,
6226 +
            0x909f, 0x16ba, 0x6b59, 0x9654, 0xebb7, 0x6d92, 0x1071, 0x0ebb, 0x7358, 0xf57d, 0x889e,
6227 +
            0xc8e9, 0xb50a, 0x332f, 0x4ecc, 0x5006, 0x2de5, 0xabc0, 0xd623, 0x3eb9, 0x435a, 0xc57f,
6228 +
            0xb89c, 0xa656, 0xdbb5, 0x5d90, 0x2073, 0x6004, 0x1de7, 0x9bc2, 0xe621, 0xf8eb, 0x8508,
6229 +
            0x032d, 0x7ece, 0x83c3, 0xfe20, 0x7805, 0x05e6, 0x1b2c, 0x66cf, 0xe0ea, 0x9d09, 0xdd7e,
6230 +
            0xa09d, 0x26b8, 0x5b5b, 0x4591, 0x3872, 0xbe57, 0xc3b4, 0x565c, 0x2bbf, 0xad9a, 0xd079,
6231 +
            0xceb3, 0xb350, 0x3575, 0x4896, 0x08e1, 0x7502, 0xf327, 0x8ec4, 0x900e, 0xeded, 0x6bc8,
6232 +
            0x162b, 0xeb26, 0x96c5, 0x10e0, 0x6d03, 0x73c9, 0x0e2a, 0x880f, 0xf5ec, 0xb59b, 0xc878,
6233 +
            0x4e5d, 0x33be, 0x2d74, 0x5097, 0xd6b2, 0xab51, 0x43cb, 0x3e28, 0xb80d, 0xc5ee, 0xdb24,
6234 +
            0xa6c7, 0x20e2, 0x5d01, 0x1d76, 0x6095, 0xe6b0, 0x9b53, 0x8599, 0xf87a, 0x7e5f, 0x03bc,
6235 +
            0xfeb1, 0x8352, 0x0577, 0x7894, 0x665e, 0x1bbd, 0x9d98, 0xe07b, 0xa00c, 0xddef, 0x5bca,
6236 +
            0x2629, 0x38e3, 0x4500, 0xc325, 0xbec6, 0x7d72, 0x0091, 0x86b4, 0xfb57, 0xe59d, 0x987e,
6237 +
            0x1e5b, 0x63b8, 0x23cf, 0x5e2c, 0xd809, 0xa5ea, 0xbb20, 0xc6c3, 0x40e6, 0x3d05, 0xc008,
6238 +
            0xbdeb, 0x3bce, 0x462d, 0x58e7, 0x2504, 0xa321, 0xdec2, 0x9eb5, 0xe356, 0x6573, 0x1890,
6239 +
            0x065a, 0x7bb9, 0xfd9c, 0x807f, 0x68e5, 0x1506, 0x9323, 0xeec0, 0xf00a, 0x8de9, 0x0bcc,
6240 +
            0x762f, 0x3658, 0x4bbb, 0xcd9e, 0xb07d, 0xaeb7, 0xd354, 0x5571, 0x2892, 0xd59f, 0xa87c,
6241 +
            0x2e59, 0x53ba, 0x4d70, 0x3093, 0xb6b6, 0xcb55, 0x8b22, 0xf6c1, 0x70e4, 0x0d07, 0x13cd,
6242 +
            0x6e2e, 0xe80b, 0x95e8,
6243 +
        ],
6244 +
        [
6245 +
            0x0000, 0xacb8, 0x3613, 0x9aab, 0x6c26, 0xc09e, 0x5a35, 0xf68d, 0xd84c, 0x74f4, 0xee5f,
6246 +
            0x42e7, 0xb46a, 0x18d2, 0x8279, 0x2ec1, 0xdffb, 0x7343, 0xe9e8, 0x4550, 0xb3dd, 0x1f65,
6247 +
            0x85ce, 0x2976, 0x07b7, 0xab0f, 0x31a4, 0x9d1c, 0x6b91, 0xc729, 0x5d82, 0xf13a, 0xd095,
6248 +
            0x7c2d, 0xe686, 0x4a3e, 0xbcb3, 0x100b, 0x8aa0, 0x2618, 0x08d9, 0xa461, 0x3eca, 0x9272,
6249 +
            0x64ff, 0xc847, 0x52ec, 0xfe54, 0x0f6e, 0xa3d6, 0x397d, 0x95c5, 0x6348, 0xcff0, 0x555b,
6250 +
            0xf9e3, 0xd722, 0x7b9a, 0xe131, 0x4d89, 0xbb04, 0x17bc, 0x8d17, 0x21af, 0xce49, 0x62f1,
6251 +
            0xf85a, 0x54e2, 0xa26f, 0x0ed7, 0x947c, 0x38c4, 0x1605, 0xbabd, 0x2016, 0x8cae, 0x7a23,
6252 +
            0xd69b, 0x4c30, 0xe088, 0x11b2, 0xbd0a, 0x27a1, 0x8b19, 0x7d94, 0xd12c, 0x4b87, 0xe73f,
6253 +
            0xc9fe, 0x6546, 0xffed, 0x5355, 0xa5d8, 0x0960, 0x93cb, 0x3f73, 0x1edc, 0xb264, 0x28cf,
6254 +
            0x8477, 0x72fa, 0xde42, 0x44e9, 0xe851, 0xc690, 0x6a28, 0xf083, 0x5c3b, 0xaab6, 0x060e,
6255 +
            0x9ca5, 0x301d, 0xc127, 0x6d9f, 0xf734, 0x5b8c, 0xad01, 0x01b9, 0x9b12, 0x37aa, 0x196b,
6256 +
            0xb5d3, 0x2f78, 0x83c0, 0x754d, 0xd9f5, 0x435e, 0xefe6, 0xf3f1, 0x5f49, 0xc5e2, 0x695a,
6257 +
            0x9fd7, 0x336f, 0xa9c4, 0x057c, 0x2bbd, 0x8705, 0x1dae, 0xb116, 0x479b, 0xeb23, 0x7188,
6258 +
            0xdd30, 0x2c0a, 0x80b2, 0x1a19, 0xb6a1, 0x402c, 0xec94, 0x763f, 0xda87, 0xf446, 0x58fe,
6259 +
            0xc255, 0x6eed, 0x9860, 0x34d8, 0xae73, 0x02cb, 0x2364, 0x8fdc, 0x1577, 0xb9cf, 0x4f42,
6260 +
            0xe3fa, 0x7951, 0xd5e9, 0xfb28, 0x5790, 0xcd3b, 0x6183, 0x970e, 0x3bb6, 0xa11d, 0x0da5,
6261 +
            0xfc9f, 0x5027, 0xca8c, 0x6634, 0x90b9, 0x3c01, 0xa6aa, 0x0a12, 0x24d3, 0x886b, 0x12c0,
6262 +
            0xbe78, 0x48f5, 0xe44d, 0x7ee6, 0xd25e, 0x3db8, 0x9100, 0x0bab, 0xa713, 0x519e, 0xfd26,
6263 +
            0x678d, 0xcb35, 0xe5f4, 0x494c, 0xd3e7, 0x7f5f, 0x89d2, 0x256a, 0xbfc1, 0x1379, 0xe243,
6264 +
            0x4efb, 0xd450, 0x78e8, 0x8e65, 0x22dd, 0xb876, 0x14ce, 0x3a0f, 0x96b7, 0x0c1c, 0xa0a4,
6265 +
            0x5629, 0xfa91, 0x603a, 0xcc82, 0xed2d, 0x4195, 0xdb3e, 0x7786, 0x810b, 0x2db3, 0xb718,
6266 +
            0x1ba0, 0x3561, 0x99d9, 0x0372, 0xafca, 0x5947, 0xf5ff, 0x6f54, 0xc3ec, 0x32d6, 0x9e6e,
6267 +
            0x04c5, 0xa87d, 0x5ef0, 0xf248, 0x68e3, 0xc45b, 0xea9a, 0x4622, 0xdc89, 0x7031, 0x86bc,
6268 +
            0x2a04, 0xb0af, 0x1c17,
6269 +
        ],
6270 +
        [
6271 +
            0x0000, 0x8881, 0x7e61, 0xf6e0, 0xfcc2, 0x7443, 0x82a3, 0x0a22, 0x96e7, 0x1e66, 0xe886,
6272 +
            0x6007, 0x6a25, 0xe2a4, 0x1444, 0x9cc5, 0x42ad, 0xca2c, 0x3ccc, 0xb44d, 0xbe6f, 0x36ee,
6273 +
            0xc00e, 0x488f, 0xd44a, 0x5ccb, 0xaa2b, 0x22aa, 0x2888, 0xa009, 0x56e9, 0xde68, 0x855a,
6274 +
            0x0ddb, 0xfb3b, 0x73ba, 0x7998, 0xf119, 0x07f9, 0x8f78, 0x13bd, 0x9b3c, 0x6ddc, 0xe55d,
6275 +
            0xef7f, 0x67fe, 0x911e, 0x199f, 0xc7f7, 0x4f76, 0xb996, 0x3117, 0x3b35, 0xb3b4, 0x4554,
6276 +
            0xcdd5, 0x5110, 0xd991, 0x2f71, 0xa7f0, 0xadd2, 0x2553, 0xd3b3, 0x5b32, 0x65d7, 0xed56,
6277 +
            0x1bb6, 0x9337, 0x9915, 0x1194, 0xe774, 0x6ff5, 0xf330, 0x7bb1, 0x8d51, 0x05d0, 0x0ff2,
6278 +
            0x8773, 0x7193, 0xf912, 0x277a, 0xaffb, 0x591b, 0xd19a, 0xdbb8, 0x5339, 0xa5d9, 0x2d58,
6279 +
            0xb19d, 0x391c, 0xcffc, 0x477d, 0x4d5f, 0xc5de, 0x333e, 0xbbbf, 0xe08d, 0x680c, 0x9eec,
6280 +
            0x166d, 0x1c4f, 0x94ce, 0x622e, 0xeaaf, 0x766a, 0xfeeb, 0x080b, 0x808a, 0x8aa8, 0x0229,
6281 +
            0xf4c9, 0x7c48, 0xa220, 0x2aa1, 0xdc41, 0x54c0, 0x5ee2, 0xd663, 0x2083, 0xa802, 0x34c7,
6282 +
            0xbc46, 0x4aa6, 0xc227, 0xc805, 0x4084, 0xb664, 0x3ee5, 0xcbae, 0x432f, 0xb5cf, 0x3d4e,
6283 +
            0x376c, 0xbfed, 0x490d, 0xc18c, 0x5d49, 0xd5c8, 0x2328, 0xaba9, 0xa18b, 0x290a, 0xdfea,
6284 +
            0x576b, 0x8903, 0x0182, 0xf762, 0x7fe3, 0x75c1, 0xfd40, 0x0ba0, 0x8321, 0x1fe4, 0x9765,
6285 +
            0x6185, 0xe904, 0xe326, 0x6ba7, 0x9d47, 0x15c6, 0x4ef4, 0xc675, 0x3095, 0xb814, 0xb236,
6286 +
            0x3ab7, 0xcc57, 0x44d6, 0xd813, 0x5092, 0xa672, 0x2ef3, 0x24d1, 0xac50, 0x5ab0, 0xd231,
6287 +
            0x0c59, 0x84d8, 0x7238, 0xfab9, 0xf09b, 0x781a, 0x8efa, 0x067b, 0x9abe, 0x123f, 0xe4df,
6288 +
            0x6c5e, 0x667c, 0xeefd, 0x181d, 0x909c, 0xae79, 0x26f8, 0xd018, 0x5899, 0x52bb, 0xda3a,
6289 +
            0x2cda, 0xa45b, 0x389e, 0xb01f, 0x46ff, 0xce7e, 0xc45c, 0x4cdd, 0xba3d, 0x32bc, 0xecd4,
6290 +
            0x6455, 0x92b5, 0x1a34, 0x1016, 0x9897, 0x6e77, 0xe6f6, 0x7a33, 0xf2b2, 0x0452, 0x8cd3,
6291 +
            0x86f1, 0x0e70, 0xf890, 0x7011, 0x2b23, 0xa3a2, 0x5542, 0xddc3, 0xd7e1, 0x5f60, 0xa980,
6292 +
            0x2101, 0xbdc4, 0x3545, 0xc3a5, 0x4b24, 0x4106, 0xc987, 0x3f67, 0xb7e6, 0x698e, 0xe10f,
6293 +
            0x17ef, 0x9f6e, 0x954c, 0x1dcd, 0xeb2d, 0x63ac, 0xff69, 0x77e8, 0x8108, 0x0989, 0x03ab,
6294 +
            0x8b2a, 0x7dca, 0xf54b,
6295 +
        ],
6296 +
    ];
6297 +
6298 +
    pub static CRC16_M17_TABLE: [[u16; 256]; 16] = [
6299 +
        [
6300 +
            0x0000, 0x5935, 0xb26a, 0xeb5f, 0x3de1, 0x64d4, 0x8f8b, 0xd6be, 0x7bc2, 0x22f7, 0xc9a8,
6301 +
            0x909d, 0x4623, 0x1f16, 0xf449, 0xad7c, 0xf784, 0xaeb1, 0x45ee, 0x1cdb, 0xca65, 0x9350,
6302 +
            0x780f, 0x213a, 0x8c46, 0xd573, 0x3e2c, 0x6719, 0xb1a7, 0xe892, 0x03cd, 0x5af8, 0xb63d,
6303 +
            0xef08, 0x0457, 0x5d62, 0x8bdc, 0xd2e9, 0x39b6, 0x6083, 0xcdff, 0x94ca, 0x7f95, 0x26a0,
6304 +
            0xf01e, 0xa92b, 0x4274, 0x1b41, 0x41b9, 0x188c, 0xf3d3, 0xaae6, 0x7c58, 0x256d, 0xce32,
6305 +
            0x9707, 0x3a7b, 0x634e, 0x8811, 0xd124, 0x079a, 0x5eaf, 0xb5f0, 0xecc5, 0x354f, 0x6c7a,
6306 +
            0x8725, 0xde10, 0x08ae, 0x519b, 0xbac4, 0xe3f1, 0x4e8d, 0x17b8, 0xfce7, 0xa5d2, 0x736c,
6307 +
            0x2a59, 0xc106, 0x9833, 0xc2cb, 0x9bfe, 0x70a1, 0x2994, 0xff2a, 0xa61f, 0x4d40, 0x1475,
6308 +
            0xb909, 0xe03c, 0x0b63, 0x5256, 0x84e8, 0xdddd, 0x3682, 0x6fb7, 0x8372, 0xda47, 0x3118,
6309 +
            0x682d, 0xbe93, 0xe7a6, 0x0cf9, 0x55cc, 0xf8b0, 0xa185, 0x4ada, 0x13ef, 0xc551, 0x9c64,
6310 +
            0x773b, 0x2e0e, 0x74f6, 0x2dc3, 0xc69c, 0x9fa9, 0x4917, 0x1022, 0xfb7d, 0xa248, 0x0f34,
6311 +
            0x5601, 0xbd5e, 0xe46b, 0x32d5, 0x6be0, 0x80bf, 0xd98a, 0x6a9e, 0x33ab, 0xd8f4, 0x81c1,
6312 +
            0x577f, 0x0e4a, 0xe515, 0xbc20, 0x115c, 0x4869, 0xa336, 0xfa03, 0x2cbd, 0x7588, 0x9ed7,
6313 +
            0xc7e2, 0x9d1a, 0xc42f, 0x2f70, 0x7645, 0xa0fb, 0xf9ce, 0x1291, 0x4ba4, 0xe6d8, 0xbfed,
6314 +
            0x54b2, 0x0d87, 0xdb39, 0x820c, 0x6953, 0x3066, 0xdca3, 0x8596, 0x6ec9, 0x37fc, 0xe142,
6315 +
            0xb877, 0x5328, 0x0a1d, 0xa761, 0xfe54, 0x150b, 0x4c3e, 0x9a80, 0xc3b5, 0x28ea, 0x71df,
6316 +
            0x2b27, 0x7212, 0x994d, 0xc078, 0x16c6, 0x4ff3, 0xa4ac, 0xfd99, 0x50e5, 0x09d0, 0xe28f,
6317 +
            0xbbba, 0x6d04, 0x3431, 0xdf6e, 0x865b, 0x5fd1, 0x06e4, 0xedbb, 0xb48e, 0x6230, 0x3b05,
6318 +
            0xd05a, 0x896f, 0x2413, 0x7d26, 0x9679, 0xcf4c, 0x19f2, 0x40c7, 0xab98, 0xf2ad, 0xa855,
6319 +
            0xf160, 0x1a3f, 0x430a, 0x95b4, 0xcc81, 0x27de, 0x7eeb, 0xd397, 0x8aa2, 0x61fd, 0x38c8,
6320 +
            0xee76, 0xb743, 0x5c1c, 0x0529, 0xe9ec, 0xb0d9, 0x5b86, 0x02b3, 0xd40d, 0x8d38, 0x6667,
6321 +
            0x3f52, 0x922e, 0xcb1b, 0x2044, 0x7971, 0xafcf, 0xf6fa, 0x1da5, 0x4490, 0x1e68, 0x475d,
6322 +
            0xac02, 0xf537, 0x2389, 0x7abc, 0x91e3, 0xc8d6, 0x65aa, 0x3c9f, 0xd7c0, 0x8ef5, 0x584b,
6323 +
            0x017e, 0xea21, 0xb314,
6324 +
        ],
6325 +
        [
6326 +
            0x0000, 0xd53c, 0xf34d, 0x2671, 0xbfaf, 0x6a93, 0x4ce2, 0x99de, 0x266b, 0xf357, 0xd526,
6327 +
            0x001a, 0x99c4, 0x4cf8, 0x6a89, 0xbfb5, 0x4cd6, 0x99ea, 0xbf9b, 0x6aa7, 0xf379, 0x2645,
6328 +
            0x0034, 0xd508, 0x6abd, 0xbf81, 0x99f0, 0x4ccc, 0xd512, 0x002e, 0x265f, 0xf363, 0x99ac,
6329 +
            0x4c90, 0x6ae1, 0xbfdd, 0x2603, 0xf33f, 0xd54e, 0x0072, 0xbfc7, 0x6afb, 0x4c8a, 0x99b6,
6330 +
            0x0068, 0xd554, 0xf325, 0x2619, 0xd57a, 0x0046, 0x2637, 0xf30b, 0x6ad5, 0xbfe9, 0x9998,
6331 +
            0x4ca4, 0xf311, 0x262d, 0x005c, 0xd560, 0x4cbe, 0x9982, 0xbff3, 0x6acf, 0x6a6d, 0xbf51,
6332 +
            0x9920, 0x4c1c, 0xd5c2, 0x00fe, 0x268f, 0xf3b3, 0x4c06, 0x993a, 0xbf4b, 0x6a77, 0xf3a9,
6333 +
            0x2695, 0x00e4, 0xd5d8, 0x26bb, 0xf387, 0xd5f6, 0x00ca, 0x9914, 0x4c28, 0x6a59, 0xbf65,
6334 +
            0x00d0, 0xd5ec, 0xf39d, 0x26a1, 0xbf7f, 0x6a43, 0x4c32, 0x990e, 0xf3c1, 0x26fd, 0x008c,
6335 +
            0xd5b0, 0x4c6e, 0x9952, 0xbf23, 0x6a1f, 0xd5aa, 0x0096, 0x26e7, 0xf3db, 0x6a05, 0xbf39,
6336 +
            0x9948, 0x4c74, 0xbf17, 0x6a2b, 0x4c5a, 0x9966, 0x00b8, 0xd584, 0xf3f5, 0x26c9, 0x997c,
6337 +
            0x4c40, 0x6a31, 0xbf0d, 0x26d3, 0xf3ef, 0xd59e, 0x00a2, 0xd4da, 0x01e6, 0x2797, 0xf2ab,
6338 +
            0x6b75, 0xbe49, 0x9838, 0x4d04, 0xf2b1, 0x278d, 0x01fc, 0xd4c0, 0x4d1e, 0x9822, 0xbe53,
6339 +
            0x6b6f, 0x980c, 0x4d30, 0x6b41, 0xbe7d, 0x27a3, 0xf29f, 0xd4ee, 0x01d2, 0xbe67, 0x6b5b,
6340 +
            0x4d2a, 0x9816, 0x01c8, 0xd4f4, 0xf285, 0x27b9, 0x4d76, 0x984a, 0xbe3b, 0x6b07, 0xf2d9,
6341 +
            0x27e5, 0x0194, 0xd4a8, 0x6b1d, 0xbe21, 0x9850, 0x4d6c, 0xd4b2, 0x018e, 0x27ff, 0xf2c3,
6342 +
            0x01a0, 0xd49c, 0xf2ed, 0x27d1, 0xbe0f, 0x6b33, 0x4d42, 0x987e, 0x27cb, 0xf2f7, 0xd486,
6343 +
            0x01ba, 0x9864, 0x4d58, 0x6b29, 0xbe15, 0xbeb7, 0x6b8b, 0x4dfa, 0x98c6, 0x0118, 0xd424,
6344 +
            0xf255, 0x2769, 0x98dc, 0x4de0, 0x6b91, 0xbead, 0x2773, 0xf24f, 0xd43e, 0x0102, 0xf261,
6345 +
            0x275d, 0x012c, 0xd410, 0x4dce, 0x98f2, 0xbe83, 0x6bbf, 0xd40a, 0x0136, 0x2747, 0xf27b,
6346 +
            0x6ba5, 0xbe99, 0x98e8, 0x4dd4, 0x271b, 0xf227, 0xd456, 0x016a, 0x98b4, 0x4d88, 0x6bf9,
6347 +
            0xbec5, 0x0170, 0xd44c, 0xf23d, 0x2701, 0xbedf, 0x6be3, 0x4d92, 0x98ae, 0x6bcd, 0xbef1,
6348 +
            0x9880, 0x4dbc, 0xd462, 0x015e, 0x272f, 0xf213, 0x4da6, 0x989a, 0xbeeb, 0x6bd7, 0xf209,
6349 +
            0x2735, 0x0144, 0xd478,
6350 +
        ],
6351 +
        [
6352 +
            0x0000, 0xf081, 0xb837, 0x48b6, 0x295b, 0xd9da, 0x916c, 0x61ed, 0x52b6, 0xa237, 0xea81,
6353 +
            0x1a00, 0x7bed, 0x8b6c, 0xc3da, 0x335b, 0xa56c, 0x55ed, 0x1d5b, 0xedda, 0x8c37, 0x7cb6,
6354 +
            0x3400, 0xc481, 0xf7da, 0x075b, 0x4fed, 0xbf6c, 0xde81, 0x2e00, 0x66b6, 0x9637, 0x13ed,
6355 +
            0xe36c, 0xabda, 0x5b5b, 0x3ab6, 0xca37, 0x8281, 0x7200, 0x415b, 0xb1da, 0xf96c, 0x09ed,
6356 +
            0x6800, 0x9881, 0xd037, 0x20b6, 0xb681, 0x4600, 0x0eb6, 0xfe37, 0x9fda, 0x6f5b, 0x27ed,
6357 +
            0xd76c, 0xe437, 0x14b6, 0x5c00, 0xac81, 0xcd6c, 0x3ded, 0x755b, 0x85da, 0x27da, 0xd75b,
6358 +
            0x9fed, 0x6f6c, 0x0e81, 0xfe00, 0xb6b6, 0x4637, 0x756c, 0x85ed, 0xcd5b, 0x3dda, 0x5c37,
6359 +
            0xacb6, 0xe400, 0x1481, 0x82b6, 0x7237, 0x3a81, 0xca00, 0xabed, 0x5b6c, 0x13da, 0xe35b,
6360 +
            0xd000, 0x2081, 0x6837, 0x98b6, 0xf95b, 0x09da, 0x416c, 0xb1ed, 0x3437, 0xc4b6, 0x8c00,
6361 +
            0x7c81, 0x1d6c, 0xeded, 0xa55b, 0x55da, 0x6681, 0x9600, 0xdeb6, 0x2e37, 0x4fda, 0xbf5b,
6362 +
            0xf7ed, 0x076c, 0x915b, 0x61da, 0x296c, 0xd9ed, 0xb800, 0x4881, 0x0037, 0xf0b6, 0xc3ed,
6363 +
            0x336c, 0x7bda, 0x8b5b, 0xeab6, 0x1a37, 0x5281, 0xa200, 0x4fb4, 0xbf35, 0xf783, 0x0702,
6364 +
            0x66ef, 0x966e, 0xded8, 0x2e59, 0x1d02, 0xed83, 0xa535, 0x55b4, 0x3459, 0xc4d8, 0x8c6e,
6365 +
            0x7cef, 0xead8, 0x1a59, 0x52ef, 0xa26e, 0xc383, 0x3302, 0x7bb4, 0x8b35, 0xb86e, 0x48ef,
6366 +
            0x0059, 0xf0d8, 0x9135, 0x61b4, 0x2902, 0xd983, 0x5c59, 0xacd8, 0xe46e, 0x14ef, 0x7502,
6367 +
            0x8583, 0xcd35, 0x3db4, 0x0eef, 0xfe6e, 0xb6d8, 0x4659, 0x27b4, 0xd735, 0x9f83, 0x6f02,
6368 +
            0xf935, 0x09b4, 0x4102, 0xb183, 0xd06e, 0x20ef, 0x6859, 0x98d8, 0xab83, 0x5b02, 0x13b4,
6369 +
            0xe335, 0x82d8, 0x7259, 0x3aef, 0xca6e, 0x686e, 0x98ef, 0xd059, 0x20d8, 0x4135, 0xb1b4,
6370 +
            0xf902, 0x0983, 0x3ad8, 0xca59, 0x82ef, 0x726e, 0x1383, 0xe302, 0xabb4, 0x5b35, 0xcd02,
6371 +
            0x3d83, 0x7535, 0x85b4, 0xe459, 0x14d8, 0x5c6e, 0xacef, 0x9fb4, 0x6f35, 0x2783, 0xd702,
6372 +
            0xb6ef, 0x466e, 0x0ed8, 0xfe59, 0x7b83, 0x8b02, 0xc3b4, 0x3335, 0x52d8, 0xa259, 0xeaef,
6373 +
            0x1a6e, 0x2935, 0xd9b4, 0x9102, 0x6183, 0x006e, 0xf0ef, 0xb859, 0x48d8, 0xdeef, 0x2e6e,
6374 +
            0x66d8, 0x9659, 0xf7b4, 0x0735, 0x4f83, 0xbf02, 0x8c59, 0x7cd8, 0x346e, 0xc4ef, 0xa502,
6375 +
            0x5583, 0x1d35, 0xedb4,
6376 +
        ],
6377 +
        [
6378 +
            0x0000, 0x9f68, 0x67e5, 0xf88d, 0xcfca, 0x50a2, 0xa82f, 0x3747, 0xc6a1, 0x59c9, 0xa144,
6379 +
            0x3e2c, 0x096b, 0x9603, 0x6e8e, 0xf1e6, 0xd477, 0x4b1f, 0xb392, 0x2cfa, 0x1bbd, 0x84d5,
6380 +
            0x7c58, 0xe330, 0x12d6, 0x8dbe, 0x7533, 0xea5b, 0xdd1c, 0x4274, 0xbaf9, 0x2591, 0xf1db,
6381 +
            0x6eb3, 0x963e, 0x0956, 0x3e11, 0xa179, 0x59f4, 0xc69c, 0x377a, 0xa812, 0x509f, 0xcff7,
6382 +
            0xf8b0, 0x67d8, 0x9f55, 0x003d, 0x25ac, 0xbac4, 0x4249, 0xdd21, 0xea66, 0x750e, 0x8d83,
6383 +
            0x12eb, 0xe30d, 0x7c65, 0x84e8, 0x1b80, 0x2cc7, 0xb3af, 0x4b22, 0xd44a, 0xba83, 0x25eb,
6384 +
            0xdd66, 0x420e, 0x7549, 0xea21, 0x12ac, 0x8dc4, 0x7c22, 0xe34a, 0x1bc7, 0x84af, 0xb3e8,
6385 +
            0x2c80, 0xd40d, 0x4b65, 0x6ef4, 0xf19c, 0x0911, 0x9679, 0xa13e, 0x3e56, 0xc6db, 0x59b3,
6386 +
            0xa855, 0x373d, 0xcfb0, 0x50d8, 0x679f, 0xf8f7, 0x007a, 0x9f12, 0x4b58, 0xd430, 0x2cbd,
6387 +
            0xb3d5, 0x8492, 0x1bfa, 0xe377, 0x7c1f, 0x8df9, 0x1291, 0xea1c, 0x7574, 0x4233, 0xdd5b,
6388 +
            0x25d6, 0xbabe, 0x9f2f, 0x0047, 0xf8ca, 0x67a2, 0x50e5, 0xcf8d, 0x3700, 0xa868, 0x598e,
6389 +
            0xc6e6, 0x3e6b, 0xa103, 0x9644, 0x092c, 0xf1a1, 0x6ec9, 0x2c33, 0xb35b, 0x4bd6, 0xd4be,
6390 +
            0xe3f9, 0x7c91, 0x841c, 0x1b74, 0xea92, 0x75fa, 0x8d77, 0x121f, 0x2558, 0xba30, 0x42bd,
6391 +
            0xddd5, 0xf844, 0x672c, 0x9fa1, 0x00c9, 0x378e, 0xa8e6, 0x506b, 0xcf03, 0x3ee5, 0xa18d,
6392 +
            0x5900, 0xc668, 0xf12f, 0x6e47, 0x96ca, 0x09a2, 0xdde8, 0x4280, 0xba0d, 0x2565, 0x1222,
6393 +
            0x8d4a, 0x75c7, 0xeaaf, 0x1b49, 0x8421, 0x7cac, 0xe3c4, 0xd483, 0x4beb, 0xb366, 0x2c0e,
6394 +
            0x099f, 0x96f7, 0x6e7a, 0xf112, 0xc655, 0x593d, 0xa1b0, 0x3ed8, 0xcf3e, 0x5056, 0xa8db,
6395 +
            0x37b3, 0x00f4, 0x9f9c, 0x6711, 0xf879, 0x96b0, 0x09d8, 0xf155, 0x6e3d, 0x597a, 0xc612,
6396 +
            0x3e9f, 0xa1f7, 0x5011, 0xcf79, 0x37f4, 0xa89c, 0x9fdb, 0x00b3, 0xf83e, 0x6756, 0x42c7,
6397 +
            0xddaf, 0x2522, 0xba4a, 0x8d0d, 0x1265, 0xeae8, 0x7580, 0x8466, 0x1b0e, 0xe383, 0x7ceb,
6398 +
            0x4bac, 0xd4c4, 0x2c49, 0xb321, 0x676b, 0xf803, 0x008e, 0x9fe6, 0xa8a1, 0x37c9, 0xcf44,
6399 +
            0x502c, 0xa1ca, 0x3ea2, 0xc62f, 0x5947, 0x6e00, 0xf168, 0x09e5, 0x968d, 0xb31c, 0x2c74,
6400 +
            0xd4f9, 0x4b91, 0x7cd6, 0xe3be, 0x1b33, 0x845b, 0x75bd, 0xead5, 0x1258, 0x8d30, 0xba77,
6401 +
            0x251f, 0xdd92, 0x42fa,
6402 +
        ],
6403 +
        [
6404 +
            0x0000, 0x5866, 0xb0cc, 0xe8aa, 0x38ad, 0x60cb, 0x8861, 0xd007, 0x715a, 0x293c, 0xc196,
6405 +
            0x99f0, 0x49f7, 0x1191, 0xf93b, 0xa15d, 0xe2b4, 0xbad2, 0x5278, 0x0a1e, 0xda19, 0x827f,
6406 +
            0x6ad5, 0x32b3, 0x93ee, 0xcb88, 0x2322, 0x7b44, 0xab43, 0xf325, 0x1b8f, 0x43e9, 0x9c5d,
6407 +
            0xc43b, 0x2c91, 0x74f7, 0xa4f0, 0xfc96, 0x143c, 0x4c5a, 0xed07, 0xb561, 0x5dcb, 0x05ad,
6408 +
            0xd5aa, 0x8dcc, 0x6566, 0x3d00, 0x7ee9, 0x268f, 0xce25, 0x9643, 0x4644, 0x1e22, 0xf688,
6409 +
            0xaeee, 0x0fb3, 0x57d5, 0xbf7f, 0xe719, 0x371e, 0x6f78, 0x87d2, 0xdfb4, 0x618f, 0x39e9,
6410 +
            0xd143, 0x8925, 0x5922, 0x0144, 0xe9ee, 0xb188, 0x10d5, 0x48b3, 0xa019, 0xf87f, 0x2878,
6411 +
            0x701e, 0x98b4, 0xc0d2, 0x833b, 0xdb5d, 0x33f7, 0x6b91, 0xbb96, 0xe3f0, 0x0b5a, 0x533c,
6412 +
            0xf261, 0xaa07, 0x42ad, 0x1acb, 0xcacc, 0x92aa, 0x7a00, 0x2266, 0xfdd2, 0xa5b4, 0x4d1e,
6413 +
            0x1578, 0xc57f, 0x9d19, 0x75b3, 0x2dd5, 0x8c88, 0xd4ee, 0x3c44, 0x6422, 0xb425, 0xec43,
6414 +
            0x04e9, 0x5c8f, 0x1f66, 0x4700, 0xafaa, 0xf7cc, 0x27cb, 0x7fad, 0x9707, 0xcf61, 0x6e3c,
6415 +
            0x365a, 0xdef0, 0x8696, 0x5691, 0x0ef7, 0xe65d, 0xbe3b, 0xc31e, 0x9b78, 0x73d2, 0x2bb4,
6416 +
            0xfbb3, 0xa3d5, 0x4b7f, 0x1319, 0xb244, 0xea22, 0x0288, 0x5aee, 0x8ae9, 0xd28f, 0x3a25,
6417 +
            0x6243, 0x21aa, 0x79cc, 0x9166, 0xc900, 0x1907, 0x4161, 0xa9cb, 0xf1ad, 0x50f0, 0x0896,
6418 +
            0xe03c, 0xb85a, 0x685d, 0x303b, 0xd891, 0x80f7, 0x5f43, 0x0725, 0xef8f, 0xb7e9, 0x67ee,
6419 +
            0x3f88, 0xd722, 0x8f44, 0x2e19, 0x767f, 0x9ed5, 0xc6b3, 0x16b4, 0x4ed2, 0xa678, 0xfe1e,
6420 +
            0xbdf7, 0xe591, 0x0d3b, 0x555d, 0x855a, 0xdd3c, 0x3596, 0x6df0, 0xccad, 0x94cb, 0x7c61,
6421 +
            0x2407, 0xf400, 0xac66, 0x44cc, 0x1caa, 0xa291, 0xfaf7, 0x125d, 0x4a3b, 0x9a3c, 0xc25a,
6422 +
            0x2af0, 0x7296, 0xd3cb, 0x8bad, 0x6307, 0x3b61, 0xeb66, 0xb300, 0x5baa, 0x03cc, 0x4025,
6423 +
            0x1843, 0xf0e9, 0xa88f, 0x7888, 0x20ee, 0xc844, 0x9022, 0x317f, 0x6919, 0x81b3, 0xd9d5,
6424 +
            0x09d2, 0x51b4, 0xb91e, 0xe178, 0x3ecc, 0x66aa, 0x8e00, 0xd666, 0x0661, 0x5e07, 0xb6ad,
6425 +
            0xeecb, 0x4f96, 0x17f0, 0xff5a, 0xa73c, 0x773b, 0x2f5d, 0xc7f7, 0x9f91, 0xdc78, 0x841e,
6426 +
            0x6cb4, 0x34d2, 0xe4d5, 0xbcb3, 0x5419, 0x0c7f, 0xad22, 0xf544, 0x1dee, 0x4588, 0x958f,
6427 +
            0xcde9, 0x2543, 0x7d25,
6428 +
        ],
6429 +
        [
6430 +
            0x0000, 0xdf09, 0xe727, 0x382e, 0x977b, 0x4872, 0x705c, 0xaf55, 0x77c3, 0xa8ca, 0x90e4,
6431 +
            0x4fed, 0xe0b8, 0x3fb1, 0x079f, 0xd896, 0xef86, 0x308f, 0x08a1, 0xd7a8, 0x78fd, 0xa7f4,
6432 +
            0x9fda, 0x40d3, 0x9845, 0x474c, 0x7f62, 0xa06b, 0x0f3e, 0xd037, 0xe819, 0x3710, 0x8639,
6433 +
            0x5930, 0x611e, 0xbe17, 0x1142, 0xce4b, 0xf665, 0x296c, 0xf1fa, 0x2ef3, 0x16dd, 0xc9d4,
6434 +
            0x6681, 0xb988, 0x81a6, 0x5eaf, 0x69bf, 0xb6b6, 0x8e98, 0x5191, 0xfec4, 0x21cd, 0x19e3,
6435 +
            0xc6ea, 0x1e7c, 0xc175, 0xf95b, 0x2652, 0x8907, 0x560e, 0x6e20, 0xb129, 0x5547, 0x8a4e,
6436 +
            0xb260, 0x6d69, 0xc23c, 0x1d35, 0x251b, 0xfa12, 0x2284, 0xfd8d, 0xc5a3, 0x1aaa, 0xb5ff,
6437 +
            0x6af6, 0x52d8, 0x8dd1, 0xbac1, 0x65c8, 0x5de6, 0x82ef, 0x2dba, 0xf2b3, 0xca9d, 0x1594,
6438 +
            0xcd02, 0x120b, 0x2a25, 0xf52c, 0x5a79, 0x8570, 0xbd5e, 0x6257, 0xd37e, 0x0c77, 0x3459,
6439 +
            0xeb50, 0x4405, 0x9b0c, 0xa322, 0x7c2b, 0xa4bd, 0x7bb4, 0x439a, 0x9c93, 0x33c6, 0xeccf,
6440 +
            0xd4e1, 0x0be8, 0x3cf8, 0xe3f1, 0xdbdf, 0x04d6, 0xab83, 0x748a, 0x4ca4, 0x93ad, 0x4b3b,
6441 +
            0x9432, 0xac1c, 0x7315, 0xdc40, 0x0349, 0x3b67, 0xe46e, 0xaa8e, 0x7587, 0x4da9, 0x92a0,
6442 +
            0x3df5, 0xe2fc, 0xdad2, 0x05db, 0xdd4d, 0x0244, 0x3a6a, 0xe563, 0x4a36, 0x953f, 0xad11,
6443 +
            0x7218, 0x4508, 0x9a01, 0xa22f, 0x7d26, 0xd273, 0x0d7a, 0x3554, 0xea5d, 0x32cb, 0xedc2,
6444 +
            0xd5ec, 0x0ae5, 0xa5b0, 0x7ab9, 0x4297, 0x9d9e, 0x2cb7, 0xf3be, 0xcb90, 0x1499, 0xbbcc,
6445 +
            0x64c5, 0x5ceb, 0x83e2, 0x5b74, 0x847d, 0xbc53, 0x635a, 0xcc0f, 0x1306, 0x2b28, 0xf421,
6446 +
            0xc331, 0x1c38, 0x2416, 0xfb1f, 0x544a, 0x8b43, 0xb36d, 0x6c64, 0xb4f2, 0x6bfb, 0x53d5,
6447 +
            0x8cdc, 0x2389, 0xfc80, 0xc4ae, 0x1ba7, 0xffc9, 0x20c0, 0x18ee, 0xc7e7, 0x68b2, 0xb7bb,
6448 +
            0x8f95, 0x509c, 0x880a, 0x5703, 0x6f2d, 0xb024, 0x1f71, 0xc078, 0xf856, 0x275f, 0x104f,
6449 +
            0xcf46, 0xf768, 0x2861, 0x8734, 0x583d, 0x6013, 0xbf1a, 0x678c, 0xb885, 0x80ab, 0x5fa2,
6450 +
            0xf0f7, 0x2ffe, 0x17d0, 0xc8d9, 0x79f0, 0xa6f9, 0x9ed7, 0x41de, 0xee8b, 0x3182, 0x09ac,
6451 +
            0xd6a5, 0x0e33, 0xd13a, 0xe914, 0x361d, 0x9948, 0x4641, 0x7e6f, 0xa166, 0x9676, 0x497f,
6452 +
            0x7151, 0xae58, 0x010d, 0xde04, 0xe62a, 0x3923, 0xe1b5, 0x3ebc, 0x0692, 0xd99b, 0x76ce,
6453 +
            0xa9c7, 0x91e9, 0x4ee0,
6454 +
        ],
6455 +
        [
6456 +
            0x0000, 0x0c29, 0x1852, 0x147b, 0x30a4, 0x3c8d, 0x28f6, 0x24df, 0x6148, 0x6d61, 0x791a,
6457 +
            0x7533, 0x51ec, 0x5dc5, 0x49be, 0x4597, 0xc290, 0xceb9, 0xdac2, 0xd6eb, 0xf234, 0xfe1d,
6458 +
            0xea66, 0xe64f, 0xa3d8, 0xaff1, 0xbb8a, 0xb7a3, 0x937c, 0x9f55, 0x8b2e, 0x8707, 0xdc15,
6459 +
            0xd03c, 0xc447, 0xc86e, 0xecb1, 0xe098, 0xf4e3, 0xf8ca, 0xbd5d, 0xb174, 0xa50f, 0xa926,
6460 +
            0x8df9, 0x81d0, 0x95ab, 0x9982, 0x1e85, 0x12ac, 0x06d7, 0x0afe, 0x2e21, 0x2208, 0x3673,
6461 +
            0x3a5a, 0x7fcd, 0x73e4, 0x679f, 0x6bb6, 0x4f69, 0x4340, 0x573b, 0x5b12, 0xe11f, 0xed36,
6462 +
            0xf94d, 0xf564, 0xd1bb, 0xdd92, 0xc9e9, 0xc5c0, 0x8057, 0x8c7e, 0x9805, 0x942c, 0xb0f3,
6463 +
            0xbcda, 0xa8a1, 0xa488, 0x238f, 0x2fa6, 0x3bdd, 0x37f4, 0x132b, 0x1f02, 0x0b79, 0x0750,
6464 +
            0x42c7, 0x4eee, 0x5a95, 0x56bc, 0x7263, 0x7e4a, 0x6a31, 0x6618, 0x3d0a, 0x3123, 0x2558,
6465 +
            0x2971, 0x0dae, 0x0187, 0x15fc, 0x19d5, 0x5c42, 0x506b, 0x4410, 0x4839, 0x6ce6, 0x60cf,
6466 +
            0x74b4, 0x789d, 0xff9a, 0xf3b3, 0xe7c8, 0xebe1, 0xcf3e, 0xc317, 0xd76c, 0xdb45, 0x9ed2,
6467 +
            0x92fb, 0x8680, 0x8aa9, 0xae76, 0xa25f, 0xb624, 0xba0d, 0x9b0b, 0x9722, 0x8359, 0x8f70,
6468 +
            0xabaf, 0xa786, 0xb3fd, 0xbfd4, 0xfa43, 0xf66a, 0xe211, 0xee38, 0xcae7, 0xc6ce, 0xd2b5,
6469 +
            0xde9c, 0x599b, 0x55b2, 0x41c9, 0x4de0, 0x693f, 0x6516, 0x716d, 0x7d44, 0x38d3, 0x34fa,
6470 +
            0x2081, 0x2ca8, 0x0877, 0x045e, 0x1025, 0x1c0c, 0x471e, 0x4b37, 0x5f4c, 0x5365, 0x77ba,
6471 +
            0x7b93, 0x6fe8, 0x63c1, 0x2656, 0x2a7f, 0x3e04, 0x322d, 0x16f2, 0x1adb, 0x0ea0, 0x0289,
6472 +
            0x858e, 0x89a7, 0x9ddc, 0x91f5, 0xb52a, 0xb903, 0xad78, 0xa151, 0xe4c6, 0xe8ef, 0xfc94,
6473 +
            0xf0bd, 0xd462, 0xd84b, 0xcc30, 0xc019, 0x7a14, 0x763d, 0x6246, 0x6e6f, 0x4ab0, 0x4699,
6474 +
            0x52e2, 0x5ecb, 0x1b5c, 0x1775, 0x030e, 0x0f27, 0x2bf8, 0x27d1, 0x33aa, 0x3f83, 0xb884,
6475 +
            0xb4ad, 0xa0d6, 0xacff, 0x8820, 0x8409, 0x9072, 0x9c5b, 0xd9cc, 0xd5e5, 0xc19e, 0xcdb7,
6476 +
            0xe968, 0xe541, 0xf13a, 0xfd13, 0xa601, 0xaa28, 0xbe53, 0xb27a, 0x96a5, 0x9a8c, 0x8ef7,
6477 +
            0x82de, 0xc749, 0xcb60, 0xdf1b, 0xd332, 0xf7ed, 0xfbc4, 0xefbf, 0xe396, 0x6491, 0x68b8,
6478 +
            0x7cc3, 0x70ea, 0x5435, 0x581c, 0x4c67, 0x404e, 0x05d9, 0x09f0, 0x1d8b, 0x11a2, 0x357d,
6479 +
            0x3954, 0x2d2f, 0x2106,
6480 +
        ],
6481 +
        [
6482 +
            0x0000, 0x6f23, 0xde46, 0xb165, 0xe5b9, 0x8a9a, 0x3bff, 0x54dc, 0x9247, 0xfd64, 0x4c01,
6483 +
            0x2322, 0x77fe, 0x18dd, 0xa9b8, 0xc69b, 0x7dbb, 0x1298, 0xa3fd, 0xccde, 0x9802, 0xf721,
6484 +
            0x4644, 0x2967, 0xeffc, 0x80df, 0x31ba, 0x5e99, 0x0a45, 0x6566, 0xd403, 0xbb20, 0xfb76,
6485 +
            0x9455, 0x2530, 0x4a13, 0x1ecf, 0x71ec, 0xc089, 0xafaa, 0x6931, 0x0612, 0xb777, 0xd854,
6486 +
            0x8c88, 0xe3ab, 0x52ce, 0x3ded, 0x86cd, 0xe9ee, 0x588b, 0x37a8, 0x6374, 0x0c57, 0xbd32,
6487 +
            0xd211, 0x148a, 0x7ba9, 0xcacc, 0xa5ef, 0xf133, 0x9e10, 0x2f75, 0x4056, 0xafd9, 0xc0fa,
6488 +
            0x719f, 0x1ebc, 0x4a60, 0x2543, 0x9426, 0xfb05, 0x3d9e, 0x52bd, 0xe3d8, 0x8cfb, 0xd827,
6489 +
            0xb704, 0x0661, 0x6942, 0xd262, 0xbd41, 0x0c24, 0x6307, 0x37db, 0x58f8, 0xe99d, 0x86be,
6490 +
            0x4025, 0x2f06, 0x9e63, 0xf140, 0xa59c, 0xcabf, 0x7bda, 0x14f9, 0x54af, 0x3b8c, 0x8ae9,
6491 +
            0xe5ca, 0xb116, 0xde35, 0x6f50, 0x0073, 0xc6e8, 0xa9cb, 0x18ae, 0x778d, 0x2351, 0x4c72,
6492 +
            0xfd17, 0x9234, 0x2914, 0x4637, 0xf752, 0x9871, 0xccad, 0xa38e, 0x12eb, 0x7dc8, 0xbb53,
6493 +
            0xd470, 0x6515, 0x0a36, 0x5eea, 0x31c9, 0x80ac, 0xef8f, 0x0687, 0x69a4, 0xd8c1, 0xb7e2,
6494 +
            0xe33e, 0x8c1d, 0x3d78, 0x525b, 0x94c0, 0xfbe3, 0x4a86, 0x25a5, 0x7179, 0x1e5a, 0xaf3f,
6495 +
            0xc01c, 0x7b3c, 0x141f, 0xa57a, 0xca59, 0x9e85, 0xf1a6, 0x40c3, 0x2fe0, 0xe97b, 0x8658,
6496 +
            0x373d, 0x581e, 0x0cc2, 0x63e1, 0xd284, 0xbda7, 0xfdf1, 0x92d2, 0x23b7, 0x4c94, 0x1848,
6497 +
            0x776b, 0xc60e, 0xa92d, 0x6fb6, 0x0095, 0xb1f0, 0xded3, 0x8a0f, 0xe52c, 0x5449, 0x3b6a,
6498 +
            0x804a, 0xef69, 0x5e0c, 0x312f, 0x65f3, 0x0ad0, 0xbbb5, 0xd496, 0x120d, 0x7d2e, 0xcc4b,
6499 +
            0xa368, 0xf7b4, 0x9897, 0x29f2, 0x46d1, 0xa95e, 0xc67d, 0x7718, 0x183b, 0x4ce7, 0x23c4,
6500 +
            0x92a1, 0xfd82, 0x3b19, 0x543a, 0xe55f, 0x8a7c, 0xdea0, 0xb183, 0x00e6, 0x6fc5, 0xd4e5,
6501 +
            0xbbc6, 0x0aa3, 0x6580, 0x315c, 0x5e7f, 0xef1a, 0x8039, 0x46a2, 0x2981, 0x98e4, 0xf7c7,
6502 +
            0xa31b, 0xcc38, 0x7d5d, 0x127e, 0x5228, 0x3d0b, 0x8c6e, 0xe34d, 0xb791, 0xd8b2, 0x69d7,
6503 +
            0x06f4, 0xc06f, 0xaf4c, 0x1e29, 0x710a, 0x25d6, 0x4af5, 0xfb90, 0x94b3, 0x2f93, 0x40b0,
6504 +
            0xf1d5, 0x9ef6, 0xca2a, 0xa509, 0x146c, 0x7b4f, 0xbdd4, 0xd2f7, 0x6392, 0x0cb1, 0x586d,
6505 +
            0x374e, 0x862b, 0xe908,
6506 +
        ],
6507 +
        [
6508 +
            0x0000, 0x0d0e, 0x1a1c, 0x1712, 0x3438, 0x3936, 0x2e24, 0x232a, 0x6870, 0x657e, 0x726c,
6509 +
            0x7f62, 0x5c48, 0x5146, 0x4654, 0x4b5a, 0xd0e0, 0xddee, 0xcafc, 0xc7f2, 0xe4d8, 0xe9d6,
6510 +
            0xfec4, 0xf3ca, 0xb890, 0xb59e, 0xa28c, 0xaf82, 0x8ca8, 0x81a6, 0x96b4, 0x9bba, 0xf8f5,
6511 +
            0xf5fb, 0xe2e9, 0xefe7, 0xcccd, 0xc1c3, 0xd6d1, 0xdbdf, 0x9085, 0x9d8b, 0x8a99, 0x8797,
6512 +
            0xa4bd, 0xa9b3, 0xbea1, 0xb3af, 0x2815, 0x251b, 0x3209, 0x3f07, 0x1c2d, 0x1123, 0x0631,
6513 +
            0x0b3f, 0x4065, 0x4d6b, 0x5a79, 0x5777, 0x745d, 0x7953, 0x6e41, 0x634f, 0xa8df, 0xa5d1,
6514 +
            0xb2c3, 0xbfcd, 0x9ce7, 0x91e9, 0x86fb, 0x8bf5, 0xc0af, 0xcda1, 0xdab3, 0xd7bd, 0xf497,
6515 +
            0xf999, 0xee8b, 0xe385, 0x783f, 0x7531, 0x6223, 0x6f2d, 0x4c07, 0x4109, 0x561b, 0x5b15,
6516 +
            0x104f, 0x1d41, 0x0a53, 0x075d, 0x2477, 0x2979, 0x3e6b, 0x3365, 0x502a, 0x5d24, 0x4a36,
6517 +
            0x4738, 0x6412, 0x691c, 0x7e0e, 0x7300, 0x385a, 0x3554, 0x2246, 0x2f48, 0x0c62, 0x016c,
6518 +
            0x167e, 0x1b70, 0x80ca, 0x8dc4, 0x9ad6, 0x97d8, 0xb4f2, 0xb9fc, 0xaeee, 0xa3e0, 0xe8ba,
6519 +
            0xe5b4, 0xf2a6, 0xffa8, 0xdc82, 0xd18c, 0xc69e, 0xcb90, 0x088b, 0x0585, 0x1297, 0x1f99,
6520 +
            0x3cb3, 0x31bd, 0x26af, 0x2ba1, 0x60fb, 0x6df5, 0x7ae7, 0x77e9, 0x54c3, 0x59cd, 0x4edf,
6521 +
            0x43d1, 0xd86b, 0xd565, 0xc277, 0xcf79, 0xec53, 0xe15d, 0xf64f, 0xfb41, 0xb01b, 0xbd15,
6522 +
            0xaa07, 0xa709, 0x8423, 0x892d, 0x9e3f, 0x9331, 0xf07e, 0xfd70, 0xea62, 0xe76c, 0xc446,
6523 +
            0xc948, 0xde5a, 0xd354, 0x980e, 0x9500, 0x8212, 0x8f1c, 0xac36, 0xa138, 0xb62a, 0xbb24,
6524 +
            0x209e, 0x2d90, 0x3a82, 0x378c, 0x14a6, 0x19a8, 0x0eba, 0x03b4, 0x48ee, 0x45e0, 0x52f2,
6525 +
            0x5ffc, 0x7cd6, 0x71d8, 0x66ca, 0x6bc4, 0xa054, 0xad5a, 0xba48, 0xb746, 0x946c, 0x9962,
6526 +
            0x8e70, 0x837e, 0xc824, 0xc52a, 0xd238, 0xdf36, 0xfc1c, 0xf112, 0xe600, 0xeb0e, 0x70b4,
6527 +
            0x7dba, 0x6aa8, 0x67a6, 0x448c, 0x4982, 0x5e90, 0x539e, 0x18c4, 0x15ca, 0x02d8, 0x0fd6,
6528 +
            0x2cfc, 0x21f2, 0x36e0, 0x3bee, 0x58a1, 0x55af, 0x42bd, 0x4fb3, 0x6c99, 0x6197, 0x7685,
6529 +
            0x7b8b, 0x30d1, 0x3ddf, 0x2acd, 0x27c3, 0x04e9, 0x09e7, 0x1ef5, 0x13fb, 0x8841, 0x854f,
6530 +
            0x925d, 0x9f53, 0xbc79, 0xb177, 0xa665, 0xab6b, 0xe031, 0xed3f, 0xfa2d, 0xf723, 0xd409,
6531 +
            0xd907, 0xce15, 0xc31b,
6532 +
        ],
6533 +
        [
6534 +
            0x0000, 0x1116, 0x222c, 0x333a, 0x4458, 0x554e, 0x6674, 0x7762, 0x88b0, 0x99a6, 0xaa9c,
6535 +
            0xbb8a, 0xcce8, 0xddfe, 0xeec4, 0xffd2, 0x4855, 0x5943, 0x6a79, 0x7b6f, 0x0c0d, 0x1d1b,
6536 +
            0x2e21, 0x3f37, 0xc0e5, 0xd1f3, 0xe2c9, 0xf3df, 0x84bd, 0x95ab, 0xa691, 0xb787, 0x90aa,
6537 +
            0x81bc, 0xb286, 0xa390, 0xd4f2, 0xc5e4, 0xf6de, 0xe7c8, 0x181a, 0x090c, 0x3a36, 0x2b20,
6538 +
            0x5c42, 0x4d54, 0x7e6e, 0x6f78, 0xd8ff, 0xc9e9, 0xfad3, 0xebc5, 0x9ca7, 0x8db1, 0xbe8b,
6539 +
            0xaf9d, 0x504f, 0x4159, 0x7263, 0x6375, 0x1417, 0x0501, 0x363b, 0x272d, 0x7861, 0x6977,
6540 +
            0x5a4d, 0x4b5b, 0x3c39, 0x2d2f, 0x1e15, 0x0f03, 0xf0d1, 0xe1c7, 0xd2fd, 0xc3eb, 0xb489,
6541 +
            0xa59f, 0x96a5, 0x87b3, 0x3034, 0x2122, 0x1218, 0x030e, 0x746c, 0x657a, 0x5640, 0x4756,
6542 +
            0xb884, 0xa992, 0x9aa8, 0x8bbe, 0xfcdc, 0xedca, 0xdef0, 0xcfe6, 0xe8cb, 0xf9dd, 0xcae7,
6543 +
            0xdbf1, 0xac93, 0xbd85, 0x8ebf, 0x9fa9, 0x607b, 0x716d, 0x4257, 0x5341, 0x2423, 0x3535,
6544 +
            0x060f, 0x1719, 0xa09e, 0xb188, 0x82b2, 0x93a4, 0xe4c6, 0xf5d0, 0xc6ea, 0xd7fc, 0x282e,
6545 +
            0x3938, 0x0a02, 0x1b14, 0x6c76, 0x7d60, 0x4e5a, 0x5f4c, 0xf0c2, 0xe1d4, 0xd2ee, 0xc3f8,
6546 +
            0xb49a, 0xa58c, 0x96b6, 0x87a0, 0x7872, 0x6964, 0x5a5e, 0x4b48, 0x3c2a, 0x2d3c, 0x1e06,
6547 +
            0x0f10, 0xb897, 0xa981, 0x9abb, 0x8bad, 0xfccf, 0xedd9, 0xdee3, 0xcff5, 0x3027, 0x2131,
6548 +
            0x120b, 0x031d, 0x747f, 0x6569, 0x5653, 0x4745, 0x6068, 0x717e, 0x4244, 0x5352, 0x2430,
6549 +
            0x3526, 0x061c, 0x170a, 0xe8d8, 0xf9ce, 0xcaf4, 0xdbe2, 0xac80, 0xbd96, 0x8eac, 0x9fba,
6550 +
            0x283d, 0x392b, 0x0a11, 0x1b07, 0x6c65, 0x7d73, 0x4e49, 0x5f5f, 0xa08d, 0xb19b, 0x82a1,
6551 +
            0x93b7, 0xe4d5, 0xf5c3, 0xc6f9, 0xd7ef, 0x88a3, 0x99b5, 0xaa8f, 0xbb99, 0xccfb, 0xdded,
6552 +
            0xeed7, 0xffc1, 0x0013, 0x1105, 0x223f, 0x3329, 0x444b, 0x555d, 0x6667, 0x7771, 0xc0f6,
6553 +
            0xd1e0, 0xe2da, 0xf3cc, 0x84ae, 0x95b8, 0xa682, 0xb794, 0x4846, 0x5950, 0x6a6a, 0x7b7c,
6554 +
            0x0c1e, 0x1d08, 0x2e32, 0x3f24, 0x1809, 0x091f, 0x3a25, 0x2b33, 0x5c51, 0x4d47, 0x7e7d,
6555 +
            0x6f6b, 0x90b9, 0x81af, 0xb295, 0xa383, 0xd4e1, 0xc5f7, 0xf6cd, 0xe7db, 0x505c, 0x414a,
6556 +
            0x7270, 0x6366, 0x1404, 0x0512, 0x3628, 0x273e, 0xd8ec, 0xc9fa, 0xfac0, 0xebd6, 0x9cb4,
6557 +
            0x8da2, 0xbe98, 0xaf8e,
6558 +
        ],
6559 +
        [
6560 +
            0x0000, 0xb8b1, 0x2857, 0x90e6, 0x50ae, 0xe81f, 0x78f9, 0xc048, 0xa15c, 0x19ed, 0x890b,
6561 +
            0x31ba, 0xf1f2, 0x4943, 0xd9a5, 0x6114, 0x1b8d, 0xa33c, 0x33da, 0x8b6b, 0x4b23, 0xf392,
6562 +
            0x6374, 0xdbc5, 0xbad1, 0x0260, 0x9286, 0x2a37, 0xea7f, 0x52ce, 0xc228, 0x7a99, 0x371a,
6563 +
            0x8fab, 0x1f4d, 0xa7fc, 0x67b4, 0xdf05, 0x4fe3, 0xf752, 0x9646, 0x2ef7, 0xbe11, 0x06a0,
6564 +
            0xc6e8, 0x7e59, 0xeebf, 0x560e, 0x2c97, 0x9426, 0x04c0, 0xbc71, 0x7c39, 0xc488, 0x546e,
6565 +
            0xecdf, 0x8dcb, 0x357a, 0xa59c, 0x1d2d, 0xdd65, 0x65d4, 0xf532, 0x4d83, 0x6e34, 0xd685,
6566 +
            0x4663, 0xfed2, 0x3e9a, 0x862b, 0x16cd, 0xae7c, 0xcf68, 0x77d9, 0xe73f, 0x5f8e, 0x9fc6,
6567 +
            0x2777, 0xb791, 0x0f20, 0x75b9, 0xcd08, 0x5dee, 0xe55f, 0x2517, 0x9da6, 0x0d40, 0xb5f1,
6568 +
            0xd4e5, 0x6c54, 0xfcb2, 0x4403, 0x844b, 0x3cfa, 0xac1c, 0x14ad, 0x592e, 0xe19f, 0x7179,
6569 +
            0xc9c8, 0x0980, 0xb131, 0x21d7, 0x9966, 0xf872, 0x40c3, 0xd025, 0x6894, 0xa8dc, 0x106d,
6570 +
            0x808b, 0x383a, 0x42a3, 0xfa12, 0x6af4, 0xd245, 0x120d, 0xaabc, 0x3a5a, 0x82eb, 0xe3ff,
6571 +
            0x5b4e, 0xcba8, 0x7319, 0xb351, 0x0be0, 0x9b06, 0x23b7, 0xdc68, 0x64d9, 0xf43f, 0x4c8e,
6572 +
            0x8cc6, 0x3477, 0xa491, 0x1c20, 0x7d34, 0xc585, 0x5563, 0xedd2, 0x2d9a, 0x952b, 0x05cd,
6573 +
            0xbd7c, 0xc7e5, 0x7f54, 0xefb2, 0x5703, 0x974b, 0x2ffa, 0xbf1c, 0x07ad, 0x66b9, 0xde08,
6574 +
            0x4eee, 0xf65f, 0x3617, 0x8ea6, 0x1e40, 0xa6f1, 0xeb72, 0x53c3, 0xc325, 0x7b94, 0xbbdc,
6575 +
            0x036d, 0x938b, 0x2b3a, 0x4a2e, 0xf29f, 0x6279, 0xdac8, 0x1a80, 0xa231, 0x32d7, 0x8a66,
6576 +
            0xf0ff, 0x484e, 0xd8a8, 0x6019, 0xa051, 0x18e0, 0x8806, 0x30b7, 0x51a3, 0xe912, 0x79f4,
6577 +
            0xc145, 0x010d, 0xb9bc, 0x295a, 0x91eb, 0xb25c, 0x0aed, 0x9a0b, 0x22ba, 0xe2f2, 0x5a43,
6578 +
            0xcaa5, 0x7214, 0x1300, 0xabb1, 0x3b57, 0x83e6, 0x43ae, 0xfb1f, 0x6bf9, 0xd348, 0xa9d1,
6579 +
            0x1160, 0x8186, 0x3937, 0xf97f, 0x41ce, 0xd128, 0x6999, 0x088d, 0xb03c, 0x20da, 0x986b,
6580 +
            0x5823, 0xe092, 0x7074, 0xc8c5, 0x8546, 0x3df7, 0xad11, 0x15a0, 0xd5e8, 0x6d59, 0xfdbf,
6581 +
            0x450e, 0x241a, 0x9cab, 0x0c4d, 0xb4fc, 0x74b4, 0xcc05, 0x5ce3, 0xe452, 0x9ecb, 0x267a,
6582 +
            0xb69c, 0x0e2d, 0xce65, 0x76d4, 0xe632, 0x5e83, 0x3f97, 0x8726, 0x17c0, 0xaf71, 0x6f39,
6583 +
            0xd788, 0x476e, 0xffdf,
6584 +
        ],
6585 +
        [
6586 +
            0x0000, 0xe1e5, 0x9aff, 0x7b1a, 0x6ccb, 0x8d2e, 0xf634, 0x17d1, 0xd996, 0x3873, 0x4369,
6587 +
            0xa28c, 0xb55d, 0x54b8, 0x2fa2, 0xce47, 0xea19, 0x0bfc, 0x70e6, 0x9103, 0x86d2, 0x6737,
6588 +
            0x1c2d, 0xfdc8, 0x338f, 0xd26a, 0xa970, 0x4895, 0x5f44, 0xbea1, 0xc5bb, 0x245e, 0x8d07,
6589 +
            0x6ce2, 0x17f8, 0xf61d, 0xe1cc, 0x0029, 0x7b33, 0x9ad6, 0x5491, 0xb574, 0xce6e, 0x2f8b,
6590 +
            0x385a, 0xd9bf, 0xa2a5, 0x4340, 0x671e, 0x86fb, 0xfde1, 0x1c04, 0x0bd5, 0xea30, 0x912a,
6591 +
            0x70cf, 0xbe88, 0x5f6d, 0x2477, 0xc592, 0xd243, 0x33a6, 0x48bc, 0xa959, 0x433b, 0xa2de,
6592 +
            0xd9c4, 0x3821, 0x2ff0, 0xce15, 0xb50f, 0x54ea, 0x9aad, 0x7b48, 0x0052, 0xe1b7, 0xf666,
6593 +
            0x1783, 0x6c99, 0x8d7c, 0xa922, 0x48c7, 0x33dd, 0xd238, 0xc5e9, 0x240c, 0x5f16, 0xbef3,
6594 +
            0x70b4, 0x9151, 0xea4b, 0x0bae, 0x1c7f, 0xfd9a, 0x8680, 0x6765, 0xce3c, 0x2fd9, 0x54c3,
6595 +
            0xb526, 0xa2f7, 0x4312, 0x3808, 0xd9ed, 0x17aa, 0xf64f, 0x8d55, 0x6cb0, 0x7b61, 0x9a84,
6596 +
            0xe19e, 0x007b, 0x2425, 0xc5c0, 0xbeda, 0x5f3f, 0x48ee, 0xa90b, 0xd211, 0x33f4, 0xfdb3,
6597 +
            0x1c56, 0x674c, 0x86a9, 0x9178, 0x709d, 0x0b87, 0xea62, 0x8676, 0x6793, 0x1c89, 0xfd6c,
6598 +
            0xeabd, 0x0b58, 0x7042, 0x91a7, 0x5fe0, 0xbe05, 0xc51f, 0x24fa, 0x332b, 0xd2ce, 0xa9d4,
6599 +
            0x4831, 0x6c6f, 0x8d8a, 0xf690, 0x1775, 0x00a4, 0xe141, 0x9a5b, 0x7bbe, 0xb5f9, 0x541c,
6600 +
            0x2f06, 0xcee3, 0xd932, 0x38d7, 0x43cd, 0xa228, 0x0b71, 0xea94, 0x918e, 0x706b, 0x67ba,
6601 +
            0x865f, 0xfd45, 0x1ca0, 0xd2e7, 0x3302, 0x4818, 0xa9fd, 0xbe2c, 0x5fc9, 0x24d3, 0xc536,
6602 +
            0xe168, 0x008d, 0x7b97, 0x9a72, 0x8da3, 0x6c46, 0x175c, 0xf6b9, 0x38fe, 0xd91b, 0xa201,
6603 +
            0x43e4, 0x5435, 0xb5d0, 0xceca, 0x2f2f, 0xc54d, 0x24a8, 0x5fb2, 0xbe57, 0xa986, 0x4863,
6604 +
            0x3379, 0xd29c, 0x1cdb, 0xfd3e, 0x8624, 0x67c1, 0x7010, 0x91f5, 0xeaef, 0x0b0a, 0x2f54,
6605 +
            0xceb1, 0xb5ab, 0x544e, 0x439f, 0xa27a, 0xd960, 0x3885, 0xf6c2, 0x1727, 0x6c3d, 0x8dd8,
6606 +
            0x9a09, 0x7bec, 0x00f6, 0xe113, 0x484a, 0xa9af, 0xd2b5, 0x3350, 0x2481, 0xc564, 0xbe7e,
6607 +
            0x5f9b, 0x91dc, 0x7039, 0x0b23, 0xeac6, 0xfd17, 0x1cf2, 0x67e8, 0x860d, 0xa253, 0x43b6,
6608 +
            0x38ac, 0xd949, 0xce98, 0x2f7d, 0x5467, 0xb582, 0x7bc5, 0x9a20, 0xe13a, 0x00df, 0x170e,
6609 +
            0xf6eb, 0x8df1, 0x6c14,
6610 +
        ],
6611 +
        [
6612 +
            0x0000, 0x55d9, 0xabb2, 0xfe6b, 0x0e51, 0x5b88, 0xa5e3, 0xf03a, 0x1ca2, 0x497b, 0xb710,
6613 +
            0xe2c9, 0x12f3, 0x472a, 0xb941, 0xec98, 0x3944, 0x6c9d, 0x92f6, 0xc72f, 0x3715, 0x62cc,
6614 +
            0x9ca7, 0xc97e, 0x25e6, 0x703f, 0x8e54, 0xdb8d, 0x2bb7, 0x7e6e, 0x8005, 0xd5dc, 0x7288,
6615 +
            0x2751, 0xd93a, 0x8ce3, 0x7cd9, 0x2900, 0xd76b, 0x82b2, 0x6e2a, 0x3bf3, 0xc598, 0x9041,
6616 +
            0x607b, 0x35a2, 0xcbc9, 0x9e10, 0x4bcc, 0x1e15, 0xe07e, 0xb5a7, 0x459d, 0x1044, 0xee2f,
6617 +
            0xbbf6, 0x576e, 0x02b7, 0xfcdc, 0xa905, 0x593f, 0x0ce6, 0xf28d, 0xa754, 0xe510, 0xb0c9,
6618 +
            0x4ea2, 0x1b7b, 0xeb41, 0xbe98, 0x40f3, 0x152a, 0xf9b2, 0xac6b, 0x5200, 0x07d9, 0xf7e3,
6619 +
            0xa23a, 0x5c51, 0x0988, 0xdc54, 0x898d, 0x77e6, 0x223f, 0xd205, 0x87dc, 0x79b7, 0x2c6e,
6620 +
            0xc0f6, 0x952f, 0x6b44, 0x3e9d, 0xcea7, 0x9b7e, 0x6515, 0x30cc, 0x9798, 0xc241, 0x3c2a,
6621 +
            0x69f3, 0x99c9, 0xcc10, 0x327b, 0x67a2, 0x8b3a, 0xdee3, 0x2088, 0x7551, 0x856b, 0xd0b2,
6622 +
            0x2ed9, 0x7b00, 0xaedc, 0xfb05, 0x056e, 0x50b7, 0xa08d, 0xf554, 0x0b3f, 0x5ee6, 0xb27e,
6623 +
            0xe7a7, 0x19cc, 0x4c15, 0xbc2f, 0xe9f6, 0x179d, 0x4244, 0x9315, 0xc6cc, 0x38a7, 0x6d7e,
6624 +
            0x9d44, 0xc89d, 0x36f6, 0x632f, 0x8fb7, 0xda6e, 0x2405, 0x71dc, 0x81e6, 0xd43f, 0x2a54,
6625 +
            0x7f8d, 0xaa51, 0xff88, 0x01e3, 0x543a, 0xa400, 0xf1d9, 0x0fb2, 0x5a6b, 0xb6f3, 0xe32a,
6626 +
            0x1d41, 0x4898, 0xb8a2, 0xed7b, 0x1310, 0x46c9, 0xe19d, 0xb444, 0x4a2f, 0x1ff6, 0xefcc,
6627 +
            0xba15, 0x447e, 0x11a7, 0xfd3f, 0xa8e6, 0x568d, 0x0354, 0xf36e, 0xa6b7, 0x58dc, 0x0d05,
6628 +
            0xd8d9, 0x8d00, 0x736b, 0x26b2, 0xd688, 0x8351, 0x7d3a, 0x28e3, 0xc47b, 0x91a2, 0x6fc9,
6629 +
            0x3a10, 0xca2a, 0x9ff3, 0x6198, 0x3441, 0x7605, 0x23dc, 0xddb7, 0x886e, 0x7854, 0x2d8d,
6630 +
            0xd3e6, 0x863f, 0x6aa7, 0x3f7e, 0xc115, 0x94cc, 0x64f6, 0x312f, 0xcf44, 0x9a9d, 0x4f41,
6631 +
            0x1a98, 0xe4f3, 0xb12a, 0x4110, 0x14c9, 0xeaa2, 0xbf7b, 0x53e3, 0x063a, 0xf851, 0xad88,
6632 +
            0x5db2, 0x086b, 0xf600, 0xa3d9, 0x048d, 0x5154, 0xaf3f, 0xfae6, 0x0adc, 0x5f05, 0xa16e,
6633 +
            0xf4b7, 0x182f, 0x4df6, 0xb39d, 0xe644, 0x167e, 0x43a7, 0xbdcc, 0xe815, 0x3dc9, 0x6810,
6634 +
            0x967b, 0xc3a2, 0x3398, 0x6641, 0x982a, 0xcdf3, 0x216b, 0x74b2, 0x8ad9, 0xdf00, 0x2f3a,
6635 +
            0x7ae3, 0x8488, 0xd151,
6636 +
        ],
6637 +
        [
6638 +
            0x0000, 0x7f1f, 0xfe3e, 0x8121, 0xa549, 0xda56, 0x5b77, 0x2468, 0x13a7, 0x6cb8, 0xed99,
6639 +
            0x9286, 0xb6ee, 0xc9f1, 0x48d0, 0x37cf, 0x274e, 0x5851, 0xd970, 0xa66f, 0x8207, 0xfd18,
6640 +
            0x7c39, 0x0326, 0x34e9, 0x4bf6, 0xcad7, 0xb5c8, 0x91a0, 0xeebf, 0x6f9e, 0x1081, 0x4e9c,
6641 +
            0x3183, 0xb0a2, 0xcfbd, 0xebd5, 0x94ca, 0x15eb, 0x6af4, 0x5d3b, 0x2224, 0xa305, 0xdc1a,
6642 +
            0xf872, 0x876d, 0x064c, 0x7953, 0x69d2, 0x16cd, 0x97ec, 0xe8f3, 0xcc9b, 0xb384, 0x32a5,
6643 +
            0x4dba, 0x7a75, 0x056a, 0x844b, 0xfb54, 0xdf3c, 0xa023, 0x2102, 0x5e1d, 0x9d38, 0xe227,
6644 +
            0x6306, 0x1c19, 0x3871, 0x476e, 0xc64f, 0xb950, 0x8e9f, 0xf180, 0x70a1, 0x0fbe, 0x2bd6,
6645 +
            0x54c9, 0xd5e8, 0xaaf7, 0xba76, 0xc569, 0x4448, 0x3b57, 0x1f3f, 0x6020, 0xe101, 0x9e1e,
6646 +
            0xa9d1, 0xd6ce, 0x57ef, 0x28f0, 0x0c98, 0x7387, 0xf2a6, 0x8db9, 0xd3a4, 0xacbb, 0x2d9a,
6647 +
            0x5285, 0x76ed, 0x09f2, 0x88d3, 0xf7cc, 0xc003, 0xbf1c, 0x3e3d, 0x4122, 0x654a, 0x1a55,
6648 +
            0x9b74, 0xe46b, 0xf4ea, 0x8bf5, 0x0ad4, 0x75cb, 0x51a3, 0x2ebc, 0xaf9d, 0xd082, 0xe74d,
6649 +
            0x9852, 0x1973, 0x666c, 0x4204, 0x3d1b, 0xbc3a, 0xc325, 0x6345, 0x1c5a, 0x9d7b, 0xe264,
6650 +
            0xc60c, 0xb913, 0x3832, 0x472d, 0x70e2, 0x0ffd, 0x8edc, 0xf1c3, 0xd5ab, 0xaab4, 0x2b95,
6651 +
            0x548a, 0x440b, 0x3b14, 0xba35, 0xc52a, 0xe142, 0x9e5d, 0x1f7c, 0x6063, 0x57ac, 0x28b3,
6652 +
            0xa992, 0xd68d, 0xf2e5, 0x8dfa, 0x0cdb, 0x73c4, 0x2dd9, 0x52c6, 0xd3e7, 0xacf8, 0x8890,
6653 +
            0xf78f, 0x76ae, 0x09b1, 0x3e7e, 0x4161, 0xc040, 0xbf5f, 0x9b37, 0xe428, 0x6509, 0x1a16,
6654 +
            0x0a97, 0x7588, 0xf4a9, 0x8bb6, 0xafde, 0xd0c1, 0x51e0, 0x2eff, 0x1930, 0x662f, 0xe70e,
6655 +
            0x9811, 0xbc79, 0xc366, 0x4247, 0x3d58, 0xfe7d, 0x8162, 0x0043, 0x7f5c, 0x5b34, 0x242b,
6656 +
            0xa50a, 0xda15, 0xedda, 0x92c5, 0x13e4, 0x6cfb, 0x4893, 0x378c, 0xb6ad, 0xc9b2, 0xd933,
6657 +
            0xa62c, 0x270d, 0x5812, 0x7c7a, 0x0365, 0x8244, 0xfd5b, 0xca94, 0xb58b, 0x34aa, 0x4bb5,
6658 +
            0x6fdd, 0x10c2, 0x91e3, 0xeefc, 0xb0e1, 0xcffe, 0x4edf, 0x31c0, 0x15a8, 0x6ab7, 0xeb96,
6659 +
            0x9489, 0xa346, 0xdc59, 0x5d78, 0x2267, 0x060f, 0x7910, 0xf831, 0x872e, 0x97af, 0xe8b0,
6660 +
            0x6991, 0x168e, 0x32e6, 0x4df9, 0xccd8, 0xb3c7, 0x8408, 0xfb17, 0x7a36, 0x0529, 0x2141,
6661 +
            0x5e5e, 0xdf7f, 0xa060,
6662 +
        ],
6663 +
        [
6664 +
            0x0000, 0xc68a, 0xd421, 0x12ab, 0xf177, 0x37fd, 0x2556, 0xe3dc, 0xbbdb, 0x7d51, 0x6ffa,
6665 +
            0xa970, 0x4aac, 0x8c26, 0x9e8d, 0x5807, 0x2e83, 0xe809, 0xfaa2, 0x3c28, 0xdff4, 0x197e,
6666 +
            0x0bd5, 0xcd5f, 0x9558, 0x53d2, 0x4179, 0x87f3, 0x642f, 0xa2a5, 0xb00e, 0x7684, 0x5d06,
6667 +
            0x9b8c, 0x8927, 0x4fad, 0xac71, 0x6afb, 0x7850, 0xbeda, 0xe6dd, 0x2057, 0x32fc, 0xf476,
6668 +
            0x17aa, 0xd120, 0xc38b, 0x0501, 0x7385, 0xb50f, 0xa7a4, 0x612e, 0x82f2, 0x4478, 0x56d3,
6669 +
            0x9059, 0xc85e, 0x0ed4, 0x1c7f, 0xdaf5, 0x3929, 0xffa3, 0xed08, 0x2b82, 0xba0c, 0x7c86,
6670 +
            0x6e2d, 0xa8a7, 0x4b7b, 0x8df1, 0x9f5a, 0x59d0, 0x01d7, 0xc75d, 0xd5f6, 0x137c, 0xf0a0,
6671 +
            0x362a, 0x2481, 0xe20b, 0x948f, 0x5205, 0x40ae, 0x8624, 0x65f8, 0xa372, 0xb1d9, 0x7753,
6672 +
            0x2f54, 0xe9de, 0xfb75, 0x3dff, 0xde23, 0x18a9, 0x0a02, 0xcc88, 0xe70a, 0x2180, 0x332b,
6673 +
            0xf5a1, 0x167d, 0xd0f7, 0xc25c, 0x04d6, 0x5cd1, 0x9a5b, 0x88f0, 0x4e7a, 0xada6, 0x6b2c,
6674 +
            0x7987, 0xbf0d, 0xc989, 0x0f03, 0x1da8, 0xdb22, 0x38fe, 0xfe74, 0xecdf, 0x2a55, 0x7252,
6675 +
            0xb4d8, 0xa673, 0x60f9, 0x8325, 0x45af, 0x5704, 0x918e, 0x2d2d, 0xeba7, 0xf90c, 0x3f86,
6676 +
            0xdc5a, 0x1ad0, 0x087b, 0xcef1, 0x96f6, 0x507c, 0x42d7, 0x845d, 0x6781, 0xa10b, 0xb3a0,
6677 +
            0x752a, 0x03ae, 0xc524, 0xd78f, 0x1105, 0xf2d9, 0x3453, 0x26f8, 0xe072, 0xb875, 0x7eff,
6678 +
            0x6c54, 0xaade, 0x4902, 0x8f88, 0x9d23, 0x5ba9, 0x702b, 0xb6a1, 0xa40a, 0x6280, 0x815c,
6679 +
            0x47d6, 0x557d, 0x93f7, 0xcbf0, 0x0d7a, 0x1fd1, 0xd95b, 0x3a87, 0xfc0d, 0xeea6, 0x282c,
6680 +
            0x5ea8, 0x9822, 0x8a89, 0x4c03, 0xafdf, 0x6955, 0x7bfe, 0xbd74, 0xe573, 0x23f9, 0x3152,
6681 +
            0xf7d8, 0x1404, 0xd28e, 0xc025, 0x06af, 0x9721, 0x51ab, 0x4300, 0x858a, 0x6656, 0xa0dc,
6682 +
            0xb277, 0x74fd, 0x2cfa, 0xea70, 0xf8db, 0x3e51, 0xdd8d, 0x1b07, 0x09ac, 0xcf26, 0xb9a2,
6683 +
            0x7f28, 0x6d83, 0xab09, 0x48d5, 0x8e5f, 0x9cf4, 0x5a7e, 0x0279, 0xc4f3, 0xd658, 0x10d2,
6684 +
            0xf30e, 0x3584, 0x272f, 0xe1a5, 0xca27, 0x0cad, 0x1e06, 0xd88c, 0x3b50, 0xfdda, 0xef71,
6685 +
            0x29fb, 0x71fc, 0xb776, 0xa5dd, 0x6357, 0x808b, 0x4601, 0x54aa, 0x9220, 0xe4a4, 0x222e,
6686 +
            0x3085, 0xf60f, 0x15d3, 0xd359, 0xc1f2, 0x0778, 0x5f7f, 0x99f5, 0x8b5e, 0x4dd4, 0xae08,
6687 +
            0x6882, 0x7a29, 0xbca3,
6688 +
        ],
6689 +
        [
6690 +
            0x0000, 0x5a5a, 0xb4b4, 0xeeee, 0x305d, 0x6a07, 0x84e9, 0xdeb3, 0x60ba, 0x3ae0, 0xd40e,
6691 +
            0x8e54, 0x50e7, 0x0abd, 0xe453, 0xbe09, 0xc174, 0x9b2e, 0x75c0, 0x2f9a, 0xf129, 0xab73,
6692 +
            0x459d, 0x1fc7, 0xa1ce, 0xfb94, 0x157a, 0x4f20, 0x9193, 0xcbc9, 0x2527, 0x7f7d, 0xdbdd,
6693 +
            0x8187, 0x6f69, 0x3533, 0xeb80, 0xb1da, 0x5f34, 0x056e, 0xbb67, 0xe13d, 0x0fd3, 0x5589,
6694 +
            0x8b3a, 0xd160, 0x3f8e, 0x65d4, 0x1aa9, 0x40f3, 0xae1d, 0xf447, 0x2af4, 0x70ae, 0x9e40,
6695 +
            0xc41a, 0x7a13, 0x2049, 0xcea7, 0x94fd, 0x4a4e, 0x1014, 0xfefa, 0xa4a0, 0xee8f, 0xb4d5,
6696 +
            0x5a3b, 0x0061, 0xded2, 0x8488, 0x6a66, 0x303c, 0x8e35, 0xd46f, 0x3a81, 0x60db, 0xbe68,
6697 +
            0xe432, 0x0adc, 0x5086, 0x2ffb, 0x75a1, 0x9b4f, 0xc115, 0x1fa6, 0x45fc, 0xab12, 0xf148,
6698 +
            0x4f41, 0x151b, 0xfbf5, 0xa1af, 0x7f1c, 0x2546, 0xcba8, 0x91f2, 0x3552, 0x6f08, 0x81e6,
6699 +
            0xdbbc, 0x050f, 0x5f55, 0xb1bb, 0xebe1, 0x55e8, 0x0fb2, 0xe15c, 0xbb06, 0x65b5, 0x3fef,
6700 +
            0xd101, 0x8b5b, 0xf426, 0xae7c, 0x4092, 0x1ac8, 0xc47b, 0x9e21, 0x70cf, 0x2a95, 0x949c,
6701 +
            0xcec6, 0x2028, 0x7a72, 0xa4c1, 0xfe9b, 0x1075, 0x4a2f, 0x842b, 0xde71, 0x309f, 0x6ac5,
6702 +
            0xb476, 0xee2c, 0x00c2, 0x5a98, 0xe491, 0xbecb, 0x5025, 0x0a7f, 0xd4cc, 0x8e96, 0x6078,
6703 +
            0x3a22, 0x455f, 0x1f05, 0xf1eb, 0xabb1, 0x7502, 0x2f58, 0xc1b6, 0x9bec, 0x25e5, 0x7fbf,
6704 +
            0x9151, 0xcb0b, 0x15b8, 0x4fe2, 0xa10c, 0xfb56, 0x5ff6, 0x05ac, 0xeb42, 0xb118, 0x6fab,
6705 +
            0x35f1, 0xdb1f, 0x8145, 0x3f4c, 0x6516, 0x8bf8, 0xd1a2, 0x0f11, 0x554b, 0xbba5, 0xe1ff,
6706 +
            0x9e82, 0xc4d8, 0x2a36, 0x706c, 0xaedf, 0xf485, 0x1a6b, 0x4031, 0xfe38, 0xa462, 0x4a8c,
6707 +
            0x10d6, 0xce65, 0x943f, 0x7ad1, 0x208b, 0x6aa4, 0x30fe, 0xde10, 0x844a, 0x5af9, 0x00a3,
6708 +
            0xee4d, 0xb417, 0x0a1e, 0x5044, 0xbeaa, 0xe4f0, 0x3a43, 0x6019, 0x8ef7, 0xd4ad, 0xabd0,
6709 +
            0xf18a, 0x1f64, 0x453e, 0x9b8d, 0xc1d7, 0x2f39, 0x7563, 0xcb6a, 0x9130, 0x7fde, 0x2584,
6710 +
            0xfb37, 0xa16d, 0x4f83, 0x15d9, 0xb179, 0xeb23, 0x05cd, 0x5f97, 0x8124, 0xdb7e, 0x3590,
6711 +
            0x6fca, 0xd1c3, 0x8b99, 0x6577, 0x3f2d, 0xe19e, 0xbbc4, 0x552a, 0x0f70, 0x700d, 0x2a57,
6712 +
            0xc4b9, 0x9ee3, 0x4050, 0x1a0a, 0xf4e4, 0xaebe, 0x10b7, 0x4aed, 0xa403, 0xfe59, 0x20ea,
6713 +
            0x7ab0, 0x945e, 0xce04,
6714 +
        ],
6715 +
    ];
6716 +
6717 +
    pub static CRC16_MAXIM_DOW_TABLE: [[u16; 256]; 16] = [
6718 +
        [
6719 +
            0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780,
6720 +
            0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1,
6721 +
            0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801,
6722 +
            0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40,
6723 +
            0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680,
6724 +
            0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0,
6725 +
            0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501,
6726 +
            0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
6727 +
            0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981,
6728 +
            0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1,
6729 +
            0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200,
6730 +
            0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141,
6731 +
            0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480,
6732 +
            0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0,
6733 +
            0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01,
6734 +
            0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
6735 +
            0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381,
6736 +
            0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0,
6737 +
            0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01,
6738 +
            0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40,
6739 +
            0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81,
6740 +
            0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1,
6741 +
            0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100,
6742 +
            0x81c1, 0x8081, 0x4040,
6743 +
        ],
6744 +
        [
6745 +
            0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006,
6746 +
            0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e,
6747 +
            0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019,
6748 +
            0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e,
6749 +
            0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017,
6750 +
            0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030,
6751 +
            0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034,
6752 +
            0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e,
6753 +
            0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029,
6754 +
            0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c,
6755 +
            0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022,
6756 +
            0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061,
6757 +
            0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065,
6758 +
            0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a,
6759 +
            0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a,
6760 +
            0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d,
6761 +
            0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073,
6762 +
            0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053,
6763 +
            0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d,
6764 +
            0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a,
6765 +
            0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a,
6766 +
            0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045,
6767 +
            0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041,
6768 +
            0x9040, 0x6040, 0xf041,
6769 +
        ],
6770 +
        [
6771 +
            0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220,
6772 +
            0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411,
6773 +
            0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01,
6774 +
            0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870,
6775 +
            0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0,
6776 +
            0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450,
6777 +
            0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1,
6778 +
            0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1,
6779 +
            0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1,
6780 +
            0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91,
6781 +
            0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980,
6782 +
            0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1,
6783 +
            0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60,
6784 +
            0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0,
6785 +
            0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341,
6786 +
            0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130,
6787 +
            0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521,
6788 +
            0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10,
6789 +
            0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901,
6790 +
            0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70,
6791 +
            0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1,
6792 +
            0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351,
6793 +
            0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0,
6794 +
            0xf091, 0xf061, 0x3030,
6795 +
        ],
6796 +
        [
6797 +
            0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803,
6798 +
            0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04,
6799 +
            0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b,
6800 +
            0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409,
6801 +
            0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f,
6802 +
            0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14,
6803 +
            0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016,
6804 +
            0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410,
6805 +
            0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f,
6806 +
            0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c,
6807 +
            0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018,
6808 +
            0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429,
6809 +
            0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b,
6810 +
            0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e,
6811 +
            0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023,
6812 +
            0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421,
6813 +
            0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825,
6814 +
            0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c,
6815 +
            0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038,
6816 +
            0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a,
6817 +
            0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837,
6818 +
            0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32,
6819 +
            0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030,
6820 +
            0xac31, 0xe831, 0x1430,
6821 +
        ],
6822 +
        [
6823 +
            0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198,
6824 +
            0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d,
6825 +
            0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781,
6826 +
            0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624,
6827 +
            0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8,
6828 +
            0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c,
6829 +
            0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11,
6830 +
            0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75,
6831 +
            0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9,
6832 +
            0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad,
6833 +
            0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0,
6834 +
            0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45,
6835 +
            0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68,
6836 +
            0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c,
6837 +
            0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971,
6838 +
            0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4,
6839 +
            0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9,
6840 +
            0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc,
6841 +
            0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1,
6842 +
            0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364,
6843 +
            0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609,
6844 +
            0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d,
6845 +
            0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450,
6846 +
            0xd46d, 0xd429, 0x1414,
6847 +
        ],
6848 +
        [
6849 +
            0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00,
6850 +
            0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502,
6851 +
            0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007,
6852 +
            0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06,
6853 +
            0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605,
6854 +
            0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f,
6855 +
            0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e,
6856 +
            0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d,
6857 +
            0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208,
6858 +
            0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08,
6859 +
            0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a,
6860 +
            0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f,
6861 +
            0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e,
6862 +
            0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d,
6863 +
            0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419,
6864 +
            0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18,
6865 +
            0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a,
6866 +
            0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511,
6867 +
            0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013,
6868 +
            0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12,
6869 +
            0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616,
6870 +
            0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115,
6871 +
            0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14,
6872 +
            0xed15, 0xde15, 0x0f14,
6873 +
        ],
6874 +
        [
6875 +
            0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa,
6876 +
            0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144,
6877 +
            0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221,
6878 +
            0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b,
6879 +
            0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356,
6880 +
            0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451,
6881 +
            0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d,
6882 +
            0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526,
6883 +
            0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643,
6884 +
            0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc,
6885 +
            0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8,
6886 +
            0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2,
6887 +
            0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e,
6888 +
            0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909,
6889 +
            0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5,
6890 +
            0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f,
6891 +
            0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b,
6892 +
            0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95,
6893 +
            0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1,
6894 +
            0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b,
6895 +
            0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87,
6896 +
            0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0,
6897 +
            0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c,
6898 +
            0xcf2c, 0xcf1f, 0x0f0f,
6899 +
        ],
6900 +
        [
6901 +
            0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80,
6902 +
            0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1,
6903 +
            0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802,
6904 +
            0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43,
6905 +
            0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83,
6906 +
            0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5,
6907 +
            0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504,
6908 +
            0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44,
6909 +
            0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187,
6910 +
            0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7,
6911 +
            0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206,
6912 +
            0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548,
6913 +
            0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89,
6914 +
            0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9,
6915 +
            0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b,
6916 +
            0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a,
6917 +
            0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b,
6918 +
            0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc,
6919 +
            0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d,
6920 +
            0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c,
6921 +
            0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e,
6922 +
            0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce,
6923 +
            0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f,
6924 +
            0xddce, 0xc88e, 0x044f,
6925 +
        ],
6926 +
        [
6927 +
            0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e,
6928 +
            0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2,
6929 +
            0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199,
6930 +
            0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea,
6931 +
            0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f,
6932 +
            0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c,
6933 +
            0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364,
6934 +
            0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da,
6935 +
            0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1,
6936 +
            0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0,
6937 +
            0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202,
6938 +
            0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675,
6939 +
            0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d,
6940 +
            0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6,
6941 +
            0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca,
6942 +
            0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9,
6943 +
            0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b,
6944 +
            0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f,
6945 +
            0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d,
6946 +
            0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee,
6947 +
            0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2,
6948 +
            0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409,
6949 +
            0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451,
6950 +
            0x945c, 0x6448, 0xf445,
6951 +
        ],
6952 +
        [
6953 +
            0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020,
6954 +
            0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511,
6955 +
            0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01,
6956 +
            0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70,
6957 +
            0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0,
6958 +
            0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153,
6959 +
            0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2,
6960 +
            0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2,
6961 +
            0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2,
6962 +
            0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492,
6963 +
            0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183,
6964 +
            0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7,
6965 +
            0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66,
6966 +
            0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6,
6967 +
            0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747,
6968 +
            0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236,
6969 +
            0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727,
6970 +
            0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15,
6971 +
            0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904,
6972 +
            0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75,
6973 +
            0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4,
6974 +
            0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654,
6975 +
            0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5,
6976 +
            0x3994, 0x3664, 0xf335,
6977 +
        ],
6978 +
        [
6979 +
            0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821,
6980 +
            0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45,
6981 +
            0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab,
6982 +
            0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e,
6983 +
            0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1,
6984 +
            0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51,
6985 +
            0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a,
6986 +
            0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b,
6987 +
            0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5,
6988 +
            0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5,
6989 +
            0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180,
6990 +
            0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6,
6991 +
            0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d,
6992 +
            0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3,
6993 +
            0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217,
6994 +
            0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632,
6995 +
            0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77,
6996 +
            0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed,
6997 +
            0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8,
6998 +
            0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d,
6999 +
            0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49,
7000 +
            0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07,
7001 +
            0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c,
7002 +
            0xaf38, 0xeb37, 0x1733,
7003 +
        ],
7004 +
        [
7005 +
            0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818,
7006 +
            0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd,
7007 +
            0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81,
7008 +
            0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464,
7009 +
            0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848,
7010 +
            0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc,
7011 +
            0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11,
7012 +
            0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35,
7013 +
            0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779,
7014 +
            0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d,
7015 +
            0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0,
7016 +
            0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06,
7017 +
            0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb,
7018 +
            0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf,
7019 +
            0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72,
7020 +
            0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597,
7021 +
            0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a,
7022 +
            0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f,
7023 +
            0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2,
7024 +
            0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527,
7025 +
            0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a,
7026 +
            0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be,
7027 +
            0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153,
7028 +
            0xd2ae, 0xd6aa, 0x1557,
7029 +
        ],
7030 +
        [
7031 +
            0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18,
7032 +
            0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532,
7033 +
            0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f,
7034 +
            0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65,
7035 +
            0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648,
7036 +
            0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc,
7037 +
            0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef,
7038 +
            0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb,
7039 +
            0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286,
7040 +
            0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92,
7041 +
            0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0,
7042 +
            0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa,
7043 +
            0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9,
7044 +
            0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc,
7045 +
            0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e,
7046 +
            0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94,
7047 +
            0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6,
7048 +
            0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d,
7049 +
            0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f,
7050 +
            0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25,
7051 +
            0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777,
7052 +
            0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042,
7053 +
            0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51,
7054 +
            0xbc53, 0x7f56, 0xfe54,
7055 +
        ],
7056 +
        [
7057 +
            0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a,
7058 +
            0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514,
7059 +
            0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021,
7060 +
            0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b,
7061 +
            0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636,
7062 +
            0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141,
7063 +
            0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d,
7064 +
            0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756,
7065 +
            0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263,
7066 +
            0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c,
7067 +
            0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878,
7068 +
            0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382,
7069 +
            0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e,
7070 +
            0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999,
7071 +
            0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5,
7072 +
            0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf,
7073 +
            0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb,
7074 +
            0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5,
7075 +
            0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1,
7076 +
            0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb,
7077 +
            0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7,
7078 +
            0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0,
7079 +
            0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc,
7080 +
            0x3dfc, 0x3eff, 0xffff,
7081 +
        ],
7082 +
        [
7083 +
            0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a,
7084 +
            0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5,
7085 +
            0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820,
7086 +
            0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b,
7087 +
            0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6,
7088 +
            0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081,
7089 +
            0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c,
7090 +
            0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17,
7091 +
            0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2,
7092 +
            0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad,
7093 +
            0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278,
7094 +
            0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3,
7095 +
            0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e,
7096 +
            0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59,
7097 +
            0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4,
7098 +
            0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef,
7099 +
            0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a,
7100 +
            0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305,
7101 +
            0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0,
7102 +
            0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b,
7103 +
            0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66,
7104 +
            0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431,
7105 +
            0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc,
7106 +
            0x413d, 0x407e, 0x40bf,
7107 +
        ],
7108 +
        [
7109 +
            0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786,
7110 +
            0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce,
7111 +
            0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819,
7112 +
            0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e,
7113 +
            0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697,
7114 +
            0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0,
7115 +
            0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534,
7116 +
            0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e,
7117 +
            0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9,
7118 +
            0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec,
7119 +
            0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222,
7120 +
            0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121,
7121 +
            0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5,
7122 +
            0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa,
7123 +
            0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a,
7124 +
            0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d,
7125 +
            0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3,
7126 +
            0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393,
7127 +
            0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d,
7128 +
            0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a,
7129 +
            0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca,
7130 +
            0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485,
7131 +
            0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141,
7132 +
            0xd180, 0x20c0, 0xb001,
7133 +
        ],
7134 +
    ];
7135 +
7136 +
    pub static CRC16_MCRF4XX_TABLE: [[u16; 256]; 16] = [
7137 +
        [
7138 +
            0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a,
7139 +
            0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c,
7140 +
            0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102,
7141 +
            0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1,
7142 +
            0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5,
7143 +
            0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d,
7144 +
            0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868,
7145 +
            0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
7146 +
            0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014,
7147 +
            0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3,
7148 +
            0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf,
7149 +
            0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693,
7150 +
            0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76,
7151 +
            0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948,
7152 +
            0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e,
7153 +
            0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
7154 +
            0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1,
7155 +
            0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1,
7156 +
            0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d,
7157 +
            0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e,
7158 +
            0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238,
7159 +
            0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606,
7160 +
            0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3,
7161 +
            0x2c6a, 0x1ef1, 0x0f78,
7162 +
        ],
7163 +
        [
7164 +
            0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70,
7165 +
            0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29,
7166 +
            0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333,
7167 +
            0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b,
7168 +
            0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272,
7169 +
            0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe,
7170 +
            0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6,
7171 +
            0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff,
7172 +
            0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5,
7173 +
            0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d,
7174 +
            0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04,
7175 +
            0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4,
7176 +
            0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc,
7177 +
            0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45,
7178 +
            0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f,
7179 +
            0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37,
7180 +
            0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e,
7181 +
            0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412,
7182 +
            0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b,
7183 +
            0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93,
7184 +
            0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49,
7185 +
            0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0,
7186 +
            0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8,
7187 +
            0xcc70, 0xe618, 0xffc0,
7188 +
        ],
7189 +
        [
7190 +
            0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a,
7191 +
            0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28,
7192 +
            0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b,
7193 +
            0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d,
7194 +
            0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077,
7195 +
            0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa,
7196 +
            0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5,
7197 +
            0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6,
7198 +
            0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5,
7199 +
            0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32,
7200 +
            0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a,
7201 +
            0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388,
7202 +
            0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7,
7203 +
            0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567,
7204 +
            0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6,
7205 +
            0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510,
7206 +
            0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938,
7207 +
            0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327,
7208 +
            0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f,
7209 +
            0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9,
7210 +
            0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78,
7211 +
            0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8,
7212 +
            0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997,
7213 +
            0x734b, 0x9c2f, 0xc6f3,
7214 +
        ],
7215 +
        [
7216 +
            0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae,
7217 +
            0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6,
7218 +
            0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53,
7219 +
            0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46,
7220 +
            0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768,
7221 +
            0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c,
7222 +
            0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183,
7223 +
            0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237,
7224 +
            0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092,
7225 +
            0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b,
7226 +
            0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d,
7227 +
            0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3,
7228 +
            0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c,
7229 +
            0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac,
7230 +
            0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1,
7231 +
            0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4,
7232 +
            0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32,
7233 +
            0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e,
7234 +
            0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878,
7235 +
            0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d,
7236 +
            0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10,
7237 +
            0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90,
7238 +
            0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f,
7239 +
            0xfca4, 0xd969, 0xc5d2,
7240 +
        ],
7241 +
        [
7242 +
            0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8,
7243 +
            0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214,
7244 +
            0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091,
7245 +
            0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d,
7246 +
            0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49,
7247 +
            0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66,
7248 +
            0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612,
7249 +
            0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be,
7250 +
            0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b,
7251 +
            0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7,
7252 +
            0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3,
7253 +
            0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799,
7254 +
            0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed,
7255 +
            0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71,
7256 +
            0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4,
7257 +
            0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038,
7258 +
            0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c,
7259 +
            0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23,
7260 +
            0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37,
7261 +
            0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db,
7262 +
            0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e,
7263 +
            0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2,
7264 +
            0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896,
7265 +
            0xe3d2, 0xfe1e, 0xf55a,
7266 +
        ],
7267 +
        [
7268 +
            0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e,
7269 +
            0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637,
7270 +
            0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560,
7271 +
            0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845,
7272 +
            0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a,
7273 +
            0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa,
7274 +
            0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325,
7275 +
            0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0,
7276 +
            0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7,
7277 +
            0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e,
7278 +
            0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459,
7279 +
            0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df,
7280 +
            0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00,
7281 +
            0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261,
7282 +
            0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e,
7283 +
            0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b,
7284 +
            0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c,
7285 +
            0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4,
7286 +
            0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3,
7287 +
            0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6,
7288 +
            0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9,
7289 +
            0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488,
7290 +
            0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157,
7291 +
            0xf57c, 0xf901, 0xfd2a,
7292 +
        ],
7293 +
        [
7294 +
            0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957,
7295 +
            0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a,
7296 +
            0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383,
7297 +
            0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501,
7298 +
            0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87,
7299 +
            0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3,
7300 +
            0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c,
7301 +
            0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7,
7302 +
            0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e,
7303 +
            0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca,
7304 +
            0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0,
7305 +
            0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73,
7306 +
            0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c,
7307 +
            0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed,
7308 +
            0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8,
7309 +
            0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a,
7310 +
            0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900,
7311 +
            0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8,
7312 +
            0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2,
7313 +
            0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250,
7314 +
            0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55,
7315 +
            0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884,
7316 +
            0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb,
7317 +
            0xb91e, 0x1170, 0x8ea5,
7318 +
        ],
7319 +
        [
7320 +
            0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3,
7321 +
            0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19,
7322 +
            0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0,
7323 +
            0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c,
7324 +
            0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039,
7325 +
            0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e,
7326 +
            0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93,
7327 +
            0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287,
7328 +
            0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e,
7329 +
            0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc,
7330 +
            0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5,
7331 +
            0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132,
7332 +
            0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef,
7333 +
            0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99,
7334 +
            0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc,
7335 +
            0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0,
7336 +
            0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9,
7337 +
            0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972,
7338 +
            0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b,
7339 +
            0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207,
7340 +
            0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552,
7341 +
            0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224,
7342 +
            0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9,
7343 +
            0xf946, 0x7396, 0xf229,
7344 +
        ],
7345 +
        [
7346 +
            0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430,
7347 +
            0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c,
7348 +
            0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739,
7349 +
            0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4,
7350 +
            0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2,
7351 +
            0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e,
7352 +
            0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c,
7353 +
            0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015,
7354 +
            0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0,
7355 +
            0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88,
7356 +
            0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104,
7357 +
            0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0,
7358 +
            0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02,
7359 +
            0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974,
7360 +
            0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b,
7361 +
            0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6,
7362 +
            0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a,
7363 +
            0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac,
7364 +
            0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20,
7365 +
            0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed,
7366 +
            0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192,
7367 +
            0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4,
7368 +
            0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36,
7369 +
            0x27cb, 0xf1cc, 0xbc31,
7370 +
        ],
7371 +
        [
7372 +
            0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167,
7373 +
            0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9,
7374 +
            0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5,
7375 +
            0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5,
7376 +
            0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635,
7377 +
            0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c,
7378 +
            0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce,
7379 +
            0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc,
7380 +
            0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580,
7381 +
            0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c,
7382 +
            0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5,
7383 +
            0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f,
7384 +
            0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d,
7385 +
            0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa,
7386 +
            0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf,
7387 +
            0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f,
7388 +
            0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76,
7389 +
            0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36,
7390 +
            0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df,
7391 +
            0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f,
7392 +
            0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea,
7393 +
            0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d,
7394 +
            0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df,
7395 +
            0x78f8, 0x0c91, 0x20b6,
7396 +
        ],
7397 +
        [
7398 +
            0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788,
7399 +
            0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81,
7400 +
            0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a,
7401 +
            0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093,
7402 +
            0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8,
7403 +
            0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894,
7404 +
            0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa,
7405 +
            0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6,
7406 +
            0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad,
7407 +
            0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1,
7408 +
            0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260,
7409 +
            0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8,
7410 +
            0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6,
7411 +
            0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65,
7412 +
            0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4,
7413 +
            0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd,
7414 +
            0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c,
7415 +
            0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da,
7416 +
            0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b,
7417 +
            0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42,
7418 +
            0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3,
7419 +
            0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940,
7420 +
            0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e,
7421 +
            0x7bbf, 0x850c, 0xd09d,
7422 +
        ],
7423 +
        [
7424 +
            0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857,
7425 +
            0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb,
7426 +
            0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0,
7427 +
            0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2,
7428 +
            0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5,
7429 +
            0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235,
7430 +
            0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa,
7431 +
            0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020,
7432 +
            0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b,
7433 +
            0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f,
7434 +
            0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4,
7435 +
            0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e,
7436 +
            0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1,
7437 +
            0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1,
7438 +
            0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006,
7439 +
            0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04,
7440 +
            0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff,
7441 +
            0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983,
7442 +
            0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78,
7443 +
            0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a,
7444 +
            0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd,
7445 +
            0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d,
7446 +
            0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852,
7447 +
            0x4d07, 0xcae9, 0x4fbc,
7448 +
        ],
7449 +
        [
7450 +
            0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632,
7451 +
            0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9,
7452 +
            0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0,
7453 +
            0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f,
7454 +
            0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e,
7455 +
            0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc,
7456 +
            0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d,
7457 +
            0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2,
7458 +
            0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab,
7459 +
            0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880,
7460 +
            0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149,
7461 +
            0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855,
7462 +
            0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624,
7463 +
            0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7,
7464 +
            0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6,
7465 +
            0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629,
7466 +
            0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0,
7467 +
            0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea,
7468 +
            0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23,
7469 +
            0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc,
7470 +
            0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd,
7471 +
            0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e,
7472 +
            0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f,
7473 +
            0x74f2, 0x7a05, 0x7fa8,
7474 +
        ],
7475 +
        [
7476 +
            0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7,
7477 +
            0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84,
7478 +
            0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf,
7479 +
            0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2,
7480 +
            0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05,
7481 +
            0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85,
7482 +
            0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5,
7483 +
            0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f,
7484 +
            0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04,
7485 +
            0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0,
7486 +
            0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64,
7487 +
            0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0,
7488 +
            0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0,
7489 +
            0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180,
7490 +
            0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8,
7491 +
            0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85,
7492 +
            0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701,
7493 +
            0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2,
7494 +
            0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366,
7495 +
            0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b,
7496 +
            0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63,
7497 +
            0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833,
7498 +
            0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03,
7499 +
            0xd4e9, 0x57d7, 0x293d,
7500 +
        ],
7501 +
        [
7502 +
            0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126,
7503 +
            0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277,
7504 +
            0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9,
7505 +
            0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5,
7506 +
            0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0,
7507 +
            0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398,
7508 +
            0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279,
7509 +
            0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991,
7510 +
            0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f,
7511 +
            0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a,
7512 +
            0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd,
7513 +
            0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b,
7514 +
            0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea,
7515 +
            0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9,
7516 +
            0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15,
7517 +
            0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319,
7518 +
            0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e,
7519 +
            0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454,
7520 +
            0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623,
7521 +
            0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f,
7522 +
            0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3,
7523 +
            0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0,
7524 +
            0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231,
7525 +
            0x7a1b, 0xa265, 0xea4f,
7526 +
        ],
7527 +
        [
7528 +
            0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5,
7529 +
            0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa,
7530 +
            0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01,
7531 +
            0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4,
7532 +
            0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da,
7533 +
            0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812,
7534 +
            0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4,
7535 +
            0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9,
7536 +
            0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932,
7537 +
            0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5,
7538 +
            0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f,
7539 +
            0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34,
7540 +
            0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882,
7541 +
            0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49,
7542 +
            0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776,
7543 +
            0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93,
7544 +
            0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69,
7545 +
            0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465,
7546 +
            0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f,
7547 +
            0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a,
7548 +
            0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545,
7549 +
            0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e,
7550 +
            0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038,
7551 +
            0xae28, 0x3409, 0xba19,
7552 +
        ],
7553 +
    ];
7554 +
7555 +
    pub static CRC16_MODBUS_TABLE: [[u16; 256]; 16] = [
7556 +
        [
7557 +
            0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780,
7558 +
            0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1,
7559 +
            0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801,
7560 +
            0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40,
7561 +
            0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680,
7562 +
            0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0,
7563 +
            0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501,
7564 +
            0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
7565 +
            0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981,
7566 +
            0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1,
7567 +
            0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200,
7568 +
            0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141,
7569 +
            0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480,
7570 +
            0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0,
7571 +
            0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01,
7572 +
            0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
7573 +
            0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381,
7574 +
            0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0,
7575 +
            0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01,
7576 +
            0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40,
7577 +
            0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81,
7578 +
            0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1,
7579 +
            0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100,
7580 +
            0x81c1, 0x8081, 0x4040,
7581 +
        ],
7582 +
        [
7583 +
            0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006,
7584 +
            0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e,
7585 +
            0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019,
7586 +
            0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e,
7587 +
            0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017,
7588 +
            0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030,
7589 +
            0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034,
7590 +
            0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e,
7591 +
            0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029,
7592 +
            0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c,
7593 +
            0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022,
7594 +
            0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061,
7595 +
            0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065,
7596 +
            0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a,
7597 +
            0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a,
7598 +
            0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d,
7599 +
            0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073,
7600 +
            0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053,
7601 +
            0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d,
7602 +
            0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a,
7603 +
            0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a,
7604 +
            0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045,
7605 +
            0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041,
7606 +
            0x9040, 0x6040, 0xf041,
7607 +
        ],
7608 +
        [
7609 +
            0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220,
7610 +
            0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411,
7611 +
            0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01,
7612 +
            0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870,
7613 +
            0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0,
7614 +
            0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450,
7615 +
            0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1,
7616 +
            0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1,
7617 +
            0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1,
7618 +
            0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91,
7619 +
            0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980,
7620 +
            0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1,
7621 +
            0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60,
7622 +
            0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0,
7623 +
            0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341,
7624 +
            0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130,
7625 +
            0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521,
7626 +
            0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10,
7627 +
            0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901,
7628 +
            0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70,
7629 +
            0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1,
7630 +
            0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351,
7631 +
            0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0,
7632 +
            0xf091, 0xf061, 0x3030,
7633 +
        ],
7634 +
        [
7635 +
            0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803,
7636 +
            0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04,
7637 +
            0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b,
7638 +
            0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409,
7639 +
            0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f,
7640 +
            0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14,
7641 +
            0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016,
7642 +
            0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410,
7643 +
            0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f,
7644 +
            0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c,
7645 +
            0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018,
7646 +
            0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429,
7647 +
            0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b,
7648 +
            0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e,
7649 +
            0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023,
7650 +
            0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421,
7651 +
            0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825,
7652 +
            0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c,
7653 +
            0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038,
7654 +
            0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a,
7655 +
            0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837,
7656 +
            0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32,
7657 +
            0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030,
7658 +
            0xac31, 0xe831, 0x1430,
7659 +
        ],
7660 +
        [
7661 +
            0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198,
7662 +
            0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d,
7663 +
            0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781,
7664 +
            0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624,
7665 +
            0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8,
7666 +
            0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c,
7667 +
            0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11,
7668 +
            0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75,
7669 +
            0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9,
7670 +
            0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad,
7671 +
            0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0,
7672 +
            0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45,
7673 +
            0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68,
7674 +
            0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c,
7675 +
            0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971,
7676 +
            0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4,
7677 +
            0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9,
7678 +
            0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc,
7679 +
            0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1,
7680 +
            0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364,
7681 +
            0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609,
7682 +
            0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d,
7683 +
            0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450,
7684 +
            0xd46d, 0xd429, 0x1414,
7685 +
        ],
7686 +
        [
7687 +
            0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00,
7688 +
            0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502,
7689 +
            0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007,
7690 +
            0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06,
7691 +
            0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605,
7692 +
            0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f,
7693 +
            0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e,
7694 +
            0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d,
7695 +
            0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208,
7696 +
            0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08,
7697 +
            0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a,
7698 +
            0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f,
7699 +
            0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e,
7700 +
            0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d,
7701 +
            0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419,
7702 +
            0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18,
7703 +
            0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a,
7704 +
            0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511,
7705 +
            0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013,
7706 +
            0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12,
7707 +
            0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616,
7708 +
            0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115,
7709 +
            0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14,
7710 +
            0xed15, 0xde15, 0x0f14,
7711 +
        ],
7712 +
        [
7713 +
            0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa,
7714 +
            0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144,
7715 +
            0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221,
7716 +
            0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b,
7717 +
            0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356,
7718 +
            0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451,
7719 +
            0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d,
7720 +
            0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526,
7721 +
            0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643,
7722 +
            0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc,
7723 +
            0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8,
7724 +
            0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2,
7725 +
            0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e,
7726 +
            0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909,
7727 +
            0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5,
7728 +
            0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f,
7729 +
            0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b,
7730 +
            0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95,
7731 +
            0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1,
7732 +
            0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b,
7733 +
            0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87,
7734 +
            0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0,
7735 +
            0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c,
7736 +
            0xcf2c, 0xcf1f, 0x0f0f,
7737 +
        ],
7738 +
        [
7739 +
            0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80,
7740 +
            0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1,
7741 +
            0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802,
7742 +
            0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43,
7743 +
            0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83,
7744 +
            0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5,
7745 +
            0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504,
7746 +
            0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44,
7747 +
            0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187,
7748 +
            0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7,
7749 +
            0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206,
7750 +
            0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548,
7751 +
            0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89,
7752 +
            0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9,
7753 +
            0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b,
7754 +
            0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a,
7755 +
            0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b,
7756 +
            0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc,
7757 +
            0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d,
7758 +
            0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c,
7759 +
            0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e,
7760 +
            0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce,
7761 +
            0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f,
7762 +
            0xddce, 0xc88e, 0x044f,
7763 +
        ],
7764 +
        [
7765 +
            0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e,
7766 +
            0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2,
7767 +
            0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199,
7768 +
            0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea,
7769 +
            0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f,
7770 +
            0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c,
7771 +
            0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364,
7772 +
            0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da,
7773 +
            0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1,
7774 +
            0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0,
7775 +
            0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202,
7776 +
            0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675,
7777 +
            0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d,
7778 +
            0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6,
7779 +
            0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca,
7780 +
            0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9,
7781 +
            0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b,
7782 +
            0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f,
7783 +
            0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d,
7784 +
            0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee,
7785 +
            0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2,
7786 +
            0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409,
7787 +
            0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451,
7788 +
            0x945c, 0x6448, 0xf445,
7789 +
        ],
7790 +
        [
7791 +
            0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020,
7792 +
            0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511,
7793 +
            0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01,
7794 +
            0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70,
7795 +
            0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0,
7796 +
            0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153,
7797 +
            0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2,
7798 +
            0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2,
7799 +
            0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2,
7800 +
            0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492,
7801 +
            0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183,
7802 +
            0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7,
7803 +
            0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66,
7804 +
            0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6,
7805 +
            0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747,
7806 +
            0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236,
7807 +
            0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727,
7808 +
            0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15,
7809 +
            0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904,
7810 +
            0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75,
7811 +
            0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4,
7812 +
            0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654,
7813 +
            0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5,
7814 +
            0x3994, 0x3664, 0xf335,
7815 +
        ],
7816 +
        [
7817 +
            0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821,
7818 +
            0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45,
7819 +
            0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab,
7820 +
            0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e,
7821 +
            0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1,
7822 +
            0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51,
7823 +
            0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a,
7824 +
            0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b,
7825 +
            0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5,
7826 +
            0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5,
7827 +
            0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180,
7828 +
            0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6,
7829 +
            0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d,
7830 +
            0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3,
7831 +
            0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217,
7832 +
            0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632,
7833 +
            0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77,
7834 +
            0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed,
7835 +
            0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8,
7836 +
            0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d,
7837 +
            0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49,
7838 +
            0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07,
7839 +
            0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c,
7840 +
            0xaf38, 0xeb37, 0x1733,
7841 +
        ],
7842 +
        [
7843 +
            0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818,
7844 +
            0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd,
7845 +
            0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81,
7846 +
            0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464,
7847 +
            0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848,
7848 +
            0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc,
7849 +
            0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11,
7850 +
            0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35,
7851 +
            0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779,
7852 +
            0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d,
7853 +
            0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0,
7854 +
            0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06,
7855 +
            0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb,
7856 +
            0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf,
7857 +
            0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72,
7858 +
            0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597,
7859 +
            0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a,
7860 +
            0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f,
7861 +
            0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2,
7862 +
            0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527,
7863 +
            0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a,
7864 +
            0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be,
7865 +
            0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153,
7866 +
            0xd2ae, 0xd6aa, 0x1557,
7867 +
        ],
7868 +
        [
7869 +
            0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18,
7870 +
            0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532,
7871 +
            0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f,
7872 +
            0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65,
7873 +
            0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648,
7874 +
            0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc,
7875 +
            0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef,
7876 +
            0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb,
7877 +
            0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286,
7878 +
            0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92,
7879 +
            0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0,
7880 +
            0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa,
7881 +
            0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9,
7882 +
            0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc,
7883 +
            0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e,
7884 +
            0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94,
7885 +
            0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6,
7886 +
            0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d,
7887 +
            0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f,
7888 +
            0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25,
7889 +
            0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777,
7890 +
            0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042,
7891 +
            0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51,
7892 +
            0xbc53, 0x7f56, 0xfe54,
7893 +
        ],
7894 +
        [
7895 +
            0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a,
7896 +
            0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514,
7897 +
            0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021,
7898 +
            0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b,
7899 +
            0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636,
7900 +
            0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141,
7901 +
            0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d,
7902 +
            0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756,
7903 +
            0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263,
7904 +
            0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c,
7905 +
            0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878,
7906 +
            0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382,
7907 +
            0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e,
7908 +
            0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999,
7909 +
            0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5,
7910 +
            0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf,
7911 +
            0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb,
7912 +
            0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5,
7913 +
            0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1,
7914 +
            0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb,
7915 +
            0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7,
7916 +
            0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0,
7917 +
            0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc,
7918 +
            0x3dfc, 0x3eff, 0xffff,
7919 +
        ],
7920 +
        [
7921 +
            0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a,
7922 +
            0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5,
7923 +
            0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820,
7924 +
            0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b,
7925 +
            0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6,
7926 +
            0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081,
7927 +
            0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c,
7928 +
            0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17,
7929 +
            0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2,
7930 +
            0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad,
7931 +
            0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278,
7932 +
            0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3,
7933 +
            0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e,
7934 +
            0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59,
7935 +
            0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4,
7936 +
            0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef,
7937 +
            0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a,
7938 +
            0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305,
7939 +
            0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0,
7940 +
            0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b,
7941 +
            0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66,
7942 +
            0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431,
7943 +
            0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc,
7944 +
            0x413d, 0x407e, 0x40bf,
7945 +
        ],
7946 +
        [
7947 +
            0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786,
7948 +
            0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce,
7949 +
            0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819,
7950 +
            0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e,
7951 +
            0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697,
7952 +
            0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0,
7953 +
            0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534,
7954 +
            0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e,
7955 +
            0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9,
7956 +
            0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec,
7957 +
            0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222,
7958 +
            0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121,
7959 +
            0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5,
7960 +
            0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa,
7961 +
            0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a,
7962 +
            0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d,
7963 +
            0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3,
7964 +
            0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393,
7965 +
            0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d,
7966 +
            0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a,
7967 +
            0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca,
7968 +
            0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485,
7969 +
            0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141,
7970 +
            0xd180, 0x20c0, 0xb001,
7971 +
        ],
7972 +
    ];
7973 +
7974 +
    pub static CRC16_NRSC_5_TABLE: [[u16; 256]; 16] = [
7975 +
        [
7976 +
            0x0000, 0x35a4, 0x6b48, 0x5eec, 0xd690, 0xe334, 0xbdd8, 0x887c, 0x0d01, 0x38a5, 0x6649,
7977 +
            0x53ed, 0xdb91, 0xee35, 0xb0d9, 0x857d, 0x1a02, 0x2fa6, 0x714a, 0x44ee, 0xcc92, 0xf936,
7978 +
            0xa7da, 0x927e, 0x1703, 0x22a7, 0x7c4b, 0x49ef, 0xc193, 0xf437, 0xaadb, 0x9f7f, 0x3404,
7979 +
            0x01a0, 0x5f4c, 0x6ae8, 0xe294, 0xd730, 0x89dc, 0xbc78, 0x3905, 0x0ca1, 0x524d, 0x67e9,
7980 +
            0xef95, 0xda31, 0x84dd, 0xb179, 0x2e06, 0x1ba2, 0x454e, 0x70ea, 0xf896, 0xcd32, 0x93de,
7981 +
            0xa67a, 0x2307, 0x16a3, 0x484f, 0x7deb, 0xf597, 0xc033, 0x9edf, 0xab7b, 0x6808, 0x5dac,
7982 +
            0x0340, 0x36e4, 0xbe98, 0x8b3c, 0xd5d0, 0xe074, 0x6509, 0x50ad, 0x0e41, 0x3be5, 0xb399,
7983 +
            0x863d, 0xd8d1, 0xed75, 0x720a, 0x47ae, 0x1942, 0x2ce6, 0xa49a, 0x913e, 0xcfd2, 0xfa76,
7984 +
            0x7f0b, 0x4aaf, 0x1443, 0x21e7, 0xa99b, 0x9c3f, 0xc2d3, 0xf777, 0x5c0c, 0x69a8, 0x3744,
7985 +
            0x02e0, 0x8a9c, 0xbf38, 0xe1d4, 0xd470, 0x510d, 0x64a9, 0x3a45, 0x0fe1, 0x879d, 0xb239,
7986 +
            0xecd5, 0xd971, 0x460e, 0x73aa, 0x2d46, 0x18e2, 0x909e, 0xa53a, 0xfbd6, 0xce72, 0x4b0f,
7987 +
            0x7eab, 0x2047, 0x15e3, 0x9d9f, 0xa83b, 0xf6d7, 0xc373, 0xd010, 0xe5b4, 0xbb58, 0x8efc,
7988 +
            0x0680, 0x3324, 0x6dc8, 0x586c, 0xdd11, 0xe8b5, 0xb659, 0x83fd, 0x0b81, 0x3e25, 0x60c9,
7989 +
            0x556d, 0xca12, 0xffb6, 0xa15a, 0x94fe, 0x1c82, 0x2926, 0x77ca, 0x426e, 0xc713, 0xf2b7,
7990 +
            0xac5b, 0x99ff, 0x1183, 0x2427, 0x7acb, 0x4f6f, 0xe414, 0xd1b0, 0x8f5c, 0xbaf8, 0x3284,
7991 +
            0x0720, 0x59cc, 0x6c68, 0xe915, 0xdcb1, 0x825d, 0xb7f9, 0x3f85, 0x0a21, 0x54cd, 0x6169,
7992 +
            0xfe16, 0xcbb2, 0x955e, 0xa0fa, 0x2886, 0x1d22, 0x43ce, 0x766a, 0xf317, 0xc6b3, 0x985f,
7993 +
            0xadfb, 0x2587, 0x1023, 0x4ecf, 0x7b6b, 0xb818, 0x8dbc, 0xd350, 0xe6f4, 0x6e88, 0x5b2c,
7994 +
            0x05c0, 0x3064, 0xb519, 0x80bd, 0xde51, 0xebf5, 0x6389, 0x562d, 0x08c1, 0x3d65, 0xa21a,
7995 +
            0x97be, 0xc952, 0xfcf6, 0x748a, 0x412e, 0x1fc2, 0x2a66, 0xaf1b, 0x9abf, 0xc453, 0xf1f7,
7996 +
            0x798b, 0x4c2f, 0x12c3, 0x2767, 0x8c1c, 0xb9b8, 0xe754, 0xd2f0, 0x5a8c, 0x6f28, 0x31c4,
7997 +
            0x0460, 0x811d, 0xb4b9, 0xea55, 0xdff1, 0x578d, 0x6229, 0x3cc5, 0x0961, 0x961e, 0xa3ba,
7998 +
            0xfd56, 0xc8f2, 0x408e, 0x752a, 0x2bc6, 0x1e62, 0x9b1f, 0xaebb, 0xf057, 0xc5f3, 0x4d8f,
7999 +
            0x782b, 0x26c7, 0x1363,
8000 +
        ],
8001 +
        [
8002 +
            0x0000, 0x32b1, 0x6562, 0x57d3, 0xcac4, 0xf875, 0xafa6, 0x9d17, 0x35a9, 0x0718, 0x50cb,
8003 +
            0x627a, 0xff6d, 0xcddc, 0x9a0f, 0xa8be, 0x6b52, 0x59e3, 0x0e30, 0x3c81, 0xa196, 0x9327,
8004 +
            0xc4f4, 0xf645, 0x5efb, 0x6c4a, 0x3b99, 0x0928, 0x943f, 0xa68e, 0xf15d, 0xc3ec, 0xd6a4,
8005 +
            0xe415, 0xb3c6, 0x8177, 0x1c60, 0x2ed1, 0x7902, 0x4bb3, 0xe30d, 0xd1bc, 0x866f, 0xb4de,
8006 +
            0x29c9, 0x1b78, 0x4cab, 0x7e1a, 0xbdf6, 0x8f47, 0xd894, 0xea25, 0x7732, 0x4583, 0x1250,
8007 +
            0x20e1, 0x885f, 0xbaee, 0xed3d, 0xdf8c, 0x429b, 0x702a, 0x27f9, 0x1548, 0x0d69, 0x3fd8,
8008 +
            0x680b, 0x5aba, 0xc7ad, 0xf51c, 0xa2cf, 0x907e, 0x38c0, 0x0a71, 0x5da2, 0x6f13, 0xf204,
8009 +
            0xc0b5, 0x9766, 0xa5d7, 0x663b, 0x548a, 0x0359, 0x31e8, 0xacff, 0x9e4e, 0xc99d, 0xfb2c,
8010 +
            0x5392, 0x6123, 0x36f0, 0x0441, 0x9956, 0xabe7, 0xfc34, 0xce85, 0xdbcd, 0xe97c, 0xbeaf,
8011 +
            0x8c1e, 0x1109, 0x23b8, 0x746b, 0x46da, 0xee64, 0xdcd5, 0x8b06, 0xb9b7, 0x24a0, 0x1611,
8012 +
            0x41c2, 0x7373, 0xb09f, 0x822e, 0xd5fd, 0xe74c, 0x7a5b, 0x48ea, 0x1f39, 0x2d88, 0x8536,
8013 +
            0xb787, 0xe054, 0xd2e5, 0x4ff2, 0x7d43, 0x2a90, 0x1821, 0x1ad2, 0x2863, 0x7fb0, 0x4d01,
8014 +
            0xd016, 0xe2a7, 0xb574, 0x87c5, 0x2f7b, 0x1dca, 0x4a19, 0x78a8, 0xe5bf, 0xd70e, 0x80dd,
8015 +
            0xb26c, 0x7180, 0x4331, 0x14e2, 0x2653, 0xbb44, 0x89f5, 0xde26, 0xec97, 0x4429, 0x7698,
8016 +
            0x214b, 0x13fa, 0x8eed, 0xbc5c, 0xeb8f, 0xd93e, 0xcc76, 0xfec7, 0xa914, 0x9ba5, 0x06b2,
8017 +
            0x3403, 0x63d0, 0x5161, 0xf9df, 0xcb6e, 0x9cbd, 0xae0c, 0x331b, 0x01aa, 0x5679, 0x64c8,
8018 +
            0xa724, 0x9595, 0xc246, 0xf0f7, 0x6de0, 0x5f51, 0x0882, 0x3a33, 0x928d, 0xa03c, 0xf7ef,
8019 +
            0xc55e, 0x5849, 0x6af8, 0x3d2b, 0x0f9a, 0x17bb, 0x250a, 0x72d9, 0x4068, 0xdd7f, 0xefce,
8020 +
            0xb81d, 0x8aac, 0x2212, 0x10a3, 0x4770, 0x75c1, 0xe8d6, 0xda67, 0x8db4, 0xbf05, 0x7ce9,
8021 +
            0x4e58, 0x198b, 0x2b3a, 0xb62d, 0x849c, 0xd34f, 0xe1fe, 0x4940, 0x7bf1, 0x2c22, 0x1e93,
8022 +
            0x8384, 0xb135, 0xe6e6, 0xd457, 0xc11f, 0xf3ae, 0xa47d, 0x96cc, 0x0bdb, 0x396a, 0x6eb9,
8023 +
            0x5c08, 0xf4b6, 0xc607, 0x91d4, 0xa365, 0x3e72, 0x0cc3, 0x5b10, 0x69a1, 0xaa4d, 0x98fc,
8024 +
            0xcf2f, 0xfd9e, 0x6089, 0x5238, 0x05eb, 0x375a, 0x9fe4, 0xad55, 0xfa86, 0xc837, 0x5520,
8025 +
            0x6791, 0x3042, 0x02f3,
8026 +
        ],
8027 +
        [
8028 +
            0x0000, 0xcb80, 0x3721, 0xfca1, 0x6e42, 0xa5c2, 0x5963, 0x92e3, 0xdc84, 0x1704, 0xeba5,
8029 +
            0x2025, 0xb2c6, 0x7946, 0x85e7, 0x4e67, 0x1929, 0xd2a9, 0x2e08, 0xe588, 0x776b, 0xbceb,
8030 +
            0x404a, 0x8bca, 0xc5ad, 0x0e2d, 0xf28c, 0x390c, 0xabef, 0x606f, 0x9cce, 0x574e, 0x3252,
8031 +
            0xf9d2, 0x0573, 0xcef3, 0x5c10, 0x9790, 0x6b31, 0xa0b1, 0xeed6, 0x2556, 0xd9f7, 0x1277,
8032 +
            0x8094, 0x4b14, 0xb7b5, 0x7c35, 0x2b7b, 0xe0fb, 0x1c5a, 0xd7da, 0x4539, 0x8eb9, 0x7218,
8033 +
            0xb998, 0xf7ff, 0x3c7f, 0xc0de, 0x0b5e, 0x99bd, 0x523d, 0xae9c, 0x651c, 0x64a4, 0xaf24,
8034 +
            0x5385, 0x9805, 0x0ae6, 0xc166, 0x3dc7, 0xf647, 0xb820, 0x73a0, 0x8f01, 0x4481, 0xd662,
8035 +
            0x1de2, 0xe143, 0x2ac3, 0x7d8d, 0xb60d, 0x4aac, 0x812c, 0x13cf, 0xd84f, 0x24ee, 0xef6e,
8036 +
            0xa109, 0x6a89, 0x9628, 0x5da8, 0xcf4b, 0x04cb, 0xf86a, 0x33ea, 0x56f6, 0x9d76, 0x61d7,
8037 +
            0xaa57, 0x38b4, 0xf334, 0x0f95, 0xc415, 0x8a72, 0x41f2, 0xbd53, 0x76d3, 0xe430, 0x2fb0,
8038 +
            0xd311, 0x1891, 0x4fdf, 0x845f, 0x78fe, 0xb37e, 0x219d, 0xea1d, 0x16bc, 0xdd3c, 0x935b,
8039 +
            0x58db, 0xa47a, 0x6ffa, 0xfd19, 0x3699, 0xca38, 0x01b8, 0xc948, 0x02c8, 0xfe69, 0x35e9,
8040 +
            0xa70a, 0x6c8a, 0x902b, 0x5bab, 0x15cc, 0xde4c, 0x22ed, 0xe96d, 0x7b8e, 0xb00e, 0x4caf,
8041 +
            0x872f, 0xd061, 0x1be1, 0xe740, 0x2cc0, 0xbe23, 0x75a3, 0x8902, 0x4282, 0x0ce5, 0xc765,
8042 +
            0x3bc4, 0xf044, 0x62a7, 0xa927, 0x5586, 0x9e06, 0xfb1a, 0x309a, 0xcc3b, 0x07bb, 0x9558,
8043 +
            0x5ed8, 0xa279, 0x69f9, 0x279e, 0xec1e, 0x10bf, 0xdb3f, 0x49dc, 0x825c, 0x7efd, 0xb57d,
8044 +
            0xe233, 0x29b3, 0xd512, 0x1e92, 0x8c71, 0x47f1, 0xbb50, 0x70d0, 0x3eb7, 0xf537, 0x0996,
8045 +
            0xc216, 0x50f5, 0x9b75, 0x67d4, 0xac54, 0xadec, 0x666c, 0x9acd, 0x514d, 0xc3ae, 0x082e,
8046 +
            0xf48f, 0x3f0f, 0x7168, 0xbae8, 0x4649, 0x8dc9, 0x1f2a, 0xd4aa, 0x280b, 0xe38b, 0xb4c5,
8047 +
            0x7f45, 0x83e4, 0x4864, 0xda87, 0x1107, 0xeda6, 0x2626, 0x6841, 0xa3c1, 0x5f60, 0x94e0,
8048 +
            0x0603, 0xcd83, 0x3122, 0xfaa2, 0x9fbe, 0x543e, 0xa89f, 0x631f, 0xf1fc, 0x3a7c, 0xc6dd,
8049 +
            0x0d5d, 0x433a, 0x88ba, 0x741b, 0xbf9b, 0x2d78, 0xe6f8, 0x1a59, 0xd1d9, 0x8697, 0x4d17,
8050 +
            0xb1b6, 0x7a36, 0xe8d5, 0x2355, 0xdff4, 0x1474, 0x5a13, 0x9193, 0x6d32, 0xa6b2, 0x3451,
8051 +
            0xffd1, 0x0370, 0xc8f0,
8052 +
        ],
8053 +
        [
8054 +
            0x0000, 0xd0db, 0x0197, 0xd14c, 0x032e, 0xd3f5, 0x02b9, 0xd262, 0x065c, 0xd687, 0x07cb,
8055 +
            0xd710, 0x0572, 0xd5a9, 0x04e5, 0xd43e, 0x0cb8, 0xdc63, 0x0d2f, 0xddf4, 0x0f96, 0xdf4d,
8056 +
            0x0e01, 0xdeda, 0x0ae4, 0xda3f, 0x0b73, 0xdba8, 0x09ca, 0xd911, 0x085d, 0xd886, 0x1970,
8057 +
            0xc9ab, 0x18e7, 0xc83c, 0x1a5e, 0xca85, 0x1bc9, 0xcb12, 0x1f2c, 0xcff7, 0x1ebb, 0xce60,
8058 +
            0x1c02, 0xccd9, 0x1d95, 0xcd4e, 0x15c8, 0xc513, 0x145f, 0xc484, 0x16e6, 0xc63d, 0x1771,
8059 +
            0xc7aa, 0x1394, 0xc34f, 0x1203, 0xc2d8, 0x10ba, 0xc061, 0x112d, 0xc1f6, 0x32e0, 0xe23b,
8060 +
            0x3377, 0xe3ac, 0x31ce, 0xe115, 0x3059, 0xe082, 0x34bc, 0xe467, 0x352b, 0xe5f0, 0x3792,
8061 +
            0xe749, 0x3605, 0xe6de, 0x3e58, 0xee83, 0x3fcf, 0xef14, 0x3d76, 0xedad, 0x3ce1, 0xec3a,
8062 +
            0x3804, 0xe8df, 0x3993, 0xe948, 0x3b2a, 0xebf1, 0x3abd, 0xea66, 0x2b90, 0xfb4b, 0x2a07,
8063 +
            0xfadc, 0x28be, 0xf865, 0x2929, 0xf9f2, 0x2dcc, 0xfd17, 0x2c5b, 0xfc80, 0x2ee2, 0xfe39,
8064 +
            0x2f75, 0xffae, 0x2728, 0xf7f3, 0x26bf, 0xf664, 0x2406, 0xf4dd, 0x2591, 0xf54a, 0x2174,
8065 +
            0xf1af, 0x20e3, 0xf038, 0x225a, 0xf281, 0x23cd, 0xf316, 0x65c0, 0xb51b, 0x6457, 0xb48c,
8066 +
            0x66ee, 0xb635, 0x6779, 0xb7a2, 0x639c, 0xb347, 0x620b, 0xb2d0, 0x60b2, 0xb069, 0x6125,
8067 +
            0xb1fe, 0x6978, 0xb9a3, 0x68ef, 0xb834, 0x6a56, 0xba8d, 0x6bc1, 0xbb1a, 0x6f24, 0xbfff,
8068 +
            0x6eb3, 0xbe68, 0x6c0a, 0xbcd1, 0x6d9d, 0xbd46, 0x7cb0, 0xac6b, 0x7d27, 0xadfc, 0x7f9e,
8069 +
            0xaf45, 0x7e09, 0xaed2, 0x7aec, 0xaa37, 0x7b7b, 0xaba0, 0x79c2, 0xa919, 0x7855, 0xa88e,
8070 +
            0x7008, 0xa0d3, 0x719f, 0xa144, 0x7326, 0xa3fd, 0x72b1, 0xa26a, 0x7654, 0xa68f, 0x77c3,
8071 +
            0xa718, 0x757a, 0xa5a1, 0x74ed, 0xa436, 0x5720, 0x87fb, 0x56b7, 0x866c, 0x540e, 0x84d5,
8072 +
            0x5599, 0x8542, 0x517c, 0x81a7, 0x50eb, 0x8030, 0x5252, 0x8289, 0x53c5, 0x831e, 0x5b98,
8073 +
            0x8b43, 0x5a0f, 0x8ad4, 0x58b6, 0x886d, 0x5921, 0x89fa, 0x5dc4, 0x8d1f, 0x5c53, 0x8c88,
8074 +
            0x5eea, 0x8e31, 0x5f7d, 0x8fa6, 0x4e50, 0x9e8b, 0x4fc7, 0x9f1c, 0x4d7e, 0x9da5, 0x4ce9,
8075 +
            0x9c32, 0x480c, 0x98d7, 0x499b, 0x9940, 0x4b22, 0x9bf9, 0x4ab5, 0x9a6e, 0x42e8, 0x9233,
8076 +
            0x437f, 0x93a4, 0x41c6, 0x911d, 0x4051, 0x908a, 0x44b4, 0x946f, 0x4523, 0x95f8, 0x479a,
8077 +
            0x9741, 0x460d, 0x96d6,
8078 +
        ],
8079 +
        [
8080 +
            0x0000, 0xf127, 0x426f, 0xb348, 0x84de, 0x75f9, 0xc6b1, 0x3796, 0xa99d, 0x58ba, 0xebf2,
8081 +
            0x1ad5, 0x2d43, 0xdc64, 0x6f2c, 0x9e0b, 0xf31b, 0x023c, 0xb174, 0x4053, 0x77c5, 0x86e2,
8082 +
            0x35aa, 0xc48d, 0x5a86, 0xaba1, 0x18e9, 0xe9ce, 0xde58, 0x2f7f, 0x9c37, 0x6d10, 0x4617,
8083 +
            0xb730, 0x0478, 0xf55f, 0xc2c9, 0x33ee, 0x80a6, 0x7181, 0xef8a, 0x1ead, 0xade5, 0x5cc2,
8084 +
            0x6b54, 0x9a73, 0x293b, 0xd81c, 0xb50c, 0x442b, 0xf763, 0x0644, 0x31d2, 0xc0f5, 0x73bd,
8085 +
            0x829a, 0x1c91, 0xedb6, 0x5efe, 0xafd9, 0x984f, 0x6968, 0xda20, 0x2b07, 0x8c2e, 0x7d09,
8086 +
            0xce41, 0x3f66, 0x08f0, 0xf9d7, 0x4a9f, 0xbbb8, 0x25b3, 0xd494, 0x67dc, 0x96fb, 0xa16d,
8087 +
            0x504a, 0xe302, 0x1225, 0x7f35, 0x8e12, 0x3d5a, 0xcc7d, 0xfbeb, 0x0acc, 0xb984, 0x48a3,
8088 +
            0xd6a8, 0x278f, 0x94c7, 0x65e0, 0x5276, 0xa351, 0x1019, 0xe13e, 0xca39, 0x3b1e, 0x8856,
8089 +
            0x7971, 0x4ee7, 0xbfc0, 0x0c88, 0xfdaf, 0x63a4, 0x9283, 0x21cb, 0xd0ec, 0xe77a, 0x165d,
8090 +
            0xa515, 0x5432, 0x3922, 0xc805, 0x7b4d, 0x8a6a, 0xbdfc, 0x4cdb, 0xff93, 0x0eb4, 0x90bf,
8091 +
            0x6198, 0xd2d0, 0x23f7, 0x1461, 0xe546, 0x560e, 0xa729, 0xb87d, 0x495a, 0xfa12, 0x0b35,
8092 +
            0x3ca3, 0xcd84, 0x7ecc, 0x8feb, 0x11e0, 0xe0c7, 0x538f, 0xa2a8, 0x953e, 0x6419, 0xd751,
8093 +
            0x2676, 0x4b66, 0xba41, 0x0909, 0xf82e, 0xcfb8, 0x3e9f, 0x8dd7, 0x7cf0, 0xe2fb, 0x13dc,
8094 +
            0xa094, 0x51b3, 0x6625, 0x9702, 0x244a, 0xd56d, 0xfe6a, 0x0f4d, 0xbc05, 0x4d22, 0x7ab4,
8095 +
            0x8b93, 0x38db, 0xc9fc, 0x57f7, 0xa6d0, 0x1598, 0xe4bf, 0xd329, 0x220e, 0x9146, 0x6061,
8096 +
            0x0d71, 0xfc56, 0x4f1e, 0xbe39, 0x89af, 0x7888, 0xcbc0, 0x3ae7, 0xa4ec, 0x55cb, 0xe683,
8097 +
            0x17a4, 0x2032, 0xd115, 0x625d, 0x937a, 0x3453, 0xc574, 0x763c, 0x871b, 0xb08d, 0x41aa,
8098 +
            0xf2e2, 0x03c5, 0x9dce, 0x6ce9, 0xdfa1, 0x2e86, 0x1910, 0xe837, 0x5b7f, 0xaa58, 0xc748,
8099 +
            0x366f, 0x8527, 0x7400, 0x4396, 0xb2b1, 0x01f9, 0xf0de, 0x6ed5, 0x9ff2, 0x2cba, 0xdd9d,
8100 +
            0xea0b, 0x1b2c, 0xa864, 0x5943, 0x7244, 0x8363, 0x302b, 0xc10c, 0xf69a, 0x07bd, 0xb4f5,
8101 +
            0x45d2, 0xdbd9, 0x2afe, 0x99b6, 0x6891, 0x5f07, 0xae20, 0x1d68, 0xec4f, 0x815f, 0x7078,
8102 +
            0xc330, 0x3217, 0x0581, 0xf4a6, 0x47ee, 0xb6c9, 0x28c2, 0xd9e5, 0x6aad, 0x9b8a, 0xac1c,
8103 +
            0x5d3b, 0xee73, 0x1f54,
8104 +
        ],
8105 +
        [
8106 +
            0x0000, 0xbc89, 0xd933, 0x65ba, 0x1247, 0xaece, 0xcb74, 0x77fd, 0x248e, 0x9807, 0xfdbd,
8107 +
            0x4134, 0x36c9, 0x8a40, 0xeffa, 0x5373, 0x491c, 0xf595, 0x902f, 0x2ca6, 0x5b5b, 0xe7d2,
8108 +
            0x8268, 0x3ee1, 0x6d92, 0xd11b, 0xb4a1, 0x0828, 0x7fd5, 0xc35c, 0xa6e6, 0x1a6f, 0x9238,
8109 +
            0x2eb1, 0x4b0b, 0xf782, 0x807f, 0x3cf6, 0x594c, 0xe5c5, 0xb6b6, 0x0a3f, 0x6f85, 0xd30c,
8110 +
            0xa4f1, 0x1878, 0x7dc2, 0xc14b, 0xdb24, 0x67ad, 0x0217, 0xbe9e, 0xc963, 0x75ea, 0x1050,
8111 +
            0xacd9, 0xffaa, 0x4323, 0x2699, 0x9a10, 0xeded, 0x5164, 0x34de, 0x8857, 0x8451, 0x38d8,
8112 +
            0x5d62, 0xe1eb, 0x9616, 0x2a9f, 0x4f25, 0xf3ac, 0xa0df, 0x1c56, 0x79ec, 0xc565, 0xb298,
8113 +
            0x0e11, 0x6bab, 0xd722, 0xcd4d, 0x71c4, 0x147e, 0xa8f7, 0xdf0a, 0x6383, 0x0639, 0xbab0,
8114 +
            0xe9c3, 0x554a, 0x30f0, 0x8c79, 0xfb84, 0x470d, 0x22b7, 0x9e3e, 0x1669, 0xaae0, 0xcf5a,
8115 +
            0x73d3, 0x042e, 0xb8a7, 0xdd1d, 0x6194, 0x32e7, 0x8e6e, 0xebd4, 0x575d, 0x20a0, 0x9c29,
8116 +
            0xf993, 0x451a, 0x5f75, 0xe3fc, 0x8646, 0x3acf, 0x4d32, 0xf1bb, 0x9401, 0x2888, 0x7bfb,
8117 +
            0xc772, 0xa2c8, 0x1e41, 0x69bc, 0xd535, 0xb08f, 0x0c06, 0xa883, 0x140a, 0x71b0, 0xcd39,
8118 +
            0xbac4, 0x064d, 0x63f7, 0xdf7e, 0x8c0d, 0x3084, 0x553e, 0xe9b7, 0x9e4a, 0x22c3, 0x4779,
8119 +
            0xfbf0, 0xe19f, 0x5d16, 0x38ac, 0x8425, 0xf3d8, 0x4f51, 0x2aeb, 0x9662, 0xc511, 0x7998,
8120 +
            0x1c22, 0xa0ab, 0xd756, 0x6bdf, 0x0e65, 0xb2ec, 0x3abb, 0x8632, 0xe388, 0x5f01, 0x28fc,
8121 +
            0x9475, 0xf1cf, 0x4d46, 0x1e35, 0xa2bc, 0xc706, 0x7b8f, 0x0c72, 0xb0fb, 0xd541, 0x69c8,
8122 +
            0x73a7, 0xcf2e, 0xaa94, 0x161d, 0x61e0, 0xdd69, 0xb8d3, 0x045a, 0x5729, 0xeba0, 0x8e1a,
8123 +
            0x3293, 0x456e, 0xf9e7, 0x9c5d, 0x20d4, 0x2cd2, 0x905b, 0xf5e1, 0x4968, 0x3e95, 0x821c,
8124 +
            0xe7a6, 0x5b2f, 0x085c, 0xb4d5, 0xd16f, 0x6de6, 0x1a1b, 0xa692, 0xc328, 0x7fa1, 0x65ce,
8125 +
            0xd947, 0xbcfd, 0x0074, 0x7789, 0xcb00, 0xaeba, 0x1233, 0x4140, 0xfdc9, 0x9873, 0x24fa,
8126 +
            0x5307, 0xef8e, 0x8a34, 0x36bd, 0xbeea, 0x0263, 0x67d9, 0xdb50, 0xacad, 0x1024, 0x759e,
8127 +
            0xc917, 0x9a64, 0x26ed, 0x4357, 0xffde, 0x8823, 0x34aa, 0x5110, 0xed99, 0xf7f6, 0x4b7f,
8128 +
            0x2ec5, 0x924c, 0xe5b1, 0x5938, 0x3c82, 0x800b, 0xd378, 0x6ff1, 0x0a4b, 0xb6c2, 0xc13f,
8129 +
            0x7db6, 0x180c, 0xa485,
8130 +
        ],
8131 +
        [
8132 +
            0x0000, 0xe809, 0x7033, 0x983a, 0xe066, 0x086f, 0x9055, 0x785c, 0x60ed, 0x88e4, 0x10de,
8133 +
            0xf8d7, 0x808b, 0x6882, 0xf0b8, 0x18b1, 0xc1da, 0x29d3, 0xb1e9, 0x59e0, 0x21bc, 0xc9b5,
8134 +
            0x518f, 0xb986, 0xa137, 0x493e, 0xd104, 0x390d, 0x4151, 0xa958, 0x3162, 0xd96b, 0x2395,
8135 +
            0xcb9c, 0x53a6, 0xbbaf, 0xc3f3, 0x2bfa, 0xb3c0, 0x5bc9, 0x4378, 0xab71, 0x334b, 0xdb42,
8136 +
            0xa31e, 0x4b17, 0xd32d, 0x3b24, 0xe24f, 0x0a46, 0x927c, 0x7a75, 0x0229, 0xea20, 0x721a,
8137 +
            0x9a13, 0x82a2, 0x6aab, 0xf291, 0x1a98, 0x62c4, 0x8acd, 0x12f7, 0xfafe, 0x472a, 0xaf23,
8138 +
            0x3719, 0xdf10, 0xa74c, 0x4f45, 0xd77f, 0x3f76, 0x27c7, 0xcfce, 0x57f4, 0xbffd, 0xc7a1,
8139 +
            0x2fa8, 0xb792, 0x5f9b, 0x86f0, 0x6ef9, 0xf6c3, 0x1eca, 0x6696, 0x8e9f, 0x16a5, 0xfeac,
8140 +
            0xe61d, 0x0e14, 0x962e, 0x7e27, 0x067b, 0xee72, 0x7648, 0x9e41, 0x64bf, 0x8cb6, 0x148c,
8141 +
            0xfc85, 0x84d9, 0x6cd0, 0xf4ea, 0x1ce3, 0x0452, 0xec5b, 0x7461, 0x9c68, 0xe434, 0x0c3d,
8142 +
            0x9407, 0x7c0e, 0xa565, 0x4d6c, 0xd556, 0x3d5f, 0x4503, 0xad0a, 0x3530, 0xdd39, 0xc588,
8143 +
            0x2d81, 0xb5bb, 0x5db2, 0x25ee, 0xcde7, 0x55dd, 0xbdd4, 0x8e54, 0x665d, 0xfe67, 0x166e,
8144 +
            0x6e32, 0x863b, 0x1e01, 0xf608, 0xeeb9, 0x06b0, 0x9e8a, 0x7683, 0x0edf, 0xe6d6, 0x7eec,
8145 +
            0x96e5, 0x4f8e, 0xa787, 0x3fbd, 0xd7b4, 0xafe8, 0x47e1, 0xdfdb, 0x37d2, 0x2f63, 0xc76a,
8146 +
            0x5f50, 0xb759, 0xcf05, 0x270c, 0xbf36, 0x573f, 0xadc1, 0x45c8, 0xddf2, 0x35fb, 0x4da7,
8147 +
            0xa5ae, 0x3d94, 0xd59d, 0xcd2c, 0x2525, 0xbd1f, 0x5516, 0x2d4a, 0xc543, 0x5d79, 0xb570,
8148 +
            0x6c1b, 0x8412, 0x1c28, 0xf421, 0x8c7d, 0x6474, 0xfc4e, 0x1447, 0x0cf6, 0xe4ff, 0x7cc5,
8149 +
            0x94cc, 0xec90, 0x0499, 0x9ca3, 0x74aa, 0xc97e, 0x2177, 0xb94d, 0x5144, 0x2918, 0xc111,
8150 +
            0x592b, 0xb122, 0xa993, 0x419a, 0xd9a0, 0x31a9, 0x49f5, 0xa1fc, 0x39c6, 0xd1cf, 0x08a4,
8151 +
            0xe0ad, 0x7897, 0x909e, 0xe8c2, 0x00cb, 0x98f1, 0x70f8, 0x6849, 0x8040, 0x187a, 0xf073,
8152 +
            0x882f, 0x6026, 0xf81c, 0x1015, 0xeaeb, 0x02e2, 0x9ad8, 0x72d1, 0x0a8d, 0xe284, 0x7abe,
8153 +
            0x92b7, 0x8a06, 0x620f, 0xfa35, 0x123c, 0x6a60, 0x8269, 0x1a53, 0xf25a, 0x2b31, 0xc338,
8154 +
            0x5b02, 0xb30b, 0xcb57, 0x235e, 0xbb64, 0x536d, 0x4bdc, 0xa3d5, 0x3bef, 0xd3e6, 0xabba,
8155 +
            0x43b3, 0xdb89, 0x3380,
8156 +
        ],
8157 +
        [
8158 +
            0x0000, 0x384d, 0x709a, 0x48d7, 0xe134, 0xd979, 0x91ae, 0xa9e3, 0x6249, 0x5a04, 0x12d3,
8159 +
            0x2a9e, 0x837d, 0xbb30, 0xf3e7, 0xcbaa, 0xc492, 0xfcdf, 0xb408, 0x8c45, 0x25a6, 0x1deb,
8160 +
            0x553c, 0x6d71, 0xa6db, 0x9e96, 0xd641, 0xee0c, 0x47ef, 0x7fa2, 0x3775, 0x0f38, 0x2905,
8161 +
            0x1148, 0x599f, 0x61d2, 0xc831, 0xf07c, 0xb8ab, 0x80e6, 0x4b4c, 0x7301, 0x3bd6, 0x039b,
8162 +
            0xaa78, 0x9235, 0xdae2, 0xe2af, 0xed97, 0xd5da, 0x9d0d, 0xa540, 0x0ca3, 0x34ee, 0x7c39,
8163 +
            0x4474, 0x8fde, 0xb793, 0xff44, 0xc709, 0x6eea, 0x56a7, 0x1e70, 0x263d, 0x520a, 0x6a47,
8164 +
            0x2290, 0x1add, 0xb33e, 0x8b73, 0xc3a4, 0xfbe9, 0x3043, 0x080e, 0x40d9, 0x7894, 0xd177,
8165 +
            0xe93a, 0xa1ed, 0x99a0, 0x9698, 0xaed5, 0xe602, 0xde4f, 0x77ac, 0x4fe1, 0x0736, 0x3f7b,
8166 +
            0xf4d1, 0xcc9c, 0x844b, 0xbc06, 0x15e5, 0x2da8, 0x657f, 0x5d32, 0x7b0f, 0x4342, 0x0b95,
8167 +
            0x33d8, 0x9a3b, 0xa276, 0xeaa1, 0xd2ec, 0x1946, 0x210b, 0x69dc, 0x5191, 0xf872, 0xc03f,
8168 +
            0x88e8, 0xb0a5, 0xbf9d, 0x87d0, 0xcf07, 0xf74a, 0x5ea9, 0x66e4, 0x2e33, 0x167e, 0xddd4,
8169 +
            0xe599, 0xad4e, 0x9503, 0x3ce0, 0x04ad, 0x4c7a, 0x7437, 0xa414, 0x9c59, 0xd48e, 0xecc3,
8170 +
            0x4520, 0x7d6d, 0x35ba, 0x0df7, 0xc65d, 0xfe10, 0xb6c7, 0x8e8a, 0x2769, 0x1f24, 0x57f3,
8171 +
            0x6fbe, 0x6086, 0x58cb, 0x101c, 0x2851, 0x81b2, 0xb9ff, 0xf128, 0xc965, 0x02cf, 0x3a82,
8172 +
            0x7255, 0x4a18, 0xe3fb, 0xdbb6, 0x9361, 0xab2c, 0x8d11, 0xb55c, 0xfd8b, 0xc5c6, 0x6c25,
8173 +
            0x5468, 0x1cbf, 0x24f2, 0xef58, 0xd715, 0x9fc2, 0xa78f, 0x0e6c, 0x3621, 0x7ef6, 0x46bb,
8174 +
            0x4983, 0x71ce, 0x3919, 0x0154, 0xa8b7, 0x90fa, 0xd82d, 0xe060, 0x2bca, 0x1387, 0x5b50,
8175 +
            0x631d, 0xcafe, 0xf2b3, 0xba64, 0x8229, 0xf61e, 0xce53, 0x8684, 0xbec9, 0x172a, 0x2f67,
8176 +
            0x67b0, 0x5ffd, 0x9457, 0xac1a, 0xe4cd, 0xdc80, 0x7563, 0x4d2e, 0x05f9, 0x3db4, 0x328c,
8177 +
            0x0ac1, 0x4216, 0x7a5b, 0xd3b8, 0xebf5, 0xa322, 0x9b6f, 0x50c5, 0x6888, 0x205f, 0x1812,
8178 +
            0xb1f1, 0x89bc, 0xc16b, 0xf926, 0xdf1b, 0xe756, 0xaf81, 0x97cc, 0x3e2f, 0x0662, 0x4eb5,
8179 +
            0x76f8, 0xbd52, 0x851f, 0xcdc8, 0xf585, 0x5c66, 0x642b, 0x2cfc, 0x14b1, 0x1b89, 0x23c4,
8180 +
            0x6b13, 0x535e, 0xfabd, 0xc2f0, 0x8a27, 0xb26a, 0x79c0, 0x418d, 0x095a, 0x3117, 0x98f4,
8181 +
            0xa0b9, 0xe86e, 0xd023,
8182 +
        ],
8183 +
        [
8184 +
            0x0000, 0x8605, 0xac2b, 0x2a2e, 0xf877, 0x7e72, 0x545c, 0xd259, 0x50cf, 0xd6ca, 0xfce4,
8185 +
            0x7ae1, 0xa8b8, 0x2ebd, 0x0493, 0x8296, 0xa19e, 0x279b, 0x0db5, 0x8bb0, 0x59e9, 0xdfec,
8186 +
            0xf5c2, 0x73c7, 0xf151, 0x7754, 0x5d7a, 0xdb7f, 0x0926, 0x8f23, 0xa50d, 0x2308, 0xe31d,
8187 +
            0x6518, 0x4f36, 0xc933, 0x1b6a, 0x9d6f, 0xb741, 0x3144, 0xb3d2, 0x35d7, 0x1ff9, 0x99fc,
8188 +
            0x4ba5, 0xcda0, 0xe78e, 0x618b, 0x4283, 0xc486, 0xeea8, 0x68ad, 0xbaf4, 0x3cf1, 0x16df,
8189 +
            0x90da, 0x124c, 0x9449, 0xbe67, 0x3862, 0xea3b, 0x6c3e, 0x4610, 0xc015, 0x661b, 0xe01e,
8190 +
            0xca30, 0x4c35, 0x9e6c, 0x1869, 0x3247, 0xb442, 0x36d4, 0xb0d1, 0x9aff, 0x1cfa, 0xcea3,
8191 +
            0x48a6, 0x6288, 0xe48d, 0xc785, 0x4180, 0x6bae, 0xedab, 0x3ff2, 0xb9f7, 0x93d9, 0x15dc,
8192 +
            0x974a, 0x114f, 0x3b61, 0xbd64, 0x6f3d, 0xe938, 0xc316, 0x4513, 0x8506, 0x0303, 0x292d,
8193 +
            0xaf28, 0x7d71, 0xfb74, 0xd15a, 0x575f, 0xd5c9, 0x53cc, 0x79e2, 0xffe7, 0x2dbe, 0xabbb,
8194 +
            0x8195, 0x0790, 0x2498, 0xa29d, 0x88b3, 0x0eb6, 0xdcef, 0x5aea, 0x70c4, 0xf6c1, 0x7457,
8195 +
            0xf252, 0xd87c, 0x5e79, 0x8c20, 0x0a25, 0x200b, 0xa60e, 0xcc36, 0x4a33, 0x601d, 0xe618,
8196 +
            0x3441, 0xb244, 0x986a, 0x1e6f, 0x9cf9, 0x1afc, 0x30d2, 0xb6d7, 0x648e, 0xe28b, 0xc8a5,
8197 +
            0x4ea0, 0x6da8, 0xebad, 0xc183, 0x4786, 0x95df, 0x13da, 0x39f4, 0xbff1, 0x3d67, 0xbb62,
8198 +
            0x914c, 0x1749, 0xc510, 0x4315, 0x693b, 0xef3e, 0x2f2b, 0xa92e, 0x8300, 0x0505, 0xd75c,
8199 +
            0x5159, 0x7b77, 0xfd72, 0x7fe4, 0xf9e1, 0xd3cf, 0x55ca, 0x8793, 0x0196, 0x2bb8, 0xadbd,
8200 +
            0x8eb5, 0x08b0, 0x229e, 0xa49b, 0x76c2, 0xf0c7, 0xdae9, 0x5cec, 0xde7a, 0x587f, 0x7251,
8201 +
            0xf454, 0x260d, 0xa008, 0x8a26, 0x0c23, 0xaa2d, 0x2c28, 0x0606, 0x8003, 0x525a, 0xd45f,
8202 +
            0xfe71, 0x7874, 0xfae2, 0x7ce7, 0x56c9, 0xd0cc, 0x0295, 0x8490, 0xaebe, 0x28bb, 0x0bb3,
8203 +
            0x8db6, 0xa798, 0x219d, 0xf3c4, 0x75c1, 0x5fef, 0xd9ea, 0x5b7c, 0xdd79, 0xf757, 0x7152,
8204 +
            0xa30b, 0x250e, 0x0f20, 0x8925, 0x4930, 0xcf35, 0xe51b, 0x631e, 0xb147, 0x3742, 0x1d6c,
8205 +
            0x9b69, 0x19ff, 0x9ffa, 0xb5d4, 0x33d1, 0xe188, 0x678d, 0x4da3, 0xcba6, 0xe8ae, 0x6eab,
8206 +
            0x4485, 0xc280, 0x10d9, 0x96dc, 0xbcf2, 0x3af7, 0xb861, 0x3e64, 0x144a, 0x924f, 0x4016,
8207 +
            0xc613, 0xec3d, 0x6a38,
8208 +
        ],
8209 +
        [
8210 +
            0x0000, 0xe3b2, 0x6745, 0x84f7, 0xce8a, 0x2d38, 0xa9cf, 0x4a7d, 0x3d35, 0xde87, 0x5a70,
8211 +
            0xb9c2, 0xf3bf, 0x100d, 0x94fa, 0x7748, 0x7a6a, 0x99d8, 0x1d2f, 0xfe9d, 0xb4e0, 0x5752,
8212 +
            0xd3a5, 0x3017, 0x475f, 0xa4ed, 0x201a, 0xc3a8, 0x89d5, 0x6a67, 0xee90, 0x0d22, 0xf4d4,
8213 +
            0x1766, 0x9391, 0x7023, 0x3a5e, 0xd9ec, 0x5d1b, 0xbea9, 0xc9e1, 0x2a53, 0xaea4, 0x4d16,
8214 +
            0x076b, 0xe4d9, 0x602e, 0x839c, 0x8ebe, 0x6d0c, 0xe9fb, 0x0a49, 0x4034, 0xa386, 0x2771,
8215 +
            0xc4c3, 0xb38b, 0x5039, 0xd4ce, 0x377c, 0x7d01, 0x9eb3, 0x1a44, 0xf9f6, 0x4989, 0xaa3b,
8216 +
            0x2ecc, 0xcd7e, 0x8703, 0x64b1, 0xe046, 0x03f4, 0x74bc, 0x970e, 0x13f9, 0xf04b, 0xba36,
8217 +
            0x5984, 0xdd73, 0x3ec1, 0x33e3, 0xd051, 0x54a6, 0xb714, 0xfd69, 0x1edb, 0x9a2c, 0x799e,
8218 +
            0x0ed6, 0xed64, 0x6993, 0x8a21, 0xc05c, 0x23ee, 0xa719, 0x44ab, 0xbd5d, 0x5eef, 0xda18,
8219 +
            0x39aa, 0x73d7, 0x9065, 0x1492, 0xf720, 0x8068, 0x63da, 0xe72d, 0x049f, 0x4ee2, 0xad50,
8220 +
            0x29a7, 0xca15, 0xc737, 0x2485, 0xa072, 0x43c0, 0x09bd, 0xea0f, 0x6ef8, 0x8d4a, 0xfa02,
8221 +
            0x19b0, 0x9d47, 0x7ef5, 0x3488, 0xd73a, 0x53cd, 0xb07f, 0x9312, 0x70a0, 0xf457, 0x17e5,
8222 +
            0x5d98, 0xbe2a, 0x3add, 0xd96f, 0xae27, 0x4d95, 0xc962, 0x2ad0, 0x60ad, 0x831f, 0x07e8,
8223 +
            0xe45a, 0xe978, 0x0aca, 0x8e3d, 0x6d8f, 0x27f2, 0xc440, 0x40b7, 0xa305, 0xd44d, 0x37ff,
8224 +
            0xb308, 0x50ba, 0x1ac7, 0xf975, 0x7d82, 0x9e30, 0x67c6, 0x8474, 0x0083, 0xe331, 0xa94c,
8225 +
            0x4afe, 0xce09, 0x2dbb, 0x5af3, 0xb941, 0x3db6, 0xde04, 0x9479, 0x77cb, 0xf33c, 0x108e,
8226 +
            0x1dac, 0xfe1e, 0x7ae9, 0x995b, 0xd326, 0x3094, 0xb463, 0x57d1, 0x2099, 0xc32b, 0x47dc,
8227 +
            0xa46e, 0xee13, 0x0da1, 0x8956, 0x6ae4, 0xda9b, 0x3929, 0xbdde, 0x5e6c, 0x1411, 0xf7a3,
8228 +
            0x7354, 0x90e6, 0xe7ae, 0x041c, 0x80eb, 0x6359, 0x2924, 0xca96, 0x4e61, 0xadd3, 0xa0f1,
8229 +
            0x4343, 0xc7b4, 0x2406, 0x6e7b, 0x8dc9, 0x093e, 0xea8c, 0x9dc4, 0x7e76, 0xfa81, 0x1933,
8230 +
            0x534e, 0xb0fc, 0x340b, 0xd7b9, 0x2e4f, 0xcdfd, 0x490a, 0xaab8, 0xe0c5, 0x0377, 0x8780,
8231 +
            0x6432, 0x137a, 0xf0c8, 0x743f, 0x978d, 0xddf0, 0x3e42, 0xbab5, 0x5907, 0x5425, 0xb797,
8232 +
            0x3360, 0xd0d2, 0x9aaf, 0x791d, 0xfdea, 0x1e58, 0x6910, 0x8aa2, 0x0e55, 0xede7, 0xa79a,
8233 +
            0x4428, 0xc0df, 0x236d,
8234 +
        ],
8235 +
        [
8236 +
            0x0000, 0x95bd, 0x8b5b, 0x1ee6, 0xb697, 0x232a, 0x3dcc, 0xa871, 0xcd0f, 0x58b2, 0x4654,
8237 +
            0xd3e9, 0x7b98, 0xee25, 0xf0c3, 0x657e, 0x3a3f, 0xaf82, 0xb164, 0x24d9, 0x8ca8, 0x1915,
8238 +
            0x07f3, 0x924e, 0xf730, 0x628d, 0x7c6b, 0xe9d6, 0x41a7, 0xd41a, 0xcafc, 0x5f41, 0x747e,
8239 +
            0xe1c3, 0xff25, 0x6a98, 0xc2e9, 0x5754, 0x49b2, 0xdc0f, 0xb971, 0x2ccc, 0x322a, 0xa797,
8240 +
            0x0fe6, 0x9a5b, 0x84bd, 0x1100, 0x4e41, 0xdbfc, 0xc51a, 0x50a7, 0xf8d6, 0x6d6b, 0x738d,
8241 +
            0xe630, 0x834e, 0x16f3, 0x0815, 0x9da8, 0x35d9, 0xa064, 0xbe82, 0x2b3f, 0xe8fc, 0x7d41,
8242 +
            0x63a7, 0xf61a, 0x5e6b, 0xcbd6, 0xd530, 0x408d, 0x25f3, 0xb04e, 0xaea8, 0x3b15, 0x9364,
8243 +
            0x06d9, 0x183f, 0x8d82, 0xd2c3, 0x477e, 0x5998, 0xcc25, 0x6454, 0xf1e9, 0xef0f, 0x7ab2,
8244 +
            0x1fcc, 0x8a71, 0x9497, 0x012a, 0xa95b, 0x3ce6, 0x2200, 0xb7bd, 0x9c82, 0x093f, 0x17d9,
8245 +
            0x8264, 0x2a15, 0xbfa8, 0xa14e, 0x34f3, 0x518d, 0xc430, 0xdad6, 0x4f6b, 0xe71a, 0x72a7,
8246 +
            0x6c41, 0xf9fc, 0xa6bd, 0x3300, 0x2de6, 0xb85b, 0x102a, 0x8597, 0x9b71, 0x0ecc, 0x6bb2,
8247 +
            0xfe0f, 0xe0e9, 0x7554, 0xdd25, 0x4898, 0x567e, 0xc3c3, 0x71d9, 0xe464, 0xfa82, 0x6f3f,
8248 +
            0xc74e, 0x52f3, 0x4c15, 0xd9a8, 0xbcd6, 0x296b, 0x378d, 0xa230, 0x0a41, 0x9ffc, 0x811a,
8249 +
            0x14a7, 0x4be6, 0xde5b, 0xc0bd, 0x5500, 0xfd71, 0x68cc, 0x762a, 0xe397, 0x86e9, 0x1354,
8250 +
            0x0db2, 0x980f, 0x307e, 0xa5c3, 0xbb25, 0x2e98, 0x05a7, 0x901a, 0x8efc, 0x1b41, 0xb330,
8251 +
            0x268d, 0x386b, 0xadd6, 0xc8a8, 0x5d15, 0x43f3, 0xd64e, 0x7e3f, 0xeb82, 0xf564, 0x60d9,
8252 +
            0x3f98, 0xaa25, 0xb4c3, 0x217e, 0x890f, 0x1cb2, 0x0254, 0x97e9, 0xf297, 0x672a, 0x79cc,
8253 +
            0xec71, 0x4400, 0xd1bd, 0xcf5b, 0x5ae6, 0x9925, 0x0c98, 0x127e, 0x87c3, 0x2fb2, 0xba0f,
8254 +
            0xa4e9, 0x3154, 0x542a, 0xc197, 0xdf71, 0x4acc, 0xe2bd, 0x7700, 0x69e6, 0xfc5b, 0xa31a,
8255 +
            0x36a7, 0x2841, 0xbdfc, 0x158d, 0x8030, 0x9ed6, 0x0b6b, 0x6e15, 0xfba8, 0xe54e, 0x70f3,
8256 +
            0xd882, 0x4d3f, 0x53d9, 0xc664, 0xed5b, 0x78e6, 0x6600, 0xf3bd, 0x5bcc, 0xce71, 0xd097,
8257 +
            0x452a, 0x2054, 0xb5e9, 0xab0f, 0x3eb2, 0x96c3, 0x037e, 0x1d98, 0x8825, 0xd764, 0x42d9,
8258 +
            0x5c3f, 0xc982, 0x61f3, 0xf44e, 0xeaa8, 0x7f15, 0x1a6b, 0x8fd6, 0x9130, 0x048d, 0xacfc,
8259 +
            0x3941, 0x27a7, 0xb21a,
8260 +
        ],
8261 +
        [
8262 +
            0x0000, 0x10b6, 0x216c, 0x31da, 0x42d8, 0x526e, 0x63b4, 0x7302, 0x85b0, 0x9506, 0xa4dc,
8263 +
            0xb46a, 0xc768, 0xd7de, 0xe604, 0xf6b2, 0xab41, 0xbbf7, 0x8a2d, 0x9a9b, 0xe999, 0xf92f,
8264 +
            0xc8f5, 0xd843, 0x2ef1, 0x3e47, 0x0f9d, 0x1f2b, 0x6c29, 0x7c9f, 0x4d45, 0x5df3, 0xf6a3,
8265 +
            0xe615, 0xd7cf, 0xc779, 0xb47b, 0xa4cd, 0x9517, 0x85a1, 0x7313, 0x63a5, 0x527f, 0x42c9,
8266 +
            0x31cb, 0x217d, 0x10a7, 0x0011, 0x5de2, 0x4d54, 0x7c8e, 0x6c38, 0x1f3a, 0x0f8c, 0x3e56,
8267 +
            0x2ee0, 0xd852, 0xc8e4, 0xf93e, 0xe988, 0x9a8a, 0x8a3c, 0xbbe6, 0xab50, 0x4d67, 0x5dd1,
8268 +
            0x6c0b, 0x7cbd, 0x0fbf, 0x1f09, 0x2ed3, 0x3e65, 0xc8d7, 0xd861, 0xe9bb, 0xf90d, 0x8a0f,
8269 +
            0x9ab9, 0xab63, 0xbbd5, 0xe626, 0xf690, 0xc74a, 0xd7fc, 0xa4fe, 0xb448, 0x8592, 0x9524,
8270 +
            0x6396, 0x7320, 0x42fa, 0x524c, 0x214e, 0x31f8, 0x0022, 0x1094, 0xbbc4, 0xab72, 0x9aa8,
8271 +
            0x8a1e, 0xf91c, 0xe9aa, 0xd870, 0xc8c6, 0x3e74, 0x2ec2, 0x1f18, 0x0fae, 0x7cac, 0x6c1a,
8272 +
            0x5dc0, 0x4d76, 0x1085, 0x0033, 0x31e9, 0x215f, 0x525d, 0x42eb, 0x7331, 0x6387, 0x9535,
8273 +
            0x8583, 0xb459, 0xa4ef, 0xd7ed, 0xc75b, 0xf681, 0xe637, 0x9ace, 0x8a78, 0xbba2, 0xab14,
8274 +
            0xd816, 0xc8a0, 0xf97a, 0xe9cc, 0x1f7e, 0x0fc8, 0x3e12, 0x2ea4, 0x5da6, 0x4d10, 0x7cca,
8275 +
            0x6c7c, 0x318f, 0x2139, 0x10e3, 0x0055, 0x7357, 0x63e1, 0x523b, 0x428d, 0xb43f, 0xa489,
8276 +
            0x9553, 0x85e5, 0xf6e7, 0xe651, 0xd78b, 0xc73d, 0x6c6d, 0x7cdb, 0x4d01, 0x5db7, 0x2eb5,
8277 +
            0x3e03, 0x0fd9, 0x1f6f, 0xe9dd, 0xf96b, 0xc8b1, 0xd807, 0xab05, 0xbbb3, 0x8a69, 0x9adf,
8278 +
            0xc72c, 0xd79a, 0xe640, 0xf6f6, 0x85f4, 0x9542, 0xa498, 0xb42e, 0x429c, 0x522a, 0x63f0,
8279 +
            0x7346, 0x0044, 0x10f2, 0x2128, 0x319e, 0xd7a9, 0xc71f, 0xf6c5, 0xe673, 0x9571, 0x85c7,
8280 +
            0xb41d, 0xa4ab, 0x5219, 0x42af, 0x7375, 0x63c3, 0x10c1, 0x0077, 0x31ad, 0x211b, 0x7ce8,
8281 +
            0x6c5e, 0x5d84, 0x4d32, 0x3e30, 0x2e86, 0x1f5c, 0x0fea, 0xf958, 0xe9ee, 0xd834, 0xc882,
8282 +
            0xbb80, 0xab36, 0x9aec, 0x8a5a, 0x210a, 0x31bc, 0x0066, 0x10d0, 0x63d2, 0x7364, 0x42be,
8283 +
            0x5208, 0xa4ba, 0xb40c, 0x85d6, 0x9560, 0xe662, 0xf6d4, 0xc70e, 0xd7b8, 0x8a4b, 0x9afd,
8284 +
            0xab27, 0xbb91, 0xc893, 0xd825, 0xe9ff, 0xf949, 0x0ffb, 0x1f4d, 0x2e97, 0x3e21, 0x4d23,
8285 +
            0x5d95, 0x6c4f, 0x7cf9,
8286 +
        ],
8287 +
        [
8288 +
            0x0000, 0x43de, 0x87bc, 0xc462, 0xaf59, 0xec87, 0x28e5, 0x6b3b, 0xfe93, 0xbd4d, 0x792f,
8289 +
            0x3af1, 0x51ca, 0x1214, 0xd676, 0x95a8, 0x5d07, 0x1ed9, 0xdabb, 0x9965, 0xf25e, 0xb180,
8290 +
            0x75e2, 0x363c, 0xa394, 0xe04a, 0x2428, 0x67f6, 0x0ccd, 0x4f13, 0x8b71, 0xc8af, 0xba0e,
8291 +
            0xf9d0, 0x3db2, 0x7e6c, 0x1557, 0x5689, 0x92eb, 0xd135, 0x449d, 0x0743, 0xc321, 0x80ff,
8292 +
            0xebc4, 0xa81a, 0x6c78, 0x2fa6, 0xe709, 0xa4d7, 0x60b5, 0x236b, 0x4850, 0x0b8e, 0xcfec,
8293 +
            0x8c32, 0x199a, 0x5a44, 0x9e26, 0xddf8, 0xb6c3, 0xf51d, 0x317f, 0x72a1, 0xd43d, 0x97e3,
8294 +
            0x5381, 0x105f, 0x7b64, 0x38ba, 0xfcd8, 0xbf06, 0x2aae, 0x6970, 0xad12, 0xeecc, 0x85f7,
8295 +
            0xc629, 0x024b, 0x4195, 0x893a, 0xcae4, 0x0e86, 0x4d58, 0x2663, 0x65bd, 0xa1df, 0xe201,
8296 +
            0x77a9, 0x3477, 0xf015, 0xb3cb, 0xd8f0, 0x9b2e, 0x5f4c, 0x1c92, 0x6e33, 0x2ded, 0xe98f,
8297 +
            0xaa51, 0xc16a, 0x82b4, 0x46d6, 0x0508, 0x90a0, 0xd37e, 0x171c, 0x54c2, 0x3ff9, 0x7c27,
8298 +
            0xb845, 0xfb9b, 0x3334, 0x70ea, 0xb488, 0xf756, 0x9c6d, 0xdfb3, 0x1bd1, 0x580f, 0xcda7,
8299 +
            0x8e79, 0x4a1b, 0x09c5, 0x62fe, 0x2120, 0xe542, 0xa69c, 0x085b, 0x4b85, 0x8fe7, 0xcc39,
8300 +
            0xa702, 0xe4dc, 0x20be, 0x6360, 0xf6c8, 0xb516, 0x7174, 0x32aa, 0x5991, 0x1a4f, 0xde2d,
8301 +
            0x9df3, 0x555c, 0x1682, 0xd2e0, 0x913e, 0xfa05, 0xb9db, 0x7db9, 0x3e67, 0xabcf, 0xe811,
8302 +
            0x2c73, 0x6fad, 0x0496, 0x4748, 0x832a, 0xc0f4, 0xb255, 0xf18b, 0x35e9, 0x7637, 0x1d0c,
8303 +
            0x5ed2, 0x9ab0, 0xd96e, 0x4cc6, 0x0f18, 0xcb7a, 0x88a4, 0xe39f, 0xa041, 0x6423, 0x27fd,
8304 +
            0xef52, 0xac8c, 0x68ee, 0x2b30, 0x400b, 0x03d5, 0xc7b7, 0x8469, 0x11c1, 0x521f, 0x967d,
8305 +
            0xd5a3, 0xbe98, 0xfd46, 0x3924, 0x7afa, 0xdc66, 0x9fb8, 0x5bda, 0x1804, 0x733f, 0x30e1,
8306 +
            0xf483, 0xb75d, 0x22f5, 0x612b, 0xa549, 0xe697, 0x8dac, 0xce72, 0x0a10, 0x49ce, 0x8161,
8307 +
            0xc2bf, 0x06dd, 0x4503, 0x2e38, 0x6de6, 0xa984, 0xea5a, 0x7ff2, 0x3c2c, 0xf84e, 0xbb90,
8308 +
            0xd0ab, 0x9375, 0x5717, 0x14c9, 0x6668, 0x25b6, 0xe1d4, 0xa20a, 0xc931, 0x8aef, 0x4e8d,
8309 +
            0x0d53, 0x98fb, 0xdb25, 0x1f47, 0x5c99, 0x37a2, 0x747c, 0xb01e, 0xf3c0, 0x3b6f, 0x78b1,
8310 +
            0xbcd3, 0xff0d, 0x9436, 0xd7e8, 0x138a, 0x5054, 0xc5fc, 0x8622, 0x4240, 0x019e, 0x6aa5,
8311 +
            0x297b, 0xed19, 0xaec7,
8312 +
        ],
8313 +
        [
8314 +
            0x0000, 0x1280, 0x2500, 0x3780, 0x4a00, 0x5880, 0x6f00, 0x7d80, 0x9400, 0x8680, 0xb100,
8315 +
            0xa380, 0xde00, 0xcc80, 0xfb00, 0xe980, 0x8821, 0x9aa1, 0xad21, 0xbfa1, 0xc221, 0xd0a1,
8316 +
            0xe721, 0xf5a1, 0x1c21, 0x0ea1, 0x3921, 0x2ba1, 0x5621, 0x44a1, 0x7321, 0x61a1, 0xb063,
8317 +
            0xa2e3, 0x9563, 0x87e3, 0xfa63, 0xe8e3, 0xdf63, 0xcde3, 0x2463, 0x36e3, 0x0163, 0x13e3,
8318 +
            0x6e63, 0x7ce3, 0x4b63, 0x59e3, 0x3842, 0x2ac2, 0x1d42, 0x0fc2, 0x7242, 0x60c2, 0x5742,
8319 +
            0x45c2, 0xac42, 0xbec2, 0x8942, 0x9bc2, 0xe642, 0xf4c2, 0xc342, 0xd1c2, 0xc0e7, 0xd267,
8320 +
            0xe5e7, 0xf767, 0x8ae7, 0x9867, 0xafe7, 0xbd67, 0x54e7, 0x4667, 0x71e7, 0x6367, 0x1ee7,
8321 +
            0x0c67, 0x3be7, 0x2967, 0x48c6, 0x5a46, 0x6dc6, 0x7f46, 0x02c6, 0x1046, 0x27c6, 0x3546,
8322 +
            0xdcc6, 0xce46, 0xf9c6, 0xeb46, 0x96c6, 0x8446, 0xb3c6, 0xa146, 0x7084, 0x6204, 0x5584,
8323 +
            0x4704, 0x3a84, 0x2804, 0x1f84, 0x0d04, 0xe484, 0xf604, 0xc184, 0xd304, 0xae84, 0xbc04,
8324 +
            0x8b84, 0x9904, 0xf8a5, 0xea25, 0xdda5, 0xcf25, 0xb2a5, 0xa025, 0x97a5, 0x8525, 0x6ca5,
8325 +
            0x7e25, 0x49a5, 0x5b25, 0x26a5, 0x3425, 0x03a5, 0x1125, 0x21ef, 0x336f, 0x04ef, 0x166f,
8326 +
            0x6bef, 0x796f, 0x4eef, 0x5c6f, 0xb5ef, 0xa76f, 0x90ef, 0x826f, 0xffef, 0xed6f, 0xdaef,
8327 +
            0xc86f, 0xa9ce, 0xbb4e, 0x8cce, 0x9e4e, 0xe3ce, 0xf14e, 0xc6ce, 0xd44e, 0x3dce, 0x2f4e,
8328 +
            0x18ce, 0x0a4e, 0x77ce, 0x654e, 0x52ce, 0x404e, 0x918c, 0x830c, 0xb48c, 0xa60c, 0xdb8c,
8329 +
            0xc90c, 0xfe8c, 0xec0c, 0x058c, 0x170c, 0x208c, 0x320c, 0x4f8c, 0x5d0c, 0x6a8c, 0x780c,
8330 +
            0x19ad, 0x0b2d, 0x3cad, 0x2e2d, 0x53ad, 0x412d, 0x76ad, 0x642d, 0x8dad, 0x9f2d, 0xa8ad,
8331 +
            0xba2d, 0xc7ad, 0xd52d, 0xe2ad, 0xf02d, 0xe108, 0xf388, 0xc408, 0xd688, 0xab08, 0xb988,
8332 +
            0x8e08, 0x9c88, 0x7508, 0x6788, 0x5008, 0x4288, 0x3f08, 0x2d88, 0x1a08, 0x0888, 0x6929,
8333 +
            0x7ba9, 0x4c29, 0x5ea9, 0x2329, 0x31a9, 0x0629, 0x14a9, 0xfd29, 0xefa9, 0xd829, 0xcaa9,
8334 +
            0xb729, 0xa5a9, 0x9229, 0x80a9, 0x516b, 0x43eb, 0x746b, 0x66eb, 0x1b6b, 0x09eb, 0x3e6b,
8335 +
            0x2ceb, 0xc56b, 0xd7eb, 0xe06b, 0xf2eb, 0x8f6b, 0x9deb, 0xaa6b, 0xb8eb, 0xd94a, 0xcbca,
8336 +
            0xfc4a, 0xeeca, 0x934a, 0x81ca, 0xb64a, 0xa4ca, 0x4d4a, 0x5fca, 0x684a, 0x7aca, 0x074a,
8337 +
            0x15ca, 0x224a, 0x30ca,
8338 +
        ],
8339 +
        [
8340 +
            0x0000, 0xd002, 0x0025, 0xd027, 0x004a, 0xd048, 0x006f, 0xd06d, 0x0094, 0xd096, 0x00b1,
8341 +
            0xd0b3, 0x00de, 0xd0dc, 0x00fb, 0xd0f9, 0x0128, 0xd12a, 0x010d, 0xd10f, 0x0162, 0xd160,
8342 +
            0x0147, 0xd145, 0x01bc, 0xd1be, 0x0199, 0xd19b, 0x01f6, 0xd1f4, 0x01d3, 0xd1d1, 0x0250,
8343 +
            0xd252, 0x0275, 0xd277, 0x021a, 0xd218, 0x023f, 0xd23d, 0x02c4, 0xd2c6, 0x02e1, 0xd2e3,
8344 +
            0x028e, 0xd28c, 0x02ab, 0xd2a9, 0x0378, 0xd37a, 0x035d, 0xd35f, 0x0332, 0xd330, 0x0317,
8345 +
            0xd315, 0x03ec, 0xd3ee, 0x03c9, 0xd3cb, 0x03a6, 0xd3a4, 0x0383, 0xd381, 0x04a0, 0xd4a2,
8346 +
            0x0485, 0xd487, 0x04ea, 0xd4e8, 0x04cf, 0xd4cd, 0x0434, 0xd436, 0x0411, 0xd413, 0x047e,
8347 +
            0xd47c, 0x045b, 0xd459, 0x0588, 0xd58a, 0x05ad, 0xd5af, 0x05c2, 0xd5c0, 0x05e7, 0xd5e5,
8348 +
            0x051c, 0xd51e, 0x0539, 0xd53b, 0x0556, 0xd554, 0x0573, 0xd571, 0x06f0, 0xd6f2, 0x06d5,
8349 +
            0xd6d7, 0x06ba, 0xd6b8, 0x069f, 0xd69d, 0x0664, 0xd666, 0x0641, 0xd643, 0x062e, 0xd62c,
8350 +
            0x060b, 0xd609, 0x07d8, 0xd7da, 0x07fd, 0xd7ff, 0x0792, 0xd790, 0x07b7, 0xd7b5, 0x074c,
8351 +
            0xd74e, 0x0769, 0xd76b, 0x0706, 0xd704, 0x0723, 0xd721, 0x0940, 0xd942, 0x0965, 0xd967,
8352 +
            0x090a, 0xd908, 0x092f, 0xd92d, 0x09d4, 0xd9d6, 0x09f1, 0xd9f3, 0x099e, 0xd99c, 0x09bb,
8353 +
            0xd9b9, 0x0868, 0xd86a, 0x084d, 0xd84f, 0x0822, 0xd820, 0x0807, 0xd805, 0x08fc, 0xd8fe,
8354 +
            0x08d9, 0xd8db, 0x08b6, 0xd8b4, 0x0893, 0xd891, 0x0b10, 0xdb12, 0x0b35, 0xdb37, 0x0b5a,
8355 +
            0xdb58, 0x0b7f, 0xdb7d, 0x0b84, 0xdb86, 0x0ba1, 0xdba3, 0x0bce, 0xdbcc, 0x0beb, 0xdbe9,
8356 +
            0x0a38, 0xda3a, 0x0a1d, 0xda1f, 0x0a72, 0xda70, 0x0a57, 0xda55, 0x0aac, 0xdaae, 0x0a89,
8357 +
            0xda8b, 0x0ae6, 0xdae4, 0x0ac3, 0xdac1, 0x0de0, 0xdde2, 0x0dc5, 0xddc7, 0x0daa, 0xdda8,
8358 +
            0x0d8f, 0xdd8d, 0x0d74, 0xdd76, 0x0d51, 0xdd53, 0x0d3e, 0xdd3c, 0x0d1b, 0xdd19, 0x0cc8,
8359 +
            0xdcca, 0x0ced, 0xdcef, 0x0c82, 0xdc80, 0x0ca7, 0xdca5, 0x0c5c, 0xdc5e, 0x0c79, 0xdc7b,
8360 +
            0x0c16, 0xdc14, 0x0c33, 0xdc31, 0x0fb0, 0xdfb2, 0x0f95, 0xdf97, 0x0ffa, 0xdff8, 0x0fdf,
8361 +
            0xdfdd, 0x0f24, 0xdf26, 0x0f01, 0xdf03, 0x0f6e, 0xdf6c, 0x0f4b, 0xdf49, 0x0e98, 0xde9a,
8362 +
            0x0ebd, 0xdebf, 0x0ed2, 0xded0, 0x0ef7, 0xdef5, 0x0e0c, 0xde0e, 0x0e29, 0xde2b, 0x0e46,
8363 +
            0xde44, 0x0e63, 0xde61,
8364 +
        ],
8365 +
        [
8366 +
            0x0000, 0x6b98, 0xd730, 0xbca8, 0x0e41, 0x65d9, 0xd971, 0xb2e9, 0x1c82, 0x771a, 0xcbb2,
8367 +
            0xa02a, 0x12c3, 0x795b, 0xc5f3, 0xae6b, 0x3904, 0x529c, 0xee34, 0x85ac, 0x3745, 0x5cdd,
8368 +
            0xe075, 0x8bed, 0x2586, 0x4e1e, 0xf2b6, 0x992e, 0x2bc7, 0x405f, 0xfcf7, 0x976f, 0x7208,
8369 +
            0x1990, 0xa538, 0xcea0, 0x7c49, 0x17d1, 0xab79, 0xc0e1, 0x6e8a, 0x0512, 0xb9ba, 0xd222,
8370 +
            0x60cb, 0x0b53, 0xb7fb, 0xdc63, 0x4b0c, 0x2094, 0x9c3c, 0xf7a4, 0x454d, 0x2ed5, 0x927d,
8371 +
            0xf9e5, 0x578e, 0x3c16, 0x80be, 0xeb26, 0x59cf, 0x3257, 0x8eff, 0xe567, 0xe410, 0x8f88,
8372 +
            0x3320, 0x58b8, 0xea51, 0x81c9, 0x3d61, 0x56f9, 0xf892, 0x930a, 0x2fa2, 0x443a, 0xf6d3,
8373 +
            0x9d4b, 0x21e3, 0x4a7b, 0xdd14, 0xb68c, 0x0a24, 0x61bc, 0xd355, 0xb8cd, 0x0465, 0x6ffd,
8374 +
            0xc196, 0xaa0e, 0x16a6, 0x7d3e, 0xcfd7, 0xa44f, 0x18e7, 0x737f, 0x9618, 0xfd80, 0x4128,
8375 +
            0x2ab0, 0x9859, 0xf3c1, 0x4f69, 0x24f1, 0x8a9a, 0xe102, 0x5daa, 0x3632, 0x84db, 0xef43,
8376 +
            0x53eb, 0x3873, 0xaf1c, 0xc484, 0x782c, 0x13b4, 0xa15d, 0xcac5, 0x766d, 0x1df5, 0xb39e,
8377 +
            0xd806, 0x64ae, 0x0f36, 0xbddf, 0xd647, 0x6aef, 0x0177, 0x6801, 0x0399, 0xbf31, 0xd4a9,
8378 +
            0x6640, 0x0dd8, 0xb170, 0xdae8, 0x7483, 0x1f1b, 0xa3b3, 0xc82b, 0x7ac2, 0x115a, 0xadf2,
8379 +
            0xc66a, 0x5105, 0x3a9d, 0x8635, 0xedad, 0x5f44, 0x34dc, 0x8874, 0xe3ec, 0x4d87, 0x261f,
8380 +
            0x9ab7, 0xf12f, 0x43c6, 0x285e, 0x94f6, 0xff6e, 0x1a09, 0x7191, 0xcd39, 0xa6a1, 0x1448,
8381 +
            0x7fd0, 0xc378, 0xa8e0, 0x068b, 0x6d13, 0xd1bb, 0xba23, 0x08ca, 0x6352, 0xdffa, 0xb462,
8382 +
            0x230d, 0x4895, 0xf43d, 0x9fa5, 0x2d4c, 0x46d4, 0xfa7c, 0x91e4, 0x3f8f, 0x5417, 0xe8bf,
8383 +
            0x8327, 0x31ce, 0x5a56, 0xe6fe, 0x8d66, 0x8c11, 0xe789, 0x5b21, 0x30b9, 0x8250, 0xe9c8,
8384 +
            0x5560, 0x3ef8, 0x9093, 0xfb0b, 0x47a3, 0x2c3b, 0x9ed2, 0xf54a, 0x49e2, 0x227a, 0xb515,
8385 +
            0xde8d, 0x6225, 0x09bd, 0xbb54, 0xd0cc, 0x6c64, 0x07fc, 0xa997, 0xc20f, 0x7ea7, 0x153f,
8386 +
            0xa7d6, 0xcc4e, 0x70e6, 0x1b7e, 0xfe19, 0x9581, 0x2929, 0x42b1, 0xf058, 0x9bc0, 0x2768,
8387 +
            0x4cf0, 0xe29b, 0x8903, 0x35ab, 0x5e33, 0xecda, 0x8742, 0x3bea, 0x5072, 0xc71d, 0xac85,
8388 +
            0x102d, 0x7bb5, 0xc95c, 0xa2c4, 0x1e6c, 0x75f4, 0xdb9f, 0xb007, 0x0caf, 0x6737, 0xd5de,
8389 +
            0xbe46, 0x02ee, 0x6976,
8390 +
        ],
8391 +
    ];
8392 +
8393 +
    pub static CRC16_OPENSAFETY_A_TABLE: [[u16; 256]; 16] = [
8394 +
        [
8395 +
            0x0000, 0x5935, 0xb26a, 0xeb5f, 0x3de1, 0x64d4, 0x8f8b, 0xd6be, 0x7bc2, 0x22f7, 0xc9a8,
8396 +
            0x909d, 0x4623, 0x1f16, 0xf449, 0xad7c, 0xf784, 0xaeb1, 0x45ee, 0x1cdb, 0xca65, 0x9350,
8397 +
            0x780f, 0x213a, 0x8c46, 0xd573, 0x3e2c, 0x6719, 0xb1a7, 0xe892, 0x03cd, 0x5af8, 0xb63d,
8398 +
            0xef08, 0x0457, 0x5d62, 0x8bdc, 0xd2e9, 0x39b6, 0x6083, 0xcdff, 0x94ca, 0x7f95, 0x26a0,
8399 +
            0xf01e, 0xa92b, 0x4274, 0x1b41, 0x41b9, 0x188c, 0xf3d3, 0xaae6, 0x7c58, 0x256d, 0xce32,
8400 +
            0x9707, 0x3a7b, 0x634e, 0x8811, 0xd124, 0x079a, 0x5eaf, 0xb5f0, 0xecc5, 0x354f, 0x6c7a,
8401 +
            0x8725, 0xde10, 0x08ae, 0x519b, 0xbac4, 0xe3f1, 0x4e8d, 0x17b8, 0xfce7, 0xa5d2, 0x736c,
8402 +
            0x2a59, 0xc106, 0x9833, 0xc2cb, 0x9bfe, 0x70a1, 0x2994, 0xff2a, 0xa61f, 0x4d40, 0x1475,
8403 +
            0xb909, 0xe03c, 0x0b63, 0x5256, 0x84e8, 0xdddd, 0x3682, 0x6fb7, 0x8372, 0xda47, 0x3118,
8404 +
            0x682d, 0xbe93, 0xe7a6, 0x0cf9, 0x55cc, 0xf8b0, 0xa185, 0x4ada, 0x13ef, 0xc551, 0x9c64,
8405 +
            0x773b, 0x2e0e, 0x74f6, 0x2dc3, 0xc69c, 0x9fa9, 0x4917, 0x1022, 0xfb7d, 0xa248, 0x0f34,
8406 +
            0x5601, 0xbd5e, 0xe46b, 0x32d5, 0x6be0, 0x80bf, 0xd98a, 0x6a9e, 0x33ab, 0xd8f4, 0x81c1,
8407 +
            0x577f, 0x0e4a, 0xe515, 0xbc20, 0x115c, 0x4869, 0xa336, 0xfa03, 0x2cbd, 0x7588, 0x9ed7,
8408 +
            0xc7e2, 0x9d1a, 0xc42f, 0x2f70, 0x7645, 0xa0fb, 0xf9ce, 0x1291, 0x4ba4, 0xe6d8, 0xbfed,
8409 +
            0x54b2, 0x0d87, 0xdb39, 0x820c, 0x6953, 0x3066, 0xdca3, 0x8596, 0x6ec9, 0x37fc, 0xe142,
8410 +
            0xb877, 0x5328, 0x0a1d, 0xa761, 0xfe54, 0x150b, 0x4c3e, 0x9a80, 0xc3b5, 0x28ea, 0x71df,
8411 +
            0x2b27, 0x7212, 0x994d, 0xc078, 0x16c6, 0x4ff3, 0xa4ac, 0xfd99, 0x50e5, 0x09d0, 0xe28f,
8412 +
            0xbbba, 0x6d04, 0x3431, 0xdf6e, 0x865b, 0x5fd1, 0x06e4, 0xedbb, 0xb48e, 0x6230, 0x3b05,
8413 +
            0xd05a, 0x896f, 0x2413, 0x7d26, 0x9679, 0xcf4c, 0x19f2, 0x40c7, 0xab98, 0xf2ad, 0xa855,
8414 +
            0xf160, 0x1a3f, 0x430a, 0x95b4, 0xcc81, 0x27de, 0x7eeb, 0xd397, 0x8aa2, 0x61fd, 0x38c8,
8415 +
            0xee76, 0xb743, 0x5c1c, 0x0529, 0xe9ec, 0xb0d9, 0x5b86, 0x02b3, 0xd40d, 0x8d38, 0x6667,
8416 +
            0x3f52, 0x922e, 0xcb1b, 0x2044, 0x7971, 0xafcf, 0xf6fa, 0x1da5, 0x4490, 0x1e68, 0x475d,
8417 +
            0xac02, 0xf537, 0x2389, 0x7abc, 0x91e3, 0xc8d6, 0x65aa, 0x3c9f, 0xd7c0, 0x8ef5, 0x584b,
8418 +
            0x017e, 0xea21, 0xb314,
8419 +
        ],
8420 +
        [
8421 +
            0x0000, 0xd53c, 0xf34d, 0x2671, 0xbfaf, 0x6a93, 0x4ce2, 0x99de, 0x266b, 0xf357, 0xd526,
8422 +
            0x001a, 0x99c4, 0x4cf8, 0x6a89, 0xbfb5, 0x4cd6, 0x99ea, 0xbf9b, 0x6aa7, 0xf379, 0x2645,
8423 +
            0x0034, 0xd508, 0x6abd, 0xbf81, 0x99f0, 0x4ccc, 0xd512, 0x002e, 0x265f, 0xf363, 0x99ac,
8424 +
            0x4c90, 0x6ae1, 0xbfdd, 0x2603, 0xf33f, 0xd54e, 0x0072, 0xbfc7, 0x6afb, 0x4c8a, 0x99b6,
8425 +
            0x0068, 0xd554, 0xf325, 0x2619, 0xd57a, 0x0046, 0x2637, 0xf30b, 0x6ad5, 0xbfe9, 0x9998,
8426 +
            0x4ca4, 0xf311, 0x262d, 0x005c, 0xd560, 0x4cbe, 0x9982, 0xbff3, 0x6acf, 0x6a6d, 0xbf51,
8427 +
            0x9920, 0x4c1c, 0xd5c2, 0x00fe, 0x268f, 0xf3b3, 0x4c06, 0x993a, 0xbf4b, 0x6a77, 0xf3a9,
8428 +
            0x2695, 0x00e4, 0xd5d8, 0x26bb, 0xf387, 0xd5f6, 0x00ca, 0x9914, 0x4c28, 0x6a59, 0xbf65,
8429 +
            0x00d0, 0xd5ec, 0xf39d, 0x26a1, 0xbf7f, 0x6a43, 0x4c32, 0x990e, 0xf3c1, 0x26fd, 0x008c,
8430 +
            0xd5b0, 0x4c6e, 0x9952, 0xbf23, 0x6a1f, 0xd5aa, 0x0096, 0x26e7, 0xf3db, 0x6a05, 0xbf39,
8431 +
            0x9948, 0x4c74, 0xbf17, 0x6a2b, 0x4c5a, 0x9966, 0x00b8, 0xd584, 0xf3f5, 0x26c9, 0x997c,
8432 +
            0x4c40, 0x6a31, 0xbf0d, 0x26d3, 0xf3ef, 0xd59e, 0x00a2, 0xd4da, 0x01e6, 0x2797, 0xf2ab,
8433 +
            0x6b75, 0xbe49, 0x9838, 0x4d04, 0xf2b1, 0x278d, 0x01fc, 0xd4c0, 0x4d1e, 0x9822, 0xbe53,
8434 +
            0x6b6f, 0x980c, 0x4d30, 0x6b41, 0xbe7d, 0x27a3, 0xf29f, 0xd4ee, 0x01d2, 0xbe67, 0x6b5b,
8435 +
            0x4d2a, 0x9816, 0x01c8, 0xd4f4, 0xf285, 0x27b9, 0x4d76, 0x984a, 0xbe3b, 0x6b07, 0xf2d9,
8436 +
            0x27e5, 0x0194, 0xd4a8, 0x6b1d, 0xbe21, 0x9850, 0x4d6c, 0xd4b2, 0x018e, 0x27ff, 0xf2c3,
8437 +
            0x01a0, 0xd49c, 0xf2ed, 0x27d1, 0xbe0f, 0x6b33, 0x4d42, 0x987e, 0x27cb, 0xf2f7, 0xd486,
8438 +
            0x01ba, 0x9864, 0x4d58, 0x6b29, 0xbe15, 0xbeb7, 0x6b8b, 0x4dfa, 0x98c6, 0x0118, 0xd424,
8439 +
            0xf255, 0x2769, 0x98dc, 0x4de0, 0x6b91, 0xbead, 0x2773, 0xf24f, 0xd43e, 0x0102, 0xf261,
8440 +
            0x275d, 0x012c, 0xd410, 0x4dce, 0x98f2, 0xbe83, 0x6bbf, 0xd40a, 0x0136, 0x2747, 0xf27b,
8441 +
            0x6ba5, 0xbe99, 0x98e8, 0x4dd4, 0x271b, 0xf227, 0xd456, 0x016a, 0x98b4, 0x4d88, 0x6bf9,
8442 +
            0xbec5, 0x0170, 0xd44c, 0xf23d, 0x2701, 0xbedf, 0x6be3, 0x4d92, 0x98ae, 0x6bcd, 0xbef1,
8443 +
            0x9880, 0x4dbc, 0xd462, 0x015e, 0x272f, 0xf213, 0x4da6, 0x989a, 0xbeeb, 0x6bd7, 0xf209,
8444 +
            0x2735, 0x0144, 0xd478,
8445 +
        ],
8446 +
        [
8447 +
            0x0000, 0xf081, 0xb837, 0x48b6, 0x295b, 0xd9da, 0x916c, 0x61ed, 0x52b6, 0xa237, 0xea81,
8448 +
            0x1a00, 0x7bed, 0x8b6c, 0xc3da, 0x335b, 0xa56c, 0x55ed, 0x1d5b, 0xedda, 0x8c37, 0x7cb6,
8449 +
            0x3400, 0xc481, 0xf7da, 0x075b, 0x4fed, 0xbf6c, 0xde81, 0x2e00, 0x66b6, 0x9637, 0x13ed,
8450 +
            0xe36c, 0xabda, 0x5b5b, 0x3ab6, 0xca37, 0x8281, 0x7200, 0x415b, 0xb1da, 0xf96c, 0x09ed,
8451 +
            0x6800, 0x9881, 0xd037, 0x20b6, 0xb681, 0x4600, 0x0eb6, 0xfe37, 0x9fda, 0x6f5b, 0x27ed,
8452 +
            0xd76c, 0xe437, 0x14b6, 0x5c00, 0xac81, 0xcd6c, 0x3ded, 0x755b, 0x85da, 0x27da, 0xd75b,
8453 +
            0x9fed, 0x6f6c, 0x0e81, 0xfe00, 0xb6b6, 0x4637, 0x756c, 0x85ed, 0xcd5b, 0x3dda, 0x5c37,
8454 +
            0xacb6, 0xe400, 0x1481, 0x82b6, 0x7237, 0x3a81, 0xca00, 0xabed, 0x5b6c, 0x13da, 0xe35b,
8455 +
            0xd000, 0x2081, 0x6837, 0x98b6, 0xf95b, 0x09da, 0x416c, 0xb1ed, 0x3437, 0xc4b6, 0x8c00,
8456 +
            0x7c81, 0x1d6c, 0xeded, 0xa55b, 0x55da, 0x6681, 0x9600, 0xdeb6, 0x2e37, 0x4fda, 0xbf5b,
8457 +
            0xf7ed, 0x076c, 0x915b, 0x61da, 0x296c, 0xd9ed, 0xb800, 0x4881, 0x0037, 0xf0b6, 0xc3ed,
8458 +
            0x336c, 0x7bda, 0x8b5b, 0xeab6, 0x1a37, 0x5281, 0xa200, 0x4fb4, 0xbf35, 0xf783, 0x0702,
8459 +
            0x66ef, 0x966e, 0xded8, 0x2e59, 0x1d02, 0xed83, 0xa535, 0x55b4, 0x3459, 0xc4d8, 0x8c6e,
8460 +
            0x7cef, 0xead8, 0x1a59, 0x52ef, 0xa26e, 0xc383, 0x3302, 0x7bb4, 0x8b35, 0xb86e, 0x48ef,
8461 +
            0x0059, 0xf0d8, 0x9135, 0x61b4, 0x2902, 0xd983, 0x5c59, 0xacd8, 0xe46e, 0x14ef, 0x7502,
8462 +
            0x8583, 0xcd35, 0x3db4, 0x0eef, 0xfe6e, 0xb6d8, 0x4659, 0x27b4, 0xd735, 0x9f83, 0x6f02,
8463 +
            0xf935, 0x09b4, 0x4102, 0xb183, 0xd06e, 0x20ef, 0x6859, 0x98d8, 0xab83, 0x5b02, 0x13b4,
8464 +
            0xe335, 0x82d8, 0x7259, 0x3aef, 0xca6e, 0x686e, 0x98ef, 0xd059, 0x20d8, 0x4135, 0xb1b4,
8465 +
            0xf902, 0x0983, 0x3ad8, 0xca59, 0x82ef, 0x726e, 0x1383, 0xe302, 0xabb4, 0x5b35, 0xcd02,
8466 +
            0x3d83, 0x7535, 0x85b4, 0xe459, 0x14d8, 0x5c6e, 0xacef, 0x9fb4, 0x6f35, 0x2783, 0xd702,
8467 +
            0xb6ef, 0x466e, 0x0ed8, 0xfe59, 0x7b83, 0x8b02, 0xc3b4, 0x3335, 0x52d8, 0xa259, 0xeaef,
8468 +
            0x1a6e, 0x2935, 0xd9b4, 0x9102, 0x6183, 0x006e, 0xf0ef, 0xb859, 0x48d8, 0xdeef, 0x2e6e,
8469 +
            0x66d8, 0x9659, 0xf7b4, 0x0735, 0x4f83, 0xbf02, 0x8c59, 0x7cd8, 0x346e, 0xc4ef, 0xa502,
8470 +
            0x5583, 0x1d35, 0xedb4,
8471 +
        ],
8472 +
        [
8473 +
            0x0000, 0x9f68, 0x67e5, 0xf88d, 0xcfca, 0x50a2, 0xa82f, 0x3747, 0xc6a1, 0x59c9, 0xa144,
8474 +
            0x3e2c, 0x096b, 0x9603, 0x6e8e, 0xf1e6, 0xd477, 0x4b1f, 0xb392, 0x2cfa, 0x1bbd, 0x84d5,
8475 +
            0x7c58, 0xe330, 0x12d6, 0x8dbe, 0x7533, 0xea5b, 0xdd1c, 0x4274, 0xbaf9, 0x2591, 0xf1db,
8476 +
            0x6eb3, 0x963e, 0x0956, 0x3e11, 0xa179, 0x59f4, 0xc69c, 0x377a, 0xa812, 0x509f, 0xcff7,
8477 +
            0xf8b0, 0x67d8, 0x9f55, 0x003d, 0x25ac, 0xbac4, 0x4249, 0xdd21, 0xea66, 0x750e, 0x8d83,
8478 +
            0x12eb, 0xe30d, 0x7c65, 0x84e8, 0x1b80, 0x2cc7, 0xb3af, 0x4b22, 0xd44a, 0xba83, 0x25eb,
8479 +
            0xdd66, 0x420e, 0x7549, 0xea21, 0x12ac, 0x8dc4, 0x7c22, 0xe34a, 0x1bc7, 0x84af, 0xb3e8,
8480 +
            0x2c80, 0xd40d, 0x4b65, 0x6ef4, 0xf19c, 0x0911, 0x9679, 0xa13e, 0x3e56, 0xc6db, 0x59b3,
8481 +
            0xa855, 0x373d, 0xcfb0, 0x50d8, 0x679f, 0xf8f7, 0x007a, 0x9f12, 0x4b58, 0xd430, 0x2cbd,
8482 +
            0xb3d5, 0x8492, 0x1bfa, 0xe377, 0x7c1f, 0x8df9, 0x1291, 0xea1c, 0x7574, 0x4233, 0xdd5b,
8483 +
            0x25d6, 0xbabe, 0x9f2f, 0x0047, 0xf8ca, 0x67a2, 0x50e5, 0xcf8d, 0x3700, 0xa868, 0x598e,
8484 +
            0xc6e6, 0x3e6b, 0xa103, 0x9644, 0x092c, 0xf1a1, 0x6ec9, 0x2c33, 0xb35b, 0x4bd6, 0xd4be,
8485 +
            0xe3f9, 0x7c91, 0x841c, 0x1b74, 0xea92, 0x75fa, 0x8d77, 0x121f, 0x2558, 0xba30, 0x42bd,
8486 +
            0xddd5, 0xf844, 0x672c, 0x9fa1, 0x00c9, 0x378e, 0xa8e6, 0x506b, 0xcf03, 0x3ee5, 0xa18d,
8487 +
            0x5900, 0xc668, 0xf12f, 0x6e47, 0x96ca, 0x09a2, 0xdde8, 0x4280, 0xba0d, 0x2565, 0x1222,
8488 +
            0x8d4a, 0x75c7, 0xeaaf, 0x1b49, 0x8421, 0x7cac, 0xe3c4, 0xd483, 0x4beb, 0xb366, 0x2c0e,
8489 +
            0x099f, 0x96f7, 0x6e7a, 0xf112, 0xc655, 0x593d, 0xa1b0, 0x3ed8, 0xcf3e, 0x5056, 0xa8db,
8490 +
            0x37b3, 0x00f4, 0x9f9c, 0x6711, 0xf879, 0x96b0, 0x09d8, 0xf155, 0x6e3d, 0x597a, 0xc612,
8491 +
            0x3e9f, 0xa1f7, 0x5011, 0xcf79, 0x37f4, 0xa89c, 0x9fdb, 0x00b3, 0xf83e, 0x6756, 0x42c7,
8492 +
            0xddaf, 0x2522, 0xba4a, 0x8d0d, 0x1265, 0xeae8, 0x7580, 0x8466, 0x1b0e, 0xe383, 0x7ceb,
8493 +
            0x4bac, 0xd4c4, 0x2c49, 0xb321, 0x676b, 0xf803, 0x008e, 0x9fe6, 0xa8a1, 0x37c9, 0xcf44,
8494 +
            0x502c, 0xa1ca, 0x3ea2, 0xc62f, 0x5947, 0x6e00, 0xf168, 0x09e5, 0x968d, 0xb31c, 0x2c74,
8495 +
            0xd4f9, 0x4b91, 0x7cd6, 0xe3be, 0x1b33, 0x845b, 0x75bd, 0xead5, 0x1258, 0x8d30, 0xba77,
8496 +
            0x251f, 0xdd92, 0x42fa,
8497 +
        ],
8498 +
        [
8499 +
            0x0000, 0x5866, 0xb0cc, 0xe8aa, 0x38ad, 0x60cb, 0x8861, 0xd007, 0x715a, 0x293c, 0xc196,
8500 +
            0x99f0, 0x49f7, 0x1191, 0xf93b, 0xa15d, 0xe2b4, 0xbad2, 0x5278, 0x0a1e, 0xda19, 0x827f,
8501 +
            0x6ad5, 0x32b3, 0x93ee, 0xcb88, 0x2322, 0x7b44, 0xab43, 0xf325, 0x1b8f, 0x43e9, 0x9c5d,
8502 +
            0xc43b, 0x2c91, 0x74f7, 0xa4f0, 0xfc96, 0x143c, 0x4c5a, 0xed07, 0xb561, 0x5dcb, 0x05ad,
8503 +
            0xd5aa, 0x8dcc, 0x6566, 0x3d00, 0x7ee9, 0x268f, 0xce25, 0x9643, 0x4644, 0x1e22, 0xf688,
8504 +
            0xaeee, 0x0fb3, 0x57d5, 0xbf7f, 0xe719, 0x371e, 0x6f78, 0x87d2, 0xdfb4, 0x618f, 0x39e9,
8505 +
            0xd143, 0x8925, 0x5922, 0x0144, 0xe9ee, 0xb188, 0x10d5, 0x48b3, 0xa019, 0xf87f, 0x2878,
8506 +
            0x701e, 0x98b4, 0xc0d2, 0x833b, 0xdb5d, 0x33f7, 0x6b91, 0xbb96, 0xe3f0, 0x0b5a, 0x533c,
8507 +
            0xf261, 0xaa07, 0x42ad, 0x1acb, 0xcacc, 0x92aa, 0x7a00, 0x2266, 0xfdd2, 0xa5b4, 0x4d1e,
8508 +
            0x1578, 0xc57f, 0x9d19, 0x75b3, 0x2dd5, 0x8c88, 0xd4ee, 0x3c44, 0x6422, 0xb425, 0xec43,
8509 +
            0x04e9, 0x5c8f, 0x1f66, 0x4700, 0xafaa, 0xf7cc, 0x27cb, 0x7fad, 0x9707, 0xcf61, 0x6e3c,
8510 +
            0x365a, 0xdef0, 0x8696, 0x5691, 0x0ef7, 0xe65d, 0xbe3b, 0xc31e, 0x9b78, 0x73d2, 0x2bb4,
8511 +
            0xfbb3, 0xa3d5, 0x4b7f, 0x1319, 0xb244, 0xea22, 0x0288, 0x5aee, 0x8ae9, 0xd28f, 0x3a25,
8512 +
            0x6243, 0x21aa, 0x79cc, 0x9166, 0xc900, 0x1907, 0x4161, 0xa9cb, 0xf1ad, 0x50f0, 0x0896,
8513 +
            0xe03c, 0xb85a, 0x685d, 0x303b, 0xd891, 0x80f7, 0x5f43, 0x0725, 0xef8f, 0xb7e9, 0x67ee,
8514 +
            0x3f88, 0xd722, 0x8f44, 0x2e19, 0x767f, 0x9ed5, 0xc6b3, 0x16b4, 0x4ed2, 0xa678, 0xfe1e,
8515 +
            0xbdf7, 0xe591, 0x0d3b, 0x555d, 0x855a, 0xdd3c, 0x3596, 0x6df0, 0xccad, 0x94cb, 0x7c61,
8516 +
            0x2407, 0xf400, 0xac66, 0x44cc, 0x1caa, 0xa291, 0xfaf7, 0x125d, 0x4a3b, 0x9a3c, 0xc25a,
8517 +
            0x2af0, 0x7296, 0xd3cb, 0x8bad, 0x6307, 0x3b61, 0xeb66, 0xb300, 0x5baa, 0x03cc, 0x4025,
8518 +
            0x1843, 0xf0e9, 0xa88f, 0x7888, 0x20ee, 0xc844, 0x9022, 0x317f, 0x6919, 0x81b3, 0xd9d5,
8519 +
            0x09d2, 0x51b4, 0xb91e, 0xe178, 0x3ecc, 0x66aa, 0x8e00, 0xd666, 0x0661, 0x5e07, 0xb6ad,
8520 +
            0xeecb, 0x4f96, 0x17f0, 0xff5a, 0xa73c, 0x773b, 0x2f5d, 0xc7f7, 0x9f91, 0xdc78, 0x841e,
8521 +
            0x6cb4, 0x34d2, 0xe4d5, 0xbcb3, 0x5419, 0x0c7f, 0xad22, 0xf544, 0x1dee, 0x4588, 0x958f,
8522 +
            0xcde9, 0x2543, 0x7d25,
8523 +
        ],
8524 +
        [
8525 +
            0x0000, 0xdf09, 0xe727, 0x382e, 0x977b, 0x4872, 0x705c, 0xaf55, 0x77c3, 0xa8ca, 0x90e4,
8526 +
            0x4fed, 0xe0b8, 0x3fb1, 0x079f, 0xd896, 0xef86, 0x308f, 0x08a1, 0xd7a8, 0x78fd, 0xa7f4,
8527 +
            0x9fda, 0x40d3, 0x9845, 0x474c, 0x7f62, 0xa06b, 0x0f3e, 0xd037, 0xe819, 0x3710, 0x8639,
8528 +
            0x5930, 0x611e, 0xbe17, 0x1142, 0xce4b, 0xf665, 0x296c, 0xf1fa, 0x2ef3, 0x16dd, 0xc9d4,
8529 +
            0x6681, 0xb988, 0x81a6, 0x5eaf, 0x69bf, 0xb6b6, 0x8e98, 0x5191, 0xfec4, 0x21cd, 0x19e3,
8530 +
            0xc6ea, 0x1e7c, 0xc175, 0xf95b, 0x2652, 0x8907, 0x560e, 0x6e20, 0xb129, 0x5547, 0x8a4e,
8531 +
            0xb260, 0x6d69, 0xc23c, 0x1d35, 0x251b, 0xfa12, 0x2284, 0xfd8d, 0xc5a3, 0x1aaa, 0xb5ff,
8532 +
            0x6af6, 0x52d8, 0x8dd1, 0xbac1, 0x65c8, 0x5de6, 0x82ef, 0x2dba, 0xf2b3, 0xca9d, 0x1594,
8533 +
            0xcd02, 0x120b, 0x2a25, 0xf52c, 0x5a79, 0x8570, 0xbd5e, 0x6257, 0xd37e, 0x0c77, 0x3459,
8534 +
            0xeb50, 0x4405, 0x9b0c, 0xa322, 0x7c2b, 0xa4bd, 0x7bb4, 0x439a, 0x9c93, 0x33c6, 0xeccf,
8535 +
            0xd4e1, 0x0be8, 0x3cf8, 0xe3f1, 0xdbdf, 0x04d6, 0xab83, 0x748a, 0x4ca4, 0x93ad, 0x4b3b,
8536 +
            0x9432, 0xac1c, 0x7315, 0xdc40, 0x0349, 0x3b67, 0xe46e, 0xaa8e, 0x7587, 0x4da9, 0x92a0,
8537 +
            0x3df5, 0xe2fc, 0xdad2, 0x05db, 0xdd4d, 0x0244, 0x3a6a, 0xe563, 0x4a36, 0x953f, 0xad11,
8538 +
            0x7218, 0x4508, 0x9a01, 0xa22f, 0x7d26, 0xd273, 0x0d7a, 0x3554, 0xea5d, 0x32cb, 0xedc2,
8539 +
            0xd5ec, 0x0ae5, 0xa5b0, 0x7ab9, 0x4297, 0x9d9e, 0x2cb7, 0xf3be, 0xcb90, 0x1499, 0xbbcc,
8540 +
            0x64c5, 0x5ceb, 0x83e2, 0x5b74, 0x847d, 0xbc53, 0x635a, 0xcc0f, 0x1306, 0x2b28, 0xf421,
8541 +
            0xc331, 0x1c38, 0x2416, 0xfb1f, 0x544a, 0x8b43, 0xb36d, 0x6c64, 0xb4f2, 0x6bfb, 0x53d5,
8542 +
            0x8cdc, 0x2389, 0xfc80, 0xc4ae, 0x1ba7, 0xffc9, 0x20c0, 0x18ee, 0xc7e7, 0x68b2, 0xb7bb,
8543 +
            0x8f95, 0x509c, 0x880a, 0x5703, 0x6f2d, 0xb024, 0x1f71, 0xc078, 0xf856, 0x275f, 0x104f,
8544 +
            0xcf46, 0xf768, 0x2861, 0x8734, 0x583d, 0x6013, 0xbf1a, 0x678c, 0xb885, 0x80ab, 0x5fa2,
8545 +
            0xf0f7, 0x2ffe, 0x17d0, 0xc8d9, 0x79f0, 0xa6f9, 0x9ed7, 0x41de, 0xee8b, 0x3182, 0x09ac,
8546 +
            0xd6a5, 0x0e33, 0xd13a, 0xe914, 0x361d, 0x9948, 0x4641, 0x7e6f, 0xa166, 0x9676, 0x497f,
8547 +
            0x7151, 0xae58, 0x010d, 0xde04, 0xe62a, 0x3923, 0xe1b5, 0x3ebc, 0x0692, 0xd99b, 0x76ce,
8548 +
            0xa9c7, 0x91e9, 0x4ee0,
8549 +
        ],
8550 +
        [
8551 +
            0x0000, 0x0c29, 0x1852, 0x147b, 0x30a4, 0x3c8d, 0x28f6, 0x24df, 0x6148, 0x6d61, 0x791a,
8552 +
            0x7533, 0x51ec, 0x5dc5, 0x49be, 0x4597, 0xc290, 0xceb9, 0xdac2, 0xd6eb, 0xf234, 0xfe1d,
8553 +
            0xea66, 0xe64f, 0xa3d8, 0xaff1, 0xbb8a, 0xb7a3, 0x937c, 0x9f55, 0x8b2e, 0x8707, 0xdc15,
8554 +
            0xd03c, 0xc447, 0xc86e, 0xecb1, 0xe098, 0xf4e3, 0xf8ca, 0xbd5d, 0xb174, 0xa50f, 0xa926,
8555 +
            0x8df9, 0x81d0, 0x95ab, 0x9982, 0x1e85, 0x12ac, 0x06d7, 0x0afe, 0x2e21, 0x2208, 0x3673,
8556 +
            0x3a5a, 0x7fcd, 0x73e4, 0x679f, 0x6bb6, 0x4f69, 0x4340, 0x573b, 0x5b12, 0xe11f, 0xed36,
8557 +
            0xf94d, 0xf564, 0xd1bb, 0xdd92, 0xc9e9, 0xc5c0, 0x8057, 0x8c7e, 0x9805, 0x942c, 0xb0f3,
8558 +
            0xbcda, 0xa8a1, 0xa488, 0x238f, 0x2fa6, 0x3bdd, 0x37f4, 0x132b, 0x1f02, 0x0b79, 0x0750,
8559 +
            0x42c7, 0x4eee, 0x5a95, 0x56bc, 0x7263, 0x7e4a, 0x6a31, 0x6618, 0x3d0a, 0x3123, 0x2558,
8560 +
            0x2971, 0x0dae, 0x0187, 0x15fc, 0x19d5, 0x5c42, 0x506b, 0x4410, 0x4839, 0x6ce6, 0x60cf,
8561 +
            0x74b4, 0x789d, 0xff9a, 0xf3b3, 0xe7c8, 0xebe1, 0xcf3e, 0xc317, 0xd76c, 0xdb45, 0x9ed2,
8562 +
            0x92fb, 0x8680, 0x8aa9, 0xae76, 0xa25f, 0xb624, 0xba0d, 0x9b0b, 0x9722, 0x8359, 0x8f70,
8563 +
            0xabaf, 0xa786, 0xb3fd, 0xbfd4, 0xfa43, 0xf66a, 0xe211, 0xee38, 0xcae7, 0xc6ce, 0xd2b5,
8564 +
            0xde9c, 0x599b, 0x55b2, 0x41c9, 0x4de0, 0x693f, 0x6516, 0x716d, 0x7d44, 0x38d3, 0x34fa,
8565 +
            0x2081, 0x2ca8, 0x0877, 0x045e, 0x1025, 0x1c0c, 0x471e, 0x4b37, 0x5f4c, 0x5365, 0x77ba,
8566 +
            0x7b93, 0x6fe8, 0x63c1, 0x2656, 0x2a7f, 0x3e04, 0x322d, 0x16f2, 0x1adb, 0x0ea0, 0x0289,
8567 +
            0x858e, 0x89a7, 0x9ddc, 0x91f5, 0xb52a, 0xb903, 0xad78, 0xa151, 0xe4c6, 0xe8ef, 0xfc94,
8568 +
            0xf0bd, 0xd462, 0xd84b, 0xcc30, 0xc019, 0x7a14, 0x763d, 0x6246, 0x6e6f, 0x4ab0, 0x4699,
8569 +
            0x52e2, 0x5ecb, 0x1b5c, 0x1775, 0x030e, 0x0f27, 0x2bf8, 0x27d1, 0x33aa, 0x3f83, 0xb884,
8570 +
            0xb4ad, 0xa0d6, 0xacff, 0x8820, 0x8409, 0x9072, 0x9c5b, 0xd9cc, 0xd5e5, 0xc19e, 0xcdb7,
8571 +
            0xe968, 0xe541, 0xf13a, 0xfd13, 0xa601, 0xaa28, 0xbe53, 0xb27a, 0x96a5, 0x9a8c, 0x8ef7,
8572 +
            0x82de, 0xc749, 0xcb60, 0xdf1b, 0xd332, 0xf7ed, 0xfbc4, 0xefbf, 0xe396, 0x6491, 0x68b8,
8573 +
            0x7cc3, 0x70ea, 0x5435, 0x581c, 0x4c67, 0x404e, 0x05d9, 0x09f0, 0x1d8b, 0x11a2, 0x357d,
8574 +
            0x3954, 0x2d2f, 0x2106,
8575 +
        ],
8576 +
        [
8577 +
            0x0000, 0x6f23, 0xde46, 0xb165, 0xe5b9, 0x8a9a, 0x3bff, 0x54dc, 0x9247, 0xfd64, 0x4c01,
8578 +
            0x2322, 0x77fe, 0x18dd, 0xa9b8, 0xc69b, 0x7dbb, 0x1298, 0xa3fd, 0xccde, 0x9802, 0xf721,
8579 +
            0x4644, 0x2967, 0xeffc, 0x80df, 0x31ba, 0x5e99, 0x0a45, 0x6566, 0xd403, 0xbb20, 0xfb76,
8580 +
            0x9455, 0x2530, 0x4a13, 0x1ecf, 0x71ec, 0xc089, 0xafaa, 0x6931, 0x0612, 0xb777, 0xd854,
8581 +
            0x8c88, 0xe3ab, 0x52ce, 0x3ded, 0x86cd, 0xe9ee, 0x588b, 0x37a8, 0x6374, 0x0c57, 0xbd32,
8582 +
            0xd211, 0x148a, 0x7ba9, 0xcacc, 0xa5ef, 0xf133, 0x9e10, 0x2f75, 0x4056, 0xafd9, 0xc0fa,
8583 +
            0x719f, 0x1ebc, 0x4a60, 0x2543, 0x9426, 0xfb05, 0x3d9e, 0x52bd, 0xe3d8, 0x8cfb, 0xd827,
8584 +
            0xb704, 0x0661, 0x6942, 0xd262, 0xbd41, 0x0c24, 0x6307, 0x37db, 0x58f8, 0xe99d, 0x86be,
8585 +
            0x4025, 0x2f06, 0x9e63, 0xf140, 0xa59c, 0xcabf, 0x7bda, 0x14f9, 0x54af, 0x3b8c, 0x8ae9,
8586 +
            0xe5ca, 0xb116, 0xde35, 0x6f50, 0x0073, 0xc6e8, 0xa9cb, 0x18ae, 0x778d, 0x2351, 0x4c72,
8587 +
            0xfd17, 0x9234, 0x2914, 0x4637, 0xf752, 0x9871, 0xccad, 0xa38e, 0x12eb, 0x7dc8, 0xbb53,
8588 +
            0xd470, 0x6515, 0x0a36, 0x5eea, 0x31c9, 0x80ac, 0xef8f, 0x0687, 0x69a4, 0xd8c1, 0xb7e2,
8589 +
            0xe33e, 0x8c1d, 0x3d78, 0x525b, 0x94c0, 0xfbe3, 0x4a86, 0x25a5, 0x7179, 0x1e5a, 0xaf3f,
8590 +
            0xc01c, 0x7b3c, 0x141f, 0xa57a, 0xca59, 0x9e85, 0xf1a6, 0x40c3, 0x2fe0, 0xe97b, 0x8658,
8591 +
            0x373d, 0x581e, 0x0cc2, 0x63e1, 0xd284, 0xbda7, 0xfdf1, 0x92d2, 0x23b7, 0x4c94, 0x1848,
8592 +
            0x776b, 0xc60e, 0xa92d, 0x6fb6, 0x0095, 0xb1f0, 0xded3, 0x8a0f, 0xe52c, 0x5449, 0x3b6a,
8593 +
            0x804a, 0xef69, 0x5e0c, 0x312f, 0x65f3, 0x0ad0, 0xbbb5, 0xd496, 0x120d, 0x7d2e, 0xcc4b,
8594 +
            0xa368, 0xf7b4, 0x9897, 0x29f2, 0x46d1, 0xa95e, 0xc67d, 0x7718, 0x183b, 0x4ce7, 0x23c4,
8595 +
            0x92a1, 0xfd82, 0x3b19, 0x543a, 0xe55f, 0x8a7c, 0xdea0, 0xb183, 0x00e6, 0x6fc5, 0xd4e5,
8596 +
            0xbbc6, 0x0aa3, 0x6580, 0x315c, 0x5e7f, 0xef1a, 0x8039, 0x46a2, 0x2981, 0x98e4, 0xf7c7,
8597 +
            0xa31b, 0xcc38, 0x7d5d, 0x127e, 0x5228, 0x3d0b, 0x8c6e, 0xe34d, 0xb791, 0xd8b2, 0x69d7,
8598 +
            0x06f4, 0xc06f, 0xaf4c, 0x1e29, 0x710a, 0x25d6, 0x4af5, 0xfb90, 0x94b3, 0x2f93, 0x40b0,
8599 +
            0xf1d5, 0x9ef6, 0xca2a, 0xa509, 0x146c, 0x7b4f, 0xbdd4, 0xd2f7, 0x6392, 0x0cb1, 0x586d,
8600 +
            0x374e, 0x862b, 0xe908,
8601 +
        ],
8602 +
        [
8603 +
            0x0000, 0x0d0e, 0x1a1c, 0x1712, 0x3438, 0x3936, 0x2e24, 0x232a, 0x6870, 0x657e, 0x726c,
8604 +
            0x7f62, 0x5c48, 0x5146, 0x4654, 0x4b5a, 0xd0e0, 0xddee, 0xcafc, 0xc7f2, 0xe4d8, 0xe9d6,
8605 +
            0xfec4, 0xf3ca, 0xb890, 0xb59e, 0xa28c, 0xaf82, 0x8ca8, 0x81a6, 0x96b4, 0x9bba, 0xf8f5,
8606 +
            0xf5fb, 0xe2e9, 0xefe7, 0xcccd, 0xc1c3, 0xd6d1, 0xdbdf, 0x9085, 0x9d8b, 0x8a99, 0x8797,
8607 +
            0xa4bd, 0xa9b3, 0xbea1, 0xb3af, 0x2815, 0x251b, 0x3209, 0x3f07, 0x1c2d, 0x1123, 0x0631,
8608 +
            0x0b3f, 0x4065, 0x4d6b, 0x5a79, 0x5777, 0x745d, 0x7953, 0x6e41, 0x634f, 0xa8df, 0xa5d1,
8609 +
            0xb2c3, 0xbfcd, 0x9ce7, 0x91e9, 0x86fb, 0x8bf5, 0xc0af, 0xcda1, 0xdab3, 0xd7bd, 0xf497,
8610 +
            0xf999, 0xee8b, 0xe385, 0x783f, 0x7531, 0x6223, 0x6f2d, 0x4c07, 0x4109, 0x561b, 0x5b15,
8611 +
            0x104f, 0x1d41, 0x0a53, 0x075d, 0x2477, 0x2979, 0x3e6b, 0x3365, 0x502a, 0x5d24, 0x4a36,
8612 +
            0x4738, 0x6412, 0x691c, 0x7e0e, 0x7300, 0x385a, 0x3554, 0x2246, 0x2f48, 0x0c62, 0x016c,
8613 +
            0x167e, 0x1b70, 0x80ca, 0x8dc4, 0x9ad6, 0x97d8, 0xb4f2, 0xb9fc, 0xaeee, 0xa3e0, 0xe8ba,
8614 +
            0xe5b4, 0xf2a6, 0xffa8, 0xdc82, 0xd18c, 0xc69e, 0xcb90, 0x088b, 0x0585, 0x1297, 0x1f99,
8615 +
            0x3cb3, 0x31bd, 0x26af, 0x2ba1, 0x60fb, 0x6df5, 0x7ae7, 0x77e9, 0x54c3, 0x59cd, 0x4edf,
8616 +
            0x43d1, 0xd86b, 0xd565, 0xc277, 0xcf79, 0xec53, 0xe15d, 0xf64f, 0xfb41, 0xb01b, 0xbd15,
8617 +
            0xaa07, 0xa709, 0x8423, 0x892d, 0x9e3f, 0x9331, 0xf07e, 0xfd70, 0xea62, 0xe76c, 0xc446,
8618 +
            0xc948, 0xde5a, 0xd354, 0x980e, 0x9500, 0x8212, 0x8f1c, 0xac36, 0xa138, 0xb62a, 0xbb24,
8619 +
            0x209e, 0x2d90, 0x3a82, 0x378c, 0x14a6, 0x19a8, 0x0eba, 0x03b4, 0x48ee, 0x45e0, 0x52f2,
8620 +
            0x5ffc, 0x7cd6, 0x71d8, 0x66ca, 0x6bc4, 0xa054, 0xad5a, 0xba48, 0xb746, 0x946c, 0x9962,
8621 +
            0x8e70, 0x837e, 0xc824, 0xc52a, 0xd238, 0xdf36, 0xfc1c, 0xf112, 0xe600, 0xeb0e, 0x70b4,
8622 +
            0x7dba, 0x6aa8, 0x67a6, 0x448c, 0x4982, 0x5e90, 0x539e, 0x18c4, 0x15ca, 0x02d8, 0x0fd6,
8623 +
            0x2cfc, 0x21f2, 0x36e0, 0x3bee, 0x58a1, 0x55af, 0x42bd, 0x4fb3, 0x6c99, 0x6197, 0x7685,
8624 +
            0x7b8b, 0x30d1, 0x3ddf, 0x2acd, 0x27c3, 0x04e9, 0x09e7, 0x1ef5, 0x13fb, 0x8841, 0x854f,
8625 +
            0x925d, 0x9f53, 0xbc79, 0xb177, 0xa665, 0xab6b, 0xe031, 0xed3f, 0xfa2d, 0xf723, 0xd409,
8626 +
            0xd907, 0xce15, 0xc31b,
8627 +
        ],
8628 +
        [
8629 +
            0x0000, 0x1116, 0x222c, 0x333a, 0x4458, 0x554e, 0x6674, 0x7762, 0x88b0, 0x99a6, 0xaa9c,
8630 +
            0xbb8a, 0xcce8, 0xddfe, 0xeec4, 0xffd2, 0x4855, 0x5943, 0x6a79, 0x7b6f, 0x0c0d, 0x1d1b,
8631 +
            0x2e21, 0x3f37, 0xc0e5, 0xd1f3, 0xe2c9, 0xf3df, 0x84bd, 0x95ab, 0xa691, 0xb787, 0x90aa,
8632 +
            0x81bc, 0xb286, 0xa390, 0xd4f2, 0xc5e4, 0xf6de, 0xe7c8, 0x181a, 0x090c, 0x3a36, 0x2b20,
8633 +
            0x5c42, 0x4d54, 0x7e6e, 0x6f78, 0xd8ff, 0xc9e9, 0xfad3, 0xebc5, 0x9ca7, 0x8db1, 0xbe8b,
8634 +
            0xaf9d, 0x504f, 0x4159, 0x7263, 0x6375, 0x1417, 0x0501, 0x363b, 0x272d, 0x7861, 0x6977,
8635 +
            0x5a4d, 0x4b5b, 0x3c39, 0x2d2f, 0x1e15, 0x0f03, 0xf0d1, 0xe1c7, 0xd2fd, 0xc3eb, 0xb489,
8636 +
            0xa59f, 0x96a5, 0x87b3, 0x3034, 0x2122, 0x1218, 0x030e, 0x746c, 0x657a, 0x5640, 0x4756,
8637 +
            0xb884, 0xa992, 0x9aa8, 0x8bbe, 0xfcdc, 0xedca, 0xdef0, 0xcfe6, 0xe8cb, 0xf9dd, 0xcae7,
8638 +
            0xdbf1, 0xac93, 0xbd85, 0x8ebf, 0x9fa9, 0x607b, 0x716d, 0x4257, 0x5341, 0x2423, 0x3535,
8639 +
            0x060f, 0x1719, 0xa09e, 0xb188, 0x82b2, 0x93a4, 0xe4c6, 0xf5d0, 0xc6ea, 0xd7fc, 0x282e,
8640 +
            0x3938, 0x0a02, 0x1b14, 0x6c76, 0x7d60, 0x4e5a, 0x5f4c, 0xf0c2, 0xe1d4, 0xd2ee, 0xc3f8,
8641 +
            0xb49a, 0xa58c, 0x96b6, 0x87a0, 0x7872, 0x6964, 0x5a5e, 0x4b48, 0x3c2a, 0x2d3c, 0x1e06,
8642 +
            0x0f10, 0xb897, 0xa981, 0x9abb, 0x8bad, 0xfccf, 0xedd9, 0xdee3, 0xcff5, 0x3027, 0x2131,
8643 +
            0x120b, 0x031d, 0x747f, 0x6569, 0x5653, 0x4745, 0x6068, 0x717e, 0x4244, 0x5352, 0x2430,
8644 +
            0x3526, 0x061c, 0x170a, 0xe8d8, 0xf9ce, 0xcaf4, 0xdbe2, 0xac80, 0xbd96, 0x8eac, 0x9fba,
8645 +
            0x283d, 0x392b, 0x0a11, 0x1b07, 0x6c65, 0x7d73, 0x4e49, 0x5f5f, 0xa08d, 0xb19b, 0x82a1,
8646 +
            0x93b7, 0xe4d5, 0xf5c3, 0xc6f9, 0xd7ef, 0x88a3, 0x99b5, 0xaa8f, 0xbb99, 0xccfb, 0xdded,
8647 +
            0xeed7, 0xffc1, 0x0013, 0x1105, 0x223f, 0x3329, 0x444b, 0x555d, 0x6667, 0x7771, 0xc0f6,
8648 +
            0xd1e0, 0xe2da, 0xf3cc, 0x84ae, 0x95b8, 0xa682, 0xb794, 0x4846, 0x5950, 0x6a6a, 0x7b7c,
8649 +
            0x0c1e, 0x1d08, 0x2e32, 0x3f24, 0x1809, 0x091f, 0x3a25, 0x2b33, 0x5c51, 0x4d47, 0x7e7d,
8650 +
            0x6f6b, 0x90b9, 0x81af, 0xb295, 0xa383, 0xd4e1, 0xc5f7, 0xf6cd, 0xe7db, 0x505c, 0x414a,
8651 +
            0x7270, 0x6366, 0x1404, 0x0512, 0x3628, 0x273e, 0xd8ec, 0xc9fa, 0xfac0, 0xebd6, 0x9cb4,
8652 +
            0x8da2, 0xbe98, 0xaf8e,
8653 +
        ],
8654 +
        [
8655 +
            0x0000, 0xb8b1, 0x2857, 0x90e6, 0x50ae, 0xe81f, 0x78f9, 0xc048, 0xa15c, 0x19ed, 0x890b,
8656 +
            0x31ba, 0xf1f2, 0x4943, 0xd9a5, 0x6114, 0x1b8d, 0xa33c, 0x33da, 0x8b6b, 0x4b23, 0xf392,
8657 +
            0x6374, 0xdbc5, 0xbad1, 0x0260, 0x9286, 0x2a37, 0xea7f, 0x52ce, 0xc228, 0x7a99, 0x371a,
8658 +
            0x8fab, 0x1f4d, 0xa7fc, 0x67b4, 0xdf05, 0x4fe3, 0xf752, 0x9646, 0x2ef7, 0xbe11, 0x06a0,
8659 +
            0xc6e8, 0x7e59, 0xeebf, 0x560e, 0x2c97, 0x9426, 0x04c0, 0xbc71, 0x7c39, 0xc488, 0x546e,
8660 +
            0xecdf, 0x8dcb, 0x357a, 0xa59c, 0x1d2d, 0xdd65, 0x65d4, 0xf532, 0x4d83, 0x6e34, 0xd685,
8661 +
            0x4663, 0xfed2, 0x3e9a, 0x862b, 0x16cd, 0xae7c, 0xcf68, 0x77d9, 0xe73f, 0x5f8e, 0x9fc6,
8662 +
            0x2777, 0xb791, 0x0f20, 0x75b9, 0xcd08, 0x5dee, 0xe55f, 0x2517, 0x9da6, 0x0d40, 0xb5f1,
8663 +
            0xd4e5, 0x6c54, 0xfcb2, 0x4403, 0x844b, 0x3cfa, 0xac1c, 0x14ad, 0x592e, 0xe19f, 0x7179,
8664 +
            0xc9c8, 0x0980, 0xb131, 0x21d7, 0x9966, 0xf872, 0x40c3, 0xd025, 0x6894, 0xa8dc, 0x106d,
8665 +
            0x808b, 0x383a, 0x42a3, 0xfa12, 0x6af4, 0xd245, 0x120d, 0xaabc, 0x3a5a, 0x82eb, 0xe3ff,
8666 +
            0x5b4e, 0xcba8, 0x7319, 0xb351, 0x0be0, 0x9b06, 0x23b7, 0xdc68, 0x64d9, 0xf43f, 0x4c8e,
8667 +
            0x8cc6, 0x3477, 0xa491, 0x1c20, 0x7d34, 0xc585, 0x5563, 0xedd2, 0x2d9a, 0x952b, 0x05cd,
8668 +
            0xbd7c, 0xc7e5, 0x7f54, 0xefb2, 0x5703, 0x974b, 0x2ffa, 0xbf1c, 0x07ad, 0x66b9, 0xde08,
8669 +
            0x4eee, 0xf65f, 0x3617, 0x8ea6, 0x1e40, 0xa6f1, 0xeb72, 0x53c3, 0xc325, 0x7b94, 0xbbdc,
8670 +
            0x036d, 0x938b, 0x2b3a, 0x4a2e, 0xf29f, 0x6279, 0xdac8, 0x1a80, 0xa231, 0x32d7, 0x8a66,
8671 +
            0xf0ff, 0x484e, 0xd8a8, 0x6019, 0xa051, 0x18e0, 0x8806, 0x30b7, 0x51a3, 0xe912, 0x79f4,
8672 +
            0xc145, 0x010d, 0xb9bc, 0x295a, 0x91eb, 0xb25c, 0x0aed, 0x9a0b, 0x22ba, 0xe2f2, 0x5a43,
8673 +
            0xcaa5, 0x7214, 0x1300, 0xabb1, 0x3b57, 0x83e6, 0x43ae, 0xfb1f, 0x6bf9, 0xd348, 0xa9d1,
8674 +
            0x1160, 0x8186, 0x3937, 0xf97f, 0x41ce, 0xd128, 0x6999, 0x088d, 0xb03c, 0x20da, 0x986b,
8675 +
            0x5823, 0xe092, 0x7074, 0xc8c5, 0x8546, 0x3df7, 0xad11, 0x15a0, 0xd5e8, 0x6d59, 0xfdbf,
8676 +
            0x450e, 0x241a, 0x9cab, 0x0c4d, 0xb4fc, 0x74b4, 0xcc05, 0x5ce3, 0xe452, 0x9ecb, 0x267a,
8677 +
            0xb69c, 0x0e2d, 0xce65, 0x76d4, 0xe632, 0x5e83, 0x3f97, 0x8726, 0x17c0, 0xaf71, 0x6f39,
8678 +
            0xd788, 0x476e, 0xffdf,
8679 +
        ],
8680 +
        [
8681 +
            0x0000, 0xe1e5, 0x9aff, 0x7b1a, 0x6ccb, 0x8d2e, 0xf634, 0x17d1, 0xd996, 0x3873, 0x4369,
8682 +
            0xa28c, 0xb55d, 0x54b8, 0x2fa2, 0xce47, 0xea19, 0x0bfc, 0x70e6, 0x9103, 0x86d2, 0x6737,
8683 +
            0x1c2d, 0xfdc8, 0x338f, 0xd26a, 0xa970, 0x4895, 0x5f44, 0xbea1, 0xc5bb, 0x245e, 0x8d07,
8684 +
            0x6ce2, 0x17f8, 0xf61d, 0xe1cc, 0x0029, 0x7b33, 0x9ad6, 0x5491, 0xb574, 0xce6e, 0x2f8b,
8685 +
            0x385a, 0xd9bf, 0xa2a5, 0x4340, 0x671e, 0x86fb, 0xfde1, 0x1c04, 0x0bd5, 0xea30, 0x912a,
8686 +
            0x70cf, 0xbe88, 0x5f6d, 0x2477, 0xc592, 0xd243, 0x33a6, 0x48bc, 0xa959, 0x433b, 0xa2de,
8687 +
            0xd9c4, 0x3821, 0x2ff0, 0xce15, 0xb50f, 0x54ea, 0x9aad, 0x7b48, 0x0052, 0xe1b7, 0xf666,
8688 +
            0x1783, 0x6c99, 0x8d7c, 0xa922, 0x48c7, 0x33dd, 0xd238, 0xc5e9, 0x240c, 0x5f16, 0xbef3,
8689 +
            0x70b4, 0x9151, 0xea4b, 0x0bae, 0x1c7f, 0xfd9a, 0x8680, 0x6765, 0xce3c, 0x2fd9, 0x54c3,
8690 +
            0xb526, 0xa2f7, 0x4312, 0x3808, 0xd9ed, 0x17aa, 0xf64f, 0x8d55, 0x6cb0, 0x7b61, 0x9a84,
8691 +
            0xe19e, 0x007b, 0x2425, 0xc5c0, 0xbeda, 0x5f3f, 0x48ee, 0xa90b, 0xd211, 0x33f4, 0xfdb3,
8692 +
            0x1c56, 0x674c, 0x86a9, 0x9178, 0x709d, 0x0b87, 0xea62, 0x8676, 0x6793, 0x1c89, 0xfd6c,
8693 +
            0xeabd, 0x0b58, 0x7042, 0x91a7, 0x5fe0, 0xbe05, 0xc51f, 0x24fa, 0x332b, 0xd2ce, 0xa9d4,
8694 +
            0x4831, 0x6c6f, 0x8d8a, 0xf690, 0x1775, 0x00a4, 0xe141, 0x9a5b, 0x7bbe, 0xb5f9, 0x541c,
8695 +
            0x2f06, 0xcee3, 0xd932, 0x38d7, 0x43cd, 0xa228, 0x0b71, 0xea94, 0x918e, 0x706b, 0x67ba,
8696 +
            0x865f, 0xfd45, 0x1ca0, 0xd2e7, 0x3302, 0x4818, 0xa9fd, 0xbe2c, 0x5fc9, 0x24d3, 0xc536,
8697 +
            0xe168, 0x008d, 0x7b97, 0x9a72, 0x8da3, 0x6c46, 0x175c, 0xf6b9, 0x38fe, 0xd91b, 0xa201,
8698 +
            0x43e4, 0x5435, 0xb5d0, 0xceca, 0x2f2f, 0xc54d, 0x24a8, 0x5fb2, 0xbe57, 0xa986, 0x4863,
8699 +
            0x3379, 0xd29c, 0x1cdb, 0xfd3e, 0x8624, 0x67c1, 0x7010, 0x91f5, 0xeaef, 0x0b0a, 0x2f54,
8700 +
            0xceb1, 0xb5ab, 0x544e, 0x439f, 0xa27a, 0xd960, 0x3885, 0xf6c2, 0x1727, 0x6c3d, 0x8dd8,
8701 +
            0x9a09, 0x7bec, 0x00f6, 0xe113, 0x484a, 0xa9af, 0xd2b5, 0x3350, 0x2481, 0xc564, 0xbe7e,
8702 +
            0x5f9b, 0x91dc, 0x7039, 0x0b23, 0xeac6, 0xfd17, 0x1cf2, 0x67e8, 0x860d, 0xa253, 0x43b6,
8703 +
            0x38ac, 0xd949, 0xce98, 0x2f7d, 0x5467, 0xb582, 0x7bc5, 0x9a20, 0xe13a, 0x00df, 0x170e,
8704 +
            0xf6eb, 0x8df1, 0x6c14,
8705 +
        ],
8706 +
        [
8707 +
            0x0000, 0x55d9, 0xabb2, 0xfe6b, 0x0e51, 0x5b88, 0xa5e3, 0xf03a, 0x1ca2, 0x497b, 0xb710,
8708 +
            0xe2c9, 0x12f3, 0x472a, 0xb941, 0xec98, 0x3944, 0x6c9d, 0x92f6, 0xc72f, 0x3715, 0x62cc,
8709 +
            0x9ca7, 0xc97e, 0x25e6, 0x703f, 0x8e54, 0xdb8d, 0x2bb7, 0x7e6e, 0x8005, 0xd5dc, 0x7288,
8710 +
            0x2751, 0xd93a, 0x8ce3, 0x7cd9, 0x2900, 0xd76b, 0x82b2, 0x6e2a, 0x3bf3, 0xc598, 0x9041,
8711 +
            0x607b, 0x35a2, 0xcbc9, 0x9e10, 0x4bcc, 0x1e15, 0xe07e, 0xb5a7, 0x459d, 0x1044, 0xee2f,
8712 +
            0xbbf6, 0x576e, 0x02b7, 0xfcdc, 0xa905, 0x593f, 0x0ce6, 0xf28d, 0xa754, 0xe510, 0xb0c9,
8713 +
            0x4ea2, 0x1b7b, 0xeb41, 0xbe98, 0x40f3, 0x152a, 0xf9b2, 0xac6b, 0x5200, 0x07d9, 0xf7e3,
8714 +
            0xa23a, 0x5c51, 0x0988, 0xdc54, 0x898d, 0x77e6, 0x223f, 0xd205, 0x87dc, 0x79b7, 0x2c6e,
8715 +
            0xc0f6, 0x952f, 0x6b44, 0x3e9d, 0xcea7, 0x9b7e, 0x6515, 0x30cc, 0x9798, 0xc241, 0x3c2a,
8716 +
            0x69f3, 0x99c9, 0xcc10, 0x327b, 0x67a2, 0x8b3a, 0xdee3, 0x2088, 0x7551, 0x856b, 0xd0b2,
8717 +
            0x2ed9, 0x7b00, 0xaedc, 0xfb05, 0x056e, 0x50b7, 0xa08d, 0xf554, 0x0b3f, 0x5ee6, 0xb27e,
8718 +
            0xe7a7, 0x19cc, 0x4c15, 0xbc2f, 0xe9f6, 0x179d, 0x4244, 0x9315, 0xc6cc, 0x38a7, 0x6d7e,
8719 +
            0x9d44, 0xc89d, 0x36f6, 0x632f, 0x8fb7, 0xda6e, 0x2405, 0x71dc, 0x81e6, 0xd43f, 0x2a54,
8720 +
            0x7f8d, 0xaa51, 0xff88, 0x01e3, 0x543a, 0xa400, 0xf1d9, 0x0fb2, 0x5a6b, 0xb6f3, 0xe32a,
8721 +
            0x1d41, 0x4898, 0xb8a2, 0xed7b, 0x1310, 0x46c9, 0xe19d, 0xb444, 0x4a2f, 0x1ff6, 0xefcc,
8722 +
            0xba15, 0x447e, 0x11a7, 0xfd3f, 0xa8e6, 0x568d, 0x0354, 0xf36e, 0xa6b7, 0x58dc, 0x0d05,
8723 +
            0xd8d9, 0x8d00, 0x736b, 0x26b2, 0xd688, 0x8351, 0x7d3a, 0x28e3, 0xc47b, 0x91a2, 0x6fc9,
8724 +
            0x3a10, 0xca2a, 0x9ff3, 0x6198, 0x3441, 0x7605, 0x23dc, 0xddb7, 0x886e, 0x7854, 0x2d8d,
8725 +
            0xd3e6, 0x863f, 0x6aa7, 0x3f7e, 0xc115, 0x94cc, 0x64f6, 0x312f, 0xcf44, 0x9a9d, 0x4f41,
8726 +
            0x1a98, 0xe4f3, 0xb12a, 0x4110, 0x14c9, 0xeaa2, 0xbf7b, 0x53e3, 0x063a, 0xf851, 0xad88,
8727 +
            0x5db2, 0x086b, 0xf600, 0xa3d9, 0x048d, 0x5154, 0xaf3f, 0xfae6, 0x0adc, 0x5f05, 0xa16e,
8728 +
            0xf4b7, 0x182f, 0x4df6, 0xb39d, 0xe644, 0x167e, 0x43a7, 0xbdcc, 0xe815, 0x3dc9, 0x6810,
8729 +
            0x967b, 0xc3a2, 0x3398, 0x6641, 0x982a, 0xcdf3, 0x216b, 0x74b2, 0x8ad9, 0xdf00, 0x2f3a,
8730 +
            0x7ae3, 0x8488, 0xd151,
8731 +
        ],
8732 +
        [
8733 +
            0x0000, 0x7f1f, 0xfe3e, 0x8121, 0xa549, 0xda56, 0x5b77, 0x2468, 0x13a7, 0x6cb8, 0xed99,
8734 +
            0x9286, 0xb6ee, 0xc9f1, 0x48d0, 0x37cf, 0x274e, 0x5851, 0xd970, 0xa66f, 0x8207, 0xfd18,
8735 +
            0x7c39, 0x0326, 0x34e9, 0x4bf6, 0xcad7, 0xb5c8, 0x91a0, 0xeebf, 0x6f9e, 0x1081, 0x4e9c,
8736 +
            0x3183, 0xb0a2, 0xcfbd, 0xebd5, 0x94ca, 0x15eb, 0x6af4, 0x5d3b, 0x2224, 0xa305, 0xdc1a,
8737 +
            0xf872, 0x876d, 0x064c, 0x7953, 0x69d2, 0x16cd, 0x97ec, 0xe8f3, 0xcc9b, 0xb384, 0x32a5,
8738 +
            0x4dba, 0x7a75, 0x056a, 0x844b, 0xfb54, 0xdf3c, 0xa023, 0x2102, 0x5e1d, 0x9d38, 0xe227,
8739 +
            0x6306, 0x1c19, 0x3871, 0x476e, 0xc64f, 0xb950, 0x8e9f, 0xf180, 0x70a1, 0x0fbe, 0x2bd6,
8740 +
            0x54c9, 0xd5e8, 0xaaf7, 0xba76, 0xc569, 0x4448, 0x3b57, 0x1f3f, 0x6020, 0xe101, 0x9e1e,
8741 +
            0xa9d1, 0xd6ce, 0x57ef, 0x28f0, 0x0c98, 0x7387, 0xf2a6, 0x8db9, 0xd3a4, 0xacbb, 0x2d9a,
8742 +
            0x5285, 0x76ed, 0x09f2, 0x88d3, 0xf7cc, 0xc003, 0xbf1c, 0x3e3d, 0x4122, 0x654a, 0x1a55,
8743 +
            0x9b74, 0xe46b, 0xf4ea, 0x8bf5, 0x0ad4, 0x75cb, 0x51a3, 0x2ebc, 0xaf9d, 0xd082, 0xe74d,
8744 +
            0x9852, 0x1973, 0x666c, 0x4204, 0x3d1b, 0xbc3a, 0xc325, 0x6345, 0x1c5a, 0x9d7b, 0xe264,
8745 +
            0xc60c, 0xb913, 0x3832, 0x472d, 0x70e2, 0x0ffd, 0x8edc, 0xf1c3, 0xd5ab, 0xaab4, 0x2b95,
8746 +
            0x548a, 0x440b, 0x3b14, 0xba35, 0xc52a, 0xe142, 0x9e5d, 0x1f7c, 0x6063, 0x57ac, 0x28b3,
8747 +
            0xa992, 0xd68d, 0xf2e5, 0x8dfa, 0x0cdb, 0x73c4, 0x2dd9, 0x52c6, 0xd3e7, 0xacf8, 0x8890,
8748 +
            0xf78f, 0x76ae, 0x09b1, 0x3e7e, 0x4161, 0xc040, 0xbf5f, 0x9b37, 0xe428, 0x6509, 0x1a16,
8749 +
            0x0a97, 0x7588, 0xf4a9, 0x8bb6, 0xafde, 0xd0c1, 0x51e0, 0x2eff, 0x1930, 0x662f, 0xe70e,
8750 +
            0x9811, 0xbc79, 0xc366, 0x4247, 0x3d58, 0xfe7d, 0x8162, 0x0043, 0x7f5c, 0x5b34, 0x242b,
8751 +
            0xa50a, 0xda15, 0xedda, 0x92c5, 0x13e4, 0x6cfb, 0x4893, 0x378c, 0xb6ad, 0xc9b2, 0xd933,
8752 +
            0xa62c, 0x270d, 0x5812, 0x7c7a, 0x0365, 0x8244, 0xfd5b, 0xca94, 0xb58b, 0x34aa, 0x4bb5,
8753 +
            0x6fdd, 0x10c2, 0x91e3, 0xeefc, 0xb0e1, 0xcffe, 0x4edf, 0x31c0, 0x15a8, 0x6ab7, 0xeb96,
8754 +
            0x9489, 0xa346, 0xdc59, 0x5d78, 0x2267, 0x060f, 0x7910, 0xf831, 0x872e, 0x97af, 0xe8b0,
8755 +
            0x6991, 0x168e, 0x32e6, 0x4df9, 0xccd8, 0xb3c7, 0x8408, 0xfb17, 0x7a36, 0x0529, 0x2141,
8756 +
            0x5e5e, 0xdf7f, 0xa060,
8757 +
        ],
8758 +
        [
8759 +
            0x0000, 0xc68a, 0xd421, 0x12ab, 0xf177, 0x37fd, 0x2556, 0xe3dc, 0xbbdb, 0x7d51, 0x6ffa,
8760 +
            0xa970, 0x4aac, 0x8c26, 0x9e8d, 0x5807, 0x2e83, 0xe809, 0xfaa2, 0x3c28, 0xdff4, 0x197e,
8761 +
            0x0bd5, 0xcd5f, 0x9558, 0x53d2, 0x4179, 0x87f3, 0x642f, 0xa2a5, 0xb00e, 0x7684, 0x5d06,
8762 +
            0x9b8c, 0x8927, 0x4fad, 0xac71, 0x6afb, 0x7850, 0xbeda, 0xe6dd, 0x2057, 0x32fc, 0xf476,
8763 +
            0x17aa, 0xd120, 0xc38b, 0x0501, 0x7385, 0xb50f, 0xa7a4, 0x612e, 0x82f2, 0x4478, 0x56d3,
8764 +
            0x9059, 0xc85e, 0x0ed4, 0x1c7f, 0xdaf5, 0x3929, 0xffa3, 0xed08, 0x2b82, 0xba0c, 0x7c86,
8765 +
            0x6e2d, 0xa8a7, 0x4b7b, 0x8df1, 0x9f5a, 0x59d0, 0x01d7, 0xc75d, 0xd5f6, 0x137c, 0xf0a0,
8766 +
            0x362a, 0x2481, 0xe20b, 0x948f, 0x5205, 0x40ae, 0x8624, 0x65f8, 0xa372, 0xb1d9, 0x7753,
8767 +
            0x2f54, 0xe9de, 0xfb75, 0x3dff, 0xde23, 0x18a9, 0x0a02, 0xcc88, 0xe70a, 0x2180, 0x332b,
8768 +
            0xf5a1, 0x167d, 0xd0f7, 0xc25c, 0x04d6, 0x5cd1, 0x9a5b, 0x88f0, 0x4e7a, 0xada6, 0x6b2c,
8769 +
            0x7987, 0xbf0d, 0xc989, 0x0f03, 0x1da8, 0xdb22, 0x38fe, 0xfe74, 0xecdf, 0x2a55, 0x7252,
8770 +
            0xb4d8, 0xa673, 0x60f9, 0x8325, 0x45af, 0x5704, 0x918e, 0x2d2d, 0xeba7, 0xf90c, 0x3f86,
8771 +
            0xdc5a, 0x1ad0, 0x087b, 0xcef1, 0x96f6, 0x507c, 0x42d7, 0x845d, 0x6781, 0xa10b, 0xb3a0,
8772 +
            0x752a, 0x03ae, 0xc524, 0xd78f, 0x1105, 0xf2d9, 0x3453, 0x26f8, 0xe072, 0xb875, 0x7eff,
8773 +
            0x6c54, 0xaade, 0x4902, 0x8f88, 0x9d23, 0x5ba9, 0x702b, 0xb6a1, 0xa40a, 0x6280, 0x815c,
8774 +
            0x47d6, 0x557d, 0x93f7, 0xcbf0, 0x0d7a, 0x1fd1, 0xd95b, 0x3a87, 0xfc0d, 0xeea6, 0x282c,
8775 +
            0x5ea8, 0x9822, 0x8a89, 0x4c03, 0xafdf, 0x6955, 0x7bfe, 0xbd74, 0xe573, 0x23f9, 0x3152,
8776 +
            0xf7d8, 0x1404, 0xd28e, 0xc025, 0x06af, 0x9721, 0x51ab, 0x4300, 0x858a, 0x6656, 0xa0dc,
8777 +
            0xb277, 0x74fd, 0x2cfa, 0xea70, 0xf8db, 0x3e51, 0xdd8d, 0x1b07, 0x09ac, 0xcf26, 0xb9a2,
8778 +
            0x7f28, 0x6d83, 0xab09, 0x48d5, 0x8e5f, 0x9cf4, 0x5a7e, 0x0279, 0xc4f3, 0xd658, 0x10d2,
8779 +
            0xf30e, 0x3584, 0x272f, 0xe1a5, 0xca27, 0x0cad, 0x1e06, 0xd88c, 0x3b50, 0xfdda, 0xef71,
8780 +
            0x29fb, 0x71fc, 0xb776, 0xa5dd, 0x6357, 0x808b, 0x4601, 0x54aa, 0x9220, 0xe4a4, 0x222e,
8781 +
            0x3085, 0xf60f, 0x15d3, 0xd359, 0xc1f2, 0x0778, 0x5f7f, 0x99f5, 0x8b5e, 0x4dd4, 0xae08,
8782 +
            0x6882, 0x7a29, 0xbca3,
8783 +
        ],
8784 +
        [
8785 +
            0x0000, 0x5a5a, 0xb4b4, 0xeeee, 0x305d, 0x6a07, 0x84e9, 0xdeb3, 0x60ba, 0x3ae0, 0xd40e,
8786 +
            0x8e54, 0x50e7, 0x0abd, 0xe453, 0xbe09, 0xc174, 0x9b2e, 0x75c0, 0x2f9a, 0xf129, 0xab73,
8787 +
            0x459d, 0x1fc7, 0xa1ce, 0xfb94, 0x157a, 0x4f20, 0x9193, 0xcbc9, 0x2527, 0x7f7d, 0xdbdd,
8788 +
            0x8187, 0x6f69, 0x3533, 0xeb80, 0xb1da, 0x5f34, 0x056e, 0xbb67, 0xe13d, 0x0fd3, 0x5589,
8789 +
            0x8b3a, 0xd160, 0x3f8e, 0x65d4, 0x1aa9, 0x40f3, 0xae1d, 0xf447, 0x2af4, 0x70ae, 0x9e40,
8790 +
            0xc41a, 0x7a13, 0x2049, 0xcea7, 0x94fd, 0x4a4e, 0x1014, 0xfefa, 0xa4a0, 0xee8f, 0xb4d5,
8791 +
            0x5a3b, 0x0061, 0xded2, 0x8488, 0x6a66, 0x303c, 0x8e35, 0xd46f, 0x3a81, 0x60db, 0xbe68,
8792 +
            0xe432, 0x0adc, 0x5086, 0x2ffb, 0x75a1, 0x9b4f, 0xc115, 0x1fa6, 0x45fc, 0xab12, 0xf148,
8793 +
            0x4f41, 0x151b, 0xfbf5, 0xa1af, 0x7f1c, 0x2546, 0xcba8, 0x91f2, 0x3552, 0x6f08, 0x81e6,
8794 +
            0xdbbc, 0x050f, 0x5f55, 0xb1bb, 0xebe1, 0x55e8, 0x0fb2, 0xe15c, 0xbb06, 0x65b5, 0x3fef,
8795 +
            0xd101, 0x8b5b, 0xf426, 0xae7c, 0x4092, 0x1ac8, 0xc47b, 0x9e21, 0x70cf, 0x2a95, 0x949c,
8796 +
            0xcec6, 0x2028, 0x7a72, 0xa4c1, 0xfe9b, 0x1075, 0x4a2f, 0x842b, 0xde71, 0x309f, 0x6ac5,
8797 +
            0xb476, 0xee2c, 0x00c2, 0x5a98, 0xe491, 0xbecb, 0x5025, 0x0a7f, 0xd4cc, 0x8e96, 0x6078,
8798 +
            0x3a22, 0x455f, 0x1f05, 0xf1eb, 0xabb1, 0x7502, 0x2f58, 0xc1b6, 0x9bec, 0x25e5, 0x7fbf,
8799 +
            0x9151, 0xcb0b, 0x15b8, 0x4fe2, 0xa10c, 0xfb56, 0x5ff6, 0x05ac, 0xeb42, 0xb118, 0x6fab,
8800 +
            0x35f1, 0xdb1f, 0x8145, 0x3f4c, 0x6516, 0x8bf8, 0xd1a2, 0x0f11, 0x554b, 0xbba5, 0xe1ff,
8801 +
            0x9e82, 0xc4d8, 0x2a36, 0x706c, 0xaedf, 0xf485, 0x1a6b, 0x4031, 0xfe38, 0xa462, 0x4a8c,
8802 +
            0x10d6, 0xce65, 0x943f, 0x7ad1, 0x208b, 0x6aa4, 0x30fe, 0xde10, 0x844a, 0x5af9, 0x00a3,
8803 +
            0xee4d, 0xb417, 0x0a1e, 0x5044, 0xbeaa, 0xe4f0, 0x3a43, 0x6019, 0x8ef7, 0xd4ad, 0xabd0,
8804 +
            0xf18a, 0x1f64, 0x453e, 0x9b8d, 0xc1d7, 0x2f39, 0x7563, 0xcb6a, 0x9130, 0x7fde, 0x2584,
8805 +
            0xfb37, 0xa16d, 0x4f83, 0x15d9, 0xb179, 0xeb23, 0x05cd, 0x5f97, 0x8124, 0xdb7e, 0x3590,
8806 +
            0x6fca, 0xd1c3, 0x8b99, 0x6577, 0x3f2d, 0xe19e, 0xbbc4, 0x552a, 0x0f70, 0x700d, 0x2a57,
8807 +
            0xc4b9, 0x9ee3, 0x4050, 0x1a0a, 0xf4e4, 0xaebe, 0x10b7, 0x4aed, 0xa403, 0xfe59, 0x20ea,
8808 +
            0x7ab0, 0x945e, 0xce04,
8809 +
        ],
8810 +
    ];
8811 +
8812 +
    pub static CRC16_OPENSAFETY_B_TABLE: [[u16; 256]; 16] = [
8813 +
        [
8814 +
            0x0000, 0x755b, 0xeab6, 0x9fed, 0xa037, 0xd56c, 0x4a81, 0x3fda, 0x3535, 0x406e, 0xdf83,
8815 +
            0xaad8, 0x9502, 0xe059, 0x7fb4, 0x0aef, 0x6a6a, 0x1f31, 0x80dc, 0xf587, 0xca5d, 0xbf06,
8816 +
            0x20eb, 0x55b0, 0x5f5f, 0x2a04, 0xb5e9, 0xc0b2, 0xff68, 0x8a33, 0x15de, 0x6085, 0xd4d4,
8817 +
            0xa18f, 0x3e62, 0x4b39, 0x74e3, 0x01b8, 0x9e55, 0xeb0e, 0xe1e1, 0x94ba, 0x0b57, 0x7e0c,
8818 +
            0x41d6, 0x348d, 0xab60, 0xde3b, 0xbebe, 0xcbe5, 0x5408, 0x2153, 0x1e89, 0x6bd2, 0xf43f,
8819 +
            0x8164, 0x8b8b, 0xfed0, 0x613d, 0x1466, 0x2bbc, 0x5ee7, 0xc10a, 0xb451, 0xdcf3, 0xa9a8,
8820 +
            0x3645, 0x431e, 0x7cc4, 0x099f, 0x9672, 0xe329, 0xe9c6, 0x9c9d, 0x0370, 0x762b, 0x49f1,
8821 +
            0x3caa, 0xa347, 0xd61c, 0xb699, 0xc3c2, 0x5c2f, 0x2974, 0x16ae, 0x63f5, 0xfc18, 0x8943,
8822 +
            0x83ac, 0xf6f7, 0x691a, 0x1c41, 0x239b, 0x56c0, 0xc92d, 0xbc76, 0x0827, 0x7d7c, 0xe291,
8823 +
            0x97ca, 0xa810, 0xdd4b, 0x42a6, 0x37fd, 0x3d12, 0x4849, 0xd7a4, 0xa2ff, 0x9d25, 0xe87e,
8824 +
            0x7793, 0x02c8, 0x624d, 0x1716, 0x88fb, 0xfda0, 0xc27a, 0xb721, 0x28cc, 0x5d97, 0x5778,
8825 +
            0x2223, 0xbdce, 0xc895, 0xf74f, 0x8214, 0x1df9, 0x68a2, 0xccbd, 0xb9e6, 0x260b, 0x5350,
8826 +
            0x6c8a, 0x19d1, 0x863c, 0xf367, 0xf988, 0x8cd3, 0x133e, 0x6665, 0x59bf, 0x2ce4, 0xb309,
8827 +
            0xc652, 0xa6d7, 0xd38c, 0x4c61, 0x393a, 0x06e0, 0x73bb, 0xec56, 0x990d, 0x93e2, 0xe6b9,
8828 +
            0x7954, 0x0c0f, 0x33d5, 0x468e, 0xd963, 0xac38, 0x1869, 0x6d32, 0xf2df, 0x8784, 0xb85e,
8829 +
            0xcd05, 0x52e8, 0x27b3, 0x2d5c, 0x5807, 0xc7ea, 0xb2b1, 0x8d6b, 0xf830, 0x67dd, 0x1286,
8830 +
            0x7203, 0x0758, 0x98b5, 0xedee, 0xd234, 0xa76f, 0x3882, 0x4dd9, 0x4736, 0x326d, 0xad80,
8831 +
            0xd8db, 0xe701, 0x925a, 0x0db7, 0x78ec, 0x104e, 0x6515, 0xfaf8, 0x8fa3, 0xb079, 0xc522,
8832 +
            0x5acf, 0x2f94, 0x257b, 0x5020, 0xcfcd, 0xba96, 0x854c, 0xf017, 0x6ffa, 0x1aa1, 0x7a24,
8833 +
            0x0f7f, 0x9092, 0xe5c9, 0xda13, 0xaf48, 0x30a5, 0x45fe, 0x4f11, 0x3a4a, 0xa5a7, 0xd0fc,
8834 +
            0xef26, 0x9a7d, 0x0590, 0x70cb, 0xc49a, 0xb1c1, 0x2e2c, 0x5b77, 0x64ad, 0x11f6, 0x8e1b,
8835 +
            0xfb40, 0xf1af, 0x84f4, 0x1b19, 0x6e42, 0x5198, 0x24c3, 0xbb2e, 0xce75, 0xaef0, 0xdbab,
8836 +
            0x4446, 0x311d, 0x0ec7, 0x7b9c, 0xe471, 0x912a, 0x9bc5, 0xee9e, 0x7173, 0x0428, 0x3bf2,
8837 +
            0x4ea9, 0xd144, 0xa41f,
8838 +
        ],
8839 +
        [
8840 +
            0x0000, 0xec21, 0xad19, 0x4138, 0x2f69, 0xc348, 0x8270, 0x6e51, 0x5ed2, 0xb2f3, 0xf3cb,
8841 +
            0x1fea, 0x71bb, 0x9d9a, 0xdca2, 0x3083, 0xbda4, 0x5185, 0x10bd, 0xfc9c, 0x92cd, 0x7eec,
8842 +
            0x3fd4, 0xd3f5, 0xe376, 0x0f57, 0x4e6f, 0xa24e, 0xcc1f, 0x203e, 0x6106, 0x8d27, 0x0e13,
8843 +
            0xe232, 0xa30a, 0x4f2b, 0x217a, 0xcd5b, 0x8c63, 0x6042, 0x50c1, 0xbce0, 0xfdd8, 0x11f9,
8844 +
            0x7fa8, 0x9389, 0xd2b1, 0x3e90, 0xb3b7, 0x5f96, 0x1eae, 0xf28f, 0x9cde, 0x70ff, 0x31c7,
8845 +
            0xdde6, 0xed65, 0x0144, 0x407c, 0xac5d, 0xc20c, 0x2e2d, 0x6f15, 0x8334, 0x1c26, 0xf007,
8846 +
            0xb13f, 0x5d1e, 0x334f, 0xdf6e, 0x9e56, 0x7277, 0x42f4, 0xaed5, 0xefed, 0x03cc, 0x6d9d,
8847 +
            0x81bc, 0xc084, 0x2ca5, 0xa182, 0x4da3, 0x0c9b, 0xe0ba, 0x8eeb, 0x62ca, 0x23f2, 0xcfd3,
8848 +
            0xff50, 0x1371, 0x5249, 0xbe68, 0xd039, 0x3c18, 0x7d20, 0x9101, 0x1235, 0xfe14, 0xbf2c,
8849 +
            0x530d, 0x3d5c, 0xd17d, 0x9045, 0x7c64, 0x4ce7, 0xa0c6, 0xe1fe, 0x0ddf, 0x638e, 0x8faf,
8850 +
            0xce97, 0x22b6, 0xaf91, 0x43b0, 0x0288, 0xeea9, 0x80f8, 0x6cd9, 0x2de1, 0xc1c0, 0xf143,
8851 +
            0x1d62, 0x5c5a, 0xb07b, 0xde2a, 0x320b, 0x7333, 0x9f12, 0x384c, 0xd46d, 0x9555, 0x7974,
8852 +
            0x1725, 0xfb04, 0xba3c, 0x561d, 0x669e, 0x8abf, 0xcb87, 0x27a6, 0x49f7, 0xa5d6, 0xe4ee,
8853 +
            0x08cf, 0x85e8, 0x69c9, 0x28f1, 0xc4d0, 0xaa81, 0x46a0, 0x0798, 0xebb9, 0xdb3a, 0x371b,
8854 +
            0x7623, 0x9a02, 0xf453, 0x1872, 0x594a, 0xb56b, 0x365f, 0xda7e, 0x9b46, 0x7767, 0x1936,
8855 +
            0xf517, 0xb42f, 0x580e, 0x688d, 0x84ac, 0xc594, 0x29b5, 0x47e4, 0xabc5, 0xeafd, 0x06dc,
8856 +
            0x8bfb, 0x67da, 0x26e2, 0xcac3, 0xa492, 0x48b3, 0x098b, 0xe5aa, 0xd529, 0x3908, 0x7830,
8857 +
            0x9411, 0xfa40, 0x1661, 0x5759, 0xbb78, 0x246a, 0xc84b, 0x8973, 0x6552, 0x0b03, 0xe722,
8858 +
            0xa61a, 0x4a3b, 0x7ab8, 0x9699, 0xd7a1, 0x3b80, 0x55d1, 0xb9f0, 0xf8c8, 0x14e9, 0x99ce,
8859 +
            0x75ef, 0x34d7, 0xd8f6, 0xb6a7, 0x5a86, 0x1bbe, 0xf79f, 0xc71c, 0x2b3d, 0x6a05, 0x8624,
8860 +
            0xe875, 0x0454, 0x456c, 0xa94d, 0x2a79, 0xc658, 0x8760, 0x6b41, 0x0510, 0xe931, 0xa809,
8861 +
            0x4428, 0x74ab, 0x988a, 0xd9b2, 0x3593, 0x5bc2, 0xb7e3, 0xf6db, 0x1afa, 0x97dd, 0x7bfc,
8862 +
            0x3ac4, 0xd6e5, 0xb8b4, 0x5495, 0x15ad, 0xf98c, 0xc90f, 0x252e, 0x6416, 0x8837, 0xe666,
8863 +
            0x0a47, 0x4b7f, 0xa75e,
8864 +
        ],
8865 +
        [
8866 +
            0x0000, 0x7098, 0xe130, 0x91a8, 0xb73b, 0xc7a3, 0x560b, 0x2693, 0x1b2d, 0x6bb5, 0xfa1d,
8867 +
            0x8a85, 0xac16, 0xdc8e, 0x4d26, 0x3dbe, 0x365a, 0x46c2, 0xd76a, 0xa7f2, 0x8161, 0xf1f9,
8868 +
            0x6051, 0x10c9, 0x2d77, 0x5def, 0xcc47, 0xbcdf, 0x9a4c, 0xead4, 0x7b7c, 0x0be4, 0x6cb4,
8869 +
            0x1c2c, 0x8d84, 0xfd1c, 0xdb8f, 0xab17, 0x3abf, 0x4a27, 0x7799, 0x0701, 0x96a9, 0xe631,
8870 +
            0xc0a2, 0xb03a, 0x2192, 0x510a, 0x5aee, 0x2a76, 0xbbde, 0xcb46, 0xedd5, 0x9d4d, 0x0ce5,
8871 +
            0x7c7d, 0x41c3, 0x315b, 0xa0f3, 0xd06b, 0xf6f8, 0x8660, 0x17c8, 0x6750, 0xd968, 0xa9f0,
8872 +
            0x3858, 0x48c0, 0x6e53, 0x1ecb, 0x8f63, 0xfffb, 0xc245, 0xb2dd, 0x2375, 0x53ed, 0x757e,
8873 +
            0x05e6, 0x944e, 0xe4d6, 0xef32, 0x9faa, 0x0e02, 0x7e9a, 0x5809, 0x2891, 0xb939, 0xc9a1,
8874 +
            0xf41f, 0x8487, 0x152f, 0x65b7, 0x4324, 0x33bc, 0xa214, 0xd28c, 0xb5dc, 0xc544, 0x54ec,
8875 +
            0x2474, 0x02e7, 0x727f, 0xe3d7, 0x934f, 0xaef1, 0xde69, 0x4fc1, 0x3f59, 0x19ca, 0x6952,
8876 +
            0xf8fa, 0x8862, 0x8386, 0xf31e, 0x62b6, 0x122e, 0x34bd, 0x4425, 0xd58d, 0xa515, 0x98ab,
8877 +
            0xe833, 0x799b, 0x0903, 0x2f90, 0x5f08, 0xcea0, 0xbe38, 0xc78b, 0xb713, 0x26bb, 0x5623,
8878 +
            0x70b0, 0x0028, 0x9180, 0xe118, 0xdca6, 0xac3e, 0x3d96, 0x4d0e, 0x6b9d, 0x1b05, 0x8aad,
8879 +
            0xfa35, 0xf1d1, 0x8149, 0x10e1, 0x6079, 0x46ea, 0x3672, 0xa7da, 0xd742, 0xeafc, 0x9a64,
8880 +
            0x0bcc, 0x7b54, 0x5dc7, 0x2d5f, 0xbcf7, 0xcc6f, 0xab3f, 0xdba7, 0x4a0f, 0x3a97, 0x1c04,
8881 +
            0x6c9c, 0xfd34, 0x8dac, 0xb012, 0xc08a, 0x5122, 0x21ba, 0x0729, 0x77b1, 0xe619, 0x9681,
8882 +
            0x9d65, 0xedfd, 0x7c55, 0x0ccd, 0x2a5e, 0x5ac6, 0xcb6e, 0xbbf6, 0x8648, 0xf6d0, 0x6778,
8883 +
            0x17e0, 0x3173, 0x41eb, 0xd043, 0xa0db, 0x1ee3, 0x6e7b, 0xffd3, 0x8f4b, 0xa9d8, 0xd940,
8884 +
            0x48e8, 0x3870, 0x05ce, 0x7556, 0xe4fe, 0x9466, 0xb2f5, 0xc26d, 0x53c5, 0x235d, 0x28b9,
8885 +
            0x5821, 0xc989, 0xb911, 0x9f82, 0xef1a, 0x7eb2, 0x0e2a, 0x3394, 0x430c, 0xd2a4, 0xa23c,
8886 +
            0x84af, 0xf437, 0x659f, 0x1507, 0x7257, 0x02cf, 0x9367, 0xe3ff, 0xc56c, 0xb5f4, 0x245c,
8887 +
            0x54c4, 0x697a, 0x19e2, 0x884a, 0xf8d2, 0xde41, 0xaed9, 0x3f71, 0x4fe9, 0x440d, 0x3495,
8888 +
            0xa53d, 0xd5a5, 0xf336, 0x83ae, 0x1206, 0x629e, 0x5f20, 0x2fb8, 0xbe10, 0xce88, 0xe81b,
8889 +
            0x9883, 0x092b, 0x79b3,
8890 +
        ],
8891 +
        [
8892 +
            0x0000, 0xfa4d, 0x81c1, 0x7b8c, 0x76d9, 0x8c94, 0xf718, 0x0d55, 0xedb2, 0x17ff, 0x6c73,
8893 +
            0x963e, 0x9b6b, 0x6126, 0x1aaa, 0xe0e7, 0xae3f, 0x5472, 0x2ffe, 0xd5b3, 0xd8e6, 0x22ab,
8894 +
            0x5927, 0xa36a, 0x438d, 0xb9c0, 0xc24c, 0x3801, 0x3554, 0xcf19, 0xb495, 0x4ed8, 0x2925,
8895 +
            0xd368, 0xa8e4, 0x52a9, 0x5ffc, 0xa5b1, 0xde3d, 0x2470, 0xc497, 0x3eda, 0x4556, 0xbf1b,
8896 +
            0xb24e, 0x4803, 0x338f, 0xc9c2, 0x871a, 0x7d57, 0x06db, 0xfc96, 0xf1c3, 0x0b8e, 0x7002,
8897 +
            0x8a4f, 0x6aa8, 0x90e5, 0xeb69, 0x1124, 0x1c71, 0xe63c, 0x9db0, 0x67fd, 0x524a, 0xa807,
8898 +
            0xd38b, 0x29c6, 0x2493, 0xdede, 0xa552, 0x5f1f, 0xbff8, 0x45b5, 0x3e39, 0xc474, 0xc921,
8899 +
            0x336c, 0x48e0, 0xb2ad, 0xfc75, 0x0638, 0x7db4, 0x87f9, 0x8aac, 0x70e1, 0x0b6d, 0xf120,
8900 +
            0x11c7, 0xeb8a, 0x9006, 0x6a4b, 0x671e, 0x9d53, 0xe6df, 0x1c92, 0x7b6f, 0x8122, 0xfaae,
8901 +
            0x00e3, 0x0db6, 0xf7fb, 0x8c77, 0x763a, 0x96dd, 0x6c90, 0x171c, 0xed51, 0xe004, 0x1a49,
8902 +
            0x61c5, 0x9b88, 0xd550, 0x2f1d, 0x5491, 0xaedc, 0xa389, 0x59c4, 0x2248, 0xd805, 0x38e2,
8903 +
            0xc2af, 0xb923, 0x436e, 0x4e3b, 0xb476, 0xcffa, 0x35b7, 0xa494, 0x5ed9, 0x2555, 0xdf18,
8904 +
            0xd24d, 0x2800, 0x538c, 0xa9c1, 0x4926, 0xb36b, 0xc8e7, 0x32aa, 0x3fff, 0xc5b2, 0xbe3e,
8905 +
            0x4473, 0x0aab, 0xf0e6, 0x8b6a, 0x7127, 0x7c72, 0x863f, 0xfdb3, 0x07fe, 0xe719, 0x1d54,
8906 +
            0x66d8, 0x9c95, 0x91c0, 0x6b8d, 0x1001, 0xea4c, 0x8db1, 0x77fc, 0x0c70, 0xf63d, 0xfb68,
8907 +
            0x0125, 0x7aa9, 0x80e4, 0x6003, 0x9a4e, 0xe1c2, 0x1b8f, 0x16da, 0xec97, 0x971b, 0x6d56,
8908 +
            0x238e, 0xd9c3, 0xa24f, 0x5802, 0x5557, 0xaf1a, 0xd496, 0x2edb, 0xce3c, 0x3471, 0x4ffd,
8909 +
            0xb5b0, 0xb8e5, 0x42a8, 0x3924, 0xc369, 0xf6de, 0x0c93, 0x771f, 0x8d52, 0x8007, 0x7a4a,
8910 +
            0x01c6, 0xfb8b, 0x1b6c, 0xe121, 0x9aad, 0x60e0, 0x6db5, 0x97f8, 0xec74, 0x1639, 0x58e1,
8911 +
            0xa2ac, 0xd920, 0x236d, 0x2e38, 0xd475, 0xaff9, 0x55b4, 0xb553, 0x4f1e, 0x3492, 0xcedf,
8912 +
            0xc38a, 0x39c7, 0x424b, 0xb806, 0xdffb, 0x25b6, 0x5e3a, 0xa477, 0xa922, 0x536f, 0x28e3,
8913 +
            0xd2ae, 0x3249, 0xc804, 0xb388, 0x49c5, 0x4490, 0xbedd, 0xc551, 0x3f1c, 0x71c4, 0x8b89,
8914 +
            0xf005, 0x0a48, 0x071d, 0xfd50, 0x86dc, 0x7c91, 0x9c76, 0x663b, 0x1db7, 0xe7fa, 0xeaaf,
8915 +
            0x10e2, 0x6b6e, 0x9123,
8916 +
        ],
8917 +
        [
8918 +
            0x0000, 0x3c73, 0x78e6, 0x4495, 0xf1cc, 0xcdbf, 0x892a, 0xb559, 0x96c3, 0xaab0, 0xee25,
8919 +
            0xd256, 0x670f, 0x5b7c, 0x1fe9, 0x239a, 0x58dd, 0x64ae, 0x203b, 0x1c48, 0xa911, 0x9562,
8920 +
            0xd1f7, 0xed84, 0xce1e, 0xf26d, 0xb6f8, 0x8a8b, 0x3fd2, 0x03a1, 0x4734, 0x7b47, 0xb1ba,
8921 +
            0x8dc9, 0xc95c, 0xf52f, 0x4076, 0x7c05, 0x3890, 0x04e3, 0x2779, 0x1b0a, 0x5f9f, 0x63ec,
8922 +
            0xd6b5, 0xeac6, 0xae53, 0x9220, 0xe967, 0xd514, 0x9181, 0xadf2, 0x18ab, 0x24d8, 0x604d,
8923 +
            0x5c3e, 0x7fa4, 0x43d7, 0x0742, 0x3b31, 0x8e68, 0xb21b, 0xf68e, 0xcafd, 0x162f, 0x2a5c,
8924 +
            0x6ec9, 0x52ba, 0xe7e3, 0xdb90, 0x9f05, 0xa376, 0x80ec, 0xbc9f, 0xf80a, 0xc479, 0x7120,
8925 +
            0x4d53, 0x09c6, 0x35b5, 0x4ef2, 0x7281, 0x3614, 0x0a67, 0xbf3e, 0x834d, 0xc7d8, 0xfbab,
8926 +
            0xd831, 0xe442, 0xa0d7, 0x9ca4, 0x29fd, 0x158e, 0x511b, 0x6d68, 0xa795, 0x9be6, 0xdf73,
8927 +
            0xe300, 0x5659, 0x6a2a, 0x2ebf, 0x12cc, 0x3156, 0x0d25, 0x49b0, 0x75c3, 0xc09a, 0xfce9,
8928 +
            0xb87c, 0x840f, 0xff48, 0xc33b, 0x87ae, 0xbbdd, 0x0e84, 0x32f7, 0x7662, 0x4a11, 0x698b,
8929 +
            0x55f8, 0x116d, 0x2d1e, 0x9847, 0xa434, 0xe0a1, 0xdcd2, 0x2c5e, 0x102d, 0x54b8, 0x68cb,
8930 +
            0xdd92, 0xe1e1, 0xa574, 0x9907, 0xba9d, 0x86ee, 0xc27b, 0xfe08, 0x4b51, 0x7722, 0x33b7,
8931 +
            0x0fc4, 0x7483, 0x48f0, 0x0c65, 0x3016, 0x854f, 0xb93c, 0xfda9, 0xc1da, 0xe240, 0xde33,
8932 +
            0x9aa6, 0xa6d5, 0x138c, 0x2fff, 0x6b6a, 0x5719, 0x9de4, 0xa197, 0xe502, 0xd971, 0x6c28,
8933 +
            0x505b, 0x14ce, 0x28bd, 0x0b27, 0x3754, 0x73c1, 0x4fb2, 0xfaeb, 0xc698, 0x820d, 0xbe7e,
8934 +
            0xc539, 0xf94a, 0xbddf, 0x81ac, 0x34f5, 0x0886, 0x4c13, 0x7060, 0x53fa, 0x6f89, 0x2b1c,
8935 +
            0x176f, 0xa236, 0x9e45, 0xdad0, 0xe6a3, 0x3a71, 0x0602, 0x4297, 0x7ee4, 0xcbbd, 0xf7ce,
8936 +
            0xb35b, 0x8f28, 0xacb2, 0x90c1, 0xd454, 0xe827, 0x5d7e, 0x610d, 0x2598, 0x19eb, 0x62ac,
8937 +
            0x5edf, 0x1a4a, 0x2639, 0x9360, 0xaf13, 0xeb86, 0xd7f5, 0xf46f, 0xc81c, 0x8c89, 0xb0fa,
8938 +
            0x05a3, 0x39d0, 0x7d45, 0x4136, 0x8bcb, 0xb7b8, 0xf32d, 0xcf5e, 0x7a07, 0x4674, 0x02e1,
8939 +
            0x3e92, 0x1d08, 0x217b, 0x65ee, 0x599d, 0xecc4, 0xd0b7, 0x9422, 0xa851, 0xd316, 0xef65,
8940 +
            0xabf0, 0x9783, 0x22da, 0x1ea9, 0x5a3c, 0x664f, 0x45d5, 0x79a6, 0x3d33, 0x0140, 0xb419,
8941 +
            0x886a, 0xccff, 0xf08c,
8942 +
        ],
8943 +
        [
8944 +
            0x0000, 0x58bc, 0xb178, 0xe9c4, 0x17ab, 0x4f17, 0xa6d3, 0xfe6f, 0x2f56, 0x77ea, 0x9e2e,
8945 +
            0xc692, 0x38fd, 0x6041, 0x8985, 0xd139, 0x5eac, 0x0610, 0xefd4, 0xb768, 0x4907, 0x11bb,
8946 +
            0xf87f, 0xa0c3, 0x71fa, 0x2946, 0xc082, 0x983e, 0x6651, 0x3eed, 0xd729, 0x8f95, 0xbd58,
8947 +
            0xe5e4, 0x0c20, 0x549c, 0xaaf3, 0xf24f, 0x1b8b, 0x4337, 0x920e, 0xcab2, 0x2376, 0x7bca,
8948 +
            0x85a5, 0xdd19, 0x34dd, 0x6c61, 0xe3f4, 0xbb48, 0x528c, 0x0a30, 0xf45f, 0xace3, 0x4527,
8949 +
            0x1d9b, 0xcca2, 0x941e, 0x7dda, 0x2566, 0xdb09, 0x83b5, 0x6a71, 0x32cd, 0x0feb, 0x5757,
8950 +
            0xbe93, 0xe62f, 0x1840, 0x40fc, 0xa938, 0xf184, 0x20bd, 0x7801, 0x91c5, 0xc979, 0x3716,
8951 +
            0x6faa, 0x866e, 0xded2, 0x5147, 0x09fb, 0xe03f, 0xb883, 0x46ec, 0x1e50, 0xf794, 0xaf28,
8952 +
            0x7e11, 0x26ad, 0xcf69, 0x97d5, 0x69ba, 0x3106, 0xd8c2, 0x807e, 0xb2b3, 0xea0f, 0x03cb,
8953 +
            0x5b77, 0xa518, 0xfda4, 0x1460, 0x4cdc, 0x9de5, 0xc559, 0x2c9d, 0x7421, 0x8a4e, 0xd2f2,
8954 +
            0x3b36, 0x638a, 0xec1f, 0xb4a3, 0x5d67, 0x05db, 0xfbb4, 0xa308, 0x4acc, 0x1270, 0xc349,
8955 +
            0x9bf5, 0x7231, 0x2a8d, 0xd4e2, 0x8c5e, 0x659a, 0x3d26, 0x1fd6, 0x476a, 0xaeae, 0xf612,
8956 +
            0x087d, 0x50c1, 0xb905, 0xe1b9, 0x3080, 0x683c, 0x81f8, 0xd944, 0x272b, 0x7f97, 0x9653,
8957 +
            0xceef, 0x417a, 0x19c6, 0xf002, 0xa8be, 0x56d1, 0x0e6d, 0xe7a9, 0xbf15, 0x6e2c, 0x3690,
8958 +
            0xdf54, 0x87e8, 0x7987, 0x213b, 0xc8ff, 0x9043, 0xa28e, 0xfa32, 0x13f6, 0x4b4a, 0xb525,
8959 +
            0xed99, 0x045d, 0x5ce1, 0x8dd8, 0xd564, 0x3ca0, 0x641c, 0x9a73, 0xc2cf, 0x2b0b, 0x73b7,
8960 +
            0xfc22, 0xa49e, 0x4d5a, 0x15e6, 0xeb89, 0xb335, 0x5af1, 0x024d, 0xd374, 0x8bc8, 0x620c,
8961 +
            0x3ab0, 0xc4df, 0x9c63, 0x75a7, 0x2d1b, 0x103d, 0x4881, 0xa145, 0xf9f9, 0x0796, 0x5f2a,
8962 +
            0xb6ee, 0xee52, 0x3f6b, 0x67d7, 0x8e13, 0xd6af, 0x28c0, 0x707c, 0x99b8, 0xc104, 0x4e91,
8963 +
            0x162d, 0xffe9, 0xa755, 0x593a, 0x0186, 0xe842, 0xb0fe, 0x61c7, 0x397b, 0xd0bf, 0x8803,
8964 +
            0x766c, 0x2ed0, 0xc714, 0x9fa8, 0xad65, 0xf5d9, 0x1c1d, 0x44a1, 0xbace, 0xe272, 0x0bb6,
8965 +
            0x530a, 0x8233, 0xda8f, 0x334b, 0x6bf7, 0x9598, 0xcd24, 0x24e0, 0x7c5c, 0xf3c9, 0xab75,
8966 +
            0x42b1, 0x1a0d, 0xe462, 0xbcde, 0x551a, 0x0da6, 0xdc9f, 0x8423, 0x6de7, 0x355b, 0xcb34,
8967 +
            0x9388, 0x7a4c, 0x22f0,
8968 +
        ],
8969 +
        [
8970 +
            0x0000, 0x3fac, 0x7f58, 0x40f4, 0xfeb0, 0xc11c, 0x81e8, 0xbe44, 0x883b, 0xb797, 0xf763,
8971 +
            0xc8cf, 0x768b, 0x4927, 0x09d3, 0x367f, 0x652d, 0x5a81, 0x1a75, 0x25d9, 0x9b9d, 0xa431,
8972 +
            0xe4c5, 0xdb69, 0xed16, 0xd2ba, 0x924e, 0xade2, 0x13a6, 0x2c0a, 0x6cfe, 0x5352, 0xca5a,
8973 +
            0xf5f6, 0xb502, 0x8aae, 0x34ea, 0x0b46, 0x4bb2, 0x741e, 0x4261, 0x7dcd, 0x3d39, 0x0295,
8974 +
            0xbcd1, 0x837d, 0xc389, 0xfc25, 0xaf77, 0x90db, 0xd02f, 0xef83, 0x51c7, 0x6e6b, 0x2e9f,
8975 +
            0x1133, 0x274c, 0x18e0, 0x5814, 0x67b8, 0xd9fc, 0xe650, 0xa6a4, 0x9908, 0xe1ef, 0xde43,
8976 +
            0x9eb7, 0xa11b, 0x1f5f, 0x20f3, 0x6007, 0x5fab, 0x69d4, 0x5678, 0x168c, 0x2920, 0x9764,
8977 +
            0xa8c8, 0xe83c, 0xd790, 0x84c2, 0xbb6e, 0xfb9a, 0xc436, 0x7a72, 0x45de, 0x052a, 0x3a86,
8978 +
            0x0cf9, 0x3355, 0x73a1, 0x4c0d, 0xf249, 0xcde5, 0x8d11, 0xb2bd, 0x2bb5, 0x1419, 0x54ed,
8979 +
            0x6b41, 0xd505, 0xeaa9, 0xaa5d, 0x95f1, 0xa38e, 0x9c22, 0xdcd6, 0xe37a, 0x5d3e, 0x6292,
8980 +
            0x2266, 0x1dca, 0x4e98, 0x7134, 0x31c0, 0x0e6c, 0xb028, 0x8f84, 0xcf70, 0xf0dc, 0xc6a3,
8981 +
            0xf90f, 0xb9fb, 0x8657, 0x3813, 0x07bf, 0x474b, 0x78e7, 0xb685, 0x8929, 0xc9dd, 0xf671,
8982 +
            0x4835, 0x7799, 0x376d, 0x08c1, 0x3ebe, 0x0112, 0x41e6, 0x7e4a, 0xc00e, 0xffa2, 0xbf56,
8983 +
            0x80fa, 0xd3a8, 0xec04, 0xacf0, 0x935c, 0x2d18, 0x12b4, 0x5240, 0x6dec, 0x5b93, 0x643f,
8984 +
            0x24cb, 0x1b67, 0xa523, 0x9a8f, 0xda7b, 0xe5d7, 0x7cdf, 0x4373, 0x0387, 0x3c2b, 0x826f,
8985 +
            0xbdc3, 0xfd37, 0xc29b, 0xf4e4, 0xcb48, 0x8bbc, 0xb410, 0x0a54, 0x35f8, 0x750c, 0x4aa0,
8986 +
            0x19f2, 0x265e, 0x66aa, 0x5906, 0xe742, 0xd8ee, 0x981a, 0xa7b6, 0x91c9, 0xae65, 0xee91,
8987 +
            0xd13d, 0x6f79, 0x50d5, 0x1021, 0x2f8d, 0x576a, 0x68c6, 0x2832, 0x179e, 0xa9da, 0x9676,
8988 +
            0xd682, 0xe92e, 0xdf51, 0xe0fd, 0xa009, 0x9fa5, 0x21e1, 0x1e4d, 0x5eb9, 0x6115, 0x3247,
8989 +
            0x0deb, 0x4d1f, 0x72b3, 0xccf7, 0xf35b, 0xb3af, 0x8c03, 0xba7c, 0x85d0, 0xc524, 0xfa88,
8990 +
            0x44cc, 0x7b60, 0x3b94, 0x0438, 0x9d30, 0xa29c, 0xe268, 0xddc4, 0x6380, 0x5c2c, 0x1cd8,
8991 +
            0x2374, 0x150b, 0x2aa7, 0x6a53, 0x55ff, 0xebbb, 0xd417, 0x94e3, 0xab4f, 0xf81d, 0xc7b1,
8992 +
            0x8745, 0xb8e9, 0x06ad, 0x3901, 0x79f5, 0x4659, 0x7026, 0x4f8a, 0x0f7e, 0x30d2, 0x8e96,
8993 +
            0xb13a, 0xf1ce, 0xce62,
8994 +
        ],
8995 +
        [
8996 +
            0x0000, 0x1851, 0x30a2, 0x28f3, 0x6144, 0x7915, 0x51e6, 0x49b7, 0xc288, 0xdad9, 0xf22a,
8997 +
            0xea7b, 0xa3cc, 0xbb9d, 0x936e, 0x8b3f, 0xf04b, 0xe81a, 0xc0e9, 0xd8b8, 0x910f, 0x895e,
8998 +
            0xa1ad, 0xb9fc, 0x32c3, 0x2a92, 0x0261, 0x1a30, 0x5387, 0x4bd6, 0x6325, 0x7b74, 0x95cd,
8999 +
            0x8d9c, 0xa56f, 0xbd3e, 0xf489, 0xecd8, 0xc42b, 0xdc7a, 0x5745, 0x4f14, 0x67e7, 0x7fb6,
9000 +
            0x3601, 0x2e50, 0x06a3, 0x1ef2, 0x6586, 0x7dd7, 0x5524, 0x4d75, 0x04c2, 0x1c93, 0x3460,
9001 +
            0x2c31, 0xa70e, 0xbf5f, 0x97ac, 0x8ffd, 0xc64a, 0xde1b, 0xf6e8, 0xeeb9, 0x5ec1, 0x4690,
9002 +
            0x6e63, 0x7632, 0x3f85, 0x27d4, 0x0f27, 0x1776, 0x9c49, 0x8418, 0xaceb, 0xb4ba, 0xfd0d,
9003 +
            0xe55c, 0xcdaf, 0xd5fe, 0xae8a, 0xb6db, 0x9e28, 0x8679, 0xcfce, 0xd79f, 0xff6c, 0xe73d,
9004 +
            0x6c02, 0x7453, 0x5ca0, 0x44f1, 0x0d46, 0x1517, 0x3de4, 0x25b5, 0xcb0c, 0xd35d, 0xfbae,
9005 +
            0xe3ff, 0xaa48, 0xb219, 0x9aea, 0x82bb, 0x0984, 0x11d5, 0x3926, 0x2177, 0x68c0, 0x7091,
9006 +
            0x5862, 0x4033, 0x3b47, 0x2316, 0x0be5, 0x13b4, 0x5a03, 0x4252, 0x6aa1, 0x72f0, 0xf9cf,
9007 +
            0xe19e, 0xc96d, 0xd13c, 0x988b, 0x80da, 0xa829, 0xb078, 0xbd82, 0xa5d3, 0x8d20, 0x9571,
9008 +
            0xdcc6, 0xc497, 0xec64, 0xf435, 0x7f0a, 0x675b, 0x4fa8, 0x57f9, 0x1e4e, 0x061f, 0x2eec,
9009 +
            0x36bd, 0x4dc9, 0x5598, 0x7d6b, 0x653a, 0x2c8d, 0x34dc, 0x1c2f, 0x047e, 0x8f41, 0x9710,
9010 +
            0xbfe3, 0xa7b2, 0xee05, 0xf654, 0xdea7, 0xc6f6, 0x284f, 0x301e, 0x18ed, 0x00bc, 0x490b,
9011 +
            0x515a, 0x79a9, 0x61f8, 0xeac7, 0xf296, 0xda65, 0xc234, 0x8b83, 0x93d2, 0xbb21, 0xa370,
9012 +
            0xd804, 0xc055, 0xe8a6, 0xf0f7, 0xb940, 0xa111, 0x89e2, 0x91b3, 0x1a8c, 0x02dd, 0x2a2e,
9013 +
            0x327f, 0x7bc8, 0x6399, 0x4b6a, 0x533b, 0xe343, 0xfb12, 0xd3e1, 0xcbb0, 0x8207, 0x9a56,
9014 +
            0xb2a5, 0xaaf4, 0x21cb, 0x399a, 0x1169, 0x0938, 0x408f, 0x58de, 0x702d, 0x687c, 0x1308,
9015 +
            0x0b59, 0x23aa, 0x3bfb, 0x724c, 0x6a1d, 0x42ee, 0x5abf, 0xd180, 0xc9d1, 0xe122, 0xf973,
9016 +
            0xb0c4, 0xa895, 0x8066, 0x9837, 0x768e, 0x6edf, 0x462c, 0x5e7d, 0x17ca, 0x0f9b, 0x2768,
9017 +
            0x3f39, 0xb406, 0xac57, 0x84a4, 0x9cf5, 0xd542, 0xcd13, 0xe5e0, 0xfdb1, 0x86c5, 0x9e94,
9018 +
            0xb667, 0xae36, 0xe781, 0xffd0, 0xd723, 0xcf72, 0x444d, 0x5c1c, 0x74ef, 0x6cbe, 0x2509,
9019 +
            0x3d58, 0x15ab, 0x0dfa,
9020 +
        ],
9021 +
        [
9022 +
            0x0000, 0x0e5f, 0x1cbe, 0x12e1, 0x397c, 0x3723, 0x25c2, 0x2b9d, 0x72f8, 0x7ca7, 0x6e46,
9023 +
            0x6019, 0x4b84, 0x45db, 0x573a, 0x5965, 0xe5f0, 0xebaf, 0xf94e, 0xf711, 0xdc8c, 0xd2d3,
9024 +
            0xc032, 0xce6d, 0x9708, 0x9957, 0x8bb6, 0x85e9, 0xae74, 0xa02b, 0xb2ca, 0xbc95, 0xbebb,
9025 +
            0xb0e4, 0xa205, 0xac5a, 0x87c7, 0x8998, 0x9b79, 0x9526, 0xcc43, 0xc21c, 0xd0fd, 0xdea2,
9026 +
            0xf53f, 0xfb60, 0xe981, 0xe7de, 0x5b4b, 0x5514, 0x47f5, 0x49aa, 0x6237, 0x6c68, 0x7e89,
9027 +
            0x70d6, 0x29b3, 0x27ec, 0x350d, 0x3b52, 0x10cf, 0x1e90, 0x0c71, 0x022e, 0x082d, 0x0672,
9028 +
            0x1493, 0x1acc, 0x3151, 0x3f0e, 0x2def, 0x23b0, 0x7ad5, 0x748a, 0x666b, 0x6834, 0x43a9,
9029 +
            0x4df6, 0x5f17, 0x5148, 0xeddd, 0xe382, 0xf163, 0xff3c, 0xd4a1, 0xdafe, 0xc81f, 0xc640,
9030 +
            0x9f25, 0x917a, 0x839b, 0x8dc4, 0xa659, 0xa806, 0xbae7, 0xb4b8, 0xb696, 0xb8c9, 0xaa28,
9031 +
            0xa477, 0x8fea, 0x81b5, 0x9354, 0x9d0b, 0xc46e, 0xca31, 0xd8d0, 0xd68f, 0xfd12, 0xf34d,
9032 +
            0xe1ac, 0xeff3, 0x5366, 0x5d39, 0x4fd8, 0x4187, 0x6a1a, 0x6445, 0x76a4, 0x78fb, 0x219e,
9033 +
            0x2fc1, 0x3d20, 0x337f, 0x18e2, 0x16bd, 0x045c, 0x0a03, 0x105a, 0x1e05, 0x0ce4, 0x02bb,
9034 +
            0x2926, 0x2779, 0x3598, 0x3bc7, 0x62a2, 0x6cfd, 0x7e1c, 0x7043, 0x5bde, 0x5581, 0x4760,
9035 +
            0x493f, 0xf5aa, 0xfbf5, 0xe914, 0xe74b, 0xccd6, 0xc289, 0xd068, 0xde37, 0x8752, 0x890d,
9036 +
            0x9bec, 0x95b3, 0xbe2e, 0xb071, 0xa290, 0xaccf, 0xaee1, 0xa0be, 0xb25f, 0xbc00, 0x979d,
9037 +
            0x99c2, 0x8b23, 0x857c, 0xdc19, 0xd246, 0xc0a7, 0xcef8, 0xe565, 0xeb3a, 0xf9db, 0xf784,
9038 +
            0x4b11, 0x454e, 0x57af, 0x59f0, 0x726d, 0x7c32, 0x6ed3, 0x608c, 0x39e9, 0x37b6, 0x2557,
9039 +
            0x2b08, 0x0095, 0x0eca, 0x1c2b, 0x1274, 0x1877, 0x1628, 0x04c9, 0x0a96, 0x210b, 0x2f54,
9040 +
            0x3db5, 0x33ea, 0x6a8f, 0x64d0, 0x7631, 0x786e, 0x53f3, 0x5dac, 0x4f4d, 0x4112, 0xfd87,
9041 +
            0xf3d8, 0xe139, 0xef66, 0xc4fb, 0xcaa4, 0xd845, 0xd61a, 0x8f7f, 0x8120, 0x93c1, 0x9d9e,
9042 +
            0xb603, 0xb85c, 0xaabd, 0xa4e2, 0xa6cc, 0xa893, 0xba72, 0xb42d, 0x9fb0, 0x91ef, 0x830e,
9043 +
            0x8d51, 0xd434, 0xda6b, 0xc88a, 0xc6d5, 0xed48, 0xe317, 0xf1f6, 0xffa9, 0x433c, 0x4d63,
9044 +
            0x5f82, 0x51dd, 0x7a40, 0x741f, 0x66fe, 0x68a1, 0x31c4, 0x3f9b, 0x2d7a, 0x2325, 0x08b8,
9045 +
            0x06e7, 0x1406, 0x1a59,
9046 +
        ],
9047 +
        [
9048 +
            0x0000, 0x20b4, 0x4168, 0x61dc, 0x82d0, 0xa264, 0xc3b8, 0xe30c, 0x70fb, 0x504f, 0x3193,
9049 +
            0x1127, 0xf22b, 0xd29f, 0xb343, 0x93f7, 0xe1f6, 0xc142, 0xa09e, 0x802a, 0x6326, 0x4392,
9050 +
            0x224e, 0x02fa, 0x910d, 0xb1b9, 0xd065, 0xf0d1, 0x13dd, 0x3369, 0x52b5, 0x7201, 0xb6b7,
9051 +
            0x9603, 0xf7df, 0xd76b, 0x3467, 0x14d3, 0x750f, 0x55bb, 0xc64c, 0xe6f8, 0x8724, 0xa790,
9052 +
            0x449c, 0x6428, 0x05f4, 0x2540, 0x5741, 0x77f5, 0x1629, 0x369d, 0xd591, 0xf525, 0x94f9,
9053 +
            0xb44d, 0x27ba, 0x070e, 0x66d2, 0x4666, 0xa56a, 0x85de, 0xe402, 0xc4b6, 0x1835, 0x3881,
9054 +
            0x595d, 0x79e9, 0x9ae5, 0xba51, 0xdb8d, 0xfb39, 0x68ce, 0x487a, 0x29a6, 0x0912, 0xea1e,
9055 +
            0xcaaa, 0xab76, 0x8bc2, 0xf9c3, 0xd977, 0xb8ab, 0x981f, 0x7b13, 0x5ba7, 0x3a7b, 0x1acf,
9056 +
            0x8938, 0xa98c, 0xc850, 0xe8e4, 0x0be8, 0x2b5c, 0x4a80, 0x6a34, 0xae82, 0x8e36, 0xefea,
9057 +
            0xcf5e, 0x2c52, 0x0ce6, 0x6d3a, 0x4d8e, 0xde79, 0xfecd, 0x9f11, 0xbfa5, 0x5ca9, 0x7c1d,
9058 +
            0x1dc1, 0x3d75, 0x4f74, 0x6fc0, 0x0e1c, 0x2ea8, 0xcda4, 0xed10, 0x8ccc, 0xac78, 0x3f8f,
9059 +
            0x1f3b, 0x7ee7, 0x5e53, 0xbd5f, 0x9deb, 0xfc37, 0xdc83, 0x306a, 0x10de, 0x7102, 0x51b6,
9060 +
            0xb2ba, 0x920e, 0xf3d2, 0xd366, 0x4091, 0x6025, 0x01f9, 0x214d, 0xc241, 0xe2f5, 0x8329,
9061 +
            0xa39d, 0xd19c, 0xf128, 0x90f4, 0xb040, 0x534c, 0x73f8, 0x1224, 0x3290, 0xa167, 0x81d3,
9062 +
            0xe00f, 0xc0bb, 0x23b7, 0x0303, 0x62df, 0x426b, 0x86dd, 0xa669, 0xc7b5, 0xe701, 0x040d,
9063 +
            0x24b9, 0x4565, 0x65d1, 0xf626, 0xd692, 0xb74e, 0x97fa, 0x74f6, 0x5442, 0x359e, 0x152a,
9064 +
            0x672b, 0x479f, 0x2643, 0x06f7, 0xe5fb, 0xc54f, 0xa493, 0x8427, 0x17d0, 0x3764, 0x56b8,
9065 +
            0x760c, 0x9500, 0xb5b4, 0xd468, 0xf4dc, 0x285f, 0x08eb, 0x6937, 0x4983, 0xaa8f, 0x8a3b,
9066 +
            0xebe7, 0xcb53, 0x58a4, 0x7810, 0x19cc, 0x3978, 0xda74, 0xfac0, 0x9b1c, 0xbba8, 0xc9a9,
9067 +
            0xe91d, 0x88c1, 0xa875, 0x4b79, 0x6bcd, 0x0a11, 0x2aa5, 0xb952, 0x99e6, 0xf83a, 0xd88e,
9068 +
            0x3b82, 0x1b36, 0x7aea, 0x5a5e, 0x9ee8, 0xbe5c, 0xdf80, 0xff34, 0x1c38, 0x3c8c, 0x5d50,
9069 +
            0x7de4, 0xee13, 0xcea7, 0xaf7b, 0x8fcf, 0x6cc3, 0x4c77, 0x2dab, 0x0d1f, 0x7f1e, 0x5faa,
9070 +
            0x3e76, 0x1ec2, 0xfdce, 0xdd7a, 0xbca6, 0x9c12, 0x0fe5, 0x2f51, 0x4e8d, 0x6e39, 0x8d35,
9071 +
            0xad81, 0xcc5d, 0xece9,
9072 +
        ],
9073 +
        [
9074 +
            0x0000, 0x60d4, 0xc1a8, 0xa17c, 0xf60b, 0x96df, 0x37a3, 0x5777, 0x994d, 0xf999, 0x58e5,
9075 +
            0x3831, 0x6f46, 0x0f92, 0xaeee, 0xce3a, 0x47c1, 0x2715, 0x8669, 0xe6bd, 0xb1ca, 0xd11e,
9076 +
            0x7062, 0x10b6, 0xde8c, 0xbe58, 0x1f24, 0x7ff0, 0x2887, 0x4853, 0xe92f, 0x89fb, 0x8f82,
9077 +
            0xef56, 0x4e2a, 0x2efe, 0x7989, 0x195d, 0xb821, 0xd8f5, 0x16cf, 0x761b, 0xd767, 0xb7b3,
9078 +
            0xe0c4, 0x8010, 0x216c, 0x41b8, 0xc843, 0xa897, 0x09eb, 0x693f, 0x3e48, 0x5e9c, 0xffe0,
9079 +
            0x9f34, 0x510e, 0x31da, 0x90a6, 0xf072, 0xa705, 0xc7d1, 0x66ad, 0x0679, 0x6a5f, 0x0a8b,
9080 +
            0xabf7, 0xcb23, 0x9c54, 0xfc80, 0x5dfc, 0x3d28, 0xf312, 0x93c6, 0x32ba, 0x526e, 0x0519,
9081 +
            0x65cd, 0xc4b1, 0xa465, 0x2d9e, 0x4d4a, 0xec36, 0x8ce2, 0xdb95, 0xbb41, 0x1a3d, 0x7ae9,
9082 +
            0xb4d3, 0xd407, 0x757b, 0x15af, 0x42d8, 0x220c, 0x8370, 0xe3a4, 0xe5dd, 0x8509, 0x2475,
9083 +
            0x44a1, 0x13d6, 0x7302, 0xd27e, 0xb2aa, 0x7c90, 0x1c44, 0xbd38, 0xddec, 0x8a9b, 0xea4f,
9084 +
            0x4b33, 0x2be7, 0xa21c, 0xc2c8, 0x63b4, 0x0360, 0x5417, 0x34c3, 0x95bf, 0xf56b, 0x3b51,
9085 +
            0x5b85, 0xfaf9, 0x9a2d, 0xcd5a, 0xad8e, 0x0cf2, 0x6c26, 0xd4be, 0xb46a, 0x1516, 0x75c2,
9086 +
            0x22b5, 0x4261, 0xe31d, 0x83c9, 0x4df3, 0x2d27, 0x8c5b, 0xec8f, 0xbbf8, 0xdb2c, 0x7a50,
9087 +
            0x1a84, 0x937f, 0xf3ab, 0x52d7, 0x3203, 0x6574, 0x05a0, 0xa4dc, 0xc408, 0x0a32, 0x6ae6,
9088 +
            0xcb9a, 0xab4e, 0xfc39, 0x9ced, 0x3d91, 0x5d45, 0x5b3c, 0x3be8, 0x9a94, 0xfa40, 0xad37,
9089 +
            0xcde3, 0x6c9f, 0x0c4b, 0xc271, 0xa2a5, 0x03d9, 0x630d, 0x347a, 0x54ae, 0xf5d2, 0x9506,
9090 +
            0x1cfd, 0x7c29, 0xdd55, 0xbd81, 0xeaf6, 0x8a22, 0x2b5e, 0x4b8a, 0x85b0, 0xe564, 0x4418,
9091 +
            0x24cc, 0x73bb, 0x136f, 0xb213, 0xd2c7, 0xbee1, 0xde35, 0x7f49, 0x1f9d, 0x48ea, 0x283e,
9092 +
            0x8942, 0xe996, 0x27ac, 0x4778, 0xe604, 0x86d0, 0xd1a7, 0xb173, 0x100f, 0x70db, 0xf920,
9093 +
            0x99f4, 0x3888, 0x585c, 0x0f2b, 0x6fff, 0xce83, 0xae57, 0x606d, 0x00b9, 0xa1c5, 0xc111,
9094 +
            0x9666, 0xf6b2, 0x57ce, 0x371a, 0x3163, 0x51b7, 0xf0cb, 0x901f, 0xc768, 0xa7bc, 0x06c0,
9095 +
            0x6614, 0xa82e, 0xc8fa, 0x6986, 0x0952, 0x5e25, 0x3ef1, 0x9f8d, 0xff59, 0x76a2, 0x1676,
9096 +
            0xb70a, 0xd7de, 0x80a9, 0xe07d, 0x4101, 0x21d5, 0xefef, 0x8f3b, 0x2e47, 0x4e93, 0x19e4,
9097 +
            0x7930, 0xd84c, 0xb898,
9098 +
        ],
9099 +
        [
9100 +
            0x0000, 0xdc27, 0xcd15, 0x1132, 0xef71, 0x3356, 0x2264, 0xfe43, 0xabb9, 0x779e, 0x66ac,
9101 +
            0xba8b, 0x44c8, 0x98ef, 0x89dd, 0x55fa, 0x2229, 0xfe0e, 0xef3c, 0x331b, 0xcd58, 0x117f,
9102 +
            0x004d, 0xdc6a, 0x8990, 0x55b7, 0x4485, 0x98a2, 0x66e1, 0xbac6, 0xabf4, 0x77d3, 0x4452,
9103 +
            0x9875, 0x8947, 0x5560, 0xab23, 0x7704, 0x6636, 0xba11, 0xefeb, 0x33cc, 0x22fe, 0xfed9,
9104 +
            0x009a, 0xdcbd, 0xcd8f, 0x11a8, 0x667b, 0xba5c, 0xab6e, 0x7749, 0x890a, 0x552d, 0x441f,
9105 +
            0x9838, 0xcdc2, 0x11e5, 0x00d7, 0xdcf0, 0x22b3, 0xfe94, 0xefa6, 0x3381, 0x88a4, 0x5483,
9106 +
            0x45b1, 0x9996, 0x67d5, 0xbbf2, 0xaac0, 0x76e7, 0x231d, 0xff3a, 0xee08, 0x322f, 0xcc6c,
9107 +
            0x104b, 0x0179, 0xdd5e, 0xaa8d, 0x76aa, 0x6798, 0xbbbf, 0x45fc, 0x99db, 0x88e9, 0x54ce,
9108 +
            0x0134, 0xdd13, 0xcc21, 0x1006, 0xee45, 0x3262, 0x2350, 0xff77, 0xccf6, 0x10d1, 0x01e3,
9109 +
            0xddc4, 0x2387, 0xffa0, 0xee92, 0x32b5, 0x674f, 0xbb68, 0xaa5a, 0x767d, 0x883e, 0x5419,
9110 +
            0x452b, 0x990c, 0xeedf, 0x32f8, 0x23ca, 0xffed, 0x01ae, 0xdd89, 0xccbb, 0x109c, 0x4566,
9111 +
            0x9941, 0x8873, 0x5454, 0xaa17, 0x7630, 0x6702, 0xbb25, 0x6413, 0xb834, 0xa906, 0x7521,
9112 +
            0x8b62, 0x5745, 0x4677, 0x9a50, 0xcfaa, 0x138d, 0x02bf, 0xde98, 0x20db, 0xfcfc, 0xedce,
9113 +
            0x31e9, 0x463a, 0x9a1d, 0x8b2f, 0x5708, 0xa94b, 0x756c, 0x645e, 0xb879, 0xed83, 0x31a4,
9114 +
            0x2096, 0xfcb1, 0x02f2, 0xded5, 0xcfe7, 0x13c0, 0x2041, 0xfc66, 0xed54, 0x3173, 0xcf30,
9115 +
            0x1317, 0x0225, 0xde02, 0x8bf8, 0x57df, 0x46ed, 0x9aca, 0x6489, 0xb8ae, 0xa99c, 0x75bb,
9116 +
            0x0268, 0xde4f, 0xcf7d, 0x135a, 0xed19, 0x313e, 0x200c, 0xfc2b, 0xa9d1, 0x75f6, 0x64c4,
9117 +
            0xb8e3, 0x46a0, 0x9a87, 0x8bb5, 0x5792, 0xecb7, 0x3090, 0x21a2, 0xfd85, 0x03c6, 0xdfe1,
9118 +
            0xced3, 0x12f4, 0x470e, 0x9b29, 0x8a1b, 0x563c, 0xa87f, 0x7458, 0x656a, 0xb94d, 0xce9e,
9119 +
            0x12b9, 0x038b, 0xdfac, 0x21ef, 0xfdc8, 0xecfa, 0x30dd, 0x6527, 0xb900, 0xa832, 0x7415,
9120 +
            0x8a56, 0x5671, 0x4743, 0x9b64, 0xa8e5, 0x74c2, 0x65f0, 0xb9d7, 0x4794, 0x9bb3, 0x8a81,
9121 +
            0x56a6, 0x035c, 0xdf7b, 0xce49, 0x126e, 0xec2d, 0x300a, 0x2138, 0xfd1f, 0x8acc, 0x56eb,
9122 +
            0x47d9, 0x9bfe, 0x65bd, 0xb99a, 0xa8a8, 0x748f, 0x2175, 0xfd52, 0xec60, 0x3047, 0xce04,
9123 +
            0x1223, 0x0311, 0xdf36,
9124 +
        ],
9125 +
        [
9126 +
            0x0000, 0xc826, 0xe517, 0x2d31, 0xbf75, 0x7753, 0x5a62, 0x9244, 0x0bb1, 0xc397, 0xeea6,
9127 +
            0x2680, 0xb4c4, 0x7ce2, 0x51d3, 0x99f5, 0x1762, 0xdf44, 0xf275, 0x3a53, 0xa817, 0x6031,
9128 +
            0x4d00, 0x8526, 0x1cd3, 0xd4f5, 0xf9c4, 0x31e2, 0xa3a6, 0x6b80, 0x46b1, 0x8e97, 0x2ec4,
9129 +
            0xe6e2, 0xcbd3, 0x03f5, 0x91b1, 0x5997, 0x74a6, 0xbc80, 0x2575, 0xed53, 0xc062, 0x0844,
9130 +
            0x9a00, 0x5226, 0x7f17, 0xb731, 0x39a6, 0xf180, 0xdcb1, 0x1497, 0x86d3, 0x4ef5, 0x63c4,
9131 +
            0xabe2, 0x3217, 0xfa31, 0xd700, 0x1f26, 0x8d62, 0x4544, 0x6875, 0xa053, 0x5d88, 0x95ae,
9132 +
            0xb89f, 0x70b9, 0xe2fd, 0x2adb, 0x07ea, 0xcfcc, 0x5639, 0x9e1f, 0xb32e, 0x7b08, 0xe94c,
9133 +
            0x216a, 0x0c5b, 0xc47d, 0x4aea, 0x82cc, 0xaffd, 0x67db, 0xf59f, 0x3db9, 0x1088, 0xd8ae,
9134 +
            0x415b, 0x897d, 0xa44c, 0x6c6a, 0xfe2e, 0x3608, 0x1b39, 0xd31f, 0x734c, 0xbb6a, 0x965b,
9135 +
            0x5e7d, 0xcc39, 0x041f, 0x292e, 0xe108, 0x78fd, 0xb0db, 0x9dea, 0x55cc, 0xc788, 0x0fae,
9136 +
            0x229f, 0xeab9, 0x642e, 0xac08, 0x8139, 0x491f, 0xdb5b, 0x137d, 0x3e4c, 0xf66a, 0x6f9f,
9137 +
            0xa7b9, 0x8a88, 0x42ae, 0xd0ea, 0x18cc, 0x35fd, 0xfddb, 0xbb10, 0x7336, 0x5e07, 0x9621,
9138 +
            0x0465, 0xcc43, 0xe172, 0x2954, 0xb0a1, 0x7887, 0x55b6, 0x9d90, 0x0fd4, 0xc7f2, 0xeac3,
9139 +
            0x22e5, 0xac72, 0x6454, 0x4965, 0x8143, 0x1307, 0xdb21, 0xf610, 0x3e36, 0xa7c3, 0x6fe5,
9140 +
            0x42d4, 0x8af2, 0x18b6, 0xd090, 0xfda1, 0x3587, 0x95d4, 0x5df2, 0x70c3, 0xb8e5, 0x2aa1,
9141 +
            0xe287, 0xcfb6, 0x0790, 0x9e65, 0x5643, 0x7b72, 0xb354, 0x2110, 0xe936, 0xc407, 0x0c21,
9142 +
            0x82b6, 0x4a90, 0x67a1, 0xaf87, 0x3dc3, 0xf5e5, 0xd8d4, 0x10f2, 0x8907, 0x4121, 0x6c10,
9143 +
            0xa436, 0x3672, 0xfe54, 0xd365, 0x1b43, 0xe698, 0x2ebe, 0x038f, 0xcba9, 0x59ed, 0x91cb,
9144 +
            0xbcfa, 0x74dc, 0xed29, 0x250f, 0x083e, 0xc018, 0x525c, 0x9a7a, 0xb74b, 0x7f6d, 0xf1fa,
9145 +
            0x39dc, 0x14ed, 0xdccb, 0x4e8f, 0x86a9, 0xab98, 0x63be, 0xfa4b, 0x326d, 0x1f5c, 0xd77a,
9146 +
            0x453e, 0x8d18, 0xa029, 0x680f, 0xc85c, 0x007a, 0x2d4b, 0xe56d, 0x7729, 0xbf0f, 0x923e,
9147 +
            0x5a18, 0xc3ed, 0x0bcb, 0x26fa, 0xeedc, 0x7c98, 0xb4be, 0x998f, 0x51a9, 0xdf3e, 0x1718,
9148 +
            0x3a29, 0xf20f, 0x604b, 0xa86d, 0x855c, 0x4d7a, 0xd48f, 0x1ca9, 0x3198, 0xf9be, 0x6bfa,
9149 +
            0xa3dc, 0x8eed, 0x46cb,
9150 +
        ],
9151 +
        [
9152 +
            0x0000, 0x037b, 0x06f6, 0x058d, 0x0dec, 0x0e97, 0x0b1a, 0x0861, 0x1bd8, 0x18a3, 0x1d2e,
9153 +
            0x1e55, 0x1634, 0x154f, 0x10c2, 0x13b9, 0x37b0, 0x34cb, 0x3146, 0x323d, 0x3a5c, 0x3927,
9154 +
            0x3caa, 0x3fd1, 0x2c68, 0x2f13, 0x2a9e, 0x29e5, 0x2184, 0x22ff, 0x2772, 0x2409, 0x6f60,
9155 +
            0x6c1b, 0x6996, 0x6aed, 0x628c, 0x61f7, 0x647a, 0x6701, 0x74b8, 0x77c3, 0x724e, 0x7135,
9156 +
            0x7954, 0x7a2f, 0x7fa2, 0x7cd9, 0x58d0, 0x5bab, 0x5e26, 0x5d5d, 0x553c, 0x5647, 0x53ca,
9157 +
            0x50b1, 0x4308, 0x4073, 0x45fe, 0x4685, 0x4ee4, 0x4d9f, 0x4812, 0x4b69, 0xdec0, 0xddbb,
9158 +
            0xd836, 0xdb4d, 0xd32c, 0xd057, 0xd5da, 0xd6a1, 0xc518, 0xc663, 0xc3ee, 0xc095, 0xc8f4,
9159 +
            0xcb8f, 0xce02, 0xcd79, 0xe970, 0xea0b, 0xef86, 0xecfd, 0xe49c, 0xe7e7, 0xe26a, 0xe111,
9160 +
            0xf2a8, 0xf1d3, 0xf45e, 0xf725, 0xff44, 0xfc3f, 0xf9b2, 0xfac9, 0xb1a0, 0xb2db, 0xb756,
9161 +
            0xb42d, 0xbc4c, 0xbf37, 0xbaba, 0xb9c1, 0xaa78, 0xa903, 0xac8e, 0xaff5, 0xa794, 0xa4ef,
9162 +
            0xa162, 0xa219, 0x8610, 0x856b, 0x80e6, 0x839d, 0x8bfc, 0x8887, 0x8d0a, 0x8e71, 0x9dc8,
9163 +
            0x9eb3, 0x9b3e, 0x9845, 0x9024, 0x935f, 0x96d2, 0x95a9, 0xc8db, 0xcba0, 0xce2d, 0xcd56,
9164 +
            0xc537, 0xc64c, 0xc3c1, 0xc0ba, 0xd303, 0xd078, 0xd5f5, 0xd68e, 0xdeef, 0xdd94, 0xd819,
9165 +
            0xdb62, 0xff6b, 0xfc10, 0xf99d, 0xfae6, 0xf287, 0xf1fc, 0xf471, 0xf70a, 0xe4b3, 0xe7c8,
9166 +
            0xe245, 0xe13e, 0xe95f, 0xea24, 0xefa9, 0xecd2, 0xa7bb, 0xa4c0, 0xa14d, 0xa236, 0xaa57,
9167 +
            0xa92c, 0xaca1, 0xafda, 0xbc63, 0xbf18, 0xba95, 0xb9ee, 0xb18f, 0xb2f4, 0xb779, 0xb402,
9168 +
            0x900b, 0x9370, 0x96fd, 0x9586, 0x9de7, 0x9e9c, 0x9b11, 0x986a, 0x8bd3, 0x88a8, 0x8d25,
9169 +
            0x8e5e, 0x863f, 0x8544, 0x80c9, 0x83b2, 0x161b, 0x1560, 0x10ed, 0x1396, 0x1bf7, 0x188c,
9170 +
            0x1d01, 0x1e7a, 0x0dc3, 0x0eb8, 0x0b35, 0x084e, 0x002f, 0x0354, 0x06d9, 0x05a2, 0x21ab,
9171 +
            0x22d0, 0x275d, 0x2426, 0x2c47, 0x2f3c, 0x2ab1, 0x29ca, 0x3a73, 0x3908, 0x3c85, 0x3ffe,
9172 +
            0x379f, 0x34e4, 0x3169, 0x3212, 0x797b, 0x7a00, 0x7f8d, 0x7cf6, 0x7497, 0x77ec, 0x7261,
9173 +
            0x711a, 0x62a3, 0x61d8, 0x6455, 0x672e, 0x6f4f, 0x6c34, 0x69b9, 0x6ac2, 0x4ecb, 0x4db0,
9174 +
            0x483d, 0x4b46, 0x4327, 0x405c, 0x45d1, 0x46aa, 0x5513, 0x5668, 0x53e5, 0x509e, 0x58ff,
9175 +
            0x5b84, 0x5e09, 0x5d72,
9176 +
        ],
9177 +
        [
9178 +
            0x0000, 0xe4ed, 0xbc81, 0x586c, 0x0c59, 0xe8b4, 0xb0d8, 0x5435, 0x18b2, 0xfc5f, 0xa433,
9179 +
            0x40de, 0x14eb, 0xf006, 0xa86a, 0x4c87, 0x3164, 0xd589, 0x8de5, 0x6908, 0x3d3d, 0xd9d0,
9180 +
            0x81bc, 0x6551, 0x29d6, 0xcd3b, 0x9557, 0x71ba, 0x258f, 0xc162, 0x990e, 0x7de3, 0x62c8,
9181 +
            0x8625, 0xde49, 0x3aa4, 0x6e91, 0x8a7c, 0xd210, 0x36fd, 0x7a7a, 0x9e97, 0xc6fb, 0x2216,
9182 +
            0x7623, 0x92ce, 0xcaa2, 0x2e4f, 0x53ac, 0xb741, 0xef2d, 0x0bc0, 0x5ff5, 0xbb18, 0xe374,
9183 +
            0x0799, 0x4b1e, 0xaff3, 0xf79f, 0x1372, 0x4747, 0xa3aa, 0xfbc6, 0x1f2b, 0xc590, 0x217d,
9184 +
            0x7911, 0x9dfc, 0xc9c9, 0x2d24, 0x7548, 0x91a5, 0xdd22, 0x39cf, 0x61a3, 0x854e, 0xd17b,
9185 +
            0x3596, 0x6dfa, 0x8917, 0xf4f4, 0x1019, 0x4875, 0xac98, 0xf8ad, 0x1c40, 0x442c, 0xa0c1,
9186 +
            0xec46, 0x08ab, 0x50c7, 0xb42a, 0xe01f, 0x04f2, 0x5c9e, 0xb873, 0xa758, 0x43b5, 0x1bd9,
9187 +
            0xff34, 0xab01, 0x4fec, 0x1780, 0xf36d, 0xbfea, 0x5b07, 0x036b, 0xe786, 0xb3b3, 0x575e,
9188 +
            0x0f32, 0xebdf, 0x963c, 0x72d1, 0x2abd, 0xce50, 0x9a65, 0x7e88, 0x26e4, 0xc209, 0x8e8e,
9189 +
            0x6a63, 0x320f, 0xd6e2, 0x82d7, 0x663a, 0x3e56, 0xdabb, 0xfe7b, 0x1a96, 0x42fa, 0xa617,
9190 +
            0xf222, 0x16cf, 0x4ea3, 0xaa4e, 0xe6c9, 0x0224, 0x5a48, 0xbea5, 0xea90, 0x0e7d, 0x5611,
9191 +
            0xb2fc, 0xcf1f, 0x2bf2, 0x739e, 0x9773, 0xc346, 0x27ab, 0x7fc7, 0x9b2a, 0xd7ad, 0x3340,
9192 +
            0x6b2c, 0x8fc1, 0xdbf4, 0x3f19, 0x6775, 0x8398, 0x9cb3, 0x785e, 0x2032, 0xc4df, 0x90ea,
9193 +
            0x7407, 0x2c6b, 0xc886, 0x8401, 0x60ec, 0x3880, 0xdc6d, 0x8858, 0x6cb5, 0x34d9, 0xd034,
9194 +
            0xadd7, 0x493a, 0x1156, 0xf5bb, 0xa18e, 0x4563, 0x1d0f, 0xf9e2, 0xb565, 0x5188, 0x09e4,
9195 +
            0xed09, 0xb93c, 0x5dd1, 0x05bd, 0xe150, 0x3beb, 0xdf06, 0x876a, 0x6387, 0x37b2, 0xd35f,
9196 +
            0x8b33, 0x6fde, 0x2359, 0xc7b4, 0x9fd8, 0x7b35, 0x2f00, 0xcbed, 0x9381, 0x776c, 0x0a8f,
9197 +
            0xee62, 0xb60e, 0x52e3, 0x06d6, 0xe23b, 0xba57, 0x5eba, 0x123d, 0xf6d0, 0xaebc, 0x4a51,
9198 +
            0x1e64, 0xfa89, 0xa2e5, 0x4608, 0x5923, 0xbdce, 0xe5a2, 0x014f, 0x557a, 0xb197, 0xe9fb,
9199 +
            0x0d16, 0x4191, 0xa57c, 0xfd10, 0x19fd, 0x4dc8, 0xa925, 0xf149, 0x15a4, 0x6847, 0x8caa,
9200 +
            0xd4c6, 0x302b, 0x641e, 0x80f3, 0xd89f, 0x3c72, 0x70f5, 0x9418, 0xcc74, 0x2899, 0x7cac,
9201 +
            0x9841, 0xc02d, 0x24c0,
9202 +
        ],
9203 +
        [
9204 +
            0x0000, 0x89ad, 0x6601, 0xefac, 0xcc02, 0x45af, 0xaa03, 0x23ae, 0xed5f, 0x64f2, 0x8b5e,
9205 +
            0x02f3, 0x215d, 0xa8f0, 0x475c, 0xcef1, 0xafe5, 0x2648, 0xc9e4, 0x4049, 0x63e7, 0xea4a,
9206 +
            0x05e6, 0x8c4b, 0x42ba, 0xcb17, 0x24bb, 0xad16, 0x8eb8, 0x0715, 0xe8b9, 0x6114, 0x2a91,
9207 +
            0xa33c, 0x4c90, 0xc53d, 0xe693, 0x6f3e, 0x8092, 0x093f, 0xc7ce, 0x4e63, 0xa1cf, 0x2862,
9208 +
            0x0bcc, 0x8261, 0x6dcd, 0xe460, 0x8574, 0x0cd9, 0xe375, 0x6ad8, 0x4976, 0xc0db, 0x2f77,
9209 +
            0xa6da, 0x682b, 0xe186, 0x0e2a, 0x8787, 0xa429, 0x2d84, 0xc228, 0x4b85, 0x5522, 0xdc8f,
9210 +
            0x3323, 0xba8e, 0x9920, 0x108d, 0xff21, 0x768c, 0xb87d, 0x31d0, 0xde7c, 0x57d1, 0x747f,
9211 +
            0xfdd2, 0x127e, 0x9bd3, 0xfac7, 0x736a, 0x9cc6, 0x156b, 0x36c5, 0xbf68, 0x50c4, 0xd969,
9212 +
            0x1798, 0x9e35, 0x7199, 0xf834, 0xdb9a, 0x5237, 0xbd9b, 0x3436, 0x7fb3, 0xf61e, 0x19b2,
9213 +
            0x901f, 0xb3b1, 0x3a1c, 0xd5b0, 0x5c1d, 0x92ec, 0x1b41, 0xf4ed, 0x7d40, 0x5eee, 0xd743,
9214 +
            0x38ef, 0xb142, 0xd056, 0x59fb, 0xb657, 0x3ffa, 0x1c54, 0x95f9, 0x7a55, 0xf3f8, 0x3d09,
9215 +
            0xb4a4, 0x5b08, 0xd2a5, 0xf10b, 0x78a6, 0x970a, 0x1ea7, 0xaa44, 0x23e9, 0xcc45, 0x45e8,
9216 +
            0x6646, 0xefeb, 0x0047, 0x89ea, 0x471b, 0xceb6, 0x211a, 0xa8b7, 0x8b19, 0x02b4, 0xed18,
9217 +
            0x64b5, 0x05a1, 0x8c0c, 0x63a0, 0xea0d, 0xc9a3, 0x400e, 0xafa2, 0x260f, 0xe8fe, 0x6153,
9218 +
            0x8eff, 0x0752, 0x24fc, 0xad51, 0x42fd, 0xcb50, 0x80d5, 0x0978, 0xe6d4, 0x6f79, 0x4cd7,
9219 +
            0xc57a, 0x2ad6, 0xa37b, 0x6d8a, 0xe427, 0x0b8b, 0x8226, 0xa188, 0x2825, 0xc789, 0x4e24,
9220 +
            0x2f30, 0xa69d, 0x4931, 0xc09c, 0xe332, 0x6a9f, 0x8533, 0x0c9e, 0xc26f, 0x4bc2, 0xa46e,
9221 +
            0x2dc3, 0x0e6d, 0x87c0, 0x686c, 0xe1c1, 0xff66, 0x76cb, 0x9967, 0x10ca, 0x3364, 0xbac9,
9222 +
            0x5565, 0xdcc8, 0x1239, 0x9b94, 0x7438, 0xfd95, 0xde3b, 0x5796, 0xb83a, 0x3197, 0x5083,
9223 +
            0xd92e, 0x3682, 0xbf2f, 0x9c81, 0x152c, 0xfa80, 0x732d, 0xbddc, 0x3471, 0xdbdd, 0x5270,
9224 +
            0x71de, 0xf873, 0x17df, 0x9e72, 0xd5f7, 0x5c5a, 0xb3f6, 0x3a5b, 0x19f5, 0x9058, 0x7ff4,
9225 +
            0xf659, 0x38a8, 0xb105, 0x5ea9, 0xd704, 0xf4aa, 0x7d07, 0x92ab, 0x1b06, 0x7a12, 0xf3bf,
9226 +
            0x1c13, 0x95be, 0xb610, 0x3fbd, 0xd011, 0x59bc, 0x974d, 0x1ee0, 0xf14c, 0x78e1, 0x5b4f,
9227 +
            0xd2e2, 0x3d4e, 0xb4e3,
9228 +
        ],
9229 +
    ];
9230 +
9231 +
    pub static CRC16_PROFIBUS_TABLE: [[u16; 256]; 16] = [
9232 +
        [
9233 +
            0x0000, 0x1dcf, 0x3b9e, 0x2651, 0x773c, 0x6af3, 0x4ca2, 0x516d, 0xee78, 0xf3b7, 0xd5e6,
9234 +
            0xc829, 0x9944, 0x848b, 0xa2da, 0xbf15, 0xc13f, 0xdcf0, 0xfaa1, 0xe76e, 0xb603, 0xabcc,
9235 +
            0x8d9d, 0x9052, 0x2f47, 0x3288, 0x14d9, 0x0916, 0x587b, 0x45b4, 0x63e5, 0x7e2a, 0x9fb1,
9236 +
            0x827e, 0xa42f, 0xb9e0, 0xe88d, 0xf542, 0xd313, 0xcedc, 0x71c9, 0x6c06, 0x4a57, 0x5798,
9237 +
            0x06f5, 0x1b3a, 0x3d6b, 0x20a4, 0x5e8e, 0x4341, 0x6510, 0x78df, 0x29b2, 0x347d, 0x122c,
9238 +
            0x0fe3, 0xb0f6, 0xad39, 0x8b68, 0x96a7, 0xc7ca, 0xda05, 0xfc54, 0xe19b, 0x22ad, 0x3f62,
9239 +
            0x1933, 0x04fc, 0x5591, 0x485e, 0x6e0f, 0x73c0, 0xccd5, 0xd11a, 0xf74b, 0xea84, 0xbbe9,
9240 +
            0xa626, 0x8077, 0x9db8, 0xe392, 0xfe5d, 0xd80c, 0xc5c3, 0x94ae, 0x8961, 0xaf30, 0xb2ff,
9241 +
            0x0dea, 0x1025, 0x3674, 0x2bbb, 0x7ad6, 0x6719, 0x4148, 0x5c87, 0xbd1c, 0xa0d3, 0x8682,
9242 +
            0x9b4d, 0xca20, 0xd7ef, 0xf1be, 0xec71, 0x5364, 0x4eab, 0x68fa, 0x7535, 0x2458, 0x3997,
9243 +
            0x1fc6, 0x0209, 0x7c23, 0x61ec, 0x47bd, 0x5a72, 0x0b1f, 0x16d0, 0x3081, 0x2d4e, 0x925b,
9244 +
            0x8f94, 0xa9c5, 0xb40a, 0xe567, 0xf8a8, 0xdef9, 0xc336, 0x455a, 0x5895, 0x7ec4, 0x630b,
9245 +
            0x3266, 0x2fa9, 0x09f8, 0x1437, 0xab22, 0xb6ed, 0x90bc, 0x8d73, 0xdc1e, 0xc1d1, 0xe780,
9246 +
            0xfa4f, 0x8465, 0x99aa, 0xbffb, 0xa234, 0xf359, 0xee96, 0xc8c7, 0xd508, 0x6a1d, 0x77d2,
9247 +
            0x5183, 0x4c4c, 0x1d21, 0x00ee, 0x26bf, 0x3b70, 0xdaeb, 0xc724, 0xe175, 0xfcba, 0xadd7,
9248 +
            0xb018, 0x9649, 0x8b86, 0x3493, 0x295c, 0x0f0d, 0x12c2, 0x43af, 0x5e60, 0x7831, 0x65fe,
9249 +
            0x1bd4, 0x061b, 0x204a, 0x3d85, 0x6ce8, 0x7127, 0x5776, 0x4ab9, 0xf5ac, 0xe863, 0xce32,
9250 +
            0xd3fd, 0x8290, 0x9f5f, 0xb90e, 0xa4c1, 0x67f7, 0x7a38, 0x5c69, 0x41a6, 0x10cb, 0x0d04,
9251 +
            0x2b55, 0x369a, 0x898f, 0x9440, 0xb211, 0xafde, 0xfeb3, 0xe37c, 0xc52d, 0xd8e2, 0xa6c8,
9252 +
            0xbb07, 0x9d56, 0x8099, 0xd1f4, 0xcc3b, 0xea6a, 0xf7a5, 0x48b0, 0x557f, 0x732e, 0x6ee1,
9253 +
            0x3f8c, 0x2243, 0x0412, 0x19dd, 0xf846, 0xe589, 0xc3d8, 0xde17, 0x8f7a, 0x92b5, 0xb4e4,
9254 +
            0xa92b, 0x163e, 0x0bf1, 0x2da0, 0x306f, 0x6102, 0x7ccd, 0x5a9c, 0x4753, 0x3979, 0x24b6,
9255 +
            0x02e7, 0x1f28, 0x4e45, 0x538a, 0x75db, 0x6814, 0xd701, 0xcace, 0xec9f, 0xf150, 0xa03d,
9256 +
            0xbdf2, 0x9ba3, 0x866c,
9257 +
        ],
9258 +
        [
9259 +
            0x0000, 0x8ab4, 0x08a7, 0x8213, 0x114e, 0x9bfa, 0x19e9, 0x935d, 0x229c, 0xa828, 0x2a3b,
9260 +
            0xa08f, 0x33d2, 0xb966, 0x3b75, 0xb1c1, 0x4538, 0xcf8c, 0x4d9f, 0xc72b, 0x5476, 0xdec2,
9261 +
            0x5cd1, 0xd665, 0x67a4, 0xed10, 0x6f03, 0xe5b7, 0x76ea, 0xfc5e, 0x7e4d, 0xf4f9, 0x8a70,
9262 +
            0x00c4, 0x82d7, 0x0863, 0x9b3e, 0x118a, 0x9399, 0x192d, 0xa8ec, 0x2258, 0xa04b, 0x2aff,
9263 +
            0xb9a2, 0x3316, 0xb105, 0x3bb1, 0xcf48, 0x45fc, 0xc7ef, 0x4d5b, 0xde06, 0x54b2, 0xd6a1,
9264 +
            0x5c15, 0xedd4, 0x6760, 0xe573, 0x6fc7, 0xfc9a, 0x762e, 0xf43d, 0x7e89, 0x092f, 0x839b,
9265 +
            0x0188, 0x8b3c, 0x1861, 0x92d5, 0x10c6, 0x9a72, 0x2bb3, 0xa107, 0x2314, 0xa9a0, 0x3afd,
9266 +
            0xb049, 0x325a, 0xb8ee, 0x4c17, 0xc6a3, 0x44b0, 0xce04, 0x5d59, 0xd7ed, 0x55fe, 0xdf4a,
9267 +
            0x6e8b, 0xe43f, 0x662c, 0xec98, 0x7fc5, 0xf571, 0x7762, 0xfdd6, 0x835f, 0x09eb, 0x8bf8,
9268 +
            0x014c, 0x9211, 0x18a5, 0x9ab6, 0x1002, 0xa1c3, 0x2b77, 0xa964, 0x23d0, 0xb08d, 0x3a39,
9269 +
            0xb82a, 0x329e, 0xc667, 0x4cd3, 0xcec0, 0x4474, 0xd729, 0x5d9d, 0xdf8e, 0x553a, 0xe4fb,
9270 +
            0x6e4f, 0xec5c, 0x66e8, 0xf5b5, 0x7f01, 0xfd12, 0x77a6, 0x125e, 0x98ea, 0x1af9, 0x904d,
9271 +
            0x0310, 0x89a4, 0x0bb7, 0x8103, 0x30c2, 0xba76, 0x3865, 0xb2d1, 0x218c, 0xab38, 0x292b,
9272 +
            0xa39f, 0x5766, 0xddd2, 0x5fc1, 0xd575, 0x4628, 0xcc9c, 0x4e8f, 0xc43b, 0x75fa, 0xff4e,
9273 +
            0x7d5d, 0xf7e9, 0x64b4, 0xee00, 0x6c13, 0xe6a7, 0x982e, 0x129a, 0x9089, 0x1a3d, 0x8960,
9274 +
            0x03d4, 0x81c7, 0x0b73, 0xbab2, 0x3006, 0xb215, 0x38a1, 0xabfc, 0x2148, 0xa35b, 0x29ef,
9275 +
            0xdd16, 0x57a2, 0xd5b1, 0x5f05, 0xcc58, 0x46ec, 0xc4ff, 0x4e4b, 0xff8a, 0x753e, 0xf72d,
9276 +
            0x7d99, 0xeec4, 0x6470, 0xe663, 0x6cd7, 0x1b71, 0x91c5, 0x13d6, 0x9962, 0x0a3f, 0x808b,
9277 +
            0x0298, 0x882c, 0x39ed, 0xb359, 0x314a, 0xbbfe, 0x28a3, 0xa217, 0x2004, 0xaab0, 0x5e49,
9278 +
            0xd4fd, 0x56ee, 0xdc5a, 0x4f07, 0xc5b3, 0x47a0, 0xcd14, 0x7cd5, 0xf661, 0x7472, 0xfec6,
9279 +
            0x6d9b, 0xe72f, 0x653c, 0xef88, 0x9101, 0x1bb5, 0x99a6, 0x1312, 0x804f, 0x0afb, 0x88e8,
9280 +
            0x025c, 0xb39d, 0x3929, 0xbb3a, 0x318e, 0xa2d3, 0x2867, 0xaa74, 0x20c0, 0xd439, 0x5e8d,
9281 +
            0xdc9e, 0x562a, 0xc577, 0x4fc3, 0xcdd0, 0x4764, 0xf6a5, 0x7c11, 0xfe02, 0x74b6, 0xe7eb,
9282 +
            0x6d5f, 0xef4c, 0x65f8,
9283 +
        ],
9284 +
        [
9285 +
            0x0000, 0x24bc, 0x4978, 0x6dc4, 0x92f0, 0xb64c, 0xdb88, 0xff34, 0x382f, 0x1c93, 0x7157,
9286 +
            0x55eb, 0xaadf, 0x8e63, 0xe3a7, 0xc71b, 0x705e, 0x54e2, 0x3926, 0x1d9a, 0xe2ae, 0xc612,
9287 +
            0xabd6, 0x8f6a, 0x4871, 0x6ccd, 0x0109, 0x25b5, 0xda81, 0xfe3d, 0x93f9, 0xb745, 0xe0bc,
9288 +
            0xc400, 0xa9c4, 0x8d78, 0x724c, 0x56f0, 0x3b34, 0x1f88, 0xd893, 0xfc2f, 0x91eb, 0xb557,
9289 +
            0x4a63, 0x6edf, 0x031b, 0x27a7, 0x90e2, 0xb45e, 0xd99a, 0xfd26, 0x0212, 0x26ae, 0x4b6a,
9290 +
            0x6fd6, 0xa8cd, 0x8c71, 0xe1b5, 0xc509, 0x3a3d, 0x1e81, 0x7345, 0x57f9, 0xdcb7, 0xf80b,
9291 +
            0x95cf, 0xb173, 0x4e47, 0x6afb, 0x073f, 0x2383, 0xe498, 0xc024, 0xade0, 0x895c, 0x7668,
9292 +
            0x52d4, 0x3f10, 0x1bac, 0xace9, 0x8855, 0xe591, 0xc12d, 0x3e19, 0x1aa5, 0x7761, 0x53dd,
9293 +
            0x94c6, 0xb07a, 0xddbe, 0xf902, 0x0636, 0x228a, 0x4f4e, 0x6bf2, 0x3c0b, 0x18b7, 0x7573,
9294 +
            0x51cf, 0xaefb, 0x8a47, 0xe783, 0xc33f, 0x0424, 0x2098, 0x4d5c, 0x69e0, 0x96d4, 0xb268,
9295 +
            0xdfac, 0xfb10, 0x4c55, 0x68e9, 0x052d, 0x2191, 0xdea5, 0xfa19, 0x97dd, 0xb361, 0x747a,
9296 +
            0x50c6, 0x3d02, 0x19be, 0xe68a, 0xc236, 0xaff2, 0x8b4e, 0xa4a1, 0x801d, 0xedd9, 0xc965,
9297 +
            0x3651, 0x12ed, 0x7f29, 0x5b95, 0x9c8e, 0xb832, 0xd5f6, 0xf14a, 0x0e7e, 0x2ac2, 0x4706,
9298 +
            0x63ba, 0xd4ff, 0xf043, 0x9d87, 0xb93b, 0x460f, 0x62b3, 0x0f77, 0x2bcb, 0xecd0, 0xc86c,
9299 +
            0xa5a8, 0x8114, 0x7e20, 0x5a9c, 0x3758, 0x13e4, 0x441d, 0x60a1, 0x0d65, 0x29d9, 0xd6ed,
9300 +
            0xf251, 0x9f95, 0xbb29, 0x7c32, 0x588e, 0x354a, 0x11f6, 0xeec2, 0xca7e, 0xa7ba, 0x8306,
9301 +
            0x3443, 0x10ff, 0x7d3b, 0x5987, 0xa6b3, 0x820f, 0xefcb, 0xcb77, 0x0c6c, 0x28d0, 0x4514,
9302 +
            0x61a8, 0x9e9c, 0xba20, 0xd7e4, 0xf358, 0x7816, 0x5caa, 0x316e, 0x15d2, 0xeae6, 0xce5a,
9303 +
            0xa39e, 0x8722, 0x4039, 0x6485, 0x0941, 0x2dfd, 0xd2c9, 0xf675, 0x9bb1, 0xbf0d, 0x0848,
9304 +
            0x2cf4, 0x4130, 0x658c, 0x9ab8, 0xbe04, 0xd3c0, 0xf77c, 0x3067, 0x14db, 0x791f, 0x5da3,
9305 +
            0xa297, 0x862b, 0xebef, 0xcf53, 0x98aa, 0xbc16, 0xd1d2, 0xf56e, 0x0a5a, 0x2ee6, 0x4322,
9306 +
            0x679e, 0xa085, 0x8439, 0xe9fd, 0xcd41, 0x3275, 0x16c9, 0x7b0d, 0x5fb1, 0xe8f4, 0xcc48,
9307 +
            0xa18c, 0x8530, 0x7a04, 0x5eb8, 0x337c, 0x17c0, 0xd0db, 0xf467, 0x99a3, 0xbd1f, 0x422b,
9308 +
            0x6697, 0x0b53, 0x2fef,
9309 +
        ],
9310 +
        [
9311 +
            0x0000, 0x548d, 0xa91a, 0xfd97, 0x4ffb, 0x1b76, 0xe6e1, 0xb26c, 0x9ff6, 0xcb7b, 0x36ec,
9312 +
            0x6261, 0xd00d, 0x8480, 0x7917, 0x2d9a, 0x2223, 0x76ae, 0x8b39, 0xdfb4, 0x6dd8, 0x3955,
9313 +
            0xc4c2, 0x904f, 0xbdd5, 0xe958, 0x14cf, 0x4042, 0xf22e, 0xa6a3, 0x5b34, 0x0fb9, 0x4446,
9314 +
            0x10cb, 0xed5c, 0xb9d1, 0x0bbd, 0x5f30, 0xa2a7, 0xf62a, 0xdbb0, 0x8f3d, 0x72aa, 0x2627,
9315 +
            0x944b, 0xc0c6, 0x3d51, 0x69dc, 0x6665, 0x32e8, 0xcf7f, 0x9bf2, 0x299e, 0x7d13, 0x8084,
9316 +
            0xd409, 0xf993, 0xad1e, 0x5089, 0x0404, 0xb668, 0xe2e5, 0x1f72, 0x4bff, 0x888c, 0xdc01,
9317 +
            0x2196, 0x751b, 0xc777, 0x93fa, 0x6e6d, 0x3ae0, 0x177a, 0x43f7, 0xbe60, 0xeaed, 0x5881,
9318 +
            0x0c0c, 0xf19b, 0xa516, 0xaaaf, 0xfe22, 0x03b5, 0x5738, 0xe554, 0xb1d9, 0x4c4e, 0x18c3,
9319 +
            0x3559, 0x61d4, 0x9c43, 0xc8ce, 0x7aa2, 0x2e2f, 0xd3b8, 0x8735, 0xccca, 0x9847, 0x65d0,
9320 +
            0x315d, 0x8331, 0xd7bc, 0x2a2b, 0x7ea6, 0x533c, 0x07b1, 0xfa26, 0xaeab, 0x1cc7, 0x484a,
9321 +
            0xb5dd, 0xe150, 0xeee9, 0xba64, 0x47f3, 0x137e, 0xa112, 0xf59f, 0x0808, 0x5c85, 0x711f,
9322 +
            0x2592, 0xd805, 0x8c88, 0x3ee4, 0x6a69, 0x97fe, 0xc373, 0x0cd7, 0x585a, 0xa5cd, 0xf140,
9323 +
            0x432c, 0x17a1, 0xea36, 0xbebb, 0x9321, 0xc7ac, 0x3a3b, 0x6eb6, 0xdcda, 0x8857, 0x75c0,
9324 +
            0x214d, 0x2ef4, 0x7a79, 0x87ee, 0xd363, 0x610f, 0x3582, 0xc815, 0x9c98, 0xb102, 0xe58f,
9325 +
            0x1818, 0x4c95, 0xfef9, 0xaa74, 0x57e3, 0x036e, 0x4891, 0x1c1c, 0xe18b, 0xb506, 0x076a,
9326 +
            0x53e7, 0xae70, 0xfafd, 0xd767, 0x83ea, 0x7e7d, 0x2af0, 0x989c, 0xcc11, 0x3186, 0x650b,
9327 +
            0x6ab2, 0x3e3f, 0xc3a8, 0x9725, 0x2549, 0x71c4, 0x8c53, 0xd8de, 0xf544, 0xa1c9, 0x5c5e,
9328 +
            0x08d3, 0xbabf, 0xee32, 0x13a5, 0x4728, 0x845b, 0xd0d6, 0x2d41, 0x79cc, 0xcba0, 0x9f2d,
9329 +
            0x62ba, 0x3637, 0x1bad, 0x4f20, 0xb2b7, 0xe63a, 0x5456, 0x00db, 0xfd4c, 0xa9c1, 0xa678,
9330 +
            0xf2f5, 0x0f62, 0x5bef, 0xe983, 0xbd0e, 0x4099, 0x1414, 0x398e, 0x6d03, 0x9094, 0xc419,
9331 +
            0x7675, 0x22f8, 0xdf6f, 0x8be2, 0xc01d, 0x9490, 0x6907, 0x3d8a, 0x8fe6, 0xdb6b, 0x26fc,
9332 +
            0x7271, 0x5feb, 0x0b66, 0xf6f1, 0xa27c, 0x1010, 0x449d, 0xb90a, 0xed87, 0xe23e, 0xb6b3,
9333 +
            0x4b24, 0x1fa9, 0xadc5, 0xf948, 0x04df, 0x5052, 0x7dc8, 0x2945, 0xd4d2, 0x805f, 0x3233,
9334 +
            0x66be, 0x9b29, 0xcfa4,
9335 +
        ],
9336 +
        [
9337 +
            0x0000, 0x19ae, 0x335c, 0x2af2, 0x66b8, 0x7f16, 0x55e4, 0x4c4a, 0xcd70, 0xd4de, 0xfe2c,
9338 +
            0xe782, 0xabc8, 0xb266, 0x9894, 0x813a, 0x872f, 0x9e81, 0xb473, 0xaddd, 0xe197, 0xf839,
9339 +
            0xd2cb, 0xcb65, 0x4a5f, 0x53f1, 0x7903, 0x60ad, 0x2ce7, 0x3549, 0x1fbb, 0x0615, 0x1391,
9340 +
            0x0a3f, 0x20cd, 0x3963, 0x7529, 0x6c87, 0x4675, 0x5fdb, 0xdee1, 0xc74f, 0xedbd, 0xf413,
9341 +
            0xb859, 0xa1f7, 0x8b05, 0x92ab, 0x94be, 0x8d10, 0xa7e2, 0xbe4c, 0xf206, 0xeba8, 0xc15a,
9342 +
            0xd8f4, 0x59ce, 0x4060, 0x6a92, 0x733c, 0x3f76, 0x26d8, 0x0c2a, 0x1584, 0x2722, 0x3e8c,
9343 +
            0x147e, 0x0dd0, 0x419a, 0x5834, 0x72c6, 0x6b68, 0xea52, 0xf3fc, 0xd90e, 0xc0a0, 0x8cea,
9344 +
            0x9544, 0xbfb6, 0xa618, 0xa00d, 0xb9a3, 0x9351, 0x8aff, 0xc6b5, 0xdf1b, 0xf5e9, 0xec47,
9345 +
            0x6d7d, 0x74d3, 0x5e21, 0x478f, 0x0bc5, 0x126b, 0x3899, 0x2137, 0x34b3, 0x2d1d, 0x07ef,
9346 +
            0x1e41, 0x520b, 0x4ba5, 0x6157, 0x78f9, 0xf9c3, 0xe06d, 0xca9f, 0xd331, 0x9f7b, 0x86d5,
9347 +
            0xac27, 0xb589, 0xb39c, 0xaa32, 0x80c0, 0x996e, 0xd524, 0xcc8a, 0xe678, 0xffd6, 0x7eec,
9348 +
            0x6742, 0x4db0, 0x541e, 0x1854, 0x01fa, 0x2b08, 0x32a6, 0x4e44, 0x57ea, 0x7d18, 0x64b6,
9349 +
            0x28fc, 0x3152, 0x1ba0, 0x020e, 0x8334, 0x9a9a, 0xb068, 0xa9c6, 0xe58c, 0xfc22, 0xd6d0,
9350 +
            0xcf7e, 0xc96b, 0xd0c5, 0xfa37, 0xe399, 0xafd3, 0xb67d, 0x9c8f, 0x8521, 0x041b, 0x1db5,
9351 +
            0x3747, 0x2ee9, 0x62a3, 0x7b0d, 0x51ff, 0x4851, 0x5dd5, 0x447b, 0x6e89, 0x7727, 0x3b6d,
9352 +
            0x22c3, 0x0831, 0x119f, 0x90a5, 0x890b, 0xa3f9, 0xba57, 0xf61d, 0xefb3, 0xc541, 0xdcef,
9353 +
            0xdafa, 0xc354, 0xe9a6, 0xf008, 0xbc42, 0xa5ec, 0x8f1e, 0x96b0, 0x178a, 0x0e24, 0x24d6,
9354 +
            0x3d78, 0x7132, 0x689c, 0x426e, 0x5bc0, 0x6966, 0x70c8, 0x5a3a, 0x4394, 0x0fde, 0x1670,
9355 +
            0x3c82, 0x252c, 0xa416, 0xbdb8, 0x974a, 0x8ee4, 0xc2ae, 0xdb00, 0xf1f2, 0xe85c, 0xee49,
9356 +
            0xf7e7, 0xdd15, 0xc4bb, 0x88f1, 0x915f, 0xbbad, 0xa203, 0x2339, 0x3a97, 0x1065, 0x09cb,
9357 +
            0x4581, 0x5c2f, 0x76dd, 0x6f73, 0x7af7, 0x6359, 0x49ab, 0x5005, 0x1c4f, 0x05e1, 0x2f13,
9358 +
            0x36bd, 0xb787, 0xae29, 0x84db, 0x9d75, 0xd13f, 0xc891, 0xe263, 0xfbcd, 0xfdd8, 0xe476,
9359 +
            0xce84, 0xd72a, 0x9b60, 0x82ce, 0xa83c, 0xb192, 0x30a8, 0x2906, 0x03f4, 0x1a5a, 0x5610,
9360 +
            0x4fbe, 0x654c, 0x7ce2,
9361 +
        ],
9362 +
        [
9363 +
            0x0000, 0x9c88, 0x24df, 0xb857, 0x49be, 0xd536, 0x6d61, 0xf1e9, 0x937c, 0x0ff4, 0xb7a3,
9364 +
            0x2b2b, 0xdac2, 0x464a, 0xfe1d, 0x6295, 0x3b37, 0xa7bf, 0x1fe8, 0x8360, 0x7289, 0xee01,
9365 +
            0x5656, 0xcade, 0xa84b, 0x34c3, 0x8c94, 0x101c, 0xe1f5, 0x7d7d, 0xc52a, 0x59a2, 0x766e,
9366 +
            0xeae6, 0x52b1, 0xce39, 0x3fd0, 0xa358, 0x1b0f, 0x8787, 0xe512, 0x799a, 0xc1cd, 0x5d45,
9367 +
            0xacac, 0x3024, 0x8873, 0x14fb, 0x4d59, 0xd1d1, 0x6986, 0xf50e, 0x04e7, 0x986f, 0x2038,
9368 +
            0xbcb0, 0xde25, 0x42ad, 0xfafa, 0x6672, 0x979b, 0x0b13, 0xb344, 0x2fcc, 0xecdc, 0x7054,
9369 +
            0xc803, 0x548b, 0xa562, 0x39ea, 0x81bd, 0x1d35, 0x7fa0, 0xe328, 0x5b7f, 0xc7f7, 0x361e,
9370 +
            0xaa96, 0x12c1, 0x8e49, 0xd7eb, 0x4b63, 0xf334, 0x6fbc, 0x9e55, 0x02dd, 0xba8a, 0x2602,
9371 +
            0x4497, 0xd81f, 0x6048, 0xfcc0, 0x0d29, 0x91a1, 0x29f6, 0xb57e, 0x9ab2, 0x063a, 0xbe6d,
9372 +
            0x22e5, 0xd30c, 0x4f84, 0xf7d3, 0x6b5b, 0x09ce, 0x9546, 0x2d11, 0xb199, 0x4070, 0xdcf8,
9373 +
            0x64af, 0xf827, 0xa185, 0x3d0d, 0x855a, 0x19d2, 0xe83b, 0x74b3, 0xcce4, 0x506c, 0x32f9,
9374 +
            0xae71, 0x1626, 0x8aae, 0x7b47, 0xe7cf, 0x5f98, 0xc310, 0xc477, 0x58ff, 0xe0a8, 0x7c20,
9375 +
            0x8dc9, 0x1141, 0xa916, 0x359e, 0x570b, 0xcb83, 0x73d4, 0xef5c, 0x1eb5, 0x823d, 0x3a6a,
9376 +
            0xa6e2, 0xff40, 0x63c8, 0xdb9f, 0x4717, 0xb6fe, 0x2a76, 0x9221, 0x0ea9, 0x6c3c, 0xf0b4,
9377 +
            0x48e3, 0xd46b, 0x2582, 0xb90a, 0x015d, 0x9dd5, 0xb219, 0x2e91, 0x96c6, 0x0a4e, 0xfba7,
9378 +
            0x672f, 0xdf78, 0x43f0, 0x2165, 0xbded, 0x05ba, 0x9932, 0x68db, 0xf453, 0x4c04, 0xd08c,
9379 +
            0x892e, 0x15a6, 0xadf1, 0x3179, 0xc090, 0x5c18, 0xe44f, 0x78c7, 0x1a52, 0x86da, 0x3e8d,
9380 +
            0xa205, 0x53ec, 0xcf64, 0x7733, 0xebbb, 0x28ab, 0xb423, 0x0c74, 0x90fc, 0x6115, 0xfd9d,
9381 +
            0x45ca, 0xd942, 0xbbd7, 0x275f, 0x9f08, 0x0380, 0xf269, 0x6ee1, 0xd6b6, 0x4a3e, 0x139c,
9382 +
            0x8f14, 0x3743, 0xabcb, 0x5a22, 0xc6aa, 0x7efd, 0xe275, 0x80e0, 0x1c68, 0xa43f, 0x38b7,
9383 +
            0xc95e, 0x55d6, 0xed81, 0x7109, 0x5ec5, 0xc24d, 0x7a1a, 0xe692, 0x177b, 0x8bf3, 0x33a4,
9384 +
            0xaf2c, 0xcdb9, 0x5131, 0xe966, 0x75ee, 0x8407, 0x188f, 0xa0d8, 0x3c50, 0x65f2, 0xf97a,
9385 +
            0x412d, 0xdda5, 0x2c4c, 0xb0c4, 0x0893, 0x941b, 0xf68e, 0x6a06, 0xd251, 0x4ed9, 0xbf30,
9386 +
            0x23b8, 0x9bef, 0x0767,
9387 +
        ],
9388 +
        [
9389 +
            0x0000, 0x9521, 0x378d, 0xa2ac, 0x6f1a, 0xfa3b, 0x5897, 0xcdb6, 0xde34, 0x4b15, 0xe9b9,
9390 +
            0x7c98, 0xb12e, 0x240f, 0x86a3, 0x1382, 0xa1a7, 0x3486, 0x962a, 0x030b, 0xcebd, 0x5b9c,
9391 +
            0xf930, 0x6c11, 0x7f93, 0xeab2, 0x481e, 0xdd3f, 0x1089, 0x85a8, 0x2704, 0xb225, 0x5e81,
9392 +
            0xcba0, 0x690c, 0xfc2d, 0x319b, 0xa4ba, 0x0616, 0x9337, 0x80b5, 0x1594, 0xb738, 0x2219,
9393 +
            0xefaf, 0x7a8e, 0xd822, 0x4d03, 0xff26, 0x6a07, 0xc8ab, 0x5d8a, 0x903c, 0x051d, 0xa7b1,
9394 +
            0x3290, 0x2112, 0xb433, 0x169f, 0x83be, 0x4e08, 0xdb29, 0x7985, 0xeca4, 0xbd02, 0x2823,
9395 +
            0x8a8f, 0x1fae, 0xd218, 0x4739, 0xe595, 0x70b4, 0x6336, 0xf617, 0x54bb, 0xc19a, 0x0c2c,
9396 +
            0x990d, 0x3ba1, 0xae80, 0x1ca5, 0x8984, 0x2b28, 0xbe09, 0x73bf, 0xe69e, 0x4432, 0xd113,
9397 +
            0xc291, 0x57b0, 0xf51c, 0x603d, 0xad8b, 0x38aa, 0x9a06, 0x0f27, 0xe383, 0x76a2, 0xd40e,
9398 +
            0x412f, 0x8c99, 0x19b8, 0xbb14, 0x2e35, 0x3db7, 0xa896, 0x0a3a, 0x9f1b, 0x52ad, 0xc78c,
9399 +
            0x6520, 0xf001, 0x4224, 0xd705, 0x75a9, 0xe088, 0x2d3e, 0xb81f, 0x1ab3, 0x8f92, 0x9c10,
9400 +
            0x0931, 0xab9d, 0x3ebc, 0xf30a, 0x662b, 0xc487, 0x51a6, 0x67cb, 0xf2ea, 0x5046, 0xc567,
9401 +
            0x08d1, 0x9df0, 0x3f5c, 0xaa7d, 0xb9ff, 0x2cde, 0x8e72, 0x1b53, 0xd6e5, 0x43c4, 0xe168,
9402 +
            0x7449, 0xc66c, 0x534d, 0xf1e1, 0x64c0, 0xa976, 0x3c57, 0x9efb, 0x0bda, 0x1858, 0x8d79,
9403 +
            0x2fd5, 0xbaf4, 0x7742, 0xe263, 0x40cf, 0xd5ee, 0x394a, 0xac6b, 0x0ec7, 0x9be6, 0x5650,
9404 +
            0xc371, 0x61dd, 0xf4fc, 0xe77e, 0x725f, 0xd0f3, 0x45d2, 0x8864, 0x1d45, 0xbfe9, 0x2ac8,
9405 +
            0x98ed, 0x0dcc, 0xaf60, 0x3a41, 0xf7f7, 0x62d6, 0xc07a, 0x555b, 0x46d9, 0xd3f8, 0x7154,
9406 +
            0xe475, 0x29c3, 0xbce2, 0x1e4e, 0x8b6f, 0xdac9, 0x4fe8, 0xed44, 0x7865, 0xb5d3, 0x20f2,
9407 +
            0x825e, 0x177f, 0x04fd, 0x91dc, 0x3370, 0xa651, 0x6be7, 0xfec6, 0x5c6a, 0xc94b, 0x7b6e,
9408 +
            0xee4f, 0x4ce3, 0xd9c2, 0x1474, 0x8155, 0x23f9, 0xb6d8, 0xa55a, 0x307b, 0x92d7, 0x07f6,
9409 +
            0xca40, 0x5f61, 0xfdcd, 0x68ec, 0x8448, 0x1169, 0xb3c5, 0x26e4, 0xeb52, 0x7e73, 0xdcdf,
9410 +
            0x49fe, 0x5a7c, 0xcf5d, 0x6df1, 0xf8d0, 0x3566, 0xa047, 0x02eb, 0x97ca, 0x25ef, 0xb0ce,
9411 +
            0x1262, 0x8743, 0x4af5, 0xdfd4, 0x7d78, 0xe859, 0xfbdb, 0x6efa, 0xcc56, 0x5977, 0x94c1,
9412 +
            0x01e0, 0xa34c, 0x366d,
9413 +
        ],
9414 +
        [
9415 +
            0x0000, 0xcf96, 0x82e3, 0x4d75, 0x1809, 0xd79f, 0x9aea, 0x557c, 0x3012, 0xff84, 0xb2f1,
9416 +
            0x7d67, 0x281b, 0xe78d, 0xaaf8, 0x656e, 0x6024, 0xafb2, 0xe2c7, 0x2d51, 0x782d, 0xb7bb,
9417 +
            0xface, 0x3558, 0x5036, 0x9fa0, 0xd2d5, 0x1d43, 0x483f, 0x87a9, 0xcadc, 0x054a, 0xc048,
9418 +
            0x0fde, 0x42ab, 0x8d3d, 0xd841, 0x17d7, 0x5aa2, 0x9534, 0xf05a, 0x3fcc, 0x72b9, 0xbd2f,
9419 +
            0xe853, 0x27c5, 0x6ab0, 0xa526, 0xa06c, 0x6ffa, 0x228f, 0xed19, 0xb865, 0x77f3, 0x3a86,
9420 +
            0xf510, 0x907e, 0x5fe8, 0x129d, 0xdd0b, 0x8877, 0x47e1, 0x0a94, 0xc502, 0x9d5f, 0x52c9,
9421 +
            0x1fbc, 0xd02a, 0x8556, 0x4ac0, 0x07b5, 0xc823, 0xad4d, 0x62db, 0x2fae, 0xe038, 0xb544,
9422 +
            0x7ad2, 0x37a7, 0xf831, 0xfd7b, 0x32ed, 0x7f98, 0xb00e, 0xe572, 0x2ae4, 0x6791, 0xa807,
9423 +
            0xcd69, 0x02ff, 0x4f8a, 0x801c, 0xd560, 0x1af6, 0x5783, 0x9815, 0x5d17, 0x9281, 0xdff4,
9424 +
            0x1062, 0x451e, 0x8a88, 0xc7fd, 0x086b, 0x6d05, 0xa293, 0xefe6, 0x2070, 0x750c, 0xba9a,
9425 +
            0xf7ef, 0x3879, 0x3d33, 0xf2a5, 0xbfd0, 0x7046, 0x253a, 0xeaac, 0xa7d9, 0x684f, 0x0d21,
9426 +
            0xc2b7, 0x8fc2, 0x4054, 0x1528, 0xdabe, 0x97cb, 0x585d, 0x2771, 0xe8e7, 0xa592, 0x6a04,
9427 +
            0x3f78, 0xf0ee, 0xbd9b, 0x720d, 0x1763, 0xd8f5, 0x9580, 0x5a16, 0x0f6a, 0xc0fc, 0x8d89,
9428 +
            0x421f, 0x4755, 0x88c3, 0xc5b6, 0x0a20, 0x5f5c, 0x90ca, 0xddbf, 0x1229, 0x7747, 0xb8d1,
9429 +
            0xf5a4, 0x3a32, 0x6f4e, 0xa0d8, 0xedad, 0x223b, 0xe739, 0x28af, 0x65da, 0xaa4c, 0xff30,
9430 +
            0x30a6, 0x7dd3, 0xb245, 0xd72b, 0x18bd, 0x55c8, 0x9a5e, 0xcf22, 0x00b4, 0x4dc1, 0x8257,
9431 +
            0x871d, 0x488b, 0x05fe, 0xca68, 0x9f14, 0x5082, 0x1df7, 0xd261, 0xb70f, 0x7899, 0x35ec,
9432 +
            0xfa7a, 0xaf06, 0x6090, 0x2de5, 0xe273, 0xba2e, 0x75b8, 0x38cd, 0xf75b, 0xa227, 0x6db1,
9433 +
            0x20c4, 0xef52, 0x8a3c, 0x45aa, 0x08df, 0xc749, 0x9235, 0x5da3, 0x10d6, 0xdf40, 0xda0a,
9434 +
            0x159c, 0x58e9, 0x977f, 0xc203, 0x0d95, 0x40e0, 0x8f76, 0xea18, 0x258e, 0x68fb, 0xa76d,
9435 +
            0xf211, 0x3d87, 0x70f2, 0xbf64, 0x7a66, 0xb5f0, 0xf885, 0x3713, 0x626f, 0xadf9, 0xe08c,
9436 +
            0x2f1a, 0x4a74, 0x85e2, 0xc897, 0x0701, 0x527d, 0x9deb, 0xd09e, 0x1f08, 0x1a42, 0xd5d4,
9437 +
            0x98a1, 0x5737, 0x024b, 0xcddd, 0x80a8, 0x4f3e, 0x2a50, 0xe5c6, 0xa8b3, 0x6725, 0x3259,
9438 +
            0xfdcf, 0xb0ba, 0x7f2c,
9439 +
        ],
9440 +
        [
9441 +
            0x0000, 0x4ee2, 0x9dc4, 0xd326, 0x2647, 0x68a5, 0xbb83, 0xf561, 0x4c8e, 0x026c, 0xd14a,
9442 +
            0x9fa8, 0x6ac9, 0x242b, 0xf70d, 0xb9ef, 0x991c, 0xd7fe, 0x04d8, 0x4a3a, 0xbf5b, 0xf1b9,
9443 +
            0x229f, 0x6c7d, 0xd592, 0x9b70, 0x4856, 0x06b4, 0xf3d5, 0xbd37, 0x6e11, 0x20f3, 0x2ff7,
9444 +
            0x6115, 0xb233, 0xfcd1, 0x09b0, 0x4752, 0x9474, 0xda96, 0x6379, 0x2d9b, 0xfebd, 0xb05f,
9445 +
            0x453e, 0x0bdc, 0xd8fa, 0x9618, 0xb6eb, 0xf809, 0x2b2f, 0x65cd, 0x90ac, 0xde4e, 0x0d68,
9446 +
            0x438a, 0xfa65, 0xb487, 0x67a1, 0x2943, 0xdc22, 0x92c0, 0x41e6, 0x0f04, 0x5fee, 0x110c,
9447 +
            0xc22a, 0x8cc8, 0x79a9, 0x374b, 0xe46d, 0xaa8f, 0x1360, 0x5d82, 0x8ea4, 0xc046, 0x3527,
9448 +
            0x7bc5, 0xa8e3, 0xe601, 0xc6f2, 0x8810, 0x5b36, 0x15d4, 0xe0b5, 0xae57, 0x7d71, 0x3393,
9449 +
            0x8a7c, 0xc49e, 0x17b8, 0x595a, 0xac3b, 0xe2d9, 0x31ff, 0x7f1d, 0x7019, 0x3efb, 0xeddd,
9450 +
            0xa33f, 0x565e, 0x18bc, 0xcb9a, 0x8578, 0x3c97, 0x7275, 0xa153, 0xefb1, 0x1ad0, 0x5432,
9451 +
            0x8714, 0xc9f6, 0xe905, 0xa7e7, 0x74c1, 0x3a23, 0xcf42, 0x81a0, 0x5286, 0x1c64, 0xa58b,
9452 +
            0xeb69, 0x384f, 0x76ad, 0x83cc, 0xcd2e, 0x1e08, 0x50ea, 0xbfdc, 0xf13e, 0x2218, 0x6cfa,
9453 +
            0x999b, 0xd779, 0x045f, 0x4abd, 0xf352, 0xbdb0, 0x6e96, 0x2074, 0xd515, 0x9bf7, 0x48d1,
9454 +
            0x0633, 0x26c0, 0x6822, 0xbb04, 0xf5e6, 0x0087, 0x4e65, 0x9d43, 0xd3a1, 0x6a4e, 0x24ac,
9455 +
            0xf78a, 0xb968, 0x4c09, 0x02eb, 0xd1cd, 0x9f2f, 0x902b, 0xdec9, 0x0def, 0x430d, 0xb66c,
9456 +
            0xf88e, 0x2ba8, 0x654a, 0xdca5, 0x9247, 0x4161, 0x0f83, 0xfae2, 0xb400, 0x6726, 0x29c4,
9457 +
            0x0937, 0x47d5, 0x94f3, 0xda11, 0x2f70, 0x6192, 0xb2b4, 0xfc56, 0x45b9, 0x0b5b, 0xd87d,
9458 +
            0x969f, 0x63fe, 0x2d1c, 0xfe3a, 0xb0d8, 0xe032, 0xaed0, 0x7df6, 0x3314, 0xc675, 0x8897,
9459 +
            0x5bb1, 0x1553, 0xacbc, 0xe25e, 0x3178, 0x7f9a, 0x8afb, 0xc419, 0x173f, 0x59dd, 0x792e,
9460 +
            0x37cc, 0xe4ea, 0xaa08, 0x5f69, 0x118b, 0xc2ad, 0x8c4f, 0x35a0, 0x7b42, 0xa864, 0xe686,
9461 +
            0x13e7, 0x5d05, 0x8e23, 0xc0c1, 0xcfc5, 0x8127, 0x5201, 0x1ce3, 0xe982, 0xa760, 0x7446,
9462 +
            0x3aa4, 0x834b, 0xcda9, 0x1e8f, 0x506d, 0xa50c, 0xebee, 0x38c8, 0x762a, 0x56d9, 0x183b,
9463 +
            0xcb1d, 0x85ff, 0x709e, 0x3e7c, 0xed5a, 0xa3b8, 0x1a57, 0x54b5, 0x8793, 0xc971, 0x3c10,
9464 +
            0x72f2, 0xa1d4, 0xef36,
9465 +
        ],
9466 +
        [
9467 +
            0x0000, 0x6277, 0xc4ee, 0xa699, 0x9413, 0xf664, 0x50fd, 0x328a, 0x35e9, 0x579e, 0xf107,
9468 +
            0x9370, 0xa1fa, 0xc38d, 0x6514, 0x0763, 0x6bd2, 0x09a5, 0xaf3c, 0xcd4b, 0xffc1, 0x9db6,
9469 +
            0x3b2f, 0x5958, 0x5e3b, 0x3c4c, 0x9ad5, 0xf8a2, 0xca28, 0xa85f, 0x0ec6, 0x6cb1, 0xd7a4,
9470 +
            0xb5d3, 0x134a, 0x713d, 0x43b7, 0x21c0, 0x8759, 0xe52e, 0xe24d, 0x803a, 0x26a3, 0x44d4,
9471 +
            0x765e, 0x1429, 0xb2b0, 0xd0c7, 0xbc76, 0xde01, 0x7898, 0x1aef, 0x2865, 0x4a12, 0xec8b,
9472 +
            0x8efc, 0x899f, 0xebe8, 0x4d71, 0x2f06, 0x1d8c, 0x7ffb, 0xd962, 0xbb15, 0xb287, 0xd0f0,
9473 +
            0x7669, 0x141e, 0x2694, 0x44e3, 0xe27a, 0x800d, 0x876e, 0xe519, 0x4380, 0x21f7, 0x137d,
9474 +
            0x710a, 0xd793, 0xb5e4, 0xd955, 0xbb22, 0x1dbb, 0x7fcc, 0x4d46, 0x2f31, 0x89a8, 0xebdf,
9475 +
            0xecbc, 0x8ecb, 0x2852, 0x4a25, 0x78af, 0x1ad8, 0xbc41, 0xde36, 0x6523, 0x0754, 0xa1cd,
9476 +
            0xc3ba, 0xf130, 0x9347, 0x35de, 0x57a9, 0x50ca, 0x32bd, 0x9424, 0xf653, 0xc4d9, 0xa6ae,
9477 +
            0x0037, 0x6240, 0x0ef1, 0x6c86, 0xca1f, 0xa868, 0x9ae2, 0xf895, 0x5e0c, 0x3c7b, 0x3b18,
9478 +
            0x596f, 0xfff6, 0x9d81, 0xaf0b, 0xcd7c, 0x6be5, 0x0992, 0x78c1, 0x1ab6, 0xbc2f, 0xde58,
9479 +
            0xecd2, 0x8ea5, 0x283c, 0x4a4b, 0x4d28, 0x2f5f, 0x89c6, 0xebb1, 0xd93b, 0xbb4c, 0x1dd5,
9480 +
            0x7fa2, 0x1313, 0x7164, 0xd7fd, 0xb58a, 0x8700, 0xe577, 0x43ee, 0x2199, 0x26fa, 0x448d,
9481 +
            0xe214, 0x8063, 0xb2e9, 0xd09e, 0x7607, 0x1470, 0xaf65, 0xcd12, 0x6b8b, 0x09fc, 0x3b76,
9482 +
            0x5901, 0xff98, 0x9def, 0x9a8c, 0xf8fb, 0x5e62, 0x3c15, 0x0e9f, 0x6ce8, 0xca71, 0xa806,
9483 +
            0xc4b7, 0xa6c0, 0x0059, 0x622e, 0x50a4, 0x32d3, 0x944a, 0xf63d, 0xf15e, 0x9329, 0x35b0,
9484 +
            0x57c7, 0x654d, 0x073a, 0xa1a3, 0xc3d4, 0xca46, 0xa831, 0x0ea8, 0x6cdf, 0x5e55, 0x3c22,
9485 +
            0x9abb, 0xf8cc, 0xffaf, 0x9dd8, 0x3b41, 0x5936, 0x6bbc, 0x09cb, 0xaf52, 0xcd25, 0xa194,
9486 +
            0xc3e3, 0x657a, 0x070d, 0x3587, 0x57f0, 0xf169, 0x931e, 0x947d, 0xf60a, 0x5093, 0x32e4,
9487 +
            0x006e, 0x6219, 0xc480, 0xa6f7, 0x1de2, 0x7f95, 0xd90c, 0xbb7b, 0x89f1, 0xeb86, 0x4d1f,
9488 +
            0x2f68, 0x280b, 0x4a7c, 0xece5, 0x8e92, 0xbc18, 0xde6f, 0x78f6, 0x1a81, 0x7630, 0x1447,
9489 +
            0xb2de, 0xd0a9, 0xe223, 0x8054, 0x26cd, 0x44ba, 0x43d9, 0x21ae, 0x8737, 0xe540, 0xd7ca,
9490 +
            0xb5bd, 0x1324, 0x7153,
9491 +
        ],
9492 +
        [
9493 +
            0x0000, 0xf182, 0xfecb, 0x0f49, 0xe059, 0x11db, 0x1e92, 0xef10, 0xdd7d, 0x2cff, 0x23b6,
9494 +
            0xd234, 0x3d24, 0xcca6, 0xc3ef, 0x326d, 0xa735, 0x56b7, 0x59fe, 0xa87c, 0x476c, 0xb6ee,
9495 +
            0xb9a7, 0x4825, 0x7a48, 0x8bca, 0x8483, 0x7501, 0x9a11, 0x6b93, 0x64da, 0x9558, 0x53a5,
9496 +
            0xa227, 0xad6e, 0x5cec, 0xb3fc, 0x427e, 0x4d37, 0xbcb5, 0x8ed8, 0x7f5a, 0x7013, 0x8191,
9497 +
            0x6e81, 0x9f03, 0x904a, 0x61c8, 0xf490, 0x0512, 0x0a5b, 0xfbd9, 0x14c9, 0xe54b, 0xea02,
9498 +
            0x1b80, 0x29ed, 0xd86f, 0xd726, 0x26a4, 0xc9b4, 0x3836, 0x377f, 0xc6fd, 0xa74a, 0x56c8,
9499 +
            0x5981, 0xa803, 0x4713, 0xb691, 0xb9d8, 0x485a, 0x7a37, 0x8bb5, 0x84fc, 0x757e, 0x9a6e,
9500 +
            0x6bec, 0x64a5, 0x9527, 0x007f, 0xf1fd, 0xfeb4, 0x0f36, 0xe026, 0x11a4, 0x1eed, 0xef6f,
9501 +
            0xdd02, 0x2c80, 0x23c9, 0xd24b, 0x3d5b, 0xccd9, 0xc390, 0x3212, 0xf4ef, 0x056d, 0x0a24,
9502 +
            0xfba6, 0x14b6, 0xe534, 0xea7d, 0x1bff, 0x2992, 0xd810, 0xd759, 0x26db, 0xc9cb, 0x3849,
9503 +
            0x3700, 0xc682, 0x53da, 0xa258, 0xad11, 0x5c93, 0xb383, 0x4201, 0x4d48, 0xbcca, 0x8ea7,
9504 +
            0x7f25, 0x706c, 0x81ee, 0x6efe, 0x9f7c, 0x9035, 0x61b7, 0x535b, 0xa2d9, 0xad90, 0x5c12,
9505 +
            0xb302, 0x4280, 0x4dc9, 0xbc4b, 0x8e26, 0x7fa4, 0x70ed, 0x816f, 0x6e7f, 0x9ffd, 0x90b4,
9506 +
            0x6136, 0xf46e, 0x05ec, 0x0aa5, 0xfb27, 0x1437, 0xe5b5, 0xeafc, 0x1b7e, 0x2913, 0xd891,
9507 +
            0xd7d8, 0x265a, 0xc94a, 0x38c8, 0x3781, 0xc603, 0x00fe, 0xf17c, 0xfe35, 0x0fb7, 0xe0a7,
9508 +
            0x1125, 0x1e6c, 0xefee, 0xdd83, 0x2c01, 0x2348, 0xd2ca, 0x3dda, 0xcc58, 0xc311, 0x3293,
9509 +
            0xa7cb, 0x5649, 0x5900, 0xa882, 0x4792, 0xb610, 0xb959, 0x48db, 0x7ab6, 0x8b34, 0x847d,
9510 +
            0x75ff, 0x9aef, 0x6b6d, 0x6424, 0x95a6, 0xf411, 0x0593, 0x0ada, 0xfb58, 0x1448, 0xe5ca,
9511 +
            0xea83, 0x1b01, 0x296c, 0xd8ee, 0xd7a7, 0x2625, 0xc935, 0x38b7, 0x37fe, 0xc67c, 0x5324,
9512 +
            0xa2a6, 0xadef, 0x5c6d, 0xb37d, 0x42ff, 0x4db6, 0xbc34, 0x8e59, 0x7fdb, 0x7092, 0x8110,
9513 +
            0x6e00, 0x9f82, 0x90cb, 0x6149, 0xa7b4, 0x5636, 0x597f, 0xa8fd, 0x47ed, 0xb66f, 0xb926,
9514 +
            0x48a4, 0x7ac9, 0x8b4b, 0x8402, 0x7580, 0x9a90, 0x6b12, 0x645b, 0x95d9, 0x0081, 0xf103,
9515 +
            0xfe4a, 0x0fc8, 0xe0d8, 0x115a, 0x1e13, 0xef91, 0xddfc, 0x2c7e, 0x2337, 0xd2b5, 0x3da5,
9516 +
            0xcc27, 0xc36e, 0x32ec,
9517 +
        ],
9518 +
        [
9519 +
            0x0000, 0xa6b6, 0x50a3, 0xf615, 0xa146, 0x07f0, 0xf1e5, 0x5753, 0x5f43, 0xf9f5, 0x0fe0,
9520 +
            0xa956, 0xfe05, 0x58b3, 0xaea6, 0x0810, 0xbe86, 0x1830, 0xee25, 0x4893, 0x1fc0, 0xb976,
9521 +
            0x4f63, 0xe9d5, 0xe1c5, 0x4773, 0xb166, 0x17d0, 0x4083, 0xe635, 0x1020, 0xb696, 0x60c3,
9522 +
            0xc675, 0x3060, 0x96d6, 0xc185, 0x6733, 0x9126, 0x3790, 0x3f80, 0x9936, 0x6f23, 0xc995,
9523 +
            0x9ec6, 0x3870, 0xce65, 0x68d3, 0xde45, 0x78f3, 0x8ee6, 0x2850, 0x7f03, 0xd9b5, 0x2fa0,
9524 +
            0x8916, 0x8106, 0x27b0, 0xd1a5, 0x7713, 0x2040, 0x86f6, 0x70e3, 0xd655, 0xc186, 0x6730,
9525 +
            0x9125, 0x3793, 0x60c0, 0xc676, 0x3063, 0x96d5, 0x9ec5, 0x3873, 0xce66, 0x68d0, 0x3f83,
9526 +
            0x9935, 0x6f20, 0xc996, 0x7f00, 0xd9b6, 0x2fa3, 0x8915, 0xde46, 0x78f0, 0x8ee5, 0x2853,
9527 +
            0x2043, 0x86f5, 0x70e0, 0xd656, 0x8105, 0x27b3, 0xd1a6, 0x7710, 0xa145, 0x07f3, 0xf1e6,
9528 +
            0x5750, 0x0003, 0xa6b5, 0x50a0, 0xf616, 0xfe06, 0x58b0, 0xaea5, 0x0813, 0x5f40, 0xf9f6,
9529 +
            0x0fe3, 0xa955, 0x1fc3, 0xb975, 0x4f60, 0xe9d6, 0xbe85, 0x1833, 0xee26, 0x4890, 0x4080,
9530 +
            0xe636, 0x1023, 0xb695, 0xe1c6, 0x4770, 0xb165, 0x17d3, 0x9ec3, 0x3875, 0xce60, 0x68d6,
9531 +
            0x3f85, 0x9933, 0x6f26, 0xc990, 0xc180, 0x6736, 0x9123, 0x3795, 0x60c6, 0xc670, 0x3065,
9532 +
            0x96d3, 0x2045, 0x86f3, 0x70e6, 0xd650, 0x8103, 0x27b5, 0xd1a0, 0x7716, 0x7f06, 0xd9b0,
9533 +
            0x2fa5, 0x8913, 0xde40, 0x78f6, 0x8ee3, 0x2855, 0xfe00, 0x58b6, 0xaea3, 0x0815, 0x5f46,
9534 +
            0xf9f0, 0x0fe5, 0xa953, 0xa143, 0x07f5, 0xf1e0, 0x5756, 0x0005, 0xa6b3, 0x50a6, 0xf610,
9535 +
            0x4086, 0xe630, 0x1025, 0xb693, 0xe1c0, 0x4776, 0xb163, 0x17d5, 0x1fc5, 0xb973, 0x4f66,
9536 +
            0xe9d0, 0xbe83, 0x1835, 0xee20, 0x4896, 0x5f45, 0xf9f3, 0x0fe6, 0xa950, 0xfe03, 0x58b5,
9537 +
            0xaea0, 0x0816, 0x0006, 0xa6b0, 0x50a5, 0xf613, 0xa140, 0x07f6, 0xf1e3, 0x5755, 0xe1c3,
9538 +
            0x4775, 0xb160, 0x17d6, 0x4085, 0xe633, 0x1026, 0xb690, 0xbe80, 0x1836, 0xee23, 0x4895,
9539 +
            0x1fc6, 0xb970, 0x4f65, 0xe9d3, 0x3f86, 0x9930, 0x6f25, 0xc993, 0x9ec0, 0x3876, 0xce63,
9540 +
            0x68d5, 0x60c5, 0xc673, 0x3066, 0x96d0, 0xc183, 0x6735, 0x9120, 0x3796, 0x8100, 0x27b6,
9541 +
            0xd1a3, 0x7715, 0x2046, 0x86f0, 0x70e5, 0xd653, 0xde43, 0x78f5, 0x8ee0, 0x2856, 0x7f05,
9542 +
            0xd9b3, 0x2fa6, 0x8910,
9543 +
        ],
9544 +
        [
9545 +
            0x0000, 0x2049, 0x4092, 0x60db, 0x8124, 0xa16d, 0xc1b6, 0xe1ff, 0x1f87, 0x3fce, 0x5f15,
9546 +
            0x7f5c, 0x9ea3, 0xbeea, 0xde31, 0xfe78, 0x3f0e, 0x1f47, 0x7f9c, 0x5fd5, 0xbe2a, 0x9e63,
9547 +
            0xfeb8, 0xdef1, 0x2089, 0x00c0, 0x601b, 0x4052, 0xa1ad, 0x81e4, 0xe13f, 0xc176, 0x7e1c,
9548 +
            0x5e55, 0x3e8e, 0x1ec7, 0xff38, 0xdf71, 0xbfaa, 0x9fe3, 0x619b, 0x41d2, 0x2109, 0x0140,
9549 +
            0xe0bf, 0xc0f6, 0xa02d, 0x8064, 0x4112, 0x615b, 0x0180, 0x21c9, 0xc036, 0xe07f, 0x80a4,
9550 +
            0xa0ed, 0x5e95, 0x7edc, 0x1e07, 0x3e4e, 0xdfb1, 0xfff8, 0x9f23, 0xbf6a, 0xfc38, 0xdc71,
9551 +
            0xbcaa, 0x9ce3, 0x7d1c, 0x5d55, 0x3d8e, 0x1dc7, 0xe3bf, 0xc3f6, 0xa32d, 0x8364, 0x629b,
9552 +
            0x42d2, 0x2209, 0x0240, 0xc336, 0xe37f, 0x83a4, 0xa3ed, 0x4212, 0x625b, 0x0280, 0x22c9,
9553 +
            0xdcb1, 0xfcf8, 0x9c23, 0xbc6a, 0x5d95, 0x7ddc, 0x1d07, 0x3d4e, 0x8224, 0xa26d, 0xc2b6,
9554 +
            0xe2ff, 0x0300, 0x2349, 0x4392, 0x63db, 0x9da3, 0xbdea, 0xdd31, 0xfd78, 0x1c87, 0x3cce,
9555 +
            0x5c15, 0x7c5c, 0xbd2a, 0x9d63, 0xfdb8, 0xddf1, 0x3c0e, 0x1c47, 0x7c9c, 0x5cd5, 0xa2ad,
9556 +
            0x82e4, 0xe23f, 0xc276, 0x2389, 0x03c0, 0x631b, 0x4352, 0xe5bf, 0xc5f6, 0xa52d, 0x8564,
9557 +
            0x649b, 0x44d2, 0x2409, 0x0440, 0xfa38, 0xda71, 0xbaaa, 0x9ae3, 0x7b1c, 0x5b55, 0x3b8e,
9558 +
            0x1bc7, 0xdab1, 0xfaf8, 0x9a23, 0xba6a, 0x5b95, 0x7bdc, 0x1b07, 0x3b4e, 0xc536, 0xe57f,
9559 +
            0x85a4, 0xa5ed, 0x4412, 0x645b, 0x0480, 0x24c9, 0x9ba3, 0xbbea, 0xdb31, 0xfb78, 0x1a87,
9560 +
            0x3ace, 0x5a15, 0x7a5c, 0x8424, 0xa46d, 0xc4b6, 0xe4ff, 0x0500, 0x2549, 0x4592, 0x65db,
9561 +
            0xa4ad, 0x84e4, 0xe43f, 0xc476, 0x2589, 0x05c0, 0x651b, 0x4552, 0xbb2a, 0x9b63, 0xfbb8,
9562 +
            0xdbf1, 0x3a0e, 0x1a47, 0x7a9c, 0x5ad5, 0x1987, 0x39ce, 0x5915, 0x795c, 0x98a3, 0xb8ea,
9563 +
            0xd831, 0xf878, 0x0600, 0x2649, 0x4692, 0x66db, 0x8724, 0xa76d, 0xc7b6, 0xe7ff, 0x2689,
9564 +
            0x06c0, 0x661b, 0x4652, 0xa7ad, 0x87e4, 0xe73f, 0xc776, 0x390e, 0x1947, 0x799c, 0x59d5,
9565 +
            0xb82a, 0x9863, 0xf8b8, 0xd8f1, 0x679b, 0x47d2, 0x2709, 0x0740, 0xe6bf, 0xc6f6, 0xa62d,
9566 +
            0x8664, 0x781c, 0x5855, 0x388e, 0x18c7, 0xf938, 0xd971, 0xb9aa, 0x99e3, 0x5895, 0x78dc,
9567 +
            0x1807, 0x384e, 0xd9b1, 0xf9f8, 0x9923, 0xb96a, 0x4712, 0x675b, 0x0780, 0x27c9, 0xc636,
9568 +
            0xe67f, 0x86a4, 0xa6ed,
9569 +
        ],
9570 +
        [
9571 +
            0x0000, 0xd6b1, 0xb0ad, 0x661c, 0x7c95, 0xaa24, 0xcc38, 0x1a89, 0xf92a, 0x2f9b, 0x4987,
9572 +
            0x9f36, 0x85bf, 0x530e, 0x3512, 0xe3a3, 0xef9b, 0x392a, 0x5f36, 0x8987, 0x930e, 0x45bf,
9573 +
            0x23a3, 0xf512, 0x16b1, 0xc000, 0xa61c, 0x70ad, 0x6a24, 0xbc95, 0xda89, 0x0c38, 0xc2f9,
9574 +
            0x1448, 0x7254, 0xa4e5, 0xbe6c, 0x68dd, 0x0ec1, 0xd870, 0x3bd3, 0xed62, 0x8b7e, 0x5dcf,
9575 +
            0x4746, 0x91f7, 0xf7eb, 0x215a, 0x2d62, 0xfbd3, 0x9dcf, 0x4b7e, 0x51f7, 0x8746, 0xe15a,
9576 +
            0x37eb, 0xd448, 0x02f9, 0x64e5, 0xb254, 0xa8dd, 0x7e6c, 0x1870, 0xcec1, 0x983d, 0x4e8c,
9577 +
            0x2890, 0xfe21, 0xe4a8, 0x3219, 0x5405, 0x82b4, 0x6117, 0xb7a6, 0xd1ba, 0x070b, 0x1d82,
9578 +
            0xcb33, 0xad2f, 0x7b9e, 0x77a6, 0xa117, 0xc70b, 0x11ba, 0x0b33, 0xdd82, 0xbb9e, 0x6d2f,
9579 +
            0x8e8c, 0x583d, 0x3e21, 0xe890, 0xf219, 0x24a8, 0x42b4, 0x9405, 0x5ac4, 0x8c75, 0xea69,
9580 +
            0x3cd8, 0x2651, 0xf0e0, 0x96fc, 0x404d, 0xa3ee, 0x755f, 0x1343, 0xc5f2, 0xdf7b, 0x09ca,
9581 +
            0x6fd6, 0xb967, 0xb55f, 0x63ee, 0x05f2, 0xd343, 0xc9ca, 0x1f7b, 0x7967, 0xafd6, 0x4c75,
9582 +
            0x9ac4, 0xfcd8, 0x2a69, 0x30e0, 0xe651, 0x804d, 0x56fc, 0x2db5, 0xfb04, 0x9d18, 0x4ba9,
9583 +
            0x5120, 0x8791, 0xe18d, 0x373c, 0xd49f, 0x022e, 0x6432, 0xb283, 0xa80a, 0x7ebb, 0x18a7,
9584 +
            0xce16, 0xc22e, 0x149f, 0x7283, 0xa432, 0xbebb, 0x680a, 0x0e16, 0xd8a7, 0x3b04, 0xedb5,
9585 +
            0x8ba9, 0x5d18, 0x4791, 0x9120, 0xf73c, 0x218d, 0xef4c, 0x39fd, 0x5fe1, 0x8950, 0x93d9,
9586 +
            0x4568, 0x2374, 0xf5c5, 0x1666, 0xc0d7, 0xa6cb, 0x707a, 0x6af3, 0xbc42, 0xda5e, 0x0cef,
9587 +
            0x00d7, 0xd666, 0xb07a, 0x66cb, 0x7c42, 0xaaf3, 0xccef, 0x1a5e, 0xf9fd, 0x2f4c, 0x4950,
9588 +
            0x9fe1, 0x8568, 0x53d9, 0x35c5, 0xe374, 0xb588, 0x6339, 0x0525, 0xd394, 0xc91d, 0x1fac,
9589 +
            0x79b0, 0xaf01, 0x4ca2, 0x9a13, 0xfc0f, 0x2abe, 0x3037, 0xe686, 0x809a, 0x562b, 0x5a13,
9590 +
            0x8ca2, 0xeabe, 0x3c0f, 0x2686, 0xf037, 0x962b, 0x409a, 0xa339, 0x7588, 0x1394, 0xc525,
9591 +
            0xdfac, 0x091d, 0x6f01, 0xb9b0, 0x7771, 0xa1c0, 0xc7dc, 0x116d, 0x0be4, 0xdd55, 0xbb49,
9592 +
            0x6df8, 0x8e5b, 0x58ea, 0x3ef6, 0xe847, 0xf2ce, 0x247f, 0x4263, 0x94d2, 0x98ea, 0x4e5b,
9593 +
            0x2847, 0xfef6, 0xe47f, 0x32ce, 0x54d2, 0x8263, 0x61c0, 0xb771, 0xd16d, 0x07dc, 0x1d55,
9594 +
            0xcbe4, 0xadf8, 0x7b49,
9595 +
        ],
9596 +
        [
9597 +
            0x0000, 0x5b6a, 0xb6d4, 0xedbe, 0x7067, 0x2b0d, 0xc6b3, 0x9dd9, 0xe0ce, 0xbba4, 0x561a,
9598 +
            0x0d70, 0x90a9, 0xcbc3, 0x267d, 0x7d17, 0xdc53, 0x8739, 0x6a87, 0x31ed, 0xac34, 0xf75e,
9599 +
            0x1ae0, 0x418a, 0x3c9d, 0x67f7, 0x8a49, 0xd123, 0x4cfa, 0x1790, 0xfa2e, 0xa144, 0xa569,
9600 +
            0xfe03, 0x13bd, 0x48d7, 0xd50e, 0x8e64, 0x63da, 0x38b0, 0x45a7, 0x1ecd, 0xf373, 0xa819,
9601 +
            0x35c0, 0x6eaa, 0x8314, 0xd87e, 0x793a, 0x2250, 0xcfee, 0x9484, 0x095d, 0x5237, 0xbf89,
9602 +
            0xe4e3, 0x99f4, 0xc29e, 0x2f20, 0x744a, 0xe993, 0xb2f9, 0x5f47, 0x042d, 0x571d, 0x0c77,
9603 +
            0xe1c9, 0xbaa3, 0x277a, 0x7c10, 0x91ae, 0xcac4, 0xb7d3, 0xecb9, 0x0107, 0x5a6d, 0xc7b4,
9604 +
            0x9cde, 0x7160, 0x2a0a, 0x8b4e, 0xd024, 0x3d9a, 0x66f0, 0xfb29, 0xa043, 0x4dfd, 0x1697,
9605 +
            0x6b80, 0x30ea, 0xdd54, 0x863e, 0x1be7, 0x408d, 0xad33, 0xf659, 0xf274, 0xa91e, 0x44a0,
9606 +
            0x1fca, 0x8213, 0xd979, 0x34c7, 0x6fad, 0x12ba, 0x49d0, 0xa46e, 0xff04, 0x62dd, 0x39b7,
9607 +
            0xd409, 0x8f63, 0x2e27, 0x754d, 0x98f3, 0xc399, 0x5e40, 0x052a, 0xe894, 0xb3fe, 0xcee9,
9608 +
            0x9583, 0x783d, 0x2357, 0xbe8e, 0xe5e4, 0x085a, 0x5330, 0xae3a, 0xf550, 0x18ee, 0x4384,
9609 +
            0xde5d, 0x8537, 0x6889, 0x33e3, 0x4ef4, 0x159e, 0xf820, 0xa34a, 0x3e93, 0x65f9, 0x8847,
9610 +
            0xd32d, 0x7269, 0x2903, 0xc4bd, 0x9fd7, 0x020e, 0x5964, 0xb4da, 0xefb0, 0x92a7, 0xc9cd,
9611 +
            0x2473, 0x7f19, 0xe2c0, 0xb9aa, 0x5414, 0x0f7e, 0x0b53, 0x5039, 0xbd87, 0xe6ed, 0x7b34,
9612 +
            0x205e, 0xcde0, 0x968a, 0xeb9d, 0xb0f7, 0x5d49, 0x0623, 0x9bfa, 0xc090, 0x2d2e, 0x7644,
9613 +
            0xd700, 0x8c6a, 0x61d4, 0x3abe, 0xa767, 0xfc0d, 0x11b3, 0x4ad9, 0x37ce, 0x6ca4, 0x811a,
9614 +
            0xda70, 0x47a9, 0x1cc3, 0xf17d, 0xaa17, 0xf927, 0xa24d, 0x4ff3, 0x1499, 0x8940, 0xd22a,
9615 +
            0x3f94, 0x64fe, 0x19e9, 0x4283, 0xaf3d, 0xf457, 0x698e, 0x32e4, 0xdf5a, 0x8430, 0x2574,
9616 +
            0x7e1e, 0x93a0, 0xc8ca, 0x5513, 0x0e79, 0xe3c7, 0xb8ad, 0xc5ba, 0x9ed0, 0x736e, 0x2804,
9617 +
            0xb5dd, 0xeeb7, 0x0309, 0x5863, 0x5c4e, 0x0724, 0xea9a, 0xb1f0, 0x2c29, 0x7743, 0x9afd,
9618 +
            0xc197, 0xbc80, 0xe7ea, 0x0a54, 0x513e, 0xcce7, 0x978d, 0x7a33, 0x2159, 0x801d, 0xdb77,
9619 +
            0x36c9, 0x6da3, 0xf07a, 0xab10, 0x46ae, 0x1dc4, 0x60d3, 0x3bb9, 0xd607, 0x8d6d, 0x10b4,
9620 +
            0x4bde, 0xa660, 0xfd0a,
9621 +
        ],
9622 +
        [
9623 +
            0x0000, 0x41bb, 0x8376, 0xc2cd, 0x1b23, 0x5a98, 0x9855, 0xd9ee, 0x3646, 0x77fd, 0xb530,
9624 +
            0xf48b, 0x2d65, 0x6cde, 0xae13, 0xefa8, 0x6c8c, 0x2d37, 0xeffa, 0xae41, 0x77af, 0x3614,
9625 +
            0xf4d9, 0xb562, 0x5aca, 0x1b71, 0xd9bc, 0x9807, 0x41e9, 0x0052, 0xc29f, 0x8324, 0xd918,
9626 +
            0x98a3, 0x5a6e, 0x1bd5, 0xc23b, 0x8380, 0x414d, 0x00f6, 0xef5e, 0xaee5, 0x6c28, 0x2d93,
9627 +
            0xf47d, 0xb5c6, 0x770b, 0x36b0, 0xb594, 0xf42f, 0x36e2, 0x7759, 0xaeb7, 0xef0c, 0x2dc1,
9628 +
            0x6c7a, 0x83d2, 0xc269, 0x00a4, 0x411f, 0x98f1, 0xd94a, 0x1b87, 0x5a3c, 0xafff, 0xee44,
9629 +
            0x2c89, 0x6d32, 0xb4dc, 0xf567, 0x37aa, 0x7611, 0x99b9, 0xd802, 0x1acf, 0x5b74, 0x829a,
9630 +
            0xc321, 0x01ec, 0x4057, 0xc373, 0x82c8, 0x4005, 0x01be, 0xd850, 0x99eb, 0x5b26, 0x1a9d,
9631 +
            0xf535, 0xb48e, 0x7643, 0x37f8, 0xee16, 0xafad, 0x6d60, 0x2cdb, 0x76e7, 0x375c, 0xf591,
9632 +
            0xb42a, 0x6dc4, 0x2c7f, 0xeeb2, 0xaf09, 0x40a1, 0x011a, 0xc3d7, 0x826c, 0x5b82, 0x1a39,
9633 +
            0xd8f4, 0x994f, 0x1a6b, 0x5bd0, 0x991d, 0xd8a6, 0x0148, 0x40f3, 0x823e, 0xc385, 0x2c2d,
9634 +
            0x6d96, 0xaf5b, 0xeee0, 0x370e, 0x76b5, 0xb478, 0xf5c3, 0x4231, 0x038a, 0xc147, 0x80fc,
9635 +
            0x5912, 0x18a9, 0xda64, 0x9bdf, 0x7477, 0x35cc, 0xf701, 0xb6ba, 0x6f54, 0x2eef, 0xec22,
9636 +
            0xad99, 0x2ebd, 0x6f06, 0xadcb, 0xec70, 0x359e, 0x7425, 0xb6e8, 0xf753, 0x18fb, 0x5940,
9637 +
            0x9b8d, 0xda36, 0x03d8, 0x4263, 0x80ae, 0xc115, 0x9b29, 0xda92, 0x185f, 0x59e4, 0x800a,
9638 +
            0xc1b1, 0x037c, 0x42c7, 0xad6f, 0xecd4, 0x2e19, 0x6fa2, 0xb64c, 0xf7f7, 0x353a, 0x7481,
9639 +
            0xf7a5, 0xb61e, 0x74d3, 0x3568, 0xec86, 0xad3d, 0x6ff0, 0x2e4b, 0xc1e3, 0x8058, 0x4295,
9640 +
            0x032e, 0xdac0, 0x9b7b, 0x59b6, 0x180d, 0xedce, 0xac75, 0x6eb8, 0x2f03, 0xf6ed, 0xb756,
9641 +
            0x759b, 0x3420, 0xdb88, 0x9a33, 0x58fe, 0x1945, 0xc0ab, 0x8110, 0x43dd, 0x0266, 0x8142,
9642 +
            0xc0f9, 0x0234, 0x438f, 0x9a61, 0xdbda, 0x1917, 0x58ac, 0xb704, 0xf6bf, 0x3472, 0x75c9,
9643 +
            0xac27, 0xed9c, 0x2f51, 0x6eea, 0x34d6, 0x756d, 0xb7a0, 0xf61b, 0x2ff5, 0x6e4e, 0xac83,
9644 +
            0xed38, 0x0290, 0x432b, 0x81e6, 0xc05d, 0x19b3, 0x5808, 0x9ac5, 0xdb7e, 0x585a, 0x19e1,
9645 +
            0xdb2c, 0x9a97, 0x4379, 0x02c2, 0xc00f, 0x81b4, 0x6e1c, 0x2fa7, 0xed6a, 0xacd1, 0x753f,
9646 +
            0x3484, 0xf649, 0xb7f2,
9647 +
        ],
9648 +
    ];
9649 +
9650 +
    pub static CRC16_RIELLO_TABLE: [[u16; 256]; 16] = [
9651 +
        [
9652 +
            0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a,
9653 +
            0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c,
9654 +
            0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102,
9655 +
            0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1,
9656 +
            0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5,
9657 +
            0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d,
9658 +
            0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868,
9659 +
            0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
9660 +
            0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014,
9661 +
            0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3,
9662 +
            0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf,
9663 +
            0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693,
9664 +
            0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76,
9665 +
            0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948,
9666 +
            0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e,
9667 +
            0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
9668 +
            0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1,
9669 +
            0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1,
9670 +
            0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d,
9671 +
            0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e,
9672 +
            0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238,
9673 +
            0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606,
9674 +
            0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3,
9675 +
            0x2c6a, 0x1ef1, 0x0f78,
9676 +
        ],
9677 +
        [
9678 +
            0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70,
9679 +
            0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29,
9680 +
            0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333,
9681 +
            0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b,
9682 +
            0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272,
9683 +
            0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe,
9684 +
            0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6,
9685 +
            0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff,
9686 +
            0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5,
9687 +
            0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d,
9688 +
            0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04,
9689 +
            0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4,
9690 +
            0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc,
9691 +
            0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45,
9692 +
            0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f,
9693 +
            0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37,
9694 +
            0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e,
9695 +
            0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412,
9696 +
            0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b,
9697 +
            0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93,
9698 +
            0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49,
9699 +
            0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0,
9700 +
            0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8,
9701 +
            0xcc70, 0xe618, 0xffc0,
9702 +
        ],
9703 +
        [
9704 +
            0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a,
9705 +
            0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28,
9706 +
            0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b,
9707 +
            0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d,
9708 +
            0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077,
9709 +
            0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa,
9710 +
            0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5,
9711 +
            0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6,
9712 +
            0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5,
9713 +
            0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32,
9714 +
            0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a,
9715 +
            0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388,
9716 +
            0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7,
9717 +
            0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567,
9718 +
            0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6,
9719 +
            0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510,
9720 +
            0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938,
9721 +
            0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327,
9722 +
            0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f,
9723 +
            0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9,
9724 +
            0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78,
9725 +
            0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8,
9726 +
            0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997,
9727 +
            0x734b, 0x9c2f, 0xc6f3,
9728 +
        ],
9729 +
        [
9730 +
            0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae,
9731 +
            0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6,
9732 +
            0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53,
9733 +
            0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46,
9734 +
            0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768,
9735 +
            0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c,
9736 +
            0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183,
9737 +
            0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237,
9738 +
            0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092,
9739 +
            0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b,
9740 +
            0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d,
9741 +
            0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3,
9742 +
            0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c,
9743 +
            0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac,
9744 +
            0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1,
9745 +
            0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4,
9746 +
            0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32,
9747 +
            0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e,
9748 +
            0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878,
9749 +
            0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d,
9750 +
            0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10,
9751 +
            0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90,
9752 +
            0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f,
9753 +
            0xfca4, 0xd969, 0xc5d2,
9754 +
        ],
9755 +
        [
9756 +
            0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8,
9757 +
            0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214,
9758 +
            0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091,
9759 +
            0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d,
9760 +
            0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49,
9761 +
            0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66,
9762 +
            0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612,
9763 +
            0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be,
9764 +
            0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b,
9765 +
            0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7,
9766 +
            0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3,
9767 +
            0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799,
9768 +
            0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed,
9769 +
            0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71,
9770 +
            0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4,
9771 +
            0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038,
9772 +
            0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c,
9773 +
            0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23,
9774 +
            0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37,
9775 +
            0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db,
9776 +
            0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e,
9777 +
            0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2,
9778 +
            0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896,
9779 +
            0xe3d2, 0xfe1e, 0xf55a,
9780 +
        ],
9781 +
        [
9782 +
            0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e,
9783 +
            0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637,
9784 +
            0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560,
9785 +
            0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845,
9786 +
            0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a,
9787 +
            0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa,
9788 +
            0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325,
9789 +
            0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0,
9790 +
            0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7,
9791 +
            0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e,
9792 +
            0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459,
9793 +
            0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df,
9794 +
            0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00,
9795 +
            0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261,
9796 +
            0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e,
9797 +
            0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b,
9798 +
            0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c,
9799 +
            0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4,
9800 +
            0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3,
9801 +
            0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6,
9802 +
            0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9,
9803 +
            0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488,
9804 +
            0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157,
9805 +
            0xf57c, 0xf901, 0xfd2a,
9806 +
        ],
9807 +
        [
9808 +
            0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957,
9809 +
            0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a,
9810 +
            0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383,
9811 +
            0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501,
9812 +
            0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87,
9813 +
            0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3,
9814 +
            0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c,
9815 +
            0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7,
9816 +
            0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e,
9817 +
            0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca,
9818 +
            0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0,
9819 +
            0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73,
9820 +
            0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c,
9821 +
            0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed,
9822 +
            0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8,
9823 +
            0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a,
9824 +
            0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900,
9825 +
            0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8,
9826 +
            0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2,
9827 +
            0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250,
9828 +
            0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55,
9829 +
            0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884,
9830 +
            0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb,
9831 +
            0xb91e, 0x1170, 0x8ea5,
9832 +
        ],
9833 +
        [
9834 +
            0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3,
9835 +
            0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19,
9836 +
            0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0,
9837 +
            0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c,
9838 +
            0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039,
9839 +
            0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e,
9840 +
            0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93,
9841 +
            0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287,
9842 +
            0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e,
9843 +
            0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc,
9844 +
            0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5,
9845 +
            0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132,
9846 +
            0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef,
9847 +
            0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99,
9848 +
            0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc,
9849 +
            0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0,
9850 +
            0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9,
9851 +
            0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972,
9852 +
            0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b,
9853 +
            0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207,
9854 +
            0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552,
9855 +
            0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224,
9856 +
            0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9,
9857 +
            0xf946, 0x7396, 0xf229,
9858 +
        ],
9859 +
        [
9860 +
            0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430,
9861 +
            0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c,
9862 +
            0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739,
9863 +
            0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4,
9864 +
            0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2,
9865 +
            0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e,
9866 +
            0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c,
9867 +
            0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015,
9868 +
            0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0,
9869 +
            0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88,
9870 +
            0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104,
9871 +
            0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0,
9872 +
            0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02,
9873 +
            0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974,
9874 +
            0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b,
9875 +
            0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6,
9876 +
            0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a,
9877 +
            0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac,
9878 +
            0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20,
9879 +
            0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed,
9880 +
            0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192,
9881 +
            0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4,
9882 +
            0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36,
9883 +
            0x27cb, 0xf1cc, 0xbc31,
9884 +
        ],
9885 +
        [
9886 +
            0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167,
9887 +
            0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9,
9888 +
            0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5,
9889 +
            0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5,
9890 +
            0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635,
9891 +
            0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c,
9892 +
            0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce,
9893 +
            0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc,
9894 +
            0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580,
9895 +
            0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c,
9896 +
            0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5,
9897 +
            0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f,
9898 +
            0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d,
9899 +
            0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa,
9900 +
            0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf,
9901 +
            0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f,
9902 +
            0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76,
9903 +
            0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36,
9904 +
            0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df,
9905 +
            0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f,
9906 +
            0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea,
9907 +
            0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d,
9908 +
            0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df,
9909 +
            0x78f8, 0x0c91, 0x20b6,
9910 +
        ],
9911 +
        [
9912 +
            0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788,
9913 +
            0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81,
9914 +
            0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a,
9915 +
            0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093,
9916 +
            0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8,
9917 +
            0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894,
9918 +
            0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa,
9919 +
            0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6,
9920 +
            0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad,
9921 +
            0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1,
9922 +
            0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260,
9923 +
            0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8,
9924 +
            0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6,
9925 +
            0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65,
9926 +
            0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4,
9927 +
            0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd,
9928 +
            0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c,
9929 +
            0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da,
9930 +
            0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b,
9931 +
            0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42,
9932 +
            0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3,
9933 +
            0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940,
9934 +
            0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e,
9935 +
            0x7bbf, 0x850c, 0xd09d,
9936 +
        ],
9937 +
        [
9938 +
            0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857,
9939 +
            0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb,
9940 +
            0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0,
9941 +
            0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2,
9942 +
            0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5,
9943 +
            0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235,
9944 +
            0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa,
9945 +
            0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020,
9946 +
            0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b,
9947 +
            0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f,
9948 +
            0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4,
9949 +
            0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e,
9950 +
            0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1,
9951 +
            0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1,
9952 +
            0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006,
9953 +
            0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04,
9954 +
            0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff,
9955 +
            0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983,
9956 +
            0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78,
9957 +
            0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a,
9958 +
            0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd,
9959 +
            0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d,
9960 +
            0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852,
9961 +
            0x4d07, 0xcae9, 0x4fbc,
9962 +
        ],
9963 +
        [
9964 +
            0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632,
9965 +
            0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9,
9966 +
            0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0,
9967 +
            0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f,
9968 +
            0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e,
9969 +
            0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc,
9970 +
            0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d,
9971 +
            0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2,
9972 +
            0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab,
9973 +
            0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880,
9974 +
            0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149,
9975 +
            0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855,
9976 +
            0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624,
9977 +
            0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7,
9978 +
            0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6,
9979 +
            0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629,
9980 +
            0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0,
9981 +
            0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea,
9982 +
            0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23,
9983 +
            0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc,
9984 +
            0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd,
9985 +
            0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e,
9986 +
            0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f,
9987 +
            0x74f2, 0x7a05, 0x7fa8,
9988 +
        ],
9989 +
        [
9990 +
            0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7,
9991 +
            0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84,
9992 +
            0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf,
9993 +
            0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2,
9994 +
            0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05,
9995 +
            0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85,
9996 +
            0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5,
9997 +
            0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f,
9998 +
            0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04,
9999 +
            0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0,
10000 +
            0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64,
10001 +
            0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0,
10002 +
            0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0,
10003 +
            0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180,
10004 +
            0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8,
10005 +
            0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85,
10006 +
            0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701,
10007 +
            0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2,
10008 +
            0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366,
10009 +
            0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b,
10010 +
            0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63,
10011 +
            0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833,
10012 +
            0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03,
10013 +
            0xd4e9, 0x57d7, 0x293d,
10014 +
        ],
10015 +
        [
10016 +
            0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126,
10017 +
            0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277,
10018 +
            0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9,
10019 +
            0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5,
10020 +
            0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0,
10021 +
            0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398,
10022 +
            0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279,
10023 +
            0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991,
10024 +
            0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f,
10025 +
            0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a,
10026 +
            0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd,
10027 +
            0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b,
10028 +
            0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea,
10029 +
            0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9,
10030 +
            0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15,
10031 +
            0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319,
10032 +
            0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e,
10033 +
            0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454,
10034 +
            0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623,
10035 +
            0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f,
10036 +
            0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3,
10037 +
            0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0,
10038 +
            0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231,
10039 +
            0x7a1b, 0xa265, 0xea4f,
10040 +
        ],
10041 +
        [
10042 +
            0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5,
10043 +
            0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa,
10044 +
            0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01,
10045 +
            0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4,
10046 +
            0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da,
10047 +
            0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812,
10048 +
            0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4,
10049 +
            0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9,
10050 +
            0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932,
10051 +
            0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5,
10052 +
            0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f,
10053 +
            0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34,
10054 +
            0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882,
10055 +
            0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49,
10056 +
            0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776,
10057 +
            0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93,
10058 +
            0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69,
10059 +
            0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465,
10060 +
            0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f,
10061 +
            0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a,
10062 +
            0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545,
10063 +
            0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e,
10064 +
            0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038,
10065 +
            0xae28, 0x3409, 0xba19,
10066 +
        ],
10067 +
    ];
10068 +
10069 +
    pub static CRC16_SPI_FUJITSU_TABLE: [[u16; 256]; 16] = [
10070 +
        [
10071 +
            0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a,
10072 +
            0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294,
10073 +
            0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462,
10074 +
            0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509,
10075 +
            0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695,
10076 +
            0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,
10077 +
            0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948,
10078 +
            0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
10079 +
            0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4,
10080 +
            0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b,
10081 +
            0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f,
10082 +
            0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,
10083 +
            0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046,
10084 +
            0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290,
10085 +
            0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e,
10086 +
            0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
10087 +
            0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691,
10088 +
            0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,
10089 +
            0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d,
10090 +
            0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16,
10091 +
            0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8,
10092 +
            0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e,
10093 +
            0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93,
10094 +
            0x3eb2, 0x0ed1, 0x1ef0,
10095 +
        ],
10096 +
        [
10097 +
            0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb,
10098 +
            0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86,
10099 +
            0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6,
10100 +
            0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c,
10101 +
            0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33,
10102 +
            0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd,
10103 +
            0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1,
10104 +
            0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728,
10105 +
            0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48,
10106 +
            0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76,
10107 +
            0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0,
10108 +
            0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb,
10109 +
            0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897,
10110 +
            0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273,
10111 +
            0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba,
10112 +
            0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40,
10113 +
            0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6,
10114 +
            0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1,
10115 +
            0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527,
10116 +
            0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd,
10117 +
            0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14,
10118 +
            0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0,
10119 +
            0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac,
10120 +
            0x659d, 0x30ce, 0x03ff,
10121 +
        ],
10122 +
        [
10123 +
            0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1,
10124 +
            0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893,
10125 +
            0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6,
10126 +
            0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637,
10127 +
            0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705,
10128 +
            0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d,
10129 +
            0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc,
10130 +
            0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e,
10131 +
            0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b,
10132 +
            0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a,
10133 +
            0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9,
10134 +
            0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a,
10135 +
            0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b,
10136 +
            0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8,
10137 +
            0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c,
10138 +
            0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad,
10139 +
            0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e,
10140 +
            0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07,
10141 +
            0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594,
10142 +
            0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565,
10143 +
            0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291,
10144 +
            0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462,
10145 +
            0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633,
10146 +
            0xa103, 0xf853, 0xcf63,
10147 +
        ],
10148 +
        [
10149 +
            0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab,
10150 +
            0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2,
10151 +
            0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e,
10152 +
            0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951,
10153 +
            0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70,
10154 +
            0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828,
10155 +
            0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae,
10156 +
            0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416,
10157 +
            0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba,
10158 +
            0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054,
10159 +
            0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6,
10160 +
            0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4,
10161 +
            0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62,
10162 +
            0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8,
10163 +
            0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087,
10164 +
            0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98,
10165 +
            0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a,
10166 +
            0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1,
10167 +
            0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803,
10168 +
            0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c,
10169 +
            0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373,
10170 +
            0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9,
10171 +
            0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f,
10172 +
            0xa6cb, 0x3d17, 0x4ba3,
10173 +
        ],
10174 +
        [
10175 +
            0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae,
10176 +
            0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d,
10177 +
            0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4,
10178 +
            0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b,
10179 +
            0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b,
10180 +
            0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39,
10181 +
            0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43,
10182 +
            0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6,
10183 +
            0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f,
10184 +
            0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6,
10185 +
            0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab,
10186 +
            0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02,
10187 +
            0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78,
10188 +
            0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6,
10189 +
            0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362,
10190 +
            0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d,
10191 +
            0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890,
10192 +
            0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef,
10193 +
            0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2,
10194 +
            0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d,
10195 +
            0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689,
10196 +
            0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507,
10197 +
            0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d,
10198 +
            0x1e2c, 0xf0fe, 0x5aaf,
10199 +
        ],
10200 +
        [
10201 +
            0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602,
10202 +
            0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985,
10203 +
            0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508,
10204 +
            0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa,
10205 +
            0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d,
10206 +
            0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0,
10207 +
            0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3,
10208 +
            0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5,
10209 +
            0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458,
10210 +
            0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b,
10211 +
            0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de,
10212 +
            0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0,
10213 +
            0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483,
10214 +
            0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646,
10215 +
            0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789,
10216 +
            0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b,
10217 +
            0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae,
10218 +
            0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31,
10219 +
            0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4,
10220 +
            0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716,
10221 +
            0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9,
10222 +
            0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c,
10223 +
            0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f,
10224 +
            0xdfff, 0x111f, 0x54bf,
10225 +
        ],
10226 +
        [
10227 +
            0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e,
10228 +
            0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc,
10229 +
            0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6,
10230 +
            0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9,
10231 +
            0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8,
10232 +
            0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d,
10233 +
            0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87,
10234 +
            0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3,
10235 +
            0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9,
10236 +
            0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910,
10237 +
            0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc,
10238 +
            0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b,
10239 +
            0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971,
10240 +
            0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e,
10241 +
            0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9,
10242 +
            0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6,
10243 +
            0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a,
10244 +
            0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2,
10245 +
            0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e,
10246 +
            0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41,
10247 +
            0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6,
10248 +
            0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9,
10249 +
            0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3,
10250 +
            0xc592, 0x1d10, 0xa571,
10251 +
        ],
10252 +
        [
10253 +
            0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c,
10254 +
            0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a,
10255 +
            0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68,
10256 +
            0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7,
10257 +
            0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617,
10258 +
            0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103,
10259 +
            0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767,
10260 +
            0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c,
10261 +
            0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e,
10262 +
            0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc,
10263 +
            0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6,
10264 +
            0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4,
10265 +
            0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390,
10266 +
            0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c,
10267 +
            0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984,
10268 +
            0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b,
10269 +
            0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21,
10270 +
            0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef,
10271 +
            0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5,
10272 +
            0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a,
10273 +
            0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2,
10274 +
            0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e,
10275 +
            0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a,
10276 +
            0x1be9, 0xd39c, 0x944f,
10277 +
        ],
10278 +
        [
10279 +
            0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98,
10280 +
            0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432,
10281 +
            0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc,
10282 +
            0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347,
10283 +
            0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a,
10284 +
            0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa,
10285 +
            0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9,
10286 +
            0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c,
10287 +
            0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42,
10288 +
            0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616,
10289 +
            0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224,
10290 +
            0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6,
10291 +
            0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5,
10292 +
            0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90,
10293 +
            0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1,
10294 +
            0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a,
10295 +
            0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428,
10296 +
            0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7,
10297 +
            0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395,
10298 +
            0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e,
10299 +
            0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f,
10300 +
            0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a,
10301 +
            0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179,
10302 +
            0x4a5a, 0x671e, 0x8c3d,
10303 +
        ],
10304 +
        [
10305 +
            0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1,
10306 +
            0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6,
10307 +
            0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d,
10308 +
            0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289,
10309 +
            0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24,
10310 +
            0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f,
10311 +
            0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564,
10312 +
            0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76,
10313 +
            0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d,
10314 +
            0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c,
10315 +
            0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca,
10316 +
            0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb,
10317 +
            0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0,
10318 +
            0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac,
10319 +
            0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c,
10320 +
            0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88,
10321 +
            0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e,
10322 +
            0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e,
10323 +
            0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8,
10324 +
            0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c,
10325 +
            0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c,
10326 +
            0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0,
10327 +
            0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb,
10328 +
            0xb38e, 0x0241, 0x6d04,
10329 +
        ],
10330 +
        [
10331 +
            0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d,
10332 +
            0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33,
10333 +
            0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a,
10334 +
            0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e,
10335 +
            0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3,
10336 +
            0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c,
10337 +
            0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c,
10338 +
            0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855,
10339 +
            0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c,
10340 +
            0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f,
10341 +
            0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c,
10342 +
            0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150,
10343 +
            0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0,
10344 +
            0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650,
10345 +
            0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297,
10346 +
            0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3,
10347 +
            0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0,
10348 +
            0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471,
10349 +
            0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842,
10350 +
            0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236,
10351 +
            0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1,
10352 +
            0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71,
10353 +
            0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1,
10354 +
            0x19b8, 0x6142, 0xb90b,
10355 +
        ],
10356 +
        [
10357 +
            0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42,
10358 +
            0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1,
10359 +
            0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0,
10360 +
            0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097,
10361 +
            0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce,
10362 +
            0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35,
10363 +
            0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c,
10364 +
            0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b,
10365 +
            0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a,
10366 +
            0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9,
10367 +
            0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18,
10368 +
            0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e,
10369 +
            0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37,
10370 +
            0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c,
10371 +
            0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5,
10372 +
            0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2,
10373 +
            0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13,
10374 +
            0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940,
10375 +
            0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1,
10376 +
            0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86,
10377 +
            0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f,
10378 +
            0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64,
10379 +
            0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d,
10380 +
            0x3b18, 0x3e87, 0x3df2,
10381 +
        ],
10382 +
        [
10383 +
            0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c,
10384 +
            0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a,
10385 +
            0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68,
10386 +
            0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997,
10387 +
            0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7,
10388 +
            0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3,
10389 +
            0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427,
10390 +
            0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c,
10391 +
            0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e,
10392 +
            0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c,
10393 +
            0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56,
10394 +
            0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05,
10395 +
            0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191,
10396 +
            0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d,
10397 +
            0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65,
10398 +
            0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a,
10399 +
            0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0,
10400 +
            0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe,
10401 +
            0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4,
10402 +
            0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b,
10403 +
            0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73,
10404 +
            0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf,
10405 +
            0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b,
10406 +
            0x9f38, 0x509d, 0x15fe,
10407 +
        ],
10408 +
        [
10409 +
            0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9,
10410 +
            0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033,
10411 +
            0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf,
10412 +
            0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07,
10413 +
            0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f,
10414 +
            0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de,
10415 +
            0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71,
10416 +
            0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e,
10417 +
            0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2,
10418 +
            0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf,
10419 +
            0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec,
10420 +
            0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd,
10421 +
            0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772,
10422 +
            0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183,
10423 +
            0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714,
10424 +
            0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc,
10425 +
            0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef,
10426 +
            0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05,
10427 +
            0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36,
10428 +
            0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe,
10429 +
            0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69,
10430 +
            0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98,
10431 +
            0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137,
10432 +
            0x4a56, 0xc7f5, 0xbc94,
10433 +
        ],
10434 +
        [
10435 +
            0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c,
10436 +
            0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4,
10437 +
            0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14,
10438 +
            0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974,
10439 +
            0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5,
10440 +
            0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5,
10441 +
            0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe,
10442 +
            0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14,
10443 +
            0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4,
10444 +
            0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516,
10445 +
            0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2,
10446 +
            0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737,
10447 +
            0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c,
10448 +
            0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321,
10449 +
            0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4,
10450 +
            0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4,
10451 +
            0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10,
10452 +
            0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55,
10453 +
            0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091,
10454 +
            0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1,
10455 +
            0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564,
10456 +
            0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379,
10457 +
            0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172,
10458 +
            0xbf8e, 0x5cab, 0xf257,
10459 +
        ],
10460 +
        [
10461 +
            0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec,
10462 +
            0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc,
10463 +
            0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614,
10464 +
            0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc,
10465 +
            0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5,
10466 +
            0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c,
10467 +
            0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f,
10468 +
            0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd,
10469 +
            0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55,
10470 +
            0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f,
10471 +
            0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3,
10472 +
            0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c,
10473 +
            0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f,
10474 +
            0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da,
10475 +
            0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7,
10476 +
            0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f,
10477 +
            0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83,
10478 +
            0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf,
10479 +
            0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753,
10480 +
            0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b,
10481 +
            0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6,
10482 +
            0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963,
10483 +
            0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010,
10484 +
            0xd834, 0x3079, 0x985d,
10485 +
        ],
10486 +
    ];
10487 +
10488 +
    pub static CRC16_T10_DIF_TABLE: [[u16; 256]; 16] = [
10489 +
        [
10490 +
            0x0000, 0x8bb7, 0x9cd9, 0x176e, 0xb205, 0x39b2, 0x2edc, 0xa56b, 0xefbd, 0x640a, 0x7364,
10491 +
            0xf8d3, 0x5db8, 0xd60f, 0xc161, 0x4ad6, 0x54cd, 0xdf7a, 0xc814, 0x43a3, 0xe6c8, 0x6d7f,
10492 +
            0x7a11, 0xf1a6, 0xbb70, 0x30c7, 0x27a9, 0xac1e, 0x0975, 0x82c2, 0x95ac, 0x1e1b, 0xa99a,
10493 +
            0x222d, 0x3543, 0xbef4, 0x1b9f, 0x9028, 0x8746, 0x0cf1, 0x4627, 0xcd90, 0xdafe, 0x5149,
10494 +
            0xf422, 0x7f95, 0x68fb, 0xe34c, 0xfd57, 0x76e0, 0x618e, 0xea39, 0x4f52, 0xc4e5, 0xd38b,
10495 +
            0x583c, 0x12ea, 0x995d, 0x8e33, 0x0584, 0xa0ef, 0x2b58, 0x3c36, 0xb781, 0xd883, 0x5334,
10496 +
            0x445a, 0xcfed, 0x6a86, 0xe131, 0xf65f, 0x7de8, 0x373e, 0xbc89, 0xabe7, 0x2050, 0x853b,
10497 +
            0x0e8c, 0x19e2, 0x9255, 0x8c4e, 0x07f9, 0x1097, 0x9b20, 0x3e4b, 0xb5fc, 0xa292, 0x2925,
10498 +
            0x63f3, 0xe844, 0xff2a, 0x749d, 0xd1f6, 0x5a41, 0x4d2f, 0xc698, 0x7119, 0xfaae, 0xedc0,
10499 +
            0x6677, 0xc31c, 0x48ab, 0x5fc5, 0xd472, 0x9ea4, 0x1513, 0x027d, 0x89ca, 0x2ca1, 0xa716,
10500 +
            0xb078, 0x3bcf, 0x25d4, 0xae63, 0xb90d, 0x32ba, 0x97d1, 0x1c66, 0x0b08, 0x80bf, 0xca69,
10501 +
            0x41de, 0x56b0, 0xdd07, 0x786c, 0xf3db, 0xe4b5, 0x6f02, 0x3ab1, 0xb106, 0xa668, 0x2ddf,
10502 +
            0x88b4, 0x0303, 0x146d, 0x9fda, 0xd50c, 0x5ebb, 0x49d5, 0xc262, 0x6709, 0xecbe, 0xfbd0,
10503 +
            0x7067, 0x6e7c, 0xe5cb, 0xf2a5, 0x7912, 0xdc79, 0x57ce, 0x40a0, 0xcb17, 0x81c1, 0x0a76,
10504 +
            0x1d18, 0x96af, 0x33c4, 0xb873, 0xaf1d, 0x24aa, 0x932b, 0x189c, 0x0ff2, 0x8445, 0x212e,
10505 +
            0xaa99, 0xbdf7, 0x3640, 0x7c96, 0xf721, 0xe04f, 0x6bf8, 0xce93, 0x4524, 0x524a, 0xd9fd,
10506 +
            0xc7e6, 0x4c51, 0x5b3f, 0xd088, 0x75e3, 0xfe54, 0xe93a, 0x628d, 0x285b, 0xa3ec, 0xb482,
10507 +
            0x3f35, 0x9a5e, 0x11e9, 0x0687, 0x8d30, 0xe232, 0x6985, 0x7eeb, 0xf55c, 0x5037, 0xdb80,
10508 +
            0xccee, 0x4759, 0x0d8f, 0x8638, 0x9156, 0x1ae1, 0xbf8a, 0x343d, 0x2353, 0xa8e4, 0xb6ff,
10509 +
            0x3d48, 0x2a26, 0xa191, 0x04fa, 0x8f4d, 0x9823, 0x1394, 0x5942, 0xd2f5, 0xc59b, 0x4e2c,
10510 +
            0xeb47, 0x60f0, 0x779e, 0xfc29, 0x4ba8, 0xc01f, 0xd771, 0x5cc6, 0xf9ad, 0x721a, 0x6574,
10511 +
            0xeec3, 0xa415, 0x2fa2, 0x38cc, 0xb37b, 0x1610, 0x9da7, 0x8ac9, 0x017e, 0x1f65, 0x94d2,
10512 +
            0x83bc, 0x080b, 0xad60, 0x26d7, 0x31b9, 0xba0e, 0xf0d8, 0x7b6f, 0x6c01, 0xe7b6, 0x42dd,
10513 +
            0xc96a, 0xde04, 0x55b3,
10514 +
        ],
10515 +
        [
10516 +
            0x0000, 0x7562, 0xeac4, 0x9fa6, 0x5e3f, 0x2b5d, 0xb4fb, 0xc199, 0xbc7e, 0xc91c, 0x56ba,
10517 +
            0x23d8, 0xe241, 0x9723, 0x0885, 0x7de7, 0xf34b, 0x8629, 0x198f, 0x6ced, 0xad74, 0xd816,
10518 +
            0x47b0, 0x32d2, 0x4f35, 0x3a57, 0xa5f1, 0xd093, 0x110a, 0x6468, 0xfbce, 0x8eac, 0x6d21,
10519 +
            0x1843, 0x87e5, 0xf287, 0x331e, 0x467c, 0xd9da, 0xacb8, 0xd15f, 0xa43d, 0x3b9b, 0x4ef9,
10520 +
            0x8f60, 0xfa02, 0x65a4, 0x10c6, 0x9e6a, 0xeb08, 0x74ae, 0x01cc, 0xc055, 0xb537, 0x2a91,
10521 +
            0x5ff3, 0x2214, 0x5776, 0xc8d0, 0xbdb2, 0x7c2b, 0x0949, 0x96ef, 0xe38d, 0xda42, 0xaf20,
10522 +
            0x3086, 0x45e4, 0x847d, 0xf11f, 0x6eb9, 0x1bdb, 0x663c, 0x135e, 0x8cf8, 0xf99a, 0x3803,
10523 +
            0x4d61, 0xd2c7, 0xa7a5, 0x2909, 0x5c6b, 0xc3cd, 0xb6af, 0x7736, 0x0254, 0x9df2, 0xe890,
10524 +
            0x9577, 0xe015, 0x7fb3, 0x0ad1, 0xcb48, 0xbe2a, 0x218c, 0x54ee, 0xb763, 0xc201, 0x5da7,
10525 +
            0x28c5, 0xe95c, 0x9c3e, 0x0398, 0x76fa, 0x0b1d, 0x7e7f, 0xe1d9, 0x94bb, 0x5522, 0x2040,
10526 +
            0xbfe6, 0xca84, 0x4428, 0x314a, 0xaeec, 0xdb8e, 0x1a17, 0x6f75, 0xf0d3, 0x85b1, 0xf856,
10527 +
            0x8d34, 0x1292, 0x67f0, 0xa669, 0xd30b, 0x4cad, 0x39cf, 0x3f33, 0x4a51, 0xd5f7, 0xa095,
10528 +
            0x610c, 0x146e, 0x8bc8, 0xfeaa, 0x834d, 0xf62f, 0x6989, 0x1ceb, 0xdd72, 0xa810, 0x37b6,
10529 +
            0x42d4, 0xcc78, 0xb91a, 0x26bc, 0x53de, 0x9247, 0xe725, 0x7883, 0x0de1, 0x7006, 0x0564,
10530 +
            0x9ac2, 0xefa0, 0x2e39, 0x5b5b, 0xc4fd, 0xb19f, 0x5212, 0x2770, 0xb8d6, 0xcdb4, 0x0c2d,
10531 +
            0x794f, 0xe6e9, 0x938b, 0xee6c, 0x9b0e, 0x04a8, 0x71ca, 0xb053, 0xc531, 0x5a97, 0x2ff5,
10532 +
            0xa159, 0xd43b, 0x4b9d, 0x3eff, 0xff66, 0x8a04, 0x15a2, 0x60c0, 0x1d27, 0x6845, 0xf7e3,
10533 +
            0x8281, 0x4318, 0x367a, 0xa9dc, 0xdcbe, 0xe571, 0x9013, 0x0fb5, 0x7ad7, 0xbb4e, 0xce2c,
10534 +
            0x518a, 0x24e8, 0x590f, 0x2c6d, 0xb3cb, 0xc6a9, 0x0730, 0x7252, 0xedf4, 0x9896, 0x163a,
10535 +
            0x6358, 0xfcfe, 0x899c, 0x4805, 0x3d67, 0xa2c1, 0xd7a3, 0xaa44, 0xdf26, 0x4080, 0x35e2,
10536 +
            0xf47b, 0x8119, 0x1ebf, 0x6bdd, 0x8850, 0xfd32, 0x6294, 0x17f6, 0xd66f, 0xa30d, 0x3cab,
10537 +
            0x49c9, 0x342e, 0x414c, 0xdeea, 0xab88, 0x6a11, 0x1f73, 0x80d5, 0xf5b7, 0x7b1b, 0x0e79,
10538 +
            0x91df, 0xe4bd, 0x2524, 0x5046, 0xcfe0, 0xba82, 0xc765, 0xb207, 0x2da1, 0x58c3, 0x995a,
10539 +
            0xec38, 0x739e, 0x06fc,
10540 +
        ],
10541 +
        [
10542 +
            0x0000, 0x7e66, 0xfccc, 0x82aa, 0x722f, 0x0c49, 0x8ee3, 0xf085, 0xe45e, 0x9a38, 0x1892,
10543 +
            0x66f4, 0x9671, 0xe817, 0x6abd, 0x14db, 0x430b, 0x3d6d, 0xbfc7, 0xc1a1, 0x3124, 0x4f42,
10544 +
            0xcde8, 0xb38e, 0xa755, 0xd933, 0x5b99, 0x25ff, 0xd57a, 0xab1c, 0x29b6, 0x57d0, 0x8616,
10545 +
            0xf870, 0x7ada, 0x04bc, 0xf439, 0x8a5f, 0x08f5, 0x7693, 0x6248, 0x1c2e, 0x9e84, 0xe0e2,
10546 +
            0x1067, 0x6e01, 0xecab, 0x92cd, 0xc51d, 0xbb7b, 0x39d1, 0x47b7, 0xb732, 0xc954, 0x4bfe,
10547 +
            0x3598, 0x2143, 0x5f25, 0xdd8f, 0xa3e9, 0x536c, 0x2d0a, 0xafa0, 0xd1c6, 0x879b, 0xf9fd,
10548 +
            0x7b57, 0x0531, 0xf5b4, 0x8bd2, 0x0978, 0x771e, 0x63c5, 0x1da3, 0x9f09, 0xe16f, 0x11ea,
10549 +
            0x6f8c, 0xed26, 0x9340, 0xc490, 0xbaf6, 0x385c, 0x463a, 0xb6bf, 0xc8d9, 0x4a73, 0x3415,
10550 +
            0x20ce, 0x5ea8, 0xdc02, 0xa264, 0x52e1, 0x2c87, 0xae2d, 0xd04b, 0x018d, 0x7feb, 0xfd41,
10551 +
            0x8327, 0x73a2, 0x0dc4, 0x8f6e, 0xf108, 0xe5d3, 0x9bb5, 0x191f, 0x6779, 0x97fc, 0xe99a,
10552 +
            0x6b30, 0x1556, 0x4286, 0x3ce0, 0xbe4a, 0xc02c, 0x30a9, 0x4ecf, 0xcc65, 0xb203, 0xa6d8,
10553 +
            0xd8be, 0x5a14, 0x2472, 0xd4f7, 0xaa91, 0x283b, 0x565d, 0x8481, 0xfae7, 0x784d, 0x062b,
10554 +
            0xf6ae, 0x88c8, 0x0a62, 0x7404, 0x60df, 0x1eb9, 0x9c13, 0xe275, 0x12f0, 0x6c96, 0xee3c,
10555 +
            0x905a, 0xc78a, 0xb9ec, 0x3b46, 0x4520, 0xb5a5, 0xcbc3, 0x4969, 0x370f, 0x23d4, 0x5db2,
10556 +
            0xdf18, 0xa17e, 0x51fb, 0x2f9d, 0xad37, 0xd351, 0x0297, 0x7cf1, 0xfe5b, 0x803d, 0x70b8,
10557 +
            0x0ede, 0x8c74, 0xf212, 0xe6c9, 0x98af, 0x1a05, 0x6463, 0x94e6, 0xea80, 0x682a, 0x164c,
10558 +
            0x419c, 0x3ffa, 0xbd50, 0xc336, 0x33b3, 0x4dd5, 0xcf7f, 0xb119, 0xa5c2, 0xdba4, 0x590e,
10559 +
            0x2768, 0xd7ed, 0xa98b, 0x2b21, 0x5547, 0x031a, 0x7d7c, 0xffd6, 0x81b0, 0x7135, 0x0f53,
10560 +
            0x8df9, 0xf39f, 0xe744, 0x9922, 0x1b88, 0x65ee, 0x956b, 0xeb0d, 0x69a7, 0x17c1, 0x4011,
10561 +
            0x3e77, 0xbcdd, 0xc2bb, 0x323e, 0x4c58, 0xcef2, 0xb094, 0xa44f, 0xda29, 0x5883, 0x26e5,
10562 +
            0xd660, 0xa806, 0x2aac, 0x54ca, 0x850c, 0xfb6a, 0x79c0, 0x07a6, 0xf723, 0x8945, 0x0bef,
10563 +
            0x7589, 0x6152, 0x1f34, 0x9d9e, 0xe3f8, 0x137d, 0x6d1b, 0xefb1, 0x91d7, 0xc607, 0xb861,
10564 +
            0x3acb, 0x44ad, 0xb428, 0xca4e, 0x48e4, 0x3682, 0x2259, 0x5c3f, 0xde95, 0xa0f3, 0x5076,
10565 +
            0x2e10, 0xacba, 0xd2dc,
10566 +
        ],
10567 +
        [
10568 +
            0x0000, 0x82b5, 0x8edd, 0x0c68, 0x960d, 0x14b8, 0x18d0, 0x9a65, 0xa7ad, 0x2518, 0x2970,
10569 +
            0xabc5, 0x31a0, 0xb315, 0xbf7d, 0x3dc8, 0xc4ed, 0x4658, 0x4a30, 0xc885, 0x52e0, 0xd055,
10570 +
            0xdc3d, 0x5e88, 0x6340, 0xe1f5, 0xed9d, 0x6f28, 0xf54d, 0x77f8, 0x7b90, 0xf925, 0x026d,
10571 +
            0x80d8, 0x8cb0, 0x0e05, 0x9460, 0x16d5, 0x1abd, 0x9808, 0xa5c0, 0x2775, 0x2b1d, 0xa9a8,
10572 +
            0x33cd, 0xb178, 0xbd10, 0x3fa5, 0xc680, 0x4435, 0x485d, 0xcae8, 0x508d, 0xd238, 0xde50,
10573 +
            0x5ce5, 0x612d, 0xe398, 0xeff0, 0x6d45, 0xf720, 0x7595, 0x79fd, 0xfb48, 0x04da, 0x866f,
10574 +
            0x8a07, 0x08b2, 0x92d7, 0x1062, 0x1c0a, 0x9ebf, 0xa377, 0x21c2, 0x2daa, 0xaf1f, 0x357a,
10575 +
            0xb7cf, 0xbba7, 0x3912, 0xc037, 0x4282, 0x4eea, 0xcc5f, 0x563a, 0xd48f, 0xd8e7, 0x5a52,
10576 +
            0x679a, 0xe52f, 0xe947, 0x6bf2, 0xf197, 0x7322, 0x7f4a, 0xfdff, 0x06b7, 0x8402, 0x886a,
10577 +
            0x0adf, 0x90ba, 0x120f, 0x1e67, 0x9cd2, 0xa11a, 0x23af, 0x2fc7, 0xad72, 0x3717, 0xb5a2,
10578 +
            0xb9ca, 0x3b7f, 0xc25a, 0x40ef, 0x4c87, 0xce32, 0x5457, 0xd6e2, 0xda8a, 0x583f, 0x65f7,
10579 +
            0xe742, 0xeb2a, 0x699f, 0xf3fa, 0x714f, 0x7d27, 0xff92, 0x09b4, 0x8b01, 0x8769, 0x05dc,
10580 +
            0x9fb9, 0x1d0c, 0x1164, 0x93d1, 0xae19, 0x2cac, 0x20c4, 0xa271, 0x3814, 0xbaa1, 0xb6c9,
10581 +
            0x347c, 0xcd59, 0x4fec, 0x4384, 0xc131, 0x5b54, 0xd9e1, 0xd589, 0x573c, 0x6af4, 0xe841,
10582 +
            0xe429, 0x669c, 0xfcf9, 0x7e4c, 0x7224, 0xf091, 0x0bd9, 0x896c, 0x8504, 0x07b1, 0x9dd4,
10583 +
            0x1f61, 0x1309, 0x91bc, 0xac74, 0x2ec1, 0x22a9, 0xa01c, 0x3a79, 0xb8cc, 0xb4a4, 0x3611,
10584 +
            0xcf34, 0x4d81, 0x41e9, 0xc35c, 0x5939, 0xdb8c, 0xd7e4, 0x5551, 0x6899, 0xea2c, 0xe644,
10585 +
            0x64f1, 0xfe94, 0x7c21, 0x7049, 0xf2fc, 0x0d6e, 0x8fdb, 0x83b3, 0x0106, 0x9b63, 0x19d6,
10586 +
            0x15be, 0x970b, 0xaac3, 0x2876, 0x241e, 0xa6ab, 0x3cce, 0xbe7b, 0xb213, 0x30a6, 0xc983,
10587 +
            0x4b36, 0x475e, 0xc5eb, 0x5f8e, 0xdd3b, 0xd153, 0x53e6, 0x6e2e, 0xec9b, 0xe0f3, 0x6246,
10588 +
            0xf823, 0x7a96, 0x76fe, 0xf44b, 0x0f03, 0x8db6, 0x81de, 0x036b, 0x990e, 0x1bbb, 0x17d3,
10589 +
            0x9566, 0xa8ae, 0x2a1b, 0x2673, 0xa4c6, 0x3ea3, 0xbc16, 0xb07e, 0x32cb, 0xcbee, 0x495b,
10590 +
            0x4533, 0xc786, 0x5de3, 0xdf56, 0xd33e, 0x518b, 0x6c43, 0xeef6, 0xe29e, 0x602b, 0xfa4e,
10591 +
            0x78fb, 0x7493, 0xf626,
10592 +
        ],
10593 +
        [
10594 +
            0x0000, 0x1368, 0x26d0, 0x35b8, 0x4da0, 0x5ec8, 0x6b70, 0x7818, 0x9b40, 0x8828, 0xbd90,
10595 +
            0xaef8, 0xd6e0, 0xc588, 0xf030, 0xe358, 0xbd37, 0xae5f, 0x9be7, 0x888f, 0xf097, 0xe3ff,
10596 +
            0xd647, 0xc52f, 0x2677, 0x351f, 0x00a7, 0x13cf, 0x6bd7, 0x78bf, 0x4d07, 0x5e6f, 0xf1d9,
10597 +
            0xe2b1, 0xd709, 0xc461, 0xbc79, 0xaf11, 0x9aa9, 0x89c1, 0x6a99, 0x79f1, 0x4c49, 0x5f21,
10598 +
            0x2739, 0x3451, 0x01e9, 0x1281, 0x4cee, 0x5f86, 0x6a3e, 0x7956, 0x014e, 0x1226, 0x279e,
10599 +
            0x34f6, 0xd7ae, 0xc4c6, 0xf17e, 0xe216, 0x9a0e, 0x8966, 0xbcde, 0xafb6, 0x6805, 0x7b6d,
10600 +
            0x4ed5, 0x5dbd, 0x25a5, 0x36cd, 0x0375, 0x101d, 0xf345, 0xe02d, 0xd595, 0xc6fd, 0xbee5,
10601 +
            0xad8d, 0x9835, 0x8b5d, 0xd532, 0xc65a, 0xf3e2, 0xe08a, 0x9892, 0x8bfa, 0xbe42, 0xad2a,
10602 +
            0x4e72, 0x5d1a, 0x68a2, 0x7bca, 0x03d2, 0x10ba, 0x2502, 0x366a, 0x99dc, 0x8ab4, 0xbf0c,
10603 +
            0xac64, 0xd47c, 0xc714, 0xf2ac, 0xe1c4, 0x029c, 0x11f4, 0x244c, 0x3724, 0x4f3c, 0x5c54,
10604 +
            0x69ec, 0x7a84, 0x24eb, 0x3783, 0x023b, 0x1153, 0x694b, 0x7a23, 0x4f9b, 0x5cf3, 0xbfab,
10605 +
            0xacc3, 0x997b, 0x8a13, 0xf20b, 0xe163, 0xd4db, 0xc7b3, 0xd00a, 0xc362, 0xf6da, 0xe5b2,
10606 +
            0x9daa, 0x8ec2, 0xbb7a, 0xa812, 0x4b4a, 0x5822, 0x6d9a, 0x7ef2, 0x06ea, 0x1582, 0x203a,
10607 +
            0x3352, 0x6d3d, 0x7e55, 0x4bed, 0x5885, 0x209d, 0x33f5, 0x064d, 0x1525, 0xf67d, 0xe515,
10608 +
            0xd0ad, 0xc3c5, 0xbbdd, 0xa8b5, 0x9d0d, 0x8e65, 0x21d3, 0x32bb, 0x0703, 0x146b, 0x6c73,
10609 +
            0x7f1b, 0x4aa3, 0x59cb, 0xba93, 0xa9fb, 0x9c43, 0x8f2b, 0xf733, 0xe45b, 0xd1e3, 0xc28b,
10610 +
            0x9ce4, 0x8f8c, 0xba34, 0xa95c, 0xd144, 0xc22c, 0xf794, 0xe4fc, 0x07a4, 0x14cc, 0x2174,
10611 +
            0x321c, 0x4a04, 0x596c, 0x6cd4, 0x7fbc, 0xb80f, 0xab67, 0x9edf, 0x8db7, 0xf5af, 0xe6c7,
10612 +
            0xd37f, 0xc017, 0x234f, 0x3027, 0x059f, 0x16f7, 0x6eef, 0x7d87, 0x483f, 0x5b57, 0x0538,
10613 +
            0x1650, 0x23e8, 0x3080, 0x4898, 0x5bf0, 0x6e48, 0x7d20, 0x9e78, 0x8d10, 0xb8a8, 0xabc0,
10614 +
            0xd3d8, 0xc0b0, 0xf508, 0xe660, 0x49d6, 0x5abe, 0x6f06, 0x7c6e, 0x0476, 0x171e, 0x22a6,
10615 +
            0x31ce, 0xd296, 0xc1fe, 0xf446, 0xe72e, 0x9f36, 0x8c5e, 0xb9e6, 0xaa8e, 0xf4e1, 0xe789,
10616 +
            0xd231, 0xc159, 0xb941, 0xaa29, 0x9f91, 0x8cf9, 0x6fa1, 0x7cc9, 0x4971, 0x5a19, 0x2201,
10617 +
            0x3169, 0x04d1, 0x17b9,
10618 +
        ],
10619 +
        [
10620 +
            0x0000, 0x2ba3, 0x5746, 0x7ce5, 0xae8c, 0x852f, 0xf9ca, 0xd269, 0xd6af, 0xfd0c, 0x81e9,
10621 +
            0xaa4a, 0x7823, 0x5380, 0x2f65, 0x04c6, 0x26e9, 0x0d4a, 0x71af, 0x5a0c, 0x8865, 0xa3c6,
10622 +
            0xdf23, 0xf480, 0xf046, 0xdbe5, 0xa700, 0x8ca3, 0x5eca, 0x7569, 0x098c, 0x222f, 0x4dd2,
10623 +
            0x6671, 0x1a94, 0x3137, 0xe35e, 0xc8fd, 0xb418, 0x9fbb, 0x9b7d, 0xb0de, 0xcc3b, 0xe798,
10624 +
            0x35f1, 0x1e52, 0x62b7, 0x4914, 0x6b3b, 0x4098, 0x3c7d, 0x17de, 0xc5b7, 0xee14, 0x92f1,
10625 +
            0xb952, 0xbd94, 0x9637, 0xead2, 0xc171, 0x1318, 0x38bb, 0x445e, 0x6ffd, 0x9ba4, 0xb007,
10626 +
            0xcce2, 0xe741, 0x3528, 0x1e8b, 0x626e, 0x49cd, 0x4d0b, 0x66a8, 0x1a4d, 0x31ee, 0xe387,
10627 +
            0xc824, 0xb4c1, 0x9f62, 0xbd4d, 0x96ee, 0xea0b, 0xc1a8, 0x13c1, 0x3862, 0x4487, 0x6f24,
10628 +
            0x6be2, 0x4041, 0x3ca4, 0x1707, 0xc56e, 0xeecd, 0x9228, 0xb98b, 0xd676, 0xfdd5, 0x8130,
10629 +
            0xaa93, 0x78fa, 0x5359, 0x2fbc, 0x041f, 0x00d9, 0x2b7a, 0x579f, 0x7c3c, 0xae55, 0x85f6,
10630 +
            0xf913, 0xd2b0, 0xf09f, 0xdb3c, 0xa7d9, 0x8c7a, 0x5e13, 0x75b0, 0x0955, 0x22f6, 0x2630,
10631 +
            0x0d93, 0x7176, 0x5ad5, 0x88bc, 0xa31f, 0xdffa, 0xf459, 0xbcff, 0x975c, 0xebb9, 0xc01a,
10632 +
            0x1273, 0x39d0, 0x4535, 0x6e96, 0x6a50, 0x41f3, 0x3d16, 0x16b5, 0xc4dc, 0xef7f, 0x939a,
10633 +
            0xb839, 0x9a16, 0xb1b5, 0xcd50, 0xe6f3, 0x349a, 0x1f39, 0x63dc, 0x487f, 0x4cb9, 0x671a,
10634 +
            0x1bff, 0x305c, 0xe235, 0xc996, 0xb573, 0x9ed0, 0xf12d, 0xda8e, 0xa66b, 0x8dc8, 0x5fa1,
10635 +
            0x7402, 0x08e7, 0x2344, 0x2782, 0x0c21, 0x70c4, 0x5b67, 0x890e, 0xa2ad, 0xde48, 0xf5eb,
10636 +
            0xd7c4, 0xfc67, 0x8082, 0xab21, 0x7948, 0x52eb, 0x2e0e, 0x05ad, 0x016b, 0x2ac8, 0x562d,
10637 +
            0x7d8e, 0xafe7, 0x8444, 0xf8a1, 0xd302, 0x275b, 0x0cf8, 0x701d, 0x5bbe, 0x89d7, 0xa274,
10638 +
            0xde91, 0xf532, 0xf1f4, 0xda57, 0xa6b2, 0x8d11, 0x5f78, 0x74db, 0x083e, 0x239d, 0x01b2,
10639 +
            0x2a11, 0x56f4, 0x7d57, 0xaf3e, 0x849d, 0xf878, 0xd3db, 0xd71d, 0xfcbe, 0x805b, 0xabf8,
10640 +
            0x7991, 0x5232, 0x2ed7, 0x0574, 0x6a89, 0x412a, 0x3dcf, 0x166c, 0xc405, 0xefa6, 0x9343,
10641 +
            0xb8e0, 0xbc26, 0x9785, 0xeb60, 0xc0c3, 0x12aa, 0x3909, 0x45ec, 0x6e4f, 0x4c60, 0x67c3,
10642 +
            0x1b26, 0x3085, 0xe2ec, 0xc94f, 0xb5aa, 0x9e09, 0x9acf, 0xb16c, 0xcd89, 0xe62a, 0x3443,
10643 +
            0x1fe0, 0x6305, 0x48a6,
10644 +
        ],
10645 +
        [
10646 +
            0x0000, 0xf249, 0x6f25, 0x9d6c, 0xde4a, 0x2c03, 0xb16f, 0x4326, 0x3723, 0xc56a, 0x5806,
10647 +
            0xaa4f, 0xe969, 0x1b20, 0x864c, 0x7405, 0x6e46, 0x9c0f, 0x0163, 0xf32a, 0xb00c, 0x4245,
10648 +
            0xdf29, 0x2d60, 0x5965, 0xab2c, 0x3640, 0xc409, 0x872f, 0x7566, 0xe80a, 0x1a43, 0xdc8c,
10649 +
            0x2ec5, 0xb3a9, 0x41e0, 0x02c6, 0xf08f, 0x6de3, 0x9faa, 0xebaf, 0x19e6, 0x848a, 0x76c3,
10650 +
            0x35e5, 0xc7ac, 0x5ac0, 0xa889, 0xb2ca, 0x4083, 0xddef, 0x2fa6, 0x6c80, 0x9ec9, 0x03a5,
10651 +
            0xf1ec, 0x85e9, 0x77a0, 0xeacc, 0x1885, 0x5ba3, 0xa9ea, 0x3486, 0xc6cf, 0x32af, 0xc0e6,
10652 +
            0x5d8a, 0xafc3, 0xece5, 0x1eac, 0x83c0, 0x7189, 0x058c, 0xf7c5, 0x6aa9, 0x98e0, 0xdbc6,
10653 +
            0x298f, 0xb4e3, 0x46aa, 0x5ce9, 0xaea0, 0x33cc, 0xc185, 0x82a3, 0x70ea, 0xed86, 0x1fcf,
10654 +
            0x6bca, 0x9983, 0x04ef, 0xf6a6, 0xb580, 0x47c9, 0xdaa5, 0x28ec, 0xee23, 0x1c6a, 0x8106,
10655 +
            0x734f, 0x3069, 0xc220, 0x5f4c, 0xad05, 0xd900, 0x2b49, 0xb625, 0x446c, 0x074a, 0xf503,
10656 +
            0x686f, 0x9a26, 0x8065, 0x722c, 0xef40, 0x1d09, 0x5e2f, 0xac66, 0x310a, 0xc343, 0xb746,
10657 +
            0x450f, 0xd863, 0x2a2a, 0x690c, 0x9b45, 0x0629, 0xf460, 0x655e, 0x9717, 0x0a7b, 0xf832,
10658 +
            0xbb14, 0x495d, 0xd431, 0x2678, 0x527d, 0xa034, 0x3d58, 0xcf11, 0x8c37, 0x7e7e, 0xe312,
10659 +
            0x115b, 0x0b18, 0xf951, 0x643d, 0x9674, 0xd552, 0x271b, 0xba77, 0x483e, 0x3c3b, 0xce72,
10660 +
            0x531e, 0xa157, 0xe271, 0x1038, 0x8d54, 0x7f1d, 0xb9d2, 0x4b9b, 0xd6f7, 0x24be, 0x6798,
10661 +
            0x95d1, 0x08bd, 0xfaf4, 0x8ef1, 0x7cb8, 0xe1d4, 0x139d, 0x50bb, 0xa2f2, 0x3f9e, 0xcdd7,
10662 +
            0xd794, 0x25dd, 0xb8b1, 0x4af8, 0x09de, 0xfb97, 0x66fb, 0x94b2, 0xe0b7, 0x12fe, 0x8f92,
10663 +
            0x7ddb, 0x3efd, 0xccb4, 0x51d8, 0xa391, 0x57f1, 0xa5b8, 0x38d4, 0xca9d, 0x89bb, 0x7bf2,
10664 +
            0xe69e, 0x14d7, 0x60d2, 0x929b, 0x0ff7, 0xfdbe, 0xbe98, 0x4cd1, 0xd1bd, 0x23f4, 0x39b7,
10665 +
            0xcbfe, 0x5692, 0xa4db, 0xe7fd, 0x15b4, 0x88d8, 0x7a91, 0x0e94, 0xfcdd, 0x61b1, 0x93f8,
10666 +
            0xd0de, 0x2297, 0xbffb, 0x4db2, 0x8b7d, 0x7934, 0xe458, 0x1611, 0x5537, 0xa77e, 0x3a12,
10667 +
            0xc85b, 0xbc5e, 0x4e17, 0xd37b, 0x2132, 0x6214, 0x905d, 0x0d31, 0xff78, 0xe53b, 0x1772,
10668 +
            0x8a1e, 0x7857, 0x3b71, 0xc938, 0x5454, 0xa61d, 0xd218, 0x2051, 0xbd3d, 0x4f74, 0x0c52,
10669 +
            0xfe1b, 0x6377, 0x913e,
10670 +
        ],
10671 +
        [
10672 +
            0x0000, 0xcabc, 0x1ecf, 0xd473, 0x3d9e, 0xf722, 0x2351, 0xe9ed, 0x7b3c, 0xb180, 0x65f3,
10673 +
            0xaf4f, 0x46a2, 0x8c1e, 0x586d, 0x92d1, 0xf678, 0x3cc4, 0xe8b7, 0x220b, 0xcbe6, 0x015a,
10674 +
            0xd529, 0x1f95, 0x8d44, 0x47f8, 0x938b, 0x5937, 0xb0da, 0x7a66, 0xae15, 0x64a9, 0x6747,
10675 +
            0xadfb, 0x7988, 0xb334, 0x5ad9, 0x9065, 0x4416, 0x8eaa, 0x1c7b, 0xd6c7, 0x02b4, 0xc808,
10676 +
            0x21e5, 0xeb59, 0x3f2a, 0xf596, 0x913f, 0x5b83, 0x8ff0, 0x454c, 0xaca1, 0x661d, 0xb26e,
10677 +
            0x78d2, 0xea03, 0x20bf, 0xf4cc, 0x3e70, 0xd79d, 0x1d21, 0xc952, 0x03ee, 0xce8e, 0x0432,
10678 +
            0xd041, 0x1afd, 0xf310, 0x39ac, 0xeddf, 0x2763, 0xb5b2, 0x7f0e, 0xab7d, 0x61c1, 0x882c,
10679 +
            0x4290, 0x96e3, 0x5c5f, 0x38f6, 0xf24a, 0x2639, 0xec85, 0x0568, 0xcfd4, 0x1ba7, 0xd11b,
10680 +
            0x43ca, 0x8976, 0x5d05, 0x97b9, 0x7e54, 0xb4e8, 0x609b, 0xaa27, 0xa9c9, 0x6375, 0xb706,
10681 +
            0x7dba, 0x9457, 0x5eeb, 0x8a98, 0x4024, 0xd2f5, 0x1849, 0xcc3a, 0x0686, 0xef6b, 0x25d7,
10682 +
            0xf1a4, 0x3b18, 0x5fb1, 0x950d, 0x417e, 0x8bc2, 0x622f, 0xa893, 0x7ce0, 0xb65c, 0x248d,
10683 +
            0xee31, 0x3a42, 0xf0fe, 0x1913, 0xd3af, 0x07dc, 0xcd60, 0x16ab, 0xdc17, 0x0864, 0xc2d8,
10684 +
            0x2b35, 0xe189, 0x35fa, 0xff46, 0x6d97, 0xa72b, 0x7358, 0xb9e4, 0x5009, 0x9ab5, 0x4ec6,
10685 +
            0x847a, 0xe0d3, 0x2a6f, 0xfe1c, 0x34a0, 0xdd4d, 0x17f1, 0xc382, 0x093e, 0x9bef, 0x5153,
10686 +
            0x8520, 0x4f9c, 0xa671, 0x6ccd, 0xb8be, 0x7202, 0x71ec, 0xbb50, 0x6f23, 0xa59f, 0x4c72,
10687 +
            0x86ce, 0x52bd, 0x9801, 0x0ad0, 0xc06c, 0x141f, 0xdea3, 0x374e, 0xfdf2, 0x2981, 0xe33d,
10688 +
            0x8794, 0x4d28, 0x995b, 0x53e7, 0xba0a, 0x70b6, 0xa4c5, 0x6e79, 0xfca8, 0x3614, 0xe267,
10689 +
            0x28db, 0xc136, 0x0b8a, 0xdff9, 0x1545, 0xd825, 0x1299, 0xc6ea, 0x0c56, 0xe5bb, 0x2f07,
10690 +
            0xfb74, 0x31c8, 0xa319, 0x69a5, 0xbdd6, 0x776a, 0x9e87, 0x543b, 0x8048, 0x4af4, 0x2e5d,
10691 +
            0xe4e1, 0x3092, 0xfa2e, 0x13c3, 0xd97f, 0x0d0c, 0xc7b0, 0x5561, 0x9fdd, 0x4bae, 0x8112,
10692 +
            0x68ff, 0xa243, 0x7630, 0xbc8c, 0xbf62, 0x75de, 0xa1ad, 0x6b11, 0x82fc, 0x4840, 0x9c33,
10693 +
            0x568f, 0xc45e, 0x0ee2, 0xda91, 0x102d, 0xf9c0, 0x337c, 0xe70f, 0x2db3, 0x491a, 0x83a6,
10694 +
            0x57d5, 0x9d69, 0x7484, 0xbe38, 0x6a4b, 0xa0f7, 0x3226, 0xf89a, 0x2ce9, 0xe655, 0x0fb8,
10695 +
            0xc504, 0x1177, 0xdbcb,
10696 +
        ],
10697 +
        [
10698 +
            0x0000, 0x2d56, 0x5aac, 0x77fa, 0xb558, 0x980e, 0xeff4, 0xc2a2, 0xe107, 0xcc51, 0xbbab,
10699 +
            0x96fd, 0x545f, 0x7909, 0x0ef3, 0x23a5, 0x49b9, 0x64ef, 0x1315, 0x3e43, 0xfce1, 0xd1b7,
10700 +
            0xa64d, 0x8b1b, 0xa8be, 0x85e8, 0xf212, 0xdf44, 0x1de6, 0x30b0, 0x474a, 0x6a1c, 0x9372,
10701 +
            0xbe24, 0xc9de, 0xe488, 0x262a, 0x0b7c, 0x7c86, 0x51d0, 0x7275, 0x5f23, 0x28d9, 0x058f,
10702 +
            0xc72d, 0xea7b, 0x9d81, 0xb0d7, 0xdacb, 0xf79d, 0x8067, 0xad31, 0x6f93, 0x42c5, 0x353f,
10703 +
            0x1869, 0x3bcc, 0x169a, 0x6160, 0x4c36, 0x8e94, 0xa3c2, 0xd438, 0xf96e, 0xad53, 0x8005,
10704 +
            0xf7ff, 0xdaa9, 0x180b, 0x355d, 0x42a7, 0x6ff1, 0x4c54, 0x6102, 0x16f8, 0x3bae, 0xf90c,
10705 +
            0xd45a, 0xa3a0, 0x8ef6, 0xe4ea, 0xc9bc, 0xbe46, 0x9310, 0x51b2, 0x7ce4, 0x0b1e, 0x2648,
10706 +
            0x05ed, 0x28bb, 0x5f41, 0x7217, 0xb0b5, 0x9de3, 0xea19, 0xc74f, 0x3e21, 0x1377, 0x648d,
10707 +
            0x49db, 0x8b79, 0xa62f, 0xd1d5, 0xfc83, 0xdf26, 0xf270, 0x858a, 0xa8dc, 0x6a7e, 0x4728,
10708 +
            0x30d2, 0x1d84, 0x7798, 0x5ace, 0x2d34, 0x0062, 0xc2c0, 0xef96, 0x986c, 0xb53a, 0x969f,
10709 +
            0xbbc9, 0xcc33, 0xe165, 0x23c7, 0x0e91, 0x796b, 0x543d, 0xd111, 0xfc47, 0x8bbd, 0xa6eb,
10710 +
            0x6449, 0x491f, 0x3ee5, 0x13b3, 0x3016, 0x1d40, 0x6aba, 0x47ec, 0x854e, 0xa818, 0xdfe2,
10711 +
            0xf2b4, 0x98a8, 0xb5fe, 0xc204, 0xef52, 0x2df0, 0x00a6, 0x775c, 0x5a0a, 0x79af, 0x54f9,
10712 +
            0x2303, 0x0e55, 0xccf7, 0xe1a1, 0x965b, 0xbb0d, 0x4263, 0x6f35, 0x18cf, 0x3599, 0xf73b,
10713 +
            0xda6d, 0xad97, 0x80c1, 0xa364, 0x8e32, 0xf9c8, 0xd49e, 0x163c, 0x3b6a, 0x4c90, 0x61c6,
10714 +
            0x0bda, 0x268c, 0x5176, 0x7c20, 0xbe82, 0x93d4, 0xe42e, 0xc978, 0xeadd, 0xc78b, 0xb071,
10715 +
            0x9d27, 0x5f85, 0x72d3, 0x0529, 0x287f, 0x7c42, 0x5114, 0x26ee, 0x0bb8, 0xc91a, 0xe44c,
10716 +
            0x93b6, 0xbee0, 0x9d45, 0xb013, 0xc7e9, 0xeabf, 0x281d, 0x054b, 0x72b1, 0x5fe7, 0x35fb,
10717 +
            0x18ad, 0x6f57, 0x4201, 0x80a3, 0xadf5, 0xda0f, 0xf759, 0xd4fc, 0xf9aa, 0x8e50, 0xa306,
10718 +
            0x61a4, 0x4cf2, 0x3b08, 0x165e, 0xef30, 0xc266, 0xb59c, 0x98ca, 0x5a68, 0x773e, 0x00c4,
10719 +
            0x2d92, 0x0e37, 0x2361, 0x549b, 0x79cd, 0xbb6f, 0x9639, 0xe1c3, 0xcc95, 0xa689, 0x8bdf,
10720 +
            0xfc25, 0xd173, 0x13d1, 0x3e87, 0x497d, 0x642b, 0x478e, 0x6ad8, 0x1d22, 0x3074, 0xf2d6,
10721 +
            0xdf80, 0xa87a, 0x852c,
10722 +
        ],
10723 +
        [
10724 +
            0x0000, 0x2995, 0x532a, 0x7abf, 0xa654, 0x8fc1, 0xf57e, 0xdceb, 0xc71f, 0xee8a, 0x9435,
10725 +
            0xbda0, 0x614b, 0x48de, 0x3261, 0x1bf4, 0x0589, 0x2c1c, 0x56a3, 0x7f36, 0xa3dd, 0x8a48,
10726 +
            0xf0f7, 0xd962, 0xc296, 0xeb03, 0x91bc, 0xb829, 0x64c2, 0x4d57, 0x37e8, 0x1e7d, 0x0b12,
10727 +
            0x2287, 0x5838, 0x71ad, 0xad46, 0x84d3, 0xfe6c, 0xd7f9, 0xcc0d, 0xe598, 0x9f27, 0xb6b2,
10728 +
            0x6a59, 0x43cc, 0x3973, 0x10e6, 0x0e9b, 0x270e, 0x5db1, 0x7424, 0xa8cf, 0x815a, 0xfbe5,
10729 +
            0xd270, 0xc984, 0xe011, 0x9aae, 0xb33b, 0x6fd0, 0x4645, 0x3cfa, 0x156f, 0x1624, 0x3fb1,
10730 +
            0x450e, 0x6c9b, 0xb070, 0x99e5, 0xe35a, 0xcacf, 0xd13b, 0xf8ae, 0x8211, 0xab84, 0x776f,
10731 +
            0x5efa, 0x2445, 0x0dd0, 0x13ad, 0x3a38, 0x4087, 0x6912, 0xb5f9, 0x9c6c, 0xe6d3, 0xcf46,
10732 +
            0xd4b2, 0xfd27, 0x8798, 0xae0d, 0x72e6, 0x5b73, 0x21cc, 0x0859, 0x1d36, 0x34a3, 0x4e1c,
10733 +
            0x6789, 0xbb62, 0x92f7, 0xe848, 0xc1dd, 0xda29, 0xf3bc, 0x8903, 0xa096, 0x7c7d, 0x55e8,
10734 +
            0x2f57, 0x06c2, 0x18bf, 0x312a, 0x4b95, 0x6200, 0xbeeb, 0x977e, 0xedc1, 0xc454, 0xdfa0,
10735 +
            0xf635, 0x8c8a, 0xa51f, 0x79f4, 0x5061, 0x2ade, 0x034b, 0x2c48, 0x05dd, 0x7f62, 0x56f7,
10736 +
            0x8a1c, 0xa389, 0xd936, 0xf0a3, 0xeb57, 0xc2c2, 0xb87d, 0x91e8, 0x4d03, 0x6496, 0x1e29,
10737 +
            0x37bc, 0x29c1, 0x0054, 0x7aeb, 0x537e, 0x8f95, 0xa600, 0xdcbf, 0xf52a, 0xeede, 0xc74b,
10738 +
            0xbdf4, 0x9461, 0x488a, 0x611f, 0x1ba0, 0x3235, 0x275a, 0x0ecf, 0x7470, 0x5de5, 0x810e,
10739 +
            0xa89b, 0xd224, 0xfbb1, 0xe045, 0xc9d0, 0xb36f, 0x9afa, 0x4611, 0x6f84, 0x153b, 0x3cae,
10740 +
            0x22d3, 0x0b46, 0x71f9, 0x586c, 0x8487, 0xad12, 0xd7ad, 0xfe38, 0xe5cc, 0xcc59, 0xb6e6,
10741 +
            0x9f73, 0x4398, 0x6a0d, 0x10b2, 0x3927, 0x3a6c, 0x13f9, 0x6946, 0x40d3, 0x9c38, 0xb5ad,
10742 +
            0xcf12, 0xe687, 0xfd73, 0xd4e6, 0xae59, 0x87cc, 0x5b27, 0x72b2, 0x080d, 0x2198, 0x3fe5,
10743 +
            0x1670, 0x6ccf, 0x455a, 0x99b1, 0xb024, 0xca9b, 0xe30e, 0xf8fa, 0xd16f, 0xabd0, 0x8245,
10744 +
            0x5eae, 0x773b, 0x0d84, 0x2411, 0x317e, 0x18eb, 0x6254, 0x4bc1, 0x972a, 0xbebf, 0xc400,
10745 +
            0xed95, 0xf661, 0xdff4, 0xa54b, 0x8cde, 0x5035, 0x79a0, 0x031f, 0x2a8a, 0x34f7, 0x1d62,
10746 +
            0x67dd, 0x4e48, 0x92a3, 0xbb36, 0xc189, 0xe81c, 0xf3e8, 0xda7d, 0xa0c2, 0x8957, 0x55bc,
10747 +
            0x7c29, 0x0696, 0x2f03,
10748 +
        ],
10749 +
        [
10750 +
            0x0000, 0x5890, 0xb120, 0xe9b0, 0xe9f7, 0xb167, 0x58d7, 0x0047, 0x5859, 0x00c9, 0xe979,
10751 +
            0xb1e9, 0xb1ae, 0xe93e, 0x008e, 0x581e, 0xb0b2, 0xe822, 0x0192, 0x5902, 0x5945, 0x01d5,
10752 +
            0xe865, 0xb0f5, 0xe8eb, 0xb07b, 0x59cb, 0x015b, 0x011c, 0x598c, 0xb03c, 0xe8ac, 0xead3,
10753 +
            0xb243, 0x5bf3, 0x0363, 0x0324, 0x5bb4, 0xb204, 0xea94, 0xb28a, 0xea1a, 0x03aa, 0x5b3a,
10754 +
            0x5b7d, 0x03ed, 0xea5d, 0xb2cd, 0x5a61, 0x02f1, 0xeb41, 0xb3d1, 0xb396, 0xeb06, 0x02b6,
10755 +
            0x5a26, 0x0238, 0x5aa8, 0xb318, 0xeb88, 0xebcf, 0xb35f, 0x5aef, 0x027f, 0x5e11, 0x0681,
10756 +
            0xef31, 0xb7a1, 0xb7e6, 0xef76, 0x06c6, 0x5e56, 0x0648, 0x5ed8, 0xb768, 0xeff8, 0xefbf,
10757 +
            0xb72f, 0x5e9f, 0x060f, 0xeea3, 0xb633, 0x5f83, 0x0713, 0x0754, 0x5fc4, 0xb674, 0xeee4,
10758 +
            0xb6fa, 0xee6a, 0x07da, 0x5f4a, 0x5f0d, 0x079d, 0xee2d, 0xb6bd, 0xb4c2, 0xec52, 0x05e2,
10759 +
            0x5d72, 0x5d35, 0x05a5, 0xec15, 0xb485, 0xec9b, 0xb40b, 0x5dbb, 0x052b, 0x056c, 0x5dfc,
10760 +
            0xb44c, 0xecdc, 0x0470, 0x5ce0, 0xb550, 0xedc0, 0xed87, 0xb517, 0x5ca7, 0x0437, 0x5c29,
10761 +
            0x04b9, 0xed09, 0xb599, 0xb5de, 0xed4e, 0x04fe, 0x5c6e, 0xbc22, 0xe4b2, 0x0d02, 0x5592,
10762 +
            0x55d5, 0x0d45, 0xe4f5, 0xbc65, 0xe47b, 0xbceb, 0x555b, 0x0dcb, 0x0d8c, 0x551c, 0xbcac,
10763 +
            0xe43c, 0x0c90, 0x5400, 0xbdb0, 0xe520, 0xe567, 0xbdf7, 0x5447, 0x0cd7, 0x54c9, 0x0c59,
10764 +
            0xe5e9, 0xbd79, 0xbd3e, 0xe5ae, 0x0c1e, 0x548e, 0x56f1, 0x0e61, 0xe7d1, 0xbf41, 0xbf06,
10765 +
            0xe796, 0x0e26, 0x56b6, 0x0ea8, 0x5638, 0xbf88, 0xe718, 0xe75f, 0xbfcf, 0x567f, 0x0eef,
10766 +
            0xe643, 0xbed3, 0x5763, 0x0ff3, 0x0fb4, 0x5724, 0xbe94, 0xe604, 0xbe1a, 0xe68a, 0x0f3a,
10767 +
            0x57aa, 0x57ed, 0x0f7d, 0xe6cd, 0xbe5d, 0xe233, 0xbaa3, 0x5313, 0x0b83, 0x0bc4, 0x5354,
10768 +
            0xbae4, 0xe274, 0xba6a, 0xe2fa, 0x0b4a, 0x53da, 0x539d, 0x0b0d, 0xe2bd, 0xba2d, 0x5281,
10769 +
            0x0a11, 0xe3a1, 0xbb31, 0xbb76, 0xe3e6, 0x0a56, 0x52c6, 0x0ad8, 0x5248, 0xbbf8, 0xe368,
10770 +
            0xe32f, 0xbbbf, 0x520f, 0x0a9f, 0x08e0, 0x5070, 0xb9c0, 0xe150, 0xe117, 0xb987, 0x5037,
10771 +
            0x08a7, 0x50b9, 0x0829, 0xe199, 0xb909, 0xb94e, 0xe1de, 0x086e, 0x50fe, 0xb852, 0xe0c2,
10772 +
            0x0972, 0x51e2, 0x51a5, 0x0935, 0xe085, 0xb815, 0xe00b, 0xb89b, 0x512b, 0x09bb, 0x09fc,
10773 +
            0x516c, 0xb8dc, 0xe04c,
10774 +
        ],
10775 +
        [
10776 +
            0x0000, 0xf3f3, 0x6c51, 0x9fa2, 0xd8a2, 0x2b51, 0xb4f3, 0x4700, 0x3af3, 0xc900, 0x56a2,
10777 +
            0xa551, 0xe251, 0x11a2, 0x8e00, 0x7df3, 0x75e6, 0x8615, 0x19b7, 0xea44, 0xad44, 0x5eb7,
10778 +
            0xc115, 0x32e6, 0x4f15, 0xbce6, 0x2344, 0xd0b7, 0x97b7, 0x6444, 0xfbe6, 0x0815, 0xebcc,
10779 +
            0x183f, 0x879d, 0x746e, 0x336e, 0xc09d, 0x5f3f, 0xaccc, 0xd13f, 0x22cc, 0xbd6e, 0x4e9d,
10780 +
            0x099d, 0xfa6e, 0x65cc, 0x963f, 0x9e2a, 0x6dd9, 0xf27b, 0x0188, 0x4688, 0xb57b, 0x2ad9,
10781 +
            0xd92a, 0xa4d9, 0x572a, 0xc888, 0x3b7b, 0x7c7b, 0x8f88, 0x102a, 0xe3d9, 0x5c2f, 0xafdc,
10782 +
            0x307e, 0xc38d, 0x848d, 0x777e, 0xe8dc, 0x1b2f, 0x66dc, 0x952f, 0x0a8d, 0xf97e, 0xbe7e,
10783 +
            0x4d8d, 0xd22f, 0x21dc, 0x29c9, 0xda3a, 0x4598, 0xb66b, 0xf16b, 0x0298, 0x9d3a, 0x6ec9,
10784 +
            0x133a, 0xe0c9, 0x7f6b, 0x8c98, 0xcb98, 0x386b, 0xa7c9, 0x543a, 0xb7e3, 0x4410, 0xdbb2,
10785 +
            0x2841, 0x6f41, 0x9cb2, 0x0310, 0xf0e3, 0x8d10, 0x7ee3, 0xe141, 0x12b2, 0x55b2, 0xa641,
10786 +
            0x39e3, 0xca10, 0xc205, 0x31f6, 0xae54, 0x5da7, 0x1aa7, 0xe954, 0x76f6, 0x8505, 0xf8f6,
10787 +
            0x0b05, 0x94a7, 0x6754, 0x2054, 0xd3a7, 0x4c05, 0xbff6, 0xb85e, 0x4bad, 0xd40f, 0x27fc,
10788 +
            0x60fc, 0x930f, 0x0cad, 0xff5e, 0x82ad, 0x715e, 0xeefc, 0x1d0f, 0x5a0f, 0xa9fc, 0x365e,
10789 +
            0xc5ad, 0xcdb8, 0x3e4b, 0xa1e9, 0x521a, 0x151a, 0xe6e9, 0x794b, 0x8ab8, 0xf74b, 0x04b8,
10790 +
            0x9b1a, 0x68e9, 0x2fe9, 0xdc1a, 0x43b8, 0xb04b, 0x5392, 0xa061, 0x3fc3, 0xcc30, 0x8b30,
10791 +
            0x78c3, 0xe761, 0x1492, 0x6961, 0x9a92, 0x0530, 0xf6c3, 0xb1c3, 0x4230, 0xdd92, 0x2e61,
10792 +
            0x2674, 0xd587, 0x4a25, 0xb9d6, 0xfed6, 0x0d25, 0x9287, 0x6174, 0x1c87, 0xef74, 0x70d6,
10793 +
            0x8325, 0xc425, 0x37d6, 0xa874, 0x5b87, 0xe471, 0x1782, 0x8820, 0x7bd3, 0x3cd3, 0xcf20,
10794 +
            0x5082, 0xa371, 0xde82, 0x2d71, 0xb2d3, 0x4120, 0x0620, 0xf5d3, 0x6a71, 0x9982, 0x9197,
10795 +
            0x6264, 0xfdc6, 0x0e35, 0x4935, 0xbac6, 0x2564, 0xd697, 0xab64, 0x5897, 0xc735, 0x34c6,
10796 +
            0x73c6, 0x8035, 0x1f97, 0xec64, 0x0fbd, 0xfc4e, 0x63ec, 0x901f, 0xd71f, 0x24ec, 0xbb4e,
10797 +
            0x48bd, 0x354e, 0xc6bd, 0x591f, 0xaaec, 0xedec, 0x1e1f, 0x81bd, 0x724e, 0x7a5b, 0x89a8,
10798 +
            0x160a, 0xe5f9, 0xa2f9, 0x510a, 0xcea8, 0x3d5b, 0x40a8, 0xb35b, 0x2cf9, 0xdf0a, 0x980a,
10799 +
            0x6bf9, 0xf45b, 0x07a8,
10800 +
        ],
10801 +
        [
10802 +
            0x0000, 0xfb0b, 0x7da1, 0x86aa, 0xfb42, 0x0049, 0x86e3, 0x7de8, 0x7d33, 0x8638, 0x0092,
10803 +
            0xfb99, 0x8671, 0x7d7a, 0xfbd0, 0x00db, 0xfa66, 0x016d, 0x87c7, 0x7ccc, 0x0124, 0xfa2f,
10804 +
            0x7c85, 0x878e, 0x8755, 0x7c5e, 0xfaf4, 0x01ff, 0x7c17, 0x871c, 0x01b6, 0xfabd, 0x7f7b,
10805 +
            0x8470, 0x02da, 0xf9d1, 0x8439, 0x7f32, 0xf998, 0x0293, 0x0248, 0xf943, 0x7fe9, 0x84e2,
10806 +
            0xf90a, 0x0201, 0x84ab, 0x7fa0, 0x851d, 0x7e16, 0xf8bc, 0x03b7, 0x7e5f, 0x8554, 0x03fe,
10807 +
            0xf8f5, 0xf82e, 0x0325, 0x858f, 0x7e84, 0x036c, 0xf867, 0x7ecd, 0x85c6, 0xfef6, 0x05fd,
10808 +
            0x8357, 0x785c, 0x05b4, 0xfebf, 0x7815, 0x831e, 0x83c5, 0x78ce, 0xfe64, 0x056f, 0x7887,
10809 +
            0x838c, 0x0526, 0xfe2d, 0x0490, 0xff9b, 0x7931, 0x823a, 0xffd2, 0x04d9, 0x8273, 0x7978,
10810 +
            0x79a3, 0x82a8, 0x0402, 0xff09, 0x82e1, 0x79ea, 0xff40, 0x044b, 0x818d, 0x7a86, 0xfc2c,
10811 +
            0x0727, 0x7acf, 0x81c4, 0x076e, 0xfc65, 0xfcbe, 0x07b5, 0x811f, 0x7a14, 0x07fc, 0xfcf7,
10812 +
            0x7a5d, 0x8156, 0x7beb, 0x80e0, 0x064a, 0xfd41, 0x80a9, 0x7ba2, 0xfd08, 0x0603, 0x06d8,
10813 +
            0xfdd3, 0x7b79, 0x8072, 0xfd9a, 0x0691, 0x803b, 0x7b30, 0x765b, 0x8d50, 0x0bfa, 0xf0f1,
10814 +
            0x8d19, 0x7612, 0xf0b8, 0x0bb3, 0x0b68, 0xf063, 0x76c9, 0x8dc2, 0xf02a, 0x0b21, 0x8d8b,
10815 +
            0x7680, 0x8c3d, 0x7736, 0xf19c, 0x0a97, 0x777f, 0x8c74, 0x0ade, 0xf1d5, 0xf10e, 0x0a05,
10816 +
            0x8caf, 0x77a4, 0x0a4c, 0xf147, 0x77ed, 0x8ce6, 0x0920, 0xf22b, 0x7481, 0x8f8a, 0xf262,
10817 +
            0x0969, 0x8fc3, 0x74c8, 0x7413, 0x8f18, 0x09b2, 0xf2b9, 0x8f51, 0x745a, 0xf2f0, 0x09fb,
10818 +
            0xf346, 0x084d, 0x8ee7, 0x75ec, 0x0804, 0xf30f, 0x75a5, 0x8eae, 0x8e75, 0x757e, 0xf3d4,
10819 +
            0x08df, 0x7537, 0x8e3c, 0x0896, 0xf39d, 0x88ad, 0x73a6, 0xf50c, 0x0e07, 0x73ef, 0x88e4,
10820 +
            0x0e4e, 0xf545, 0xf59e, 0x0e95, 0x883f, 0x7334, 0x0edc, 0xf5d7, 0x737d, 0x8876, 0x72cb,
10821 +
            0x89c0, 0x0f6a, 0xf461, 0x8989, 0x7282, 0xf428, 0x0f23, 0x0ff8, 0xf4f3, 0x7259, 0x8952,
10822 +
            0xf4ba, 0x0fb1, 0x891b, 0x7210, 0xf7d6, 0x0cdd, 0x8a77, 0x717c, 0x0c94, 0xf79f, 0x7135,
10823 +
            0x8a3e, 0x8ae5, 0x71ee, 0xf744, 0x0c4f, 0x71a7, 0x8aac, 0x0c06, 0xf70d, 0x0db0, 0xf6bb,
10824 +
            0x7011, 0x8b1a, 0xf6f2, 0x0df9, 0x8b53, 0x7058, 0x7083, 0x8b88, 0x0d22, 0xf629, 0x8bc1,
10825 +
            0x70ca, 0xf660, 0x0d6b,
10826 +
        ],
10827 +
        [
10828 +
            0x0000, 0xecb6, 0x52db, 0xbe6d, 0xa5b6, 0x4900, 0xf76d, 0x1bdb, 0xc0db, 0x2c6d, 0x9200,
10829 +
            0x7eb6, 0x656d, 0x89db, 0x37b6, 0xdb00, 0x0a01, 0xe6b7, 0x58da, 0xb46c, 0xafb7, 0x4301,
10830 +
            0xfd6c, 0x11da, 0xcada, 0x266c, 0x9801, 0x74b7, 0x6f6c, 0x83da, 0x3db7, 0xd101, 0x1402,
10831 +
            0xf8b4, 0x46d9, 0xaa6f, 0xb1b4, 0x5d02, 0xe36f, 0x0fd9, 0xd4d9, 0x386f, 0x8602, 0x6ab4,
10832 +
            0x716f, 0x9dd9, 0x23b4, 0xcf02, 0x1e03, 0xf2b5, 0x4cd8, 0xa06e, 0xbbb5, 0x5703, 0xe96e,
10833 +
            0x05d8, 0xded8, 0x326e, 0x8c03, 0x60b5, 0x7b6e, 0x97d8, 0x29b5, 0xc503, 0x2804, 0xc4b2,
10834 +
            0x7adf, 0x9669, 0x8db2, 0x6104, 0xdf69, 0x33df, 0xe8df, 0x0469, 0xba04, 0x56b2, 0x4d69,
10835 +
            0xa1df, 0x1fb2, 0xf304, 0x2205, 0xceb3, 0x70de, 0x9c68, 0x87b3, 0x6b05, 0xd568, 0x39de,
10836 +
            0xe2de, 0x0e68, 0xb005, 0x5cb3, 0x4768, 0xabde, 0x15b3, 0xf905, 0x3c06, 0xd0b0, 0x6edd,
10837 +
            0x826b, 0x99b0, 0x7506, 0xcb6b, 0x27dd, 0xfcdd, 0x106b, 0xae06, 0x42b0, 0x596b, 0xb5dd,
10838 +
            0x0bb0, 0xe706, 0x3607, 0xdab1, 0x64dc, 0x886a, 0x93b1, 0x7f07, 0xc16a, 0x2ddc, 0xf6dc,
10839 +
            0x1a6a, 0xa407, 0x48b1, 0x536a, 0xbfdc, 0x01b1, 0xed07, 0x5008, 0xbcbe, 0x02d3, 0xee65,
10840 +
            0xf5be, 0x1908, 0xa765, 0x4bd3, 0x90d3, 0x7c65, 0xc208, 0x2ebe, 0x3565, 0xd9d3, 0x67be,
10841 +
            0x8b08, 0x5a09, 0xb6bf, 0x08d2, 0xe464, 0xffbf, 0x1309, 0xad64, 0x41d2, 0x9ad2, 0x7664,
10842 +
            0xc809, 0x24bf, 0x3f64, 0xd3d2, 0x6dbf, 0x8109, 0x440a, 0xa8bc, 0x16d1, 0xfa67, 0xe1bc,
10843 +
            0x0d0a, 0xb367, 0x5fd1, 0x84d1, 0x6867, 0xd60a, 0x3abc, 0x2167, 0xcdd1, 0x73bc, 0x9f0a,
10844 +
            0x4e0b, 0xa2bd, 0x1cd0, 0xf066, 0xebbd, 0x070b, 0xb966, 0x55d0, 0x8ed0, 0x6266, 0xdc0b,
10845 +
            0x30bd, 0x2b66, 0xc7d0, 0x79bd, 0x950b, 0x780c, 0x94ba, 0x2ad7, 0xc661, 0xddba, 0x310c,
10846 +
            0x8f61, 0x63d7, 0xb8d7, 0x5461, 0xea0c, 0x06ba, 0x1d61, 0xf1d7, 0x4fba, 0xa30c, 0x720d,
10847 +
            0x9ebb, 0x20d6, 0xcc60, 0xd7bb, 0x3b0d, 0x8560, 0x69d6, 0xb2d6, 0x5e60, 0xe00d, 0x0cbb,
10848 +
            0x1760, 0xfbd6, 0x45bb, 0xa90d, 0x6c0e, 0x80b8, 0x3ed5, 0xd263, 0xc9b8, 0x250e, 0x9b63,
10849 +
            0x77d5, 0xacd5, 0x4063, 0xfe0e, 0x12b8, 0x0963, 0xe5d5, 0x5bb8, 0xb70e, 0x660f, 0x8ab9,
10850 +
            0x34d4, 0xd862, 0xc3b9, 0x2f0f, 0x9162, 0x7dd4, 0xa6d4, 0x4a62, 0xf40f, 0x18b9, 0x0362,
10851 +
            0xefd4, 0x51b9, 0xbd0f,
10852 +
        ],
10853 +
        [
10854 +
            0x0000, 0xa010, 0xcb97, 0x6b87, 0x1c99, 0xbc89, 0xd70e, 0x771e, 0x3932, 0x9922, 0xf2a5,
10855 +
            0x52b5, 0x25ab, 0x85bb, 0xee3c, 0x4e2c, 0x7264, 0xd274, 0xb9f3, 0x19e3, 0x6efd, 0xceed,
10856 +
            0xa56a, 0x057a, 0x4b56, 0xeb46, 0x80c1, 0x20d1, 0x57cf, 0xf7df, 0x9c58, 0x3c48, 0xe4c8,
10857 +
            0x44d8, 0x2f5f, 0x8f4f, 0xf851, 0x5841, 0x33c6, 0x93d6, 0xddfa, 0x7dea, 0x166d, 0xb67d,
10858 +
            0xc163, 0x6173, 0x0af4, 0xaae4, 0x96ac, 0x36bc, 0x5d3b, 0xfd2b, 0x8a35, 0x2a25, 0x41a2,
10859 +
            0xe1b2, 0xaf9e, 0x0f8e, 0x6409, 0xc419, 0xb307, 0x1317, 0x7890, 0xd880, 0x4227, 0xe237,
10860 +
            0x89b0, 0x29a0, 0x5ebe, 0xfeae, 0x9529, 0x3539, 0x7b15, 0xdb05, 0xb082, 0x1092, 0x678c,
10861 +
            0xc79c, 0xac1b, 0x0c0b, 0x3043, 0x9053, 0xfbd4, 0x5bc4, 0x2cda, 0x8cca, 0xe74d, 0x475d,
10862 +
            0x0971, 0xa961, 0xc2e6, 0x62f6, 0x15e8, 0xb5f8, 0xde7f, 0x7e6f, 0xa6ef, 0x06ff, 0x6d78,
10863 +
            0xcd68, 0xba76, 0x1a66, 0x71e1, 0xd1f1, 0x9fdd, 0x3fcd, 0x544a, 0xf45a, 0x8344, 0x2354,
10864 +
            0x48d3, 0xe8c3, 0xd48b, 0x749b, 0x1f1c, 0xbf0c, 0xc812, 0x6802, 0x0385, 0xa395, 0xedb9,
10865 +
            0x4da9, 0x262e, 0x863e, 0xf120, 0x5130, 0x3ab7, 0x9aa7, 0x844e, 0x245e, 0x4fd9, 0xefc9,
10866 +
            0x98d7, 0x38c7, 0x5340, 0xf350, 0xbd7c, 0x1d6c, 0x76eb, 0xd6fb, 0xa1e5, 0x01f5, 0x6a72,
10867 +
            0xca62, 0xf62a, 0x563a, 0x3dbd, 0x9dad, 0xeab3, 0x4aa3, 0x2124, 0x8134, 0xcf18, 0x6f08,
10868 +
            0x048f, 0xa49f, 0xd381, 0x7391, 0x1816, 0xb806, 0x6086, 0xc096, 0xab11, 0x0b01, 0x7c1f,
10869 +
            0xdc0f, 0xb788, 0x1798, 0x59b4, 0xf9a4, 0x9223, 0x3233, 0x452d, 0xe53d, 0x8eba, 0x2eaa,
10870 +
            0x12e2, 0xb2f2, 0xd975, 0x7965, 0x0e7b, 0xae6b, 0xc5ec, 0x65fc, 0x2bd0, 0x8bc0, 0xe047,
10871 +
            0x4057, 0x3749, 0x9759, 0xfcde, 0x5cce, 0xc669, 0x6679, 0x0dfe, 0xadee, 0xdaf0, 0x7ae0,
10872 +
            0x1167, 0xb177, 0xff5b, 0x5f4b, 0x34cc, 0x94dc, 0xe3c2, 0x43d2, 0x2855, 0x8845, 0xb40d,
10873 +
            0x141d, 0x7f9a, 0xdf8a, 0xa894, 0x0884, 0x6303, 0xc313, 0x8d3f, 0x2d2f, 0x46a8, 0xe6b8,
10874 +
            0x91a6, 0x31b6, 0x5a31, 0xfa21, 0x22a1, 0x82b1, 0xe936, 0x4926, 0x3e38, 0x9e28, 0xf5af,
10875 +
            0x55bf, 0x1b93, 0xbb83, 0xd004, 0x7014, 0x070a, 0xa71a, 0xcc9d, 0x6c8d, 0x50c5, 0xf0d5,
10876 +
            0x9b52, 0x3b42, 0x4c5c, 0xec4c, 0x87cb, 0x27db, 0x69f7, 0xc9e7, 0xa260, 0x0270, 0x756e,
10877 +
            0xd57e, 0xbef9, 0x1ee9,
10878 +
        ],
10879 +
        [
10880 +
            0x0000, 0x832b, 0x8de1, 0x0eca, 0x9075, 0x135e, 0x1d94, 0x9ebf, 0xab5d, 0x2876, 0x26bc,
10881 +
            0xa597, 0x3b28, 0xb803, 0xb6c9, 0x35e2, 0xdd0d, 0x5e26, 0x50ec, 0xd3c7, 0x4d78, 0xce53,
10882 +
            0xc099, 0x43b2, 0x7650, 0xf57b, 0xfbb1, 0x789a, 0xe625, 0x650e, 0x6bc4, 0xe8ef, 0x31ad,
10883 +
            0xb286, 0xbc4c, 0x3f67, 0xa1d8, 0x22f3, 0x2c39, 0xaf12, 0x9af0, 0x19db, 0x1711, 0x943a,
10884 +
            0x0a85, 0x89ae, 0x8764, 0x044f, 0xeca0, 0x6f8b, 0x6141, 0xe26a, 0x7cd5, 0xfffe, 0xf134,
10885 +
            0x721f, 0x47fd, 0xc4d6, 0xca1c, 0x4937, 0xd788, 0x54a3, 0x5a69, 0xd942, 0x635a, 0xe071,
10886 +
            0xeebb, 0x6d90, 0xf32f, 0x7004, 0x7ece, 0xfde5, 0xc807, 0x4b2c, 0x45e6, 0xc6cd, 0x5872,
10887 +
            0xdb59, 0xd593, 0x56b8, 0xbe57, 0x3d7c, 0x33b6, 0xb09d, 0x2e22, 0xad09, 0xa3c3, 0x20e8,
10888 +
            0x150a, 0x9621, 0x98eb, 0x1bc0, 0x857f, 0x0654, 0x089e, 0x8bb5, 0x52f7, 0xd1dc, 0xdf16,
10889 +
            0x5c3d, 0xc282, 0x41a9, 0x4f63, 0xcc48, 0xf9aa, 0x7a81, 0x744b, 0xf760, 0x69df, 0xeaf4,
10890 +
            0xe43e, 0x6715, 0x8ffa, 0x0cd1, 0x021b, 0x8130, 0x1f8f, 0x9ca4, 0x926e, 0x1145, 0x24a7,
10891 +
            0xa78c, 0xa946, 0x2a6d, 0xb4d2, 0x37f9, 0x3933, 0xba18, 0xc6b4, 0x459f, 0x4b55, 0xc87e,
10892 +
            0x56c1, 0xd5ea, 0xdb20, 0x580b, 0x6de9, 0xeec2, 0xe008, 0x6323, 0xfd9c, 0x7eb7, 0x707d,
10893 +
            0xf356, 0x1bb9, 0x9892, 0x9658, 0x1573, 0x8bcc, 0x08e7, 0x062d, 0x8506, 0xb0e4, 0x33cf,
10894 +
            0x3d05, 0xbe2e, 0x2091, 0xa3ba, 0xad70, 0x2e5b, 0xf719, 0x7432, 0x7af8, 0xf9d3, 0x676c,
10895 +
            0xe447, 0xea8d, 0x69a6, 0x5c44, 0xdf6f, 0xd1a5, 0x528e, 0xcc31, 0x4f1a, 0x41d0, 0xc2fb,
10896 +
            0x2a14, 0xa93f, 0xa7f5, 0x24de, 0xba61, 0x394a, 0x3780, 0xb4ab, 0x8149, 0x0262, 0x0ca8,
10897 +
            0x8f83, 0x113c, 0x9217, 0x9cdd, 0x1ff6, 0xa5ee, 0x26c5, 0x280f, 0xab24, 0x359b, 0xb6b0,
10898 +
            0xb87a, 0x3b51, 0x0eb3, 0x8d98, 0x8352, 0x0079, 0x9ec6, 0x1ded, 0x1327, 0x900c, 0x78e3,
10899 +
            0xfbc8, 0xf502, 0x7629, 0xe896, 0x6bbd, 0x6577, 0xe65c, 0xd3be, 0x5095, 0x5e5f, 0xdd74,
10900 +
            0x43cb, 0xc0e0, 0xce2a, 0x4d01, 0x9443, 0x1768, 0x19a2, 0x9a89, 0x0436, 0x871d, 0x89d7,
10901 +
            0x0afc, 0x3f1e, 0xbc35, 0xb2ff, 0x31d4, 0xaf6b, 0x2c40, 0x228a, 0xa1a1, 0x494e, 0xca65,
10902 +
            0xc4af, 0x4784, 0xd93b, 0x5a10, 0x54da, 0xd7f1, 0xe213, 0x6138, 0x6ff2, 0xecd9, 0x7266,
10903 +
            0xf14d, 0xff87, 0x7cac,
10904 +
        ],
10905 +
    ];
10906 +
10907 +
    pub static CRC16_TELEDISK_TABLE: [[u16; 256]; 16] = [
10908 +
        [
10909 +
            0x0000, 0xa097, 0xe1b9, 0x412e, 0x63e5, 0xc372, 0x825c, 0x22cb, 0xc7ca, 0x675d, 0x2673,
10910 +
            0x86e4, 0xa42f, 0x04b8, 0x4596, 0xe501, 0x2f03, 0x8f94, 0xceba, 0x6e2d, 0x4ce6, 0xec71,
10911 +
            0xad5f, 0x0dc8, 0xe8c9, 0x485e, 0x0970, 0xa9e7, 0x8b2c, 0x2bbb, 0x6a95, 0xca02, 0x5e06,
10912 +
            0xfe91, 0xbfbf, 0x1f28, 0x3de3, 0x9d74, 0xdc5a, 0x7ccd, 0x99cc, 0x395b, 0x7875, 0xd8e2,
10913 +
            0xfa29, 0x5abe, 0x1b90, 0xbb07, 0x7105, 0xd192, 0x90bc, 0x302b, 0x12e0, 0xb277, 0xf359,
10914 +
            0x53ce, 0xb6cf, 0x1658, 0x5776, 0xf7e1, 0xd52a, 0x75bd, 0x3493, 0x9404, 0xbc0c, 0x1c9b,
10915 +
            0x5db5, 0xfd22, 0xdfe9, 0x7f7e, 0x3e50, 0x9ec7, 0x7bc6, 0xdb51, 0x9a7f, 0x3ae8, 0x1823,
10916 +
            0xb8b4, 0xf99a, 0x590d, 0x930f, 0x3398, 0x72b6, 0xd221, 0xf0ea, 0x507d, 0x1153, 0xb1c4,
10917 +
            0x54c5, 0xf452, 0xb57c, 0x15eb, 0x3720, 0x97b7, 0xd699, 0x760e, 0xe20a, 0x429d, 0x03b3,
10918 +
            0xa324, 0x81ef, 0x2178, 0x6056, 0xc0c1, 0x25c0, 0x8557, 0xc479, 0x64ee, 0x4625, 0xe6b2,
10919 +
            0xa79c, 0x070b, 0xcd09, 0x6d9e, 0x2cb0, 0x8c27, 0xaeec, 0x0e7b, 0x4f55, 0xefc2, 0x0ac3,
10920 +
            0xaa54, 0xeb7a, 0x4bed, 0x6926, 0xc9b1, 0x889f, 0x2808, 0xd88f, 0x7818, 0x3936, 0x99a1,
10921 +
            0xbb6a, 0x1bfd, 0x5ad3, 0xfa44, 0x1f45, 0xbfd2, 0xfefc, 0x5e6b, 0x7ca0, 0xdc37, 0x9d19,
10922 +
            0x3d8e, 0xf78c, 0x571b, 0x1635, 0xb6a2, 0x9469, 0x34fe, 0x75d0, 0xd547, 0x3046, 0x90d1,
10923 +
            0xd1ff, 0x7168, 0x53a3, 0xf334, 0xb21a, 0x128d, 0x8689, 0x261e, 0x6730, 0xc7a7, 0xe56c,
10924 +
            0x45fb, 0x04d5, 0xa442, 0x4143, 0xe1d4, 0xa0fa, 0x006d, 0x22a6, 0x8231, 0xc31f, 0x6388,
10925 +
            0xa98a, 0x091d, 0x4833, 0xe8a4, 0xca6f, 0x6af8, 0x2bd6, 0x8b41, 0x6e40, 0xced7, 0x8ff9,
10926 +
            0x2f6e, 0x0da5, 0xad32, 0xec1c, 0x4c8b, 0x6483, 0xc414, 0x853a, 0x25ad, 0x0766, 0xa7f1,
10927 +
            0xe6df, 0x4648, 0xa349, 0x03de, 0x42f0, 0xe267, 0xc0ac, 0x603b, 0x2115, 0x8182, 0x4b80,
10928 +
            0xeb17, 0xaa39, 0x0aae, 0x2865, 0x88f2, 0xc9dc, 0x694b, 0x8c4a, 0x2cdd, 0x6df3, 0xcd64,
10929 +
            0xefaf, 0x4f38, 0x0e16, 0xae81, 0x3a85, 0x9a12, 0xdb3c, 0x7bab, 0x5960, 0xf9f7, 0xb8d9,
10930 +
            0x184e, 0xfd4f, 0x5dd8, 0x1cf6, 0xbc61, 0x9eaa, 0x3e3d, 0x7f13, 0xdf84, 0x1586, 0xb511,
10931 +
            0xf43f, 0x54a8, 0x7663, 0xd6f4, 0x97da, 0x374d, 0xd24c, 0x72db, 0x33f5, 0x9362, 0xb1a9,
10932 +
            0x113e, 0x5010, 0xf087,
10933 +
        ],
10934 +
        [
10935 +
            0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a,
10936 +
            0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0xb807, 0xa98e, 0x9b15, 0x8a9c, 0xfe23, 0xefaa,
10937 +
            0xdd31, 0xccb8, 0x344f, 0x25c6, 0x175d, 0x06d4, 0x726b, 0x63e2, 0x5179, 0x40f0, 0xd099,
10938 +
            0xc110, 0xf38b, 0xe202, 0x96bd, 0x8734, 0xb5af, 0xa426, 0x5cd1, 0x4d58, 0x7fc3, 0x6e4a,
10939 +
            0x1af5, 0x0b7c, 0x39e7, 0x286e, 0x689e, 0x7917, 0x4b8c, 0x5a05, 0x2eba, 0x3f33, 0x0da8,
10940 +
            0x1c21, 0xe4d6, 0xf55f, 0xc7c4, 0xd64d, 0xa2f2, 0xb37b, 0x81e0, 0x9069, 0x01a5, 0x102c,
10941 +
            0x22b7, 0x333e, 0x4781, 0x5608, 0x6493, 0x751a, 0x8ded, 0x9c64, 0xaeff, 0xbf76, 0xcbc9,
10942 +
            0xda40, 0xe8db, 0xf952, 0xb9a2, 0xa82b, 0x9ab0, 0x8b39, 0xff86, 0xee0f, 0xdc94, 0xcd1d,
10943 +
            0x35ea, 0x2463, 0x16f8, 0x0771, 0x73ce, 0x6247, 0x50dc, 0x4155, 0xd13c, 0xc0b5, 0xf22e,
10944 +
            0xe3a7, 0x9718, 0x8691, 0xb40a, 0xa583, 0x5d74, 0x4cfd, 0x7e66, 0x6fef, 0x1b50, 0x0ad9,
10945 +
            0x3842, 0x29cb, 0x693b, 0x78b2, 0x4a29, 0x5ba0, 0x2f1f, 0x3e96, 0x0c0d, 0x1d84, 0xe573,
10946 +
            0xf4fa, 0xc661, 0xd7e8, 0xa357, 0xb2de, 0x8045, 0x91cc, 0x034a, 0x12c3, 0x2058, 0x31d1,
10947 +
            0x456e, 0x54e7, 0x667c, 0x77f5, 0x8f02, 0x9e8b, 0xac10, 0xbd99, 0xc926, 0xd8af, 0xea34,
10948 +
            0xfbbd, 0xbb4d, 0xaac4, 0x985f, 0x89d6, 0xfd69, 0xece0, 0xde7b, 0xcff2, 0x3705, 0x268c,
10949 +
            0x1417, 0x059e, 0x7121, 0x60a8, 0x5233, 0x43ba, 0xd3d3, 0xc25a, 0xf0c1, 0xe148, 0x95f7,
10950 +
            0x847e, 0xb6e5, 0xa76c, 0x5f9b, 0x4e12, 0x7c89, 0x6d00, 0x19bf, 0x0836, 0x3aad, 0x2b24,
10951 +
            0x6bd4, 0x7a5d, 0x48c6, 0x594f, 0x2df0, 0x3c79, 0x0ee2, 0x1f6b, 0xe79c, 0xf615, 0xc48e,
10952 +
            0xd507, 0xa1b8, 0xb031, 0x82aa, 0x9323, 0x02ef, 0x1366, 0x21fd, 0x3074, 0x44cb, 0x5542,
10953 +
            0x67d9, 0x7650, 0x8ea7, 0x9f2e, 0xadb5, 0xbc3c, 0xc883, 0xd90a, 0xeb91, 0xfa18, 0xbae8,
10954 +
            0xab61, 0x99fa, 0x8873, 0xfccc, 0xed45, 0xdfde, 0xce57, 0x36a0, 0x2729, 0x15b2, 0x043b,
10955 +
            0x7084, 0x610d, 0x5396, 0x421f, 0xd276, 0xc3ff, 0xf164, 0xe0ed, 0x9452, 0x85db, 0xb740,
10956 +
            0xa6c9, 0x5e3e, 0x4fb7, 0x7d2c, 0x6ca5, 0x181a, 0x0993, 0x3b08, 0x2a81, 0x6a71, 0x7bf8,
10957 +
            0x4963, 0x58ea, 0x2c55, 0x3ddc, 0x0f47, 0x1ece, 0xe639, 0xf7b0, 0xc52b, 0xd4a2, 0xa01d,
10958 +
            0xb194, 0x830f, 0x9286,
10959 +
        ],
10960 +
        [
10961 +
            0x0000, 0x0694, 0x0d28, 0x0bbc, 0x1a50, 0x1cc4, 0x1778, 0x11ec, 0x34a0, 0x3234, 0x3988,
10962 +
            0x3f1c, 0x2ef0, 0x2864, 0x23d8, 0x254c, 0x6940, 0x6fd4, 0x6468, 0x62fc, 0x7310, 0x7584,
10963 +
            0x7e38, 0x78ac, 0x5de0, 0x5b74, 0x50c8, 0x565c, 0x47b0, 0x4124, 0x4a98, 0x4c0c, 0xd280,
10964 +
            0xd414, 0xdfa8, 0xd93c, 0xc8d0, 0xce44, 0xc5f8, 0xc36c, 0xe620, 0xe0b4, 0xeb08, 0xed9c,
10965 +
            0xfc70, 0xfae4, 0xf158, 0xf7cc, 0xbbc0, 0xbd54, 0xb6e8, 0xb07c, 0xa190, 0xa704, 0xacb8,
10966 +
            0xaa2c, 0x8f60, 0x89f4, 0x8248, 0x84dc, 0x9530, 0x93a4, 0x9818, 0x9e8c, 0x0597, 0x0303,
10967 +
            0x08bf, 0x0e2b, 0x1fc7, 0x1953, 0x12ef, 0x147b, 0x3137, 0x37a3, 0x3c1f, 0x3a8b, 0x2b67,
10968 +
            0x2df3, 0x264f, 0x20db, 0x6cd7, 0x6a43, 0x61ff, 0x676b, 0x7687, 0x7013, 0x7baf, 0x7d3b,
10969 +
            0x5877, 0x5ee3, 0x555f, 0x53cb, 0x4227, 0x44b3, 0x4f0f, 0x499b, 0xd717, 0xd183, 0xda3f,
10970 +
            0xdcab, 0xcd47, 0xcbd3, 0xc06f, 0xc6fb, 0xe3b7, 0xe523, 0xee9f, 0xe80b, 0xf9e7, 0xff73,
10971 +
            0xf4cf, 0xf25b, 0xbe57, 0xb8c3, 0xb37f, 0xb5eb, 0xa407, 0xa293, 0xa92f, 0xafbb, 0x8af7,
10972 +
            0x8c63, 0x87df, 0x814b, 0x90a7, 0x9633, 0x9d8f, 0x9b1b, 0x0b2e, 0x0dba, 0x0606, 0x0092,
10973 +
            0x117e, 0x17ea, 0x1c56, 0x1ac2, 0x3f8e, 0x391a, 0x32a6, 0x3432, 0x25de, 0x234a, 0x28f6,
10974 +
            0x2e62, 0x626e, 0x64fa, 0x6f46, 0x69d2, 0x783e, 0x7eaa, 0x7516, 0x7382, 0x56ce, 0x505a,
10975 +
            0x5be6, 0x5d72, 0x4c9e, 0x4a0a, 0x41b6, 0x4722, 0xd9ae, 0xdf3a, 0xd486, 0xd212, 0xc3fe,
10976 +
            0xc56a, 0xced6, 0xc842, 0xed0e, 0xeb9a, 0xe026, 0xe6b2, 0xf75e, 0xf1ca, 0xfa76, 0xfce2,
10977 +
            0xb0ee, 0xb67a, 0xbdc6, 0xbb52, 0xaabe, 0xac2a, 0xa796, 0xa102, 0x844e, 0x82da, 0x8966,
10978 +
            0x8ff2, 0x9e1e, 0x988a, 0x9336, 0x95a2, 0x0eb9, 0x082d, 0x0391, 0x0505, 0x14e9, 0x127d,
10979 +
            0x19c1, 0x1f55, 0x3a19, 0x3c8d, 0x3731, 0x31a5, 0x2049, 0x26dd, 0x2d61, 0x2bf5, 0x67f9,
10980 +
            0x616d, 0x6ad1, 0x6c45, 0x7da9, 0x7b3d, 0x7081, 0x7615, 0x5359, 0x55cd, 0x5e71, 0x58e5,
10981 +
            0x4909, 0x4f9d, 0x4421, 0x42b5, 0xdc39, 0xdaad, 0xd111, 0xd785, 0xc669, 0xc0fd, 0xcb41,
10982 +
            0xcdd5, 0xe899, 0xee0d, 0xe5b1, 0xe325, 0xf2c9, 0xf45d, 0xffe1, 0xf975, 0xb579, 0xb3ed,
10983 +
            0xb851, 0xbec5, 0xaf29, 0xa9bd, 0xa201, 0xa495, 0x81d9, 0x874d, 0x8cf1, 0x8a65, 0x9b89,
10984 +
            0x9d1d, 0x96a1, 0x9035,
10985 +
        ],
10986 +
        [
10987 +
            0x0000, 0x165c, 0x2cb8, 0x3ae4, 0x5970, 0x4f2c, 0x75c8, 0x6394, 0xb2e0, 0xa4bc, 0x9e58,
10988 +
            0x8804, 0xeb90, 0xfdcc, 0xc728, 0xd174, 0xc557, 0xd30b, 0xe9ef, 0xffb3, 0x9c27, 0x8a7b,
10989 +
            0xb09f, 0xa6c3, 0x77b7, 0x61eb, 0x5b0f, 0x4d53, 0x2ec7, 0x389b, 0x027f, 0x1423, 0x2a39,
10990 +
            0x3c65, 0x0681, 0x10dd, 0x7349, 0x6515, 0x5ff1, 0x49ad, 0x98d9, 0x8e85, 0xb461, 0xa23d,
10991 +
            0xc1a9, 0xd7f5, 0xed11, 0xfb4d, 0xef6e, 0xf932, 0xc3d6, 0xd58a, 0xb61e, 0xa042, 0x9aa6,
10992 +
            0x8cfa, 0x5d8e, 0x4bd2, 0x7136, 0x676a, 0x04fe, 0x12a2, 0x2846, 0x3e1a, 0x5472, 0x422e,
10993 +
            0x78ca, 0x6e96, 0x0d02, 0x1b5e, 0x21ba, 0x37e6, 0xe692, 0xf0ce, 0xca2a, 0xdc76, 0xbfe2,
10994 +
            0xa9be, 0x935a, 0x8506, 0x9125, 0x8779, 0xbd9d, 0xabc1, 0xc855, 0xde09, 0xe4ed, 0xf2b1,
10995 +
            0x23c5, 0x3599, 0x0f7d, 0x1921, 0x7ab5, 0x6ce9, 0x560d, 0x4051, 0x7e4b, 0x6817, 0x52f3,
10996 +
            0x44af, 0x273b, 0x3167, 0x0b83, 0x1ddf, 0xccab, 0xdaf7, 0xe013, 0xf64f, 0x95db, 0x8387,
10997 +
            0xb963, 0xaf3f, 0xbb1c, 0xad40, 0x97a4, 0x81f8, 0xe26c, 0xf430, 0xced4, 0xd888, 0x09fc,
10998 +
            0x1fa0, 0x2544, 0x3318, 0x508c, 0x46d0, 0x7c34, 0x6a68, 0xa8e4, 0xbeb8, 0x845c, 0x9200,
10999 +
            0xf194, 0xe7c8, 0xdd2c, 0xcb70, 0x1a04, 0x0c58, 0x36bc, 0x20e0, 0x4374, 0x5528, 0x6fcc,
11000 +
            0x7990, 0x6db3, 0x7bef, 0x410b, 0x5757, 0x34c3, 0x229f, 0x187b, 0x0e27, 0xdf53, 0xc90f,
11001 +
            0xf3eb, 0xe5b7, 0x8623, 0x907f, 0xaa9b, 0xbcc7, 0x82dd, 0x9481, 0xae65, 0xb839, 0xdbad,
11002 +
            0xcdf1, 0xf715, 0xe149, 0x303d, 0x2661, 0x1c85, 0x0ad9, 0x694d, 0x7f11, 0x45f5, 0x53a9,
11003 +
            0x478a, 0x51d6, 0x6b32, 0x7d6e, 0x1efa, 0x08a6, 0x3242, 0x241e, 0xf56a, 0xe336, 0xd9d2,
11004 +
            0xcf8e, 0xac1a, 0xba46, 0x80a2, 0x96fe, 0xfc96, 0xeaca, 0xd02e, 0xc672, 0xa5e6, 0xb3ba,
11005 +
            0x895e, 0x9f02, 0x4e76, 0x582a, 0x62ce, 0x7492, 0x1706, 0x015a, 0x3bbe, 0x2de2, 0x39c1,
11006 +
            0x2f9d, 0x1579, 0x0325, 0x60b1, 0x76ed, 0x4c09, 0x5a55, 0x8b21, 0x9d7d, 0xa799, 0xb1c5,
11007 +
            0xd251, 0xc40d, 0xfee9, 0xe8b5, 0xd6af, 0xc0f3, 0xfa17, 0xec4b, 0x8fdf, 0x9983, 0xa367,
11008 +
            0xb53b, 0x644f, 0x7213, 0x48f7, 0x5eab, 0x3d3f, 0x2b63, 0x1187, 0x07db, 0x13f8, 0x05a4,
11009 +
            0x3f40, 0x291c, 0x4a88, 0x5cd4, 0x6630, 0x706c, 0xa118, 0xb744, 0x8da0, 0x9bfc, 0xf868,
11010 +
            0xee34, 0xd4d0, 0xc28c,
11011 +
        ],
11012 +
        [
11013 +
            0x0000, 0xf15f, 0x4229, 0xb376, 0x8452, 0x750d, 0xc67b, 0x3724, 0xa833, 0x596c, 0xea1a,
11014 +
            0x1b45, 0x2c61, 0xdd3e, 0x6e48, 0x9f17, 0xf0f1, 0x01ae, 0xb2d8, 0x4387, 0x74a3, 0x85fc,
11015 +
            0x368a, 0xc7d5, 0x58c2, 0xa99d, 0x1aeb, 0xebb4, 0xdc90, 0x2dcf, 0x9eb9, 0x6fe6, 0x4175,
11016 +
            0xb02a, 0x035c, 0xf203, 0xc527, 0x3478, 0x870e, 0x7651, 0xe946, 0x1819, 0xab6f, 0x5a30,
11017 +
            0x6d14, 0x9c4b, 0x2f3d, 0xde62, 0xb184, 0x40db, 0xf3ad, 0x02f2, 0x35d6, 0xc489, 0x77ff,
11018 +
            0x86a0, 0x19b7, 0xe8e8, 0x5b9e, 0xaac1, 0x9de5, 0x6cba, 0xdfcc, 0x2e93, 0x82ea, 0x73b5,
11019 +
            0xc0c3, 0x319c, 0x06b8, 0xf7e7, 0x4491, 0xb5ce, 0x2ad9, 0xdb86, 0x68f0, 0x99af, 0xae8b,
11020 +
            0x5fd4, 0xeca2, 0x1dfd, 0x721b, 0x8344, 0x3032, 0xc16d, 0xf649, 0x0716, 0xb460, 0x453f,
11021 +
            0xda28, 0x2b77, 0x9801, 0x695e, 0x5e7a, 0xaf25, 0x1c53, 0xed0c, 0xc39f, 0x32c0, 0x81b6,
11022 +
            0x70e9, 0x47cd, 0xb692, 0x05e4, 0xf4bb, 0x6bac, 0x9af3, 0x2985, 0xd8da, 0xeffe, 0x1ea1,
11023 +
            0xadd7, 0x5c88, 0x336e, 0xc231, 0x7147, 0x8018, 0xb73c, 0x4663, 0xf515, 0x044a, 0x9b5d,
11024 +
            0x6a02, 0xd974, 0x282b, 0x1f0f, 0xee50, 0x5d26, 0xac79, 0xa543, 0x541c, 0xe76a, 0x1635,
11025 +
            0x2111, 0xd04e, 0x6338, 0x9267, 0x0d70, 0xfc2f, 0x4f59, 0xbe06, 0x8922, 0x787d, 0xcb0b,
11026 +
            0x3a54, 0x55b2, 0xa4ed, 0x179b, 0xe6c4, 0xd1e0, 0x20bf, 0x93c9, 0x6296, 0xfd81, 0x0cde,
11027 +
            0xbfa8, 0x4ef7, 0x79d3, 0x888c, 0x3bfa, 0xcaa5, 0xe436, 0x1569, 0xa61f, 0x5740, 0x6064,
11028 +
            0x913b, 0x224d, 0xd312, 0x4c05, 0xbd5a, 0x0e2c, 0xff73, 0xc857, 0x3908, 0x8a7e, 0x7b21,
11029 +
            0x14c7, 0xe598, 0x56ee, 0xa7b1, 0x9095, 0x61ca, 0xd2bc, 0x23e3, 0xbcf4, 0x4dab, 0xfedd,
11030 +
            0x0f82, 0x38a6, 0xc9f9, 0x7a8f, 0x8bd0, 0x27a9, 0xd6f6, 0x6580, 0x94df, 0xa3fb, 0x52a4,
11031 +
            0xe1d2, 0x108d, 0x8f9a, 0x7ec5, 0xcdb3, 0x3cec, 0x0bc8, 0xfa97, 0x49e1, 0xb8be, 0xd758,
11032 +
            0x2607, 0x9571, 0x642e, 0x530a, 0xa255, 0x1123, 0xe07c, 0x7f6b, 0x8e34, 0x3d42, 0xcc1d,
11033 +
            0xfb39, 0x0a66, 0xb910, 0x484f, 0x66dc, 0x9783, 0x24f5, 0xd5aa, 0xe28e, 0x13d1, 0xa0a7,
11034 +
            0x51f8, 0xceef, 0x3fb0, 0x8cc6, 0x7d99, 0x4abd, 0xbbe2, 0x0894, 0xf9cb, 0x962d, 0x6772,
11035 +
            0xd404, 0x255b, 0x127f, 0xe320, 0x5056, 0xa109, 0x3e1e, 0xcf41, 0x7c37, 0x8d68, 0xba4c,
11036 +
            0x4b13, 0xf865, 0x093a,
11037 +
        ],
11038 +
        [
11039 +
            0x0000, 0xea11, 0x74b5, 0x9ea4, 0xe96a, 0x037b, 0x9ddf, 0x77ce, 0x7243, 0x9852, 0x06f6,
11040 +
            0xece7, 0x9b29, 0x7138, 0xef9c, 0x058d, 0xe486, 0x0e97, 0x9033, 0x7a22, 0x0dec, 0xe7fd,
11041 +
            0x7959, 0x9348, 0x96c5, 0x7cd4, 0xe270, 0x0861, 0x7faf, 0x95be, 0x0b1a, 0xe10b, 0x699b,
11042 +
            0x838a, 0x1d2e, 0xf73f, 0x80f1, 0x6ae0, 0xf444, 0x1e55, 0x1bd8, 0xf1c9, 0x6f6d, 0x857c,
11043 +
            0xf2b2, 0x18a3, 0x8607, 0x6c16, 0x8d1d, 0x670c, 0xf9a8, 0x13b9, 0x6477, 0x8e66, 0x10c2,
11044 +
            0xfad3, 0xff5e, 0x154f, 0x8beb, 0x61fa, 0x1634, 0xfc25, 0x6281, 0x8890, 0xd336, 0x3927,
11045 +
            0xa783, 0x4d92, 0x3a5c, 0xd04d, 0x4ee9, 0xa4f8, 0xa175, 0x4b64, 0xd5c0, 0x3fd1, 0x481f,
11046 +
            0xa20e, 0x3caa, 0xd6bb, 0x37b0, 0xdda1, 0x4305, 0xa914, 0xdeda, 0x34cb, 0xaa6f, 0x407e,
11047 +
            0x45f3, 0xafe2, 0x3146, 0xdb57, 0xac99, 0x4688, 0xd82c, 0x323d, 0xbaad, 0x50bc, 0xce18,
11048 +
            0x2409, 0x53c7, 0xb9d6, 0x2772, 0xcd63, 0xc8ee, 0x22ff, 0xbc5b, 0x564a, 0x2184, 0xcb95,
11049 +
            0x5531, 0xbf20, 0x5e2b, 0xb43a, 0x2a9e, 0xc08f, 0xb741, 0x5d50, 0xc3f4, 0x29e5, 0x2c68,
11050 +
            0xc679, 0x58dd, 0xb2cc, 0xc502, 0x2f13, 0xb1b7, 0x5ba6, 0x06fb, 0xecea, 0x724e, 0x985f,
11051 +
            0xef91, 0x0580, 0x9b24, 0x7135, 0x74b8, 0x9ea9, 0x000d, 0xea1c, 0x9dd2, 0x77c3, 0xe967,
11052 +
            0x0376, 0xe27d, 0x086c, 0x96c8, 0x7cd9, 0x0b17, 0xe106, 0x7fa2, 0x95b3, 0x903e, 0x7a2f,
11053 +
            0xe48b, 0x0e9a, 0x7954, 0x9345, 0x0de1, 0xe7f0, 0x6f60, 0x8571, 0x1bd5, 0xf1c4, 0x860a,
11054 +
            0x6c1b, 0xf2bf, 0x18ae, 0x1d23, 0xf732, 0x6996, 0x8387, 0xf449, 0x1e58, 0x80fc, 0x6aed,
11055 +
            0x8be6, 0x61f7, 0xff53, 0x1542, 0x628c, 0x889d, 0x1639, 0xfc28, 0xf9a5, 0x13b4, 0x8d10,
11056 +
            0x6701, 0x10cf, 0xfade, 0x647a, 0x8e6b, 0xd5cd, 0x3fdc, 0xa178, 0x4b69, 0x3ca7, 0xd6b6,
11057 +
            0x4812, 0xa203, 0xa78e, 0x4d9f, 0xd33b, 0x392a, 0x4ee4, 0xa4f5, 0x3a51, 0xd040, 0x314b,
11058 +
            0xdb5a, 0x45fe, 0xafef, 0xd821, 0x3230, 0xac94, 0x4685, 0x4308, 0xa919, 0x37bd, 0xddac,
11059 +
            0xaa62, 0x4073, 0xded7, 0x34c6, 0xbc56, 0x5647, 0xc8e3, 0x22f2, 0x553c, 0xbf2d, 0x2189,
11060 +
            0xcb98, 0xce15, 0x2404, 0xbaa0, 0x50b1, 0x277f, 0xcd6e, 0x53ca, 0xb9db, 0x58d0, 0xb2c1,
11061 +
            0x2c65, 0xc674, 0xb1ba, 0x5bab, 0xc50f, 0x2f1e, 0x2a93, 0xc082, 0x5e26, 0xb437, 0xc3f9,
11062 +
            0x29e8, 0xb74c, 0x5d5d,
11063 +
        ],
11064 +
        [
11065 +
            0x0000, 0x0df6, 0x1bec, 0x161a, 0x37d8, 0x3a2e, 0x2c34, 0x21c2, 0x6fb0, 0x6246, 0x745c,
11066 +
            0x79aa, 0x5868, 0x559e, 0x4384, 0x4e72, 0xdf60, 0xd296, 0xc48c, 0xc97a, 0xe8b8, 0xe54e,
11067 +
            0xf354, 0xfea2, 0xb0d0, 0xbd26, 0xab3c, 0xa6ca, 0x8708, 0x8afe, 0x9ce4, 0x9112, 0x1e57,
11068 +
            0x13a1, 0x05bb, 0x084d, 0x298f, 0x2479, 0x3263, 0x3f95, 0x71e7, 0x7c11, 0x6a0b, 0x67fd,
11069 +
            0x463f, 0x4bc9, 0x5dd3, 0x5025, 0xc137, 0xccc1, 0xdadb, 0xd72d, 0xf6ef, 0xfb19, 0xed03,
11070 +
            0xe0f5, 0xae87, 0xa371, 0xb56b, 0xb89d, 0x995f, 0x94a9, 0x82b3, 0x8f45, 0x3cae, 0x3158,
11071 +
            0x2742, 0x2ab4, 0x0b76, 0x0680, 0x109a, 0x1d6c, 0x531e, 0x5ee8, 0x48f2, 0x4504, 0x64c6,
11072 +
            0x6930, 0x7f2a, 0x72dc, 0xe3ce, 0xee38, 0xf822, 0xf5d4, 0xd416, 0xd9e0, 0xcffa, 0xc20c,
11073 +
            0x8c7e, 0x8188, 0x9792, 0x9a64, 0xbba6, 0xb650, 0xa04a, 0xadbc, 0x22f9, 0x2f0f, 0x3915,
11074 +
            0x34e3, 0x1521, 0x18d7, 0x0ecd, 0x033b, 0x4d49, 0x40bf, 0x56a5, 0x5b53, 0x7a91, 0x7767,
11075 +
            0x617d, 0x6c8b, 0xfd99, 0xf06f, 0xe675, 0xeb83, 0xca41, 0xc7b7, 0xd1ad, 0xdc5b, 0x9229,
11076 +
            0x9fdf, 0x89c5, 0x8433, 0xa5f1, 0xa807, 0xbe1d, 0xb3eb, 0x795c, 0x74aa, 0x62b0, 0x6f46,
11077 +
            0x4e84, 0x4372, 0x5568, 0x589e, 0x16ec, 0x1b1a, 0x0d00, 0x00f6, 0x2134, 0x2cc2, 0x3ad8,
11078 +
            0x372e, 0xa63c, 0xabca, 0xbdd0, 0xb026, 0x91e4, 0x9c12, 0x8a08, 0x87fe, 0xc98c, 0xc47a,
11079 +
            0xd260, 0xdf96, 0xfe54, 0xf3a2, 0xe5b8, 0xe84e, 0x670b, 0x6afd, 0x7ce7, 0x7111, 0x50d3,
11080 +
            0x5d25, 0x4b3f, 0x46c9, 0x08bb, 0x054d, 0x1357, 0x1ea1, 0x3f63, 0x3295, 0x248f, 0x2979,
11081 +
            0xb86b, 0xb59d, 0xa387, 0xae71, 0x8fb3, 0x8245, 0x945f, 0x99a9, 0xd7db, 0xda2d, 0xcc37,
11082 +
            0xc1c1, 0xe003, 0xedf5, 0xfbef, 0xf619, 0x45f2, 0x4804, 0x5e1e, 0x53e8, 0x722a, 0x7fdc,
11083 +
            0x69c6, 0x6430, 0x2a42, 0x27b4, 0x31ae, 0x3c58, 0x1d9a, 0x106c, 0x0676, 0x0b80, 0x9a92,
11084 +
            0x9764, 0x817e, 0x8c88, 0xad4a, 0xa0bc, 0xb6a6, 0xbb50, 0xf522, 0xf8d4, 0xeece, 0xe338,
11085 +
            0xc2fa, 0xcf0c, 0xd916, 0xd4e0, 0x5ba5, 0x5653, 0x4049, 0x4dbf, 0x6c7d, 0x618b, 0x7791,
11086 +
            0x7a67, 0x3415, 0x39e3, 0x2ff9, 0x220f, 0x03cd, 0x0e3b, 0x1821, 0x15d7, 0x84c5, 0x8933,
11087 +
            0x9f29, 0x92df, 0xb31d, 0xbeeb, 0xa8f1, 0xa507, 0xeb75, 0xe683, 0xf099, 0xfd6f, 0xdcad,
11088 +
            0xd15b, 0xc741, 0xcab7,
11089 +
        ],
11090 +
        [
11091 +
            0x0000, 0xf2b8, 0x45e7, 0xb75f, 0x8bce, 0x7976, 0xce29, 0x3c91, 0xb70b, 0x45b3, 0xf2ec,
11092 +
            0x0054, 0x3cc5, 0xce7d, 0x7922, 0x8b9a, 0xce81, 0x3c39, 0x8b66, 0x79de, 0x454f, 0xb7f7,
11093 +
            0x00a8, 0xf210, 0x798a, 0x8b32, 0x3c6d, 0xced5, 0xf244, 0x00fc, 0xb7a3, 0x451b, 0x3d95,
11094 +
            0xcf2d, 0x7872, 0x8aca, 0xb65b, 0x44e3, 0xf3bc, 0x0104, 0x8a9e, 0x7826, 0xcf79, 0x3dc1,
11095 +
            0x0150, 0xf3e8, 0x44b7, 0xb60f, 0xf314, 0x01ac, 0xb6f3, 0x444b, 0x78da, 0x8a62, 0x3d3d,
11096 +
            0xcf85, 0x441f, 0xb6a7, 0x01f8, 0xf340, 0xcfd1, 0x3d69, 0x8a36, 0x788e, 0x7b2a, 0x8992,
11097 +
            0x3ecd, 0xcc75, 0xf0e4, 0x025c, 0xb503, 0x47bb, 0xcc21, 0x3e99, 0x89c6, 0x7b7e, 0x47ef,
11098 +
            0xb557, 0x0208, 0xf0b0, 0xb5ab, 0x4713, 0xf04c, 0x02f4, 0x3e65, 0xccdd, 0x7b82, 0x893a,
11099 +
            0x02a0, 0xf018, 0x4747, 0xb5ff, 0x896e, 0x7bd6, 0xcc89, 0x3e31, 0x46bf, 0xb407, 0x0358,
11100 +
            0xf1e0, 0xcd71, 0x3fc9, 0x8896, 0x7a2e, 0xf1b4, 0x030c, 0xb453, 0x46eb, 0x7a7a, 0x88c2,
11101 +
            0x3f9d, 0xcd25, 0x883e, 0x7a86, 0xcdd9, 0x3f61, 0x03f0, 0xf148, 0x4617, 0xb4af, 0x3f35,
11102 +
            0xcd8d, 0x7ad2, 0x886a, 0xb4fb, 0x4643, 0xf11c, 0x03a4, 0xf654, 0x04ec, 0xb3b3, 0x410b,
11103 +
            0x7d9a, 0x8f22, 0x387d, 0xcac5, 0x415f, 0xb3e7, 0x04b8, 0xf600, 0xca91, 0x3829, 0x8f76,
11104 +
            0x7dce, 0x38d5, 0xca6d, 0x7d32, 0x8f8a, 0xb31b, 0x41a3, 0xf6fc, 0x0444, 0x8fde, 0x7d66,
11105 +
            0xca39, 0x3881, 0x0410, 0xf6a8, 0x41f7, 0xb34f, 0xcbc1, 0x3979, 0x8e26, 0x7c9e, 0x400f,
11106 +
            0xb2b7, 0x05e8, 0xf750, 0x7cca, 0x8e72, 0x392d, 0xcb95, 0xf704, 0x05bc, 0xb2e3, 0x405b,
11107 +
            0x0540, 0xf7f8, 0x40a7, 0xb21f, 0x8e8e, 0x7c36, 0xcb69, 0x39d1, 0xb24b, 0x40f3, 0xf7ac,
11108 +
            0x0514, 0x3985, 0xcb3d, 0x7c62, 0x8eda, 0x8d7e, 0x7fc6, 0xc899, 0x3a21, 0x06b0, 0xf408,
11109 +
            0x4357, 0xb1ef, 0x3a75, 0xc8cd, 0x7f92, 0x8d2a, 0xb1bb, 0x4303, 0xf45c, 0x06e4, 0x43ff,
11110 +
            0xb147, 0x0618, 0xf4a0, 0xc831, 0x3a89, 0x8dd6, 0x7f6e, 0xf4f4, 0x064c, 0xb113, 0x43ab,
11111 +
            0x7f3a, 0x8d82, 0x3add, 0xc865, 0xb0eb, 0x4253, 0xf50c, 0x07b4, 0x3b25, 0xc99d, 0x7ec2,
11112 +
            0x8c7a, 0x07e0, 0xf558, 0x4207, 0xb0bf, 0x8c2e, 0x7e96, 0xc9c9, 0x3b71, 0x7e6a, 0x8cd2,
11113 +
            0x3b8d, 0xc935, 0xf5a4, 0x071c, 0xb043, 0x42fb, 0xc961, 0x3bd9, 0x8c86, 0x7e3e, 0x42af,
11114 +
            0xb017, 0x0748, 0xf5f0,
11115 +
        ],
11116 +
        [
11117 +
            0x0000, 0x4c3f, 0x987e, 0xd441, 0x906b, 0xdc54, 0x0815, 0x442a, 0x8041, 0xcc7e, 0x183f,
11118 +
            0x5400, 0x102a, 0x5c15, 0x8854, 0xc46b, 0xa015, 0xec2a, 0x386b, 0x7454, 0x307e, 0x7c41,
11119 +
            0xa800, 0xe43f, 0x2054, 0x6c6b, 0xb82a, 0xf415, 0xb03f, 0xfc00, 0x2841, 0x647e, 0xe0bd,
11120 +
            0xac82, 0x78c3, 0x34fc, 0x70d6, 0x3ce9, 0xe8a8, 0xa497, 0x60fc, 0x2cc3, 0xf882, 0xb4bd,
11121 +
            0xf097, 0xbca8, 0x68e9, 0x24d6, 0x40a8, 0x0c97, 0xd8d6, 0x94e9, 0xd0c3, 0x9cfc, 0x48bd,
11122 +
            0x0482, 0xc0e9, 0x8cd6, 0x5897, 0x14a8, 0x5082, 0x1cbd, 0xc8fc, 0x84c3, 0x61ed, 0x2dd2,
11123 +
            0xf993, 0xb5ac, 0xf186, 0xbdb9, 0x69f8, 0x25c7, 0xe1ac, 0xad93, 0x79d2, 0x35ed, 0x71c7,
11124 +
            0x3df8, 0xe9b9, 0xa586, 0xc1f8, 0x8dc7, 0x5986, 0x15b9, 0x5193, 0x1dac, 0xc9ed, 0x85d2,
11125 +
            0x41b9, 0x0d86, 0xd9c7, 0x95f8, 0xd1d2, 0x9ded, 0x49ac, 0x0593, 0x8150, 0xcd6f, 0x192e,
11126 +
            0x5511, 0x113b, 0x5d04, 0x8945, 0xc57a, 0x0111, 0x4d2e, 0x996f, 0xd550, 0x917a, 0xdd45,
11127 +
            0x0904, 0x453b, 0x2145, 0x6d7a, 0xb93b, 0xf504, 0xb12e, 0xfd11, 0x2950, 0x656f, 0xa104,
11128 +
            0xed3b, 0x397a, 0x7545, 0x316f, 0x7d50, 0xa911, 0xe52e, 0xc3da, 0x8fe5, 0x5ba4, 0x179b,
11129 +
            0x53b1, 0x1f8e, 0xcbcf, 0x87f0, 0x439b, 0x0fa4, 0xdbe5, 0x97da, 0xd3f0, 0x9fcf, 0x4b8e,
11130 +
            0x07b1, 0x63cf, 0x2ff0, 0xfbb1, 0xb78e, 0xf3a4, 0xbf9b, 0x6bda, 0x27e5, 0xe38e, 0xafb1,
11131 +
            0x7bf0, 0x37cf, 0x73e5, 0x3fda, 0xeb9b, 0xa7a4, 0x2367, 0x6f58, 0xbb19, 0xf726, 0xb30c,
11132 +
            0xff33, 0x2b72, 0x674d, 0xa326, 0xef19, 0x3b58, 0x7767, 0x334d, 0x7f72, 0xab33, 0xe70c,
11133 +
            0x8372, 0xcf4d, 0x1b0c, 0x5733, 0x1319, 0x5f26, 0x8b67, 0xc758, 0x0333, 0x4f0c, 0x9b4d,
11134 +
            0xd772, 0x9358, 0xdf67, 0x0b26, 0x4719, 0xa237, 0xee08, 0x3a49, 0x7676, 0x325c, 0x7e63,
11135 +
            0xaa22, 0xe61d, 0x2276, 0x6e49, 0xba08, 0xf637, 0xb21d, 0xfe22, 0x2a63, 0x665c, 0x0222,
11136 +
            0x4e1d, 0x9a5c, 0xd663, 0x9249, 0xde76, 0x0a37, 0x4608, 0x8263, 0xce5c, 0x1a1d, 0x5622,
11137 +
            0x1208, 0x5e37, 0x8a76, 0xc649, 0x428a, 0x0eb5, 0xdaf4, 0x96cb, 0xd2e1, 0x9ede, 0x4a9f,
11138 +
            0x06a0, 0xc2cb, 0x8ef4, 0x5ab5, 0x168a, 0x52a0, 0x1e9f, 0xcade, 0x86e1, 0xe29f, 0xaea0,
11139 +
            0x7ae1, 0x36de, 0x72f4, 0x3ecb, 0xea8a, 0xa6b5, 0x62de, 0x2ee1, 0xfaa0, 0xb69f, 0xf2b5,
11140 +
            0xbe8a, 0x6acb, 0x26f4,
11141 +
        ],
11142 +
        [
11143 +
            0x0000, 0x2723, 0x4e46, 0x6965, 0x9c8c, 0xbbaf, 0xd2ca, 0xf5e9, 0x998f, 0xbeac, 0xd7c9,
11144 +
            0xf0ea, 0x0503, 0x2220, 0x4b45, 0x6c66, 0x9389, 0xb4aa, 0xddcf, 0xfaec, 0x0f05, 0x2826,
11145 +
            0x4143, 0x6660, 0x0a06, 0x2d25, 0x4440, 0x6363, 0x968a, 0xb1a9, 0xd8cc, 0xffef, 0x8785,
11146 +
            0xa0a6, 0xc9c3, 0xeee0, 0x1b09, 0x3c2a, 0x554f, 0x726c, 0x1e0a, 0x3929, 0x504c, 0x776f,
11147 +
            0x8286, 0xa5a5, 0xccc0, 0xebe3, 0x140c, 0x332f, 0x5a4a, 0x7d69, 0x8880, 0xafa3, 0xc6c6,
11148 +
            0xe1e5, 0x8d83, 0xaaa0, 0xc3c5, 0xe4e6, 0x110f, 0x362c, 0x5f49, 0x786a, 0xaf9d, 0x88be,
11149 +
            0xe1db, 0xc6f8, 0x3311, 0x1432, 0x7d57, 0x5a74, 0x3612, 0x1131, 0x7854, 0x5f77, 0xaa9e,
11150 +
            0x8dbd, 0xe4d8, 0xc3fb, 0x3c14, 0x1b37, 0x7252, 0x5571, 0xa098, 0x87bb, 0xeede, 0xc9fd,
11151 +
            0xa59b, 0x82b8, 0xebdd, 0xccfe, 0x3917, 0x1e34, 0x7751, 0x5072, 0x2818, 0x0f3b, 0x665e,
11152 +
            0x417d, 0xb494, 0x93b7, 0xfad2, 0xddf1, 0xb197, 0x96b4, 0xffd1, 0xd8f2, 0x2d1b, 0x0a38,
11153 +
            0x635d, 0x447e, 0xbb91, 0x9cb2, 0xf5d7, 0xd2f4, 0x271d, 0x003e, 0x695b, 0x4e78, 0x221e,
11154 +
            0x053d, 0x6c58, 0x4b7b, 0xbe92, 0x99b1, 0xf0d4, 0xd7f7, 0xffad, 0xd88e, 0xb1eb, 0x96c8,
11155 +
            0x6321, 0x4402, 0x2d67, 0x0a44, 0x6622, 0x4101, 0x2864, 0x0f47, 0xfaae, 0xdd8d, 0xb4e8,
11156 +
            0x93cb, 0x6c24, 0x4b07, 0x2262, 0x0541, 0xf0a8, 0xd78b, 0xbeee, 0x99cd, 0xf5ab, 0xd288,
11157 +
            0xbbed, 0x9cce, 0x6927, 0x4e04, 0x2761, 0x0042, 0x7828, 0x5f0b, 0x366e, 0x114d, 0xe4a4,
11158 +
            0xc387, 0xaae2, 0x8dc1, 0xe1a7, 0xc684, 0xafe1, 0x88c2, 0x7d2b, 0x5a08, 0x336d, 0x144e,
11159 +
            0xeba1, 0xcc82, 0xa5e7, 0x82c4, 0x772d, 0x500e, 0x396b, 0x1e48, 0x722e, 0x550d, 0x3c68,
11160 +
            0x1b4b, 0xeea2, 0xc981, 0xa0e4, 0x87c7, 0x5030, 0x7713, 0x1e76, 0x3955, 0xccbc, 0xeb9f,
11161 +
            0x82fa, 0xa5d9, 0xc9bf, 0xee9c, 0x87f9, 0xa0da, 0x5533, 0x7210, 0x1b75, 0x3c56, 0xc3b9,
11162 +
            0xe49a, 0x8dff, 0xaadc, 0x5f35, 0x7816, 0x1173, 0x3650, 0x5a36, 0x7d15, 0x1470, 0x3353,
11163 +
            0xc6ba, 0xe199, 0x88fc, 0xafdf, 0xd7b5, 0xf096, 0x99f3, 0xbed0, 0x4b39, 0x6c1a, 0x057f,
11164 +
            0x225c, 0x4e3a, 0x6919, 0x007c, 0x275f, 0xd2b6, 0xf595, 0x9cf0, 0xbbd3, 0x443c, 0x631f,
11165 +
            0x0a7a, 0x2d59, 0xd8b0, 0xff93, 0x96f6, 0xb1d5, 0xddb3, 0xfa90, 0x93f5, 0xb4d6, 0x413f,
11166 +
            0x661c, 0x0f79, 0x285a,
11167 +
        ],
11168 +
        [
11169 +
            0x0000, 0x5fcd, 0xbf9a, 0xe057, 0xdfa3, 0x806e, 0x6039, 0x3ff4, 0x1fd1, 0x401c, 0xa04b,
11170 +
            0xff86, 0xc072, 0x9fbf, 0x7fe8, 0x2025, 0x3fa2, 0x606f, 0x8038, 0xdff5, 0xe001, 0xbfcc,
11171 +
            0x5f9b, 0x0056, 0x2073, 0x7fbe, 0x9fe9, 0xc024, 0xffd0, 0xa01d, 0x404a, 0x1f87, 0x7f44,
11172 +
            0x2089, 0xc0de, 0x9f13, 0xa0e7, 0xff2a, 0x1f7d, 0x40b0, 0x6095, 0x3f58, 0xdf0f, 0x80c2,
11173 +
            0xbf36, 0xe0fb, 0x00ac, 0x5f61, 0x40e6, 0x1f2b, 0xff7c, 0xa0b1, 0x9f45, 0xc088, 0x20df,
11174 +
            0x7f12, 0x5f37, 0x00fa, 0xe0ad, 0xbf60, 0x8094, 0xdf59, 0x3f0e, 0x60c3, 0xfe88, 0xa145,
11175 +
            0x4112, 0x1edf, 0x212b, 0x7ee6, 0x9eb1, 0xc17c, 0xe159, 0xbe94, 0x5ec3, 0x010e, 0x3efa,
11176 +
            0x6137, 0x8160, 0xdead, 0xc12a, 0x9ee7, 0x7eb0, 0x217d, 0x1e89, 0x4144, 0xa113, 0xfede,
11177 +
            0xdefb, 0x8136, 0x6161, 0x3eac, 0x0158, 0x5e95, 0xbec2, 0xe10f, 0x81cc, 0xde01, 0x3e56,
11178 +
            0x619b, 0x5e6f, 0x01a2, 0xe1f5, 0xbe38, 0x9e1d, 0xc1d0, 0x2187, 0x7e4a, 0x41be, 0x1e73,
11179 +
            0xfe24, 0xa1e9, 0xbe6e, 0xe1a3, 0x01f4, 0x5e39, 0x61cd, 0x3e00, 0xde57, 0x819a, 0xa1bf,
11180 +
            0xfe72, 0x1e25, 0x41e8, 0x7e1c, 0x21d1, 0xc186, 0x9e4b, 0x5d87, 0x024a, 0xe21d, 0xbdd0,
11181 +
            0x8224, 0xdde9, 0x3dbe, 0x6273, 0x4256, 0x1d9b, 0xfdcc, 0xa201, 0x9df5, 0xc238, 0x226f,
11182 +
            0x7da2, 0x6225, 0x3de8, 0xddbf, 0x8272, 0xbd86, 0xe24b, 0x021c, 0x5dd1, 0x7df4, 0x2239,
11183 +
            0xc26e, 0x9da3, 0xa257, 0xfd9a, 0x1dcd, 0x4200, 0x22c3, 0x7d0e, 0x9d59, 0xc294, 0xfd60,
11184 +
            0xa2ad, 0x42fa, 0x1d37, 0x3d12, 0x62df, 0x8288, 0xdd45, 0xe2b1, 0xbd7c, 0x5d2b, 0x02e6,
11185 +
            0x1d61, 0x42ac, 0xa2fb, 0xfd36, 0xc2c2, 0x9d0f, 0x7d58, 0x2295, 0x02b0, 0x5d7d, 0xbd2a,
11186 +
            0xe2e7, 0xdd13, 0x82de, 0x6289, 0x3d44, 0xa30f, 0xfcc2, 0x1c95, 0x4358, 0x7cac, 0x2361,
11187 +
            0xc336, 0x9cfb, 0xbcde, 0xe313, 0x0344, 0x5c89, 0x637d, 0x3cb0, 0xdce7, 0x832a, 0x9cad,
11188 +
            0xc360, 0x2337, 0x7cfa, 0x430e, 0x1cc3, 0xfc94, 0xa359, 0x837c, 0xdcb1, 0x3ce6, 0x632b,
11189 +
            0x5cdf, 0x0312, 0xe345, 0xbc88, 0xdc4b, 0x8386, 0x63d1, 0x3c1c, 0x03e8, 0x5c25, 0xbc72,
11190 +
            0xe3bf, 0xc39a, 0x9c57, 0x7c00, 0x23cd, 0x1c39, 0x43f4, 0xa3a3, 0xfc6e, 0xe3e9, 0xbc24,
11191 +
            0x5c73, 0x03be, 0x3c4a, 0x6387, 0x83d0, 0xdc1d, 0xfc38, 0xa3f5, 0x43a2, 0x1c6f, 0x239b,
11192 +
            0x7c56, 0x9c01, 0xc3cc,
11193 +
        ],
11194 +
        [
11195 +
            0x0000, 0xbb0e, 0xd68b, 0x6d85, 0x0d81, 0xb68f, 0xdb0a, 0x6004, 0x1b02, 0xa00c, 0xcd89,
11196 +
            0x7687, 0x1683, 0xad8d, 0xc008, 0x7b06, 0x3604, 0x8d0a, 0xe08f, 0x5b81, 0x3b85, 0x808b,
11197 +
            0xed0e, 0x5600, 0x2d06, 0x9608, 0xfb8d, 0x4083, 0x2087, 0x9b89, 0xf60c, 0x4d02, 0x6c08,
11198 +
            0xd706, 0xba83, 0x018d, 0x6189, 0xda87, 0xb702, 0x0c0c, 0x770a, 0xcc04, 0xa181, 0x1a8f,
11199 +
            0x7a8b, 0xc185, 0xac00, 0x170e, 0x5a0c, 0xe102, 0x8c87, 0x3789, 0x578d, 0xec83, 0x8106,
11200 +
            0x3a08, 0x410e, 0xfa00, 0x9785, 0x2c8b, 0x4c8f, 0xf781, 0x9a04, 0x210a, 0xd810, 0x631e,
11201 +
            0x0e9b, 0xb595, 0xd591, 0x6e9f, 0x031a, 0xb814, 0xc312, 0x781c, 0x1599, 0xae97, 0xce93,
11202 +
            0x759d, 0x1818, 0xa316, 0xee14, 0x551a, 0x389f, 0x8391, 0xe395, 0x589b, 0x351e, 0x8e10,
11203 +
            0xf516, 0x4e18, 0x239d, 0x9893, 0xf897, 0x4399, 0x2e1c, 0x9512, 0xb418, 0x0f16, 0x6293,
11204 +
            0xd99d, 0xb999, 0x0297, 0x6f12, 0xd41c, 0xaf1a, 0x1414, 0x7991, 0xc29f, 0xa29b, 0x1995,
11205 +
            0x7410, 0xcf1e, 0x821c, 0x3912, 0x5497, 0xef99, 0x8f9d, 0x3493, 0x5916, 0xe218, 0x991e,
11206 +
            0x2210, 0x4f95, 0xf49b, 0x949f, 0x2f91, 0x4214, 0xf91a, 0x10b7, 0xabb9, 0xc63c, 0x7d32,
11207 +
            0x1d36, 0xa638, 0xcbbd, 0x70b3, 0x0bb5, 0xb0bb, 0xdd3e, 0x6630, 0x0634, 0xbd3a, 0xd0bf,
11208 +
            0x6bb1, 0x26b3, 0x9dbd, 0xf038, 0x4b36, 0x2b32, 0x903c, 0xfdb9, 0x46b7, 0x3db1, 0x86bf,
11209 +
            0xeb3a, 0x5034, 0x3030, 0x8b3e, 0xe6bb, 0x5db5, 0x7cbf, 0xc7b1, 0xaa34, 0x113a, 0x713e,
11210 +
            0xca30, 0xa7b5, 0x1cbb, 0x67bd, 0xdcb3, 0xb136, 0x0a38, 0x6a3c, 0xd132, 0xbcb7, 0x07b9,
11211 +
            0x4abb, 0xf1b5, 0x9c30, 0x273e, 0x473a, 0xfc34, 0x91b1, 0x2abf, 0x51b9, 0xeab7, 0x8732,
11212 +
            0x3c3c, 0x5c38, 0xe736, 0x8ab3, 0x31bd, 0xc8a7, 0x73a9, 0x1e2c, 0xa522, 0xc526, 0x7e28,
11213 +
            0x13ad, 0xa8a3, 0xd3a5, 0x68ab, 0x052e, 0xbe20, 0xde24, 0x652a, 0x08af, 0xb3a1, 0xfea3,
11214 +
            0x45ad, 0x2828, 0x9326, 0xf322, 0x482c, 0x25a9, 0x9ea7, 0xe5a1, 0x5eaf, 0x332a, 0x8824,
11215 +
            0xe820, 0x532e, 0x3eab, 0x85a5, 0xa4af, 0x1fa1, 0x7224, 0xc92a, 0xa92e, 0x1220, 0x7fa5,
11216 +
            0xc4ab, 0xbfad, 0x04a3, 0x6926, 0xd228, 0xb22c, 0x0922, 0x64a7, 0xdfa9, 0x92ab, 0x29a5,
11217 +
            0x4420, 0xff2e, 0x9f2a, 0x2424, 0x49a1, 0xf2af, 0x89a9, 0x32a7, 0x5f22, 0xe42c, 0x8428,
11218 +
            0x3f26, 0x52a3, 0xe9ad,
11219 +
        ],
11220 +
        [
11221 +
            0x0000, 0x216e, 0x42dc, 0x63b2, 0x85b8, 0xa4d6, 0xc764, 0xe60a, 0xabe7, 0x8a89, 0xe93b,
11222 +
            0xc855, 0x2e5f, 0x0f31, 0x6c83, 0x4ded, 0xf759, 0xd637, 0xb585, 0x94eb, 0x72e1, 0x538f,
11223 +
            0x303d, 0x1153, 0x5cbe, 0x7dd0, 0x1e62, 0x3f0c, 0xd906, 0xf868, 0x9bda, 0xbab4, 0x4e25,
11224 +
            0x6f4b, 0x0cf9, 0x2d97, 0xcb9d, 0xeaf3, 0x8941, 0xa82f, 0xe5c2, 0xc4ac, 0xa71e, 0x8670,
11225 +
            0x607a, 0x4114, 0x22a6, 0x03c8, 0xb97c, 0x9812, 0xfba0, 0xdace, 0x3cc4, 0x1daa, 0x7e18,
11226 +
            0x5f76, 0x129b, 0x33f5, 0x5047, 0x7129, 0x9723, 0xb64d, 0xd5ff, 0xf491, 0x9c4a, 0xbd24,
11227 +
            0xde96, 0xfff8, 0x19f2, 0x389c, 0x5b2e, 0x7a40, 0x37ad, 0x16c3, 0x7571, 0x541f, 0xb215,
11228 +
            0x937b, 0xf0c9, 0xd1a7, 0x6b13, 0x4a7d, 0x29cf, 0x08a1, 0xeeab, 0xcfc5, 0xac77, 0x8d19,
11229 +
            0xc0f4, 0xe19a, 0x8228, 0xa346, 0x454c, 0x6422, 0x0790, 0x26fe, 0xd26f, 0xf301, 0x90b3,
11230 +
            0xb1dd, 0x57d7, 0x76b9, 0x150b, 0x3465, 0x7988, 0x58e6, 0x3b54, 0x1a3a, 0xfc30, 0xdd5e,
11231 +
            0xbeec, 0x9f82, 0x2536, 0x0458, 0x67ea, 0x4684, 0xa08e, 0x81e0, 0xe252, 0xc33c, 0x8ed1,
11232 +
            0xafbf, 0xcc0d, 0xed63, 0x0b69, 0x2a07, 0x49b5, 0x68db, 0x9803, 0xb96d, 0xdadf, 0xfbb1,
11233 +
            0x1dbb, 0x3cd5, 0x5f67, 0x7e09, 0x33e4, 0x128a, 0x7138, 0x5056, 0xb65c, 0x9732, 0xf480,
11234 +
            0xd5ee, 0x6f5a, 0x4e34, 0x2d86, 0x0ce8, 0xeae2, 0xcb8c, 0xa83e, 0x8950, 0xc4bd, 0xe5d3,
11235 +
            0x8661, 0xa70f, 0x4105, 0x606b, 0x03d9, 0x22b7, 0xd626, 0xf748, 0x94fa, 0xb594, 0x539e,
11236 +
            0x72f0, 0x1142, 0x302c, 0x7dc1, 0x5caf, 0x3f1d, 0x1e73, 0xf879, 0xd917, 0xbaa5, 0x9bcb,
11237 +
            0x217f, 0x0011, 0x63a3, 0x42cd, 0xa4c7, 0x85a9, 0xe61b, 0xc775, 0x8a98, 0xabf6, 0xc844,
11238 +
            0xe92a, 0x0f20, 0x2e4e, 0x4dfc, 0x6c92, 0x0449, 0x2527, 0x4695, 0x67fb, 0x81f1, 0xa09f,
11239 +
            0xc32d, 0xe243, 0xafae, 0x8ec0, 0xed72, 0xcc1c, 0x2a16, 0x0b78, 0x68ca, 0x49a4, 0xf310,
11240 +
            0xd27e, 0xb1cc, 0x90a2, 0x76a8, 0x57c6, 0x3474, 0x151a, 0x58f7, 0x7999, 0x1a2b, 0x3b45,
11241 +
            0xdd4f, 0xfc21, 0x9f93, 0xbefd, 0x4a6c, 0x6b02, 0x08b0, 0x29de, 0xcfd4, 0xeeba, 0x8d08,
11242 +
            0xac66, 0xe18b, 0xc0e5, 0xa357, 0x8239, 0x6433, 0x455d, 0x26ef, 0x0781, 0xbd35, 0x9c5b,
11243 +
            0xffe9, 0xde87, 0x388d, 0x19e3, 0x7a51, 0x5b3f, 0x16d2, 0x37bc, 0x540e, 0x7560, 0x936a,
11244 +
            0xb204, 0xd1b6, 0xf0d8,
11245 +
        ],
11246 +
        [
11247 +
            0x0000, 0x9091, 0x81b5, 0x1124, 0xa3fd, 0x336c, 0x2248, 0xb2d9, 0xe76d, 0x77fc, 0x66d8,
11248 +
            0xf649, 0x4490, 0xd401, 0xc525, 0x55b4, 0x6e4d, 0xfedc, 0xeff8, 0x7f69, 0xcdb0, 0x5d21,
11249 +
            0x4c05, 0xdc94, 0x8920, 0x19b1, 0x0895, 0x9804, 0x2add, 0xba4c, 0xab68, 0x3bf9, 0xdc9a,
11250 +
            0x4c0b, 0x5d2f, 0xcdbe, 0x7f67, 0xeff6, 0xfed2, 0x6e43, 0x3bf7, 0xab66, 0xba42, 0x2ad3,
11251 +
            0x980a, 0x089b, 0x19bf, 0x892e, 0xb2d7, 0x2246, 0x3362, 0xa3f3, 0x112a, 0x81bb, 0x909f,
11252 +
            0x000e, 0x55ba, 0xc52b, 0xd40f, 0x449e, 0xf647, 0x66d6, 0x77f2, 0xe763, 0x19a3, 0x8932,
11253 +
            0x9816, 0x0887, 0xba5e, 0x2acf, 0x3beb, 0xab7a, 0xfece, 0x6e5f, 0x7f7b, 0xefea, 0x5d33,
11254 +
            0xcda2, 0xdc86, 0x4c17, 0x77ee, 0xe77f, 0xf65b, 0x66ca, 0xd413, 0x4482, 0x55a6, 0xc537,
11255 +
            0x9083, 0x0012, 0x1136, 0x81a7, 0x337e, 0xa3ef, 0xb2cb, 0x225a, 0xc539, 0x55a8, 0x448c,
11256 +
            0xd41d, 0x66c4, 0xf655, 0xe771, 0x77e0, 0x2254, 0xb2c5, 0xa3e1, 0x3370, 0x81a9, 0x1138,
11257 +
            0x001c, 0x908d, 0xab74, 0x3be5, 0x2ac1, 0xba50, 0x0889, 0x9818, 0x893c, 0x19ad, 0x4c19,
11258 +
            0xdc88, 0xcdac, 0x5d3d, 0xefe4, 0x7f75, 0x6e51, 0xfec0, 0x3346, 0xa3d7, 0xb2f3, 0x2262,
11259 +
            0x90bb, 0x002a, 0x110e, 0x819f, 0xd42b, 0x44ba, 0x559e, 0xc50f, 0x77d6, 0xe747, 0xf663,
11260 +
            0x66f2, 0x5d0b, 0xcd9a, 0xdcbe, 0x4c2f, 0xfef6, 0x6e67, 0x7f43, 0xefd2, 0xba66, 0x2af7,
11261 +
            0x3bd3, 0xab42, 0x199b, 0x890a, 0x982e, 0x08bf, 0xefdc, 0x7f4d, 0x6e69, 0xfef8, 0x4c21,
11262 +
            0xdcb0, 0xcd94, 0x5d05, 0x08b1, 0x9820, 0x8904, 0x1995, 0xab4c, 0x3bdd, 0x2af9, 0xba68,
11263 +
            0x8191, 0x1100, 0x0024, 0x90b5, 0x226c, 0xb2fd, 0xa3d9, 0x3348, 0x66fc, 0xf66d, 0xe749,
11264 +
            0x77d8, 0xc501, 0x5590, 0x44b4, 0xd425, 0x2ae5, 0xba74, 0xab50, 0x3bc1, 0x8918, 0x1989,
11265 +
            0x08ad, 0x983c, 0xcd88, 0x5d19, 0x4c3d, 0xdcac, 0x6e75, 0xfee4, 0xefc0, 0x7f51, 0x44a8,
11266 +
            0xd439, 0xc51d, 0x558c, 0xe755, 0x77c4, 0x66e0, 0xf671, 0xa3c5, 0x3354, 0x2270, 0xb2e1,
11267 +
            0x0038, 0x90a9, 0x818d, 0x111c, 0xf67f, 0x66ee, 0x77ca, 0xe75b, 0x5582, 0xc513, 0xd437,
11268 +
            0x44a6, 0x1112, 0x8183, 0x90a7, 0x0036, 0xb2ef, 0x227e, 0x335a, 0xa3cb, 0x9832, 0x08a3,
11269 +
            0x1987, 0x8916, 0x3bcf, 0xab5e, 0xba7a, 0x2aeb, 0x7f5f, 0xefce, 0xfeea, 0x6e7b, 0xdca2,
11270 +
            0x4c33, 0x5d17, 0xcd86,
11271 +
        ],
11272 +
        [
11273 +
            0x0000, 0x668c, 0xcd18, 0xab94, 0x3aa7, 0x5c2b, 0xf7bf, 0x9133, 0x754e, 0x13c2, 0xb856,
11274 +
            0xdeda, 0x4fe9, 0x2965, 0x82f1, 0xe47d, 0xea9c, 0x8c10, 0x2784, 0x4108, 0xd03b, 0xb6b7,
11275 +
            0x1d23, 0x7baf, 0x9fd2, 0xf95e, 0x52ca, 0x3446, 0xa575, 0xc3f9, 0x686d, 0x0ee1, 0x75af,
11276 +
            0x1323, 0xb8b7, 0xde3b, 0x4f08, 0x2984, 0x8210, 0xe49c, 0x00e1, 0x666d, 0xcdf9, 0xab75,
11277 +
            0x3a46, 0x5cca, 0xf75e, 0x91d2, 0x9f33, 0xf9bf, 0x522b, 0x34a7, 0xa594, 0xc318, 0x688c,
11278 +
            0x0e00, 0xea7d, 0x8cf1, 0x2765, 0x41e9, 0xd0da, 0xb656, 0x1dc2, 0x7b4e, 0xeb5e, 0x8dd2,
11279 +
            0x2646, 0x40ca, 0xd1f9, 0xb775, 0x1ce1, 0x7a6d, 0x9e10, 0xf89c, 0x5308, 0x3584, 0xa4b7,
11280 +
            0xc23b, 0x69af, 0x0f23, 0x01c2, 0x674e, 0xccda, 0xaa56, 0x3b65, 0x5de9, 0xf67d, 0x90f1,
11281 +
            0x748c, 0x1200, 0xb994, 0xdf18, 0x4e2b, 0x28a7, 0x8333, 0xe5bf, 0x9ef1, 0xf87d, 0x53e9,
11282 +
            0x3565, 0xa456, 0xc2da, 0x694e, 0x0fc2, 0xebbf, 0x8d33, 0x26a7, 0x402b, 0xd118, 0xb794,
11283 +
            0x1c00, 0x7a8c, 0x746d, 0x12e1, 0xb975, 0xdff9, 0x4eca, 0x2846, 0x83d2, 0xe55e, 0x0123,
11284 +
            0x67af, 0xcc3b, 0xaab7, 0x3b84, 0x5d08, 0xf69c, 0x9010, 0x762b, 0x10a7, 0xbb33, 0xddbf,
11285 +
            0x4c8c, 0x2a00, 0x8194, 0xe718, 0x0365, 0x65e9, 0xce7d, 0xa8f1, 0x39c2, 0x5f4e, 0xf4da,
11286 +
            0x9256, 0x9cb7, 0xfa3b, 0x51af, 0x3723, 0xa610, 0xc09c, 0x6b08, 0x0d84, 0xe9f9, 0x8f75,
11287 +
            0x24e1, 0x426d, 0xd35e, 0xb5d2, 0x1e46, 0x78ca, 0x0384, 0x6508, 0xce9c, 0xa810, 0x3923,
11288 +
            0x5faf, 0xf43b, 0x92b7, 0x76ca, 0x1046, 0xbbd2, 0xdd5e, 0x4c6d, 0x2ae1, 0x8175, 0xe7f9,
11289 +
            0xe918, 0x8f94, 0x2400, 0x428c, 0xd3bf, 0xb533, 0x1ea7, 0x782b, 0x9c56, 0xfada, 0x514e,
11290 +
            0x37c2, 0xa6f1, 0xc07d, 0x6be9, 0x0d65, 0x9d75, 0xfbf9, 0x506d, 0x36e1, 0xa7d2, 0xc15e,
11291 +
            0x6aca, 0x0c46, 0xe83b, 0x8eb7, 0x2523, 0x43af, 0xd29c, 0xb410, 0x1f84, 0x7908, 0x77e9,
11292 +
            0x1165, 0xbaf1, 0xdc7d, 0x4d4e, 0x2bc2, 0x8056, 0xe6da, 0x02a7, 0x642b, 0xcfbf, 0xa933,
11293 +
            0x3800, 0x5e8c, 0xf518, 0x9394, 0xe8da, 0x8e56, 0x25c2, 0x434e, 0xd27d, 0xb4f1, 0x1f65,
11294 +
            0x79e9, 0x9d94, 0xfb18, 0x508c, 0x3600, 0xa733, 0xc1bf, 0x6a2b, 0x0ca7, 0x0246, 0x64ca,
11295 +
            0xcf5e, 0xa9d2, 0x38e1, 0x5e6d, 0xf5f9, 0x9375, 0x7708, 0x1184, 0xba10, 0xdc9c, 0x4daf,
11296 +
            0x2b23, 0x80b7, 0xe63b,
11297 +
        ],
11298 +
        [
11299 +
            0x0000, 0xec56, 0x783b, 0x946d, 0xf076, 0x1c20, 0x884d, 0x641b, 0x407b, 0xac2d, 0x3840,
11300 +
            0xd416, 0xb00d, 0x5c5b, 0xc836, 0x2460, 0x80f6, 0x6ca0, 0xf8cd, 0x149b, 0x7080, 0x9cd6,
11301 +
            0x08bb, 0xe4ed, 0xc08d, 0x2cdb, 0xb8b6, 0x54e0, 0x30fb, 0xdcad, 0x48c0, 0xa496, 0xa17b,
11302 +
            0x4d2d, 0xd940, 0x3516, 0x510d, 0xbd5b, 0x2936, 0xc560, 0xe100, 0x0d56, 0x993b, 0x756d,
11303 +
            0x1176, 0xfd20, 0x694d, 0x851b, 0x218d, 0xcddb, 0x59b6, 0xb5e0, 0xd1fb, 0x3dad, 0xa9c0,
11304 +
            0x4596, 0x61f6, 0x8da0, 0x19cd, 0xf59b, 0x9180, 0x7dd6, 0xe9bb, 0x05ed, 0xe261, 0x0e37,
11305 +
            0x9a5a, 0x760c, 0x1217, 0xfe41, 0x6a2c, 0x867a, 0xa21a, 0x4e4c, 0xda21, 0x3677, 0x526c,
11306 +
            0xbe3a, 0x2a57, 0xc601, 0x6297, 0x8ec1, 0x1aac, 0xf6fa, 0x92e1, 0x7eb7, 0xeada, 0x068c,
11307 +
            0x22ec, 0xceba, 0x5ad7, 0xb681, 0xd29a, 0x3ecc, 0xaaa1, 0x46f7, 0x431a, 0xaf4c, 0x3b21,
11308 +
            0xd777, 0xb36c, 0x5f3a, 0xcb57, 0x2701, 0x0361, 0xef37, 0x7b5a, 0x970c, 0xf317, 0x1f41,
11309 +
            0x8b2c, 0x677a, 0xc3ec, 0x2fba, 0xbbd7, 0x5781, 0x339a, 0xdfcc, 0x4ba1, 0xa7f7, 0x8397,
11310 +
            0x6fc1, 0xfbac, 0x17fa, 0x73e1, 0x9fb7, 0x0bda, 0xe78c, 0x6455, 0x8803, 0x1c6e, 0xf038,
11311 +
            0x9423, 0x7875, 0xec18, 0x004e, 0x242e, 0xc878, 0x5c15, 0xb043, 0xd458, 0x380e, 0xac63,
11312 +
            0x4035, 0xe4a3, 0x08f5, 0x9c98, 0x70ce, 0x14d5, 0xf883, 0x6cee, 0x80b8, 0xa4d8, 0x488e,
11313 +
            0xdce3, 0x30b5, 0x54ae, 0xb8f8, 0x2c95, 0xc0c3, 0xc52e, 0x2978, 0xbd15, 0x5143, 0x3558,
11314 +
            0xd90e, 0x4d63, 0xa135, 0x8555, 0x6903, 0xfd6e, 0x1138, 0x7523, 0x9975, 0x0d18, 0xe14e,
11315 +
            0x45d8, 0xa98e, 0x3de3, 0xd1b5, 0xb5ae, 0x59f8, 0xcd95, 0x21c3, 0x05a3, 0xe9f5, 0x7d98,
11316 +
            0x91ce, 0xf5d5, 0x1983, 0x8dee, 0x61b8, 0x8634, 0x6a62, 0xfe0f, 0x1259, 0x7642, 0x9a14,
11317 +
            0x0e79, 0xe22f, 0xc64f, 0x2a19, 0xbe74, 0x5222, 0x3639, 0xda6f, 0x4e02, 0xa254, 0x06c2,
11318 +
            0xea94, 0x7ef9, 0x92af, 0xf6b4, 0x1ae2, 0x8e8f, 0x62d9, 0x46b9, 0xaaef, 0x3e82, 0xd2d4,
11319 +
            0xb6cf, 0x5a99, 0xcef4, 0x22a2, 0x274f, 0xcb19, 0x5f74, 0xb322, 0xd739, 0x3b6f, 0xaf02,
11320 +
            0x4354, 0x6734, 0x8b62, 0x1f0f, 0xf359, 0x9742, 0x7b14, 0xef79, 0x032f, 0xa7b9, 0x4bef,
11321 +
            0xdf82, 0x33d4, 0x57cf, 0xbb99, 0x2ff4, 0xc3a2, 0xe7c2, 0x0b94, 0x9ff9, 0x73af, 0x17b4,
11322 +
            0xfbe2, 0x6f8f, 0x83d9,
11323 +
        ],
11324 +
    ];
11325 +
11326 +
    pub static CRC16_TMS37157_TABLE: [[u16; 256]; 16] = [
11327 +
        [
11328 +
            0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a,
11329 +
            0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c,
11330 +
            0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102,
11331 +
            0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1,
11332 +
            0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5,
11333 +
            0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d,
11334 +
            0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868,
11335 +
            0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
11336 +
            0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014,
11337 +
            0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3,
11338 +
            0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf,
11339 +
            0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693,
11340 +
            0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76,
11341 +
            0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948,
11342 +
            0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e,
11343 +
            0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
11344 +
            0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1,
11345 +
            0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1,
11346 +
            0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d,
11347 +
            0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e,
11348 +
            0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238,
11349 +
            0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606,
11350 +
            0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3,
11351 +
            0x2c6a, 0x1ef1, 0x0f78,
11352 +
        ],
11353 +
        [
11354 +
            0x0000, 0x19d8, 0x33b0, 0x2a68, 0x6760, 0x7eb8, 0x54d0, 0x4d08, 0xcec0, 0xd718, 0xfd70,
11355 +
            0xe4a8, 0xa9a0, 0xb078, 0x9a10, 0x83c8, 0x9591, 0x8c49, 0xa621, 0xbff9, 0xf2f1, 0xeb29,
11356 +
            0xc141, 0xd899, 0x5b51, 0x4289, 0x68e1, 0x7139, 0x3c31, 0x25e9, 0x0f81, 0x1659, 0x2333,
11357 +
            0x3aeb, 0x1083, 0x095b, 0x4453, 0x5d8b, 0x77e3, 0x6e3b, 0xedf3, 0xf42b, 0xde43, 0xc79b,
11358 +
            0x8a93, 0x934b, 0xb923, 0xa0fb, 0xb6a2, 0xaf7a, 0x8512, 0x9cca, 0xd1c2, 0xc81a, 0xe272,
11359 +
            0xfbaa, 0x7862, 0x61ba, 0x4bd2, 0x520a, 0x1f02, 0x06da, 0x2cb2, 0x356a, 0x4666, 0x5fbe,
11360 +
            0x75d6, 0x6c0e, 0x2106, 0x38de, 0x12b6, 0x0b6e, 0x88a6, 0x917e, 0xbb16, 0xa2ce, 0xefc6,
11361 +
            0xf61e, 0xdc76, 0xc5ae, 0xd3f7, 0xca2f, 0xe047, 0xf99f, 0xb497, 0xad4f, 0x8727, 0x9eff,
11362 +
            0x1d37, 0x04ef, 0x2e87, 0x375f, 0x7a57, 0x638f, 0x49e7, 0x503f, 0x6555, 0x7c8d, 0x56e5,
11363 +
            0x4f3d, 0x0235, 0x1bed, 0x3185, 0x285d, 0xab95, 0xb24d, 0x9825, 0x81fd, 0xccf5, 0xd52d,
11364 +
            0xff45, 0xe69d, 0xf0c4, 0xe91c, 0xc374, 0xdaac, 0x97a4, 0x8e7c, 0xa414, 0xbdcc, 0x3e04,
11365 +
            0x27dc, 0x0db4, 0x146c, 0x5964, 0x40bc, 0x6ad4, 0x730c, 0x8ccc, 0x9514, 0xbf7c, 0xa6a4,
11366 +
            0xebac, 0xf274, 0xd81c, 0xc1c4, 0x420c, 0x5bd4, 0x71bc, 0x6864, 0x256c, 0x3cb4, 0x16dc,
11367 +
            0x0f04, 0x195d, 0x0085, 0x2aed, 0x3335, 0x7e3d, 0x67e5, 0x4d8d, 0x5455, 0xd79d, 0xce45,
11368 +
            0xe42d, 0xfdf5, 0xb0fd, 0xa925, 0x834d, 0x9a95, 0xafff, 0xb627, 0x9c4f, 0x8597, 0xc89f,
11369 +
            0xd147, 0xfb2f, 0xe2f7, 0x613f, 0x78e7, 0x528f, 0x4b57, 0x065f, 0x1f87, 0x35ef, 0x2c37,
11370 +
            0x3a6e, 0x23b6, 0x09de, 0x1006, 0x5d0e, 0x44d6, 0x6ebe, 0x7766, 0xf4ae, 0xed76, 0xc71e,
11371 +
            0xdec6, 0x93ce, 0x8a16, 0xa07e, 0xb9a6, 0xcaaa, 0xd372, 0xf91a, 0xe0c2, 0xadca, 0xb412,
11372 +
            0x9e7a, 0x87a2, 0x046a, 0x1db2, 0x37da, 0x2e02, 0x630a, 0x7ad2, 0x50ba, 0x4962, 0x5f3b,
11373 +
            0x46e3, 0x6c8b, 0x7553, 0x385b, 0x2183, 0x0beb, 0x1233, 0x91fb, 0x8823, 0xa24b, 0xbb93,
11374 +
            0xf69b, 0xef43, 0xc52b, 0xdcf3, 0xe999, 0xf041, 0xda29, 0xc3f1, 0x8ef9, 0x9721, 0xbd49,
11375 +
            0xa491, 0x2759, 0x3e81, 0x14e9, 0x0d31, 0x4039, 0x59e1, 0x7389, 0x6a51, 0x7c08, 0x65d0,
11376 +
            0x4fb8, 0x5660, 0x1b68, 0x02b0, 0x28d8, 0x3100, 0xb2c8, 0xab10, 0x8178, 0x98a0, 0xd5a8,
11377 +
            0xcc70, 0xe618, 0xffc0,
11378 +
        ],
11379 +
        [
11380 +
            0x0000, 0x5adc, 0xb5b8, 0xef64, 0x6361, 0x39bd, 0xd6d9, 0x8c05, 0xc6c2, 0x9c1e, 0x737a,
11381 +
            0x29a6, 0xa5a3, 0xff7f, 0x101b, 0x4ac7, 0x8595, 0xdf49, 0x302d, 0x6af1, 0xe6f4, 0xbc28,
11382 +
            0x534c, 0x0990, 0x4357, 0x198b, 0xf6ef, 0xac33, 0x2036, 0x7aea, 0x958e, 0xcf52, 0x033b,
11383 +
            0x59e7, 0xb683, 0xec5f, 0x605a, 0x3a86, 0xd5e2, 0x8f3e, 0xc5f9, 0x9f25, 0x7041, 0x2a9d,
11384 +
            0xa698, 0xfc44, 0x1320, 0x49fc, 0x86ae, 0xdc72, 0x3316, 0x69ca, 0xe5cf, 0xbf13, 0x5077,
11385 +
            0x0aab, 0x406c, 0x1ab0, 0xf5d4, 0xaf08, 0x230d, 0x79d1, 0x96b5, 0xcc69, 0x0676, 0x5caa,
11386 +
            0xb3ce, 0xe912, 0x6517, 0x3fcb, 0xd0af, 0x8a73, 0xc0b4, 0x9a68, 0x750c, 0x2fd0, 0xa3d5,
11387 +
            0xf909, 0x166d, 0x4cb1, 0x83e3, 0xd93f, 0x365b, 0x6c87, 0xe082, 0xba5e, 0x553a, 0x0fe6,
11388 +
            0x4521, 0x1ffd, 0xf099, 0xaa45, 0x2640, 0x7c9c, 0x93f8, 0xc924, 0x054d, 0x5f91, 0xb0f5,
11389 +
            0xea29, 0x662c, 0x3cf0, 0xd394, 0x8948, 0xc38f, 0x9953, 0x7637, 0x2ceb, 0xa0ee, 0xfa32,
11390 +
            0x1556, 0x4f8a, 0x80d8, 0xda04, 0x3560, 0x6fbc, 0xe3b9, 0xb965, 0x5601, 0x0cdd, 0x461a,
11391 +
            0x1cc6, 0xf3a2, 0xa97e, 0x257b, 0x7fa7, 0x90c3, 0xca1f, 0x0cec, 0x5630, 0xb954, 0xe388,
11392 +
            0x6f8d, 0x3551, 0xda35, 0x80e9, 0xca2e, 0x90f2, 0x7f96, 0x254a, 0xa94f, 0xf393, 0x1cf7,
11393 +
            0x462b, 0x8979, 0xd3a5, 0x3cc1, 0x661d, 0xea18, 0xb0c4, 0x5fa0, 0x057c, 0x4fbb, 0x1567,
11394 +
            0xfa03, 0xa0df, 0x2cda, 0x7606, 0x9962, 0xc3be, 0x0fd7, 0x550b, 0xba6f, 0xe0b3, 0x6cb6,
11395 +
            0x366a, 0xd90e, 0x83d2, 0xc915, 0x93c9, 0x7cad, 0x2671, 0xaa74, 0xf0a8, 0x1fcc, 0x4510,
11396 +
            0x8a42, 0xd09e, 0x3ffa, 0x6526, 0xe923, 0xb3ff, 0x5c9b, 0x0647, 0x4c80, 0x165c, 0xf938,
11397 +
            0xa3e4, 0x2fe1, 0x753d, 0x9a59, 0xc085, 0x0a9a, 0x5046, 0xbf22, 0xe5fe, 0x69fb, 0x3327,
11398 +
            0xdc43, 0x869f, 0xcc58, 0x9684, 0x79e0, 0x233c, 0xaf39, 0xf5e5, 0x1a81, 0x405d, 0x8f0f,
11399 +
            0xd5d3, 0x3ab7, 0x606b, 0xec6e, 0xb6b2, 0x59d6, 0x030a, 0x49cd, 0x1311, 0xfc75, 0xa6a9,
11400 +
            0x2aac, 0x7070, 0x9f14, 0xc5c8, 0x09a1, 0x537d, 0xbc19, 0xe6c5, 0x6ac0, 0x301c, 0xdf78,
11401 +
            0x85a4, 0xcf63, 0x95bf, 0x7adb, 0x2007, 0xac02, 0xf6de, 0x19ba, 0x4366, 0x8c34, 0xd6e8,
11402 +
            0x398c, 0x6350, 0xef55, 0xb589, 0x5aed, 0x0031, 0x4af6, 0x102a, 0xff4e, 0xa592, 0x2997,
11403 +
            0x734b, 0x9c2f, 0xc6f3,
11404 +
        ],
11405 +
        [
11406 +
            0x0000, 0x1cbb, 0x3976, 0x25cd, 0x72ec, 0x6e57, 0x4b9a, 0x5721, 0xe5d8, 0xf963, 0xdcae,
11407 +
            0xc015, 0x9734, 0x8b8f, 0xae42, 0xb2f9, 0xc3a1, 0xdf1a, 0xfad7, 0xe66c, 0xb14d, 0xadf6,
11408 +
            0x883b, 0x9480, 0x2679, 0x3ac2, 0x1f0f, 0x03b4, 0x5495, 0x482e, 0x6de3, 0x7158, 0x8f53,
11409 +
            0x93e8, 0xb625, 0xaa9e, 0xfdbf, 0xe104, 0xc4c9, 0xd872, 0x6a8b, 0x7630, 0x53fd, 0x4f46,
11410 +
            0x1867, 0x04dc, 0x2111, 0x3daa, 0x4cf2, 0x5049, 0x7584, 0x693f, 0x3e1e, 0x22a5, 0x0768,
11411 +
            0x1bd3, 0xa92a, 0xb591, 0x905c, 0x8ce7, 0xdbc6, 0xc77d, 0xe2b0, 0xfe0b, 0x16b7, 0x0a0c,
11412 +
            0x2fc1, 0x337a, 0x645b, 0x78e0, 0x5d2d, 0x4196, 0xf36f, 0xefd4, 0xca19, 0xd6a2, 0x8183,
11413 +
            0x9d38, 0xb8f5, 0xa44e, 0xd516, 0xc9ad, 0xec60, 0xf0db, 0xa7fa, 0xbb41, 0x9e8c, 0x8237,
11414 +
            0x30ce, 0x2c75, 0x09b8, 0x1503, 0x4222, 0x5e99, 0x7b54, 0x67ef, 0x99e4, 0x855f, 0xa092,
11415 +
            0xbc29, 0xeb08, 0xf7b3, 0xd27e, 0xcec5, 0x7c3c, 0x6087, 0x454a, 0x59f1, 0x0ed0, 0x126b,
11416 +
            0x37a6, 0x2b1d, 0x5a45, 0x46fe, 0x6333, 0x7f88, 0x28a9, 0x3412, 0x11df, 0x0d64, 0xbf9d,
11417 +
            0xa326, 0x86eb, 0x9a50, 0xcd71, 0xd1ca, 0xf407, 0xe8bc, 0x2d6e, 0x31d5, 0x1418, 0x08a3,
11418 +
            0x5f82, 0x4339, 0x66f4, 0x7a4f, 0xc8b6, 0xd40d, 0xf1c0, 0xed7b, 0xba5a, 0xa6e1, 0x832c,
11419 +
            0x9f97, 0xeecf, 0xf274, 0xd7b9, 0xcb02, 0x9c23, 0x8098, 0xa555, 0xb9ee, 0x0b17, 0x17ac,
11420 +
            0x3261, 0x2eda, 0x79fb, 0x6540, 0x408d, 0x5c36, 0xa23d, 0xbe86, 0x9b4b, 0x87f0, 0xd0d1,
11421 +
            0xcc6a, 0xe9a7, 0xf51c, 0x47e5, 0x5b5e, 0x7e93, 0x6228, 0x3509, 0x29b2, 0x0c7f, 0x10c4,
11422 +
            0x619c, 0x7d27, 0x58ea, 0x4451, 0x1370, 0x0fcb, 0x2a06, 0x36bd, 0x8444, 0x98ff, 0xbd32,
11423 +
            0xa189, 0xf6a8, 0xea13, 0xcfde, 0xd365, 0x3bd9, 0x2762, 0x02af, 0x1e14, 0x4935, 0x558e,
11424 +
            0x7043, 0x6cf8, 0xde01, 0xc2ba, 0xe777, 0xfbcc, 0xaced, 0xb056, 0x959b, 0x8920, 0xf878,
11425 +
            0xe4c3, 0xc10e, 0xddb5, 0x8a94, 0x962f, 0xb3e2, 0xaf59, 0x1da0, 0x011b, 0x24d6, 0x386d,
11426 +
            0x6f4c, 0x73f7, 0x563a, 0x4a81, 0xb48a, 0xa831, 0x8dfc, 0x9147, 0xc666, 0xdadd, 0xff10,
11427 +
            0xe3ab, 0x5152, 0x4de9, 0x6824, 0x749f, 0x23be, 0x3f05, 0x1ac8, 0x0673, 0x772b, 0x6b90,
11428 +
            0x4e5d, 0x52e6, 0x05c7, 0x197c, 0x3cb1, 0x200a, 0x92f3, 0x8e48, 0xab85, 0xb73e, 0xe01f,
11429 +
            0xfca4, 0xd969, 0xc5d2,
11430 +
        ],
11431 +
        [
11432 +
            0x0000, 0x0b44, 0x1688, 0x1dcc, 0x2d10, 0x2654, 0x3b98, 0x30dc, 0x5a20, 0x5164, 0x4ca8,
11433 +
            0x47ec, 0x7730, 0x7c74, 0x61b8, 0x6afc, 0xb440, 0xbf04, 0xa2c8, 0xa98c, 0x9950, 0x9214,
11434 +
            0x8fd8, 0x849c, 0xee60, 0xe524, 0xf8e8, 0xf3ac, 0xc370, 0xc834, 0xd5f8, 0xdebc, 0x6091,
11435 +
            0x6bd5, 0x7619, 0x7d5d, 0x4d81, 0x46c5, 0x5b09, 0x504d, 0x3ab1, 0x31f5, 0x2c39, 0x277d,
11436 +
            0x17a1, 0x1ce5, 0x0129, 0x0a6d, 0xd4d1, 0xdf95, 0xc259, 0xc91d, 0xf9c1, 0xf285, 0xef49,
11437 +
            0xe40d, 0x8ef1, 0x85b5, 0x9879, 0x933d, 0xa3e1, 0xa8a5, 0xb569, 0xbe2d, 0xc122, 0xca66,
11438 +
            0xd7aa, 0xdcee, 0xec32, 0xe776, 0xfaba, 0xf1fe, 0x9b02, 0x9046, 0x8d8a, 0x86ce, 0xb612,
11439 +
            0xbd56, 0xa09a, 0xabde, 0x7562, 0x7e26, 0x63ea, 0x68ae, 0x5872, 0x5336, 0x4efa, 0x45be,
11440 +
            0x2f42, 0x2406, 0x39ca, 0x328e, 0x0252, 0x0916, 0x14da, 0x1f9e, 0xa1b3, 0xaaf7, 0xb73b,
11441 +
            0xbc7f, 0x8ca3, 0x87e7, 0x9a2b, 0x916f, 0xfb93, 0xf0d7, 0xed1b, 0xe65f, 0xd683, 0xddc7,
11442 +
            0xc00b, 0xcb4f, 0x15f3, 0x1eb7, 0x037b, 0x083f, 0x38e3, 0x33a7, 0x2e6b, 0x252f, 0x4fd3,
11443 +
            0x4497, 0x595b, 0x521f, 0x62c3, 0x6987, 0x744b, 0x7f0f, 0x8a55, 0x8111, 0x9cdd, 0x9799,
11444 +
            0xa745, 0xac01, 0xb1cd, 0xba89, 0xd075, 0xdb31, 0xc6fd, 0xcdb9, 0xfd65, 0xf621, 0xebed,
11445 +
            0xe0a9, 0x3e15, 0x3551, 0x289d, 0x23d9, 0x1305, 0x1841, 0x058d, 0x0ec9, 0x6435, 0x6f71,
11446 +
            0x72bd, 0x79f9, 0x4925, 0x4261, 0x5fad, 0x54e9, 0xeac4, 0xe180, 0xfc4c, 0xf708, 0xc7d4,
11447 +
            0xcc90, 0xd15c, 0xda18, 0xb0e4, 0xbba0, 0xa66c, 0xad28, 0x9df4, 0x96b0, 0x8b7c, 0x8038,
11448 +
            0x5e84, 0x55c0, 0x480c, 0x4348, 0x7394, 0x78d0, 0x651c, 0x6e58, 0x04a4, 0x0fe0, 0x122c,
11449 +
            0x1968, 0x29b4, 0x22f0, 0x3f3c, 0x3478, 0x4b77, 0x4033, 0x5dff, 0x56bb, 0x6667, 0x6d23,
11450 +
            0x70ef, 0x7bab, 0x1157, 0x1a13, 0x07df, 0x0c9b, 0x3c47, 0x3703, 0x2acf, 0x218b, 0xff37,
11451 +
            0xf473, 0xe9bf, 0xe2fb, 0xd227, 0xd963, 0xc4af, 0xcfeb, 0xa517, 0xae53, 0xb39f, 0xb8db,
11452 +
            0x8807, 0x8343, 0x9e8f, 0x95cb, 0x2be6, 0x20a2, 0x3d6e, 0x362a, 0x06f6, 0x0db2, 0x107e,
11453 +
            0x1b3a, 0x71c6, 0x7a82, 0x674e, 0x6c0a, 0x5cd6, 0x5792, 0x4a5e, 0x411a, 0x9fa6, 0x94e2,
11454 +
            0x892e, 0x826a, 0xb2b6, 0xb9f2, 0xa43e, 0xaf7a, 0xc586, 0xcec2, 0xd30e, 0xd84a, 0xe896,
11455 +
            0xe3d2, 0xfe1e, 0xf55a,
11456 +
        ],
11457 +
        [
11458 +
            0x0000, 0x042b, 0x0856, 0x0c7d, 0x10ac, 0x1487, 0x18fa, 0x1cd1, 0x2158, 0x2573, 0x290e,
11459 +
            0x2d25, 0x31f4, 0x35df, 0x39a2, 0x3d89, 0x42b0, 0x469b, 0x4ae6, 0x4ecd, 0x521c, 0x5637,
11460 +
            0x5a4a, 0x5e61, 0x63e8, 0x67c3, 0x6bbe, 0x6f95, 0x7344, 0x776f, 0x7b12, 0x7f39, 0x8560,
11461 +
            0x814b, 0x8d36, 0x891d, 0x95cc, 0x91e7, 0x9d9a, 0x99b1, 0xa438, 0xa013, 0xac6e, 0xa845,
11462 +
            0xb494, 0xb0bf, 0xbcc2, 0xb8e9, 0xc7d0, 0xc3fb, 0xcf86, 0xcbad, 0xd77c, 0xd357, 0xdf2a,
11463 +
            0xdb01, 0xe688, 0xe2a3, 0xeede, 0xeaf5, 0xf624, 0xf20f, 0xfe72, 0xfa59, 0x02d1, 0x06fa,
11464 +
            0x0a87, 0x0eac, 0x127d, 0x1656, 0x1a2b, 0x1e00, 0x2389, 0x27a2, 0x2bdf, 0x2ff4, 0x3325,
11465 +
            0x370e, 0x3b73, 0x3f58, 0x4061, 0x444a, 0x4837, 0x4c1c, 0x50cd, 0x54e6, 0x589b, 0x5cb0,
11466 +
            0x6139, 0x6512, 0x696f, 0x6d44, 0x7195, 0x75be, 0x79c3, 0x7de8, 0x87b1, 0x839a, 0x8fe7,
11467 +
            0x8bcc, 0x971d, 0x9336, 0x9f4b, 0x9b60, 0xa6e9, 0xa2c2, 0xaebf, 0xaa94, 0xb645, 0xb26e,
11468 +
            0xbe13, 0xba38, 0xc501, 0xc12a, 0xcd57, 0xc97c, 0xd5ad, 0xd186, 0xddfb, 0xd9d0, 0xe459,
11469 +
            0xe072, 0xec0f, 0xe824, 0xf4f5, 0xf0de, 0xfca3, 0xf888, 0x05a2, 0x0189, 0x0df4, 0x09df,
11470 +
            0x150e, 0x1125, 0x1d58, 0x1973, 0x24fa, 0x20d1, 0x2cac, 0x2887, 0x3456, 0x307d, 0x3c00,
11471 +
            0x382b, 0x4712, 0x4339, 0x4f44, 0x4b6f, 0x57be, 0x5395, 0x5fe8, 0x5bc3, 0x664a, 0x6261,
11472 +
            0x6e1c, 0x6a37, 0x76e6, 0x72cd, 0x7eb0, 0x7a9b, 0x80c2, 0x84e9, 0x8894, 0x8cbf, 0x906e,
11473 +
            0x9445, 0x9838, 0x9c13, 0xa19a, 0xa5b1, 0xa9cc, 0xade7, 0xb136, 0xb51d, 0xb960, 0xbd4b,
11474 +
            0xc272, 0xc659, 0xca24, 0xce0f, 0xd2de, 0xd6f5, 0xda88, 0xdea3, 0xe32a, 0xe701, 0xeb7c,
11475 +
            0xef57, 0xf386, 0xf7ad, 0xfbd0, 0xfffb, 0x0773, 0x0358, 0x0f25, 0x0b0e, 0x17df, 0x13f4,
11476 +
            0x1f89, 0x1ba2, 0x262b, 0x2200, 0x2e7d, 0x2a56, 0x3687, 0x32ac, 0x3ed1, 0x3afa, 0x45c3,
11477 +
            0x41e8, 0x4d95, 0x49be, 0x556f, 0x5144, 0x5d39, 0x5912, 0x649b, 0x60b0, 0x6ccd, 0x68e6,
11478 +
            0x7437, 0x701c, 0x7c61, 0x784a, 0x8213, 0x8638, 0x8a45, 0x8e6e, 0x92bf, 0x9694, 0x9ae9,
11479 +
            0x9ec2, 0xa34b, 0xa760, 0xab1d, 0xaf36, 0xb3e7, 0xb7cc, 0xbbb1, 0xbf9a, 0xc0a3, 0xc488,
11480 +
            0xc8f5, 0xccde, 0xd00f, 0xd424, 0xd859, 0xdc72, 0xe1fb, 0xe5d0, 0xe9ad, 0xed86, 0xf157,
11481 +
            0xf57c, 0xf901, 0xfd2a,
11482 +
        ],
11483 +
        [
11484 +
            0x0000, 0x9fd5, 0x37bb, 0xa86e, 0x6f76, 0xf0a3, 0x58cd, 0xc718, 0xdeec, 0x4139, 0xe957,
11485 +
            0x7682, 0xb19a, 0x2e4f, 0x8621, 0x19f4, 0xb5c9, 0x2a1c, 0x8272, 0x1da7, 0xdabf, 0x456a,
11486 +
            0xed04, 0x72d1, 0x6b25, 0xf4f0, 0x5c9e, 0xc34b, 0x0453, 0x9b86, 0x33e8, 0xac3d, 0x6383,
11487 +
            0xfc56, 0x5438, 0xcbed, 0x0cf5, 0x9320, 0x3b4e, 0xa49b, 0xbd6f, 0x22ba, 0x8ad4, 0x1501,
11488 +
            0xd219, 0x4dcc, 0xe5a2, 0x7a77, 0xd64a, 0x499f, 0xe1f1, 0x7e24, 0xb93c, 0x26e9, 0x8e87,
11489 +
            0x1152, 0x08a6, 0x9773, 0x3f1d, 0xa0c8, 0x67d0, 0xf805, 0x506b, 0xcfbe, 0xc706, 0x58d3,
11490 +
            0xf0bd, 0x6f68, 0xa870, 0x37a5, 0x9fcb, 0x001e, 0x19ea, 0x863f, 0x2e51, 0xb184, 0x769c,
11491 +
            0xe949, 0x4127, 0xdef2, 0x72cf, 0xed1a, 0x4574, 0xdaa1, 0x1db9, 0x826c, 0x2a02, 0xb5d7,
11492 +
            0xac23, 0x33f6, 0x9b98, 0x044d, 0xc355, 0x5c80, 0xf4ee, 0x6b3b, 0xa485, 0x3b50, 0x933e,
11493 +
            0x0ceb, 0xcbf3, 0x5426, 0xfc48, 0x639d, 0x7a69, 0xe5bc, 0x4dd2, 0xd207, 0x151f, 0x8aca,
11494 +
            0x22a4, 0xbd71, 0x114c, 0x8e99, 0x26f7, 0xb922, 0x7e3a, 0xe1ef, 0x4981, 0xd654, 0xcfa0,
11495 +
            0x5075, 0xf81b, 0x67ce, 0xa0d6, 0x3f03, 0x976d, 0x08b8, 0x861d, 0x19c8, 0xb1a6, 0x2e73,
11496 +
            0xe96b, 0x76be, 0xded0, 0x4105, 0x58f1, 0xc724, 0x6f4a, 0xf09f, 0x3787, 0xa852, 0x003c,
11497 +
            0x9fe9, 0x33d4, 0xac01, 0x046f, 0x9bba, 0x5ca2, 0xc377, 0x6b19, 0xf4cc, 0xed38, 0x72ed,
11498 +
            0xda83, 0x4556, 0x824e, 0x1d9b, 0xb5f5, 0x2a20, 0xe59e, 0x7a4b, 0xd225, 0x4df0, 0x8ae8,
11499 +
            0x153d, 0xbd53, 0x2286, 0x3b72, 0xa4a7, 0x0cc9, 0x931c, 0x5404, 0xcbd1, 0x63bf, 0xfc6a,
11500 +
            0x5057, 0xcf82, 0x67ec, 0xf839, 0x3f21, 0xa0f4, 0x089a, 0x974f, 0x8ebb, 0x116e, 0xb900,
11501 +
            0x26d5, 0xe1cd, 0x7e18, 0xd676, 0x49a3, 0x411b, 0xdece, 0x76a0, 0xe975, 0x2e6d, 0xb1b8,
11502 +
            0x19d6, 0x8603, 0x9ff7, 0x0022, 0xa84c, 0x3799, 0xf081, 0x6f54, 0xc73a, 0x58ef, 0xf4d2,
11503 +
            0x6b07, 0xc369, 0x5cbc, 0x9ba4, 0x0471, 0xac1f, 0x33ca, 0x2a3e, 0xb5eb, 0x1d85, 0x8250,
11504 +
            0x4548, 0xda9d, 0x72f3, 0xed26, 0x2298, 0xbd4d, 0x1523, 0x8af6, 0x4dee, 0xd23b, 0x7a55,
11505 +
            0xe580, 0xfc74, 0x63a1, 0xcbcf, 0x541a, 0x9302, 0x0cd7, 0xa4b9, 0x3b6c, 0x9751, 0x0884,
11506 +
            0xa0ea, 0x3f3f, 0xf827, 0x67f2, 0xcf9c, 0x5049, 0x49bd, 0xd668, 0x7e06, 0xe1d3, 0x26cb,
11507 +
            0xb91e, 0x1170, 0x8ea5,
11508 +
        ],
11509 +
        [
11510 +
            0x0000, 0x81bf, 0x0b6f, 0x8ad0, 0x16de, 0x9761, 0x1db1, 0x9c0e, 0x2dbc, 0xac03, 0x26d3,
11511 +
            0xa76c, 0x3b62, 0xbadd, 0x300d, 0xb1b2, 0x5b78, 0xdac7, 0x5017, 0xd1a8, 0x4da6, 0xcc19,
11512 +
            0x46c9, 0xc776, 0x76c4, 0xf77b, 0x7dab, 0xfc14, 0x601a, 0xe1a5, 0x6b75, 0xeaca, 0xb6f0,
11513 +
            0x374f, 0xbd9f, 0x3c20, 0xa02e, 0x2191, 0xab41, 0x2afe, 0x9b4c, 0x1af3, 0x9023, 0x119c,
11514 +
            0x8d92, 0x0c2d, 0x86fd, 0x0742, 0xed88, 0x6c37, 0xe6e7, 0x6758, 0xfb56, 0x7ae9, 0xf039,
11515 +
            0x7186, 0xc034, 0x418b, 0xcb5b, 0x4ae4, 0xd6ea, 0x5755, 0xdd85, 0x5c3a, 0x65f1, 0xe44e,
11516 +
            0x6e9e, 0xef21, 0x732f, 0xf290, 0x7840, 0xf9ff, 0x484d, 0xc9f2, 0x4322, 0xc29d, 0x5e93,
11517 +
            0xdf2c, 0x55fc, 0xd443, 0x3e89, 0xbf36, 0x35e6, 0xb459, 0x2857, 0xa9e8, 0x2338, 0xa287,
11518 +
            0x1335, 0x928a, 0x185a, 0x99e5, 0x05eb, 0x8454, 0x0e84, 0x8f3b, 0xd301, 0x52be, 0xd86e,
11519 +
            0x59d1, 0xc5df, 0x4460, 0xceb0, 0x4f0f, 0xfebd, 0x7f02, 0xf5d2, 0x746d, 0xe863, 0x69dc,
11520 +
            0xe30c, 0x62b3, 0x8879, 0x09c6, 0x8316, 0x02a9, 0x9ea7, 0x1f18, 0x95c8, 0x1477, 0xa5c5,
11521 +
            0x247a, 0xaeaa, 0x2f15, 0xb31b, 0x32a4, 0xb874, 0x39cb, 0xcbe2, 0x4a5d, 0xc08d, 0x4132,
11522 +
            0xdd3c, 0x5c83, 0xd653, 0x57ec, 0xe65e, 0x67e1, 0xed31, 0x6c8e, 0xf080, 0x713f, 0xfbef,
11523 +
            0x7a50, 0x909a, 0x1125, 0x9bf5, 0x1a4a, 0x8644, 0x07fb, 0x8d2b, 0x0c94, 0xbd26, 0x3c99,
11524 +
            0xb649, 0x37f6, 0xabf8, 0x2a47, 0xa097, 0x2128, 0x7d12, 0xfcad, 0x767d, 0xf7c2, 0x6bcc,
11525 +
            0xea73, 0x60a3, 0xe11c, 0x50ae, 0xd111, 0x5bc1, 0xda7e, 0x4670, 0xc7cf, 0x4d1f, 0xcca0,
11526 +
            0x266a, 0xa7d5, 0x2d05, 0xacba, 0x30b4, 0xb10b, 0x3bdb, 0xba64, 0x0bd6, 0x8a69, 0x00b9,
11527 +
            0x8106, 0x1d08, 0x9cb7, 0x1667, 0x97d8, 0xae13, 0x2fac, 0xa57c, 0x24c3, 0xb8cd, 0x3972,
11528 +
            0xb3a2, 0x321d, 0x83af, 0x0210, 0x88c0, 0x097f, 0x9571, 0x14ce, 0x9e1e, 0x1fa1, 0xf56b,
11529 +
            0x74d4, 0xfe04, 0x7fbb, 0xe3b5, 0x620a, 0xe8da, 0x6965, 0xd8d7, 0x5968, 0xd3b8, 0x5207,
11530 +
            0xce09, 0x4fb6, 0xc566, 0x44d9, 0x18e3, 0x995c, 0x138c, 0x9233, 0x0e3d, 0x8f82, 0x0552,
11531 +
            0x84ed, 0x355f, 0xb4e0, 0x3e30, 0xbf8f, 0x2381, 0xa23e, 0x28ee, 0xa951, 0x439b, 0xc224,
11532 +
            0x48f4, 0xc94b, 0x5545, 0xd4fa, 0x5e2a, 0xdf95, 0x6e27, 0xef98, 0x6548, 0xe4f7, 0x78f9,
11533 +
            0xf946, 0x7396, 0xf229,
11534 +
        ],
11535 +
        [
11536 +
            0x0000, 0x4dfd, 0x9bfa, 0xd607, 0x3fe5, 0x7218, 0xa41f, 0xe9e2, 0x7fca, 0x3237, 0xe430,
11537 +
            0xa9cd, 0x402f, 0x0dd2, 0xdbd5, 0x9628, 0xff94, 0xb269, 0x646e, 0x2993, 0xc071, 0x8d8c,
11538 +
            0x5b8b, 0x1676, 0x805e, 0xcda3, 0x1ba4, 0x5659, 0xbfbb, 0xf246, 0x2441, 0x69bc, 0xf739,
11539 +
            0xbac4, 0x6cc3, 0x213e, 0xc8dc, 0x8521, 0x5326, 0x1edb, 0x88f3, 0xc50e, 0x1309, 0x5ef4,
11540 +
            0xb716, 0xfaeb, 0x2cec, 0x6111, 0x08ad, 0x4550, 0x9357, 0xdeaa, 0x3748, 0x7ab5, 0xacb2,
11541 +
            0xe14f, 0x7767, 0x3a9a, 0xec9d, 0xa160, 0x4882, 0x057f, 0xd378, 0x9e85, 0xe663, 0xab9e,
11542 +
            0x7d99, 0x3064, 0xd986, 0x947b, 0x427c, 0x0f81, 0x99a9, 0xd454, 0x0253, 0x4fae, 0xa64c,
11543 +
            0xebb1, 0x3db6, 0x704b, 0x19f7, 0x540a, 0x820d, 0xcff0, 0x2612, 0x6bef, 0xbde8, 0xf015,
11544 +
            0x663d, 0x2bc0, 0xfdc7, 0xb03a, 0x59d8, 0x1425, 0xc222, 0x8fdf, 0x115a, 0x5ca7, 0x8aa0,
11545 +
            0xc75d, 0x2ebf, 0x6342, 0xb545, 0xf8b8, 0x6e90, 0x236d, 0xf56a, 0xb897, 0x5175, 0x1c88,
11546 +
            0xca8f, 0x8772, 0xeece, 0xa333, 0x7534, 0x38c9, 0xd12b, 0x9cd6, 0x4ad1, 0x072c, 0x9104,
11547 +
            0xdcf9, 0x0afe, 0x4703, 0xaee1, 0xe31c, 0x351b, 0x78e6, 0xc4d7, 0x892a, 0x5f2d, 0x12d0,
11548 +
            0xfb32, 0xb6cf, 0x60c8, 0x2d35, 0xbb1d, 0xf6e0, 0x20e7, 0x6d1a, 0x84f8, 0xc905, 0x1f02,
11549 +
            0x52ff, 0x3b43, 0x76be, 0xa0b9, 0xed44, 0x04a6, 0x495b, 0x9f5c, 0xd2a1, 0x4489, 0x0974,
11550 +
            0xdf73, 0x928e, 0x7b6c, 0x3691, 0xe096, 0xad6b, 0x33ee, 0x7e13, 0xa814, 0xe5e9, 0x0c0b,
11551 +
            0x41f6, 0x97f1, 0xda0c, 0x4c24, 0x01d9, 0xd7de, 0x9a23, 0x73c1, 0x3e3c, 0xe83b, 0xa5c6,
11552 +
            0xcc7a, 0x8187, 0x5780, 0x1a7d, 0xf39f, 0xbe62, 0x6865, 0x2598, 0xb3b0, 0xfe4d, 0x284a,
11553 +
            0x65b7, 0x8c55, 0xc1a8, 0x17af, 0x5a52, 0x22b4, 0x6f49, 0xb94e, 0xf4b3, 0x1d51, 0x50ac,
11554 +
            0x86ab, 0xcb56, 0x5d7e, 0x1083, 0xc684, 0x8b79, 0x629b, 0x2f66, 0xf961, 0xb49c, 0xdd20,
11555 +
            0x90dd, 0x46da, 0x0b27, 0xe2c5, 0xaf38, 0x793f, 0x34c2, 0xa2ea, 0xef17, 0x3910, 0x74ed,
11556 +
            0x9d0f, 0xd0f2, 0x06f5, 0x4b08, 0xd58d, 0x9870, 0x4e77, 0x038a, 0xea68, 0xa795, 0x7192,
11557 +
            0x3c6f, 0xaa47, 0xe7ba, 0x31bd, 0x7c40, 0x95a2, 0xd85f, 0x0e58, 0x43a5, 0x2a19, 0x67e4,
11558 +
            0xb1e3, 0xfc1e, 0x15fc, 0x5801, 0x8e06, 0xc3fb, 0x55d3, 0x182e, 0xce29, 0x83d4, 0x6a36,
11559 +
            0x27cb, 0xf1cc, 0xbc31,
11560 +
        ],
11561 +
        [
11562 +
            0x0000, 0x2c27, 0x584e, 0x7469, 0xb09c, 0x9cbb, 0xe8d2, 0xc4f5, 0x6929, 0x450e, 0x3167,
11563 +
            0x1d40, 0xd9b5, 0xf592, 0x81fb, 0xaddc, 0xd252, 0xfe75, 0x8a1c, 0xa63b, 0x62ce, 0x4ee9,
11564 +
            0x3a80, 0x16a7, 0xbb7b, 0x975c, 0xe335, 0xcf12, 0x0be7, 0x27c0, 0x53a9, 0x7f8e, 0xacb5,
11565 +
            0x8092, 0xf4fb, 0xd8dc, 0x1c29, 0x300e, 0x4467, 0x6840, 0xc59c, 0xe9bb, 0x9dd2, 0xb1f5,
11566 +
            0x7500, 0x5927, 0x2d4e, 0x0169, 0x7ee7, 0x52c0, 0x26a9, 0x0a8e, 0xce7b, 0xe25c, 0x9635,
11567 +
            0xba12, 0x17ce, 0x3be9, 0x4f80, 0x63a7, 0xa752, 0x8b75, 0xff1c, 0xd33b, 0x517b, 0x7d5c,
11568 +
            0x0935, 0x2512, 0xe1e7, 0xcdc0, 0xb9a9, 0x958e, 0x3852, 0x1475, 0x601c, 0x4c3b, 0x88ce,
11569 +
            0xa4e9, 0xd080, 0xfca7, 0x8329, 0xaf0e, 0xdb67, 0xf740, 0x33b5, 0x1f92, 0x6bfb, 0x47dc,
11570 +
            0xea00, 0xc627, 0xb24e, 0x9e69, 0x5a9c, 0x76bb, 0x02d2, 0x2ef5, 0xfdce, 0xd1e9, 0xa580,
11571 +
            0x89a7, 0x4d52, 0x6175, 0x151c, 0x393b, 0x94e7, 0xb8c0, 0xcca9, 0xe08e, 0x247b, 0x085c,
11572 +
            0x7c35, 0x5012, 0x2f9c, 0x03bb, 0x77d2, 0x5bf5, 0x9f00, 0xb327, 0xc74e, 0xeb69, 0x46b5,
11573 +
            0x6a92, 0x1efb, 0x32dc, 0xf629, 0xda0e, 0xae67, 0x8240, 0xa2f6, 0x8ed1, 0xfab8, 0xd69f,
11574 +
            0x126a, 0x3e4d, 0x4a24, 0x6603, 0xcbdf, 0xe7f8, 0x9391, 0xbfb6, 0x7b43, 0x5764, 0x230d,
11575 +
            0x0f2a, 0x70a4, 0x5c83, 0x28ea, 0x04cd, 0xc038, 0xec1f, 0x9876, 0xb451, 0x198d, 0x35aa,
11576 +
            0x41c3, 0x6de4, 0xa911, 0x8536, 0xf15f, 0xdd78, 0x0e43, 0x2264, 0x560d, 0x7a2a, 0xbedf,
11577 +
            0x92f8, 0xe691, 0xcab6, 0x676a, 0x4b4d, 0x3f24, 0x1303, 0xd7f6, 0xfbd1, 0x8fb8, 0xa39f,
11578 +
            0xdc11, 0xf036, 0x845f, 0xa878, 0x6c8d, 0x40aa, 0x34c3, 0x18e4, 0xb538, 0x991f, 0xed76,
11579 +
            0xc151, 0x05a4, 0x2983, 0x5dea, 0x71cd, 0xf38d, 0xdfaa, 0xabc3, 0x87e4, 0x4311, 0x6f36,
11580 +
            0x1b5f, 0x3778, 0x9aa4, 0xb683, 0xc2ea, 0xeecd, 0x2a38, 0x061f, 0x7276, 0x5e51, 0x21df,
11581 +
            0x0df8, 0x7991, 0x55b6, 0x9143, 0xbd64, 0xc90d, 0xe52a, 0x48f6, 0x64d1, 0x10b8, 0x3c9f,
11582 +
            0xf86a, 0xd44d, 0xa024, 0x8c03, 0x5f38, 0x731f, 0x0776, 0x2b51, 0xefa4, 0xc383, 0xb7ea,
11583 +
            0x9bcd, 0x3611, 0x1a36, 0x6e5f, 0x4278, 0x868d, 0xaaaa, 0xdec3, 0xf2e4, 0x8d6a, 0xa14d,
11584 +
            0xd524, 0xf903, 0x3df6, 0x11d1, 0x65b8, 0x499f, 0xe443, 0xc864, 0xbc0d, 0x902a, 0x54df,
11585 +
            0x78f8, 0x0c91, 0x20b6,
11586 +
        ],
11587 +
        [
11588 +
            0x0000, 0x5591, 0xab22, 0xfeb3, 0x5e55, 0x0bc4, 0xf577, 0xa0e6, 0xbcaa, 0xe93b, 0x1788,
11589 +
            0x4219, 0xe2ff, 0xb76e, 0x49dd, 0x1c4c, 0x7145, 0x24d4, 0xda67, 0x8ff6, 0x2f10, 0x7a81,
11590 +
            0x8432, 0xd1a3, 0xcdef, 0x987e, 0x66cd, 0x335c, 0x93ba, 0xc62b, 0x3898, 0x6d09, 0xe28a,
11591 +
            0xb71b, 0x49a8, 0x1c39, 0xbcdf, 0xe94e, 0x17fd, 0x426c, 0x5e20, 0x0bb1, 0xf502, 0xa093,
11592 +
            0x0075, 0x55e4, 0xab57, 0xfec6, 0x93cf, 0xc65e, 0x38ed, 0x6d7c, 0xcd9a, 0x980b, 0x66b8,
11593 +
            0x3329, 0x2f65, 0x7af4, 0x8447, 0xd1d6, 0x7130, 0x24a1, 0xda12, 0x8f83, 0xcd05, 0x9894,
11594 +
            0x6627, 0x33b6, 0x9350, 0xc6c1, 0x3872, 0x6de3, 0x71af, 0x243e, 0xda8d, 0x8f1c, 0x2ffa,
11595 +
            0x7a6b, 0x84d8, 0xd149, 0xbc40, 0xe9d1, 0x1762, 0x42f3, 0xe215, 0xb784, 0x4937, 0x1ca6,
11596 +
            0x00ea, 0x557b, 0xabc8, 0xfe59, 0x5ebf, 0x0b2e, 0xf59d, 0xa00c, 0x2f8f, 0x7a1e, 0x84ad,
11597 +
            0xd13c, 0x71da, 0x244b, 0xdaf8, 0x8f69, 0x9325, 0xc6b4, 0x3807, 0x6d96, 0xcd70, 0x98e1,
11598 +
            0x6652, 0x33c3, 0x5eca, 0x0b5b, 0xf5e8, 0xa079, 0x009f, 0x550e, 0xabbd, 0xfe2c, 0xe260,
11599 +
            0xb7f1, 0x4942, 0x1cd3, 0xbc35, 0xe9a4, 0x1717, 0x4286, 0x921b, 0xc78a, 0x3939, 0x6ca8,
11600 +
            0xcc4e, 0x99df, 0x676c, 0x32fd, 0x2eb1, 0x7b20, 0x8593, 0xd002, 0x70e4, 0x2575, 0xdbc6,
11601 +
            0x8e57, 0xe35e, 0xb6cf, 0x487c, 0x1ded, 0xbd0b, 0xe89a, 0x1629, 0x43b8, 0x5ff4, 0x0a65,
11602 +
            0xf4d6, 0xa147, 0x01a1, 0x5430, 0xaa83, 0xff12, 0x7091, 0x2500, 0xdbb3, 0x8e22, 0x2ec4,
11603 +
            0x7b55, 0x85e6, 0xd077, 0xcc3b, 0x99aa, 0x6719, 0x3288, 0x926e, 0xc7ff, 0x394c, 0x6cdd,
11604 +
            0x01d4, 0x5445, 0xaaf6, 0xff67, 0x5f81, 0x0a10, 0xf4a3, 0xa132, 0xbd7e, 0xe8ef, 0x165c,
11605 +
            0x43cd, 0xe32b, 0xb6ba, 0x4809, 0x1d98, 0x5f1e, 0x0a8f, 0xf43c, 0xa1ad, 0x014b, 0x54da,
11606 +
            0xaa69, 0xfff8, 0xe3b4, 0xb625, 0x4896, 0x1d07, 0xbde1, 0xe870, 0x16c3, 0x4352, 0x2e5b,
11607 +
            0x7bca, 0x8579, 0xd0e8, 0x700e, 0x259f, 0xdb2c, 0x8ebd, 0x92f1, 0xc760, 0x39d3, 0x6c42,
11608 +
            0xcca4, 0x9935, 0x6786, 0x3217, 0xbd94, 0xe805, 0x16b6, 0x4327, 0xe3c1, 0xb650, 0x48e3,
11609 +
            0x1d72, 0x013e, 0x54af, 0xaa1c, 0xff8d, 0x5f6b, 0x0afa, 0xf449, 0xa1d8, 0xccd1, 0x9940,
11610 +
            0x67f3, 0x3262, 0x9284, 0xc715, 0x39a6, 0x6c37, 0x707b, 0x25ea, 0xdb59, 0x8ec8, 0x2e2e,
11611 +
            0x7bbf, 0x850c, 0xd09d,
11612 +
        ],
11613 +
        [
11614 +
            0x0000, 0x8555, 0x02bb, 0x87ee, 0x0576, 0x8023, 0x07cd, 0x8298, 0x0aec, 0x8fb9, 0x0857,
11615 +
            0x8d02, 0x0f9a, 0x8acf, 0x0d21, 0x8874, 0x15d8, 0x908d, 0x1763, 0x9236, 0x10ae, 0x95fb,
11616 +
            0x1215, 0x9740, 0x1f34, 0x9a61, 0x1d8f, 0x98da, 0x1a42, 0x9f17, 0x18f9, 0x9dac, 0x2bb0,
11617 +
            0xaee5, 0x290b, 0xac5e, 0x2ec6, 0xab93, 0x2c7d, 0xa928, 0x215c, 0xa409, 0x23e7, 0xa6b2,
11618 +
            0x242a, 0xa17f, 0x2691, 0xa3c4, 0x3e68, 0xbb3d, 0x3cd3, 0xb986, 0x3b1e, 0xbe4b, 0x39a5,
11619 +
            0xbcf0, 0x3484, 0xb1d1, 0x363f, 0xb36a, 0x31f2, 0xb4a7, 0x3349, 0xb61c, 0x5760, 0xd235,
11620 +
            0x55db, 0xd08e, 0x5216, 0xd743, 0x50ad, 0xd5f8, 0x5d8c, 0xd8d9, 0x5f37, 0xda62, 0x58fa,
11621 +
            0xddaf, 0x5a41, 0xdf14, 0x42b8, 0xc7ed, 0x4003, 0xc556, 0x47ce, 0xc29b, 0x4575, 0xc020,
11622 +
            0x4854, 0xcd01, 0x4aef, 0xcfba, 0x4d22, 0xc877, 0x4f99, 0xcacc, 0x7cd0, 0xf985, 0x7e6b,
11623 +
            0xfb3e, 0x79a6, 0xfcf3, 0x7b1d, 0xfe48, 0x763c, 0xf369, 0x7487, 0xf1d2, 0x734a, 0xf61f,
11624 +
            0x71f1, 0xf4a4, 0x6908, 0xec5d, 0x6bb3, 0xeee6, 0x6c7e, 0xe92b, 0x6ec5, 0xeb90, 0x63e4,
11625 +
            0xe6b1, 0x615f, 0xe40a, 0x6692, 0xe3c7, 0x6429, 0xe17c, 0xaec0, 0x2b95, 0xac7b, 0x292e,
11626 +
            0xabb6, 0x2ee3, 0xa90d, 0x2c58, 0xa42c, 0x2179, 0xa697, 0x23c2, 0xa15a, 0x240f, 0xa3e1,
11627 +
            0x26b4, 0xbb18, 0x3e4d, 0xb9a3, 0x3cf6, 0xbe6e, 0x3b3b, 0xbcd5, 0x3980, 0xb1f4, 0x34a1,
11628 +
            0xb34f, 0x361a, 0xb482, 0x31d7, 0xb639, 0x336c, 0x8570, 0x0025, 0x87cb, 0x029e, 0x8006,
11629 +
            0x0553, 0x82bd, 0x07e8, 0x8f9c, 0x0ac9, 0x8d27, 0x0872, 0x8aea, 0x0fbf, 0x8851, 0x0d04,
11630 +
            0x90a8, 0x15fd, 0x9213, 0x1746, 0x95de, 0x108b, 0x9765, 0x1230, 0x9a44, 0x1f11, 0x98ff,
11631 +
            0x1daa, 0x9f32, 0x1a67, 0x9d89, 0x18dc, 0xf9a0, 0x7cf5, 0xfb1b, 0x7e4e, 0xfcd6, 0x7983,
11632 +
            0xfe6d, 0x7b38, 0xf34c, 0x7619, 0xf1f7, 0x74a2, 0xf63a, 0x736f, 0xf481, 0x71d4, 0xec78,
11633 +
            0x692d, 0xeec3, 0x6b96, 0xe90e, 0x6c5b, 0xebb5, 0x6ee0, 0xe694, 0x63c1, 0xe42f, 0x617a,
11634 +
            0xe3e2, 0x66b7, 0xe159, 0x640c, 0xd210, 0x5745, 0xd0ab, 0x55fe, 0xd766, 0x5233, 0xd5dd,
11635 +
            0x5088, 0xd8fc, 0x5da9, 0xda47, 0x5f12, 0xdd8a, 0x58df, 0xdf31, 0x5a64, 0xc7c8, 0x429d,
11636 +
            0xc573, 0x4026, 0xc2be, 0x47eb, 0xc005, 0x4550, 0xcd24, 0x4871, 0xcf9f, 0x4aca, 0xc852,
11637 +
            0x4d07, 0xcae9, 0x4fbc,
11638 +
        ],
11639 +
        [
11640 +
            0x0000, 0x05ad, 0x0b5a, 0x0ef7, 0x16b4, 0x1319, 0x1dee, 0x1843, 0x2d68, 0x28c5, 0x2632,
11641 +
            0x239f, 0x3bdc, 0x3e71, 0x3086, 0x352b, 0x5ad0, 0x5f7d, 0x518a, 0x5427, 0x4c64, 0x49c9,
11642 +
            0x473e, 0x4293, 0x77b8, 0x7215, 0x7ce2, 0x794f, 0x610c, 0x64a1, 0x6a56, 0x6ffb, 0xb5a0,
11643 +
            0xb00d, 0xbefa, 0xbb57, 0xa314, 0xa6b9, 0xa84e, 0xade3, 0x98c8, 0x9d65, 0x9392, 0x963f,
11644 +
            0x8e7c, 0x8bd1, 0x8526, 0x808b, 0xef70, 0xeadd, 0xe42a, 0xe187, 0xf9c4, 0xfc69, 0xf29e,
11645 +
            0xf733, 0xc218, 0xc7b5, 0xc942, 0xccef, 0xd4ac, 0xd101, 0xdff6, 0xda5b, 0x6351, 0x66fc,
11646 +
            0x680b, 0x6da6, 0x75e5, 0x7048, 0x7ebf, 0x7b12, 0x4e39, 0x4b94, 0x4563, 0x40ce, 0x588d,
11647 +
            0x5d20, 0x53d7, 0x567a, 0x3981, 0x3c2c, 0x32db, 0x3776, 0x2f35, 0x2a98, 0x246f, 0x21c2,
11648 +
            0x14e9, 0x1144, 0x1fb3, 0x1a1e, 0x025d, 0x07f0, 0x0907, 0x0caa, 0xd6f1, 0xd35c, 0xddab,
11649 +
            0xd806, 0xc045, 0xc5e8, 0xcb1f, 0xceb2, 0xfb99, 0xfe34, 0xf0c3, 0xf56e, 0xed2d, 0xe880,
11650 +
            0xe677, 0xe3da, 0x8c21, 0x898c, 0x877b, 0x82d6, 0x9a95, 0x9f38, 0x91cf, 0x9462, 0xa149,
11651 +
            0xa4e4, 0xaa13, 0xafbe, 0xb7fd, 0xb250, 0xbca7, 0xb90a, 0xc6a2, 0xc30f, 0xcdf8, 0xc855,
11652 +
            0xd016, 0xd5bb, 0xdb4c, 0xdee1, 0xebca, 0xee67, 0xe090, 0xe53d, 0xfd7e, 0xf8d3, 0xf624,
11653 +
            0xf389, 0x9c72, 0x99df, 0x9728, 0x9285, 0x8ac6, 0x8f6b, 0x819c, 0x8431, 0xb11a, 0xb4b7,
11654 +
            0xba40, 0xbfed, 0xa7ae, 0xa203, 0xacf4, 0xa959, 0x7302, 0x76af, 0x7858, 0x7df5, 0x65b6,
11655 +
            0x601b, 0x6eec, 0x6b41, 0x5e6a, 0x5bc7, 0x5530, 0x509d, 0x48de, 0x4d73, 0x4384, 0x4629,
11656 +
            0x29d2, 0x2c7f, 0x2288, 0x2725, 0x3f66, 0x3acb, 0x343c, 0x3191, 0x04ba, 0x0117, 0x0fe0,
11657 +
            0x0a4d, 0x120e, 0x17a3, 0x1954, 0x1cf9, 0xa5f3, 0xa05e, 0xaea9, 0xab04, 0xb347, 0xb6ea,
11658 +
            0xb81d, 0xbdb0, 0x889b, 0x8d36, 0x83c1, 0x866c, 0x9e2f, 0x9b82, 0x9575, 0x90d8, 0xff23,
11659 +
            0xfa8e, 0xf479, 0xf1d4, 0xe997, 0xec3a, 0xe2cd, 0xe760, 0xd24b, 0xd7e6, 0xd911, 0xdcbc,
11660 +
            0xc4ff, 0xc152, 0xcfa5, 0xca08, 0x1053, 0x15fe, 0x1b09, 0x1ea4, 0x06e7, 0x034a, 0x0dbd,
11661 +
            0x0810, 0x3d3b, 0x3896, 0x3661, 0x33cc, 0x2b8f, 0x2e22, 0x20d5, 0x2578, 0x4a83, 0x4f2e,
11662 +
            0x41d9, 0x4474, 0x5c37, 0x599a, 0x576d, 0x52c0, 0x67eb, 0x6246, 0x6cb1, 0x691c, 0x715f,
11663 +
            0x74f2, 0x7a05, 0x7fa8,
11664 +
        ],
11665 +
        [
11666 +
            0x0000, 0x7eea, 0xfdd4, 0x833e, 0xf3b9, 0x8d53, 0x0e6d, 0x7087, 0xef63, 0x9189, 0x12b7,
11667 +
            0x6c5d, 0x1cda, 0x6230, 0xe10e, 0x9fe4, 0xd6d7, 0xa83d, 0x2b03, 0x55e9, 0x256e, 0x5b84,
11668 +
            0xd8ba, 0xa650, 0x39b4, 0x475e, 0xc460, 0xba8a, 0xca0d, 0xb4e7, 0x37d9, 0x4933, 0xa5bf,
11669 +
            0xdb55, 0x586b, 0x2681, 0x5606, 0x28ec, 0xabd2, 0xd538, 0x4adc, 0x3436, 0xb708, 0xc9e2,
11670 +
            0xb965, 0xc78f, 0x44b1, 0x3a5b, 0x7368, 0x0d82, 0x8ebc, 0xf056, 0x80d1, 0xfe3b, 0x7d05,
11671 +
            0x03ef, 0x9c0b, 0xe2e1, 0x61df, 0x1f35, 0x6fb2, 0x1158, 0x9266, 0xec8c, 0x436f, 0x3d85,
11672 +
            0xbebb, 0xc051, 0xb0d6, 0xce3c, 0x4d02, 0x33e8, 0xac0c, 0xd2e6, 0x51d8, 0x2f32, 0x5fb5,
11673 +
            0x215f, 0xa261, 0xdc8b, 0x95b8, 0xeb52, 0x686c, 0x1686, 0x6601, 0x18eb, 0x9bd5, 0xe53f,
11674 +
            0x7adb, 0x0431, 0x870f, 0xf9e5, 0x8962, 0xf788, 0x74b6, 0x0a5c, 0xe6d0, 0x983a, 0x1b04,
11675 +
            0x65ee, 0x1569, 0x6b83, 0xe8bd, 0x9657, 0x09b3, 0x7759, 0xf467, 0x8a8d, 0xfa0a, 0x84e0,
11676 +
            0x07de, 0x7934, 0x3007, 0x4eed, 0xcdd3, 0xb339, 0xc3be, 0xbd54, 0x3e6a, 0x4080, 0xdf64,
11677 +
            0xa18e, 0x22b0, 0x5c5a, 0x2cdd, 0x5237, 0xd109, 0xafe3, 0x86de, 0xf834, 0x7b0a, 0x05e0,
11678 +
            0x7567, 0x0b8d, 0x88b3, 0xf659, 0x69bd, 0x1757, 0x9469, 0xea83, 0x9a04, 0xe4ee, 0x67d0,
11679 +
            0x193a, 0x5009, 0x2ee3, 0xaddd, 0xd337, 0xa3b0, 0xdd5a, 0x5e64, 0x208e, 0xbf6a, 0xc180,
11680 +
            0x42be, 0x3c54, 0x4cd3, 0x3239, 0xb107, 0xcfed, 0x2361, 0x5d8b, 0xdeb5, 0xa05f, 0xd0d8,
11681 +
            0xae32, 0x2d0c, 0x53e6, 0xcc02, 0xb2e8, 0x31d6, 0x4f3c, 0x3fbb, 0x4151, 0xc26f, 0xbc85,
11682 +
            0xf5b6, 0x8b5c, 0x0862, 0x7688, 0x060f, 0x78e5, 0xfbdb, 0x8531, 0x1ad5, 0x643f, 0xe701,
11683 +
            0x99eb, 0xe96c, 0x9786, 0x14b8, 0x6a52, 0xc5b1, 0xbb5b, 0x3865, 0x468f, 0x3608, 0x48e2,
11684 +
            0xcbdc, 0xb536, 0x2ad2, 0x5438, 0xd706, 0xa9ec, 0xd96b, 0xa781, 0x24bf, 0x5a55, 0x1366,
11685 +
            0x6d8c, 0xeeb2, 0x9058, 0xe0df, 0x9e35, 0x1d0b, 0x63e1, 0xfc05, 0x82ef, 0x01d1, 0x7f3b,
11686 +
            0x0fbc, 0x7156, 0xf268, 0x8c82, 0x600e, 0x1ee4, 0x9dda, 0xe330, 0x93b7, 0xed5d, 0x6e63,
11687 +
            0x1089, 0x8f6d, 0xf187, 0x72b9, 0x0c53, 0x7cd4, 0x023e, 0x8100, 0xffea, 0xb6d9, 0xc833,
11688 +
            0x4b0d, 0x35e7, 0x4560, 0x3b8a, 0xb8b4, 0xc65e, 0x59ba, 0x2750, 0xa46e, 0xda84, 0xaa03,
11689 +
            0xd4e9, 0x57d7, 0x293d,
11690 +
        ],
11691 +
        [
11692 +
            0x0000, 0x482a, 0x9054, 0xd87e, 0x28b9, 0x6093, 0xb8ed, 0xf0c7, 0x5172, 0x1958, 0xc126,
11693 +
            0x890c, 0x79cb, 0x31e1, 0xe99f, 0xa1b5, 0xa2e4, 0xeace, 0x32b0, 0x7a9a, 0x8a5d, 0xc277,
11694 +
            0x1a09, 0x5223, 0xf396, 0xbbbc, 0x63c2, 0x2be8, 0xdb2f, 0x9305, 0x4b7b, 0x0351, 0x4dd9,
11695 +
            0x05f3, 0xdd8d, 0x95a7, 0x6560, 0x2d4a, 0xf534, 0xbd1e, 0x1cab, 0x5481, 0x8cff, 0xc4d5,
11696 +
            0x3412, 0x7c38, 0xa446, 0xec6c, 0xef3d, 0xa717, 0x7f69, 0x3743, 0xc784, 0x8fae, 0x57d0,
11697 +
            0x1ffa, 0xbe4f, 0xf665, 0x2e1b, 0x6631, 0x96f6, 0xdedc, 0x06a2, 0x4e88, 0x9bb2, 0xd398,
11698 +
            0x0be6, 0x43cc, 0xb30b, 0xfb21, 0x235f, 0x6b75, 0xcac0, 0x82ea, 0x5a94, 0x12be, 0xe279,
11699 +
            0xaa53, 0x722d, 0x3a07, 0x3956, 0x717c, 0xa902, 0xe128, 0x11ef, 0x59c5, 0x81bb, 0xc991,
11700 +
            0x6824, 0x200e, 0xf870, 0xb05a, 0x409d, 0x08b7, 0xd0c9, 0x98e3, 0xd66b, 0x9e41, 0x463f,
11701 +
            0x0e15, 0xfed2, 0xb6f8, 0x6e86, 0x26ac, 0x8719, 0xcf33, 0x174d, 0x5f67, 0xafa0, 0xe78a,
11702 +
            0x3ff4, 0x77de, 0x748f, 0x3ca5, 0xe4db, 0xacf1, 0x5c36, 0x141c, 0xcc62, 0x8448, 0x25fd,
11703 +
            0x6dd7, 0xb5a9, 0xfd83, 0x0d44, 0x456e, 0x9d10, 0xd53a, 0x3f75, 0x775f, 0xaf21, 0xe70b,
11704 +
            0x17cc, 0x5fe6, 0x8798, 0xcfb2, 0x6e07, 0x262d, 0xfe53, 0xb679, 0x46be, 0x0e94, 0xd6ea,
11705 +
            0x9ec0, 0x9d91, 0xd5bb, 0x0dc5, 0x45ef, 0xb528, 0xfd02, 0x257c, 0x6d56, 0xcce3, 0x84c9,
11706 +
            0x5cb7, 0x149d, 0xe45a, 0xac70, 0x740e, 0x3c24, 0x72ac, 0x3a86, 0xe2f8, 0xaad2, 0x5a15,
11707 +
            0x123f, 0xca41, 0x826b, 0x23de, 0x6bf4, 0xb38a, 0xfba0, 0x0b67, 0x434d, 0x9b33, 0xd319,
11708 +
            0xd048, 0x9862, 0x401c, 0x0836, 0xf8f1, 0xb0db, 0x68a5, 0x208f, 0x813a, 0xc910, 0x116e,
11709 +
            0x5944, 0xa983, 0xe1a9, 0x39d7, 0x71fd, 0xa4c7, 0xeced, 0x3493, 0x7cb9, 0x8c7e, 0xc454,
11710 +
            0x1c2a, 0x5400, 0xf5b5, 0xbd9f, 0x65e1, 0x2dcb, 0xdd0c, 0x9526, 0x4d58, 0x0572, 0x0623,
11711 +
            0x4e09, 0x9677, 0xde5d, 0x2e9a, 0x66b0, 0xbece, 0xf6e4, 0x5751, 0x1f7b, 0xc705, 0x8f2f,
11712 +
            0x7fe8, 0x37c2, 0xefbc, 0xa796, 0xe91e, 0xa134, 0x794a, 0x3160, 0xc1a7, 0x898d, 0x51f3,
11713 +
            0x19d9, 0xb86c, 0xf046, 0x2838, 0x6012, 0x90d5, 0xd8ff, 0x0081, 0x48ab, 0x4bfa, 0x03d0,
11714 +
            0xdbae, 0x9384, 0x6343, 0x2b69, 0xf317, 0xbb3d, 0x1a88, 0x52a2, 0x8adc, 0xc2f6, 0x3231,
11715 +
            0x7a1b, 0xa265, 0xea4f,
11716 +
        ],
11717 +
        [
11718 +
            0x0000, 0x8e10, 0x1431, 0x9a21, 0x2862, 0xa672, 0x3c53, 0xb243, 0x50c4, 0xded4, 0x44f5,
11719 +
            0xcae5, 0x78a6, 0xf6b6, 0x6c97, 0xe287, 0xa188, 0x2f98, 0xb5b9, 0x3ba9, 0x89ea, 0x07fa,
11720 +
            0x9ddb, 0x13cb, 0xf14c, 0x7f5c, 0xe57d, 0x6b6d, 0xd92e, 0x573e, 0xcd1f, 0x430f, 0x4b01,
11721 +
            0xc511, 0x5f30, 0xd120, 0x6363, 0xed73, 0x7752, 0xf942, 0x1bc5, 0x95d5, 0x0ff4, 0x81e4,
11722 +
            0x33a7, 0xbdb7, 0x2796, 0xa986, 0xea89, 0x6499, 0xfeb8, 0x70a8, 0xc2eb, 0x4cfb, 0xd6da,
11723 +
            0x58ca, 0xba4d, 0x345d, 0xae7c, 0x206c, 0x922f, 0x1c3f, 0x861e, 0x080e, 0x9602, 0x1812,
11724 +
            0x8233, 0x0c23, 0xbe60, 0x3070, 0xaa51, 0x2441, 0xc6c6, 0x48d6, 0xd2f7, 0x5ce7, 0xeea4,
11725 +
            0x60b4, 0xfa95, 0x7485, 0x378a, 0xb99a, 0x23bb, 0xadab, 0x1fe8, 0x91f8, 0x0bd9, 0x85c9,
11726 +
            0x674e, 0xe95e, 0x737f, 0xfd6f, 0x4f2c, 0xc13c, 0x5b1d, 0xd50d, 0xdd03, 0x5313, 0xc932,
11727 +
            0x4722, 0xf561, 0x7b71, 0xe150, 0x6f40, 0x8dc7, 0x03d7, 0x99f6, 0x17e6, 0xa5a5, 0x2bb5,
11728 +
            0xb194, 0x3f84, 0x7c8b, 0xf29b, 0x68ba, 0xe6aa, 0x54e9, 0xdaf9, 0x40d8, 0xcec8, 0x2c4f,
11729 +
            0xa25f, 0x387e, 0xb66e, 0x042d, 0x8a3d, 0x101c, 0x9e0c, 0x2415, 0xaa05, 0x3024, 0xbe34,
11730 +
            0x0c77, 0x8267, 0x1846, 0x9656, 0x74d1, 0xfac1, 0x60e0, 0xeef0, 0x5cb3, 0xd2a3, 0x4882,
11731 +
            0xc692, 0x859d, 0x0b8d, 0x91ac, 0x1fbc, 0xadff, 0x23ef, 0xb9ce, 0x37de, 0xd559, 0x5b49,
11732 +
            0xc168, 0x4f78, 0xfd3b, 0x732b, 0xe90a, 0x671a, 0x6f14, 0xe104, 0x7b25, 0xf535, 0x4776,
11733 +
            0xc966, 0x5347, 0xdd57, 0x3fd0, 0xb1c0, 0x2be1, 0xa5f1, 0x17b2, 0x99a2, 0x0383, 0x8d93,
11734 +
            0xce9c, 0x408c, 0xdaad, 0x54bd, 0xe6fe, 0x68ee, 0xf2cf, 0x7cdf, 0x9e58, 0x1048, 0x8a69,
11735 +
            0x0479, 0xb63a, 0x382a, 0xa20b, 0x2c1b, 0xb217, 0x3c07, 0xa626, 0x2836, 0x9a75, 0x1465,
11736 +
            0x8e44, 0x0054, 0xe2d3, 0x6cc3, 0xf6e2, 0x78f2, 0xcab1, 0x44a1, 0xde80, 0x5090, 0x139f,
11737 +
            0x9d8f, 0x07ae, 0x89be, 0x3bfd, 0xb5ed, 0x2fcc, 0xa1dc, 0x435b, 0xcd4b, 0x576a, 0xd97a,
11738 +
            0x6b39, 0xe529, 0x7f08, 0xf118, 0xf916, 0x7706, 0xed27, 0x6337, 0xd174, 0x5f64, 0xc545,
11739 +
            0x4b55, 0xa9d2, 0x27c2, 0xbde3, 0x33f3, 0x81b0, 0x0fa0, 0x9581, 0x1b91, 0x589e, 0xd68e,
11740 +
            0x4caf, 0xc2bf, 0x70fc, 0xfeec, 0x64cd, 0xeadd, 0x085a, 0x864a, 0x1c6b, 0x927b, 0x2038,
11741 +
            0xae28, 0x3409, 0xba19,
11742 +
        ],
11743 +
    ];
11744 +
11745 +
    pub static CRC16_UMTS_TABLE: [[u16; 256]; 16] = [
11746 +
        [
11747 +
            0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, 0x8033, 0x0036, 0x003c,
11748 +
            0x8039, 0x0028, 0x802d, 0x8027, 0x0022, 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d,
11749 +
            0x8077, 0x0072, 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, 0x80c3,
11750 +
            0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, 0x00f0, 0x80f5, 0x80ff, 0x00fa,
11751 +
            0x80eb, 0x00ee, 0x00e4, 0x80e1, 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4,
11752 +
            0x80b1, 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, 0x8183, 0x0186,
11753 +
            0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab,
11754 +
            0x01ae, 0x01a4, 0x81a1, 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
11755 +
            0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, 0x0140, 0x8145, 0x814f,
11756 +
            0x014a, 0x815b, 0x015e, 0x0154, 0x8151, 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d,
11757 +
            0x8167, 0x0162, 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, 0x0110,
11758 +
            0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, 0x8303, 0x0306, 0x030c, 0x8309,
11759 +
            0x0318, 0x831d, 0x8317, 0x0312, 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324,
11760 +
            0x8321, 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, 0x8353, 0x0356,
11761 +
            0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db,
11762 +
            0x03de, 0x03d4, 0x83d1, 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
11763 +
            0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, 0x0390, 0x8395, 0x839f,
11764 +
            0x039a, 0x838b, 0x038e, 0x0384, 0x8381, 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e,
11765 +
            0x0294, 0x8291, 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, 0x82e3,
11766 +
            0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, 0x02d0, 0x82d5, 0x82df, 0x02da,
11767 +
            0x82cb, 0x02ce, 0x02c4, 0x82c1, 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257,
11768 +
            0x0252, 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, 0x0220, 0x8225,
11769 +
            0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, 0x8213, 0x0216, 0x021c, 0x8219, 0x0208,
11770 +
            0x820d, 0x8207, 0x0202,
11771 +
        ],
11772 +
        [
11773 +
            0x0000, 0x8603, 0x8c03, 0x0a00, 0x9803, 0x1e00, 0x1400, 0x9203, 0xb003, 0x3600, 0x3c00,
11774 +
            0xba03, 0x2800, 0xae03, 0xa403, 0x2200, 0xe003, 0x6600, 0x6c00, 0xea03, 0x7800, 0xfe03,
11775 +
            0xf403, 0x7200, 0x5000, 0xd603, 0xdc03, 0x5a00, 0xc803, 0x4e00, 0x4400, 0xc203, 0x4003,
11776 +
            0xc600, 0xcc00, 0x4a03, 0xd800, 0x5e03, 0x5403, 0xd200, 0xf000, 0x7603, 0x7c03, 0xfa00,
11777 +
            0x6803, 0xee00, 0xe400, 0x6203, 0xa000, 0x2603, 0x2c03, 0xaa00, 0x3803, 0xbe00, 0xb400,
11778 +
            0x3203, 0x1003, 0x9600, 0x9c00, 0x1a03, 0x8800, 0x0e03, 0x0403, 0x8200, 0x8006, 0x0605,
11779 +
            0x0c05, 0x8a06, 0x1805, 0x9e06, 0x9406, 0x1205, 0x3005, 0xb606, 0xbc06, 0x3a05, 0xa806,
11780 +
            0x2e05, 0x2405, 0xa206, 0x6005, 0xe606, 0xec06, 0x6a05, 0xf806, 0x7e05, 0x7405, 0xf206,
11781 +
            0xd006, 0x5605, 0x5c05, 0xda06, 0x4805, 0xce06, 0xc406, 0x4205, 0xc005, 0x4606, 0x4c06,
11782 +
            0xca05, 0x5806, 0xde05, 0xd405, 0x5206, 0x7006, 0xf605, 0xfc05, 0x7a06, 0xe805, 0x6e06,
11783 +
            0x6406, 0xe205, 0x2006, 0xa605, 0xac05, 0x2a06, 0xb805, 0x3e06, 0x3406, 0xb205, 0x9005,
11784 +
            0x1606, 0x1c06, 0x9a05, 0x0806, 0x8e05, 0x8405, 0x0206, 0x8009, 0x060a, 0x0c0a, 0x8a09,
11785 +
            0x180a, 0x9e09, 0x9409, 0x120a, 0x300a, 0xb609, 0xbc09, 0x3a0a, 0xa809, 0x2e0a, 0x240a,
11786 +
            0xa209, 0x600a, 0xe609, 0xec09, 0x6a0a, 0xf809, 0x7e0a, 0x740a, 0xf209, 0xd009, 0x560a,
11787 +
            0x5c0a, 0xda09, 0x480a, 0xce09, 0xc409, 0x420a, 0xc00a, 0x4609, 0x4c09, 0xca0a, 0x5809,
11788 +
            0xde0a, 0xd40a, 0x5209, 0x7009, 0xf60a, 0xfc0a, 0x7a09, 0xe80a, 0x6e09, 0x6409, 0xe20a,
11789 +
            0x2009, 0xa60a, 0xac0a, 0x2a09, 0xb80a, 0x3e09, 0x3409, 0xb20a, 0x900a, 0x1609, 0x1c09,
11790 +
            0x9a0a, 0x0809, 0x8e0a, 0x840a, 0x0209, 0x000f, 0x860c, 0x8c0c, 0x0a0f, 0x980c, 0x1e0f,
11791 +
            0x140f, 0x920c, 0xb00c, 0x360f, 0x3c0f, 0xba0c, 0x280f, 0xae0c, 0xa40c, 0x220f, 0xe00c,
11792 +
            0x660f, 0x6c0f, 0xea0c, 0x780f, 0xfe0c, 0xf40c, 0x720f, 0x500f, 0xd60c, 0xdc0c, 0x5a0f,
11793 +
            0xc80c, 0x4e0f, 0x440f, 0xc20c, 0x400c, 0xc60f, 0xcc0f, 0x4a0c, 0xd80f, 0x5e0c, 0x540c,
11794 +
            0xd20f, 0xf00f, 0x760c, 0x7c0c, 0xfa0f, 0x680c, 0xee0f, 0xe40f, 0x620c, 0xa00f, 0x260c,
11795 +
            0x2c0c, 0xaa0f, 0x380c, 0xbe0f, 0xb40f, 0x320c, 0x100c, 0x960f, 0x9c0f, 0x1a0c, 0x880f,
11796 +
            0x0e0c, 0x040c, 0x820f,
11797 +
        ],
11798 +
        [
11799 +
            0x0000, 0x8017, 0x802b, 0x003c, 0x8053, 0x0044, 0x0078, 0x806f, 0x80a3, 0x00b4, 0x0088,
11800 +
            0x809f, 0x00f0, 0x80e7, 0x80db, 0x00cc, 0x8143, 0x0154, 0x0168, 0x817f, 0x0110, 0x8107,
11801 +
            0x813b, 0x012c, 0x01e0, 0x81f7, 0x81cb, 0x01dc, 0x81b3, 0x01a4, 0x0198, 0x818f, 0x8283,
11802 +
            0x0294, 0x02a8, 0x82bf, 0x02d0, 0x82c7, 0x82fb, 0x02ec, 0x0220, 0x8237, 0x820b, 0x021c,
11803 +
            0x8273, 0x0264, 0x0258, 0x824f, 0x03c0, 0x83d7, 0x83eb, 0x03fc, 0x8393, 0x0384, 0x03b8,
11804 +
            0x83af, 0x8363, 0x0374, 0x0348, 0x835f, 0x0330, 0x8327, 0x831b, 0x030c, 0x8503, 0x0514,
11805 +
            0x0528, 0x853f, 0x0550, 0x8547, 0x857b, 0x056c, 0x05a0, 0x85b7, 0x858b, 0x059c, 0x85f3,
11806 +
            0x05e4, 0x05d8, 0x85cf, 0x0440, 0x8457, 0x846b, 0x047c, 0x8413, 0x0404, 0x0438, 0x842f,
11807 +
            0x84e3, 0x04f4, 0x04c8, 0x84df, 0x04b0, 0x84a7, 0x849b, 0x048c, 0x0780, 0x8797, 0x87ab,
11808 +
            0x07bc, 0x87d3, 0x07c4, 0x07f8, 0x87ef, 0x8723, 0x0734, 0x0708, 0x871f, 0x0770, 0x8767,
11809 +
            0x875b, 0x074c, 0x86c3, 0x06d4, 0x06e8, 0x86ff, 0x0690, 0x8687, 0x86bb, 0x06ac, 0x0660,
11810 +
            0x8677, 0x864b, 0x065c, 0x8633, 0x0624, 0x0618, 0x860f, 0x8a03, 0x0a14, 0x0a28, 0x8a3f,
11811 +
            0x0a50, 0x8a47, 0x8a7b, 0x0a6c, 0x0aa0, 0x8ab7, 0x8a8b, 0x0a9c, 0x8af3, 0x0ae4, 0x0ad8,
11812 +
            0x8acf, 0x0b40, 0x8b57, 0x8b6b, 0x0b7c, 0x8b13, 0x0b04, 0x0b38, 0x8b2f, 0x8be3, 0x0bf4,
11813 +
            0x0bc8, 0x8bdf, 0x0bb0, 0x8ba7, 0x8b9b, 0x0b8c, 0x0880, 0x8897, 0x88ab, 0x08bc, 0x88d3,
11814 +
            0x08c4, 0x08f8, 0x88ef, 0x8823, 0x0834, 0x0808, 0x881f, 0x0870, 0x8867, 0x885b, 0x084c,
11815 +
            0x89c3, 0x09d4, 0x09e8, 0x89ff, 0x0990, 0x8987, 0x89bb, 0x09ac, 0x0960, 0x8977, 0x894b,
11816 +
            0x095c, 0x8933, 0x0924, 0x0918, 0x890f, 0x0f00, 0x8f17, 0x8f2b, 0x0f3c, 0x8f53, 0x0f44,
11817 +
            0x0f78, 0x8f6f, 0x8fa3, 0x0fb4, 0x0f88, 0x8f9f, 0x0ff0, 0x8fe7, 0x8fdb, 0x0fcc, 0x8e43,
11818 +
            0x0e54, 0x0e68, 0x8e7f, 0x0e10, 0x8e07, 0x8e3b, 0x0e2c, 0x0ee0, 0x8ef7, 0x8ecb, 0x0edc,
11819 +
            0x8eb3, 0x0ea4, 0x0e98, 0x8e8f, 0x8d83, 0x0d94, 0x0da8, 0x8dbf, 0x0dd0, 0x8dc7, 0x8dfb,
11820 +
            0x0dec, 0x0d20, 0x8d37, 0x8d0b, 0x0d1c, 0x8d73, 0x0d64, 0x0d58, 0x8d4f, 0x0cc0, 0x8cd7,
11821 +
            0x8ceb, 0x0cfc, 0x8c93, 0x0c84, 0x0cb8, 0x8caf, 0x8c63, 0x0c74, 0x0c48, 0x8c5f, 0x0c30,
11822 +
            0x8c27, 0x8c1b, 0x0c0c,
11823 +
        ],
11824 +
        [
11825 +
            0x0000, 0x9403, 0xa803, 0x3c00, 0xd003, 0x4400, 0x7800, 0xec03, 0x2003, 0xb400, 0x8800,
11826 +
            0x1c03, 0xf000, 0x6403, 0x5803, 0xcc00, 0x4006, 0xd405, 0xe805, 0x7c06, 0x9005, 0x0406,
11827 +
            0x3806, 0xac05, 0x6005, 0xf406, 0xc806, 0x5c05, 0xb006, 0x2405, 0x1805, 0x8c06, 0x800c,
11828 +
            0x140f, 0x280f, 0xbc0c, 0x500f, 0xc40c, 0xf80c, 0x6c0f, 0xa00f, 0x340c, 0x080c, 0x9c0f,
11829 +
            0x700c, 0xe40f, 0xd80f, 0x4c0c, 0xc00a, 0x5409, 0x6809, 0xfc0a, 0x1009, 0x840a, 0xb80a,
11830 +
            0x2c09, 0xe009, 0x740a, 0x480a, 0xdc09, 0x300a, 0xa409, 0x9809, 0x0c0a, 0x801d, 0x141e,
11831 +
            0x281e, 0xbc1d, 0x501e, 0xc41d, 0xf81d, 0x6c1e, 0xa01e, 0x341d, 0x081d, 0x9c1e, 0x701d,
11832 +
            0xe41e, 0xd81e, 0x4c1d, 0xc01b, 0x5418, 0x6818, 0xfc1b, 0x1018, 0x841b, 0xb81b, 0x2c18,
11833 +
            0xe018, 0x741b, 0x481b, 0xdc18, 0x301b, 0xa418, 0x9818, 0x0c1b, 0x0011, 0x9412, 0xa812,
11834 +
            0x3c11, 0xd012, 0x4411, 0x7811, 0xec12, 0x2012, 0xb411, 0x8811, 0x1c12, 0xf011, 0x6412,
11835 +
            0x5812, 0xcc11, 0x4017, 0xd414, 0xe814, 0x7c17, 0x9014, 0x0417, 0x3817, 0xac14, 0x6014,
11836 +
            0xf417, 0xc817, 0x5c14, 0xb017, 0x2414, 0x1814, 0x8c17, 0x803f, 0x143c, 0x283c, 0xbc3f,
11837 +
            0x503c, 0xc43f, 0xf83f, 0x6c3c, 0xa03c, 0x343f, 0x083f, 0x9c3c, 0x703f, 0xe43c, 0xd83c,
11838 +
            0x4c3f, 0xc039, 0x543a, 0x683a, 0xfc39, 0x103a, 0x8439, 0xb839, 0x2c3a, 0xe03a, 0x7439,
11839 +
            0x4839, 0xdc3a, 0x3039, 0xa43a, 0x983a, 0x0c39, 0x0033, 0x9430, 0xa830, 0x3c33, 0xd030,
11840 +
            0x4433, 0x7833, 0xec30, 0x2030, 0xb433, 0x8833, 0x1c30, 0xf033, 0x6430, 0x5830, 0xcc33,
11841 +
            0x4035, 0xd436, 0xe836, 0x7c35, 0x9036, 0x0435, 0x3835, 0xac36, 0x6036, 0xf435, 0xc835,
11842 +
            0x5c36, 0xb035, 0x2436, 0x1836, 0x8c35, 0x0022, 0x9421, 0xa821, 0x3c22, 0xd021, 0x4422,
11843 +
            0x7822, 0xec21, 0x2021, 0xb422, 0x8822, 0x1c21, 0xf022, 0x6421, 0x5821, 0xcc22, 0x4024,
11844 +
            0xd427, 0xe827, 0x7c24, 0x9027, 0x0424, 0x3824, 0xac27, 0x6027, 0xf424, 0xc824, 0x5c27,
11845 +
            0xb024, 0x2427, 0x1827, 0x8c24, 0x802e, 0x142d, 0x282d, 0xbc2e, 0x502d, 0xc42e, 0xf82e,
11846 +
            0x6c2d, 0xa02d, 0x342e, 0x082e, 0x9c2d, 0x702e, 0xe42d, 0xd82d, 0x4c2e, 0xc028, 0x542b,
11847 +
            0x682b, 0xfc28, 0x102b, 0x8428, 0xb828, 0x2c2b, 0xe02b, 0x7428, 0x4828, 0xdc2b, 0x3028,
11848 +
            0xa42b, 0x982b, 0x0c28,
11849 +
        ],
11850 +
        [
11851 +
            0x0000, 0x807b, 0x80f3, 0x0088, 0x81e3, 0x0198, 0x0110, 0x816b, 0x83c3, 0x03b8, 0x0330,
11852 +
            0x834b, 0x0220, 0x825b, 0x82d3, 0x02a8, 0x8783, 0x07f8, 0x0770, 0x870b, 0x0660, 0x861b,
11853 +
            0x8693, 0x06e8, 0x0440, 0x843b, 0x84b3, 0x04c8, 0x85a3, 0x05d8, 0x0550, 0x852b, 0x8f03,
11854 +
            0x0f78, 0x0ff0, 0x8f8b, 0x0ee0, 0x8e9b, 0x8e13, 0x0e68, 0x0cc0, 0x8cbb, 0x8c33, 0x0c48,
11855 +
            0x8d23, 0x0d58, 0x0dd0, 0x8dab, 0x0880, 0x88fb, 0x8873, 0x0808, 0x8963, 0x0918, 0x0990,
11856 +
            0x89eb, 0x8b43, 0x0b38, 0x0bb0, 0x8bcb, 0x0aa0, 0x8adb, 0x8a53, 0x0a28, 0x9e03, 0x1e78,
11857 +
            0x1ef0, 0x9e8b, 0x1fe0, 0x9f9b, 0x9f13, 0x1f68, 0x1dc0, 0x9dbb, 0x9d33, 0x1d48, 0x9c23,
11858 +
            0x1c58, 0x1cd0, 0x9cab, 0x1980, 0x99fb, 0x9973, 0x1908, 0x9863, 0x1818, 0x1890, 0x98eb,
11859 +
            0x9a43, 0x1a38, 0x1ab0, 0x9acb, 0x1ba0, 0x9bdb, 0x9b53, 0x1b28, 0x1100, 0x917b, 0x91f3,
11860 +
            0x1188, 0x90e3, 0x1098, 0x1010, 0x906b, 0x92c3, 0x12b8, 0x1230, 0x924b, 0x1320, 0x935b,
11861 +
            0x93d3, 0x13a8, 0x9683, 0x16f8, 0x1670, 0x960b, 0x1760, 0x971b, 0x9793, 0x17e8, 0x1540,
11862 +
            0x953b, 0x95b3, 0x15c8, 0x94a3, 0x14d8, 0x1450, 0x942b, 0xbc03, 0x3c78, 0x3cf0, 0xbc8b,
11863 +
            0x3de0, 0xbd9b, 0xbd13, 0x3d68, 0x3fc0, 0xbfbb, 0xbf33, 0x3f48, 0xbe23, 0x3e58, 0x3ed0,
11864 +
            0xbeab, 0x3b80, 0xbbfb, 0xbb73, 0x3b08, 0xba63, 0x3a18, 0x3a90, 0xbaeb, 0xb843, 0x3838,
11865 +
            0x38b0, 0xb8cb, 0x39a0, 0xb9db, 0xb953, 0x3928, 0x3300, 0xb37b, 0xb3f3, 0x3388, 0xb2e3,
11866 +
            0x3298, 0x3210, 0xb26b, 0xb0c3, 0x30b8, 0x3030, 0xb04b, 0x3120, 0xb15b, 0xb1d3, 0x31a8,
11867 +
            0xb483, 0x34f8, 0x3470, 0xb40b, 0x3560, 0xb51b, 0xb593, 0x35e8, 0x3740, 0xb73b, 0xb7b3,
11868 +
            0x37c8, 0xb6a3, 0x36d8, 0x3650, 0xb62b, 0x2200, 0xa27b, 0xa2f3, 0x2288, 0xa3e3, 0x2398,
11869 +
            0x2310, 0xa36b, 0xa1c3, 0x21b8, 0x2130, 0xa14b, 0x2020, 0xa05b, 0xa0d3, 0x20a8, 0xa583,
11870 +
            0x25f8, 0x2570, 0xa50b, 0x2460, 0xa41b, 0xa493, 0x24e8, 0x2640, 0xa63b, 0xa6b3, 0x26c8,
11871 +
            0xa7a3, 0x27d8, 0x2750, 0xa72b, 0xad03, 0x2d78, 0x2df0, 0xad8b, 0x2ce0, 0xac9b, 0xac13,
11872 +
            0x2c68, 0x2ec0, 0xaebb, 0xae33, 0x2e48, 0xaf23, 0x2f58, 0x2fd0, 0xafab, 0x2a80, 0xaafb,
11873 +
            0xaa73, 0x2a08, 0xab63, 0x2b18, 0x2b90, 0xabeb, 0xa943, 0x2938, 0x29b0, 0xa9cb, 0x28a0,
11874 +
            0xa8db, 0xa853, 0x2828,
11875 +
        ],
11876 +
        [
11877 +
            0x0000, 0xf803, 0x7003, 0x8800, 0xe006, 0x1805, 0x9005, 0x6806, 0x4009, 0xb80a, 0x300a,
11878 +
            0xc809, 0xa00f, 0x580c, 0xd00c, 0x280f, 0x8012, 0x7811, 0xf011, 0x0812, 0x6014, 0x9817,
11879 +
            0x1017, 0xe814, 0xc01b, 0x3818, 0xb018, 0x481b, 0x201d, 0xd81e, 0x501e, 0xa81d, 0x8021,
11880 +
            0x7822, 0xf022, 0x0821, 0x6027, 0x9824, 0x1024, 0xe827, 0xc028, 0x382b, 0xb02b, 0x4828,
11881 +
            0x202e, 0xd82d, 0x502d, 0xa82e, 0x0033, 0xf830, 0x7030, 0x8833, 0xe035, 0x1836, 0x9036,
11882 +
            0x6835, 0x403a, 0xb839, 0x3039, 0xc83a, 0xa03c, 0x583f, 0xd03f, 0x283c, 0x8047, 0x7844,
11883 +
            0xf044, 0x0847, 0x6041, 0x9842, 0x1042, 0xe841, 0xc04e, 0x384d, 0xb04d, 0x484e, 0x2048,
11884 +
            0xd84b, 0x504b, 0xa848, 0x0055, 0xf856, 0x7056, 0x8855, 0xe053, 0x1850, 0x9050, 0x6853,
11885 +
            0x405c, 0xb85f, 0x305f, 0xc85c, 0xa05a, 0x5859, 0xd059, 0x285a, 0x0066, 0xf865, 0x7065,
11886 +
            0x8866, 0xe060, 0x1863, 0x9063, 0x6860, 0x406f, 0xb86c, 0x306c, 0xc86f, 0xa069, 0x586a,
11887 +
            0xd06a, 0x2869, 0x8074, 0x7877, 0xf077, 0x0874, 0x6072, 0x9871, 0x1071, 0xe872, 0xc07d,
11888 +
            0x387e, 0xb07e, 0x487d, 0x207b, 0xd878, 0x5078, 0xa87b, 0x808b, 0x7888, 0xf088, 0x088b,
11889 +
            0x608d, 0x988e, 0x108e, 0xe88d, 0xc082, 0x3881, 0xb081, 0x4882, 0x2084, 0xd887, 0x5087,
11890 +
            0xa884, 0x0099, 0xf89a, 0x709a, 0x8899, 0xe09f, 0x189c, 0x909c, 0x689f, 0x4090, 0xb893,
11891 +
            0x3093, 0xc890, 0xa096, 0x5895, 0xd095, 0x2896, 0x00aa, 0xf8a9, 0x70a9, 0x88aa, 0xe0ac,
11892 +
            0x18af, 0x90af, 0x68ac, 0x40a3, 0xb8a0, 0x30a0, 0xc8a3, 0xa0a5, 0x58a6, 0xd0a6, 0x28a5,
11893 +
            0x80b8, 0x78bb, 0xf0bb, 0x08b8, 0x60be, 0x98bd, 0x10bd, 0xe8be, 0xc0b1, 0x38b2, 0xb0b2,
11894 +
            0x48b1, 0x20b7, 0xd8b4, 0x50b4, 0xa8b7, 0x00cc, 0xf8cf, 0x70cf, 0x88cc, 0xe0ca, 0x18c9,
11895 +
            0x90c9, 0x68ca, 0x40c5, 0xb8c6, 0x30c6, 0xc8c5, 0xa0c3, 0x58c0, 0xd0c0, 0x28c3, 0x80de,
11896 +
            0x78dd, 0xf0dd, 0x08de, 0x60d8, 0x98db, 0x10db, 0xe8d8, 0xc0d7, 0x38d4, 0xb0d4, 0x48d7,
11897 +
            0x20d1, 0xd8d2, 0x50d2, 0xa8d1, 0x80ed, 0x78ee, 0xf0ee, 0x08ed, 0x60eb, 0x98e8, 0x10e8,
11898 +
            0xe8eb, 0xc0e4, 0x38e7, 0xb0e7, 0x48e4, 0x20e2, 0xd8e1, 0x50e1, 0xa8e2, 0x00ff, 0xf8fc,
11899 +
            0x70fc, 0x88ff, 0xe0f9, 0x18fa, 0x90fa, 0x68f9, 0x40f6, 0xb8f5, 0x30f5, 0xc8f6, 0xa0f0,
11900 +
            0x58f3, 0xd0f3, 0x28f0,
11901 +
        ],
11902 +
        [
11903 +
            0x0000, 0x8113, 0x8223, 0x0330, 0x8443, 0x0550, 0x0660, 0x8773, 0x8883, 0x0990, 0x0aa0,
11904 +
            0x8bb3, 0x0cc0, 0x8dd3, 0x8ee3, 0x0ff0, 0x9103, 0x1010, 0x1320, 0x9233, 0x1540, 0x9453,
11905 +
            0x9763, 0x1670, 0x1980, 0x9893, 0x9ba3, 0x1ab0, 0x9dc3, 0x1cd0, 0x1fe0, 0x9ef3, 0xa203,
11906 +
            0x2310, 0x2020, 0xa133, 0x2640, 0xa753, 0xa463, 0x2570, 0x2a80, 0xab93, 0xa8a3, 0x29b0,
11907 +
            0xaec3, 0x2fd0, 0x2ce0, 0xadf3, 0x3300, 0xb213, 0xb123, 0x3030, 0xb743, 0x3650, 0x3560,
11908 +
            0xb473, 0xbb83, 0x3a90, 0x39a0, 0xb8b3, 0x3fc0, 0xbed3, 0xbde3, 0x3cf0, 0xc403, 0x4510,
11909 +
            0x4620, 0xc733, 0x4040, 0xc153, 0xc263, 0x4370, 0x4c80, 0xcd93, 0xcea3, 0x4fb0, 0xc8c3,
11910 +
            0x49d0, 0x4ae0, 0xcbf3, 0x5500, 0xd413, 0xd723, 0x5630, 0xd143, 0x5050, 0x5360, 0xd273,
11911 +
            0xdd83, 0x5c90, 0x5fa0, 0xdeb3, 0x59c0, 0xd8d3, 0xdbe3, 0x5af0, 0x6600, 0xe713, 0xe423,
11912 +
            0x6530, 0xe243, 0x6350, 0x6060, 0xe173, 0xee83, 0x6f90, 0x6ca0, 0xedb3, 0x6ac0, 0xebd3,
11913 +
            0xe8e3, 0x69f0, 0xf703, 0x7610, 0x7520, 0xf433, 0x7340, 0xf253, 0xf163, 0x7070, 0x7f80,
11914 +
            0xfe93, 0xfda3, 0x7cb0, 0xfbc3, 0x7ad0, 0x79e0, 0xf8f3, 0x0803, 0x8910, 0x8a20, 0x0b33,
11915 +
            0x8c40, 0x0d53, 0x0e63, 0x8f70, 0x8080, 0x0193, 0x02a3, 0x83b0, 0x04c3, 0x85d0, 0x86e0,
11916 +
            0x07f3, 0x9900, 0x1813, 0x1b23, 0x9a30, 0x1d43, 0x9c50, 0x9f60, 0x1e73, 0x1183, 0x9090,
11917 +
            0x93a0, 0x12b3, 0x95c0, 0x14d3, 0x17e3, 0x96f0, 0xaa00, 0x2b13, 0x2823, 0xa930, 0x2e43,
11918 +
            0xaf50, 0xac60, 0x2d73, 0x2283, 0xa390, 0xa0a0, 0x21b3, 0xa6c0, 0x27d3, 0x24e3, 0xa5f0,
11919 +
            0x3b03, 0xba10, 0xb920, 0x3833, 0xbf40, 0x3e53, 0x3d63, 0xbc70, 0xb380, 0x3293, 0x31a3,
11920 +
            0xb0b0, 0x37c3, 0xb6d0, 0xb5e0, 0x34f3, 0xcc00, 0x4d13, 0x4e23, 0xcf30, 0x4843, 0xc950,
11921 +
            0xca60, 0x4b73, 0x4483, 0xc590, 0xc6a0, 0x47b3, 0xc0c0, 0x41d3, 0x42e3, 0xc3f0, 0x5d03,
11922 +
            0xdc10, 0xdf20, 0x5e33, 0xd940, 0x5853, 0x5b63, 0xda70, 0xd580, 0x5493, 0x57a3, 0xd6b0,
11923 +
            0x51c3, 0xd0d0, 0xd3e0, 0x52f3, 0x6e03, 0xef10, 0xec20, 0x6d33, 0xea40, 0x6b53, 0x6863,
11924 +
            0xe970, 0xe680, 0x6793, 0x64a3, 0xe5b0, 0x62c3, 0xe3d0, 0xe0e0, 0x61f3, 0xff00, 0x7e13,
11925 +
            0x7d23, 0xfc30, 0x7b43, 0xfa50, 0xf960, 0x7873, 0x7783, 0xf690, 0xf5a0, 0x74b3, 0xf3c0,
11926 +
            0x72d3, 0x71e3, 0xf0f0,
11927 +
        ],
11928 +
        [
11929 +
            0x0000, 0x1006, 0x200c, 0x300a, 0x4018, 0x501e, 0x6014, 0x7012, 0x8030, 0x9036, 0xa03c,
11930 +
            0xb03a, 0xc028, 0xd02e, 0xe024, 0xf022, 0x8065, 0x9063, 0xa069, 0xb06f, 0xc07d, 0xd07b,
11931 +
            0xe071, 0xf077, 0x0055, 0x1053, 0x2059, 0x305f, 0x404d, 0x504b, 0x6041, 0x7047, 0x80cf,
11932 +
            0x90c9, 0xa0c3, 0xb0c5, 0xc0d7, 0xd0d1, 0xe0db, 0xf0dd, 0x00ff, 0x10f9, 0x20f3, 0x30f5,
11933 +
            0x40e7, 0x50e1, 0x60eb, 0x70ed, 0x00aa, 0x10ac, 0x20a6, 0x30a0, 0x40b2, 0x50b4, 0x60be,
11934 +
            0x70b8, 0x809a, 0x909c, 0xa096, 0xb090, 0xc082, 0xd084, 0xe08e, 0xf088, 0x819b, 0x919d,
11935 +
            0xa197, 0xb191, 0xc183, 0xd185, 0xe18f, 0xf189, 0x01ab, 0x11ad, 0x21a7, 0x31a1, 0x41b3,
11936 +
            0x51b5, 0x61bf, 0x71b9, 0x01fe, 0x11f8, 0x21f2, 0x31f4, 0x41e6, 0x51e0, 0x61ea, 0x71ec,
11937 +
            0x81ce, 0x91c8, 0xa1c2, 0xb1c4, 0xc1d6, 0xd1d0, 0xe1da, 0xf1dc, 0x0154, 0x1152, 0x2158,
11938 +
            0x315e, 0x414c, 0x514a, 0x6140, 0x7146, 0x8164, 0x9162, 0xa168, 0xb16e, 0xc17c, 0xd17a,
11939 +
            0xe170, 0xf176, 0x8131, 0x9137, 0xa13d, 0xb13b, 0xc129, 0xd12f, 0xe125, 0xf123, 0x0101,
11940 +
            0x1107, 0x210d, 0x310b, 0x4119, 0x511f, 0x6115, 0x7113, 0x8333, 0x9335, 0xa33f, 0xb339,
11941 +
            0xc32b, 0xd32d, 0xe327, 0xf321, 0x0303, 0x1305, 0x230f, 0x3309, 0x431b, 0x531d, 0x6317,
11942 +
            0x7311, 0x0356, 0x1350, 0x235a, 0x335c, 0x434e, 0x5348, 0x6342, 0x7344, 0x8366, 0x9360,
11943 +
            0xa36a, 0xb36c, 0xc37e, 0xd378, 0xe372, 0xf374, 0x03fc, 0x13fa, 0x23f0, 0x33f6, 0x43e4,
11944 +
            0x53e2, 0x63e8, 0x73ee, 0x83cc, 0x93ca, 0xa3c0, 0xb3c6, 0xc3d4, 0xd3d2, 0xe3d8, 0xf3de,
11945 +
            0x8399, 0x939f, 0xa395, 0xb393, 0xc381, 0xd387, 0xe38d, 0xf38b, 0x03a9, 0x13af, 0x23a5,
11946 +
            0x33a3, 0x43b1, 0x53b7, 0x63bd, 0x73bb, 0x02a8, 0x12ae, 0x22a4, 0x32a2, 0x42b0, 0x52b6,
11947 +
            0x62bc, 0x72ba, 0x8298, 0x929e, 0xa294, 0xb292, 0xc280, 0xd286, 0xe28c, 0xf28a, 0x82cd,
11948 +
            0x92cb, 0xa2c1, 0xb2c7, 0xc2d5, 0xd2d3, 0xe2d9, 0xf2df, 0x02fd, 0x12fb, 0x22f1, 0x32f7,
11949 +
            0x42e5, 0x52e3, 0x62e9, 0x72ef, 0x8267, 0x9261, 0xa26b, 0xb26d, 0xc27f, 0xd279, 0xe273,
11950 +
            0xf275, 0x0257, 0x1251, 0x225b, 0x325d, 0x424f, 0x5249, 0x6243, 0x7245, 0x0202, 0x1204,
11951 +
            0x220e, 0x3208, 0x421a, 0x521c, 0x6216, 0x7210, 0x8232, 0x9234, 0xa23e, 0xb238, 0xc22a,
11952 +
            0xd22c, 0xe226, 0xf220,
11953 +
        ],
11954 +
        [
11955 +
            0x0000, 0x8663, 0x8cc3, 0x0aa0, 0x9983, 0x1fe0, 0x1540, 0x9323, 0xb303, 0x3560, 0x3fc0,
11956 +
            0xb9a3, 0x2a80, 0xace3, 0xa643, 0x2020, 0xe603, 0x6060, 0x6ac0, 0xeca3, 0x7f80, 0xf9e3,
11957 +
            0xf343, 0x7520, 0x5500, 0xd363, 0xd9c3, 0x5fa0, 0xcc83, 0x4ae0, 0x4040, 0xc623, 0x4c03,
11958 +
            0xca60, 0xc0c0, 0x46a3, 0xd580, 0x53e3, 0x5943, 0xdf20, 0xff00, 0x7963, 0x73c3, 0xf5a0,
11959 +
            0x6683, 0xe0e0, 0xea40, 0x6c23, 0xaa00, 0x2c63, 0x26c3, 0xa0a0, 0x3383, 0xb5e0, 0xbf40,
11960 +
            0x3923, 0x1903, 0x9f60, 0x95c0, 0x13a3, 0x8080, 0x06e3, 0x0c43, 0x8a20, 0x9806, 0x1e65,
11961 +
            0x14c5, 0x92a6, 0x0185, 0x87e6, 0x8d46, 0x0b25, 0x2b05, 0xad66, 0xa7c6, 0x21a5, 0xb286,
11962 +
            0x34e5, 0x3e45, 0xb826, 0x7e05, 0xf866, 0xf2c6, 0x74a5, 0xe786, 0x61e5, 0x6b45, 0xed26,
11963 +
            0xcd06, 0x4b65, 0x41c5, 0xc7a6, 0x5485, 0xd2e6, 0xd846, 0x5e25, 0xd405, 0x5266, 0x58c6,
11964 +
            0xdea5, 0x4d86, 0xcbe5, 0xc145, 0x4726, 0x6706, 0xe165, 0xebc5, 0x6da6, 0xfe85, 0x78e6,
11965 +
            0x7246, 0xf425, 0x3206, 0xb465, 0xbec5, 0x38a6, 0xab85, 0x2de6, 0x2746, 0xa125, 0x8105,
11966 +
            0x0766, 0x0dc6, 0x8ba5, 0x1886, 0x9ee5, 0x9445, 0x1226, 0xb009, 0x366a, 0x3cca, 0xbaa9,
11967 +
            0x298a, 0xafe9, 0xa549, 0x232a, 0x030a, 0x8569, 0x8fc9, 0x09aa, 0x9a89, 0x1cea, 0x164a,
11968 +
            0x9029, 0x560a, 0xd069, 0xdac9, 0x5caa, 0xcf89, 0x49ea, 0x434a, 0xc529, 0xe509, 0x636a,
11969 +
            0x69ca, 0xefa9, 0x7c8a, 0xfae9, 0xf049, 0x762a, 0xfc0a, 0x7a69, 0x70c9, 0xf6aa, 0x6589,
11970 +
            0xe3ea, 0xe94a, 0x6f29, 0x4f09, 0xc96a, 0xc3ca, 0x45a9, 0xd68a, 0x50e9, 0x5a49, 0xdc2a,
11971 +
            0x1a09, 0x9c6a, 0x96ca, 0x10a9, 0x838a, 0x05e9, 0x0f49, 0x892a, 0xa90a, 0x2f69, 0x25c9,
11972 +
            0xa3aa, 0x3089, 0xb6ea, 0xbc4a, 0x3a29, 0x280f, 0xae6c, 0xa4cc, 0x22af, 0xb18c, 0x37ef,
11973 +
            0x3d4f, 0xbb2c, 0x9b0c, 0x1d6f, 0x17cf, 0x91ac, 0x028f, 0x84ec, 0x8e4c, 0x082f, 0xce0c,
11974 +
            0x486f, 0x42cf, 0xc4ac, 0x578f, 0xd1ec, 0xdb4c, 0x5d2f, 0x7d0f, 0xfb6c, 0xf1cc, 0x77af,
11975 +
            0xe48c, 0x62ef, 0x684f, 0xee2c, 0x640c, 0xe26f, 0xe8cf, 0x6eac, 0xfd8f, 0x7bec, 0x714c,
11976 +
            0xf72f, 0xd70f, 0x516c, 0x5bcc, 0xddaf, 0x4e8c, 0xc8ef, 0xc24f, 0x442c, 0x820f, 0x046c,
11977 +
            0x0ecc, 0x88af, 0x1b8c, 0x9def, 0x974f, 0x112c, 0x310c, 0xb76f, 0xbdcf, 0x3bac, 0xa88f,
11978 +
            0x2eec, 0x244c, 0xa22f,
11979 +
        ],
11980 +
        [
11981 +
            0x0000, 0xe017, 0x402b, 0xa03c, 0x8056, 0x6041, 0xc07d, 0x206a, 0x80a9, 0x60be, 0xc082,
11982 +
            0x2095, 0x00ff, 0xe0e8, 0x40d4, 0xa0c3, 0x8157, 0x6140, 0xc17c, 0x216b, 0x0101, 0xe116,
11983 +
            0x412a, 0xa13d, 0x01fe, 0xe1e9, 0x41d5, 0xa1c2, 0x81a8, 0x61bf, 0xc183, 0x2194, 0x82ab,
11984 +
            0x62bc, 0xc280, 0x2297, 0x02fd, 0xe2ea, 0x42d6, 0xa2c1, 0x0202, 0xe215, 0x4229, 0xa23e,
11985 +
            0x8254, 0x6243, 0xc27f, 0x2268, 0x03fc, 0xe3eb, 0x43d7, 0xa3c0, 0x83aa, 0x63bd, 0xc381,
11986 +
            0x2396, 0x8355, 0x6342, 0xc37e, 0x2369, 0x0303, 0xe314, 0x4328, 0xa33f, 0x8553, 0x6544,
11987 +
            0xc578, 0x256f, 0x0505, 0xe512, 0x452e, 0xa539, 0x05fa, 0xe5ed, 0x45d1, 0xa5c6, 0x85ac,
11988 +
            0x65bb, 0xc587, 0x2590, 0x0404, 0xe413, 0x442f, 0xa438, 0x8452, 0x6445, 0xc479, 0x246e,
11989 +
            0x84ad, 0x64ba, 0xc486, 0x2491, 0x04fb, 0xe4ec, 0x44d0, 0xa4c7, 0x07f8, 0xe7ef, 0x47d3,
11990 +
            0xa7c4, 0x87ae, 0x67b9, 0xc785, 0x2792, 0x8751, 0x6746, 0xc77a, 0x276d, 0x0707, 0xe710,
11991 +
            0x472c, 0xa73b, 0x86af, 0x66b8, 0xc684, 0x2693, 0x06f9, 0xe6ee, 0x46d2, 0xa6c5, 0x0606,
11992 +
            0xe611, 0x462d, 0xa63a, 0x8650, 0x6647, 0xc67b, 0x266c, 0x8aa3, 0x6ab4, 0xca88, 0x2a9f,
11993 +
            0x0af5, 0xeae2, 0x4ade, 0xaac9, 0x0a0a, 0xea1d, 0x4a21, 0xaa36, 0x8a5c, 0x6a4b, 0xca77,
11994 +
            0x2a60, 0x0bf4, 0xebe3, 0x4bdf, 0xabc8, 0x8ba2, 0x6bb5, 0xcb89, 0x2b9e, 0x8b5d, 0x6b4a,
11995 +
            0xcb76, 0x2b61, 0x0b0b, 0xeb1c, 0x4b20, 0xab37, 0x0808, 0xe81f, 0x4823, 0xa834, 0x885e,
11996 +
            0x6849, 0xc875, 0x2862, 0x88a1, 0x68b6, 0xc88a, 0x289d, 0x08f7, 0xe8e0, 0x48dc, 0xa8cb,
11997 +
            0x895f, 0x6948, 0xc974, 0x2963, 0x0909, 0xe91e, 0x4922, 0xa935, 0x09f6, 0xe9e1, 0x49dd,
11998 +
            0xa9ca, 0x89a0, 0x69b7, 0xc98b, 0x299c, 0x0ff0, 0xefe7, 0x4fdb, 0xafcc, 0x8fa6, 0x6fb1,
11999 +
            0xcf8d, 0x2f9a, 0x8f59, 0x6f4e, 0xcf72, 0x2f65, 0x0f0f, 0xef18, 0x4f24, 0xaf33, 0x8ea7,
12000 +
            0x6eb0, 0xce8c, 0x2e9b, 0x0ef1, 0xeee6, 0x4eda, 0xaecd, 0x0e0e, 0xee19, 0x4e25, 0xae32,
12001 +
            0x8e58, 0x6e4f, 0xce73, 0x2e64, 0x8d5b, 0x6d4c, 0xcd70, 0x2d67, 0x0d0d, 0xed1a, 0x4d26,
12002 +
            0xad31, 0x0df2, 0xede5, 0x4dd9, 0xadce, 0x8da4, 0x6db3, 0xcd8f, 0x2d98, 0x0c0c, 0xec1b,
12003 +
            0x4c27, 0xac30, 0x8c5a, 0x6c4d, 0xcc71, 0x2c66, 0x8ca5, 0x6cb2, 0xcc8e, 0x2c99, 0x0cf3,
12004 +
            0xece4, 0x4cd8, 0xaccf,
12005 +
        ],
12006 +
        [
12007 +
            0x0000, 0x9543, 0xaa83, 0x3fc0, 0xd503, 0x4040, 0x7f80, 0xeac3, 0x2a03, 0xbf40, 0x8080,
12008 +
            0x15c3, 0xff00, 0x6a43, 0x5583, 0xc0c0, 0x5406, 0xc145, 0xfe85, 0x6bc6, 0x8105, 0x1446,
12009 +
            0x2b86, 0xbec5, 0x7e05, 0xeb46, 0xd486, 0x41c5, 0xab06, 0x3e45, 0x0185, 0x94c6, 0xa80c,
12010 +
            0x3d4f, 0x028f, 0x97cc, 0x7d0f, 0xe84c, 0xd78c, 0x42cf, 0x820f, 0x174c, 0x288c, 0xbdcf,
12011 +
            0x570c, 0xc24f, 0xfd8f, 0x68cc, 0xfc0a, 0x6949, 0x5689, 0xc3ca, 0x2909, 0xbc4a, 0x838a,
12012 +
            0x16c9, 0xd609, 0x434a, 0x7c8a, 0xe9c9, 0x030a, 0x9649, 0xa989, 0x3cca, 0xd01d, 0x455e,
12013 +
            0x7a9e, 0xefdd, 0x051e, 0x905d, 0xaf9d, 0x3ade, 0xfa1e, 0x6f5d, 0x509d, 0xc5de, 0x2f1d,
12014 +
            0xba5e, 0x859e, 0x10dd, 0x841b, 0x1158, 0x2e98, 0xbbdb, 0x5118, 0xc45b, 0xfb9b, 0x6ed8,
12015 +
            0xae18, 0x3b5b, 0x049b, 0x91d8, 0x7b1b, 0xee58, 0xd198, 0x44db, 0x7811, 0xed52, 0xd292,
12016 +
            0x47d1, 0xad12, 0x3851, 0x0791, 0x92d2, 0x5212, 0xc751, 0xf891, 0x6dd2, 0x8711, 0x1252,
12017 +
            0x2d92, 0xb8d1, 0x2c17, 0xb954, 0x8694, 0x13d7, 0xf914, 0x6c57, 0x5397, 0xc6d4, 0x0614,
12018 +
            0x9357, 0xac97, 0x39d4, 0xd317, 0x4654, 0x7994, 0xecd7, 0x203f, 0xb57c, 0x8abc, 0x1fff,
12019 +
            0xf53c, 0x607f, 0x5fbf, 0xcafc, 0x0a3c, 0x9f7f, 0xa0bf, 0x35fc, 0xdf3f, 0x4a7c, 0x75bc,
12020 +
            0xe0ff, 0x7439, 0xe17a, 0xdeba, 0x4bf9, 0xa13a, 0x3479, 0x0bb9, 0x9efa, 0x5e3a, 0xcb79,
12021 +
            0xf4b9, 0x61fa, 0x8b39, 0x1e7a, 0x21ba, 0xb4f9, 0x8833, 0x1d70, 0x22b0, 0xb7f3, 0x5d30,
12022 +
            0xc873, 0xf7b3, 0x62f0, 0xa230, 0x3773, 0x08b3, 0x9df0, 0x7733, 0xe270, 0xddb0, 0x48f3,
12023 +
            0xdc35, 0x4976, 0x76b6, 0xe3f5, 0x0936, 0x9c75, 0xa3b5, 0x36f6, 0xf636, 0x6375, 0x5cb5,
12024 +
            0xc9f6, 0x2335, 0xb676, 0x89b6, 0x1cf5, 0xf022, 0x6561, 0x5aa1, 0xcfe2, 0x2521, 0xb062,
12025 +
            0x8fa2, 0x1ae1, 0xda21, 0x4f62, 0x70a2, 0xe5e1, 0x0f22, 0x9a61, 0xa5a1, 0x30e2, 0xa424,
12026 +
            0x3167, 0x0ea7, 0x9be4, 0x7127, 0xe464, 0xdba4, 0x4ee7, 0x8e27, 0x1b64, 0x24a4, 0xb1e7,
12027 +
            0x5b24, 0xce67, 0xf1a7, 0x64e4, 0x582e, 0xcd6d, 0xf2ad, 0x67ee, 0x8d2d, 0x186e, 0x27ae,
12028 +
            0xb2ed, 0x722d, 0xe76e, 0xd8ae, 0x4ded, 0xa72e, 0x326d, 0x0dad, 0x98ee, 0x0c28, 0x996b,
12029 +
            0xa6ab, 0x33e8, 0xd92b, 0x4c68, 0x73a8, 0xe6eb, 0x262b, 0xb368, 0x8ca8, 0x19eb, 0xf328,
12030 +
            0x666b, 0x59ab, 0xcce8,
12031 +
        ],
12032 +
        [
12033 +
            0x0000, 0x407e, 0x80fc, 0xc082, 0x81fd, 0xc183, 0x0101, 0x417f, 0x83ff, 0xc381, 0x0303,
12034 +
            0x437d, 0x0202, 0x427c, 0x82fe, 0xc280, 0x87fb, 0xc785, 0x0707, 0x4779, 0x0606, 0x4678,
12035 +
            0x86fa, 0xc684, 0x0404, 0x447a, 0x84f8, 0xc486, 0x85f9, 0xc587, 0x0505, 0x457b, 0x8ff3,
12036 +
            0xcf8d, 0x0f0f, 0x4f71, 0x0e0e, 0x4e70, 0x8ef2, 0xce8c, 0x0c0c, 0x4c72, 0x8cf0, 0xcc8e,
12037 +
            0x8df1, 0xcd8f, 0x0d0d, 0x4d73, 0x0808, 0x4876, 0x88f4, 0xc88a, 0x89f5, 0xc98b, 0x0909,
12038 +
            0x4977, 0x8bf7, 0xcb89, 0x0b0b, 0x4b75, 0x0a0a, 0x4a74, 0x8af6, 0xca88, 0x9fe3, 0xdf9d,
12039 +
            0x1f1f, 0x5f61, 0x1e1e, 0x5e60, 0x9ee2, 0xde9c, 0x1c1c, 0x5c62, 0x9ce0, 0xdc9e, 0x9de1,
12040 +
            0xdd9f, 0x1d1d, 0x5d63, 0x1818, 0x5866, 0x98e4, 0xd89a, 0x99e5, 0xd99b, 0x1919, 0x5967,
12041 +
            0x9be7, 0xdb99, 0x1b1b, 0x5b65, 0x1a1a, 0x5a64, 0x9ae6, 0xda98, 0x1010, 0x506e, 0x90ec,
12042 +
            0xd092, 0x91ed, 0xd193, 0x1111, 0x516f, 0x93ef, 0xd391, 0x1313, 0x536d, 0x1212, 0x526c,
12043 +
            0x92ee, 0xd290, 0x97eb, 0xd795, 0x1717, 0x5769, 0x1616, 0x5668, 0x96ea, 0xd694, 0x1414,
12044 +
            0x546a, 0x94e8, 0xd496, 0x95e9, 0xd597, 0x1515, 0x556b, 0xbfc3, 0xffbd, 0x3f3f, 0x7f41,
12045 +
            0x3e3e, 0x7e40, 0xbec2, 0xfebc, 0x3c3c, 0x7c42, 0xbcc0, 0xfcbe, 0xbdc1, 0xfdbf, 0x3d3d,
12046 +
            0x7d43, 0x3838, 0x7846, 0xb8c4, 0xf8ba, 0xb9c5, 0xf9bb, 0x3939, 0x7947, 0xbbc7, 0xfbb9,
12047 +
            0x3b3b, 0x7b45, 0x3a3a, 0x7a44, 0xbac6, 0xfab8, 0x3030, 0x704e, 0xb0cc, 0xf0b2, 0xb1cd,
12048 +
            0xf1b3, 0x3131, 0x714f, 0xb3cf, 0xf3b1, 0x3333, 0x734d, 0x3232, 0x724c, 0xb2ce, 0xf2b0,
12049 +
            0xb7cb, 0xf7b5, 0x3737, 0x7749, 0x3636, 0x7648, 0xb6ca, 0xf6b4, 0x3434, 0x744a, 0xb4c8,
12050 +
            0xf4b6, 0xb5c9, 0xf5b7, 0x3535, 0x754b, 0x2020, 0x605e, 0xa0dc, 0xe0a2, 0xa1dd, 0xe1a3,
12051 +
            0x2121, 0x615f, 0xa3df, 0xe3a1, 0x2323, 0x635d, 0x2222, 0x625c, 0xa2de, 0xe2a0, 0xa7db,
12052 +
            0xe7a5, 0x2727, 0x6759, 0x2626, 0x6658, 0xa6da, 0xe6a4, 0x2424, 0x645a, 0xa4d8, 0xe4a6,
12053 +
            0xa5d9, 0xe5a7, 0x2525, 0x655b, 0xafd3, 0xefad, 0x2f2f, 0x6f51, 0x2e2e, 0x6e50, 0xaed2,
12054 +
            0xeeac, 0x2c2c, 0x6c52, 0xacd0, 0xecae, 0xadd1, 0xedaf, 0x2d2d, 0x6d53, 0x2828, 0x6856,
12055 +
            0xa8d4, 0xe8aa, 0xa9d5, 0xe9ab, 0x2929, 0x6957, 0xabd7, 0xeba9, 0x2b2b, 0x6b55, 0x2a2a,
12056 +
            0x6a54, 0xaad6, 0xeaa8,
12057 +
        ],
12058 +
        [
12059 +
            0x0000, 0xff83, 0x7f03, 0x8080, 0xfe06, 0x0185, 0x8105, 0x7e86, 0x7c09, 0x838a, 0x030a,
12060 +
            0xfc89, 0x820f, 0x7d8c, 0xfd0c, 0x028f, 0xf812, 0x0791, 0x8711, 0x7892, 0x0614, 0xf997,
12061 +
            0x7917, 0x8694, 0x841b, 0x7b98, 0xfb18, 0x049b, 0x7a1d, 0x859e, 0x051e, 0xfa9d, 0x7021,
12062 +
            0x8fa2, 0x0f22, 0xf0a1, 0x8e27, 0x71a4, 0xf124, 0x0ea7, 0x0c28, 0xf3ab, 0x732b, 0x8ca8,
12063 +
            0xf22e, 0x0dad, 0x8d2d, 0x72ae, 0x8833, 0x77b0, 0xf730, 0x08b3, 0x7635, 0x89b6, 0x0936,
12064 +
            0xf6b5, 0xf43a, 0x0bb9, 0x8b39, 0x74ba, 0x0a3c, 0xf5bf, 0x753f, 0x8abc, 0xe042, 0x1fc1,
12065 +
            0x9f41, 0x60c2, 0x1e44, 0xe1c7, 0x6147, 0x9ec4, 0x9c4b, 0x63c8, 0xe348, 0x1ccb, 0x624d,
12066 +
            0x9dce, 0x1d4e, 0xe2cd, 0x1850, 0xe7d3, 0x6753, 0x98d0, 0xe656, 0x19d5, 0x9955, 0x66d6,
12067 +
            0x6459, 0x9bda, 0x1b5a, 0xe4d9, 0x9a5f, 0x65dc, 0xe55c, 0x1adf, 0x9063, 0x6fe0, 0xef60,
12068 +
            0x10e3, 0x6e65, 0x91e6, 0x1166, 0xeee5, 0xec6a, 0x13e9, 0x9369, 0x6cea, 0x126c, 0xedef,
12069 +
            0x6d6f, 0x92ec, 0x6871, 0x97f2, 0x1772, 0xe8f1, 0x9677, 0x69f4, 0xe974, 0x16f7, 0x1478,
12070 +
            0xebfb, 0x6b7b, 0x94f8, 0xea7e, 0x15fd, 0x957d, 0x6afe, 0x4081, 0xbf02, 0x3f82, 0xc001,
12071 +
            0xbe87, 0x4104, 0xc184, 0x3e07, 0x3c88, 0xc30b, 0x438b, 0xbc08, 0xc28e, 0x3d0d, 0xbd8d,
12072 +
            0x420e, 0xb893, 0x4710, 0xc790, 0x3813, 0x4695, 0xb916, 0x3996, 0xc615, 0xc49a, 0x3b19,
12073 +
            0xbb99, 0x441a, 0x3a9c, 0xc51f, 0x459f, 0xba1c, 0x30a0, 0xcf23, 0x4fa3, 0xb020, 0xcea6,
12074 +
            0x3125, 0xb1a5, 0x4e26, 0x4ca9, 0xb32a, 0x33aa, 0xcc29, 0xb2af, 0x4d2c, 0xcdac, 0x322f,
12075 +
            0xc8b2, 0x3731, 0xb7b1, 0x4832, 0x36b4, 0xc937, 0x49b7, 0xb634, 0xb4bb, 0x4b38, 0xcbb8,
12076 +
            0x343b, 0x4abd, 0xb53e, 0x35be, 0xca3d, 0xa0c3, 0x5f40, 0xdfc0, 0x2043, 0x5ec5, 0xa146,
12077 +
            0x21c6, 0xde45, 0xdcca, 0x2349, 0xa3c9, 0x5c4a, 0x22cc, 0xdd4f, 0x5dcf, 0xa24c, 0x58d1,
12078 +
            0xa752, 0x27d2, 0xd851, 0xa6d7, 0x5954, 0xd9d4, 0x2657, 0x24d8, 0xdb5b, 0x5bdb, 0xa458,
12079 +
            0xdade, 0x255d, 0xa5dd, 0x5a5e, 0xd0e2, 0x2f61, 0xafe1, 0x5062, 0x2ee4, 0xd167, 0x51e7,
12080 +
            0xae64, 0xaceb, 0x5368, 0xd3e8, 0x2c6b, 0x52ed, 0xad6e, 0x2dee, 0xd26d, 0x28f0, 0xd773,
12081 +
            0x57f3, 0xa870, 0xd6f6, 0x2975, 0xa9f5, 0x5676, 0x54f9, 0xab7a, 0x2bfa, 0xd479, 0xaaff,
12082 +
            0x557c, 0xd5fc, 0x2a7f,
12083 +
        ],
12084 +
        [
12085 +
            0x0000, 0x8102, 0x8201, 0x0303, 0x8407, 0x0505, 0x0606, 0x8704, 0x880b, 0x0909, 0x0a0a,
12086 +
            0x8b08, 0x0c0c, 0x8d0e, 0x8e0d, 0x0f0f, 0x9013, 0x1111, 0x1212, 0x9310, 0x1414, 0x9516,
12087 +
            0x9615, 0x1717, 0x1818, 0x991a, 0x9a19, 0x1b1b, 0x9c1f, 0x1d1d, 0x1e1e, 0x9f1c, 0xa023,
12088 +
            0x2121, 0x2222, 0xa320, 0x2424, 0xa526, 0xa625, 0x2727, 0x2828, 0xa92a, 0xaa29, 0x2b2b,
12089 +
            0xac2f, 0x2d2d, 0x2e2e, 0xaf2c, 0x3030, 0xb132, 0xb231, 0x3333, 0xb437, 0x3535, 0x3636,
12090 +
            0xb734, 0xb83b, 0x3939, 0x3a3a, 0xbb38, 0x3c3c, 0xbd3e, 0xbe3d, 0x3f3f, 0xc043, 0x4141,
12091 +
            0x4242, 0xc340, 0x4444, 0xc546, 0xc645, 0x4747, 0x4848, 0xc94a, 0xca49, 0x4b4b, 0xcc4f,
12092 +
            0x4d4d, 0x4e4e, 0xcf4c, 0x5050, 0xd152, 0xd251, 0x5353, 0xd457, 0x5555, 0x5656, 0xd754,
12093 +
            0xd85b, 0x5959, 0x5a5a, 0xdb58, 0x5c5c, 0xdd5e, 0xde5d, 0x5f5f, 0x6060, 0xe162, 0xe261,
12094 +
            0x6363, 0xe467, 0x6565, 0x6666, 0xe764, 0xe86b, 0x6969, 0x6a6a, 0xeb68, 0x6c6c, 0xed6e,
12095 +
            0xee6d, 0x6f6f, 0xf073, 0x7171, 0x7272, 0xf370, 0x7474, 0xf576, 0xf675, 0x7777, 0x7878,
12096 +
            0xf97a, 0xfa79, 0x7b7b, 0xfc7f, 0x7d7d, 0x7e7e, 0xff7c, 0x0083, 0x8181, 0x8282, 0x0380,
12097 +
            0x8484, 0x0586, 0x0685, 0x8787, 0x8888, 0x098a, 0x0a89, 0x8b8b, 0x0c8f, 0x8d8d, 0x8e8e,
12098 +
            0x0f8c, 0x9090, 0x1192, 0x1291, 0x9393, 0x1497, 0x9595, 0x9696, 0x1794, 0x189b, 0x9999,
12099 +
            0x9a9a, 0x1b98, 0x9c9c, 0x1d9e, 0x1e9d, 0x9f9f, 0xa0a0, 0x21a2, 0x22a1, 0xa3a3, 0x24a7,
12100 +
            0xa5a5, 0xa6a6, 0x27a4, 0x28ab, 0xa9a9, 0xaaaa, 0x2ba8, 0xacac, 0x2dae, 0x2ead, 0xafaf,
12101 +
            0x30b3, 0xb1b1, 0xb2b2, 0x33b0, 0xb4b4, 0x35b6, 0x36b5, 0xb7b7, 0xb8b8, 0x39ba, 0x3ab9,
12102 +
            0xbbbb, 0x3cbf, 0xbdbd, 0xbebe, 0x3fbc, 0xc0c0, 0x41c2, 0x42c1, 0xc3c3, 0x44c7, 0xc5c5,
12103 +
            0xc6c6, 0x47c4, 0x48cb, 0xc9c9, 0xcaca, 0x4bc8, 0xcccc, 0x4dce, 0x4ecd, 0xcfcf, 0x50d3,
12104 +
            0xd1d1, 0xd2d2, 0x53d0, 0xd4d4, 0x55d6, 0x56d5, 0xd7d7, 0xd8d8, 0x59da, 0x5ad9, 0xdbdb,
12105 +
            0x5cdf, 0xdddd, 0xdede, 0x5fdc, 0x60e3, 0xe1e1, 0xe2e2, 0x63e0, 0xe4e4, 0x65e6, 0x66e5,
12106 +
            0xe7e7, 0xe8e8, 0x69ea, 0x6ae9, 0xebeb, 0x6cef, 0xeded, 0xeeee, 0x6fec, 0xf0f0, 0x71f2,
12107 +
            0x72f1, 0xf3f3, 0x74f7, 0xf5f5, 0xf6f6, 0x77f4, 0x78fb, 0xf9f9, 0xfafa, 0x7bf8, 0xfcfc,
12108 +
            0x7dfe, 0x7efd, 0xffff,
12109 +
        ],
12110 +
        [
12111 +
            0x0000, 0x0106, 0x020c, 0x030a, 0x0418, 0x051e, 0x0614, 0x0712, 0x0830, 0x0936, 0x0a3c,
12112 +
            0x0b3a, 0x0c28, 0x0d2e, 0x0e24, 0x0f22, 0x1060, 0x1166, 0x126c, 0x136a, 0x1478, 0x157e,
12113 +
            0x1674, 0x1772, 0x1850, 0x1956, 0x1a5c, 0x1b5a, 0x1c48, 0x1d4e, 0x1e44, 0x1f42, 0x20c0,
12114 +
            0x21c6, 0x22cc, 0x23ca, 0x24d8, 0x25de, 0x26d4, 0x27d2, 0x28f0, 0x29f6, 0x2afc, 0x2bfa,
12115 +
            0x2ce8, 0x2dee, 0x2ee4, 0x2fe2, 0x30a0, 0x31a6, 0x32ac, 0x33aa, 0x34b8, 0x35be, 0x36b4,
12116 +
            0x37b2, 0x3890, 0x3996, 0x3a9c, 0x3b9a, 0x3c88, 0x3d8e, 0x3e84, 0x3f82, 0x4180, 0x4086,
12117 +
            0x438c, 0x428a, 0x4598, 0x449e, 0x4794, 0x4692, 0x49b0, 0x48b6, 0x4bbc, 0x4aba, 0x4da8,
12118 +
            0x4cae, 0x4fa4, 0x4ea2, 0x51e0, 0x50e6, 0x53ec, 0x52ea, 0x55f8, 0x54fe, 0x57f4, 0x56f2,
12119 +
            0x59d0, 0x58d6, 0x5bdc, 0x5ada, 0x5dc8, 0x5cce, 0x5fc4, 0x5ec2, 0x6140, 0x6046, 0x634c,
12120 +
            0x624a, 0x6558, 0x645e, 0x6754, 0x6652, 0x6970, 0x6876, 0x6b7c, 0x6a7a, 0x6d68, 0x6c6e,
12121 +
            0x6f64, 0x6e62, 0x7120, 0x7026, 0x732c, 0x722a, 0x7538, 0x743e, 0x7734, 0x7632, 0x7910,
12122 +
            0x7816, 0x7b1c, 0x7a1a, 0x7d08, 0x7c0e, 0x7f04, 0x7e02, 0x8300, 0x8206, 0x810c, 0x800a,
12123 +
            0x8718, 0x861e, 0x8514, 0x8412, 0x8b30, 0x8a36, 0x893c, 0x883a, 0x8f28, 0x8e2e, 0x8d24,
12124 +
            0x8c22, 0x9360, 0x9266, 0x916c, 0x906a, 0x9778, 0x967e, 0x9574, 0x9472, 0x9b50, 0x9a56,
12125 +
            0x995c, 0x985a, 0x9f48, 0x9e4e, 0x9d44, 0x9c42, 0xa3c0, 0xa2c6, 0xa1cc, 0xa0ca, 0xa7d8,
12126 +
            0xa6de, 0xa5d4, 0xa4d2, 0xabf0, 0xaaf6, 0xa9fc, 0xa8fa, 0xafe8, 0xaeee, 0xade4, 0xace2,
12127 +
            0xb3a0, 0xb2a6, 0xb1ac, 0xb0aa, 0xb7b8, 0xb6be, 0xb5b4, 0xb4b2, 0xbb90, 0xba96, 0xb99c,
12128 +
            0xb89a, 0xbf88, 0xbe8e, 0xbd84, 0xbc82, 0xc280, 0xc386, 0xc08c, 0xc18a, 0xc698, 0xc79e,
12129 +
            0xc494, 0xc592, 0xcab0, 0xcbb6, 0xc8bc, 0xc9ba, 0xcea8, 0xcfae, 0xcca4, 0xcda2, 0xd2e0,
12130 +
            0xd3e6, 0xd0ec, 0xd1ea, 0xd6f8, 0xd7fe, 0xd4f4, 0xd5f2, 0xdad0, 0xdbd6, 0xd8dc, 0xd9da,
12131 +
            0xdec8, 0xdfce, 0xdcc4, 0xddc2, 0xe240, 0xe346, 0xe04c, 0xe14a, 0xe658, 0xe75e, 0xe454,
12132 +
            0xe552, 0xea70, 0xeb76, 0xe87c, 0xe97a, 0xee68, 0xef6e, 0xec64, 0xed62, 0xf220, 0xf326,
12133 +
            0xf02c, 0xf12a, 0xf638, 0xf73e, 0xf434, 0xf532, 0xfa10, 0xfb16, 0xf81c, 0xf91a, 0xfe08,
12134 +
            0xff0e, 0xfc04, 0xfd02,
12135 +
        ],
12136 +
        [
12137 +
            0x0000, 0x8605, 0x8c0f, 0x0a0a, 0x981b, 0x1e1e, 0x1414, 0x9211, 0xb033, 0x3636, 0x3c3c,
12138 +
            0xba39, 0x2828, 0xae2d, 0xa427, 0x2222, 0xe063, 0x6666, 0x6c6c, 0xea69, 0x7878, 0xfe7d,
12139 +
            0xf477, 0x7272, 0x5050, 0xd655, 0xdc5f, 0x5a5a, 0xc84b, 0x4e4e, 0x4444, 0xc241, 0x40c3,
12140 +
            0xc6c6, 0xcccc, 0x4ac9, 0xd8d8, 0x5edd, 0x54d7, 0xd2d2, 0xf0f0, 0x76f5, 0x7cff, 0xfafa,
12141 +
            0x68eb, 0xeeee, 0xe4e4, 0x62e1, 0xa0a0, 0x26a5, 0x2caf, 0xaaaa, 0x38bb, 0xbebe, 0xb4b4,
12142 +
            0x32b1, 0x1093, 0x9696, 0x9c9c, 0x1a99, 0x8888, 0x0e8d, 0x0487, 0x8282, 0x8186, 0x0783,
12143 +
            0x0d89, 0x8b8c, 0x199d, 0x9f98, 0x9592, 0x1397, 0x31b5, 0xb7b0, 0xbdba, 0x3bbf, 0xa9ae,
12144 +
            0x2fab, 0x25a1, 0xa3a4, 0x61e5, 0xe7e0, 0xedea, 0x6bef, 0xf9fe, 0x7ffb, 0x75f1, 0xf3f4,
12145 +
            0xd1d6, 0x57d3, 0x5dd9, 0xdbdc, 0x49cd, 0xcfc8, 0xc5c2, 0x43c7, 0xc145, 0x4740, 0x4d4a,
12146 +
            0xcb4f, 0x595e, 0xdf5b, 0xd551, 0x5354, 0x7176, 0xf773, 0xfd79, 0x7b7c, 0xe96d, 0x6f68,
12147 +
            0x6562, 0xe367, 0x2126, 0xa723, 0xad29, 0x2b2c, 0xb93d, 0x3f38, 0x3532, 0xb337, 0x9115,
12148 +
            0x1710, 0x1d1a, 0x9b1f, 0x090e, 0x8f0b, 0x8501, 0x0304, 0x8309, 0x050c, 0x0f06, 0x8903,
12149 +
            0x1b12, 0x9d17, 0x971d, 0x1118, 0x333a, 0xb53f, 0xbf35, 0x3930, 0xab21, 0x2d24, 0x272e,
12150 +
            0xa12b, 0x636a, 0xe56f, 0xef65, 0x6960, 0xfb71, 0x7d74, 0x777e, 0xf17b, 0xd359, 0x555c,
12151 +
            0x5f56, 0xd953, 0x4b42, 0xcd47, 0xc74d, 0x4148, 0xc3ca, 0x45cf, 0x4fc5, 0xc9c0, 0x5bd1,
12152 +
            0xddd4, 0xd7de, 0x51db, 0x73f9, 0xf5fc, 0xfff6, 0x79f3, 0xebe2, 0x6de7, 0x67ed, 0xe1e8,
12153 +
            0x23a9, 0xa5ac, 0xafa6, 0x29a3, 0xbbb2, 0x3db7, 0x37bd, 0xb1b8, 0x939a, 0x159f, 0x1f95,
12154 +
            0x9990, 0x0b81, 0x8d84, 0x878e, 0x018b, 0x028f, 0x848a, 0x8e80, 0x0885, 0x9a94, 0x1c91,
12155 +
            0x169b, 0x909e, 0xb2bc, 0x34b9, 0x3eb3, 0xb8b6, 0x2aa7, 0xaca2, 0xa6a8, 0x20ad, 0xe2ec,
12156 +
            0x64e9, 0x6ee3, 0xe8e6, 0x7af7, 0xfcf2, 0xf6f8, 0x70fd, 0x52df, 0xd4da, 0xded0, 0x58d5,
12157 +
            0xcac4, 0x4cc1, 0x46cb, 0xc0ce, 0x424c, 0xc449, 0xce43, 0x4846, 0xda57, 0x5c52, 0x5658,
12158 +
            0xd05d, 0xf27f, 0x747a, 0x7e70, 0xf875, 0x6a64, 0xec61, 0xe66b, 0x606e, 0xa22f, 0x242a,
12159 +
            0x2e20, 0xa825, 0x3a34, 0xbc31, 0xb63b, 0x303e, 0x121c, 0x9419, 0x9e13, 0x1816, 0x8a07,
12160 +
            0x0c02, 0x0608, 0x800d,
12161 +
        ],
12162 +
    ];
12163 +
12164 +
    pub static CRC16_USB_TABLE: [[u16; 256]; 16] = [
12165 +
        [
12166 +
            0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780,
12167 +
            0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1,
12168 +
            0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801,
12169 +
            0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40,
12170 +
            0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680,
12171 +
            0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0,
12172 +
            0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501,
12173 +
            0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
12174 +
            0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981,
12175 +
            0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1,
12176 +
            0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200,
12177 +
            0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141,
12178 +
            0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480,
12179 +
            0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0,
12180 +
            0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01,
12181 +
            0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
12182 +
            0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381,
12183 +
            0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0,
12184 +
            0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01,
12185 +
            0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40,
12186 +
            0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81,
12187 +
            0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1,
12188 +
            0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100,
12189 +
            0x81c1, 0x8081, 0x4040,
12190 +
        ],
12191 +
        [
12192 +
            0x0000, 0x9001, 0x6001, 0xf000, 0xc002, 0x5003, 0xa003, 0x3002, 0xc007, 0x5006, 0xa006,
12193 +
            0x3007, 0x0005, 0x9004, 0x6004, 0xf005, 0xc00d, 0x500c, 0xa00c, 0x300d, 0x000f, 0x900e,
12194 +
            0x600e, 0xf00f, 0x000a, 0x900b, 0x600b, 0xf00a, 0xc008, 0x5009, 0xa009, 0x3008, 0xc019,
12195 +
            0x5018, 0xa018, 0x3019, 0x001b, 0x901a, 0x601a, 0xf01b, 0x001e, 0x901f, 0x601f, 0xf01e,
12196 +
            0xc01c, 0x501d, 0xa01d, 0x301c, 0x0014, 0x9015, 0x6015, 0xf014, 0xc016, 0x5017, 0xa017,
12197 +
            0x3016, 0xc013, 0x5012, 0xa012, 0x3013, 0x0011, 0x9010, 0x6010, 0xf011, 0xc031, 0x5030,
12198 +
            0xa030, 0x3031, 0x0033, 0x9032, 0x6032, 0xf033, 0x0036, 0x9037, 0x6037, 0xf036, 0xc034,
12199 +
            0x5035, 0xa035, 0x3034, 0x003c, 0x903d, 0x603d, 0xf03c, 0xc03e, 0x503f, 0xa03f, 0x303e,
12200 +
            0xc03b, 0x503a, 0xa03a, 0x303b, 0x0039, 0x9038, 0x6038, 0xf039, 0x0028, 0x9029, 0x6029,
12201 +
            0xf028, 0xc02a, 0x502b, 0xa02b, 0x302a, 0xc02f, 0x502e, 0xa02e, 0x302f, 0x002d, 0x902c,
12202 +
            0x602c, 0xf02d, 0xc025, 0x5024, 0xa024, 0x3025, 0x0027, 0x9026, 0x6026, 0xf027, 0x0022,
12203 +
            0x9023, 0x6023, 0xf022, 0xc020, 0x5021, 0xa021, 0x3020, 0xc061, 0x5060, 0xa060, 0x3061,
12204 +
            0x0063, 0x9062, 0x6062, 0xf063, 0x0066, 0x9067, 0x6067, 0xf066, 0xc064, 0x5065, 0xa065,
12205 +
            0x3064, 0x006c, 0x906d, 0x606d, 0xf06c, 0xc06e, 0x506f, 0xa06f, 0x306e, 0xc06b, 0x506a,
12206 +
            0xa06a, 0x306b, 0x0069, 0x9068, 0x6068, 0xf069, 0x0078, 0x9079, 0x6079, 0xf078, 0xc07a,
12207 +
            0x507b, 0xa07b, 0x307a, 0xc07f, 0x507e, 0xa07e, 0x307f, 0x007d, 0x907c, 0x607c, 0xf07d,
12208 +
            0xc075, 0x5074, 0xa074, 0x3075, 0x0077, 0x9076, 0x6076, 0xf077, 0x0072, 0x9073, 0x6073,
12209 +
            0xf072, 0xc070, 0x5071, 0xa071, 0x3070, 0x0050, 0x9051, 0x6051, 0xf050, 0xc052, 0x5053,
12210 +
            0xa053, 0x3052, 0xc057, 0x5056, 0xa056, 0x3057, 0x0055, 0x9054, 0x6054, 0xf055, 0xc05d,
12211 +
            0x505c, 0xa05c, 0x305d, 0x005f, 0x905e, 0x605e, 0xf05f, 0x005a, 0x905b, 0x605b, 0xf05a,
12212 +
            0xc058, 0x5059, 0xa059, 0x3058, 0xc049, 0x5048, 0xa048, 0x3049, 0x004b, 0x904a, 0x604a,
12213 +
            0xf04b, 0x004e, 0x904f, 0x604f, 0xf04e, 0xc04c, 0x504d, 0xa04d, 0x304c, 0x0044, 0x9045,
12214 +
            0x6045, 0xf044, 0xc046, 0x5047, 0xa047, 0x3046, 0xc043, 0x5042, 0xa042, 0x3043, 0x0041,
12215 +
            0x9040, 0x6040, 0xf041,
12216 +
        ],
12217 +
        [
12218 +
            0x0000, 0xc051, 0xc0a1, 0x00f0, 0xc141, 0x0110, 0x01e0, 0xc1b1, 0xc281, 0x02d0, 0x0220,
12219 +
            0xc271, 0x03c0, 0xc391, 0xc361, 0x0330, 0xc501, 0x0550, 0x05a0, 0xc5f1, 0x0440, 0xc411,
12220 +
            0xc4e1, 0x04b0, 0x0780, 0xc7d1, 0xc721, 0x0770, 0xc6c1, 0x0690, 0x0660, 0xc631, 0xca01,
12221 +
            0x0a50, 0x0aa0, 0xcaf1, 0x0b40, 0xcb11, 0xcbe1, 0x0bb0, 0x0880, 0xc8d1, 0xc821, 0x0870,
12222 +
            0xc9c1, 0x0990, 0x0960, 0xc931, 0x0f00, 0xcf51, 0xcfa1, 0x0ff0, 0xce41, 0x0e10, 0x0ee0,
12223 +
            0xceb1, 0xcd81, 0x0dd0, 0x0d20, 0xcd71, 0x0cc0, 0xcc91, 0xcc61, 0x0c30, 0xd401, 0x1450,
12224 +
            0x14a0, 0xd4f1, 0x1540, 0xd511, 0xd5e1, 0x15b0, 0x1680, 0xd6d1, 0xd621, 0x1670, 0xd7c1,
12225 +
            0x1790, 0x1760, 0xd731, 0x1100, 0xd151, 0xd1a1, 0x11f0, 0xd041, 0x1010, 0x10e0, 0xd0b1,
12226 +
            0xd381, 0x13d0, 0x1320, 0xd371, 0x12c0, 0xd291, 0xd261, 0x1230, 0x1e00, 0xde51, 0xdea1,
12227 +
            0x1ef0, 0xdf41, 0x1f10, 0x1fe0, 0xdfb1, 0xdc81, 0x1cd0, 0x1c20, 0xdc71, 0x1dc0, 0xdd91,
12228 +
            0xdd61, 0x1d30, 0xdb01, 0x1b50, 0x1ba0, 0xdbf1, 0x1a40, 0xda11, 0xdae1, 0x1ab0, 0x1980,
12229 +
            0xd9d1, 0xd921, 0x1970, 0xd8c1, 0x1890, 0x1860, 0xd831, 0xe801, 0x2850, 0x28a0, 0xe8f1,
12230 +
            0x2940, 0xe911, 0xe9e1, 0x29b0, 0x2a80, 0xead1, 0xea21, 0x2a70, 0xebc1, 0x2b90, 0x2b60,
12231 +
            0xeb31, 0x2d00, 0xed51, 0xeda1, 0x2df0, 0xec41, 0x2c10, 0x2ce0, 0xecb1, 0xef81, 0x2fd0,
12232 +
            0x2f20, 0xef71, 0x2ec0, 0xee91, 0xee61, 0x2e30, 0x2200, 0xe251, 0xe2a1, 0x22f0, 0xe341,
12233 +
            0x2310, 0x23e0, 0xe3b1, 0xe081, 0x20d0, 0x2020, 0xe071, 0x21c0, 0xe191, 0xe161, 0x2130,
12234 +
            0xe701, 0x2750, 0x27a0, 0xe7f1, 0x2640, 0xe611, 0xe6e1, 0x26b0, 0x2580, 0xe5d1, 0xe521,
12235 +
            0x2570, 0xe4c1, 0x2490, 0x2460, 0xe431, 0x3c00, 0xfc51, 0xfca1, 0x3cf0, 0xfd41, 0x3d10,
12236 +
            0x3de0, 0xfdb1, 0xfe81, 0x3ed0, 0x3e20, 0xfe71, 0x3fc0, 0xff91, 0xff61, 0x3f30, 0xf901,
12237 +
            0x3950, 0x39a0, 0xf9f1, 0x3840, 0xf811, 0xf8e1, 0x38b0, 0x3b80, 0xfbd1, 0xfb21, 0x3b70,
12238 +
            0xfac1, 0x3a90, 0x3a60, 0xfa31, 0xf601, 0x3650, 0x36a0, 0xf6f1, 0x3740, 0xf711, 0xf7e1,
12239 +
            0x37b0, 0x3480, 0xf4d1, 0xf421, 0x3470, 0xf5c1, 0x3590, 0x3560, 0xf531, 0x3300, 0xf351,
12240 +
            0xf3a1, 0x33f0, 0xf241, 0x3210, 0x32e0, 0xf2b1, 0xf181, 0x31d0, 0x3120, 0xf171, 0x30c0,
12241 +
            0xf091, 0xf061, 0x3030,
12242 +
        ],
12243 +
        [
12244 +
            0x0000, 0xfc01, 0xb801, 0x4400, 0x3001, 0xcc00, 0x8800, 0x7401, 0x6002, 0x9c03, 0xd803,
12245 +
            0x2402, 0x5003, 0xac02, 0xe802, 0x1403, 0xc004, 0x3c05, 0x7805, 0x8404, 0xf005, 0x0c04,
12246 +
            0x4804, 0xb405, 0xa006, 0x5c07, 0x1807, 0xe406, 0x9007, 0x6c06, 0x2806, 0xd407, 0xc00b,
12247 +
            0x3c0a, 0x780a, 0x840b, 0xf00a, 0x0c0b, 0x480b, 0xb40a, 0xa009, 0x5c08, 0x1808, 0xe409,
12248 +
            0x9008, 0x6c09, 0x2809, 0xd408, 0x000f, 0xfc0e, 0xb80e, 0x440f, 0x300e, 0xcc0f, 0x880f,
12249 +
            0x740e, 0x600d, 0x9c0c, 0xd80c, 0x240d, 0x500c, 0xac0d, 0xe80d, 0x140c, 0xc015, 0x3c14,
12250 +
            0x7814, 0x8415, 0xf014, 0x0c15, 0x4815, 0xb414, 0xa017, 0x5c16, 0x1816, 0xe417, 0x9016,
12251 +
            0x6c17, 0x2817, 0xd416, 0x0011, 0xfc10, 0xb810, 0x4411, 0x3010, 0xcc11, 0x8811, 0x7410,
12252 +
            0x6013, 0x9c12, 0xd812, 0x2413, 0x5012, 0xac13, 0xe813, 0x1412, 0x001e, 0xfc1f, 0xb81f,
12253 +
            0x441e, 0x301f, 0xcc1e, 0x881e, 0x741f, 0x601c, 0x9c1d, 0xd81d, 0x241c, 0x501d, 0xac1c,
12254 +
            0xe81c, 0x141d, 0xc01a, 0x3c1b, 0x781b, 0x841a, 0xf01b, 0x0c1a, 0x481a, 0xb41b, 0xa018,
12255 +
            0x5c19, 0x1819, 0xe418, 0x9019, 0x6c18, 0x2818, 0xd419, 0xc029, 0x3c28, 0x7828, 0x8429,
12256 +
            0xf028, 0x0c29, 0x4829, 0xb428, 0xa02b, 0x5c2a, 0x182a, 0xe42b, 0x902a, 0x6c2b, 0x282b,
12257 +
            0xd42a, 0x002d, 0xfc2c, 0xb82c, 0x442d, 0x302c, 0xcc2d, 0x882d, 0x742c, 0x602f, 0x9c2e,
12258 +
            0xd82e, 0x242f, 0x502e, 0xac2f, 0xe82f, 0x142e, 0x0022, 0xfc23, 0xb823, 0x4422, 0x3023,
12259 +
            0xcc22, 0x8822, 0x7423, 0x6020, 0x9c21, 0xd821, 0x2420, 0x5021, 0xac20, 0xe820, 0x1421,
12260 +
            0xc026, 0x3c27, 0x7827, 0x8426, 0xf027, 0x0c26, 0x4826, 0xb427, 0xa024, 0x5c25, 0x1825,
12261 +
            0xe424, 0x9025, 0x6c24, 0x2824, 0xd425, 0x003c, 0xfc3d, 0xb83d, 0x443c, 0x303d, 0xcc3c,
12262 +
            0x883c, 0x743d, 0x603e, 0x9c3f, 0xd83f, 0x243e, 0x503f, 0xac3e, 0xe83e, 0x143f, 0xc038,
12263 +
            0x3c39, 0x7839, 0x8438, 0xf039, 0x0c38, 0x4838, 0xb439, 0xa03a, 0x5c3b, 0x183b, 0xe43a,
12264 +
            0x903b, 0x6c3a, 0x283a, 0xd43b, 0xc037, 0x3c36, 0x7836, 0x8437, 0xf036, 0x0c37, 0x4837,
12265 +
            0xb436, 0xa035, 0x5c34, 0x1834, 0xe435, 0x9034, 0x6c35, 0x2835, 0xd434, 0x0033, 0xfc32,
12266 +
            0xb832, 0x4433, 0x3032, 0xcc33, 0x8833, 0x7432, 0x6031, 0x9c30, 0xd830, 0x2431, 0x5030,
12267 +
            0xac31, 0xe831, 0x1430,
12268 +
        ],
12269 +
        [
12270 +
            0x0000, 0xc03d, 0xc079, 0x0044, 0xc0f1, 0x00cc, 0x0088, 0xc0b5, 0xc1e1, 0x01dc, 0x0198,
12271 +
            0xc1a5, 0x0110, 0xc12d, 0xc169, 0x0154, 0xc3c1, 0x03fc, 0x03b8, 0xc385, 0x0330, 0xc30d,
12272 +
            0xc349, 0x0374, 0x0220, 0xc21d, 0xc259, 0x0264, 0xc2d1, 0x02ec, 0x02a8, 0xc295, 0xc781,
12273 +
            0x07bc, 0x07f8, 0xc7c5, 0x0770, 0xc74d, 0xc709, 0x0734, 0x0660, 0xc65d, 0xc619, 0x0624,
12274 +
            0xc691, 0x06ac, 0x06e8, 0xc6d5, 0x0440, 0xc47d, 0xc439, 0x0404, 0xc4b1, 0x048c, 0x04c8,
12275 +
            0xc4f5, 0xc5a1, 0x059c, 0x05d8, 0xc5e5, 0x0550, 0xc56d, 0xc529, 0x0514, 0xcf01, 0x0f3c,
12276 +
            0x0f78, 0xcf45, 0x0ff0, 0xcfcd, 0xcf89, 0x0fb4, 0x0ee0, 0xcedd, 0xce99, 0x0ea4, 0xce11,
12277 +
            0x0e2c, 0x0e68, 0xce55, 0x0cc0, 0xccfd, 0xccb9, 0x0c84, 0xcc31, 0x0c0c, 0x0c48, 0xcc75,
12278 +
            0xcd21, 0x0d1c, 0x0d58, 0xcd65, 0x0dd0, 0xcded, 0xcda9, 0x0d94, 0x0880, 0xc8bd, 0xc8f9,
12279 +
            0x08c4, 0xc871, 0x084c, 0x0808, 0xc835, 0xc961, 0x095c, 0x0918, 0xc925, 0x0990, 0xc9ad,
12280 +
            0xc9e9, 0x09d4, 0xcb41, 0x0b7c, 0x0b38, 0xcb05, 0x0bb0, 0xcb8d, 0xcbc9, 0x0bf4, 0x0aa0,
12281 +
            0xca9d, 0xcad9, 0x0ae4, 0xca51, 0x0a6c, 0x0a28, 0xca15, 0xde01, 0x1e3c, 0x1e78, 0xde45,
12282 +
            0x1ef0, 0xdecd, 0xde89, 0x1eb4, 0x1fe0, 0xdfdd, 0xdf99, 0x1fa4, 0xdf11, 0x1f2c, 0x1f68,
12283 +
            0xdf55, 0x1dc0, 0xddfd, 0xddb9, 0x1d84, 0xdd31, 0x1d0c, 0x1d48, 0xdd75, 0xdc21, 0x1c1c,
12284 +
            0x1c58, 0xdc65, 0x1cd0, 0xdced, 0xdca9, 0x1c94, 0x1980, 0xd9bd, 0xd9f9, 0x19c4, 0xd971,
12285 +
            0x194c, 0x1908, 0xd935, 0xd861, 0x185c, 0x1818, 0xd825, 0x1890, 0xd8ad, 0xd8e9, 0x18d4,
12286 +
            0xda41, 0x1a7c, 0x1a38, 0xda05, 0x1ab0, 0xda8d, 0xdac9, 0x1af4, 0x1ba0, 0xdb9d, 0xdbd9,
12287 +
            0x1be4, 0xdb51, 0x1b6c, 0x1b28, 0xdb15, 0x1100, 0xd13d, 0xd179, 0x1144, 0xd1f1, 0x11cc,
12288 +
            0x1188, 0xd1b5, 0xd0e1, 0x10dc, 0x1098, 0xd0a5, 0x1010, 0xd02d, 0xd069, 0x1054, 0xd2c1,
12289 +
            0x12fc, 0x12b8, 0xd285, 0x1230, 0xd20d, 0xd249, 0x1274, 0x1320, 0xd31d, 0xd359, 0x1364,
12290 +
            0xd3d1, 0x13ec, 0x13a8, 0xd395, 0xd681, 0x16bc, 0x16f8, 0xd6c5, 0x1670, 0xd64d, 0xd609,
12291 +
            0x1634, 0x1760, 0xd75d, 0xd719, 0x1724, 0xd791, 0x17ac, 0x17e8, 0xd7d5, 0x1540, 0xd57d,
12292 +
            0xd539, 0x1504, 0xd5b1, 0x158c, 0x15c8, 0xd5f5, 0xd4a1, 0x149c, 0x14d8, 0xd4e5, 0x1450,
12293 +
            0xd46d, 0xd429, 0x1414,
12294 +
        ],
12295 +
        [
12296 +
            0x0000, 0xd101, 0xe201, 0x3300, 0x8401, 0x5500, 0x6600, 0xb701, 0x4801, 0x9900, 0xaa00,
12297 +
            0x7b01, 0xcc00, 0x1d01, 0x2e01, 0xff00, 0x9002, 0x4103, 0x7203, 0xa302, 0x1403, 0xc502,
12298 +
            0xf602, 0x2703, 0xd803, 0x0902, 0x3a02, 0xeb03, 0x5c02, 0x8d03, 0xbe03, 0x6f02, 0x6007,
12299 +
            0xb106, 0x8206, 0x5307, 0xe406, 0x3507, 0x0607, 0xd706, 0x2806, 0xf907, 0xca07, 0x1b06,
12300 +
            0xac07, 0x7d06, 0x4e06, 0x9f07, 0xf005, 0x2104, 0x1204, 0xc305, 0x7404, 0xa505, 0x9605,
12301 +
            0x4704, 0xb804, 0x6905, 0x5a05, 0x8b04, 0x3c05, 0xed04, 0xde04, 0x0f05, 0xc00e, 0x110f,
12302 +
            0x220f, 0xf30e, 0x440f, 0x950e, 0xa60e, 0x770f, 0x880f, 0x590e, 0x6a0e, 0xbb0f, 0x0c0e,
12303 +
            0xdd0f, 0xee0f, 0x3f0e, 0x500c, 0x810d, 0xb20d, 0x630c, 0xd40d, 0x050c, 0x360c, 0xe70d,
12304 +
            0x180d, 0xc90c, 0xfa0c, 0x2b0d, 0x9c0c, 0x4d0d, 0x7e0d, 0xaf0c, 0xa009, 0x7108, 0x4208,
12305 +
            0x9309, 0x2408, 0xf509, 0xc609, 0x1708, 0xe808, 0x3909, 0x0a09, 0xdb08, 0x6c09, 0xbd08,
12306 +
            0x8e08, 0x5f09, 0x300b, 0xe10a, 0xd20a, 0x030b, 0xb40a, 0x650b, 0x560b, 0x870a, 0x780a,
12307 +
            0xa90b, 0x9a0b, 0x4b0a, 0xfc0b, 0x2d0a, 0x1e0a, 0xcf0b, 0xc01f, 0x111e, 0x221e, 0xf31f,
12308 +
            0x441e, 0x951f, 0xa61f, 0x771e, 0x881e, 0x591f, 0x6a1f, 0xbb1e, 0x0c1f, 0xdd1e, 0xee1e,
12309 +
            0x3f1f, 0x501d, 0x811c, 0xb21c, 0x631d, 0xd41c, 0x051d, 0x361d, 0xe71c, 0x181c, 0xc91d,
12310 +
            0xfa1d, 0x2b1c, 0x9c1d, 0x4d1c, 0x7e1c, 0xaf1d, 0xa018, 0x7119, 0x4219, 0x9318, 0x2419,
12311 +
            0xf518, 0xc618, 0x1719, 0xe819, 0x3918, 0x0a18, 0xdb19, 0x6c18, 0xbd19, 0x8e19, 0x5f18,
12312 +
            0x301a, 0xe11b, 0xd21b, 0x031a, 0xb41b, 0x651a, 0x561a, 0x871b, 0x781b, 0xa91a, 0x9a1a,
12313 +
            0x4b1b, 0xfc1a, 0x2d1b, 0x1e1b, 0xcf1a, 0x0011, 0xd110, 0xe210, 0x3311, 0x8410, 0x5511,
12314 +
            0x6611, 0xb710, 0x4810, 0x9911, 0xaa11, 0x7b10, 0xcc11, 0x1d10, 0x2e10, 0xff11, 0x9013,
12315 +
            0x4112, 0x7212, 0xa313, 0x1412, 0xc513, 0xf613, 0x2712, 0xd812, 0x0913, 0x3a13, 0xeb12,
12316 +
            0x5c13, 0x8d12, 0xbe12, 0x6f13, 0x6016, 0xb117, 0x8217, 0x5316, 0xe417, 0x3516, 0x0616,
12317 +
            0xd717, 0x2817, 0xf916, 0xca16, 0x1b17, 0xac16, 0x7d17, 0x4e17, 0x9f16, 0xf014, 0x2115,
12318 +
            0x1215, 0xc314, 0x7415, 0xa514, 0x9614, 0x4715, 0xb815, 0x6914, 0x5a14, 0x8b15, 0x3c14,
12319 +
            0xed15, 0xde15, 0x0f14,
12320 +
        ],
12321 +
        [
12322 +
            0x0000, 0xc010, 0xc023, 0x0033, 0xc045, 0x0055, 0x0066, 0xc076, 0xc089, 0x0099, 0x00aa,
12323 +
            0xc0ba, 0x00cc, 0xc0dc, 0xc0ef, 0x00ff, 0xc111, 0x0101, 0x0132, 0xc122, 0x0154, 0xc144,
12324 +
            0xc177, 0x0167, 0x0198, 0xc188, 0xc1bb, 0x01ab, 0xc1dd, 0x01cd, 0x01fe, 0xc1ee, 0xc221,
12325 +
            0x0231, 0x0202, 0xc212, 0x0264, 0xc274, 0xc247, 0x0257, 0x02a8, 0xc2b8, 0xc28b, 0x029b,
12326 +
            0xc2ed, 0x02fd, 0x02ce, 0xc2de, 0x0330, 0xc320, 0xc313, 0x0303, 0xc375, 0x0365, 0x0356,
12327 +
            0xc346, 0xc3b9, 0x03a9, 0x039a, 0xc38a, 0x03fc, 0xc3ec, 0xc3df, 0x03cf, 0xc441, 0x0451,
12328 +
            0x0462, 0xc472, 0x0404, 0xc414, 0xc427, 0x0437, 0x04c8, 0xc4d8, 0xc4eb, 0x04fb, 0xc48d,
12329 +
            0x049d, 0x04ae, 0xc4be, 0x0550, 0xc540, 0xc573, 0x0563, 0xc515, 0x0505, 0x0536, 0xc526,
12330 +
            0xc5d9, 0x05c9, 0x05fa, 0xc5ea, 0x059c, 0xc58c, 0xc5bf, 0x05af, 0x0660, 0xc670, 0xc643,
12331 +
            0x0653, 0xc625, 0x0635, 0x0606, 0xc616, 0xc6e9, 0x06f9, 0x06ca, 0xc6da, 0x06ac, 0xc6bc,
12332 +
            0xc68f, 0x069f, 0xc771, 0x0761, 0x0752, 0xc742, 0x0734, 0xc724, 0xc717, 0x0707, 0x07f8,
12333 +
            0xc7e8, 0xc7db, 0x07cb, 0xc7bd, 0x07ad, 0x079e, 0xc78e, 0xc881, 0x0891, 0x08a2, 0xc8b2,
12334 +
            0x08c4, 0xc8d4, 0xc8e7, 0x08f7, 0x0808, 0xc818, 0xc82b, 0x083b, 0xc84d, 0x085d, 0x086e,
12335 +
            0xc87e, 0x0990, 0xc980, 0xc9b3, 0x09a3, 0xc9d5, 0x09c5, 0x09f6, 0xc9e6, 0xc919, 0x0909,
12336 +
            0x093a, 0xc92a, 0x095c, 0xc94c, 0xc97f, 0x096f, 0x0aa0, 0xcab0, 0xca83, 0x0a93, 0xcae5,
12337 +
            0x0af5, 0x0ac6, 0xcad6, 0xca29, 0x0a39, 0x0a0a, 0xca1a, 0x0a6c, 0xca7c, 0xca4f, 0x0a5f,
12338 +
            0xcbb1, 0x0ba1, 0x0b92, 0xcb82, 0x0bf4, 0xcbe4, 0xcbd7, 0x0bc7, 0x0b38, 0xcb28, 0xcb1b,
12339 +
            0x0b0b, 0xcb7d, 0x0b6d, 0x0b5e, 0xcb4e, 0x0cc0, 0xccd0, 0xcce3, 0x0cf3, 0xcc85, 0x0c95,
12340 +
            0x0ca6, 0xccb6, 0xcc49, 0x0c59, 0x0c6a, 0xcc7a, 0x0c0c, 0xcc1c, 0xcc2f, 0x0c3f, 0xcdd1,
12341 +
            0x0dc1, 0x0df2, 0xcde2, 0x0d94, 0xcd84, 0xcdb7, 0x0da7, 0x0d58, 0xcd48, 0xcd7b, 0x0d6b,
12342 +
            0xcd1d, 0x0d0d, 0x0d3e, 0xcd2e, 0xcee1, 0x0ef1, 0x0ec2, 0xced2, 0x0ea4, 0xceb4, 0xce87,
12343 +
            0x0e97, 0x0e68, 0xce78, 0xce4b, 0x0e5b, 0xce2d, 0x0e3d, 0x0e0e, 0xce1e, 0x0ff0, 0xcfe0,
12344 +
            0xcfd3, 0x0fc3, 0xcfb5, 0x0fa5, 0x0f96, 0xcf86, 0xcf79, 0x0f69, 0x0f5a, 0xcf4a, 0x0f3c,
12345 +
            0xcf2c, 0xcf1f, 0x0f0f,
12346 +
        ],
12347 +
        [
12348 +
            0x0000, 0xccc1, 0xd981, 0x1540, 0xf301, 0x3fc0, 0x2a80, 0xe641, 0xa601, 0x6ac0, 0x7f80,
12349 +
            0xb341, 0x5500, 0x99c1, 0x8c81, 0x4040, 0x0c01, 0xc0c0, 0xd580, 0x1941, 0xff00, 0x33c1,
12350 +
            0x2681, 0xea40, 0xaa00, 0x66c1, 0x7381, 0xbf40, 0x5901, 0x95c0, 0x8080, 0x4c41, 0x1802,
12351 +
            0xd4c3, 0xc183, 0x0d42, 0xeb03, 0x27c2, 0x3282, 0xfe43, 0xbe03, 0x72c2, 0x6782, 0xab43,
12352 +
            0x4d02, 0x81c3, 0x9483, 0x5842, 0x1403, 0xd8c2, 0xcd82, 0x0143, 0xe702, 0x2bc3, 0x3e83,
12353 +
            0xf242, 0xb202, 0x7ec3, 0x6b83, 0xa742, 0x4103, 0x8dc2, 0x9882, 0x5443, 0x3004, 0xfcc5,
12354 +
            0xe985, 0x2544, 0xc305, 0x0fc4, 0x1a84, 0xd645, 0x9605, 0x5ac4, 0x4f84, 0x8345, 0x6504,
12355 +
            0xa9c5, 0xbc85, 0x7044, 0x3c05, 0xf0c4, 0xe584, 0x2945, 0xcf04, 0x03c5, 0x1685, 0xda44,
12356 +
            0x9a04, 0x56c5, 0x4385, 0x8f44, 0x6905, 0xa5c4, 0xb084, 0x7c45, 0x2806, 0xe4c7, 0xf187,
12357 +
            0x3d46, 0xdb07, 0x17c6, 0x0286, 0xce47, 0x8e07, 0x42c6, 0x5786, 0x9b47, 0x7d06, 0xb1c7,
12358 +
            0xa487, 0x6846, 0x2407, 0xe8c6, 0xfd86, 0x3147, 0xd706, 0x1bc7, 0x0e87, 0xc246, 0x8206,
12359 +
            0x4ec7, 0x5b87, 0x9746, 0x7107, 0xbdc6, 0xa886, 0x6447, 0x6008, 0xacc9, 0xb989, 0x7548,
12360 +
            0x9309, 0x5fc8, 0x4a88, 0x8649, 0xc609, 0x0ac8, 0x1f88, 0xd349, 0x3508, 0xf9c9, 0xec89,
12361 +
            0x2048, 0x6c09, 0xa0c8, 0xb588, 0x7949, 0x9f08, 0x53c9, 0x4689, 0x8a48, 0xca08, 0x06c9,
12362 +
            0x1389, 0xdf48, 0x3909, 0xf5c8, 0xe088, 0x2c49, 0x780a, 0xb4cb, 0xa18b, 0x6d4a, 0x8b0b,
12363 +
            0x47ca, 0x528a, 0x9e4b, 0xde0b, 0x12ca, 0x078a, 0xcb4b, 0x2d0a, 0xe1cb, 0xf48b, 0x384a,
12364 +
            0x740b, 0xb8ca, 0xad8a, 0x614b, 0x870a, 0x4bcb, 0x5e8b, 0x924a, 0xd20a, 0x1ecb, 0x0b8b,
12365 +
            0xc74a, 0x210b, 0xedca, 0xf88a, 0x344b, 0x500c, 0x9ccd, 0x898d, 0x454c, 0xa30d, 0x6fcc,
12366 +
            0x7a8c, 0xb64d, 0xf60d, 0x3acc, 0x2f8c, 0xe34d, 0x050c, 0xc9cd, 0xdc8d, 0x104c, 0x5c0d,
12367 +
            0x90cc, 0x858c, 0x494d, 0xaf0c, 0x63cd, 0x768d, 0xba4c, 0xfa0c, 0x36cd, 0x238d, 0xef4c,
12368 +
            0x090d, 0xc5cc, 0xd08c, 0x1c4d, 0x480e, 0x84cf, 0x918f, 0x5d4e, 0xbb0f, 0x77ce, 0x628e,
12369 +
            0xae4f, 0xee0f, 0x22ce, 0x378e, 0xfb4f, 0x1d0e, 0xd1cf, 0xc48f, 0x084e, 0x440f, 0x88ce,
12370 +
            0x9d8e, 0x514f, 0xb70e, 0x7bcf, 0x6e8f, 0xa24e, 0xe20e, 0x2ecf, 0x3b8f, 0xf74e, 0x110f,
12371 +
            0xddce, 0xc88e, 0x044f,
12372 +
        ],
12373 +
        [
12374 +
            0x0000, 0x900d, 0x6019, 0xf014, 0xc032, 0x503f, 0xa02b, 0x3026, 0xc067, 0x506a, 0xa07e,
12375 +
            0x3073, 0x0055, 0x9058, 0x604c, 0xf041, 0xc0cd, 0x50c0, 0xa0d4, 0x30d9, 0x00ff, 0x90f2,
12376 +
            0x60e6, 0xf0eb, 0x00aa, 0x90a7, 0x60b3, 0xf0be, 0xc098, 0x5095, 0xa081, 0x308c, 0xc199,
12377 +
            0x5194, 0xa180, 0x318d, 0x01ab, 0x91a6, 0x61b2, 0xf1bf, 0x01fe, 0x91f3, 0x61e7, 0xf1ea,
12378 +
            0xc1cc, 0x51c1, 0xa1d5, 0x31d8, 0x0154, 0x9159, 0x614d, 0xf140, 0xc166, 0x516b, 0xa17f,
12379 +
            0x3172, 0xc133, 0x513e, 0xa12a, 0x3127, 0x0101, 0x910c, 0x6118, 0xf115, 0xc331, 0x533c,
12380 +
            0xa328, 0x3325, 0x0303, 0x930e, 0x631a, 0xf317, 0x0356, 0x935b, 0x634f, 0xf342, 0xc364,
12381 +
            0x5369, 0xa37d, 0x3370, 0x03fc, 0x93f1, 0x63e5, 0xf3e8, 0xc3ce, 0x53c3, 0xa3d7, 0x33da,
12382 +
            0xc39b, 0x5396, 0xa382, 0x338f, 0x03a9, 0x93a4, 0x63b0, 0xf3bd, 0x02a8, 0x92a5, 0x62b1,
12383 +
            0xf2bc, 0xc29a, 0x5297, 0xa283, 0x328e, 0xc2cf, 0x52c2, 0xa2d6, 0x32db, 0x02fd, 0x92f0,
12384 +
            0x62e4, 0xf2e9, 0xc265, 0x5268, 0xa27c, 0x3271, 0x0257, 0x925a, 0x624e, 0xf243, 0x0202,
12385 +
            0x920f, 0x621b, 0xf216, 0xc230, 0x523d, 0xa229, 0x3224, 0xc661, 0x566c, 0xa678, 0x3675,
12386 +
            0x0653, 0x965e, 0x664a, 0xf647, 0x0606, 0x960b, 0x661f, 0xf612, 0xc634, 0x5639, 0xa62d,
12387 +
            0x3620, 0x06ac, 0x96a1, 0x66b5, 0xf6b8, 0xc69e, 0x5693, 0xa687, 0x368a, 0xc6cb, 0x56c6,
12388 +
            0xa6d2, 0x36df, 0x06f9, 0x96f4, 0x66e0, 0xf6ed, 0x07f8, 0x97f5, 0x67e1, 0xf7ec, 0xc7ca,
12389 +
            0x57c7, 0xa7d3, 0x37de, 0xc79f, 0x5792, 0xa786, 0x378b, 0x07ad, 0x97a0, 0x67b4, 0xf7b9,
12390 +
            0xc735, 0x5738, 0xa72c, 0x3721, 0x0707, 0x970a, 0x671e, 0xf713, 0x0752, 0x975f, 0x674b,
12391 +
            0xf746, 0xc760, 0x576d, 0xa779, 0x3774, 0x0550, 0x955d, 0x6549, 0xf544, 0xc562, 0x556f,
12392 +
            0xa57b, 0x3576, 0xc537, 0x553a, 0xa52e, 0x3523, 0x0505, 0x9508, 0x651c, 0xf511, 0xc59d,
12393 +
            0x5590, 0xa584, 0x3589, 0x05af, 0x95a2, 0x65b6, 0xf5bb, 0x05fa, 0x95f7, 0x65e3, 0xf5ee,
12394 +
            0xc5c8, 0x55c5, 0xa5d1, 0x35dc, 0xc4c9, 0x54c4, 0xa4d0, 0x34dd, 0x04fb, 0x94f6, 0x64e2,
12395 +
            0xf4ef, 0x04ae, 0x94a3, 0x64b7, 0xf4ba, 0xc49c, 0x5491, 0xa485, 0x3488, 0x0404, 0x9409,
12396 +
            0x641d, 0xf410, 0xc436, 0x543b, 0xa42f, 0x3422, 0xc463, 0x546e, 0xa47a, 0x3477, 0x0451,
12397 +
            0x945c, 0x6448, 0xf445,
12398 +
        ],
12399 +
        [
12400 +
            0x0000, 0xc551, 0xcaa1, 0x0ff0, 0xd541, 0x1010, 0x1fe0, 0xdab1, 0xea81, 0x2fd0, 0x2020,
12401 +
            0xe571, 0x3fc0, 0xfa91, 0xf561, 0x3030, 0x9501, 0x5050, 0x5fa0, 0x9af1, 0x4040, 0x8511,
12402 +
            0x8ae1, 0x4fb0, 0x7f80, 0xbad1, 0xb521, 0x7070, 0xaac1, 0x6f90, 0x6060, 0xa531, 0x6a01,
12403 +
            0xaf50, 0xa0a0, 0x65f1, 0xbf40, 0x7a11, 0x75e1, 0xb0b0, 0x8080, 0x45d1, 0x4a21, 0x8f70,
12404 +
            0x55c1, 0x9090, 0x9f60, 0x5a31, 0xff00, 0x3a51, 0x35a1, 0xf0f0, 0x2a41, 0xef10, 0xe0e0,
12405 +
            0x25b1, 0x1581, 0xd0d0, 0xdf20, 0x1a71, 0xc0c0, 0x0591, 0x0a61, 0xcf30, 0xd402, 0x1153,
12406 +
            0x1ea3, 0xdbf2, 0x0143, 0xc412, 0xcbe2, 0x0eb3, 0x3e83, 0xfbd2, 0xf422, 0x3173, 0xebc2,
12407 +
            0x2e93, 0x2163, 0xe432, 0x4103, 0x8452, 0x8ba2, 0x4ef3, 0x9442, 0x5113, 0x5ee3, 0x9bb2,
12408 +
            0xab82, 0x6ed3, 0x6123, 0xa472, 0x7ec3, 0xbb92, 0xb462, 0x7133, 0xbe03, 0x7b52, 0x74a2,
12409 +
            0xb1f3, 0x6b42, 0xae13, 0xa1e3, 0x64b2, 0x5482, 0x91d3, 0x9e23, 0x5b72, 0x81c3, 0x4492,
12410 +
            0x4b62, 0x8e33, 0x2b02, 0xee53, 0xe1a3, 0x24f2, 0xfe43, 0x3b12, 0x34e2, 0xf1b3, 0xc183,
12411 +
            0x04d2, 0x0b22, 0xce73, 0x14c2, 0xd193, 0xde63, 0x1b32, 0xe807, 0x2d56, 0x22a6, 0xe7f7,
12412 +
            0x3d46, 0xf817, 0xf7e7, 0x32b6, 0x0286, 0xc7d7, 0xc827, 0x0d76, 0xd7c7, 0x1296, 0x1d66,
12413 +
            0xd837, 0x7d06, 0xb857, 0xb7a7, 0x72f6, 0xa847, 0x6d16, 0x62e6, 0xa7b7, 0x9787, 0x52d6,
12414 +
            0x5d26, 0x9877, 0x42c6, 0x8797, 0x8867, 0x4d36, 0x8206, 0x4757, 0x48a7, 0x8df6, 0x5747,
12415 +
            0x9216, 0x9de6, 0x58b7, 0x6887, 0xadd6, 0xa226, 0x6777, 0xbdc6, 0x7897, 0x7767, 0xb236,
12416 +
            0x1707, 0xd256, 0xdda6, 0x18f7, 0xc246, 0x0717, 0x08e7, 0xcdb6, 0xfd86, 0x38d7, 0x3727,
12417 +
            0xf276, 0x28c7, 0xed96, 0xe266, 0x2737, 0x3c05, 0xf954, 0xf6a4, 0x33f5, 0xe944, 0x2c15,
12418 +
            0x23e5, 0xe6b4, 0xd684, 0x13d5, 0x1c25, 0xd974, 0x03c5, 0xc694, 0xc964, 0x0c35, 0xa904,
12419 +
            0x6c55, 0x63a5, 0xa6f4, 0x7c45, 0xb914, 0xb6e4, 0x73b5, 0x4385, 0x86d4, 0x8924, 0x4c75,
12420 +
            0x96c4, 0x5395, 0x5c65, 0x9934, 0x5604, 0x9355, 0x9ca5, 0x59f4, 0x8345, 0x4614, 0x49e4,
12421 +
            0x8cb5, 0xbc85, 0x79d4, 0x7624, 0xb375, 0x69c4, 0xac95, 0xa365, 0x6634, 0xc305, 0x0654,
12422 +
            0x09a4, 0xccf5, 0x1644, 0xd315, 0xdce5, 0x19b4, 0x2984, 0xecd5, 0xe325, 0x2674, 0xfcc5,
12423 +
            0x3994, 0x3664, 0xf335,
12424 +
        ],
12425 +
        [
12426 +
            0x0000, 0xfc04, 0xb80b, 0x440f, 0x3015, 0xcc11, 0x881e, 0x741a, 0x602a, 0x9c2e, 0xd821,
12427 +
            0x2425, 0x503f, 0xac3b, 0xe834, 0x1430, 0xc054, 0x3c50, 0x785f, 0x845b, 0xf041, 0x0c45,
12428 +
            0x484a, 0xb44e, 0xa07e, 0x5c7a, 0x1875, 0xe471, 0x906b, 0x6c6f, 0x2860, 0xd464, 0xc0ab,
12429 +
            0x3caf, 0x78a0, 0x84a4, 0xf0be, 0x0cba, 0x48b5, 0xb4b1, 0xa081, 0x5c85, 0x188a, 0xe48e,
12430 +
            0x9094, 0x6c90, 0x289f, 0xd49b, 0x00ff, 0xfcfb, 0xb8f4, 0x44f0, 0x30ea, 0xccee, 0x88e1,
12431 +
            0x74e5, 0x60d5, 0x9cd1, 0xd8de, 0x24da, 0x50c0, 0xacc4, 0xe8cb, 0x14cf, 0xc155, 0x3d51,
12432 +
            0x795e, 0x855a, 0xf140, 0x0d44, 0x494b, 0xb54f, 0xa17f, 0x5d7b, 0x1974, 0xe570, 0x916a,
12433 +
            0x6d6e, 0x2961, 0xd565, 0x0101, 0xfd05, 0xb90a, 0x450e, 0x3114, 0xcd10, 0x891f, 0x751b,
12434 +
            0x612b, 0x9d2f, 0xd920, 0x2524, 0x513e, 0xad3a, 0xe935, 0x1531, 0x01fe, 0xfdfa, 0xb9f5,
12435 +
            0x45f1, 0x31eb, 0xcdef, 0x89e0, 0x75e4, 0x61d4, 0x9dd0, 0xd9df, 0x25db, 0x51c1, 0xadc5,
12436 +
            0xe9ca, 0x15ce, 0xc1aa, 0x3dae, 0x79a1, 0x85a5, 0xf1bf, 0x0dbb, 0x49b4, 0xb5b0, 0xa180,
12437 +
            0x5d84, 0x198b, 0xe58f, 0x9195, 0x6d91, 0x299e, 0xd59a, 0xc2a9, 0x3ead, 0x7aa2, 0x86a6,
12438 +
            0xf2bc, 0x0eb8, 0x4ab7, 0xb6b3, 0xa283, 0x5e87, 0x1a88, 0xe68c, 0x9296, 0x6e92, 0x2a9d,
12439 +
            0xd699, 0x02fd, 0xfef9, 0xbaf6, 0x46f2, 0x32e8, 0xceec, 0x8ae3, 0x76e7, 0x62d7, 0x9ed3,
12440 +
            0xdadc, 0x26d8, 0x52c2, 0xaec6, 0xeac9, 0x16cd, 0x0202, 0xfe06, 0xba09, 0x460d, 0x3217,
12441 +
            0xce13, 0x8a1c, 0x7618, 0x6228, 0x9e2c, 0xda23, 0x2627, 0x523d, 0xae39, 0xea36, 0x1632,
12442 +
            0xc256, 0x3e52, 0x7a5d, 0x8659, 0xf243, 0x0e47, 0x4a48, 0xb64c, 0xa27c, 0x5e78, 0x1a77,
12443 +
            0xe673, 0x9269, 0x6e6d, 0x2a62, 0xd666, 0x03fc, 0xfff8, 0xbbf7, 0x47f3, 0x33e9, 0xcfed,
12444 +
            0x8be2, 0x77e6, 0x63d6, 0x9fd2, 0xdbdd, 0x27d9, 0x53c3, 0xafc7, 0xebc8, 0x17cc, 0xc3a8,
12445 +
            0x3fac, 0x7ba3, 0x87a7, 0xf3bd, 0x0fb9, 0x4bb6, 0xb7b2, 0xa382, 0x5f86, 0x1b89, 0xe78d,
12446 +
            0x9397, 0x6f93, 0x2b9c, 0xd798, 0xc357, 0x3f53, 0x7b5c, 0x8758, 0xf342, 0x0f46, 0x4b49,
12447 +
            0xb74d, 0xa37d, 0x5f79, 0x1b76, 0xe772, 0x9368, 0x6f6c, 0x2b63, 0xd767, 0x0303, 0xff07,
12448 +
            0xbb08, 0x470c, 0x3316, 0xcf12, 0x8b1d, 0x7719, 0x6329, 0x9f2d, 0xdb22, 0x2726, 0x533c,
12449 +
            0xaf38, 0xeb37, 0x1733,
12450 +
        ],
12451 +
        [
12452 +
            0x0000, 0xc3fd, 0xc7f9, 0x0404, 0xcff1, 0x0c0c, 0x0808, 0xcbf5, 0xdfe1, 0x1c1c, 0x1818,
12453 +
            0xdbe5, 0x1010, 0xd3ed, 0xd7e9, 0x1414, 0xffc1, 0x3c3c, 0x3838, 0xfbc5, 0x3030, 0xf3cd,
12454 +
            0xf7c9, 0x3434, 0x2020, 0xe3dd, 0xe7d9, 0x2424, 0xefd1, 0x2c2c, 0x2828, 0xebd5, 0xbf81,
12455 +
            0x7c7c, 0x7878, 0xbb85, 0x7070, 0xb38d, 0xb789, 0x7474, 0x6060, 0xa39d, 0xa799, 0x6464,
12456 +
            0xaf91, 0x6c6c, 0x6868, 0xab95, 0x4040, 0x83bd, 0x87b9, 0x4444, 0x8fb1, 0x4c4c, 0x4848,
12457 +
            0x8bb5, 0x9fa1, 0x5c5c, 0x5858, 0x9ba5, 0x5050, 0x93ad, 0x97a9, 0x5454, 0x3f01, 0xfcfc,
12458 +
            0xf8f8, 0x3b05, 0xf0f0, 0x330d, 0x3709, 0xf4f4, 0xe0e0, 0x231d, 0x2719, 0xe4e4, 0x2f11,
12459 +
            0xecec, 0xe8e8, 0x2b15, 0xc0c0, 0x033d, 0x0739, 0xc4c4, 0x0f31, 0xcccc, 0xc8c8, 0x0b35,
12460 +
            0x1f21, 0xdcdc, 0xd8d8, 0x1b25, 0xd0d0, 0x132d, 0x1729, 0xd4d4, 0x8080, 0x437d, 0x4779,
12461 +
            0x8484, 0x4f71, 0x8c8c, 0x8888, 0x4b75, 0x5f61, 0x9c9c, 0x9898, 0x5b65, 0x9090, 0x536d,
12462 +
            0x5769, 0x9494, 0x7f41, 0xbcbc, 0xb8b8, 0x7b45, 0xb0b0, 0x734d, 0x7749, 0xb4b4, 0xa0a0,
12463 +
            0x635d, 0x6759, 0xa4a4, 0x6f51, 0xacac, 0xa8a8, 0x6b55, 0x7e02, 0xbdff, 0xb9fb, 0x7a06,
12464 +
            0xb1f3, 0x720e, 0x760a, 0xb5f7, 0xa1e3, 0x621e, 0x661a, 0xa5e7, 0x6e12, 0xadef, 0xa9eb,
12465 +
            0x6a16, 0x81c3, 0x423e, 0x463a, 0x85c7, 0x4e32, 0x8dcf, 0x89cb, 0x4a36, 0x5e22, 0x9ddf,
12466 +
            0x99db, 0x5a26, 0x91d3, 0x522e, 0x562a, 0x95d7, 0xc183, 0x027e, 0x067a, 0xc587, 0x0e72,
12467 +
            0xcd8f, 0xc98b, 0x0a76, 0x1e62, 0xdd9f, 0xd99b, 0x1a66, 0xd193, 0x126e, 0x166a, 0xd597,
12468 +
            0x3e42, 0xfdbf, 0xf9bb, 0x3a46, 0xf1b3, 0x324e, 0x364a, 0xf5b7, 0xe1a3, 0x225e, 0x265a,
12469 +
            0xe5a7, 0x2e52, 0xedaf, 0xe9ab, 0x2a56, 0x4103, 0x82fe, 0x86fa, 0x4507, 0x8ef2, 0x4d0f,
12470 +
            0x490b, 0x8af6, 0x9ee2, 0x5d1f, 0x591b, 0x9ae6, 0x5113, 0x92ee, 0x96ea, 0x5517, 0xbec2,
12471 +
            0x7d3f, 0x793b, 0xbac6, 0x7133, 0xb2ce, 0xb6ca, 0x7537, 0x6123, 0xa2de, 0xa6da, 0x6527,
12472 +
            0xaed2, 0x6d2f, 0x692b, 0xaad6, 0xfe82, 0x3d7f, 0x397b, 0xfa86, 0x3173, 0xf28e, 0xf68a,
12473 +
            0x3577, 0x2163, 0xe29e, 0xe69a, 0x2567, 0xee92, 0x2d6f, 0x296b, 0xea96, 0x0143, 0xc2be,
12474 +
            0xc6ba, 0x0547, 0xceb2, 0x0d4f, 0x094b, 0xcab6, 0xdea2, 0x1d5f, 0x195b, 0xdaa6, 0x1153,
12475 +
            0xd2ae, 0xd6aa, 0x1557,
12476 +
        ],
12477 +
        [
12478 +
            0x0000, 0x8102, 0x4207, 0xc305, 0x840e, 0x050c, 0xc609, 0x470b, 0x481f, 0xc91d, 0x0a18,
12479 +
            0x8b1a, 0xcc11, 0x4d13, 0x8e16, 0x0f14, 0x903e, 0x113c, 0xd239, 0x533b, 0x1430, 0x9532,
12480 +
            0x5637, 0xd735, 0xd821, 0x5923, 0x9a26, 0x1b24, 0x5c2f, 0xdd2d, 0x1e28, 0x9f2a, 0x607f,
12481 +
            0xe17d, 0x2278, 0xa37a, 0xe471, 0x6573, 0xa676, 0x2774, 0x2860, 0xa962, 0x6a67, 0xeb65,
12482 +
            0xac6e, 0x2d6c, 0xee69, 0x6f6b, 0xf041, 0x7143, 0xb246, 0x3344, 0x744f, 0xf54d, 0x3648,
12483 +
            0xb74a, 0xb85e, 0x395c, 0xfa59, 0x7b5b, 0x3c50, 0xbd52, 0x7e57, 0xff55, 0xc0fe, 0x41fc,
12484 +
            0x82f9, 0x03fb, 0x44f0, 0xc5f2, 0x06f7, 0x87f5, 0x88e1, 0x09e3, 0xcae6, 0x4be4, 0x0cef,
12485 +
            0x8ded, 0x4ee8, 0xcfea, 0x50c0, 0xd1c2, 0x12c7, 0x93c5, 0xd4ce, 0x55cc, 0x96c9, 0x17cb,
12486 +
            0x18df, 0x99dd, 0x5ad8, 0xdbda, 0x9cd1, 0x1dd3, 0xded6, 0x5fd4, 0xa081, 0x2183, 0xe286,
12487 +
            0x6384, 0x248f, 0xa58d, 0x6688, 0xe78a, 0xe89e, 0x699c, 0xaa99, 0x2b9b, 0x6c90, 0xed92,
12488 +
            0x2e97, 0xaf95, 0x30bf, 0xb1bd, 0x72b8, 0xf3ba, 0xb4b1, 0x35b3, 0xf6b6, 0x77b4, 0x78a0,
12489 +
            0xf9a2, 0x3aa7, 0xbba5, 0xfcae, 0x7dac, 0xbea9, 0x3fab, 0xc1ff, 0x40fd, 0x83f8, 0x02fa,
12490 +
            0x45f1, 0xc4f3, 0x07f6, 0x86f4, 0x89e0, 0x08e2, 0xcbe7, 0x4ae5, 0x0dee, 0x8cec, 0x4fe9,
12491 +
            0xceeb, 0x51c1, 0xd0c3, 0x13c6, 0x92c4, 0xd5cf, 0x54cd, 0x97c8, 0x16ca, 0x19de, 0x98dc,
12492 +
            0x5bd9, 0xdadb, 0x9dd0, 0x1cd2, 0xdfd7, 0x5ed5, 0xa180, 0x2082, 0xe387, 0x6285, 0x258e,
12493 +
            0xa48c, 0x6789, 0xe68b, 0xe99f, 0x689d, 0xab98, 0x2a9a, 0x6d91, 0xec93, 0x2f96, 0xae94,
12494 +
            0x31be, 0xb0bc, 0x73b9, 0xf2bb, 0xb5b0, 0x34b2, 0xf7b7, 0x76b5, 0x79a1, 0xf8a3, 0x3ba6,
12495 +
            0xbaa4, 0xfdaf, 0x7cad, 0xbfa8, 0x3eaa, 0x0101, 0x8003, 0x4306, 0xc204, 0x850f, 0x040d,
12496 +
            0xc708, 0x460a, 0x491e, 0xc81c, 0x0b19, 0x8a1b, 0xcd10, 0x4c12, 0x8f17, 0x0e15, 0x913f,
12497 +
            0x103d, 0xd338, 0x523a, 0x1531, 0x9433, 0x5736, 0xd634, 0xd920, 0x5822, 0x9b27, 0x1a25,
12498 +
            0x5d2e, 0xdc2c, 0x1f29, 0x9e2b, 0x617e, 0xe07c, 0x2379, 0xa27b, 0xe570, 0x6472, 0xa777,
12499 +
            0x2675, 0x2961, 0xa863, 0x6b66, 0xea64, 0xad6f, 0x2c6d, 0xef68, 0x6e6a, 0xf140, 0x7042,
12500 +
            0xb347, 0x3245, 0x754e, 0xf44c, 0x3749, 0xb64b, 0xb95f, 0x385d, 0xfb58, 0x7a5a, 0x3d51,
12501 +
            0xbc53, 0x7f56, 0xfe54,
12502 +
        ],
12503 +
        [
12504 +
            0x0000, 0xc100, 0xc203, 0x0303, 0xc405, 0x0505, 0x0606, 0xc706, 0xc809, 0x0909, 0x0a0a,
12505 +
            0xcb0a, 0x0c0c, 0xcd0c, 0xce0f, 0x0f0f, 0xd011, 0x1111, 0x1212, 0xd312, 0x1414, 0xd514,
12506 +
            0xd617, 0x1717, 0x1818, 0xd918, 0xda1b, 0x1b1b, 0xdc1d, 0x1d1d, 0x1e1e, 0xdf1e, 0xe021,
12507 +
            0x2121, 0x2222, 0xe322, 0x2424, 0xe524, 0xe627, 0x2727, 0x2828, 0xe928, 0xea2b, 0x2b2b,
12508 +
            0xec2d, 0x2d2d, 0x2e2e, 0xef2e, 0x3030, 0xf130, 0xf233, 0x3333, 0xf435, 0x3535, 0x3636,
12509 +
            0xf736, 0xf839, 0x3939, 0x3a3a, 0xfb3a, 0x3c3c, 0xfd3c, 0xfe3f, 0x3f3f, 0x8041, 0x4141,
12510 +
            0x4242, 0x8342, 0x4444, 0x8544, 0x8647, 0x4747, 0x4848, 0x8948, 0x8a4b, 0x4b4b, 0x8c4d,
12511 +
            0x4d4d, 0x4e4e, 0x8f4e, 0x5050, 0x9150, 0x9253, 0x5353, 0x9455, 0x5555, 0x5656, 0x9756,
12512 +
            0x9859, 0x5959, 0x5a5a, 0x9b5a, 0x5c5c, 0x9d5c, 0x9e5f, 0x5f5f, 0x6060, 0xa160, 0xa263,
12513 +
            0x6363, 0xa465, 0x6565, 0x6666, 0xa766, 0xa869, 0x6969, 0x6a6a, 0xab6a, 0x6c6c, 0xad6c,
12514 +
            0xae6f, 0x6f6f, 0xb071, 0x7171, 0x7272, 0xb372, 0x7474, 0xb574, 0xb677, 0x7777, 0x7878,
12515 +
            0xb978, 0xba7b, 0x7b7b, 0xbc7d, 0x7d7d, 0x7e7e, 0xbf7e, 0x4081, 0x8181, 0x8282, 0x4382,
12516 +
            0x8484, 0x4584, 0x4687, 0x8787, 0x8888, 0x4988, 0x4a8b, 0x8b8b, 0x4c8d, 0x8d8d, 0x8e8e,
12517 +
            0x4f8e, 0x9090, 0x5190, 0x5293, 0x9393, 0x5495, 0x9595, 0x9696, 0x5796, 0x5899, 0x9999,
12518 +
            0x9a9a, 0x5b9a, 0x9c9c, 0x5d9c, 0x5e9f, 0x9f9f, 0xa0a0, 0x61a0, 0x62a3, 0xa3a3, 0x64a5,
12519 +
            0xa5a5, 0xa6a6, 0x67a6, 0x68a9, 0xa9a9, 0xaaaa, 0x6baa, 0xacac, 0x6dac, 0x6eaf, 0xafaf,
12520 +
            0x70b1, 0xb1b1, 0xb2b2, 0x73b2, 0xb4b4, 0x75b4, 0x76b7, 0xb7b7, 0xb8b8, 0x79b8, 0x7abb,
12521 +
            0xbbbb, 0x7cbd, 0xbdbd, 0xbebe, 0x7fbe, 0xc0c0, 0x01c0, 0x02c3, 0xc3c3, 0x04c5, 0xc5c5,
12522 +
            0xc6c6, 0x07c6, 0x08c9, 0xc9c9, 0xcaca, 0x0bca, 0xcccc, 0x0dcc, 0x0ecf, 0xcfcf, 0x10d1,
12523 +
            0xd1d1, 0xd2d2, 0x13d2, 0xd4d4, 0x15d4, 0x16d7, 0xd7d7, 0xd8d8, 0x19d8, 0x1adb, 0xdbdb,
12524 +
            0x1cdd, 0xdddd, 0xdede, 0x1fde, 0x20e1, 0xe1e1, 0xe2e2, 0x23e2, 0xe4e4, 0x25e4, 0x26e7,
12525 +
            0xe7e7, 0xe8e8, 0x29e8, 0x2aeb, 0xebeb, 0x2ced, 0xeded, 0xeeee, 0x2fee, 0xf0f0, 0x31f0,
12526 +
            0x32f3, 0xf3f3, 0x34f5, 0xf5f5, 0xf6f6, 0x37f6, 0x38f9, 0xf9f9, 0xfafa, 0x3bfa, 0xfcfc,
12527 +
            0x3dfc, 0x3eff, 0xffff,
12528 +
        ],
12529 +
        [
12530 +
            0x0000, 0x00c1, 0x0182, 0x0143, 0x0304, 0x03c5, 0x0286, 0x0247, 0x0608, 0x06c9, 0x078a,
12531 +
            0x074b, 0x050c, 0x05cd, 0x048e, 0x044f, 0x0c10, 0x0cd1, 0x0d92, 0x0d53, 0x0f14, 0x0fd5,
12532 +
            0x0e96, 0x0e57, 0x0a18, 0x0ad9, 0x0b9a, 0x0b5b, 0x091c, 0x09dd, 0x089e, 0x085f, 0x1820,
12533 +
            0x18e1, 0x19a2, 0x1963, 0x1b24, 0x1be5, 0x1aa6, 0x1a67, 0x1e28, 0x1ee9, 0x1faa, 0x1f6b,
12534 +
            0x1d2c, 0x1ded, 0x1cae, 0x1c6f, 0x1430, 0x14f1, 0x15b2, 0x1573, 0x1734, 0x17f5, 0x16b6,
12535 +
            0x1677, 0x1238, 0x12f9, 0x13ba, 0x137b, 0x113c, 0x11fd, 0x10be, 0x107f, 0x3040, 0x3081,
12536 +
            0x31c2, 0x3103, 0x3344, 0x3385, 0x32c6, 0x3207, 0x3648, 0x3689, 0x37ca, 0x370b, 0x354c,
12537 +
            0x358d, 0x34ce, 0x340f, 0x3c50, 0x3c91, 0x3dd2, 0x3d13, 0x3f54, 0x3f95, 0x3ed6, 0x3e17,
12538 +
            0x3a58, 0x3a99, 0x3bda, 0x3b1b, 0x395c, 0x399d, 0x38de, 0x381f, 0x2860, 0x28a1, 0x29e2,
12539 +
            0x2923, 0x2b64, 0x2ba5, 0x2ae6, 0x2a27, 0x2e68, 0x2ea9, 0x2fea, 0x2f2b, 0x2d6c, 0x2dad,
12540 +
            0x2cee, 0x2c2f, 0x2470, 0x24b1, 0x25f2, 0x2533, 0x2774, 0x27b5, 0x26f6, 0x2637, 0x2278,
12541 +
            0x22b9, 0x23fa, 0x233b, 0x217c, 0x21bd, 0x20fe, 0x203f, 0x6080, 0x6041, 0x6102, 0x61c3,
12542 +
            0x6384, 0x6345, 0x6206, 0x62c7, 0x6688, 0x6649, 0x670a, 0x67cb, 0x658c, 0x654d, 0x640e,
12543 +
            0x64cf, 0x6c90, 0x6c51, 0x6d12, 0x6dd3, 0x6f94, 0x6f55, 0x6e16, 0x6ed7, 0x6a98, 0x6a59,
12544 +
            0x6b1a, 0x6bdb, 0x699c, 0x695d, 0x681e, 0x68df, 0x78a0, 0x7861, 0x7922, 0x79e3, 0x7ba4,
12545 +
            0x7b65, 0x7a26, 0x7ae7, 0x7ea8, 0x7e69, 0x7f2a, 0x7feb, 0x7dac, 0x7d6d, 0x7c2e, 0x7cef,
12546 +
            0x74b0, 0x7471, 0x7532, 0x75f3, 0x77b4, 0x7775, 0x7636, 0x76f7, 0x72b8, 0x7279, 0x733a,
12547 +
            0x73fb, 0x71bc, 0x717d, 0x703e, 0x70ff, 0x50c0, 0x5001, 0x5142, 0x5183, 0x53c4, 0x5305,
12548 +
            0x5246, 0x5287, 0x56c8, 0x5609, 0x574a, 0x578b, 0x55cc, 0x550d, 0x544e, 0x548f, 0x5cd0,
12549 +
            0x5c11, 0x5d52, 0x5d93, 0x5fd4, 0x5f15, 0x5e56, 0x5e97, 0x5ad8, 0x5a19, 0x5b5a, 0x5b9b,
12550 +
            0x59dc, 0x591d, 0x585e, 0x589f, 0x48e0, 0x4821, 0x4962, 0x49a3, 0x4be4, 0x4b25, 0x4a66,
12551 +
            0x4aa7, 0x4ee8, 0x4e29, 0x4f6a, 0x4fab, 0x4dec, 0x4d2d, 0x4c6e, 0x4caf, 0x44f0, 0x4431,
12552 +
            0x4572, 0x45b3, 0x47f4, 0x4735, 0x4676, 0x46b7, 0x42f8, 0x4239, 0x437a, 0x43bb, 0x41fc,
12553 +
            0x413d, 0x407e, 0x40bf,
12554 +
        ],
12555 +
        [
12556 +
            0x0000, 0x90c1, 0x6181, 0xf140, 0xc302, 0x53c3, 0xa283, 0x3242, 0xc607, 0x56c6, 0xa786,
12557 +
            0x3747, 0x0505, 0x95c4, 0x6484, 0xf445, 0xcc0d, 0x5ccc, 0xad8c, 0x3d4d, 0x0f0f, 0x9fce,
12558 +
            0x6e8e, 0xfe4f, 0x0a0a, 0x9acb, 0x6b8b, 0xfb4a, 0xc908, 0x59c9, 0xa889, 0x3848, 0xd819,
12559 +
            0x48d8, 0xb998, 0x2959, 0x1b1b, 0x8bda, 0x7a9a, 0xea5b, 0x1e1e, 0x8edf, 0x7f9f, 0xef5e,
12560 +
            0xdd1c, 0x4ddd, 0xbc9d, 0x2c5c, 0x1414, 0x84d5, 0x7595, 0xe554, 0xd716, 0x47d7, 0xb697,
12561 +
            0x2656, 0xd213, 0x42d2, 0xb392, 0x2353, 0x1111, 0x81d0, 0x7090, 0xe051, 0xf031, 0x60f0,
12562 +
            0x91b0, 0x0171, 0x3333, 0xa3f2, 0x52b2, 0xc273, 0x3636, 0xa6f7, 0x57b7, 0xc776, 0xf534,
12563 +
            0x65f5, 0x94b5, 0x0474, 0x3c3c, 0xacfd, 0x5dbd, 0xcd7c, 0xff3e, 0x6fff, 0x9ebf, 0x0e7e,
12564 +
            0xfa3b, 0x6afa, 0x9bba, 0x0b7b, 0x3939, 0xa9f8, 0x58b8, 0xc879, 0x2828, 0xb8e9, 0x49a9,
12565 +
            0xd968, 0xeb2a, 0x7beb, 0x8aab, 0x1a6a, 0xee2f, 0x7eee, 0x8fae, 0x1f6f, 0x2d2d, 0xbdec,
12566 +
            0x4cac, 0xdc6d, 0xe425, 0x74e4, 0x85a4, 0x1565, 0x2727, 0xb7e6, 0x46a6, 0xd667, 0x2222,
12567 +
            0xb2e3, 0x43a3, 0xd362, 0xe120, 0x71e1, 0x80a1, 0x1060, 0xa061, 0x30a0, 0xc1e0, 0x5121,
12568 +
            0x6363, 0xf3a2, 0x02e2, 0x9223, 0x6666, 0xf6a7, 0x07e7, 0x9726, 0xa564, 0x35a5, 0xc4e5,
12569 +
            0x5424, 0x6c6c, 0xfcad, 0x0ded, 0x9d2c, 0xaf6e, 0x3faf, 0xceef, 0x5e2e, 0xaa6b, 0x3aaa,
12570 +
            0xcbea, 0x5b2b, 0x6969, 0xf9a8, 0x08e8, 0x9829, 0x7878, 0xe8b9, 0x19f9, 0x8938, 0xbb7a,
12571 +
            0x2bbb, 0xdafb, 0x4a3a, 0xbe7f, 0x2ebe, 0xdffe, 0x4f3f, 0x7d7d, 0xedbc, 0x1cfc, 0x8c3d,
12572 +
            0xb475, 0x24b4, 0xd5f4, 0x4535, 0x7777, 0xe7b6, 0x16f6, 0x8637, 0x7272, 0xe2b3, 0x13f3,
12573 +
            0x8332, 0xb170, 0x21b1, 0xd0f1, 0x4030, 0x5050, 0xc091, 0x31d1, 0xa110, 0x9352, 0x0393,
12574 +
            0xf2d3, 0x6212, 0x9657, 0x0696, 0xf7d6, 0x6717, 0x5555, 0xc594, 0x34d4, 0xa415, 0x9c5d,
12575 +
            0x0c9c, 0xfddc, 0x6d1d, 0x5f5f, 0xcf9e, 0x3ede, 0xae1f, 0x5a5a, 0xca9b, 0x3bdb, 0xab1a,
12576 +
            0x9958, 0x0999, 0xf8d9, 0x6818, 0x8849, 0x1888, 0xe9c8, 0x7909, 0x4b4b, 0xdb8a, 0x2aca,
12577 +
            0xba0b, 0x4e4e, 0xde8f, 0x2fcf, 0xbf0e, 0x8d4c, 0x1d8d, 0xeccd, 0x7c0c, 0x4444, 0xd485,
12578 +
            0x25c5, 0xb504, 0x8746, 0x1787, 0xe6c7, 0x7606, 0x8243, 0x1282, 0xe3c2, 0x7303, 0x4141,
12579 +
            0xd180, 0x20c0, 0xb001,
12580 +
        ],
12581 +
    ];
12582 +
12583 +
    pub static CRC16_XMODEM_TABLE: [[u16; 256]; 16] = [
12584 +
        [
12585 +
            0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a,
12586 +
            0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294,
12587 +
            0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462,
12588 +
            0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509,
12589 +
            0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695,
12590 +
            0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,
12591 +
            0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948,
12592 +
            0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
12593 +
            0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4,
12594 +
            0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b,
12595 +
            0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f,
12596 +
            0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,
12597 +
            0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046,
12598 +
            0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290,
12599 +
            0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e,
12600 +
            0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
12601 +
            0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691,
12602 +
            0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,
12603 +
            0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d,
12604 +
            0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16,
12605 +
            0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8,
12606 +
            0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e,
12607 +
            0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93,
12608 +
            0x3eb2, 0x0ed1, 0x1ef0,
12609 +
        ],
12610 +
        [
12611 +
            0x0000, 0x3331, 0x6662, 0x5553, 0xccc4, 0xfff5, 0xaaa6, 0x9997, 0x89a9, 0xba98, 0xefcb,
12612 +
            0xdcfa, 0x456d, 0x765c, 0x230f, 0x103e, 0x0373, 0x3042, 0x6511, 0x5620, 0xcfb7, 0xfc86,
12613 +
            0xa9d5, 0x9ae4, 0x8ada, 0xb9eb, 0xecb8, 0xdf89, 0x461e, 0x752f, 0x207c, 0x134d, 0x06e6,
12614 +
            0x35d7, 0x6084, 0x53b5, 0xca22, 0xf913, 0xac40, 0x9f71, 0x8f4f, 0xbc7e, 0xe92d, 0xda1c,
12615 +
            0x438b, 0x70ba, 0x25e9, 0x16d8, 0x0595, 0x36a4, 0x63f7, 0x50c6, 0xc951, 0xfa60, 0xaf33,
12616 +
            0x9c02, 0x8c3c, 0xbf0d, 0xea5e, 0xd96f, 0x40f8, 0x73c9, 0x269a, 0x15ab, 0x0dcc, 0x3efd,
12617 +
            0x6bae, 0x589f, 0xc108, 0xf239, 0xa76a, 0x945b, 0x8465, 0xb754, 0xe207, 0xd136, 0x48a1,
12618 +
            0x7b90, 0x2ec3, 0x1df2, 0x0ebf, 0x3d8e, 0x68dd, 0x5bec, 0xc27b, 0xf14a, 0xa419, 0x9728,
12619 +
            0x8716, 0xb427, 0xe174, 0xd245, 0x4bd2, 0x78e3, 0x2db0, 0x1e81, 0x0b2a, 0x381b, 0x6d48,
12620 +
            0x5e79, 0xc7ee, 0xf4df, 0xa18c, 0x92bd, 0x8283, 0xb1b2, 0xe4e1, 0xd7d0, 0x4e47, 0x7d76,
12621 +
            0x2825, 0x1b14, 0x0859, 0x3b68, 0x6e3b, 0x5d0a, 0xc49d, 0xf7ac, 0xa2ff, 0x91ce, 0x81f0,
12622 +
            0xb2c1, 0xe792, 0xd4a3, 0x4d34, 0x7e05, 0x2b56, 0x1867, 0x1b98, 0x28a9, 0x7dfa, 0x4ecb,
12623 +
            0xd75c, 0xe46d, 0xb13e, 0x820f, 0x9231, 0xa100, 0xf453, 0xc762, 0x5ef5, 0x6dc4, 0x3897,
12624 +
            0x0ba6, 0x18eb, 0x2bda, 0x7e89, 0x4db8, 0xd42f, 0xe71e, 0xb24d, 0x817c, 0x9142, 0xa273,
12625 +
            0xf720, 0xc411, 0x5d86, 0x6eb7, 0x3be4, 0x08d5, 0x1d7e, 0x2e4f, 0x7b1c, 0x482d, 0xd1ba,
12626 +
            0xe28b, 0xb7d8, 0x84e9, 0x94d7, 0xa7e6, 0xf2b5, 0xc184, 0x5813, 0x6b22, 0x3e71, 0x0d40,
12627 +
            0x1e0d, 0x2d3c, 0x786f, 0x4b5e, 0xd2c9, 0xe1f8, 0xb4ab, 0x879a, 0x97a4, 0xa495, 0xf1c6,
12628 +
            0xc2f7, 0x5b60, 0x6851, 0x3d02, 0x0e33, 0x1654, 0x2565, 0x7036, 0x4307, 0xda90, 0xe9a1,
12629 +
            0xbcf2, 0x8fc3, 0x9ffd, 0xaccc, 0xf99f, 0xcaae, 0x5339, 0x6008, 0x355b, 0x066a, 0x1527,
12630 +
            0x2616, 0x7345, 0x4074, 0xd9e3, 0xead2, 0xbf81, 0x8cb0, 0x9c8e, 0xafbf, 0xfaec, 0xc9dd,
12631 +
            0x504a, 0x637b, 0x3628, 0x0519, 0x10b2, 0x2383, 0x76d0, 0x45e1, 0xdc76, 0xef47, 0xba14,
12632 +
            0x8925, 0x991b, 0xaa2a, 0xff79, 0xcc48, 0x55df, 0x66ee, 0x33bd, 0x008c, 0x13c1, 0x20f0,
12633 +
            0x75a3, 0x4692, 0xdf05, 0xec34, 0xb967, 0x8a56, 0x9a68, 0xa959, 0xfc0a, 0xcf3b, 0x56ac,
12634 +
            0x659d, 0x30ce, 0x03ff,
12635 +
        ],
12636 +
        [
12637 +
            0x0000, 0x3730, 0x6e60, 0x5950, 0xdcc0, 0xebf0, 0xb2a0, 0x8590, 0xa9a1, 0x9e91, 0xc7c1,
12638 +
            0xf0f1, 0x7561, 0x4251, 0x1b01, 0x2c31, 0x4363, 0x7453, 0x2d03, 0x1a33, 0x9fa3, 0xa893,
12639 +
            0xf1c3, 0xc6f3, 0xeac2, 0xddf2, 0x84a2, 0xb392, 0x3602, 0x0132, 0x5862, 0x6f52, 0x86c6,
12640 +
            0xb1f6, 0xe8a6, 0xdf96, 0x5a06, 0x6d36, 0x3466, 0x0356, 0x2f67, 0x1857, 0x4107, 0x7637,
12641 +
            0xf3a7, 0xc497, 0x9dc7, 0xaaf7, 0xc5a5, 0xf295, 0xabc5, 0x9cf5, 0x1965, 0x2e55, 0x7705,
12642 +
            0x4035, 0x6c04, 0x5b34, 0x0264, 0x3554, 0xb0c4, 0x87f4, 0xdea4, 0xe994, 0x1dad, 0x2a9d,
12643 +
            0x73cd, 0x44fd, 0xc16d, 0xf65d, 0xaf0d, 0x983d, 0xb40c, 0x833c, 0xda6c, 0xed5c, 0x68cc,
12644 +
            0x5ffc, 0x06ac, 0x319c, 0x5ece, 0x69fe, 0x30ae, 0x079e, 0x820e, 0xb53e, 0xec6e, 0xdb5e,
12645 +
            0xf76f, 0xc05f, 0x990f, 0xae3f, 0x2baf, 0x1c9f, 0x45cf, 0x72ff, 0x9b6b, 0xac5b, 0xf50b,
12646 +
            0xc23b, 0x47ab, 0x709b, 0x29cb, 0x1efb, 0x32ca, 0x05fa, 0x5caa, 0x6b9a, 0xee0a, 0xd93a,
12647 +
            0x806a, 0xb75a, 0xd808, 0xef38, 0xb668, 0x8158, 0x04c8, 0x33f8, 0x6aa8, 0x5d98, 0x71a9,
12648 +
            0x4699, 0x1fc9, 0x28f9, 0xad69, 0x9a59, 0xc309, 0xf439, 0x3b5a, 0x0c6a, 0x553a, 0x620a,
12649 +
            0xe79a, 0xd0aa, 0x89fa, 0xbeca, 0x92fb, 0xa5cb, 0xfc9b, 0xcbab, 0x4e3b, 0x790b, 0x205b,
12650 +
            0x176b, 0x7839, 0x4f09, 0x1659, 0x2169, 0xa4f9, 0x93c9, 0xca99, 0xfda9, 0xd198, 0xe6a8,
12651 +
            0xbff8, 0x88c8, 0x0d58, 0x3a68, 0x6338, 0x5408, 0xbd9c, 0x8aac, 0xd3fc, 0xe4cc, 0x615c,
12652 +
            0x566c, 0x0f3c, 0x380c, 0x143d, 0x230d, 0x7a5d, 0x4d6d, 0xc8fd, 0xffcd, 0xa69d, 0x91ad,
12653 +
            0xfeff, 0xc9cf, 0x909f, 0xa7af, 0x223f, 0x150f, 0x4c5f, 0x7b6f, 0x575e, 0x606e, 0x393e,
12654 +
            0x0e0e, 0x8b9e, 0xbcae, 0xe5fe, 0xd2ce, 0x26f7, 0x11c7, 0x4897, 0x7fa7, 0xfa37, 0xcd07,
12655 +
            0x9457, 0xa367, 0x8f56, 0xb866, 0xe136, 0xd606, 0x5396, 0x64a6, 0x3df6, 0x0ac6, 0x6594,
12656 +
            0x52a4, 0x0bf4, 0x3cc4, 0xb954, 0x8e64, 0xd734, 0xe004, 0xcc35, 0xfb05, 0xa255, 0x9565,
12657 +
            0x10f5, 0x27c5, 0x7e95, 0x49a5, 0xa031, 0x9701, 0xce51, 0xf961, 0x7cf1, 0x4bc1, 0x1291,
12658 +
            0x25a1, 0x0990, 0x3ea0, 0x67f0, 0x50c0, 0xd550, 0xe260, 0xbb30, 0x8c00, 0xe352, 0xd462,
12659 +
            0x8d32, 0xba02, 0x3f92, 0x08a2, 0x51f2, 0x66c2, 0x4af3, 0x7dc3, 0x2493, 0x13a3, 0x9633,
12660 +
            0xa103, 0xf853, 0xcf63,
12661 +
        ],
12662 +
        [
12663 +
            0x0000, 0x76b4, 0xed68, 0x9bdc, 0xcaf1, 0xbc45, 0x2799, 0x512d, 0x85c3, 0xf377, 0x68ab,
12664 +
            0x1e1f, 0x4f32, 0x3986, 0xa25a, 0xd4ee, 0x1ba7, 0x6d13, 0xf6cf, 0x807b, 0xd156, 0xa7e2,
12665 +
            0x3c3e, 0x4a8a, 0x9e64, 0xe8d0, 0x730c, 0x05b8, 0x5495, 0x2221, 0xb9fd, 0xcf49, 0x374e,
12666 +
            0x41fa, 0xda26, 0xac92, 0xfdbf, 0x8b0b, 0x10d7, 0x6663, 0xb28d, 0xc439, 0x5fe5, 0x2951,
12667 +
            0x787c, 0x0ec8, 0x9514, 0xe3a0, 0x2ce9, 0x5a5d, 0xc181, 0xb735, 0xe618, 0x90ac, 0x0b70,
12668 +
            0x7dc4, 0xa92a, 0xdf9e, 0x4442, 0x32f6, 0x63db, 0x156f, 0x8eb3, 0xf807, 0x6e9c, 0x1828,
12669 +
            0x83f4, 0xf540, 0xa46d, 0xd2d9, 0x4905, 0x3fb1, 0xeb5f, 0x9deb, 0x0637, 0x7083, 0x21ae,
12670 +
            0x571a, 0xccc6, 0xba72, 0x753b, 0x038f, 0x9853, 0xeee7, 0xbfca, 0xc97e, 0x52a2, 0x2416,
12671 +
            0xf0f8, 0x864c, 0x1d90, 0x6b24, 0x3a09, 0x4cbd, 0xd761, 0xa1d5, 0x59d2, 0x2f66, 0xb4ba,
12672 +
            0xc20e, 0x9323, 0xe597, 0x7e4b, 0x08ff, 0xdc11, 0xaaa5, 0x3179, 0x47cd, 0x16e0, 0x6054,
12673 +
            0xfb88, 0x8d3c, 0x4275, 0x34c1, 0xaf1d, 0xd9a9, 0x8884, 0xfe30, 0x65ec, 0x1358, 0xc7b6,
12674 +
            0xb102, 0x2ade, 0x5c6a, 0x0d47, 0x7bf3, 0xe02f, 0x969b, 0xdd38, 0xab8c, 0x3050, 0x46e4,
12675 +
            0x17c9, 0x617d, 0xfaa1, 0x8c15, 0x58fb, 0x2e4f, 0xb593, 0xc327, 0x920a, 0xe4be, 0x7f62,
12676 +
            0x09d6, 0xc69f, 0xb02b, 0x2bf7, 0x5d43, 0x0c6e, 0x7ada, 0xe106, 0x97b2, 0x435c, 0x35e8,
12677 +
            0xae34, 0xd880, 0x89ad, 0xff19, 0x64c5, 0x1271, 0xea76, 0x9cc2, 0x071e, 0x71aa, 0x2087,
12678 +
            0x5633, 0xcdef, 0xbb5b, 0x6fb5, 0x1901, 0x82dd, 0xf469, 0xa544, 0xd3f0, 0x482c, 0x3e98,
12679 +
            0xf1d1, 0x8765, 0x1cb9, 0x6a0d, 0x3b20, 0x4d94, 0xd648, 0xa0fc, 0x7412, 0x02a6, 0x997a,
12680 +
            0xefce, 0xbee3, 0xc857, 0x538b, 0x253f, 0xb3a4, 0xc510, 0x5ecc, 0x2878, 0x7955, 0x0fe1,
12681 +
            0x943d, 0xe289, 0x3667, 0x40d3, 0xdb0f, 0xadbb, 0xfc96, 0x8a22, 0x11fe, 0x674a, 0xa803,
12682 +
            0xdeb7, 0x456b, 0x33df, 0x62f2, 0x1446, 0x8f9a, 0xf92e, 0x2dc0, 0x5b74, 0xc0a8, 0xb61c,
12683 +
            0xe731, 0x9185, 0x0a59, 0x7ced, 0x84ea, 0xf25e, 0x6982, 0x1f36, 0x4e1b, 0x38af, 0xa373,
12684 +
            0xd5c7, 0x0129, 0x779d, 0xec41, 0x9af5, 0xcbd8, 0xbd6c, 0x26b0, 0x5004, 0x9f4d, 0xe9f9,
12685 +
            0x7225, 0x0491, 0x55bc, 0x2308, 0xb8d4, 0xce60, 0x1a8e, 0x6c3a, 0xf7e6, 0x8152, 0xd07f,
12686 +
            0xa6cb, 0x3d17, 0x4ba3,
12687 +
        ],
12688 +
        [
12689 +
            0x0000, 0xaa51, 0x4483, 0xeed2, 0x8906, 0x2357, 0xcd85, 0x67d4, 0x022d, 0xa87c, 0x46ae,
12690 +
            0xecff, 0x8b2b, 0x217a, 0xcfa8, 0x65f9, 0x045a, 0xae0b, 0x40d9, 0xea88, 0x8d5c, 0x270d,
12691 +
            0xc9df, 0x638e, 0x0677, 0xac26, 0x42f4, 0xe8a5, 0x8f71, 0x2520, 0xcbf2, 0x61a3, 0x08b4,
12692 +
            0xa2e5, 0x4c37, 0xe666, 0x81b2, 0x2be3, 0xc531, 0x6f60, 0x0a99, 0xa0c8, 0x4e1a, 0xe44b,
12693 +
            0x839f, 0x29ce, 0xc71c, 0x6d4d, 0x0cee, 0xa6bf, 0x486d, 0xe23c, 0x85e8, 0x2fb9, 0xc16b,
12694 +
            0x6b3a, 0x0ec3, 0xa492, 0x4a40, 0xe011, 0x87c5, 0x2d94, 0xc346, 0x6917, 0x1168, 0xbb39,
12695 +
            0x55eb, 0xffba, 0x986e, 0x323f, 0xdced, 0x76bc, 0x1345, 0xb914, 0x57c6, 0xfd97, 0x9a43,
12696 +
            0x3012, 0xdec0, 0x7491, 0x1532, 0xbf63, 0x51b1, 0xfbe0, 0x9c34, 0x3665, 0xd8b7, 0x72e6,
12697 +
            0x171f, 0xbd4e, 0x539c, 0xf9cd, 0x9e19, 0x3448, 0xda9a, 0x70cb, 0x19dc, 0xb38d, 0x5d5f,
12698 +
            0xf70e, 0x90da, 0x3a8b, 0xd459, 0x7e08, 0x1bf1, 0xb1a0, 0x5f72, 0xf523, 0x92f7, 0x38a6,
12699 +
            0xd674, 0x7c25, 0x1d86, 0xb7d7, 0x5905, 0xf354, 0x9480, 0x3ed1, 0xd003, 0x7a52, 0x1fab,
12700 +
            0xb5fa, 0x5b28, 0xf179, 0x96ad, 0x3cfc, 0xd22e, 0x787f, 0x22d0, 0x8881, 0x6653, 0xcc02,
12701 +
            0xabd6, 0x0187, 0xef55, 0x4504, 0x20fd, 0x8aac, 0x647e, 0xce2f, 0xa9fb, 0x03aa, 0xed78,
12702 +
            0x4729, 0x268a, 0x8cdb, 0x6209, 0xc858, 0xaf8c, 0x05dd, 0xeb0f, 0x415e, 0x24a7, 0x8ef6,
12703 +
            0x6024, 0xca75, 0xada1, 0x07f0, 0xe922, 0x4373, 0x2a64, 0x8035, 0x6ee7, 0xc4b6, 0xa362,
12704 +
            0x0933, 0xe7e1, 0x4db0, 0x2849, 0x8218, 0x6cca, 0xc69b, 0xa14f, 0x0b1e, 0xe5cc, 0x4f9d,
12705 +
            0x2e3e, 0x846f, 0x6abd, 0xc0ec, 0xa738, 0x0d69, 0xe3bb, 0x49ea, 0x2c13, 0x8642, 0x6890,
12706 +
            0xc2c1, 0xa515, 0x0f44, 0xe196, 0x4bc7, 0x33b8, 0x99e9, 0x773b, 0xdd6a, 0xbabe, 0x10ef,
12707 +
            0xfe3d, 0x546c, 0x3195, 0x9bc4, 0x7516, 0xdf47, 0xb893, 0x12c2, 0xfc10, 0x5641, 0x37e2,
12708 +
            0x9db3, 0x7361, 0xd930, 0xbee4, 0x14b5, 0xfa67, 0x5036, 0x35cf, 0x9f9e, 0x714c, 0xdb1d,
12709 +
            0xbcc9, 0x1698, 0xf84a, 0x521b, 0x3b0c, 0x915d, 0x7f8f, 0xd5de, 0xb20a, 0x185b, 0xf689,
12710 +
            0x5cd8, 0x3921, 0x9370, 0x7da2, 0xd7f3, 0xb027, 0x1a76, 0xf4a4, 0x5ef5, 0x3f56, 0x9507,
12711 +
            0x7bd5, 0xd184, 0xb650, 0x1c01, 0xf2d3, 0x5882, 0x3d7b, 0x972a, 0x79f8, 0xd3a9, 0xb47d,
12712 +
            0x1e2c, 0xf0fe, 0x5aaf,
12713 +
        ],
12714 +
        [
12715 +
            0x0000, 0x45a0, 0x8b40, 0xcee0, 0x06a1, 0x4301, 0x8de1, 0xc841, 0x0d42, 0x48e2, 0x8602,
12716 +
            0xc3a2, 0x0be3, 0x4e43, 0x80a3, 0xc503, 0x1a84, 0x5f24, 0x91c4, 0xd464, 0x1c25, 0x5985,
12717 +
            0x9765, 0xd2c5, 0x17c6, 0x5266, 0x9c86, 0xd926, 0x1167, 0x54c7, 0x9a27, 0xdf87, 0x3508,
12718 +
            0x70a8, 0xbe48, 0xfbe8, 0x33a9, 0x7609, 0xb8e9, 0xfd49, 0x384a, 0x7dea, 0xb30a, 0xf6aa,
12719 +
            0x3eeb, 0x7b4b, 0xb5ab, 0xf00b, 0x2f8c, 0x6a2c, 0xa4cc, 0xe16c, 0x292d, 0x6c8d, 0xa26d,
12720 +
            0xe7cd, 0x22ce, 0x676e, 0xa98e, 0xec2e, 0x246f, 0x61cf, 0xaf2f, 0xea8f, 0x6a10, 0x2fb0,
12721 +
            0xe150, 0xa4f0, 0x6cb1, 0x2911, 0xe7f1, 0xa251, 0x6752, 0x22f2, 0xec12, 0xa9b2, 0x61f3,
12722 +
            0x2453, 0xeab3, 0xaf13, 0x7094, 0x3534, 0xfbd4, 0xbe74, 0x7635, 0x3395, 0xfd75, 0xb8d5,
12723 +
            0x7dd6, 0x3876, 0xf696, 0xb336, 0x7b77, 0x3ed7, 0xf037, 0xb597, 0x5f18, 0x1ab8, 0xd458,
12724 +
            0x91f8, 0x59b9, 0x1c19, 0xd2f9, 0x9759, 0x525a, 0x17fa, 0xd91a, 0x9cba, 0x54fb, 0x115b,
12725 +
            0xdfbb, 0x9a1b, 0x459c, 0x003c, 0xcedc, 0x8b7c, 0x433d, 0x069d, 0xc87d, 0x8ddd, 0x48de,
12726 +
            0x0d7e, 0xc39e, 0x863e, 0x4e7f, 0x0bdf, 0xc53f, 0x809f, 0xd420, 0x9180, 0x5f60, 0x1ac0,
12727 +
            0xd281, 0x9721, 0x59c1, 0x1c61, 0xd962, 0x9cc2, 0x5222, 0x1782, 0xdfc3, 0x9a63, 0x5483,
12728 +
            0x1123, 0xcea4, 0x8b04, 0x45e4, 0x0044, 0xc805, 0x8da5, 0x4345, 0x06e5, 0xc3e6, 0x8646,
12729 +
            0x48a6, 0x0d06, 0xc547, 0x80e7, 0x4e07, 0x0ba7, 0xe128, 0xa488, 0x6a68, 0x2fc8, 0xe789,
12730 +
            0xa229, 0x6cc9, 0x2969, 0xec6a, 0xa9ca, 0x672a, 0x228a, 0xeacb, 0xaf6b, 0x618b, 0x242b,
12731 +
            0xfbac, 0xbe0c, 0x70ec, 0x354c, 0xfd0d, 0xb8ad, 0x764d, 0x33ed, 0xf6ee, 0xb34e, 0x7dae,
12732 +
            0x380e, 0xf04f, 0xb5ef, 0x7b0f, 0x3eaf, 0xbe30, 0xfb90, 0x3570, 0x70d0, 0xb891, 0xfd31,
12733 +
            0x33d1, 0x7671, 0xb372, 0xf6d2, 0x3832, 0x7d92, 0xb5d3, 0xf073, 0x3e93, 0x7b33, 0xa4b4,
12734 +
            0xe114, 0x2ff4, 0x6a54, 0xa215, 0xe7b5, 0x2955, 0x6cf5, 0xa9f6, 0xec56, 0x22b6, 0x6716,
12735 +
            0xaf57, 0xeaf7, 0x2417, 0x61b7, 0x8b38, 0xce98, 0x0078, 0x45d8, 0x8d99, 0xc839, 0x06d9,
12736 +
            0x4379, 0x867a, 0xc3da, 0x0d3a, 0x489a, 0x80db, 0xc57b, 0x0b9b, 0x4e3b, 0x91bc, 0xd41c,
12737 +
            0x1afc, 0x5f5c, 0x971d, 0xd2bd, 0x1c5d, 0x59fd, 0x9cfe, 0xd95e, 0x17be, 0x521e, 0x9a5f,
12738 +
            0xdfff, 0x111f, 0x54bf,
12739 +
        ],
12740 +
        [
12741 +
            0x0000, 0xb861, 0x60e3, 0xd882, 0xc1c6, 0x79a7, 0xa125, 0x1944, 0x93ad, 0x2bcc, 0xf34e,
12742 +
            0x4b2f, 0x526b, 0xea0a, 0x3288, 0x8ae9, 0x377b, 0x8f1a, 0x5798, 0xeff9, 0xf6bd, 0x4edc,
12743 +
            0x965e, 0x2e3f, 0xa4d6, 0x1cb7, 0xc435, 0x7c54, 0x6510, 0xdd71, 0x05f3, 0xbd92, 0x6ef6,
12744 +
            0xd697, 0x0e15, 0xb674, 0xaf30, 0x1751, 0xcfd3, 0x77b2, 0xfd5b, 0x453a, 0x9db8, 0x25d9,
12745 +
            0x3c9d, 0x84fc, 0x5c7e, 0xe41f, 0x598d, 0xe1ec, 0x396e, 0x810f, 0x984b, 0x202a, 0xf8a8,
12746 +
            0x40c9, 0xca20, 0x7241, 0xaac3, 0x12a2, 0x0be6, 0xb387, 0x6b05, 0xd364, 0xddec, 0x658d,
12747 +
            0xbd0f, 0x056e, 0x1c2a, 0xa44b, 0x7cc9, 0xc4a8, 0x4e41, 0xf620, 0x2ea2, 0x96c3, 0x8f87,
12748 +
            0x37e6, 0xef64, 0x5705, 0xea97, 0x52f6, 0x8a74, 0x3215, 0x2b51, 0x9330, 0x4bb2, 0xf3d3,
12749 +
            0x793a, 0xc15b, 0x19d9, 0xa1b8, 0xb8fc, 0x009d, 0xd81f, 0x607e, 0xb31a, 0x0b7b, 0xd3f9,
12750 +
            0x6b98, 0x72dc, 0xcabd, 0x123f, 0xaa5e, 0x20b7, 0x98d6, 0x4054, 0xf835, 0xe171, 0x5910,
12751 +
            0x8192, 0x39f3, 0x8461, 0x3c00, 0xe482, 0x5ce3, 0x45a7, 0xfdc6, 0x2544, 0x9d25, 0x17cc,
12752 +
            0xafad, 0x772f, 0xcf4e, 0xd60a, 0x6e6b, 0xb6e9, 0x0e88, 0xabf9, 0x1398, 0xcb1a, 0x737b,
12753 +
            0x6a3f, 0xd25e, 0x0adc, 0xb2bd, 0x3854, 0x8035, 0x58b7, 0xe0d6, 0xf992, 0x41f3, 0x9971,
12754 +
            0x2110, 0x9c82, 0x24e3, 0xfc61, 0x4400, 0x5d44, 0xe525, 0x3da7, 0x85c6, 0x0f2f, 0xb74e,
12755 +
            0x6fcc, 0xd7ad, 0xcee9, 0x7688, 0xae0a, 0x166b, 0xc50f, 0x7d6e, 0xa5ec, 0x1d8d, 0x04c9,
12756 +
            0xbca8, 0x642a, 0xdc4b, 0x56a2, 0xeec3, 0x3641, 0x8e20, 0x9764, 0x2f05, 0xf787, 0x4fe6,
12757 +
            0xf274, 0x4a15, 0x9297, 0x2af6, 0x33b2, 0x8bd3, 0x5351, 0xeb30, 0x61d9, 0xd9b8, 0x013a,
12758 +
            0xb95b, 0xa01f, 0x187e, 0xc0fc, 0x789d, 0x7615, 0xce74, 0x16f6, 0xae97, 0xb7d3, 0x0fb2,
12759 +
            0xd730, 0x6f51, 0xe5b8, 0x5dd9, 0x855b, 0x3d3a, 0x247e, 0x9c1f, 0x449d, 0xfcfc, 0x416e,
12760 +
            0xf90f, 0x218d, 0x99ec, 0x80a8, 0x38c9, 0xe04b, 0x582a, 0xd2c3, 0x6aa2, 0xb220, 0x0a41,
12761 +
            0x1305, 0xab64, 0x73e6, 0xcb87, 0x18e3, 0xa082, 0x7800, 0xc061, 0xd925, 0x6144, 0xb9c6,
12762 +
            0x01a7, 0x8b4e, 0x332f, 0xebad, 0x53cc, 0x4a88, 0xf2e9, 0x2a6b, 0x920a, 0x2f98, 0x97f9,
12763 +
            0x4f7b, 0xf71a, 0xee5e, 0x563f, 0x8ebd, 0x36dc, 0xbc35, 0x0454, 0xdcd6, 0x64b7, 0x7df3,
12764 +
            0xc592, 0x1d10, 0xa571,
12765 +
        ],
12766 +
        [
12767 +
            0x0000, 0x47d3, 0x8fa6, 0xc875, 0x0f6d, 0x48be, 0x80cb, 0xc718, 0x1eda, 0x5909, 0x917c,
12768 +
            0xd6af, 0x11b7, 0x5664, 0x9e11, 0xd9c2, 0x3db4, 0x7a67, 0xb212, 0xf5c1, 0x32d9, 0x750a,
12769 +
            0xbd7f, 0xfaac, 0x236e, 0x64bd, 0xacc8, 0xeb1b, 0x2c03, 0x6bd0, 0xa3a5, 0xe476, 0x7b68,
12770 +
            0x3cbb, 0xf4ce, 0xb31d, 0x7405, 0x33d6, 0xfba3, 0xbc70, 0x65b2, 0x2261, 0xea14, 0xadc7,
12771 +
            0x6adf, 0x2d0c, 0xe579, 0xa2aa, 0x46dc, 0x010f, 0xc97a, 0x8ea9, 0x49b1, 0x0e62, 0xc617,
12772 +
            0x81c4, 0x5806, 0x1fd5, 0xd7a0, 0x9073, 0x576b, 0x10b8, 0xd8cd, 0x9f1e, 0xf6d0, 0xb103,
12773 +
            0x7976, 0x3ea5, 0xf9bd, 0xbe6e, 0x761b, 0x31c8, 0xe80a, 0xafd9, 0x67ac, 0x207f, 0xe767,
12774 +
            0xa0b4, 0x68c1, 0x2f12, 0xcb64, 0x8cb7, 0x44c2, 0x0311, 0xc409, 0x83da, 0x4baf, 0x0c7c,
12775 +
            0xd5be, 0x926d, 0x5a18, 0x1dcb, 0xdad3, 0x9d00, 0x5575, 0x12a6, 0x8db8, 0xca6b, 0x021e,
12776 +
            0x45cd, 0x82d5, 0xc506, 0x0d73, 0x4aa0, 0x9362, 0xd4b1, 0x1cc4, 0x5b17, 0x9c0f, 0xdbdc,
12777 +
            0x13a9, 0x547a, 0xb00c, 0xf7df, 0x3faa, 0x7879, 0xbf61, 0xf8b2, 0x30c7, 0x7714, 0xaed6,
12778 +
            0xe905, 0x2170, 0x66a3, 0xa1bb, 0xe668, 0x2e1d, 0x69ce, 0xfd81, 0xba52, 0x7227, 0x35f4,
12779 +
            0xf2ec, 0xb53f, 0x7d4a, 0x3a99, 0xe35b, 0xa488, 0x6cfd, 0x2b2e, 0xec36, 0xabe5, 0x6390,
12780 +
            0x2443, 0xc035, 0x87e6, 0x4f93, 0x0840, 0xcf58, 0x888b, 0x40fe, 0x072d, 0xdeef, 0x993c,
12781 +
            0x5149, 0x169a, 0xd182, 0x9651, 0x5e24, 0x19f7, 0x86e9, 0xc13a, 0x094f, 0x4e9c, 0x8984,
12782 +
            0xce57, 0x0622, 0x41f1, 0x9833, 0xdfe0, 0x1795, 0x5046, 0x975e, 0xd08d, 0x18f8, 0x5f2b,
12783 +
            0xbb5d, 0xfc8e, 0x34fb, 0x7328, 0xb430, 0xf3e3, 0x3b96, 0x7c45, 0xa587, 0xe254, 0x2a21,
12784 +
            0x6df2, 0xaaea, 0xed39, 0x254c, 0x629f, 0x0b51, 0x4c82, 0x84f7, 0xc324, 0x043c, 0x43ef,
12785 +
            0x8b9a, 0xcc49, 0x158b, 0x5258, 0x9a2d, 0xddfe, 0x1ae6, 0x5d35, 0x9540, 0xd293, 0x36e5,
12786 +
            0x7136, 0xb943, 0xfe90, 0x3988, 0x7e5b, 0xb62e, 0xf1fd, 0x283f, 0x6fec, 0xa799, 0xe04a,
12787 +
            0x2752, 0x6081, 0xa8f4, 0xef27, 0x7039, 0x37ea, 0xff9f, 0xb84c, 0x7f54, 0x3887, 0xf0f2,
12788 +
            0xb721, 0x6ee3, 0x2930, 0xe145, 0xa696, 0x618e, 0x265d, 0xee28, 0xa9fb, 0x4d8d, 0x0a5e,
12789 +
            0xc22b, 0x85f8, 0x42e0, 0x0533, 0xcd46, 0x8a95, 0x5357, 0x1484, 0xdcf1, 0x9b22, 0x5c3a,
12790 +
            0x1be9, 0xd39c, 0x944f,
12791 +
        ],
12792 +
        [
12793 +
            0x0000, 0xeb23, 0xc667, 0x2d44, 0x9cef, 0x77cc, 0x5a88, 0xb1ab, 0x29ff, 0xc2dc, 0xef98,
12794 +
            0x04bb, 0xb510, 0x5e33, 0x7377, 0x9854, 0x53fe, 0xb8dd, 0x9599, 0x7eba, 0xcf11, 0x2432,
12795 +
            0x0976, 0xe255, 0x7a01, 0x9122, 0xbc66, 0x5745, 0xe6ee, 0x0dcd, 0x2089, 0xcbaa, 0xa7fc,
12796 +
            0x4cdf, 0x619b, 0x8ab8, 0x3b13, 0xd030, 0xfd74, 0x1657, 0x8e03, 0x6520, 0x4864, 0xa347,
12797 +
            0x12ec, 0xf9cf, 0xd48b, 0x3fa8, 0xf402, 0x1f21, 0x3265, 0xd946, 0x68ed, 0x83ce, 0xae8a,
12798 +
            0x45a9, 0xddfd, 0x36de, 0x1b9a, 0xf0b9, 0x4112, 0xaa31, 0x8775, 0x6c56, 0x5fd9, 0xb4fa,
12799 +
            0x99be, 0x729d, 0xc336, 0x2815, 0x0551, 0xee72, 0x7626, 0x9d05, 0xb041, 0x5b62, 0xeac9,
12800 +
            0x01ea, 0x2cae, 0xc78d, 0x0c27, 0xe704, 0xca40, 0x2163, 0x90c8, 0x7beb, 0x56af, 0xbd8c,
12801 +
            0x25d8, 0xcefb, 0xe3bf, 0x089c, 0xb937, 0x5214, 0x7f50, 0x9473, 0xf825, 0x1306, 0x3e42,
12802 +
            0xd561, 0x64ca, 0x8fe9, 0xa2ad, 0x498e, 0xd1da, 0x3af9, 0x17bd, 0xfc9e, 0x4d35, 0xa616,
12803 +
            0x8b52, 0x6071, 0xabdb, 0x40f8, 0x6dbc, 0x869f, 0x3734, 0xdc17, 0xf153, 0x1a70, 0x8224,
12804 +
            0x6907, 0x4443, 0xaf60, 0x1ecb, 0xf5e8, 0xd8ac, 0x338f, 0xbfb2, 0x5491, 0x79d5, 0x92f6,
12805 +
            0x235d, 0xc87e, 0xe53a, 0x0e19, 0x964d, 0x7d6e, 0x502a, 0xbb09, 0x0aa2, 0xe181, 0xccc5,
12806 +
            0x27e6, 0xec4c, 0x076f, 0x2a2b, 0xc108, 0x70a3, 0x9b80, 0xb6c4, 0x5de7, 0xc5b3, 0x2e90,
12807 +
            0x03d4, 0xe8f7, 0x595c, 0xb27f, 0x9f3b, 0x7418, 0x184e, 0xf36d, 0xde29, 0x350a, 0x84a1,
12808 +
            0x6f82, 0x42c6, 0xa9e5, 0x31b1, 0xda92, 0xf7d6, 0x1cf5, 0xad5e, 0x467d, 0x6b39, 0x801a,
12809 +
            0x4bb0, 0xa093, 0x8dd7, 0x66f4, 0xd75f, 0x3c7c, 0x1138, 0xfa1b, 0x624f, 0x896c, 0xa428,
12810 +
            0x4f0b, 0xfea0, 0x1583, 0x38c7, 0xd3e4, 0xe06b, 0x0b48, 0x260c, 0xcd2f, 0x7c84, 0x97a7,
12811 +
            0xbae3, 0x51c0, 0xc994, 0x22b7, 0x0ff3, 0xe4d0, 0x557b, 0xbe58, 0x931c, 0x783f, 0xb395,
12812 +
            0x58b6, 0x75f2, 0x9ed1, 0x2f7a, 0xc459, 0xe91d, 0x023e, 0x9a6a, 0x7149, 0x5c0d, 0xb72e,
12813 +
            0x0685, 0xeda6, 0xc0e2, 0x2bc1, 0x4797, 0xacb4, 0x81f0, 0x6ad3, 0xdb78, 0x305b, 0x1d1f,
12814 +
            0xf63c, 0x6e68, 0x854b, 0xa80f, 0x432c, 0xf287, 0x19a4, 0x34e0, 0xdfc3, 0x1469, 0xff4a,
12815 +
            0xd20e, 0x392d, 0x8886, 0x63a5, 0x4ee1, 0xa5c2, 0x3d96, 0xd6b5, 0xfbf1, 0x10d2, 0xa179,
12816 +
            0x4a5a, 0x671e, 0x8c3d,
12817 +
        ],
12818 +
        [
12819 +
            0x0000, 0x6f45, 0xde8a, 0xb1cf, 0xad35, 0xc270, 0x73bf, 0x1cfa, 0x4a4b, 0x250e, 0x94c1,
12820 +
            0xfb84, 0xe77e, 0x883b, 0x39f4, 0x56b1, 0x9496, 0xfbd3, 0x4a1c, 0x2559, 0x39a3, 0x56e6,
12821 +
            0xe729, 0x886c, 0xdedd, 0xb198, 0x0057, 0x6f12, 0x73e8, 0x1cad, 0xad62, 0xc227, 0x390d,
12822 +
            0x5648, 0xe787, 0x88c2, 0x9438, 0xfb7d, 0x4ab2, 0x25f7, 0x7346, 0x1c03, 0xadcc, 0xc289,
12823 +
            0xde73, 0xb136, 0x00f9, 0x6fbc, 0xad9b, 0xc2de, 0x7311, 0x1c54, 0x00ae, 0x6feb, 0xde24,
12824 +
            0xb161, 0xe7d0, 0x8895, 0x395a, 0x561f, 0x4ae5, 0x25a0, 0x946f, 0xfb2a, 0x721a, 0x1d5f,
12825 +
            0xac90, 0xc3d5, 0xdf2f, 0xb06a, 0x01a5, 0x6ee0, 0x3851, 0x5714, 0xe6db, 0x899e, 0x9564,
12826 +
            0xfa21, 0x4bee, 0x24ab, 0xe68c, 0x89c9, 0x3806, 0x5743, 0x4bb9, 0x24fc, 0x9533, 0xfa76,
12827 +
            0xacc7, 0xc382, 0x724d, 0x1d08, 0x01f2, 0x6eb7, 0xdf78, 0xb03d, 0x4b17, 0x2452, 0x959d,
12828 +
            0xfad8, 0xe622, 0x8967, 0x38a8, 0x57ed, 0x015c, 0x6e19, 0xdfd6, 0xb093, 0xac69, 0xc32c,
12829 +
            0x72e3, 0x1da6, 0xdf81, 0xb0c4, 0x010b, 0x6e4e, 0x72b4, 0x1df1, 0xac3e, 0xc37b, 0x95ca,
12830 +
            0xfa8f, 0x4b40, 0x2405, 0x38ff, 0x57ba, 0xe675, 0x8930, 0xe434, 0x8b71, 0x3abe, 0x55fb,
12831 +
            0x4901, 0x2644, 0x978b, 0xf8ce, 0xae7f, 0xc13a, 0x70f5, 0x1fb0, 0x034a, 0x6c0f, 0xddc0,
12832 +
            0xb285, 0x70a2, 0x1fe7, 0xae28, 0xc16d, 0xdd97, 0xb2d2, 0x031d, 0x6c58, 0x3ae9, 0x55ac,
12833 +
            0xe463, 0x8b26, 0x97dc, 0xf899, 0x4956, 0x2613, 0xdd39, 0xb27c, 0x03b3, 0x6cf6, 0x700c,
12834 +
            0x1f49, 0xae86, 0xc1c3, 0x9772, 0xf837, 0x49f8, 0x26bd, 0x3a47, 0x5502, 0xe4cd, 0x8b88,
12835 +
            0x49af, 0x26ea, 0x9725, 0xf860, 0xe49a, 0x8bdf, 0x3a10, 0x5555, 0x03e4, 0x6ca1, 0xdd6e,
12836 +
            0xb22b, 0xaed1, 0xc194, 0x705b, 0x1f1e, 0x962e, 0xf96b, 0x48a4, 0x27e1, 0x3b1b, 0x545e,
12837 +
            0xe591, 0x8ad4, 0xdc65, 0xb320, 0x02ef, 0x6daa, 0x7150, 0x1e15, 0xafda, 0xc09f, 0x02b8,
12838 +
            0x6dfd, 0xdc32, 0xb377, 0xaf8d, 0xc0c8, 0x7107, 0x1e42, 0x48f3, 0x27b6, 0x9679, 0xf93c,
12839 +
            0xe5c6, 0x8a83, 0x3b4c, 0x5409, 0xaf23, 0xc066, 0x71a9, 0x1eec, 0x0216, 0x6d53, 0xdc9c,
12840 +
            0xb3d9, 0xe568, 0x8a2d, 0x3be2, 0x54a7, 0x485d, 0x2718, 0x96d7, 0xf992, 0x3bb5, 0x54f0,
12841 +
            0xe53f, 0x8a7a, 0x9680, 0xf9c5, 0x480a, 0x274f, 0x71fe, 0x1ebb, 0xaf74, 0xc031, 0xdccb,
12842 +
            0xb38e, 0x0241, 0x6d04,
12843 +
        ],
12844 +
        [
12845 +
            0x0000, 0xd849, 0xa0b3, 0x78fa, 0x5147, 0x890e, 0xf1f4, 0x29bd, 0xa28e, 0x7ac7, 0x023d,
12846 +
            0xda74, 0xf3c9, 0x2b80, 0x537a, 0x8b33, 0x553d, 0x8d74, 0xf58e, 0x2dc7, 0x047a, 0xdc33,
12847 +
            0xa4c9, 0x7c80, 0xf7b3, 0x2ffa, 0x5700, 0x8f49, 0xa6f4, 0x7ebd, 0x0647, 0xde0e, 0xaa7a,
12848 +
            0x7233, 0x0ac9, 0xd280, 0xfb3d, 0x2374, 0x5b8e, 0x83c7, 0x08f4, 0xd0bd, 0xa847, 0x700e,
12849 +
            0x59b3, 0x81fa, 0xf900, 0x2149, 0xff47, 0x270e, 0x5ff4, 0x87bd, 0xae00, 0x7649, 0x0eb3,
12850 +
            0xd6fa, 0x5dc9, 0x8580, 0xfd7a, 0x2533, 0x0c8e, 0xd4c7, 0xac3d, 0x7474, 0x44d5, 0x9c9c,
12851 +
            0xe466, 0x3c2f, 0x1592, 0xcddb, 0xb521, 0x6d68, 0xe65b, 0x3e12, 0x46e8, 0x9ea1, 0xb71c,
12852 +
            0x6f55, 0x17af, 0xcfe6, 0x11e8, 0xc9a1, 0xb15b, 0x6912, 0x40af, 0x98e6, 0xe01c, 0x3855,
12853 +
            0xb366, 0x6b2f, 0x13d5, 0xcb9c, 0xe221, 0x3a68, 0x4292, 0x9adb, 0xeeaf, 0x36e6, 0x4e1c,
12854 +
            0x9655, 0xbfe8, 0x67a1, 0x1f5b, 0xc712, 0x4c21, 0x9468, 0xec92, 0x34db, 0x1d66, 0xc52f,
12855 +
            0xbdd5, 0x659c, 0xbb92, 0x63db, 0x1b21, 0xc368, 0xead5, 0x329c, 0x4a66, 0x922f, 0x191c,
12856 +
            0xc155, 0xb9af, 0x61e6, 0x485b, 0x9012, 0xe8e8, 0x30a1, 0x89aa, 0x51e3, 0x2919, 0xf150,
12857 +
            0xd8ed, 0x00a4, 0x785e, 0xa017, 0x2b24, 0xf36d, 0x8b97, 0x53de, 0x7a63, 0xa22a, 0xdad0,
12858 +
            0x0299, 0xdc97, 0x04de, 0x7c24, 0xa46d, 0x8dd0, 0x5599, 0x2d63, 0xf52a, 0x7e19, 0xa650,
12859 +
            0xdeaa, 0x06e3, 0x2f5e, 0xf717, 0x8fed, 0x57a4, 0x23d0, 0xfb99, 0x8363, 0x5b2a, 0x7297,
12860 +
            0xaade, 0xd224, 0x0a6d, 0x815e, 0x5917, 0x21ed, 0xf9a4, 0xd019, 0x0850, 0x70aa, 0xa8e3,
12861 +
            0x76ed, 0xaea4, 0xd65e, 0x0e17, 0x27aa, 0xffe3, 0x8719, 0x5f50, 0xd463, 0x0c2a, 0x74d0,
12862 +
            0xac99, 0x8524, 0x5d6d, 0x2597, 0xfdde, 0xcd7f, 0x1536, 0x6dcc, 0xb585, 0x9c38, 0x4471,
12863 +
            0x3c8b, 0xe4c2, 0x6ff1, 0xb7b8, 0xcf42, 0x170b, 0x3eb6, 0xe6ff, 0x9e05, 0x464c, 0x9842,
12864 +
            0x400b, 0x38f1, 0xe0b8, 0xc905, 0x114c, 0x69b6, 0xb1ff, 0x3acc, 0xe285, 0x9a7f, 0x4236,
12865 +
            0x6b8b, 0xb3c2, 0xcb38, 0x1371, 0x6705, 0xbf4c, 0xc7b6, 0x1fff, 0x3642, 0xee0b, 0x96f1,
12866 +
            0x4eb8, 0xc58b, 0x1dc2, 0x6538, 0xbd71, 0x94cc, 0x4c85, 0x347f, 0xec36, 0x3238, 0xea71,
12867 +
            0x928b, 0x4ac2, 0x637f, 0xbb36, 0xc3cc, 0x1b85, 0x90b6, 0x48ff, 0x3005, 0xe84c, 0xc1f1,
12868 +
            0x19b8, 0x6142, 0xb90b,
12869 +
        ],
12870 +
        [
12871 +
            0x0000, 0x0375, 0x06ea, 0x059f, 0x0dd4, 0x0ea1, 0x0b3e, 0x084b, 0x1ba8, 0x18dd, 0x1d42,
12872 +
            0x1e37, 0x167c, 0x1509, 0x1096, 0x13e3, 0x3750, 0x3425, 0x31ba, 0x32cf, 0x3a84, 0x39f1,
12873 +
            0x3c6e, 0x3f1b, 0x2cf8, 0x2f8d, 0x2a12, 0x2967, 0x212c, 0x2259, 0x27c6, 0x24b3, 0x6ea0,
12874 +
            0x6dd5, 0x684a, 0x6b3f, 0x6374, 0x6001, 0x659e, 0x66eb, 0x7508, 0x767d, 0x73e2, 0x7097,
12875 +
            0x78dc, 0x7ba9, 0x7e36, 0x7d43, 0x59f0, 0x5a85, 0x5f1a, 0x5c6f, 0x5424, 0x5751, 0x52ce,
12876 +
            0x51bb, 0x4258, 0x412d, 0x44b2, 0x47c7, 0x4f8c, 0x4cf9, 0x4966, 0x4a13, 0xdd40, 0xde35,
12877 +
            0xdbaa, 0xd8df, 0xd094, 0xd3e1, 0xd67e, 0xd50b, 0xc6e8, 0xc59d, 0xc002, 0xc377, 0xcb3c,
12878 +
            0xc849, 0xcdd6, 0xcea3, 0xea10, 0xe965, 0xecfa, 0xef8f, 0xe7c4, 0xe4b1, 0xe12e, 0xe25b,
12879 +
            0xf1b8, 0xf2cd, 0xf752, 0xf427, 0xfc6c, 0xff19, 0xfa86, 0xf9f3, 0xb3e0, 0xb095, 0xb50a,
12880 +
            0xb67f, 0xbe34, 0xbd41, 0xb8de, 0xbbab, 0xa848, 0xab3d, 0xaea2, 0xadd7, 0xa59c, 0xa6e9,
12881 +
            0xa376, 0xa003, 0x84b0, 0x87c5, 0x825a, 0x812f, 0x8964, 0x8a11, 0x8f8e, 0x8cfb, 0x9f18,
12882 +
            0x9c6d, 0x99f2, 0x9a87, 0x92cc, 0x91b9, 0x9426, 0x9753, 0xaaa1, 0xa9d4, 0xac4b, 0xaf3e,
12883 +
            0xa775, 0xa400, 0xa19f, 0xa2ea, 0xb109, 0xb27c, 0xb7e3, 0xb496, 0xbcdd, 0xbfa8, 0xba37,
12884 +
            0xb942, 0x9df1, 0x9e84, 0x9b1b, 0x986e, 0x9025, 0x9350, 0x96cf, 0x95ba, 0x8659, 0x852c,
12885 +
            0x80b3, 0x83c6, 0x8b8d, 0x88f8, 0x8d67, 0x8e12, 0xc401, 0xc774, 0xc2eb, 0xc19e, 0xc9d5,
12886 +
            0xcaa0, 0xcf3f, 0xcc4a, 0xdfa9, 0xdcdc, 0xd943, 0xda36, 0xd27d, 0xd108, 0xd497, 0xd7e2,
12887 +
            0xf351, 0xf024, 0xf5bb, 0xf6ce, 0xfe85, 0xfdf0, 0xf86f, 0xfb1a, 0xe8f9, 0xeb8c, 0xee13,
12888 +
            0xed66, 0xe52d, 0xe658, 0xe3c7, 0xe0b2, 0x77e1, 0x7494, 0x710b, 0x727e, 0x7a35, 0x7940,
12889 +
            0x7cdf, 0x7faa, 0x6c49, 0x6f3c, 0x6aa3, 0x69d6, 0x619d, 0x62e8, 0x6777, 0x6402, 0x40b1,
12890 +
            0x43c4, 0x465b, 0x452e, 0x4d65, 0x4e10, 0x4b8f, 0x48fa, 0x5b19, 0x586c, 0x5df3, 0x5e86,
12891 +
            0x56cd, 0x55b8, 0x5027, 0x5352, 0x1941, 0x1a34, 0x1fab, 0x1cde, 0x1495, 0x17e0, 0x127f,
12892 +
            0x110a, 0x02e9, 0x019c, 0x0403, 0x0776, 0x0f3d, 0x0c48, 0x09d7, 0x0aa2, 0x2e11, 0x2d64,
12893 +
            0x28fb, 0x2b8e, 0x23c5, 0x20b0, 0x252f, 0x265a, 0x35b9, 0x36cc, 0x3353, 0x3026, 0x386d,
12894 +
            0x3b18, 0x3e87, 0x3df2,
12895 +
        ],
12896 +
        [
12897 +
            0x0000, 0x4563, 0x8ac6, 0xcfa5, 0x05ad, 0x40ce, 0x8f6b, 0xca08, 0x0b5a, 0x4e39, 0x819c,
12898 +
            0xc4ff, 0x0ef7, 0x4b94, 0x8431, 0xc152, 0x16b4, 0x53d7, 0x9c72, 0xd911, 0x1319, 0x567a,
12899 +
            0x99df, 0xdcbc, 0x1dee, 0x588d, 0x9728, 0xd24b, 0x1843, 0x5d20, 0x9285, 0xd7e6, 0x2d68,
12900 +
            0x680b, 0xa7ae, 0xe2cd, 0x28c5, 0x6da6, 0xa203, 0xe760, 0x2632, 0x6351, 0xacf4, 0xe997,
12901 +
            0x239f, 0x66fc, 0xa959, 0xec3a, 0x3bdc, 0x7ebf, 0xb11a, 0xf479, 0x3e71, 0x7b12, 0xb4b7,
12902 +
            0xf1d4, 0x3086, 0x75e5, 0xba40, 0xff23, 0x352b, 0x7048, 0xbfed, 0xfa8e, 0x5ad0, 0x1fb3,
12903 +
            0xd016, 0x9575, 0x5f7d, 0x1a1e, 0xd5bb, 0x90d8, 0x518a, 0x14e9, 0xdb4c, 0x9e2f, 0x5427,
12904 +
            0x1144, 0xdee1, 0x9b82, 0x4c64, 0x0907, 0xc6a2, 0x83c1, 0x49c9, 0x0caa, 0xc30f, 0x866c,
12905 +
            0x473e, 0x025d, 0xcdf8, 0x889b, 0x4293, 0x07f0, 0xc855, 0x8d36, 0x77b8, 0x32db, 0xfd7e,
12906 +
            0xb81d, 0x7215, 0x3776, 0xf8d3, 0xbdb0, 0x7ce2, 0x3981, 0xf624, 0xb347, 0x794f, 0x3c2c,
12907 +
            0xf389, 0xb6ea, 0x610c, 0x246f, 0xebca, 0xaea9, 0x64a1, 0x21c2, 0xee67, 0xab04, 0x6a56,
12908 +
            0x2f35, 0xe090, 0xa5f3, 0x6ffb, 0x2a98, 0xe53d, 0xa05e, 0xb5a0, 0xf0c3, 0x3f66, 0x7a05,
12909 +
            0xb00d, 0xf56e, 0x3acb, 0x7fa8, 0xbefa, 0xfb99, 0x343c, 0x715f, 0xbb57, 0xfe34, 0x3191,
12910 +
            0x74f2, 0xa314, 0xe677, 0x29d2, 0x6cb1, 0xa6b9, 0xe3da, 0x2c7f, 0x691c, 0xa84e, 0xed2d,
12911 +
            0x2288, 0x67eb, 0xade3, 0xe880, 0x2725, 0x6246, 0x98c8, 0xddab, 0x120e, 0x576d, 0x9d65,
12912 +
            0xd806, 0x17a3, 0x52c0, 0x9392, 0xd6f1, 0x1954, 0x5c37, 0x963f, 0xd35c, 0x1cf9, 0x599a,
12913 +
            0x8e7c, 0xcb1f, 0x04ba, 0x41d9, 0x8bd1, 0xceb2, 0x0117, 0x4474, 0x8526, 0xc045, 0x0fe0,
12914 +
            0x4a83, 0x808b, 0xc5e8, 0x0a4d, 0x4f2e, 0xef70, 0xaa13, 0x65b6, 0x20d5, 0xeadd, 0xafbe,
12915 +
            0x601b, 0x2578, 0xe42a, 0xa149, 0x6eec, 0x2b8f, 0xe187, 0xa4e4, 0x6b41, 0x2e22, 0xf9c4,
12916 +
            0xbca7, 0x7302, 0x3661, 0xfc69, 0xb90a, 0x76af, 0x33cc, 0xf29e, 0xb7fd, 0x7858, 0x3d3b,
12917 +
            0xf733, 0xb250, 0x7df5, 0x3896, 0xc218, 0x877b, 0x48de, 0x0dbd, 0xc7b5, 0x82d6, 0x4d73,
12918 +
            0x0810, 0xc942, 0x8c21, 0x4384, 0x06e7, 0xccef, 0x898c, 0x4629, 0x034a, 0xd4ac, 0x91cf,
12919 +
            0x5e6a, 0x1b09, 0xd101, 0x9462, 0x5bc7, 0x1ea4, 0xdff6, 0x9a95, 0x5530, 0x1053, 0xda5b,
12920 +
            0x9f38, 0x509d, 0x15fe,
12921 +
        ],
12922 +
        [
12923 +
            0x0000, 0x7b61, 0xf6c2, 0x8da3, 0xfda5, 0x86c4, 0x0b67, 0x7006, 0xeb6b, 0x900a, 0x1da9,
12924 +
            0x66c8, 0x16ce, 0x6daf, 0xe00c, 0x9b6d, 0xc6f7, 0xbd96, 0x3035, 0x4b54, 0x3b52, 0x4033,
12925 +
            0xcd90, 0xb6f1, 0x2d9c, 0x56fd, 0xdb5e, 0xa03f, 0xd039, 0xab58, 0x26fb, 0x5d9a, 0x9dcf,
12926 +
            0xe6ae, 0x6b0d, 0x106c, 0x606a, 0x1b0b, 0x96a8, 0xedc9, 0x76a4, 0x0dc5, 0x8066, 0xfb07,
12927 +
            0x8b01, 0xf060, 0x7dc3, 0x06a2, 0x5b38, 0x2059, 0xadfa, 0xd69b, 0xa69d, 0xddfc, 0x505f,
12928 +
            0x2b3e, 0xb053, 0xcb32, 0x4691, 0x3df0, 0x4df6, 0x3697, 0xbb34, 0xc055, 0x2bbf, 0x50de,
12929 +
            0xdd7d, 0xa61c, 0xd61a, 0xad7b, 0x20d8, 0x5bb9, 0xc0d4, 0xbbb5, 0x3616, 0x4d77, 0x3d71,
12930 +
            0x4610, 0xcbb3, 0xb0d2, 0xed48, 0x9629, 0x1b8a, 0x60eb, 0x10ed, 0x6b8c, 0xe62f, 0x9d4e,
12931 +
            0x0623, 0x7d42, 0xf0e1, 0x8b80, 0xfb86, 0x80e7, 0x0d44, 0x7625, 0xb670, 0xcd11, 0x40b2,
12932 +
            0x3bd3, 0x4bd5, 0x30b4, 0xbd17, 0xc676, 0x5d1b, 0x267a, 0xabd9, 0xd0b8, 0xa0be, 0xdbdf,
12933 +
            0x567c, 0x2d1d, 0x7087, 0x0be6, 0x8645, 0xfd24, 0x8d22, 0xf643, 0x7be0, 0x0081, 0x9bec,
12934 +
            0xe08d, 0x6d2e, 0x164f, 0x6649, 0x1d28, 0x908b, 0xebea, 0x577e, 0x2c1f, 0xa1bc, 0xdadd,
12935 +
            0xaadb, 0xd1ba, 0x5c19, 0x2778, 0xbc15, 0xc774, 0x4ad7, 0x31b6, 0x41b0, 0x3ad1, 0xb772,
12936 +
            0xcc13, 0x9189, 0xeae8, 0x674b, 0x1c2a, 0x6c2c, 0x174d, 0x9aee, 0xe18f, 0x7ae2, 0x0183,
12937 +
            0x8c20, 0xf741, 0x8747, 0xfc26, 0x7185, 0x0ae4, 0xcab1, 0xb1d0, 0x3c73, 0x4712, 0x3714,
12938 +
            0x4c75, 0xc1d6, 0xbab7, 0x21da, 0x5abb, 0xd718, 0xac79, 0xdc7f, 0xa71e, 0x2abd, 0x51dc,
12939 +
            0x0c46, 0x7727, 0xfa84, 0x81e5, 0xf1e3, 0x8a82, 0x0721, 0x7c40, 0xe72d, 0x9c4c, 0x11ef,
12940 +
            0x6a8e, 0x1a88, 0x61e9, 0xec4a, 0x972b, 0x7cc1, 0x07a0, 0x8a03, 0xf162, 0x8164, 0xfa05,
12941 +
            0x77a6, 0x0cc7, 0x97aa, 0xeccb, 0x6168, 0x1a09, 0x6a0f, 0x116e, 0x9ccd, 0xe7ac, 0xba36,
12942 +
            0xc157, 0x4cf4, 0x3795, 0x4793, 0x3cf2, 0xb151, 0xca30, 0x515d, 0x2a3c, 0xa79f, 0xdcfe,
12943 +
            0xacf8, 0xd799, 0x5a3a, 0x215b, 0xe10e, 0x9a6f, 0x17cc, 0x6cad, 0x1cab, 0x67ca, 0xea69,
12944 +
            0x9108, 0x0a65, 0x7104, 0xfca7, 0x87c6, 0xf7c0, 0x8ca1, 0x0102, 0x7a63, 0x27f9, 0x5c98,
12945 +
            0xd13b, 0xaa5a, 0xda5c, 0xa13d, 0x2c9e, 0x57ff, 0xcc92, 0xb7f3, 0x3a50, 0x4131, 0x3137,
12946 +
            0x4a56, 0xc7f5, 0xbc94,
12947 +
        ],
12948 +
        [
12949 +
            0x0000, 0xaefc, 0x4dd9, 0xe325, 0x9bb2, 0x354e, 0xd66b, 0x7897, 0x2745, 0x89b9, 0x6a9c,
12950 +
            0xc460, 0xbcf7, 0x120b, 0xf12e, 0x5fd2, 0x4e8a, 0xe076, 0x0353, 0xadaf, 0xd538, 0x7bc4,
12951 +
            0x98e1, 0x361d, 0x69cf, 0xc733, 0x2416, 0x8aea, 0xf27d, 0x5c81, 0xbfa4, 0x1158, 0x9d14,
12952 +
            0x33e8, 0xd0cd, 0x7e31, 0x06a6, 0xa85a, 0x4b7f, 0xe583, 0xba51, 0x14ad, 0xf788, 0x5974,
12953 +
            0x21e3, 0x8f1f, 0x6c3a, 0xc2c6, 0xd39e, 0x7d62, 0x9e47, 0x30bb, 0x482c, 0xe6d0, 0x05f5,
12954 +
            0xab09, 0xf4db, 0x5a27, 0xb902, 0x17fe, 0x6f69, 0xc195, 0x22b0, 0x8c4c, 0x2a09, 0x84f5,
12955 +
            0x67d0, 0xc92c, 0xb1bb, 0x1f47, 0xfc62, 0x529e, 0x0d4c, 0xa3b0, 0x4095, 0xee69, 0x96fe,
12956 +
            0x3802, 0xdb27, 0x75db, 0x6483, 0xca7f, 0x295a, 0x87a6, 0xff31, 0x51cd, 0xb2e8, 0x1c14,
12957 +
            0x43c6, 0xed3a, 0x0e1f, 0xa0e3, 0xd874, 0x7688, 0x95ad, 0x3b51, 0xb71d, 0x19e1, 0xfac4,
12958 +
            0x5438, 0x2caf, 0x8253, 0x6176, 0xcf8a, 0x9058, 0x3ea4, 0xdd81, 0x737d, 0x0bea, 0xa516,
12959 +
            0x4633, 0xe8cf, 0xf997, 0x576b, 0xb44e, 0x1ab2, 0x6225, 0xccd9, 0x2ffc, 0x8100, 0xded2,
12960 +
            0x702e, 0x930b, 0x3df7, 0x4560, 0xeb9c, 0x08b9, 0xa645, 0x5412, 0xfaee, 0x19cb, 0xb737,
12961 +
            0xcfa0, 0x615c, 0x8279, 0x2c85, 0x7357, 0xddab, 0x3e8e, 0x9072, 0xe8e5, 0x4619, 0xa53c,
12962 +
            0x0bc0, 0x1a98, 0xb464, 0x5741, 0xf9bd, 0x812a, 0x2fd6, 0xccf3, 0x620f, 0x3ddd, 0x9321,
12963 +
            0x7004, 0xdef8, 0xa66f, 0x0893, 0xebb6, 0x454a, 0xc906, 0x67fa, 0x84df, 0x2a23, 0x52b4,
12964 +
            0xfc48, 0x1f6d, 0xb191, 0xee43, 0x40bf, 0xa39a, 0x0d66, 0x75f1, 0xdb0d, 0x3828, 0x96d4,
12965 +
            0x878c, 0x2970, 0xca55, 0x64a9, 0x1c3e, 0xb2c2, 0x51e7, 0xff1b, 0xa0c9, 0x0e35, 0xed10,
12966 +
            0x43ec, 0x3b7b, 0x9587, 0x76a2, 0xd85e, 0x7e1b, 0xd0e7, 0x33c2, 0x9d3e, 0xe5a9, 0x4b55,
12967 +
            0xa870, 0x068c, 0x595e, 0xf7a2, 0x1487, 0xba7b, 0xc2ec, 0x6c10, 0x8f35, 0x21c9, 0x3091,
12968 +
            0x9e6d, 0x7d48, 0xd3b4, 0xab23, 0x05df, 0xe6fa, 0x4806, 0x17d4, 0xb928, 0x5a0d, 0xf4f1,
12969 +
            0x8c66, 0x229a, 0xc1bf, 0x6f43, 0xe30f, 0x4df3, 0xaed6, 0x002a, 0x78bd, 0xd641, 0x3564,
12970 +
            0x9b98, 0xc44a, 0x6ab6, 0x8993, 0x276f, 0x5ff8, 0xf104, 0x1221, 0xbcdd, 0xad85, 0x0379,
12971 +
            0xe05c, 0x4ea0, 0x3637, 0x98cb, 0x7bee, 0xd512, 0x8ac0, 0x243c, 0xc719, 0x69e5, 0x1172,
12972 +
            0xbf8e, 0x5cab, 0xf257,
12973 +
        ],
12974 +
        [
12975 +
            0x0000, 0xa824, 0x4069, 0xe84d, 0x80d2, 0x28f6, 0xc0bb, 0x689f, 0x1185, 0xb9a1, 0x51ec,
12976 +
            0xf9c8, 0x9157, 0x3973, 0xd13e, 0x791a, 0x230a, 0x8b2e, 0x6363, 0xcb47, 0xa3d8, 0x0bfc,
12977 +
            0xe3b1, 0x4b95, 0x328f, 0x9aab, 0x72e6, 0xdac2, 0xb25d, 0x1a79, 0xf234, 0x5a10, 0x4614,
12978 +
            0xee30, 0x067d, 0xae59, 0xc6c6, 0x6ee2, 0x86af, 0x2e8b, 0x5791, 0xffb5, 0x17f8, 0xbfdc,
12979 +
            0xd743, 0x7f67, 0x972a, 0x3f0e, 0x651e, 0xcd3a, 0x2577, 0x8d53, 0xe5cc, 0x4de8, 0xa5a5,
12980 +
            0x0d81, 0x749b, 0xdcbf, 0x34f2, 0x9cd6, 0xf449, 0x5c6d, 0xb420, 0x1c04, 0x8c28, 0x240c,
12981 +
            0xcc41, 0x6465, 0x0cfa, 0xa4de, 0x4c93, 0xe4b7, 0x9dad, 0x3589, 0xddc4, 0x75e0, 0x1d7f,
12982 +
            0xb55b, 0x5d16, 0xf532, 0xaf22, 0x0706, 0xef4b, 0x476f, 0x2ff0, 0x87d4, 0x6f99, 0xc7bd,
12983 +
            0xbea7, 0x1683, 0xfece, 0x56ea, 0x3e75, 0x9651, 0x7e1c, 0xd638, 0xca3c, 0x6218, 0x8a55,
12984 +
            0x2271, 0x4aee, 0xe2ca, 0x0a87, 0xa2a3, 0xdbb9, 0x739d, 0x9bd0, 0x33f4, 0x5b6b, 0xf34f,
12985 +
            0x1b02, 0xb326, 0xe936, 0x4112, 0xa95f, 0x017b, 0x69e4, 0xc1c0, 0x298d, 0x81a9, 0xf8b3,
12986 +
            0x5097, 0xb8da, 0x10fe, 0x7861, 0xd045, 0x3808, 0x902c, 0x0871, 0xa055, 0x4818, 0xe03c,
12987 +
            0x88a3, 0x2087, 0xc8ca, 0x60ee, 0x19f4, 0xb1d0, 0x599d, 0xf1b9, 0x9926, 0x3102, 0xd94f,
12988 +
            0x716b, 0x2b7b, 0x835f, 0x6b12, 0xc336, 0xaba9, 0x038d, 0xebc0, 0x43e4, 0x3afe, 0x92da,
12989 +
            0x7a97, 0xd2b3, 0xba2c, 0x1208, 0xfa45, 0x5261, 0x4e65, 0xe641, 0x0e0c, 0xa628, 0xceb7,
12990 +
            0x6693, 0x8ede, 0x26fa, 0x5fe0, 0xf7c4, 0x1f89, 0xb7ad, 0xdf32, 0x7716, 0x9f5b, 0x377f,
12991 +
            0x6d6f, 0xc54b, 0x2d06, 0x8522, 0xedbd, 0x4599, 0xadd4, 0x05f0, 0x7cea, 0xd4ce, 0x3c83,
12992 +
            0x94a7, 0xfc38, 0x541c, 0xbc51, 0x1475, 0x8459, 0x2c7d, 0xc430, 0x6c14, 0x048b, 0xacaf,
12993 +
            0x44e2, 0xecc6, 0x95dc, 0x3df8, 0xd5b5, 0x7d91, 0x150e, 0xbd2a, 0x5567, 0xfd43, 0xa753,
12994 +
            0x0f77, 0xe73a, 0x4f1e, 0x2781, 0x8fa5, 0x67e8, 0xcfcc, 0xb6d6, 0x1ef2, 0xf6bf, 0x5e9b,
12995 +
            0x3604, 0x9e20, 0x766d, 0xde49, 0xc24d, 0x6a69, 0x8224, 0x2a00, 0x429f, 0xeabb, 0x02f6,
12996 +
            0xaad2, 0xd3c8, 0x7bec, 0x93a1, 0x3b85, 0x531a, 0xfb3e, 0x1373, 0xbb57, 0xe147, 0x4963,
12997 +
            0xa12e, 0x090a, 0x6195, 0xc9b1, 0x21fc, 0x89d8, 0xf0c2, 0x58e6, 0xb0ab, 0x188f, 0x7010,
12998 +
            0xd834, 0x3079, 0x985d,
12999 +
        ],
13000 +
    ];
13001 +
}
13002 +
13003 +
pub mod crc32 {
13004 +
    //! CRC-32 lookup tables
13005 +
13006 +
    pub static CRC32_AIXM_TABLE: [[u32; 256]; 16] = [
13007 +
        [
13008 +
            0x00000000, 0x814141ab, 0x83c3c2fd, 0x02828356, 0x86c6c451, 0x078785fa, 0x050506ac,
13009 +
            0x84444707, 0x8cccc909, 0x0d8d88a2, 0x0f0f0bf4, 0x8e4e4a5f, 0x0a0a0d58, 0x8b4b4cf3,
13010 +
            0x89c9cfa5, 0x08888e0e, 0x98d8d3b9, 0x19999212, 0x1b1b1144, 0x9a5a50ef, 0x1e1e17e8,
13011 +
            0x9f5f5643, 0x9dddd515, 0x1c9c94be, 0x14141ab0, 0x95555b1b, 0x97d7d84d, 0x169699e6,
13012 +
            0x92d2dee1, 0x13939f4a, 0x11111c1c, 0x90505db7, 0xb0f0e6d9, 0x31b1a772, 0x33332424,
13013 +
            0xb272658f, 0x36362288, 0xb7776323, 0xb5f5e075, 0x34b4a1de, 0x3c3c2fd0, 0xbd7d6e7b,
13014 +
            0xbfffed2d, 0x3ebeac86, 0xbafaeb81, 0x3bbbaa2a, 0x3939297c, 0xb87868d7, 0x28283560,
13015 +
            0xa96974cb, 0xabebf79d, 0x2aaab636, 0xaeeef131, 0x2fafb09a, 0x2d2d33cc, 0xac6c7267,
13016 +
            0xa4e4fc69, 0x25a5bdc2, 0x27273e94, 0xa6667f3f, 0x22223838, 0xa3637993, 0xa1e1fac5,
13017 +
            0x20a0bb6e, 0xe0a08c19, 0x61e1cdb2, 0x63634ee4, 0xe2220f4f, 0x66664848, 0xe72709e3,
13018 +
            0xe5a58ab5, 0x64e4cb1e, 0x6c6c4510, 0xed2d04bb, 0xefaf87ed, 0x6eeec646, 0xeaaa8141,
13019 +
            0x6bebc0ea, 0x696943bc, 0xe8280217, 0x78785fa0, 0xf9391e0b, 0xfbbb9d5d, 0x7afadcf6,
13020 +
            0xfebe9bf1, 0x7fffda5a, 0x7d7d590c, 0xfc3c18a7, 0xf4b496a9, 0x75f5d702, 0x77775454,
13021 +
            0xf63615ff, 0x727252f8, 0xf3331353, 0xf1b19005, 0x70f0d1ae, 0x50506ac0, 0xd1112b6b,
13022 +
            0xd393a83d, 0x52d2e996, 0xd696ae91, 0x57d7ef3a, 0x55556c6c, 0xd4142dc7, 0xdc9ca3c9,
13023 +
            0x5ddde262, 0x5f5f6134, 0xde1e209f, 0x5a5a6798, 0xdb1b2633, 0xd999a565, 0x58d8e4ce,
13024 +
            0xc888b979, 0x49c9f8d2, 0x4b4b7b84, 0xca0a3a2f, 0x4e4e7d28, 0xcf0f3c83, 0xcd8dbfd5,
13025 +
            0x4cccfe7e, 0x44447070, 0xc50531db, 0xc787b28d, 0x46c6f326, 0xc282b421, 0x43c3f58a,
13026 +
            0x414176dc, 0xc0003777, 0x40005999, 0xc1411832, 0xc3c39b64, 0x4282dacf, 0xc6c69dc8,
13027 +
            0x4787dc63, 0x45055f35, 0xc4441e9e, 0xcccc9090, 0x4d8dd13b, 0x4f0f526d, 0xce4e13c6,
13028 +
            0x4a0a54c1, 0xcb4b156a, 0xc9c9963c, 0x4888d797, 0xd8d88a20, 0x5999cb8b, 0x5b1b48dd,
13029 +
            0xda5a0976, 0x5e1e4e71, 0xdf5f0fda, 0xdddd8c8c, 0x5c9ccd27, 0x54144329, 0xd5550282,
13030 +
            0xd7d781d4, 0x5696c07f, 0xd2d28778, 0x5393c6d3, 0x51114585, 0xd050042e, 0xf0f0bf40,
13031 +
            0x71b1feeb, 0x73337dbd, 0xf2723c16, 0x76367b11, 0xf7773aba, 0xf5f5b9ec, 0x74b4f847,
13032 +
            0x7c3c7649, 0xfd7d37e2, 0xffffb4b4, 0x7ebef51f, 0xfafab218, 0x7bbbf3b3, 0x793970e5,
13033 +
            0xf878314e, 0x68286cf9, 0xe9692d52, 0xebebae04, 0x6aaaefaf, 0xeeeea8a8, 0x6fafe903,
13034 +
            0x6d2d6a55, 0xec6c2bfe, 0xe4e4a5f0, 0x65a5e45b, 0x6727670d, 0xe66626a6, 0x622261a1,
13035 +
            0xe363200a, 0xe1e1a35c, 0x60a0e2f7, 0xa0a0d580, 0x21e1942b, 0x2363177d, 0xa22256d6,
13036 +
            0x266611d1, 0xa727507a, 0xa5a5d32c, 0x24e49287, 0x2c6c1c89, 0xad2d5d22, 0xafafde74,
13037 +
            0x2eee9fdf, 0xaaaad8d8, 0x2beb9973, 0x29691a25, 0xa8285b8e, 0x38780639, 0xb9394792,
13038 +
            0xbbbbc4c4, 0x3afa856f, 0xbebec268, 0x3fff83c3, 0x3d7d0095, 0xbc3c413e, 0xb4b4cf30,
13039 +
            0x35f58e9b, 0x37770dcd, 0xb6364c66, 0x32720b61, 0xb3334aca, 0xb1b1c99c, 0x30f08837,
13040 +
            0x10503359, 0x911172f2, 0x9393f1a4, 0x12d2b00f, 0x9696f708, 0x17d7b6a3, 0x155535f5,
13041 +
            0x9414745e, 0x9c9cfa50, 0x1dddbbfb, 0x1f5f38ad, 0x9e1e7906, 0x1a5a3e01, 0x9b1b7faa,
13042 +
            0x9999fcfc, 0x18d8bd57, 0x8888e0e0, 0x09c9a14b, 0x0b4b221d, 0x8a0a63b6, 0x0e4e24b1,
13043 +
            0x8f0f651a, 0x8d8de64c, 0x0ccca7e7, 0x044429e9, 0x85056842, 0x8787eb14, 0x06c6aabf,
13044 +
            0x8282edb8, 0x03c3ac13, 0x01412f45, 0x80006eee,
13045 +
        ],
13046 +
        [
13047 +
            0x00000000, 0x8000b332, 0x814027cf, 0x014094fd, 0x83c10e35, 0x03c1bd07, 0x028129fa,
13048 +
            0x82819ac8, 0x86c35dc1, 0x06c3eef3, 0x07837a0e, 0x8783c93c, 0x050253f4, 0x8502e0c6,
13049 +
            0x8442743b, 0x0442c709, 0x8cc7fa29, 0x0cc7491b, 0x0d87dde6, 0x8d876ed4, 0x0f06f41c,
13050 +
            0x8f06472e, 0x8e46d3d3, 0x0e4660e1, 0x0a04a7e8, 0x8a0414da, 0x8b448027, 0x0b443315,
13051 +
            0x89c5a9dd, 0x09c51aef, 0x08858e12, 0x88853d20, 0x98ceb5f9, 0x18ce06cb, 0x198e9236,
13052 +
            0x998e2104, 0x1b0fbbcc, 0x9b0f08fe, 0x9a4f9c03, 0x1a4f2f31, 0x1e0de838, 0x9e0d5b0a,
13053 +
            0x9f4dcff7, 0x1f4d7cc5, 0x9dcce60d, 0x1dcc553f, 0x1c8cc1c2, 0x9c8c72f0, 0x14094fd0,
13054 +
            0x9409fce2, 0x9549681f, 0x1549db2d, 0x97c841e5, 0x17c8f2d7, 0x1688662a, 0x9688d518,
13055 +
            0x92ca1211, 0x12caa123, 0x138a35de, 0x938a86ec, 0x110b1c24, 0x910baf16, 0x904b3beb,
13056 +
            0x104b88d9, 0xb0dc2a59, 0x30dc996b, 0x319c0d96, 0xb19cbea4, 0x331d246c, 0xb31d975e,
13057 +
            0xb25d03a3, 0x325db091, 0x361f7798, 0xb61fc4aa, 0xb75f5057, 0x375fe365, 0xb5de79ad,
13058 +
            0x35deca9f, 0x349e5e62, 0xb49eed50, 0x3c1bd070, 0xbc1b6342, 0xbd5bf7bf, 0x3d5b448d,
13059 +
            0xbfdade45, 0x3fda6d77, 0x3e9af98a, 0xbe9a4ab8, 0xbad88db1, 0x3ad83e83, 0x3b98aa7e,
13060 +
            0xbb98194c, 0x39198384, 0xb91930b6, 0xb859a44b, 0x38591779, 0x28129fa0, 0xa8122c92,
13061 +
            0xa952b86f, 0x29520b5d, 0xabd39195, 0x2bd322a7, 0x2a93b65a, 0xaa930568, 0xaed1c261,
13062 +
            0x2ed17153, 0x2f91e5ae, 0xaf91569c, 0x2d10cc54, 0xad107f66, 0xac50eb9b, 0x2c5058a9,
13063 +
            0xa4d56589, 0x24d5d6bb, 0x25954246, 0xa595f174, 0x27146bbc, 0xa714d88e, 0xa6544c73,
13064 +
            0x2654ff41, 0x22163848, 0xa2168b7a, 0xa3561f87, 0x2356acb5, 0xa1d7367d, 0x21d7854f,
13065 +
            0x209711b2, 0xa097a280, 0xe0f91519, 0x60f9a62b, 0x61b932d6, 0xe1b981e4, 0x63381b2c,
13066 +
            0xe338a81e, 0xe2783ce3, 0x62788fd1, 0x663a48d8, 0xe63afbea, 0xe77a6f17, 0x677adc25,
13067 +
            0xe5fb46ed, 0x65fbf5df, 0x64bb6122, 0xe4bbd210, 0x6c3eef30, 0xec3e5c02, 0xed7ec8ff,
13068 +
            0x6d7e7bcd, 0xefffe105, 0x6fff5237, 0x6ebfc6ca, 0xeebf75f8, 0xeafdb2f1, 0x6afd01c3,
13069 +
            0x6bbd953e, 0xebbd260c, 0x693cbcc4, 0xe93c0ff6, 0xe87c9b0b, 0x687c2839, 0x7837a0e0,
13070 +
            0xf83713d2, 0xf977872f, 0x7977341d, 0xfbf6aed5, 0x7bf61de7, 0x7ab6891a, 0xfab63a28,
13071 +
            0xfef4fd21, 0x7ef44e13, 0x7fb4daee, 0xffb469dc, 0x7d35f314, 0xfd354026, 0xfc75d4db,
13072 +
            0x7c7567e9, 0xf4f05ac9, 0x74f0e9fb, 0x75b07d06, 0xf5b0ce34, 0x773154fc, 0xf731e7ce,
13073 +
            0xf6717333, 0x7671c001, 0x72330708, 0xf233b43a, 0xf37320c7, 0x737393f5, 0xf1f2093d,
13074 +
            0x71f2ba0f, 0x70b22ef2, 0xf0b29dc0, 0x50253f40, 0xd0258c72, 0xd165188f, 0x5165abbd,
13075 +
            0xd3e43175, 0x53e48247, 0x52a416ba, 0xd2a4a588, 0xd6e66281, 0x56e6d1b3, 0x57a6454e,
13076 +
            0xd7a6f67c, 0x55276cb4, 0xd527df86, 0xd4674b7b, 0x5467f849, 0xdce2c569, 0x5ce2765b,
13077 +
            0x5da2e2a6, 0xdda25194, 0x5f23cb5c, 0xdf23786e, 0xde63ec93, 0x5e635fa1, 0x5a2198a8,
13078 +
            0xda212b9a, 0xdb61bf67, 0x5b610c55, 0xd9e0969d, 0x59e025af, 0x58a0b152, 0xd8a00260,
13079 +
            0xc8eb8ab9, 0x48eb398b, 0x49abad76, 0xc9ab1e44, 0x4b2a848c, 0xcb2a37be, 0xca6aa343,
13080 +
            0x4a6a1071, 0x4e28d778, 0xce28644a, 0xcf68f0b7, 0x4f684385, 0xcde9d94d, 0x4de96a7f,
13081 +
            0x4ca9fe82, 0xcca94db0, 0x442c7090, 0xc42cc3a2, 0xc56c575f, 0x456ce46d, 0xc7ed7ea5,
13082 +
            0x47edcd97, 0x46ad596a, 0xc6adea58, 0xc2ef2d51, 0x42ef9e63, 0x43af0a9e, 0xc3afb9ac,
13083 +
            0x412e2364, 0xc12e9056, 0xc06e04ab, 0x406eb799,
13084 +
        ],
13085 +
        [
13086 +
            0x00000000, 0x40b36b99, 0x8166d732, 0xc1d5bcab, 0x838cefcf, 0xc33f8456, 0x02ea38fd,
13087 +
            0x42595364, 0x86589e35, 0xc6ebf5ac, 0x073e4907, 0x478d229e, 0x05d471fa, 0x45671a63,
13088 +
            0x84b2a6c8, 0xc401cd51, 0x8df07dc1, 0xcd431658, 0x0c96aaf3, 0x4c25c16a, 0x0e7c920e,
13089 +
            0x4ecff997, 0x8f1a453c, 0xcfa92ea5, 0x0ba8e3f4, 0x4b1b886d, 0x8ace34c6, 0xca7d5f5f,
13090 +
            0x88240c3b, 0xc89767a2, 0x0942db09, 0x49f1b090, 0x9aa1ba29, 0xda12d1b0, 0x1bc76d1b,
13091 +
            0x5b740682, 0x192d55e6, 0x599e3e7f, 0x984b82d4, 0xd8f8e94d, 0x1cf9241c, 0x5c4a4f85,
13092 +
            0x9d9ff32e, 0xdd2c98b7, 0x9f75cbd3, 0xdfc6a04a, 0x1e131ce1, 0x5ea07778, 0x1751c7e8,
13093 +
            0x57e2ac71, 0x963710da, 0xd6847b43, 0x94dd2827, 0xd46e43be, 0x15bbff15, 0x5508948c,
13094 +
            0x910959dd, 0xd1ba3244, 0x106f8eef, 0x50dce576, 0x1285b612, 0x5236dd8b, 0x93e36120,
13095 +
            0xd3500ab9, 0xb40235f9, 0xf4b15e60, 0x3564e2cb, 0x75d78952, 0x378eda36, 0x773db1af,
13096 +
            0xb6e80d04, 0xf65b669d, 0x325aabcc, 0x72e9c055, 0xb33c7cfe, 0xf38f1767, 0xb1d64403,
13097 +
            0xf1652f9a, 0x30b09331, 0x7003f8a8, 0x39f24838, 0x794123a1, 0xb8949f0a, 0xf827f493,
13098 +
            0xba7ea7f7, 0xfacdcc6e, 0x3b1870c5, 0x7bab1b5c, 0xbfaad60d, 0xff19bd94, 0x3ecc013f,
13099 +
            0x7e7f6aa6, 0x3c2639c2, 0x7c95525b, 0xbd40eef0, 0xfdf38569, 0x2ea38fd0, 0x6e10e449,
13100 +
            0xafc558e2, 0xef76337b, 0xad2f601f, 0xed9c0b86, 0x2c49b72d, 0x6cfadcb4, 0xa8fb11e5,
13101 +
            0xe8487a7c, 0x299dc6d7, 0x692ead4e, 0x2b77fe2a, 0x6bc495b3, 0xaa112918, 0xeaa24281,
13102 +
            0xa353f211, 0xe3e09988, 0x22352523, 0x62864eba, 0x20df1dde, 0x606c7647, 0xa1b9caec,
13103 +
            0xe10aa175, 0x250b6c24, 0x65b807bd, 0xa46dbb16, 0xe4ded08f, 0xa68783eb, 0xe634e872,
13104 +
            0x27e154d9, 0x67523f40, 0xe9452a59, 0xa9f641c0, 0x6823fd6b, 0x289096f2, 0x6ac9c596,
13105 +
            0x2a7aae0f, 0xebaf12a4, 0xab1c793d, 0x6f1db46c, 0x2faedff5, 0xee7b635e, 0xaec808c7,
13106 +
            0xec915ba3, 0xac22303a, 0x6df78c91, 0x2d44e708, 0x64b55798, 0x24063c01, 0xe5d380aa,
13107 +
            0xa560eb33, 0xe739b857, 0xa78ad3ce, 0x665f6f65, 0x26ec04fc, 0xe2edc9ad, 0xa25ea234,
13108 +
            0x638b1e9f, 0x23387506, 0x61612662, 0x21d24dfb, 0xe007f150, 0xa0b49ac9, 0x73e49070,
13109 +
            0x3357fbe9, 0xf2824742, 0xb2312cdb, 0xf0687fbf, 0xb0db1426, 0x710ea88d, 0x31bdc314,
13110 +
            0xf5bc0e45, 0xb50f65dc, 0x74dad977, 0x3469b2ee, 0x7630e18a, 0x36838a13, 0xf75636b8,
13111 +
            0xb7e55d21, 0xfe14edb1, 0xbea78628, 0x7f723a83, 0x3fc1511a, 0x7d98027e, 0x3d2b69e7,
13112 +
            0xfcfed54c, 0xbc4dbed5, 0x784c7384, 0x38ff181d, 0xf92aa4b6, 0xb999cf2f, 0xfbc09c4b,
13113 +
            0xbb73f7d2, 0x7aa64b79, 0x3a1520e0, 0x5d471fa0, 0x1df47439, 0xdc21c892, 0x9c92a30b,
13114 +
            0xdecbf06f, 0x9e789bf6, 0x5fad275d, 0x1f1e4cc4, 0xdb1f8195, 0x9bacea0c, 0x5a7956a7,
13115 +
            0x1aca3d3e, 0x58936e5a, 0x182005c3, 0xd9f5b968, 0x9946d2f1, 0xd0b76261, 0x900409f8,
13116 +
            0x51d1b553, 0x1162deca, 0x533b8dae, 0x1388e637, 0xd25d5a9c, 0x92ee3105, 0x56effc54,
13117 +
            0x165c97cd, 0xd7892b66, 0x973a40ff, 0xd563139b, 0x95d07802, 0x5405c4a9, 0x14b6af30,
13118 +
            0xc7e6a589, 0x8755ce10, 0x468072bb, 0x06331922, 0x446a4a46, 0x04d921df, 0xc50c9d74,
13119 +
            0x85bff6ed, 0x41be3bbc, 0x010d5025, 0xc0d8ec8e, 0x806b8717, 0xc232d473, 0x8281bfea,
13120 +
            0x43540341, 0x03e768d8, 0x4a16d848, 0x0aa5b3d1, 0xcb700f7a, 0x8bc364e3, 0xc99a3787,
13121 +
            0x89295c1e, 0x48fce0b5, 0x084f8b2c, 0xcc4e467d, 0x8cfd2de4, 0x4d28914f, 0x0d9bfad6,
13122 +
            0x4fc2a9b2, 0x0f71c22b, 0xcea47e80, 0x8e171519,
13123 +
        ],
13124 +
        [
13125 +
            0x00000000, 0x53cb1519, 0xa7962a32, 0xf45d3f2b, 0xce6d15cf, 0x9da600d6, 0x69fb3ffd,
13126 +
            0x3a302ae4, 0x1d9b6a35, 0x4e507f2c, 0xba0d4007, 0xe9c6551e, 0xd3f67ffa, 0x803d6ae3,
13127 +
            0x746055c8, 0x27ab40d1, 0x3b36d46a, 0x68fdc173, 0x9ca0fe58, 0xcf6beb41, 0xf55bc1a5,
13128 +
            0xa690d4bc, 0x52cdeb97, 0x0106fe8e, 0x26adbe5f, 0x7566ab46, 0x813b946d, 0xd2f08174,
13129 +
            0xe8c0ab90, 0xbb0bbe89, 0x4f5681a2, 0x1c9d94bb, 0x766da8d4, 0x25a6bdcd, 0xd1fb82e6,
13130 +
            0x823097ff, 0xb800bd1b, 0xebcba802, 0x1f969729, 0x4c5d8230, 0x6bf6c2e1, 0x383dd7f8,
13131 +
            0xcc60e8d3, 0x9fabfdca, 0xa59bd72e, 0xf650c237, 0x020dfd1c, 0x51c6e805, 0x4d5b7cbe,
13132 +
            0x1e9069a7, 0xeacd568c, 0xb9064395, 0x83366971, 0xd0fd7c68, 0x24a04343, 0x776b565a,
13133 +
            0x50c0168b, 0x030b0392, 0xf7563cb9, 0xa49d29a0, 0x9ead0344, 0xcd66165d, 0x393b2976,
13134 +
            0x6af03c6f, 0xecdb51a8, 0xbf1044b1, 0x4b4d7b9a, 0x18866e83, 0x22b64467, 0x717d517e,
13135 +
            0x85206e55, 0xd6eb7b4c, 0xf1403b9d, 0xa28b2e84, 0x56d611af, 0x051d04b6, 0x3f2d2e52,
13136 +
            0x6ce63b4b, 0x98bb0460, 0xcb701179, 0xd7ed85c2, 0x842690db, 0x707baff0, 0x23b0bae9,
13137 +
            0x1980900d, 0x4a4b8514, 0xbe16ba3f, 0xedddaf26, 0xca76eff7, 0x99bdfaee, 0x6de0c5c5,
13138 +
            0x3e2bd0dc, 0x041bfa38, 0x57d0ef21, 0xa38dd00a, 0xf046c513, 0x9ab6f97c, 0xc97dec65,
13139 +
            0x3d20d34e, 0x6eebc657, 0x54dbecb3, 0x0710f9aa, 0xf34dc681, 0xa086d398, 0x872d9349,
13140 +
            0xd4e68650, 0x20bbb97b, 0x7370ac62, 0x49408686, 0x1a8b939f, 0xeed6acb4, 0xbd1db9ad,
13141 +
            0xa1802d16, 0xf24b380f, 0x06160724, 0x55dd123d, 0x6fed38d9, 0x3c262dc0, 0xc87b12eb,
13142 +
            0x9bb007f2, 0xbc1b4723, 0xefd0523a, 0x1b8d6d11, 0x48467808, 0x727652ec, 0x21bd47f5,
13143 +
            0xd5e078de, 0x862b6dc7, 0x58f7e2fb, 0x0b3cf7e2, 0xff61c8c9, 0xacaaddd0, 0x969af734,
13144 +
            0xc551e22d, 0x310cdd06, 0x62c7c81f, 0x456c88ce, 0x16a79dd7, 0xe2faa2fc, 0xb131b7e5,
13145 +
            0x8b019d01, 0xd8ca8818, 0x2c97b733, 0x7f5ca22a, 0x63c13691, 0x300a2388, 0xc4571ca3,
13146 +
            0x979c09ba, 0xadac235e, 0xfe673647, 0x0a3a096c, 0x59f11c75, 0x7e5a5ca4, 0x2d9149bd,
13147 +
            0xd9cc7696, 0x8a07638f, 0xb037496b, 0xe3fc5c72, 0x17a16359, 0x446a7640, 0x2e9a4a2f,
13148 +
            0x7d515f36, 0x890c601d, 0xdac77504, 0xe0f75fe0, 0xb33c4af9, 0x476175d2, 0x14aa60cb,
13149 +
            0x3301201a, 0x60ca3503, 0x94970a28, 0xc75c1f31, 0xfd6c35d5, 0xaea720cc, 0x5afa1fe7,
13150 +
            0x09310afe, 0x15ac9e45, 0x46678b5c, 0xb23ab477, 0xe1f1a16e, 0xdbc18b8a, 0x880a9e93,
13151 +
            0x7c57a1b8, 0x2f9cb4a1, 0x0837f470, 0x5bfce169, 0xafa1de42, 0xfc6acb5b, 0xc65ae1bf,
13152 +
            0x9591f4a6, 0x61cccb8d, 0x3207de94, 0xb42cb353, 0xe7e7a64a, 0x13ba9961, 0x40718c78,
13153 +
            0x7a41a69c, 0x298ab385, 0xddd78cae, 0x8e1c99b7, 0xa9b7d966, 0xfa7ccc7f, 0x0e21f354,
13154 +
            0x5deae64d, 0x67dacca9, 0x3411d9b0, 0xc04ce69b, 0x9387f382, 0x8f1a6739, 0xdcd17220,
13155 +
            0x288c4d0b, 0x7b475812, 0x417772f6, 0x12bc67ef, 0xe6e158c4, 0xb52a4ddd, 0x92810d0c,
13156 +
            0xc14a1815, 0x3517273e, 0x66dc3227, 0x5cec18c3, 0x0f270dda, 0xfb7a32f1, 0xa8b127e8,
13157 +
            0xc2411b87, 0x918a0e9e, 0x65d731b5, 0x361c24ac, 0x0c2c0e48, 0x5fe71b51, 0xabba247a,
13158 +
            0xf8713163, 0xdfda71b2, 0x8c1164ab, 0x784c5b80, 0x2b874e99, 0x11b7647d, 0x427c7164,
13159 +
            0xb6214e4f, 0xe5ea5b56, 0xf977cfed, 0xaabcdaf4, 0x5ee1e5df, 0x0d2af0c6, 0x371ada22,
13160 +
            0x64d1cf3b, 0x908cf010, 0xc347e509, 0xe4eca5d8, 0xb727b0c1, 0x437a8fea, 0x10b19af3,
13161 +
            0x2a81b017, 0x794aa50e, 0x8d179a25, 0xdedc8f3c,
13162 +
        ],
13163 +
        [
13164 +
            0x00000000, 0xb1efc5f6, 0xe29eca47, 0x53710fb1, 0x447cd525, 0xf59310d3, 0xa6e21f62,
13165 +
            0x170dda94, 0x88f9aa4a, 0x39166fbc, 0x6a67600d, 0xdb88a5fb, 0xcc857f6f, 0x7d6aba99,
13166 +
            0x2e1bb528, 0x9ff470de, 0x90b2153f, 0x215dd0c9, 0x722cdf78, 0xc3c31a8e, 0xd4cec01a,
13167 +
            0x652105ec, 0x36500a5d, 0x87bfcfab, 0x184bbf75, 0xa9a47a83, 0xfad57532, 0x4b3ab0c4,
13168 +
            0x5c376a50, 0xedd8afa6, 0xbea9a017, 0x0f4665e1, 0xa0256bd5, 0x11caae23, 0x42bba192,
13169 +
            0xf3546464, 0xe459bef0, 0x55b67b06, 0x06c774b7, 0xb728b141, 0x28dcc19f, 0x99330469,
13170 +
            0xca420bd8, 0x7badce2e, 0x6ca014ba, 0xdd4fd14c, 0x8e3edefd, 0x3fd11b0b, 0x30977eea,
13171 +
            0x8178bb1c, 0xd209b4ad, 0x63e6715b, 0x74ebabcf, 0xc5046e39, 0x96756188, 0x279aa47e,
13172 +
            0xb86ed4a0, 0x09811156, 0x5af01ee7, 0xeb1fdb11, 0xfc120185, 0x4dfdc473, 0x1e8ccbc2,
13173 +
            0xaf630e34, 0xc10b9601, 0x70e453f7, 0x23955c46, 0x927a99b0, 0x85774324, 0x349886d2,
13174 +
            0x67e98963, 0xd6064c95, 0x49f23c4b, 0xf81df9bd, 0xab6cf60c, 0x1a8333fa, 0x0d8ee96e,
13175 +
            0xbc612c98, 0xef102329, 0x5effe6df, 0x51b9833e, 0xe05646c8, 0xb3274979, 0x02c88c8f,
13176 +
            0x15c5561b, 0xa42a93ed, 0xf75b9c5c, 0x46b459aa, 0xd9402974, 0x68afec82, 0x3bdee333,
13177 +
            0x8a3126c5, 0x9d3cfc51, 0x2cd339a7, 0x7fa23616, 0xce4df3e0, 0x612efdd4, 0xd0c13822,
13178 +
            0x83b03793, 0x325ff265, 0x255228f1, 0x94bded07, 0xc7cce2b6, 0x76232740, 0xe9d7579e,
13179 +
            0x58389268, 0x0b499dd9, 0xbaa6582f, 0xadab82bb, 0x1c44474d, 0x4f3548fc, 0xfeda8d0a,
13180 +
            0xf19ce8eb, 0x40732d1d, 0x130222ac, 0xa2ede75a, 0xb5e03dce, 0x040ff838, 0x577ef789,
13181 +
            0xe691327f, 0x796542a1, 0xc88a8757, 0x9bfb88e6, 0x2a144d10, 0x3d199784, 0x8cf65272,
13182 +
            0xdf875dc3, 0x6e689835, 0x03566da9, 0xb2b9a85f, 0xe1c8a7ee, 0x50276218, 0x472ab88c,
13183 +
            0xf6c57d7a, 0xa5b472cb, 0x145bb73d, 0x8bafc7e3, 0x3a400215, 0x69310da4, 0xd8dec852,
13184 +
            0xcfd312c6, 0x7e3cd730, 0x2d4dd881, 0x9ca21d77, 0x93e47896, 0x220bbd60, 0x717ab2d1,
13185 +
            0xc0957727, 0xd798adb3, 0x66776845, 0x350667f4, 0x84e9a202, 0x1b1dd2dc, 0xaaf2172a,
13186 +
            0xf983189b, 0x486cdd6d, 0x5f6107f9, 0xee8ec20f, 0xbdffcdbe, 0x0c100848, 0xa373067c,
13187 +
            0x129cc38a, 0x41edcc3b, 0xf00209cd, 0xe70fd359, 0x56e016af, 0x0591191e, 0xb47edce8,
13188 +
            0x2b8aac36, 0x9a6569c0, 0xc9146671, 0x78fba387, 0x6ff67913, 0xde19bce5, 0x8d68b354,
13189 +
            0x3c8776a2, 0x33c11343, 0x822ed6b5, 0xd15fd904, 0x60b01cf2, 0x77bdc666, 0xc6520390,
13190 +
            0x95230c21, 0x24ccc9d7, 0xbb38b909, 0x0ad77cff, 0x59a6734e, 0xe849b6b8, 0xff446c2c,
13191 +
            0x4eaba9da, 0x1ddaa66b, 0xac35639d, 0xc25dfba8, 0x73b23e5e, 0x20c331ef, 0x912cf419,
13192 +
            0x86212e8d, 0x37ceeb7b, 0x64bfe4ca, 0xd550213c, 0x4aa451e2, 0xfb4b9414, 0xa83a9ba5,
13193 +
            0x19d55e53, 0x0ed884c7, 0xbf374131, 0xec464e80, 0x5da98b76, 0x52efee97, 0xe3002b61,
13194 +
            0xb07124d0, 0x019ee126, 0x16933bb2, 0xa77cfe44, 0xf40df1f5, 0x45e23403, 0xda1644dd,
13195 +
            0x6bf9812b, 0x38888e9a, 0x89674b6c, 0x9e6a91f8, 0x2f85540e, 0x7cf45bbf, 0xcd1b9e49,
13196 +
            0x6278907d, 0xd397558b, 0x80e65a3a, 0x31099fcc, 0x26044558, 0x97eb80ae, 0xc49a8f1f,
13197 +
            0x75754ae9, 0xea813a37, 0x5b6effc1, 0x081ff070, 0xb9f03586, 0xaefdef12, 0x1f122ae4,
13198 +
            0x4c632555, 0xfd8ce0a3, 0xf2ca8542, 0x432540b4, 0x10544f05, 0xa1bb8af3, 0xb6b65067,
13199 +
            0x07599591, 0x54289a20, 0xe5c75fd6, 0x7a332f08, 0xcbdceafe, 0x98ade54f, 0x294220b9,
13200 +
            0x3e4ffa2d, 0x8fa03fdb, 0xdcd1306a, 0x6d3ef59c,
13201 +
        ],
13202 +
        [
13203 +
            0x00000000, 0x06acdb52, 0x0d59b6a4, 0x0bf56df6, 0x1ab36d48, 0x1c1fb61a, 0x17eadbec,
13204 +
            0x114600be, 0x3566da90, 0x33ca01c2, 0x383f6c34, 0x3e93b766, 0x2fd5b7d8, 0x29796c8a,
13205 +
            0x228c017c, 0x2420da2e, 0x6acdb520, 0x6c616e72, 0x67940384, 0x6138d8d6, 0x707ed868,
13206 +
            0x76d2033a, 0x7d276ecc, 0x7b8bb59e, 0x5fab6fb0, 0x5907b4e2, 0x52f2d914, 0x545e0246,
13207 +
            0x451802f8, 0x43b4d9aa, 0x4841b45c, 0x4eed6f0e, 0xd59b6a40, 0xd337b112, 0xd8c2dce4,
13208 +
            0xde6e07b6, 0xcf280708, 0xc984dc5a, 0xc271b1ac, 0xc4dd6afe, 0xe0fdb0d0, 0xe6516b82,
13209 +
            0xeda40674, 0xeb08dd26, 0xfa4edd98, 0xfce206ca, 0xf7176b3c, 0xf1bbb06e, 0xbf56df60,
13210 +
            0xb9fa0432, 0xb20f69c4, 0xb4a3b296, 0xa5e5b228, 0xa349697a, 0xa8bc048c, 0xae10dfde,
13211 +
            0x8a3005f0, 0x8c9cdea2, 0x8769b354, 0x81c56806, 0x908368b8, 0x962fb3ea, 0x9ddade1c,
13212 +
            0x9b76054e, 0x2a77952b, 0x2cdb4e79, 0x272e238f, 0x2182f8dd, 0x30c4f863, 0x36682331,
13213 +
            0x3d9d4ec7, 0x3b319595, 0x1f114fbb, 0x19bd94e9, 0x1248f91f, 0x14e4224d, 0x05a222f3,
13214 +
            0x030ef9a1, 0x08fb9457, 0x0e574f05, 0x40ba200b, 0x4616fb59, 0x4de396af, 0x4b4f4dfd,
13215 +
            0x5a094d43, 0x5ca59611, 0x5750fbe7, 0x51fc20b5, 0x75dcfa9b, 0x737021c9, 0x78854c3f,
13216 +
            0x7e29976d, 0x6f6f97d3, 0x69c34c81, 0x62362177, 0x649afa25, 0xffecff6b, 0xf9402439,
13217 +
            0xf2b549cf, 0xf419929d, 0xe55f9223, 0xe3f34971, 0xe8062487, 0xeeaaffd5, 0xca8a25fb,
13218 +
            0xcc26fea9, 0xc7d3935f, 0xc17f480d, 0xd03948b3, 0xd69593e1, 0xdd60fe17, 0xdbcc2545,
13219 +
            0x95214a4b, 0x938d9119, 0x9878fcef, 0x9ed427bd, 0x8f922703, 0x893efc51, 0x82cb91a7,
13220 +
            0x84674af5, 0xa04790db, 0xa6eb4b89, 0xad1e267f, 0xabb2fd2d, 0xbaf4fd93, 0xbc5826c1,
13221 +
            0xb7ad4b37, 0xb1019065, 0x54ef2a56, 0x5243f104, 0x59b69cf2, 0x5f1a47a0, 0x4e5c471e,
13222 +
            0x48f09c4c, 0x4305f1ba, 0x45a92ae8, 0x6189f0c6, 0x67252b94, 0x6cd04662, 0x6a7c9d30,
13223 +
            0x7b3a9d8e, 0x7d9646dc, 0x76632b2a, 0x70cff078, 0x3e229f76, 0x388e4424, 0x337b29d2,
13224 +
            0x35d7f280, 0x2491f23e, 0x223d296c, 0x29c8449a, 0x2f649fc8, 0x0b4445e6, 0x0de89eb4,
13225 +
            0x061df342, 0x00b12810, 0x11f728ae, 0x175bf3fc, 0x1cae9e0a, 0x1a024558, 0x81744016,
13226 +
            0x87d89b44, 0x8c2df6b2, 0x8a812de0, 0x9bc72d5e, 0x9d6bf60c, 0x969e9bfa, 0x903240a8,
13227 +
            0xb4129a86, 0xb2be41d4, 0xb94b2c22, 0xbfe7f770, 0xaea1f7ce, 0xa80d2c9c, 0xa3f8416a,
13228 +
            0xa5549a38, 0xebb9f536, 0xed152e64, 0xe6e04392, 0xe04c98c0, 0xf10a987e, 0xf7a6432c,
13229 +
            0xfc532eda, 0xfafff588, 0xdedf2fa6, 0xd873f4f4, 0xd3869902, 0xd52a4250, 0xc46c42ee,
13230 +
            0xc2c099bc, 0xc935f44a, 0xcf992f18, 0x7e98bf7d, 0x7834642f, 0x73c109d9, 0x756dd28b,
13231 +
            0x642bd235, 0x62870967, 0x69726491, 0x6fdebfc3, 0x4bfe65ed, 0x4d52bebf, 0x46a7d349,
13232 +
            0x400b081b, 0x514d08a5, 0x57e1d3f7, 0x5c14be01, 0x5ab86553, 0x14550a5d, 0x12f9d10f,
13233 +
            0x190cbcf9, 0x1fa067ab, 0x0ee66715, 0x084abc47, 0x03bfd1b1, 0x05130ae3, 0x2133d0cd,
13234 +
            0x279f0b9f, 0x2c6a6669, 0x2ac6bd3b, 0x3b80bd85, 0x3d2c66d7, 0x36d90b21, 0x3075d073,
13235 +
            0xab03d53d, 0xadaf0e6f, 0xa65a6399, 0xa0f6b8cb, 0xb1b0b875, 0xb71c6327, 0xbce90ed1,
13236 +
            0xba45d583, 0x9e650fad, 0x98c9d4ff, 0x933cb909, 0x9590625b, 0x84d662e5, 0x827ab9b7,
13237 +
            0x898fd441, 0x8f230f13, 0xc1ce601d, 0xc762bb4f, 0xcc97d6b9, 0xca3b0deb, 0xdb7d0d55,
13238 +
            0xddd1d607, 0xd624bbf1, 0xd08860a3, 0xf4a8ba8d, 0xf20461df, 0xf9f10c29, 0xff5dd77b,
13239 +
            0xee1bd7c5, 0xe8b70c97, 0xe3426161, 0xe5eeba33,
13240 +
        ],
13241 +
        [
13242 +
            0x00000000, 0xa9de54ac, 0xd2fde8f3, 0x7b23bc5f, 0x24ba904d, 0x8d64c4e1, 0xf64778be,
13243 +
            0x5f992c12, 0x4975209a, 0xe0ab7436, 0x9b88c869, 0x32569cc5, 0x6dcfb0d7, 0xc411e47b,
13244 +
            0xbf325824, 0x16ec0c88, 0x92ea4134, 0x3b341598, 0x4017a9c7, 0xe9c9fd6b, 0xb650d179,
13245 +
            0x1f8e85d5, 0x64ad398a, 0xcd736d26, 0xdb9f61ae, 0x72413502, 0x0962895d, 0xa0bcddf1,
13246 +
            0xff25f1e3, 0x56fba54f, 0x2dd81910, 0x84064dbc, 0xa495c3c3, 0x0d4b976f, 0x76682b30,
13247 +
            0xdfb67f9c, 0x802f538e, 0x29f10722, 0x52d2bb7d, 0xfb0cefd1, 0xede0e359, 0x443eb7f5,
13248 +
            0x3f1d0baa, 0x96c35f06, 0xc95a7314, 0x608427b8, 0x1ba79be7, 0xb279cf4b, 0x367f82f7,
13249 +
            0x9fa1d65b, 0xe4826a04, 0x4d5c3ea8, 0x12c512ba, 0xbb1b4616, 0xc038fa49, 0x69e6aee5,
13250 +
            0x7f0aa26d, 0xd6d4f6c1, 0xadf74a9e, 0x04291e32, 0x5bb03220, 0xf26e668c, 0x894ddad3,
13251 +
            0x20938e7f, 0xc86ac62d, 0x61b49281, 0x1a972ede, 0xb3497a72, 0xecd05660, 0x450e02cc,
13252 +
            0x3e2dbe93, 0x97f3ea3f, 0x811fe6b7, 0x28c1b21b, 0x53e20e44, 0xfa3c5ae8, 0xa5a576fa,
13253 +
            0x0c7b2256, 0x77589e09, 0xde86caa5, 0x5a808719, 0xf35ed3b5, 0x887d6fea, 0x21a33b46,
13254 +
            0x7e3a1754, 0xd7e443f8, 0xacc7ffa7, 0x0519ab0b, 0x13f5a783, 0xba2bf32f, 0xc1084f70,
13255 +
            0x68d61bdc, 0x374f37ce, 0x9e916362, 0xe5b2df3d, 0x4c6c8b91, 0x6cff05ee, 0xc5215142,
13256 +
            0xbe02ed1d, 0x17dcb9b1, 0x484595a3, 0xe19bc10f, 0x9ab87d50, 0x336629fc, 0x258a2574,
13257 +
            0x8c5471d8, 0xf777cd87, 0x5ea9992b, 0x0130b539, 0xa8eee195, 0xd3cd5dca, 0x7a130966,
13258 +
            0xfe1544da, 0x57cb1076, 0x2ce8ac29, 0x8536f885, 0xdaafd497, 0x7371803b, 0x08523c64,
13259 +
            0xa18c68c8, 0xb7606440, 0x1ebe30ec, 0x659d8cb3, 0xcc43d81f, 0x93daf40d, 0x3a04a0a1,
13260 +
            0x41271cfe, 0xe8f94852, 0x1194cdf1, 0xb84a995d, 0xc3692502, 0x6ab771ae, 0x352e5dbc,
13261 +
            0x9cf00910, 0xe7d3b54f, 0x4e0de1e3, 0x58e1ed6b, 0xf13fb9c7, 0x8a1c0598, 0x23c25134,
13262 +
            0x7c5b7d26, 0xd585298a, 0xaea695d5, 0x0778c179, 0x837e8cc5, 0x2aa0d869, 0x51836436,
13263 +
            0xf85d309a, 0xa7c41c88, 0x0e1a4824, 0x7539f47b, 0xdce7a0d7, 0xca0bac5f, 0x63d5f8f3,
13264 +
            0x18f644ac, 0xb1281000, 0xeeb13c12, 0x476f68be, 0x3c4cd4e1, 0x9592804d, 0xb5010e32,
13265 +
            0x1cdf5a9e, 0x67fce6c1, 0xce22b26d, 0x91bb9e7f, 0x3865cad3, 0x4346768c, 0xea982220,
13266 +
            0xfc742ea8, 0x55aa7a04, 0x2e89c65b, 0x875792f7, 0xd8cebee5, 0x7110ea49, 0x0a335616,
13267 +
            0xa3ed02ba, 0x27eb4f06, 0x8e351baa, 0xf516a7f5, 0x5cc8f359, 0x0351df4b, 0xaa8f8be7,
13268 +
            0xd1ac37b8, 0x78726314, 0x6e9e6f9c, 0xc7403b30, 0xbc63876f, 0x15bdd3c3, 0x4a24ffd1,
13269 +
            0xe3faab7d, 0x98d91722, 0x3107438e, 0xd9fe0bdc, 0x70205f70, 0x0b03e32f, 0xa2ddb783,
13270 +
            0xfd449b91, 0x549acf3d, 0x2fb97362, 0x866727ce, 0x908b2b46, 0x39557fea, 0x4276c3b5,
13271 +
            0xeba89719, 0xb431bb0b, 0x1defefa7, 0x66cc53f8, 0xcf120754, 0x4b144ae8, 0xe2ca1e44,
13272 +
            0x99e9a21b, 0x3037f6b7, 0x6faedaa5, 0xc6708e09, 0xbd533256, 0x148d66fa, 0x02616a72,
13273 +
            0xabbf3ede, 0xd09c8281, 0x7942d62d, 0x26dbfa3f, 0x8f05ae93, 0xf42612cc, 0x5df84660,
13274 +
            0x7d6bc81f, 0xd4b59cb3, 0xaf9620ec, 0x06487440, 0x59d15852, 0xf00f0cfe, 0x8b2cb0a1,
13275 +
            0x22f2e40d, 0x341ee885, 0x9dc0bc29, 0xe6e30076, 0x4f3d54da, 0x10a478c8, 0xb97a2c64,
13276 +
            0xc259903b, 0x6b87c497, 0xef81892b, 0x465fdd87, 0x3d7c61d8, 0x94a23574, 0xcb3b1966,
13277 +
            0x62e54dca, 0x19c6f195, 0xb018a539, 0xa6f4a9b1, 0x0f2afd1d, 0x74094142, 0xddd715ee,
13278 +
            0x824e39fc, 0x2b906d50, 0x50b3d10f, 0xf96d85a3,
13279 +
        ],
13280 +
        [
13281 +
            0x00000000, 0x23299be2, 0x465337c4, 0x657aac26, 0x8ca66f88, 0xaf8ff46a, 0xcaf5584c,
13282 +
            0xe9dcc3ae, 0x980d9ebb, 0xbb240559, 0xde5ea97f, 0xfd77329d, 0x14abf133, 0x37826ad1,
13283 +
            0x52f8c6f7, 0x71d15d15, 0xb15a7cdd, 0x9273e73f, 0xf7094b19, 0xd420d0fb, 0x3dfc1355,
13284 +
            0x1ed588b7, 0x7baf2491, 0x5886bf73, 0x2957e266, 0x0a7e7984, 0x6f04d5a2, 0x4c2d4e40,
13285 +
            0xa5f18dee, 0x86d8160c, 0xe3a2ba2a, 0xc08b21c8, 0xe3f5b811, 0xc0dc23f3, 0xa5a68fd5,
13286 +
            0x868f1437, 0x6f53d799, 0x4c7a4c7b, 0x2900e05d, 0x0a297bbf, 0x7bf826aa, 0x58d1bd48,
13287 +
            0x3dab116e, 0x1e828a8c, 0xf75e4922, 0xd477d2c0, 0xb10d7ee6, 0x9224e504, 0x52afc4cc,
13288 +
            0x71865f2e, 0x14fcf308, 0x37d568ea, 0xde09ab44, 0xfd2030a6, 0x985a9c80, 0xbb730762,
13289 +
            0xcaa25a77, 0xe98bc195, 0x8cf16db3, 0xafd8f651, 0x460435ff, 0x652dae1d, 0x0057023b,
13290 +
            0x237e99d9, 0x46aa3189, 0x6583aa6b, 0x00f9064d, 0x23d09daf, 0xca0c5e01, 0xe925c5e3,
13291 +
            0x8c5f69c5, 0xaf76f227, 0xdea7af32, 0xfd8e34d0, 0x98f498f6, 0xbbdd0314, 0x5201c0ba,
13292 +
            0x71285b58, 0x1452f77e, 0x377b6c9c, 0xf7f04d54, 0xd4d9d6b6, 0xb1a37a90, 0x928ae172,
13293 +
            0x7b5622dc, 0x587fb93e, 0x3d051518, 0x1e2c8efa, 0x6ffdd3ef, 0x4cd4480d, 0x29aee42b,
13294 +
            0x0a877fc9, 0xe35bbc67, 0xc0722785, 0xa5088ba3, 0x86211041, 0xa55f8998, 0x8676127a,
13295 +
            0xe30cbe5c, 0xc02525be, 0x29f9e610, 0x0ad07df2, 0x6faad1d4, 0x4c834a36, 0x3d521723,
13296 +
            0x1e7b8cc1, 0x7b0120e7, 0x5828bb05, 0xb1f478ab, 0x92dde349, 0xf7a74f6f, 0xd48ed48d,
13297 +
            0x1405f545, 0x372c6ea7, 0x5256c281, 0x717f5963, 0x98a39acd, 0xbb8a012f, 0xdef0ad09,
13298 +
            0xfdd936eb, 0x8c086bfe, 0xaf21f01c, 0xca5b5c3a, 0xe972c7d8, 0x00ae0476, 0x23879f94,
13299 +
            0x46fd33b2, 0x65d4a850, 0x8d546312, 0xae7df8f0, 0xcb0754d6, 0xe82ecf34, 0x01f20c9a,
13300 +
            0x22db9778, 0x47a13b5e, 0x6488a0bc, 0x1559fda9, 0x3670664b, 0x530aca6d, 0x7023518f,
13301 +
            0x99ff9221, 0xbad609c3, 0xdfaca5e5, 0xfc853e07, 0x3c0e1fcf, 0x1f27842d, 0x7a5d280b,
13302 +
            0x5974b3e9, 0xb0a87047, 0x9381eba5, 0xf6fb4783, 0xd5d2dc61, 0xa4038174, 0x872a1a96,
13303 +
            0xe250b6b0, 0xc1792d52, 0x28a5eefc, 0x0b8c751e, 0x6ef6d938, 0x4ddf42da, 0x6ea1db03,
13304 +
            0x4d8840e1, 0x28f2ecc7, 0x0bdb7725, 0xe207b48b, 0xc12e2f69, 0xa454834f, 0x877d18ad,
13305 +
            0xf6ac45b8, 0xd585de5a, 0xb0ff727c, 0x93d6e99e, 0x7a0a2a30, 0x5923b1d2, 0x3c591df4,
13306 +
            0x1f708616, 0xdffba7de, 0xfcd23c3c, 0x99a8901a, 0xba810bf8, 0x535dc856, 0x707453b4,
13307 +
            0x150eff92, 0x36276470, 0x47f63965, 0x64dfa287, 0x01a50ea1, 0x228c9543, 0xcb5056ed,
13308 +
            0xe879cd0f, 0x8d036129, 0xae2afacb, 0xcbfe529b, 0xe8d7c979, 0x8dad655f, 0xae84febd,
13309 +
            0x47583d13, 0x6471a6f1, 0x010b0ad7, 0x22229135, 0x53f3cc20, 0x70da57c2, 0x15a0fbe4,
13310 +
            0x36896006, 0xdf55a3a8, 0xfc7c384a, 0x9906946c, 0xba2f0f8e, 0x7aa42e46, 0x598db5a4,
13311 +
            0x3cf71982, 0x1fde8260, 0xf60241ce, 0xd52bda2c, 0xb051760a, 0x9378ede8, 0xe2a9b0fd,
13312 +
            0xc1802b1f, 0xa4fa8739, 0x87d31cdb, 0x6e0fdf75, 0x4d264497, 0x285ce8b1, 0x0b757353,
13313 +
            0x280bea8a, 0x0b227168, 0x6e58dd4e, 0x4d7146ac, 0xa4ad8502, 0x87841ee0, 0xe2feb2c6,
13314 +
            0xc1d72924, 0xb0067431, 0x932fefd3, 0xf65543f5, 0xd57cd817, 0x3ca01bb9, 0x1f89805b,
13315 +
            0x7af32c7d, 0x59dab79f, 0x99519657, 0xba780db5, 0xdf02a193, 0xfc2b3a71, 0x15f7f9df,
13316 +
            0x36de623d, 0x53a4ce1b, 0x708d55f9, 0x015c08ec, 0x2275930e, 0x470f3f28, 0x6426a4ca,
13317 +
            0x8dfa6764, 0xaed3fc86, 0xcba950a0, 0xe880cb42,
13318 +
        ],
13319 +
        [
13320 +
            0x00000000, 0x9be9878f, 0xb6924eb5, 0x2d7bc93a, 0xec65dcc1, 0x778c5b4e, 0x5af79274,
13321 +
            0xc11e15fb, 0x598af829, 0xc2637fa6, 0xef18b69c, 0x74f13113, 0xb5ef24e8, 0x2e06a367,
13322 +
            0x037d6a5d, 0x9894edd2, 0xb315f052, 0x28fc77dd, 0x0587bee7, 0x9e6e3968, 0x5f702c93,
13323 +
            0xc499ab1c, 0xe9e26226, 0x720be5a9, 0xea9f087b, 0x71768ff4, 0x5c0d46ce, 0xc7e4c141,
13324 +
            0x06fad4ba, 0x9d135335, 0xb0689a0f, 0x2b811d80, 0xe76aa10f, 0x7c832680, 0x51f8efba,
13325 +
            0xca116835, 0x0b0f7dce, 0x90e6fa41, 0xbd9d337b, 0x2674b4f4, 0xbee05926, 0x2509dea9,
13326 +
            0x08721793, 0x939b901c, 0x528585e7, 0xc96c0268, 0xe417cb52, 0x7ffe4cdd, 0x547f515d,
13327 +
            0xcf96d6d2, 0xe2ed1fe8, 0x79049867, 0xb81a8d9c, 0x23f30a13, 0x0e88c329, 0x956144a6,
13328 +
            0x0df5a974, 0x961c2efb, 0xbb67e7c1, 0x208e604e, 0xe19075b5, 0x7a79f23a, 0x57023b00,
13329 +
            0xccebbc8f, 0x4f9403b5, 0xd47d843a, 0xf9064d00, 0x62efca8f, 0xa3f1df74, 0x381858fb,
13330 +
            0x156391c1, 0x8e8a164e, 0x161efb9c, 0x8df77c13, 0xa08cb529, 0x3b6532a6, 0xfa7b275d,
13331 +
            0x6192a0d2, 0x4ce969e8, 0xd700ee67, 0xfc81f3e7, 0x67687468, 0x4a13bd52, 0xd1fa3add,
13332 +
            0x10e42f26, 0x8b0da8a9, 0xa6766193, 0x3d9fe61c, 0xa50b0bce, 0x3ee28c41, 0x1399457b,
13333 +
            0x8870c2f4, 0x496ed70f, 0xd2875080, 0xfffc99ba, 0x64151e35, 0xa8fea2ba, 0x33172535,
13334 +
            0x1e6cec0f, 0x85856b80, 0x449b7e7b, 0xdf72f9f4, 0xf20930ce, 0x69e0b741, 0xf1745a93,
13335 +
            0x6a9ddd1c, 0x47e61426, 0xdc0f93a9, 0x1d118652, 0x86f801dd, 0xab83c8e7, 0x306a4f68,
13336 +
            0x1beb52e8, 0x8002d567, 0xad791c5d, 0x36909bd2, 0xf78e8e29, 0x6c6709a6, 0x411cc09c,
13337 +
            0xdaf54713, 0x4261aac1, 0xd9882d4e, 0xf4f3e474, 0x6f1a63fb, 0xae047600, 0x35edf18f,
13338 +
            0x189638b5, 0x837fbf3a, 0x9f28076a, 0x04c180e5, 0x29ba49df, 0xb253ce50, 0x734ddbab,
13339 +
            0xe8a45c24, 0xc5df951e, 0x5e361291, 0xc6a2ff43, 0x5d4b78cc, 0x7030b1f6, 0xebd93679,
13340 +
            0x2ac72382, 0xb12ea40d, 0x9c556d37, 0x07bceab8, 0x2c3df738, 0xb7d470b7, 0x9aafb98d,
13341 +
            0x01463e02, 0xc0582bf9, 0x5bb1ac76, 0x76ca654c, 0xed23e2c3, 0x75b70f11, 0xee5e889e,
13342 +
            0xc32541a4, 0x58ccc62b, 0x99d2d3d0, 0x023b545f, 0x2f409d65, 0xb4a91aea, 0x7842a665,
13343 +
            0xe3ab21ea, 0xced0e8d0, 0x55396f5f, 0x94277aa4, 0x0fcefd2b, 0x22b53411, 0xb95cb39e,
13344 +
            0x21c85e4c, 0xba21d9c3, 0x975a10f9, 0x0cb39776, 0xcdad828d, 0x56440502, 0x7b3fcc38,
13345 +
            0xe0d64bb7, 0xcb575637, 0x50bed1b8, 0x7dc51882, 0xe62c9f0d, 0x27328af6, 0xbcdb0d79,
13346 +
            0x91a0c443, 0x0a4943cc, 0x92ddae1e, 0x09342991, 0x244fe0ab, 0xbfa66724, 0x7eb872df,
13347 +
            0xe551f550, 0xc82a3c6a, 0x53c3bbe5, 0xd0bc04df, 0x4b558350, 0x662e4a6a, 0xfdc7cde5,
13348 +
            0x3cd9d81e, 0xa7305f91, 0x8a4b96ab, 0x11a21124, 0x8936fcf6, 0x12df7b79, 0x3fa4b243,
13349 +
            0xa44d35cc, 0x65532037, 0xfebaa7b8, 0xd3c16e82, 0x4828e90d, 0x63a9f48d, 0xf8407302,
13350 +
            0xd53bba38, 0x4ed23db7, 0x8fcc284c, 0x1425afc3, 0x395e66f9, 0xa2b7e176, 0x3a230ca4,
13351 +
            0xa1ca8b2b, 0x8cb14211, 0x1758c59e, 0xd646d065, 0x4daf57ea, 0x60d49ed0, 0xfb3d195f,
13352 +
            0x37d6a5d0, 0xac3f225f, 0x8144eb65, 0x1aad6cea, 0xdbb37911, 0x405afe9e, 0x6d2137a4,
13353 +
            0xf6c8b02b, 0x6e5c5df9, 0xf5b5da76, 0xd8ce134c, 0x432794c3, 0x82398138, 0x19d006b7,
13354 +
            0x34abcf8d, 0xaf424802, 0x84c35582, 0x1f2ad20d, 0x32511b37, 0xa9b89cb8, 0x68a68943,
13355 +
            0xf34f0ecc, 0xde34c7f6, 0x45dd4079, 0xdd49adab, 0x46a02a24, 0x6bdbe31e, 0xf0326491,
13356 +
            0x312c716a, 0xaac5f6e5, 0x87be3fdf, 0x1c57b850,
13357 +
        ],
13358 +
        [
13359 +
            0x00000000, 0xbf114f7f, 0xff63df55, 0x4072902a, 0x7f86ff01, 0xc097b07e, 0x80e52054,
13360 +
            0x3ff46f2b, 0xff0dfe02, 0x401cb17d, 0x006e2157, 0xbf7f6e28, 0x808b0103, 0x3f9a4e7c,
13361 +
            0x7fe8de56, 0xc0f99129, 0x7f5abdaf, 0xc04bf2d0, 0x803962fa, 0x3f282d85, 0x00dc42ae,
13362 +
            0xbfcd0dd1, 0xffbf9dfb, 0x40aed284, 0x805743ad, 0x3f460cd2, 0x7f349cf8, 0xc025d387,
13363 +
            0xffd1bcac, 0x40c0f3d3, 0x00b263f9, 0xbfa32c86, 0xfeb57b5e, 0x41a43421, 0x01d6a40b,
13364 +
            0xbec7eb74, 0x8133845f, 0x3e22cb20, 0x7e505b0a, 0xc1411475, 0x01b8855c, 0xbea9ca23,
13365 +
            0xfedb5a09, 0x41ca1576, 0x7e3e7a5d, 0xc12f3522, 0x815da508, 0x3e4cea77, 0x81efc6f1,
13366 +
            0x3efe898e, 0x7e8c19a4, 0xc19d56db, 0xfe6939f0, 0x4178768f, 0x010ae6a5, 0xbe1ba9da,
13367 +
            0x7ee238f3, 0xc1f3778c, 0x8181e7a6, 0x3e90a8d9, 0x0164c7f2, 0xbe75888d, 0xfe0718a7,
13368 +
            0x411657d8, 0x7c2bb717, 0xc33af868, 0x83486842, 0x3c59273d, 0x03ad4816, 0xbcbc0769,
13369 +
            0xfcce9743, 0x43dfd83c, 0x83264915, 0x3c37066a, 0x7c459640, 0xc354d93f, 0xfca0b614,
13370 +
            0x43b1f96b, 0x03c36941, 0xbcd2263e, 0x03710ab8, 0xbc6045c7, 0xfc12d5ed, 0x43039a92,
13371 +
            0x7cf7f5b9, 0xc3e6bac6, 0x83942aec, 0x3c856593, 0xfc7cf4ba, 0x436dbbc5, 0x031f2bef,
13372 +
            0xbc0e6490, 0x83fa0bbb, 0x3ceb44c4, 0x7c99d4ee, 0xc3889b91, 0x829ecc49, 0x3d8f8336,
13373 +
            0x7dfd131c, 0xc2ec5c63, 0xfd183348, 0x42097c37, 0x027bec1d, 0xbd6aa362, 0x7d93324b,
13374 +
            0xc2827d34, 0x82f0ed1e, 0x3de1a261, 0x0215cd4a, 0xbd048235, 0xfd76121f, 0x42675d60,
13375 +
            0xfdc471e6, 0x42d53e99, 0x02a7aeb3, 0xbdb6e1cc, 0x82428ee7, 0x3d53c198, 0x7d2151b2,
13376 +
            0xc2301ecd, 0x02c98fe4, 0xbdd8c09b, 0xfdaa50b1, 0x42bb1fce, 0x7d4f70e5, 0xc25e3f9a,
13377 +
            0x822cafb0, 0x3d3de0cf, 0xf8576e2e, 0x47462151, 0x0734b17b, 0xb825fe04, 0x87d1912f,
13378 +
            0x38c0de50, 0x78b24e7a, 0xc7a30105, 0x075a902c, 0xb84bdf53, 0xf8394f79, 0x47280006,
13379 +
            0x78dc6f2d, 0xc7cd2052, 0x87bfb078, 0x38aeff07, 0x870dd381, 0x381c9cfe, 0x786e0cd4,
13380 +
            0xc77f43ab, 0xf88b2c80, 0x479a63ff, 0x07e8f3d5, 0xb8f9bcaa, 0x78002d83, 0xc71162fc,
13381 +
            0x8763f2d6, 0x3872bda9, 0x0786d282, 0xb8979dfd, 0xf8e50dd7, 0x47f442a8, 0x06e21570,
13382 +
            0xb9f35a0f, 0xf981ca25, 0x4690855a, 0x7964ea71, 0xc675a50e, 0x86073524, 0x39167a5b,
13383 +
            0xf9efeb72, 0x46fea40d, 0x068c3427, 0xb99d7b58, 0x86691473, 0x39785b0c, 0x790acb26,
13384 +
            0xc61b8459, 0x79b8a8df, 0xc6a9e7a0, 0x86db778a, 0x39ca38f5, 0x063e57de, 0xb92f18a1,
13385 +
            0xf95d888b, 0x464cc7f4, 0x86b556dd, 0x39a419a2, 0x79d68988, 0xc6c7c6f7, 0xf933a9dc,
13386 +
            0x4622e6a3, 0x06507689, 0xb94139f6, 0x847cd939, 0x3b6d9646, 0x7b1f066c, 0xc40e4913,
13387 +
            0xfbfa2638, 0x44eb6947, 0x0499f96d, 0xbb88b612, 0x7b71273b, 0xc4606844, 0x8412f86e,
13388 +
            0x3b03b711, 0x04f7d83a, 0xbbe69745, 0xfb94076f, 0x44854810, 0xfb266496, 0x44372be9,
13389 +
            0x0445bbc3, 0xbb54f4bc, 0x84a09b97, 0x3bb1d4e8, 0x7bc344c2, 0xc4d20bbd, 0x042b9a94,
13390 +
            0xbb3ad5eb, 0xfb4845c1, 0x44590abe, 0x7bad6595, 0xc4bc2aea, 0x84cebac0, 0x3bdff5bf,
13391 +
            0x7ac9a267, 0xc5d8ed18, 0x85aa7d32, 0x3abb324d, 0x054f5d66, 0xba5e1219, 0xfa2c8233,
13392 +
            0x453dcd4c, 0x85c45c65, 0x3ad5131a, 0x7aa78330, 0xc5b6cc4f, 0xfa42a364, 0x4553ec1b,
13393 +
            0x05217c31, 0xba30334e, 0x05931fc8, 0xba8250b7, 0xfaf0c09d, 0x45e18fe2, 0x7a15e0c9,
13394 +
            0xc504afb6, 0x85763f9c, 0x3a6770e3, 0xfa9ee1ca, 0x458faeb5, 0x05fd3e9f, 0xbaec71e0,
13395 +
            0x85181ecb, 0x3a0951b4, 0x7a7bc19e, 0xc56a8ee1,
13396 +
        ],
13397 +
        [
13398 +
            0x00000000, 0x71ef9df7, 0xe3df3bee, 0x9230a619, 0x46ff3677, 0x3710ab80, 0xa5200d99,
13399 +
            0xd4cf906e, 0x8dfe6cee, 0xfc11f119, 0x6e215700, 0x1fcecaf7, 0xcb015a99, 0xbaeec76e,
13400 +
            0x28de6177, 0x5931fc80, 0x9abd9877, 0xeb520580, 0x7962a399, 0x088d3e6e, 0xdc42ae00,
13401 +
            0xadad33f7, 0x3f9d95ee, 0x4e720819, 0x1743f499, 0x66ac696e, 0xf49ccf77, 0x85735280,
13402 +
            0x51bcc2ee, 0x20535f19, 0xb263f900, 0xc38c64f7, 0xb43a7145, 0xc5d5ecb2, 0x57e54aab,
13403 +
            0x260ad75c, 0xf2c54732, 0x832adac5, 0x111a7cdc, 0x60f5e12b, 0x39c41dab, 0x482b805c,
13404 +
            0xda1b2645, 0xabf4bbb2, 0x7f3b2bdc, 0x0ed4b62b, 0x9ce41032, 0xed0b8dc5, 0x2e87e932,
13405 +
            0x5f6874c5, 0xcd58d2dc, 0xbcb74f2b, 0x6878df45, 0x199742b2, 0x8ba7e4ab, 0xfa48795c,
13406 +
            0xa37985dc, 0xd296182b, 0x40a6be32, 0x314923c5, 0xe586b3ab, 0x94692e5c, 0x06598845,
13407 +
            0x77b615b2, 0xe935a321, 0x98da3ed6, 0x0aea98cf, 0x7b050538, 0xafca9556, 0xde2508a1,
13408 +
            0x4c15aeb8, 0x3dfa334f, 0x64cbcfcf, 0x15245238, 0x8714f421, 0xf6fb69d6, 0x2234f9b8,
13409 +
            0x53db644f, 0xc1ebc256, 0xb0045fa1, 0x73883b56, 0x0267a6a1, 0x905700b8, 0xe1b89d4f,
13410 +
            0x35770d21, 0x449890d6, 0xd6a836cf, 0xa747ab38, 0xfe7657b8, 0x8f99ca4f, 0x1da96c56,
13411 +
            0x6c46f1a1, 0xb88961cf, 0xc966fc38, 0x5b565a21, 0x2ab9c7d6, 0x5d0fd264, 0x2ce04f93,
13412 +
            0xbed0e98a, 0xcf3f747d, 0x1bf0e413, 0x6a1f79e4, 0xf82fdffd, 0x89c0420a, 0xd0f1be8a,
13413 +
            0xa11e237d, 0x332e8564, 0x42c11893, 0x960e88fd, 0xe7e1150a, 0x75d1b313, 0x043e2ee4,
13414 +
            0xc7b24a13, 0xb65dd7e4, 0x246d71fd, 0x5582ec0a, 0x814d7c64, 0xf0a2e193, 0x6292478a,
13415 +
            0x137dda7d, 0x4a4c26fd, 0x3ba3bb0a, 0xa9931d13, 0xd87c80e4, 0x0cb3108a, 0x7d5c8d7d,
13416 +
            0xef6c2b64, 0x9e83b693, 0x532a07e9, 0x22c59a1e, 0xb0f53c07, 0xc11aa1f0, 0x15d5319e,
13417 +
            0x643aac69, 0xf60a0a70, 0x87e59787, 0xded46b07, 0xaf3bf6f0, 0x3d0b50e9, 0x4ce4cd1e,
13418 +
            0x982b5d70, 0xe9c4c087, 0x7bf4669e, 0x0a1bfb69, 0xc9979f9e, 0xb8780269, 0x2a48a470,
13419 +
            0x5ba73987, 0x8f68a9e9, 0xfe87341e, 0x6cb79207, 0x1d580ff0, 0x4469f370, 0x35866e87,
13420 +
            0xa7b6c89e, 0xd6595569, 0x0296c507, 0x737958f0, 0xe149fee9, 0x90a6631e, 0xe71076ac,
13421 +
            0x96ffeb5b, 0x04cf4d42, 0x7520d0b5, 0xa1ef40db, 0xd000dd2c, 0x42307b35, 0x33dfe6c2,
13422 +
            0x6aee1a42, 0x1b0187b5, 0x893121ac, 0xf8debc5b, 0x2c112c35, 0x5dfeb1c2, 0xcfce17db,
13423 +
            0xbe218a2c, 0x7dadeedb, 0x0c42732c, 0x9e72d535, 0xef9d48c2, 0x3b52d8ac, 0x4abd455b,
13424 +
            0xd88de342, 0xa9627eb5, 0xf0538235, 0x81bc1fc2, 0x138cb9db, 0x6263242c, 0xb6acb442,
13425 +
            0xc74329b5, 0x55738fac, 0x249c125b, 0xba1fa4c8, 0xcbf0393f, 0x59c09f26, 0x282f02d1,
13426 +
            0xfce092bf, 0x8d0f0f48, 0x1f3fa951, 0x6ed034a6, 0x37e1c826, 0x460e55d1, 0xd43ef3c8,
13427 +
            0xa5d16e3f, 0x711efe51, 0x00f163a6, 0x92c1c5bf, 0xe32e5848, 0x20a23cbf, 0x514da148,
13428 +
            0xc37d0751, 0xb2929aa6, 0x665d0ac8, 0x17b2973f, 0x85823126, 0xf46dacd1, 0xad5c5051,
13429 +
            0xdcb3cda6, 0x4e836bbf, 0x3f6cf648, 0xeba36626, 0x9a4cfbd1, 0x087c5dc8, 0x7993c03f,
13430 +
            0x0e25d58d, 0x7fca487a, 0xedfaee63, 0x9c157394, 0x48dae3fa, 0x39357e0d, 0xab05d814,
13431 +
            0xdaea45e3, 0x83dbb963, 0xf2342494, 0x6004828d, 0x11eb1f7a, 0xc5248f14, 0xb4cb12e3,
13432 +
            0x26fbb4fa, 0x5714290d, 0x94984dfa, 0xe577d00d, 0x77477614, 0x06a8ebe3, 0xd2677b8d,
13433 +
            0xa388e67a, 0x31b84063, 0x4057dd94, 0x19662114, 0x6889bce3, 0xfab91afa, 0x8b56870d,
13434 +
            0x5f991763, 0x2e768a94, 0xbc462c8d, 0xcda9b17a,
13435 +
        ],
13436 +
        [
13437 +
            0x00000000, 0xa6540fd2, 0xcde95e0f, 0x6bbd51dd, 0x1a93fdb5, 0xbcc7f267, 0xd77aa3ba,
13438 +
            0x712eac68, 0x3527fb6a, 0x9373f4b8, 0xf8cea565, 0x5e9aaab7, 0x2fb406df, 0x89e0090d,
13439 +
            0xe25d58d0, 0x44095702, 0x6a4ff6d4, 0xcc1bf906, 0xa7a6a8db, 0x01f2a709, 0x70dc0b61,
13440 +
            0xd68804b3, 0xbd35556e, 0x1b615abc, 0x5f680dbe, 0xf93c026c, 0x928153b1, 0x34d55c63,
13441 +
            0x45fbf00b, 0xe3afffd9, 0x8812ae04, 0x2e46a1d6, 0xd49feda8, 0x72cbe27a, 0x1976b3a7,
13442 +
            0xbf22bc75, 0xce0c101d, 0x68581fcf, 0x03e54e12, 0xa5b141c0, 0xe1b816c2, 0x47ec1910,
13443 +
            0x2c5148cd, 0x8a05471f, 0xfb2beb77, 0x5d7fe4a5, 0x36c2b578, 0x9096baaa, 0xbed01b7c,
13444 +
            0x188414ae, 0x73394573, 0xd56d4aa1, 0xa443e6c9, 0x0217e91b, 0x69aab8c6, 0xcffeb714,
13445 +
            0x8bf7e016, 0x2da3efc4, 0x461ebe19, 0xe04ab1cb, 0x91641da3, 0x37301271, 0x5c8d43ac,
13446 +
            0xfad94c7e, 0x287e9afb, 0x8e2a9529, 0xe597c4f4, 0x43c3cb26, 0x32ed674e, 0x94b9689c,
13447 +
            0xff043941, 0x59503693, 0x1d596191, 0xbb0d6e43, 0xd0b03f9e, 0x76e4304c, 0x07ca9c24,
13448 +
            0xa19e93f6, 0xca23c22b, 0x6c77cdf9, 0x42316c2f, 0xe46563fd, 0x8fd83220, 0x298c3df2,
13449 +
            0x58a2919a, 0xfef69e48, 0x954bcf95, 0x331fc047, 0x77169745, 0xd1429897, 0xbaffc94a,
13450 +
            0x1cabc698, 0x6d856af0, 0xcbd16522, 0xa06c34ff, 0x06383b2d, 0xfce17753, 0x5ab57881,
13451 +
            0x3108295c, 0x975c268e, 0xe6728ae6, 0x40268534, 0x2b9bd4e9, 0x8dcfdb3b, 0xc9c68c39,
13452 +
            0x6f9283eb, 0x042fd236, 0xa27bdde4, 0xd355718c, 0x75017e5e, 0x1ebc2f83, 0xb8e82051,
13453 +
            0x96ae8187, 0x30fa8e55, 0x5b47df88, 0xfd13d05a, 0x8c3d7c32, 0x2a6973e0, 0x41d4223d,
13454 +
            0xe7802def, 0xa3897aed, 0x05dd753f, 0x6e6024e2, 0xc8342b30, 0xb91a8758, 0x1f4e888a,
13455 +
            0x74f3d957, 0xd2a7d685, 0x50fd35f6, 0xf6a93a24, 0x9d146bf9, 0x3b40642b, 0x4a6ec843,
13456 +
            0xec3ac791, 0x8787964c, 0x21d3999e, 0x65dace9c, 0xc38ec14e, 0xa8339093, 0x0e679f41,
13457 +
            0x7f493329, 0xd91d3cfb, 0xb2a06d26, 0x14f462f4, 0x3ab2c322, 0x9ce6ccf0, 0xf75b9d2d,
13458 +
            0x510f92ff, 0x20213e97, 0x86753145, 0xedc86098, 0x4b9c6f4a, 0x0f953848, 0xa9c1379a,
13459 +
            0xc27c6647, 0x64286995, 0x1506c5fd, 0xb352ca2f, 0xd8ef9bf2, 0x7ebb9420, 0x8462d85e,
13460 +
            0x2236d78c, 0x498b8651, 0xefdf8983, 0x9ef125eb, 0x38a52a39, 0x53187be4, 0xf54c7436,
13461 +
            0xb1452334, 0x17112ce6, 0x7cac7d3b, 0xdaf872e9, 0xabd6de81, 0x0d82d153, 0x663f808e,
13462 +
            0xc06b8f5c, 0xee2d2e8a, 0x48792158, 0x23c47085, 0x85907f57, 0xf4bed33f, 0x52eadced,
13463 +
            0x39578d30, 0x9f0382e2, 0xdb0ad5e0, 0x7d5eda32, 0x16e38bef, 0xb0b7843d, 0xc1992855,
13464 +
            0x67cd2787, 0x0c70765a, 0xaa247988, 0x7883af0d, 0xded7a0df, 0xb56af102, 0x133efed0,
13465 +
            0x621052b8, 0xc4445d6a, 0xaff90cb7, 0x09ad0365, 0x4da45467, 0xebf05bb5, 0x804d0a68,
13466 +
            0x261905ba, 0x5737a9d2, 0xf163a600, 0x9adef7dd, 0x3c8af80f, 0x12cc59d9, 0xb498560b,
13467 +
            0xdf2507d6, 0x79710804, 0x085fa46c, 0xae0babbe, 0xc5b6fa63, 0x63e2f5b1, 0x27eba2b3,
13468 +
            0x81bfad61, 0xea02fcbc, 0x4c56f36e, 0x3d785f06, 0x9b2c50d4, 0xf0910109, 0x56c50edb,
13469 +
            0xac1c42a5, 0x0a484d77, 0x61f51caa, 0xc7a11378, 0xb68fbf10, 0x10dbb0c2, 0x7b66e11f,
13470 +
            0xdd32eecd, 0x993bb9cf, 0x3f6fb61d, 0x54d2e7c0, 0xf286e812, 0x83a8447a, 0x25fc4ba8,
13471 +
            0x4e411a75, 0xe81515a7, 0xc653b471, 0x6007bba3, 0x0bbaea7e, 0xadeee5ac, 0xdcc049c4,
13472 +
            0x7a944616, 0x112917cb, 0xb77d1819, 0xf3744f1b, 0x552040c9, 0x3e9d1114, 0x98c91ec6,
13473 +
            0xe9e7b2ae, 0x4fb3bd7c, 0x240eeca1, 0x825ae373,
13474 +
        ],
13475 +
        [
13476 +
            0x00000000, 0xa1fa6bec, 0xc2b59673, 0x634ffd9f, 0x042a6d4d, 0xa5d006a1, 0xc69ffb3e,
13477 +
            0x676590d2, 0x0854da9a, 0xa9aeb176, 0xcae14ce9, 0x6b1b2705, 0x0c7eb7d7, 0xad84dc3b,
13478 +
            0xcecb21a4, 0x6f314a48, 0x10a9b534, 0xb153ded8, 0xd21c2347, 0x73e648ab, 0x1483d879,
13479 +
            0xb579b395, 0xd6364e0a, 0x77cc25e6, 0x18fd6fae, 0xb9070442, 0xda48f9dd, 0x7bb29231,
13480 +
            0x1cd702e3, 0xbd2d690f, 0xde629490, 0x7f98ff7c, 0x21536a68, 0x80a90184, 0xe3e6fc1b,
13481 +
            0x421c97f7, 0x25790725, 0x84836cc9, 0xe7cc9156, 0x4636faba, 0x2907b0f2, 0x88fddb1e,
13482 +
            0xebb22681, 0x4a484d6d, 0x2d2dddbf, 0x8cd7b653, 0xef984bcc, 0x4e622020, 0x31fadf5c,
13483 +
            0x9000b4b0, 0xf34f492f, 0x52b522c3, 0x35d0b211, 0x942ad9fd, 0xf7652462, 0x569f4f8e,
13484 +
            0x39ae05c6, 0x98546e2a, 0xfb1b93b5, 0x5ae1f859, 0x3d84688b, 0x9c7e0367, 0xff31fef8,
13485 +
            0x5ecb9514, 0x42a6d4d0, 0xe35cbf3c, 0x801342a3, 0x21e9294f, 0x468cb99d, 0xe776d271,
13486 +
            0x84392fee, 0x25c34402, 0x4af20e4a, 0xeb0865a6, 0x88479839, 0x29bdf3d5, 0x4ed86307,
13487 +
            0xef2208eb, 0x8c6df574, 0x2d979e98, 0x520f61e4, 0xf3f50a08, 0x90baf797, 0x31409c7b,
13488 +
            0x56250ca9, 0xf7df6745, 0x94909ada, 0x356af136, 0x5a5bbb7e, 0xfba1d092, 0x98ee2d0d,
13489 +
            0x391446e1, 0x5e71d633, 0xff8bbddf, 0x9cc44040, 0x3d3e2bac, 0x63f5beb8, 0xc20fd554,
13490 +
            0xa14028cb, 0x00ba4327, 0x67dfd3f5, 0xc625b819, 0xa56a4586, 0x04902e6a, 0x6ba16422,
13491 +
            0xca5b0fce, 0xa914f251, 0x08ee99bd, 0x6f8b096f, 0xce716283, 0xad3e9f1c, 0x0cc4f4f0,
13492 +
            0x735c0b8c, 0xd2a66060, 0xb1e99dff, 0x1013f613, 0x777666c1, 0xd68c0d2d, 0xb5c3f0b2,
13493 +
            0x14399b5e, 0x7b08d116, 0xdaf2bafa, 0xb9bd4765, 0x18472c89, 0x7f22bc5b, 0xded8d7b7,
13494 +
            0xbd972a28, 0x1c6d41c4, 0x854da9a0, 0x24b7c24c, 0x47f83fd3, 0xe602543f, 0x8167c4ed,
13495 +
            0x209daf01, 0x43d2529e, 0xe2283972, 0x8d19733a, 0x2ce318d6, 0x4face549, 0xee568ea5,
13496 +
            0x89331e77, 0x28c9759b, 0x4b868804, 0xea7ce3e8, 0x95e41c94, 0x341e7778, 0x57518ae7,
13497 +
            0xf6abe10b, 0x91ce71d9, 0x30341a35, 0x537be7aa, 0xf2818c46, 0x9db0c60e, 0x3c4aade2,
13498 +
            0x5f05507d, 0xfeff3b91, 0x999aab43, 0x3860c0af, 0x5b2f3d30, 0xfad556dc, 0xa41ec3c8,
13499 +
            0x05e4a824, 0x66ab55bb, 0xc7513e57, 0xa034ae85, 0x01cec569, 0x628138f6, 0xc37b531a,
13500 +
            0xac4a1952, 0x0db072be, 0x6eff8f21, 0xcf05e4cd, 0xa860741f, 0x099a1ff3, 0x6ad5e26c,
13501 +
            0xcb2f8980, 0xb4b776fc, 0x154d1d10, 0x7602e08f, 0xd7f88b63, 0xb09d1bb1, 0x1167705d,
13502 +
            0x72288dc2, 0xd3d2e62e, 0xbce3ac66, 0x1d19c78a, 0x7e563a15, 0xdfac51f9, 0xb8c9c12b,
13503 +
            0x1933aac7, 0x7a7c5758, 0xdb863cb4, 0xc7eb7d70, 0x6611169c, 0x055eeb03, 0xa4a480ef,
13504 +
            0xc3c1103d, 0x623b7bd1, 0x0174864e, 0xa08eeda2, 0xcfbfa7ea, 0x6e45cc06, 0x0d0a3199,
13505 +
            0xacf05a75, 0xcb95caa7, 0x6a6fa14b, 0x09205cd4, 0xa8da3738, 0xd742c844, 0x76b8a3a8,
13506 +
            0x15f75e37, 0xb40d35db, 0xd368a509, 0x7292cee5, 0x11dd337a, 0xb0275896, 0xdf1612de,
13507 +
            0x7eec7932, 0x1da384ad, 0xbc59ef41, 0xdb3c7f93, 0x7ac6147f, 0x1989e9e0, 0xb873820c,
13508 +
            0xe6b81718, 0x47427cf4, 0x240d816b, 0x85f7ea87, 0xe2927a55, 0x436811b9, 0x2027ec26,
13509 +
            0x81dd87ca, 0xeeeccd82, 0x4f16a66e, 0x2c595bf1, 0x8da3301d, 0xeac6a0cf, 0x4b3ccb23,
13510 +
            0x287336bc, 0x89895d50, 0xf611a22c, 0x57ebc9c0, 0x34a4345f, 0x955e5fb3, 0xf23bcf61,
13511 +
            0x53c1a48d, 0x308e5912, 0x917432fe, 0xfe4578b6, 0x5fbf135a, 0x3cf0eec5, 0x9d0a8529,
13512 +
            0xfa6f15fb, 0x5b957e17, 0x38da8388, 0x9920e864,
13513 +
        ],
13514 +
        [
13515 +
            0x00000000, 0x8bda12eb, 0x96f5647d, 0x1d2f7696, 0xacab8951, 0x27719bba, 0x3a5eed2c,
13516 +
            0xb184ffc7, 0xd8165309, 0x53cc41e2, 0x4ee33774, 0xc539259f, 0x74bdda58, 0xff67c8b3,
13517 +
            0xe248be25, 0x6992acce, 0x316de7b9, 0xbab7f552, 0xa79883c4, 0x2c42912f, 0x9dc66ee8,
13518 +
            0x161c7c03, 0x0b330a95, 0x80e9187e, 0xe97bb4b0, 0x62a1a65b, 0x7f8ed0cd, 0xf454c226,
13519 +
            0x45d03de1, 0xce0a2f0a, 0xd325599c, 0x58ff4b77, 0x62dbcf72, 0xe901dd99, 0xf42eab0f,
13520 +
            0x7ff4b9e4, 0xce704623, 0x45aa54c8, 0x5885225e, 0xd35f30b5, 0xbacd9c7b, 0x31178e90,
13521 +
            0x2c38f806, 0xa7e2eaed, 0x1666152a, 0x9dbc07c1, 0x80937157, 0x0b4963bc, 0x53b628cb,
13522 +
            0xd86c3a20, 0xc5434cb6, 0x4e995e5d, 0xff1da19a, 0x74c7b371, 0x69e8c5e7, 0xe232d70c,
13523 +
            0x8ba07bc2, 0x007a6929, 0x1d551fbf, 0x968f0d54, 0x270bf293, 0xacd1e078, 0xb1fe96ee,
13524 +
            0x3a248405, 0xc5b79ee4, 0x4e6d8c0f, 0x5342fa99, 0xd898e872, 0x691c17b5, 0xe2c6055e,
13525 +
            0xffe973c8, 0x74336123, 0x1da1cded, 0x967bdf06, 0x8b54a990, 0x008ebb7b, 0xb10a44bc,
13526 +
            0x3ad05657, 0x27ff20c1, 0xac25322a, 0xf4da795d, 0x7f006bb6, 0x622f1d20, 0xe9f50fcb,
13527 +
            0x5871f00c, 0xd3abe2e7, 0xce849471, 0x455e869a, 0x2ccc2a54, 0xa71638bf, 0xba394e29,
13528 +
            0x31e35cc2, 0x8067a305, 0x0bbdb1ee, 0x1692c778, 0x9d48d593, 0xa76c5196, 0x2cb6437d,
13529 +
            0x319935eb, 0xba432700, 0x0bc7d8c7, 0x801dca2c, 0x9d32bcba, 0x16e8ae51, 0x7f7a029f,
13530 +
            0xf4a01074, 0xe98f66e2, 0x62557409, 0xd3d18bce, 0x580b9925, 0x4524efb3, 0xcefefd58,
13531 +
            0x9601b62f, 0x1ddba4c4, 0x00f4d252, 0x8b2ec0b9, 0x3aaa3f7e, 0xb1702d95, 0xac5f5b03,
13532 +
            0x278549e8, 0x4e17e526, 0xc5cdf7cd, 0xd8e2815b, 0x533893b0, 0xe2bc6c77, 0x69667e9c,
13533 +
            0x7449080a, 0xff931ae1, 0x0a2e7c63, 0x81f46e88, 0x9cdb181e, 0x17010af5, 0xa685f532,
13534 +
            0x2d5fe7d9, 0x3070914f, 0xbbaa83a4, 0xd2382f6a, 0x59e23d81, 0x44cd4b17, 0xcf1759fc,
13535 +
            0x7e93a63b, 0xf549b4d0, 0xe866c246, 0x63bcd0ad, 0x3b439bda, 0xb0998931, 0xadb6ffa7,
13536 +
            0x266ced4c, 0x97e8128b, 0x1c320060, 0x011d76f6, 0x8ac7641d, 0xe355c8d3, 0x688fda38,
13537 +
            0x75a0acae, 0xfe7abe45, 0x4ffe4182, 0xc4245369, 0xd90b25ff, 0x52d13714, 0x68f5b311,
13538 +
            0xe32fa1fa, 0xfe00d76c, 0x75dac587, 0xc45e3a40, 0x4f8428ab, 0x52ab5e3d, 0xd9714cd6,
13539 +
            0xb0e3e018, 0x3b39f2f3, 0x26168465, 0xadcc968e, 0x1c486949, 0x97927ba2, 0x8abd0d34,
13540 +
            0x01671fdf, 0x599854a8, 0xd2424643, 0xcf6d30d5, 0x44b7223e, 0xf533ddf9, 0x7ee9cf12,
13541 +
            0x63c6b984, 0xe81cab6f, 0x818e07a1, 0x0a54154a, 0x177b63dc, 0x9ca17137, 0x2d258ef0,
13542 +
            0xa6ff9c1b, 0xbbd0ea8d, 0x300af866, 0xcf99e287, 0x4443f06c, 0x596c86fa, 0xd2b69411,
13543 +
            0x63326bd6, 0xe8e8793d, 0xf5c70fab, 0x7e1d1d40, 0x178fb18e, 0x9c55a365, 0x817ad5f3,
13544 +
            0x0aa0c718, 0xbb2438df, 0x30fe2a34, 0x2dd15ca2, 0xa60b4e49, 0xfef4053e, 0x752e17d5,
13545 +
            0x68016143, 0xe3db73a8, 0x525f8c6f, 0xd9859e84, 0xc4aae812, 0x4f70faf9, 0x26e25637,
13546 +
            0xad3844dc, 0xb017324a, 0x3bcd20a1, 0x8a49df66, 0x0193cd8d, 0x1cbcbb1b, 0x9766a9f0,
13547 +
            0xad422df5, 0x26983f1e, 0x3bb74988, 0xb06d5b63, 0x01e9a4a4, 0x8a33b64f, 0x971cc0d9,
13548 +
            0x1cc6d232, 0x75547efc, 0xfe8e6c17, 0xe3a11a81, 0x687b086a, 0xd9fff7ad, 0x5225e546,
13549 +
            0x4f0a93d0, 0xc4d0813b, 0x9c2fca4c, 0x17f5d8a7, 0x0adaae31, 0x8100bcda, 0x3084431d,
13550 +
            0xbb5e51f6, 0xa6712760, 0x2dab358b, 0x44399945, 0xcfe38bae, 0xd2ccfd38, 0x5916efd3,
13551 +
            0xe8921014, 0x634802ff, 0x7e677469, 0xf5bd6682,
13552 +
        ],
13553 +
        [
13554 +
            0x00000000, 0x145cf8c6, 0x28b9f18c, 0x3ce5094a, 0x5173e318, 0x452f1bde, 0x79ca1294,
13555 +
            0x6d96ea52, 0xa2e7c630, 0xb6bb3ef6, 0x8a5e37bc, 0x9e02cf7a, 0xf3942528, 0xe7c8ddee,
13556 +
            0xdb2dd4a4, 0xcf712c62, 0xc48ecdcb, 0xd0d2350d, 0xec373c47, 0xf86bc481, 0x95fd2ed3,
13557 +
            0x81a1d615, 0xbd44df5f, 0xa9182799, 0x66690bfb, 0x7235f33d, 0x4ed0fa77, 0x5a8c02b1,
13558 +
            0x371ae8e3, 0x23461025, 0x1fa3196f, 0x0bffe1a9, 0x085cda3d, 0x1c0022fb, 0x20e52bb1,
13559 +
            0x34b9d377, 0x592f3925, 0x4d73c1e3, 0x7196c8a9, 0x65ca306f, 0xaabb1c0d, 0xbee7e4cb,
13560 +
            0x8202ed81, 0x965e1547, 0xfbc8ff15, 0xef9407d3, 0xd3710e99, 0xc72df65f, 0xccd217f6,
13561 +
            0xd88eef30, 0xe46be67a, 0xf0371ebc, 0x9da1f4ee, 0x89fd0c28, 0xb5180562, 0xa144fda4,
13562 +
            0x6e35d1c6, 0x7a692900, 0x468c204a, 0x52d0d88c, 0x3f4632de, 0x2b1aca18, 0x17ffc352,
13563 +
            0x03a33b94, 0x10b9b47a, 0x04e54cbc, 0x380045f6, 0x2c5cbd30, 0x41ca5762, 0x5596afa4,
13564 +
            0x6973a6ee, 0x7d2f5e28, 0xb25e724a, 0xa6028a8c, 0x9ae783c6, 0x8ebb7b00, 0xe32d9152,
13565 +
            0xf7716994, 0xcb9460de, 0xdfc89818, 0xd43779b1, 0xc06b8177, 0xfc8e883d, 0xe8d270fb,
13566 +
            0x85449aa9, 0x9118626f, 0xadfd6b25, 0xb9a193e3, 0x76d0bf81, 0x628c4747, 0x5e694e0d,
13567 +
            0x4a35b6cb, 0x27a35c99, 0x33ffa45f, 0x0f1aad15, 0x1b4655d3, 0x18e56e47, 0x0cb99681,
13568 +
            0x305c9fcb, 0x2400670d, 0x49968d5f, 0x5dca7599, 0x612f7cd3, 0x75738415, 0xba02a877,
13569 +
            0xae5e50b1, 0x92bb59fb, 0x86e7a13d, 0xeb714b6f, 0xff2db3a9, 0xc3c8bae3, 0xd7944225,
13570 +
            0xdc6ba38c, 0xc8375b4a, 0xf4d25200, 0xe08eaac6, 0x8d184094, 0x9944b852, 0xa5a1b118,
13571 +
            0xb1fd49de, 0x7e8c65bc, 0x6ad09d7a, 0x56359430, 0x42696cf6, 0x2fff86a4, 0x3ba37e62,
13572 +
            0x07467728, 0x131a8fee, 0x217368f4, 0x352f9032, 0x09ca9978, 0x1d9661be, 0x70008bec,
13573 +
            0x645c732a, 0x58b97a60, 0x4ce582a6, 0x8394aec4, 0x97c85602, 0xab2d5f48, 0xbf71a78e,
13574 +
            0xd2e74ddc, 0xc6bbb51a, 0xfa5ebc50, 0xee024496, 0xe5fda53f, 0xf1a15df9, 0xcd4454b3,
13575 +
            0xd918ac75, 0xb48e4627, 0xa0d2bee1, 0x9c37b7ab, 0x886b4f6d, 0x471a630f, 0x53469bc9,
13576 +
            0x6fa39283, 0x7bff6a45, 0x16698017, 0x023578d1, 0x3ed0719b, 0x2a8c895d, 0x292fb2c9,
13577 +
            0x3d734a0f, 0x01964345, 0x15cabb83, 0x785c51d1, 0x6c00a917, 0x50e5a05d, 0x44b9589b,
13578 +
            0x8bc874f9, 0x9f948c3f, 0xa3718575, 0xb72d7db3, 0xdabb97e1, 0xcee76f27, 0xf202666d,
13579 +
            0xe65e9eab, 0xeda17f02, 0xf9fd87c4, 0xc5188e8e, 0xd1447648, 0xbcd29c1a, 0xa88e64dc,
13580 +
            0x946b6d96, 0x80379550, 0x4f46b932, 0x5b1a41f4, 0x67ff48be, 0x73a3b078, 0x1e355a2a,
13581 +
            0x0a69a2ec, 0x368caba6, 0x22d05360, 0x31cadc8e, 0x25962448, 0x19732d02, 0x0d2fd5c4,
13582 +
            0x60b93f96, 0x74e5c750, 0x4800ce1a, 0x5c5c36dc, 0x932d1abe, 0x8771e278, 0xbb94eb32,
13583 +
            0xafc813f4, 0xc25ef9a6, 0xd6020160, 0xeae7082a, 0xfebbf0ec, 0xf5441145, 0xe118e983,
13584 +
            0xddfde0c9, 0xc9a1180f, 0xa437f25d, 0xb06b0a9b, 0x8c8e03d1, 0x98d2fb17, 0x57a3d775,
13585 +
            0x43ff2fb3, 0x7f1a26f9, 0x6b46de3f, 0x06d0346d, 0x128cccab, 0x2e69c5e1, 0x3a353d27,
13586 +
            0x399606b3, 0x2dcafe75, 0x112ff73f, 0x05730ff9, 0x68e5e5ab, 0x7cb91d6d, 0x405c1427,
13587 +
            0x5400ece1, 0x9b71c083, 0x8f2d3845, 0xb3c8310f, 0xa794c9c9, 0xca02239b, 0xde5edb5d,
13588 +
            0xe2bbd217, 0xf6e72ad1, 0xfd18cb78, 0xe94433be, 0xd5a13af4, 0xc1fdc232, 0xac6b2860,
13589 +
            0xb837d0a6, 0x84d2d9ec, 0x908e212a, 0x5fff0d48, 0x4ba3f58e, 0x7746fcc4, 0x631a0402,
13590 +
            0x0e8cee50, 0x1ad01696, 0x26351fdc, 0x3269e71a,
13591 +
        ],
13592 +
        [
13593 +
            0x00000000, 0x42e6d1e8, 0x85cda3d0, 0xc72b7238, 0x8ada060b, 0xc83cd7e3, 0x0f17a5db,
13594 +
            0x4df17433, 0x94f54dbd, 0xd6139c55, 0x1138ee6d, 0x53de3f85, 0x1e2f4bb6, 0x5cc99a5e,
13595 +
            0x9be2e866, 0xd904398e, 0xa8abdad1, 0xea4d0b39, 0x2d667901, 0x6f80a8e9, 0x2271dcda,
13596 +
            0x60970d32, 0xa7bc7f0a, 0xe55aaee2, 0x3c5e976c, 0x7eb84684, 0xb99334bc, 0xfb75e554,
13597 +
            0xb6849167, 0xf462408f, 0x334932b7, 0x71afe35f, 0xd016f409, 0x92f025e1, 0x55db57d9,
13598 +
            0x173d8631, 0x5accf202, 0x182a23ea, 0xdf0151d2, 0x9de7803a, 0x44e3b9b4, 0x0605685c,
13599 +
            0xc12e1a64, 0x83c8cb8c, 0xce39bfbf, 0x8cdf6e57, 0x4bf41c6f, 0x0912cd87, 0x78bd2ed8,
13600 +
            0x3a5bff30, 0xfd708d08, 0xbf965ce0, 0xf26728d3, 0xb081f93b, 0x77aa8b03, 0x354c5aeb,
13601 +
            0xec486365, 0xaeaeb28d, 0x6985c0b5, 0x2b63115d, 0x6692656e, 0x2474b486, 0xe35fc6be,
13602 +
            0xa1b91756, 0x216ca9b9, 0x638a7851, 0xa4a10a69, 0xe647db81, 0xabb6afb2, 0xe9507e5a,
13603 +
            0x2e7b0c62, 0x6c9ddd8a, 0xb599e404, 0xf77f35ec, 0x305447d4, 0x72b2963c, 0x3f43e20f,
13604 +
            0x7da533e7, 0xba8e41df, 0xf8689037, 0x89c77368, 0xcb21a280, 0x0c0ad0b8, 0x4eec0150,
13605 +
            0x031d7563, 0x41fba48b, 0x86d0d6b3, 0xc436075b, 0x1d323ed5, 0x5fd4ef3d, 0x98ff9d05,
13606 +
            0xda194ced, 0x97e838de, 0xd50ee936, 0x12259b0e, 0x50c34ae6, 0xf17a5db0, 0xb39c8c58,
13607 +
            0x74b7fe60, 0x36512f88, 0x7ba05bbb, 0x39468a53, 0xfe6df86b, 0xbc8b2983, 0x658f100d,
13608 +
            0x2769c1e5, 0xe042b3dd, 0xa2a46235, 0xef551606, 0xadb3c7ee, 0x6a98b5d6, 0x287e643e,
13609 +
            0x59d18761, 0x1b375689, 0xdc1c24b1, 0x9efaf559, 0xd30b816a, 0x91ed5082, 0x56c622ba,
13610 +
            0x1420f352, 0xcd24cadc, 0x8fc21b34, 0x48e9690c, 0x0a0fb8e4, 0x47feccd7, 0x05181d3f,
13611 +
            0xc2336f07, 0x80d5beef, 0x42d95372, 0x003f829a, 0xc714f0a2, 0x85f2214a, 0xc8035579,
13612 +
            0x8ae58491, 0x4dcef6a9, 0x0f282741, 0xd62c1ecf, 0x94cacf27, 0x53e1bd1f, 0x11076cf7,
13613 +
            0x5cf618c4, 0x1e10c92c, 0xd93bbb14, 0x9bdd6afc, 0xea7289a3, 0xa894584b, 0x6fbf2a73,
13614 +
            0x2d59fb9b, 0x60a88fa8, 0x224e5e40, 0xe5652c78, 0xa783fd90, 0x7e87c41e, 0x3c6115f6,
13615 +
            0xfb4a67ce, 0xb9acb626, 0xf45dc215, 0xb6bb13fd, 0x719061c5, 0x3376b02d, 0x92cfa77b,
13616 +
            0xd0297693, 0x170204ab, 0x55e4d543, 0x1815a170, 0x5af37098, 0x9dd802a0, 0xdf3ed348,
13617 +
            0x063aeac6, 0x44dc3b2e, 0x83f74916, 0xc11198fe, 0x8ce0eccd, 0xce063d25, 0x092d4f1d,
13618 +
            0x4bcb9ef5, 0x3a647daa, 0x7882ac42, 0xbfa9de7a, 0xfd4f0f92, 0xb0be7ba1, 0xf258aa49,
13619 +
            0x3573d871, 0x77950999, 0xae913017, 0xec77e1ff, 0x2b5c93c7, 0x69ba422f, 0x244b361c,
13620 +
            0x66ade7f4, 0xa18695cc, 0xe3604424, 0x63b5facb, 0x21532b23, 0xe678591b, 0xa49e88f3,
13621 +
            0xe96ffcc0, 0xab892d28, 0x6ca25f10, 0x2e448ef8, 0xf740b776, 0xb5a6669e, 0x728d14a6,
13622 +
            0x306bc54e, 0x7d9ab17d, 0x3f7c6095, 0xf85712ad, 0xbab1c345, 0xcb1e201a, 0x89f8f1f2,
13623 +
            0x4ed383ca, 0x0c355222, 0x41c42611, 0x0322f7f9, 0xc40985c1, 0x86ef5429, 0x5feb6da7,
13624 +
            0x1d0dbc4f, 0xda26ce77, 0x98c01f9f, 0xd5316bac, 0x97d7ba44, 0x50fcc87c, 0x121a1994,
13625 +
            0xb3a30ec2, 0xf145df2a, 0x366ead12, 0x74887cfa, 0x397908c9, 0x7b9fd921, 0xbcb4ab19,
13626 +
            0xfe527af1, 0x2756437f, 0x65b09297, 0xa29be0af, 0xe07d3147, 0xad8c4574, 0xef6a949c,
13627 +
            0x2841e6a4, 0x6aa7374c, 0x1b08d413, 0x59ee05fb, 0x9ec577c3, 0xdc23a62b, 0x91d2d218,
13628 +
            0xd33403f0, 0x141f71c8, 0x56f9a020, 0x8ffd99ae, 0xcd1b4846, 0x0a303a7e, 0x48d6eb96,
13629 +
            0x05279fa5, 0x47c14e4d, 0x80ea3c75, 0xc20ced9d,
13630 +
        ],
13631 +
    ];
13632 +
13633 +
    pub static CRC32_AUTOSAR_TABLE: [[u32; 256]; 16] = [
13634 +
        [
13635 +
            0x00000000, 0x30850ff5, 0x610a1fea, 0x518f101f, 0xc2143fd4, 0xf2913021, 0xa31e203e,
13636 +
            0x939b2fcb, 0x159615f7, 0x25131a02, 0x749c0a1d, 0x441905e8, 0xd7822a23, 0xe70725d6,
13637 +
            0xb68835c9, 0x860d3a3c, 0x2b2c2bee, 0x1ba9241b, 0x4a263404, 0x7aa33bf1, 0xe938143a,
13638 +
            0xd9bd1bcf, 0x88320bd0, 0xb8b70425, 0x3eba3e19, 0x0e3f31ec, 0x5fb021f3, 0x6f352e06,
13639 +
            0xfcae01cd, 0xcc2b0e38, 0x9da41e27, 0xad2111d2, 0x565857dc, 0x66dd5829, 0x37524836,
13640 +
            0x07d747c3, 0x944c6808, 0xa4c967fd, 0xf54677e2, 0xc5c37817, 0x43ce422b, 0x734b4dde,
13641 +
            0x22c45dc1, 0x12415234, 0x81da7dff, 0xb15f720a, 0xe0d06215, 0xd0556de0, 0x7d747c32,
13642 +
            0x4df173c7, 0x1c7e63d8, 0x2cfb6c2d, 0xbf6043e6, 0x8fe54c13, 0xde6a5c0c, 0xeeef53f9,
13643 +
            0x68e269c5, 0x58676630, 0x09e8762f, 0x396d79da, 0xaaf65611, 0x9a7359e4, 0xcbfc49fb,
13644 +
            0xfb79460e, 0xacb0afb8, 0x9c35a04d, 0xcdbab052, 0xfd3fbfa7, 0x6ea4906c, 0x5e219f99,
13645 +
            0x0fae8f86, 0x3f2b8073, 0xb926ba4f, 0x89a3b5ba, 0xd82ca5a5, 0xe8a9aa50, 0x7b32859b,
13646 +
            0x4bb78a6e, 0x1a389a71, 0x2abd9584, 0x879c8456, 0xb7198ba3, 0xe6969bbc, 0xd6139449,
13647 +
            0x4588bb82, 0x750db477, 0x2482a468, 0x1407ab9d, 0x920a91a1, 0xa28f9e54, 0xf3008e4b,
13648 +
            0xc38581be, 0x501eae75, 0x609ba180, 0x3114b19f, 0x0191be6a, 0xfae8f864, 0xca6df791,
13649 +
            0x9be2e78e, 0xab67e87b, 0x38fcc7b0, 0x0879c845, 0x59f6d85a, 0x6973d7af, 0xef7eed93,
13650 +
            0xdffbe266, 0x8e74f279, 0xbef1fd8c, 0x2d6ad247, 0x1defddb2, 0x4c60cdad, 0x7ce5c258,
13651 +
            0xd1c4d38a, 0xe141dc7f, 0xb0cecc60, 0x804bc395, 0x13d0ec5e, 0x2355e3ab, 0x72daf3b4,
13652 +
            0x425ffc41, 0xc452c67d, 0xf4d7c988, 0xa558d997, 0x95ddd662, 0x0646f9a9, 0x36c3f65c,
13653 +
            0x674ce643, 0x57c9e9b6, 0xc8df352f, 0xf85a3ada, 0xa9d52ac5, 0x99502530, 0x0acb0afb,
13654 +
            0x3a4e050e, 0x6bc11511, 0x5b441ae4, 0xdd4920d8, 0xedcc2f2d, 0xbc433f32, 0x8cc630c7,
13655 +
            0x1f5d1f0c, 0x2fd810f9, 0x7e5700e6, 0x4ed20f13, 0xe3f31ec1, 0xd3761134, 0x82f9012b,
13656 +
            0xb27c0ede, 0x21e72115, 0x11622ee0, 0x40ed3eff, 0x7068310a, 0xf6650b36, 0xc6e004c3,
13657 +
            0x976f14dc, 0xa7ea1b29, 0x347134e2, 0x04f43b17, 0x557b2b08, 0x65fe24fd, 0x9e8762f3,
13658 +
            0xae026d06, 0xff8d7d19, 0xcf0872ec, 0x5c935d27, 0x6c1652d2, 0x3d9942cd, 0x0d1c4d38,
13659 +
            0x8b117704, 0xbb9478f1, 0xea1b68ee, 0xda9e671b, 0x490548d0, 0x79804725, 0x280f573a,
13660 +
            0x188a58cf, 0xb5ab491d, 0x852e46e8, 0xd4a156f7, 0xe4245902, 0x77bf76c9, 0x473a793c,
13661 +
            0x16b56923, 0x263066d6, 0xa03d5cea, 0x90b8531f, 0xc1374300, 0xf1b24cf5, 0x6229633e,
13662 +
            0x52ac6ccb, 0x03237cd4, 0x33a67321, 0x646f9a97, 0x54ea9562, 0x0565857d, 0x35e08a88,
13663 +
            0xa67ba543, 0x96feaab6, 0xc771baa9, 0xf7f4b55c, 0x71f98f60, 0x417c8095, 0x10f3908a,
13664 +
            0x20769f7f, 0xb3edb0b4, 0x8368bf41, 0xd2e7af5e, 0xe262a0ab, 0x4f43b179, 0x7fc6be8c,
13665 +
            0x2e49ae93, 0x1ecca166, 0x8d578ead, 0xbdd28158, 0xec5d9147, 0xdcd89eb2, 0x5ad5a48e,
13666 +
            0x6a50ab7b, 0x3bdfbb64, 0x0b5ab491, 0x98c19b5a, 0xa84494af, 0xf9cb84b0, 0xc94e8b45,
13667 +
            0x3237cd4b, 0x02b2c2be, 0x533dd2a1, 0x63b8dd54, 0xf023f29f, 0xc0a6fd6a, 0x9129ed75,
13668 +
            0xa1ace280, 0x27a1d8bc, 0x1724d749, 0x46abc756, 0x762ec8a3, 0xe5b5e768, 0xd530e89d,
13669 +
            0x84bff882, 0xb43af777, 0x191be6a5, 0x299ee950, 0x7811f94f, 0x4894f6ba, 0xdb0fd971,
13670 +
            0xeb8ad684, 0xba05c69b, 0x8a80c96e, 0x0c8df352, 0x3c08fca7, 0x6d87ecb8, 0x5d02e34d,
13671 +
            0xce99cc86, 0xfe1cc373, 0xaf93d36c, 0x9f16dc99,
13672 +
        ],
13673 +
        [
13674 +
            0x00000000, 0xebba538b, 0x46cacd49, 0xad709ec2, 0x8d959a92, 0x662fc919, 0xcb5f57db,
13675 +
            0x20e50450, 0x8a955f7b, 0x612f0cf0, 0xcc5f9232, 0x27e5c1b9, 0x0700c5e9, 0xecba9662,
13676 +
            0x41ca08a0, 0xaa705b2b, 0x8494d4a9, 0x6f2e8722, 0xc25e19e0, 0x29e44a6b, 0x09014e3b,
13677 +
            0xe2bb1db0, 0x4fcb8372, 0xa471d0f9, 0x0e018bd2, 0xe5bbd859, 0x48cb469b, 0xa3711510,
13678 +
            0x83941140, 0x682e42cb, 0xc55edc09, 0x2ee48f82, 0x9897c30d, 0x732d9086, 0xde5d0e44,
13679 +
            0x35e75dcf, 0x1502599f, 0xfeb80a14, 0x53c894d6, 0xb872c75d, 0x12029c76, 0xf9b8cffd,
13680 +
            0x54c8513f, 0xbf7202b4, 0x9f9706e4, 0x742d556f, 0xd95dcbad, 0x32e79826, 0x1c0317a4,
13681 +
            0xf7b9442f, 0x5ac9daed, 0xb1738966, 0x91968d36, 0x7a2cdebd, 0xd75c407f, 0x3ce613f4,
13682 +
            0x969648df, 0x7d2c1b54, 0xd05c8596, 0x3be6d61d, 0x1b03d24d, 0xf0b981c6, 0x5dc91f04,
13683 +
            0xb6734c8f, 0xa091ec45, 0x4b2bbfce, 0xe65b210c, 0x0de17287, 0x2d0476d7, 0xc6be255c,
13684 +
            0x6bcebb9e, 0x8074e815, 0x2a04b33e, 0xc1bee0b5, 0x6cce7e77, 0x87742dfc, 0xa79129ac,
13685 +
            0x4c2b7a27, 0xe15be4e5, 0x0ae1b76e, 0x240538ec, 0xcfbf6b67, 0x62cff5a5, 0x8975a62e,
13686 +
            0xa990a27e, 0x422af1f5, 0xef5a6f37, 0x04e03cbc, 0xae906797, 0x452a341c, 0xe85aaade,
13687 +
            0x03e0f955, 0x2305fd05, 0xc8bfae8e, 0x65cf304c, 0x8e7563c7, 0x38062f48, 0xd3bc7cc3,
13688 +
            0x7ecce201, 0x9576b18a, 0xb593b5da, 0x5e29e651, 0xf3597893, 0x18e32b18, 0xb2937033,
13689 +
            0x592923b8, 0xf459bd7a, 0x1fe3eef1, 0x3f06eaa1, 0xd4bcb92a, 0x79cc27e8, 0x92767463,
13690 +
            0xbc92fbe1, 0x5728a86a, 0xfa5836a8, 0x11e26523, 0x31076173, 0xdabd32f8, 0x77cdac3a,
13691 +
            0x9c77ffb1, 0x3607a49a, 0xddbdf711, 0x70cd69d3, 0x9b773a58, 0xbb923e08, 0x50286d83,
13692 +
            0xfd58f341, 0x16e2a0ca, 0xd09db2d5, 0x3b27e15e, 0x96577f9c, 0x7ded2c17, 0x5d082847,
13693 +
            0xb6b27bcc, 0x1bc2e50e, 0xf078b685, 0x5a08edae, 0xb1b2be25, 0x1cc220e7, 0xf778736c,
13694 +
            0xd79d773c, 0x3c2724b7, 0x9157ba75, 0x7aede9fe, 0x5409667c, 0xbfb335f7, 0x12c3ab35,
13695 +
            0xf979f8be, 0xd99cfcee, 0x3226af65, 0x9f5631a7, 0x74ec622c, 0xde9c3907, 0x35266a8c,
13696 +
            0x9856f44e, 0x73eca7c5, 0x5309a395, 0xb8b3f01e, 0x15c36edc, 0xfe793d57, 0x480a71d8,
13697 +
            0xa3b02253, 0x0ec0bc91, 0xe57aef1a, 0xc59feb4a, 0x2e25b8c1, 0x83552603, 0x68ef7588,
13698 +
            0xc29f2ea3, 0x29257d28, 0x8455e3ea, 0x6fefb061, 0x4f0ab431, 0xa4b0e7ba, 0x09c07978,
13699 +
            0xe27a2af3, 0xcc9ea571, 0x2724f6fa, 0x8a546838, 0x61ee3bb3, 0x410b3fe3, 0xaab16c68,
13700 +
            0x07c1f2aa, 0xec7ba121, 0x460bfa0a, 0xadb1a981, 0x00c13743, 0xeb7b64c8, 0xcb9e6098,
13701 +
            0x20243313, 0x8d54add1, 0x66eefe5a, 0x700c5e90, 0x9bb60d1b, 0x36c693d9, 0xdd7cc052,
13702 +
            0xfd99c402, 0x16239789, 0xbb53094b, 0x50e95ac0, 0xfa9901eb, 0x11235260, 0xbc53cca2,
13703 +
            0x57e99f29, 0x770c9b79, 0x9cb6c8f2, 0x31c65630, 0xda7c05bb, 0xf4988a39, 0x1f22d9b2,
13704 +
            0xb2524770, 0x59e814fb, 0x790d10ab, 0x92b74320, 0x3fc7dde2, 0xd47d8e69, 0x7e0dd542,
13705 +
            0x95b786c9, 0x38c7180b, 0xd37d4b80, 0xf3984fd0, 0x18221c5b, 0xb5528299, 0x5ee8d112,
13706 +
            0xe89b9d9d, 0x0321ce16, 0xae5150d4, 0x45eb035f, 0x650e070f, 0x8eb45484, 0x23c4ca46,
13707 +
            0xc87e99cd, 0x620ec2e6, 0x89b4916d, 0x24c40faf, 0xcf7e5c24, 0xef9b5874, 0x04210bff,
13708 +
            0xa951953d, 0x42ebc6b6, 0x6c0f4934, 0x87b51abf, 0x2ac5847d, 0xc17fd7f6, 0xe19ad3a6,
13709 +
            0x0a20802d, 0xa7501eef, 0x4cea4d64, 0xe69a164f, 0x0d2045c4, 0xa050db06, 0x4bea888d,
13710 +
            0x6b0f8cdd, 0x80b5df56, 0x2dc54194, 0xc67f121f,
13711 +
        ],
13712 +
        [
13713 +
            0x00000000, 0x8c2d8a94, 0x89e57f77, 0x05c8f5e3, 0x827494b1, 0x0e591e25, 0x0b91ebc6,
13714 +
            0x87bc6152, 0x9557433d, 0x197ac9a9, 0x1cb23c4a, 0x909fb6de, 0x1723d78c, 0x9b0e5d18,
13715 +
            0x9ec6a8fb, 0x12eb226f, 0xbb10ec25, 0x373d66b1, 0x32f59352, 0xbed819c6, 0x39647894,
13716 +
            0xb549f200, 0xb08107e3, 0x3cac8d77, 0x2e47af18, 0xa26a258c, 0xa7a2d06f, 0x2b8f5afb,
13717 +
            0xac333ba9, 0x201eb13d, 0x25d644de, 0xa9fbce4a, 0xe79fb215, 0x6bb23881, 0x6e7acd62,
13718 +
            0xe25747f6, 0x65eb26a4, 0xe9c6ac30, 0xec0e59d3, 0x6023d347, 0x72c8f128, 0xfee57bbc,
13719 +
            0xfb2d8e5f, 0x770004cb, 0xf0bc6599, 0x7c91ef0d, 0x79591aee, 0xf574907a, 0x5c8f5e30,
13720 +
            0xd0a2d4a4, 0xd56a2147, 0x5947abd3, 0xdefbca81, 0x52d64015, 0x571eb5f6, 0xdb333f62,
13721 +
            0xc9d81d0d, 0x45f59799, 0x403d627a, 0xcc10e8ee, 0x4bac89bc, 0xc7810328, 0xc249f6cb,
13722 +
            0x4e647c5f, 0x5e810e75, 0xd2ac84e1, 0xd7647102, 0x5b49fb96, 0xdcf59ac4, 0x50d81050,
13723 +
            0x5510e5b3, 0xd93d6f27, 0xcbd64d48, 0x47fbc7dc, 0x4233323f, 0xce1eb8ab, 0x49a2d9f9,
13724 +
            0xc58f536d, 0xc047a68e, 0x4c6a2c1a, 0xe591e250, 0x69bc68c4, 0x6c749d27, 0xe05917b3,
13725 +
            0x67e576e1, 0xebc8fc75, 0xee000996, 0x622d8302, 0x70c6a16d, 0xfceb2bf9, 0xf923de1a,
13726 +
            0x750e548e, 0xf2b235dc, 0x7e9fbf48, 0x7b574aab, 0xf77ac03f, 0xb91ebc60, 0x353336f4,
13727 +
            0x30fbc317, 0xbcd64983, 0x3b6a28d1, 0xb747a245, 0xb28f57a6, 0x3ea2dd32, 0x2c49ff5d,
13728 +
            0xa06475c9, 0xa5ac802a, 0x29810abe, 0xae3d6bec, 0x2210e178, 0x27d8149b, 0xabf59e0f,
13729 +
            0x020e5045, 0x8e23dad1, 0x8beb2f32, 0x07c6a5a6, 0x807ac4f4, 0x0c574e60, 0x099fbb83,
13730 +
            0x85b23117, 0x97591378, 0x1b7499ec, 0x1ebc6c0f, 0x9291e69b, 0x152d87c9, 0x99000d5d,
13731 +
            0x9cc8f8be, 0x10e5722a, 0xbd021cea, 0x312f967e, 0x34e7639d, 0xb8cae909, 0x3f76885b,
13732 +
            0xb35b02cf, 0xb693f72c, 0x3abe7db8, 0x28555fd7, 0xa478d543, 0xa1b020a0, 0x2d9daa34,
13733 +
            0xaa21cb66, 0x260c41f2, 0x23c4b411, 0xafe93e85, 0x0612f0cf, 0x8a3f7a5b, 0x8ff78fb8,
13734 +
            0x03da052c, 0x8466647e, 0x084beeea, 0x0d831b09, 0x81ae919d, 0x9345b3f2, 0x1f683966,
13735 +
            0x1aa0cc85, 0x968d4611, 0x11312743, 0x9d1cadd7, 0x98d45834, 0x14f9d2a0, 0x5a9daeff,
13736 +
            0xd6b0246b, 0xd378d188, 0x5f555b1c, 0xd8e93a4e, 0x54c4b0da, 0x510c4539, 0xdd21cfad,
13737 +
            0xcfcaedc2, 0x43e76756, 0x462f92b5, 0xca021821, 0x4dbe7973, 0xc193f3e7, 0xc45b0604,
13738 +
            0x48768c90, 0xe18d42da, 0x6da0c84e, 0x68683dad, 0xe445b739, 0x63f9d66b, 0xefd45cff,
13739 +
            0xea1ca91c, 0x66312388, 0x74da01e7, 0xf8f78b73, 0xfd3f7e90, 0x7112f404, 0xf6ae9556,
13740 +
            0x7a831fc2, 0x7f4bea21, 0xf36660b5, 0xe383129f, 0x6fae980b, 0x6a666de8, 0xe64be77c,
13741 +
            0x61f7862e, 0xedda0cba, 0xe812f959, 0x643f73cd, 0x76d451a2, 0xfaf9db36, 0xff312ed5,
13742 +
            0x731ca441, 0xf4a0c513, 0x788d4f87, 0x7d45ba64, 0xf16830f0, 0x5893feba, 0xd4be742e,
13743 +
            0xd17681cd, 0x5d5b0b59, 0xdae76a0b, 0x56cae09f, 0x5302157c, 0xdf2f9fe8, 0xcdc4bd87,
13744 +
            0x41e93713, 0x4421c2f0, 0xc80c4864, 0x4fb02936, 0xc39da3a2, 0xc6555641, 0x4a78dcd5,
13745 +
            0x041ca08a, 0x88312a1e, 0x8df9dffd, 0x01d45569, 0x8668343b, 0x0a45beaf, 0x0f8d4b4c,
13746 +
            0x83a0c1d8, 0x914be3b7, 0x1d666923, 0x18ae9cc0, 0x94831654, 0x133f7706, 0x9f12fd92,
13747 +
            0x9ada0871, 0x16f782e5, 0xbf0c4caf, 0x3321c63b, 0x36e933d8, 0xbac4b94c, 0x3d78d81e,
13748 +
            0xb155528a, 0xb49da769, 0x38b02dfd, 0x2a5b0f92, 0xa6768506, 0xa3be70e5, 0x2f93fa71,
13749 +
            0xa82f9b23, 0x240211b7, 0x21cae454, 0xade76ec0,
13750 +
        ],
13751 +
        [
13752 +
            0x00000000, 0x216b0c9f, 0x42d6193e, 0x63bd15a1, 0x85ac327c, 0xa4c73ee3, 0xc77a2b42,
13753 +
            0xe61127dd, 0x9ae60ea7, 0xbb8d0238, 0xd8301799, 0xf95b1b06, 0x1f4a3cdb, 0x3e213044,
13754 +
            0x5d9c25e5, 0x7cf7297a, 0xa4727711, 0x85197b8e, 0xe6a46e2f, 0xc7cf62b0, 0x21de456d,
13755 +
            0x00b549f2, 0x63085c53, 0x426350cc, 0x3e9479b6, 0x1fff7529, 0x7c426088, 0x5d296c17,
13756 +
            0xbb384bca, 0x9a534755, 0xf9ee52f4, 0xd8855e6b, 0xd95a847d, 0xf83188e2, 0x9b8c9d43,
13757 +
            0xbae791dc, 0x5cf6b601, 0x7d9dba9e, 0x1e20af3f, 0x3f4ba3a0, 0x43bc8ada, 0x62d78645,
13758 +
            0x016a93e4, 0x20019f7b, 0xc610b8a6, 0xe77bb439, 0x84c6a198, 0xa5adad07, 0x7d28f36c,
13759 +
            0x5c43fff3, 0x3ffeea52, 0x1e95e6cd, 0xf884c110, 0xd9efcd8f, 0xba52d82e, 0x9b39d4b1,
13760 +
            0xe7cefdcb, 0xc6a5f154, 0xa518e4f5, 0x8473e86a, 0x6262cfb7, 0x4309c328, 0x20b4d689,
13761 +
            0x01dfda16, 0x230b62a5, 0x02606e3a, 0x61dd7b9b, 0x40b67704, 0xa6a750d9, 0x87cc5c46,
13762 +
            0xe47149e7, 0xc51a4578, 0xb9ed6c02, 0x9886609d, 0xfb3b753c, 0xda5079a3, 0x3c415e7e,
13763 +
            0x1d2a52e1, 0x7e974740, 0x5ffc4bdf, 0x877915b4, 0xa612192b, 0xc5af0c8a, 0xe4c40015,
13764 +
            0x02d527c8, 0x23be2b57, 0x40033ef6, 0x61683269, 0x1d9f1b13, 0x3cf4178c, 0x5f49022d,
13765 +
            0x7e220eb2, 0x9833296f, 0xb95825f0, 0xdae53051, 0xfb8e3cce, 0xfa51e6d8, 0xdb3aea47,
13766 +
            0xb887ffe6, 0x99ecf379, 0x7ffdd4a4, 0x5e96d83b, 0x3d2bcd9a, 0x1c40c105, 0x60b7e87f,
13767 +
            0x41dce4e0, 0x2261f141, 0x030afdde, 0xe51bda03, 0xc470d69c, 0xa7cdc33d, 0x86a6cfa2,
13768 +
            0x5e2391c9, 0x7f489d56, 0x1cf588f7, 0x3d9e8468, 0xdb8fa3b5, 0xfae4af2a, 0x9959ba8b,
13769 +
            0xb832b614, 0xc4c59f6e, 0xe5ae93f1, 0x86138650, 0xa7788acf, 0x4169ad12, 0x6002a18d,
13770 +
            0x03bfb42c, 0x22d4b8b3, 0x4616c54a, 0x677dc9d5, 0x04c0dc74, 0x25abd0eb, 0xc3baf736,
13771 +
            0xe2d1fba9, 0x816cee08, 0xa007e297, 0xdcf0cbed, 0xfd9bc772, 0x9e26d2d3, 0xbf4dde4c,
13772 +
            0x595cf991, 0x7837f50e, 0x1b8ae0af, 0x3ae1ec30, 0xe264b25b, 0xc30fbec4, 0xa0b2ab65,
13773 +
            0x81d9a7fa, 0x67c88027, 0x46a38cb8, 0x251e9919, 0x04759586, 0x7882bcfc, 0x59e9b063,
13774 +
            0x3a54a5c2, 0x1b3fa95d, 0xfd2e8e80, 0xdc45821f, 0xbff897be, 0x9e939b21, 0x9f4c4137,
13775 +
            0xbe274da8, 0xdd9a5809, 0xfcf15496, 0x1ae0734b, 0x3b8b7fd4, 0x58366a75, 0x795d66ea,
13776 +
            0x05aa4f90, 0x24c1430f, 0x477c56ae, 0x66175a31, 0x80067dec, 0xa16d7173, 0xc2d064d2,
13777 +
            0xe3bb684d, 0x3b3e3626, 0x1a553ab9, 0x79e82f18, 0x58832387, 0xbe92045a, 0x9ff908c5,
13778 +
            0xfc441d64, 0xdd2f11fb, 0xa1d83881, 0x80b3341e, 0xe30e21bf, 0xc2652d20, 0x24740afd,
13779 +
            0x051f0662, 0x66a213c3, 0x47c91f5c, 0x651da7ef, 0x4476ab70, 0x27cbbed1, 0x06a0b24e,
13780 +
            0xe0b19593, 0xc1da990c, 0xa2678cad, 0x830c8032, 0xfffba948, 0xde90a5d7, 0xbd2db076,
13781 +
            0x9c46bce9, 0x7a579b34, 0x5b3c97ab, 0x3881820a, 0x19ea8e95, 0xc16fd0fe, 0xe004dc61,
13782 +
            0x83b9c9c0, 0xa2d2c55f, 0x44c3e282, 0x65a8ee1d, 0x0615fbbc, 0x277ef723, 0x5b89de59,
13783 +
            0x7ae2d2c6, 0x195fc767, 0x3834cbf8, 0xde25ec25, 0xff4ee0ba, 0x9cf3f51b, 0xbd98f984,
13784 +
            0xbc472392, 0x9d2c2f0d, 0xfe913aac, 0xdffa3633, 0x39eb11ee, 0x18801d71, 0x7b3d08d0,
13785 +
            0x5a56044f, 0x26a12d35, 0x07ca21aa, 0x6477340b, 0x451c3894, 0xa30d1f49, 0x826613d6,
13786 +
            0xe1db0677, 0xc0b00ae8, 0x18355483, 0x395e581c, 0x5ae34dbd, 0x7b884122, 0x9d9966ff,
13787 +
            0xbcf26a60, 0xdf4f7fc1, 0xfe24735e, 0x82d35a24, 0xa3b856bb, 0xc005431a, 0xe16e4f85,
13788 +
            0x077f6858, 0x261464c7, 0x45a97166, 0x64c27df9,
13789 +
        ],
13790 +
        [
13791 +
            0x00000000, 0x65df4ff1, 0xcbbe9fe2, 0xae61d013, 0x06c3559b, 0x631c1a6a, 0xcd7dca79,
13792 +
            0xa8a28588, 0x0d86ab36, 0x6859e4c7, 0xc63834d4, 0xa3e77b25, 0x0b45fead, 0x6e9ab15c,
13793 +
            0xc0fb614f, 0xa5242ebe, 0x1b0d566c, 0x7ed2199d, 0xd0b3c98e, 0xb56c867f, 0x1dce03f7,
13794 +
            0x78114c06, 0xd6709c15, 0xb3afd3e4, 0x168bfd5a, 0x7354b2ab, 0xdd3562b8, 0xb8ea2d49,
13795 +
            0x1048a8c1, 0x7597e730, 0xdbf63723, 0xbe2978d2, 0x361aacd8, 0x53c5e329, 0xfda4333a,
13796 +
            0x987b7ccb, 0x30d9f943, 0x5506b6b2, 0xfb6766a1, 0x9eb82950, 0x3b9c07ee, 0x5e43481f,
13797 +
            0xf022980c, 0x95fdd7fd, 0x3d5f5275, 0x58801d84, 0xf6e1cd97, 0x933e8266, 0x2d17fab4,
13798 +
            0x48c8b545, 0xe6a96556, 0x83762aa7, 0x2bd4af2f, 0x4e0be0de, 0xe06a30cd, 0x85b57f3c,
13799 +
            0x20915182, 0x454e1e73, 0xeb2fce60, 0x8ef08191, 0x26520419, 0x438d4be8, 0xedec9bfb,
13800 +
            0x8833d40a, 0x6c3559b0, 0x09ea1641, 0xa78bc652, 0xc25489a3, 0x6af60c2b, 0x0f2943da,
13801 +
            0xa14893c9, 0xc497dc38, 0x61b3f286, 0x046cbd77, 0xaa0d6d64, 0xcfd22295, 0x6770a71d,
13802 +
            0x02afe8ec, 0xacce38ff, 0xc911770e, 0x77380fdc, 0x12e7402d, 0xbc86903e, 0xd959dfcf,
13803 +
            0x71fb5a47, 0x142415b6, 0xba45c5a5, 0xdf9a8a54, 0x7abea4ea, 0x1f61eb1b, 0xb1003b08,
13804 +
            0xd4df74f9, 0x7c7df171, 0x19a2be80, 0xb7c36e93, 0xd21c2162, 0x5a2ff568, 0x3ff0ba99,
13805 +
            0x91916a8a, 0xf44e257b, 0x5ceca0f3, 0x3933ef02, 0x97523f11, 0xf28d70e0, 0x57a95e5e,
13806 +
            0x327611af, 0x9c17c1bc, 0xf9c88e4d, 0x516a0bc5, 0x34b54434, 0x9ad49427, 0xff0bdbd6,
13807 +
            0x4122a304, 0x24fdecf5, 0x8a9c3ce6, 0xef437317, 0x47e1f69f, 0x223eb96e, 0x8c5f697d,
13808 +
            0xe980268c, 0x4ca40832, 0x297b47c3, 0x871a97d0, 0xe2c5d821, 0x4a675da9, 0x2fb81258,
13809 +
            0x81d9c24b, 0xe4068dba, 0xd86ab360, 0xbdb5fc91, 0x13d42c82, 0x760b6373, 0xdea9e6fb,
13810 +
            0xbb76a90a, 0x15177919, 0x70c836e8, 0xd5ec1856, 0xb03357a7, 0x1e5287b4, 0x7b8dc845,
13811 +
            0xd32f4dcd, 0xb6f0023c, 0x1891d22f, 0x7d4e9dde, 0xc367e50c, 0xa6b8aafd, 0x08d97aee,
13812 +
            0x6d06351f, 0xc5a4b097, 0xa07bff66, 0x0e1a2f75, 0x6bc56084, 0xcee14e3a, 0xab3e01cb,
13813 +
            0x055fd1d8, 0x60809e29, 0xc8221ba1, 0xadfd5450, 0x039c8443, 0x6643cbb2, 0xee701fb8,
13814 +
            0x8baf5049, 0x25ce805a, 0x4011cfab, 0xe8b34a23, 0x8d6c05d2, 0x230dd5c1, 0x46d29a30,
13815 +
            0xe3f6b48e, 0x8629fb7f, 0x28482b6c, 0x4d97649d, 0xe535e115, 0x80eaaee4, 0x2e8b7ef7,
13816 +
            0x4b543106, 0xf57d49d4, 0x90a20625, 0x3ec3d636, 0x5b1c99c7, 0xf3be1c4f, 0x966153be,
13817 +
            0x380083ad, 0x5ddfcc5c, 0xf8fbe2e2, 0x9d24ad13, 0x33457d00, 0x569a32f1, 0xfe38b779,
13818 +
            0x9be7f888, 0x3586289b, 0x5059676a, 0xb45fead0, 0xd180a521, 0x7fe17532, 0x1a3e3ac3,
13819 +
            0xb29cbf4b, 0xd743f0ba, 0x792220a9, 0x1cfd6f58, 0xb9d941e6, 0xdc060e17, 0x7267de04,
13820 +
            0x17b891f5, 0xbf1a147d, 0xdac55b8c, 0x74a48b9f, 0x117bc46e, 0xaf52bcbc, 0xca8df34d,
13821 +
            0x64ec235e, 0x01336caf, 0xa991e927, 0xcc4ea6d6, 0x622f76c5, 0x07f03934, 0xa2d4178a,
13822 +
            0xc70b587b, 0x696a8868, 0x0cb5c799, 0xa4174211, 0xc1c80de0, 0x6fa9ddf3, 0x0a769202,
13823 +
            0x82454608, 0xe79a09f9, 0x49fbd9ea, 0x2c24961b, 0x84861393, 0xe1595c62, 0x4f388c71,
13824 +
            0x2ae7c380, 0x8fc3ed3e, 0xea1ca2cf, 0x447d72dc, 0x21a23d2d, 0x8900b8a5, 0xecdff754,
13825 +
            0x42be2747, 0x276168b6, 0x99481064, 0xfc975f95, 0x52f68f86, 0x3729c077, 0x9f8b45ff,
13826 +
            0xfa540a0e, 0x5435da1d, 0x31ea95ec, 0x94cebb52, 0xf111f4a3, 0x5f7024b0, 0x3aaf6b41,
13827 +
            0x920deec9, 0xf7d2a138, 0x59b3712b, 0x3c6c3eda,
13828 +
        ],
13829 +
        [
13830 +
            0x00000000, 0x29fb361f, 0x53f66c3e, 0x7a0d5a21, 0xa7ecd87c, 0x8e17ee63, 0xf41ab442,
13831 +
            0xdde1825d, 0xde67daa7, 0xf79cecb8, 0x8d91b699, 0xa46a8086, 0x798b02db, 0x507034c4,
13832 +
            0x2a7d6ee5, 0x038658fa, 0x2d71df11, 0x048ae90e, 0x7e87b32f, 0x577c8530, 0x8a9d076d,
13833 +
            0xa3663172, 0xd96b6b53, 0xf0905d4c, 0xf31605b6, 0xdaed33a9, 0xa0e06988, 0x891b5f97,
13834 +
            0x54faddca, 0x7d01ebd5, 0x070cb1f4, 0x2ef787eb, 0x5ae3be22, 0x7318883d, 0x0915d21c,
13835 +
            0x20eee403, 0xfd0f665e, 0xd4f45041, 0xaef90a60, 0x87023c7f, 0x84846485, 0xad7f529a,
13836 +
            0xd77208bb, 0xfe893ea4, 0x2368bcf9, 0x0a938ae6, 0x709ed0c7, 0x5965e6d8, 0x77926133,
13837 +
            0x5e69572c, 0x24640d0d, 0x0d9f3b12, 0xd07eb94f, 0xf9858f50, 0x8388d571, 0xaa73e36e,
13838 +
            0xa9f5bb94, 0x800e8d8b, 0xfa03d7aa, 0xd3f8e1b5, 0x0e1963e8, 0x27e255f7, 0x5def0fd6,
13839 +
            0x741439c9, 0xb5c77c44, 0x9c3c4a5b, 0xe631107a, 0xcfca2665, 0x122ba438, 0x3bd09227,
13840 +
            0x41ddc806, 0x6826fe19, 0x6ba0a6e3, 0x425b90fc, 0x3856cadd, 0x11adfcc2, 0xcc4c7e9f,
13841 +
            0xe5b74880, 0x9fba12a1, 0xb64124be, 0x98b6a355, 0xb14d954a, 0xcb40cf6b, 0xe2bbf974,
13842 +
            0x3f5a7b29, 0x16a14d36, 0x6cac1717, 0x45572108, 0x46d179f2, 0x6f2a4fed, 0x152715cc,
13843 +
            0x3cdc23d3, 0xe13da18e, 0xc8c69791, 0xb2cbcdb0, 0x9b30fbaf, 0xef24c266, 0xc6dff479,
13844 +
            0xbcd2ae58, 0x95299847, 0x48c81a1a, 0x61332c05, 0x1b3e7624, 0x32c5403b, 0x314318c1,
13845 +
            0x18b82ede, 0x62b574ff, 0x4b4e42e0, 0x96afc0bd, 0xbf54f6a2, 0xc559ac83, 0xeca29a9c,
13846 +
            0xc2551d77, 0xebae2b68, 0x91a37149, 0xb8584756, 0x65b9c50b, 0x4c42f314, 0x364fa935,
13847 +
            0x1fb49f2a, 0x1c32c7d0, 0x35c9f1cf, 0x4fc4abee, 0x663f9df1, 0xbbde1fac, 0x922529b3,
13848 +
            0xe8287392, 0xc1d3458d, 0xfa3092d7, 0xd3cba4c8, 0xa9c6fee9, 0x803dc8f6, 0x5ddc4aab,
13849 +
            0x74277cb4, 0x0e2a2695, 0x27d1108a, 0x24574870, 0x0dac7e6f, 0x77a1244e, 0x5e5a1251,
13850 +
            0x83bb900c, 0xaa40a613, 0xd04dfc32, 0xf9b6ca2d, 0xd7414dc6, 0xfeba7bd9, 0x84b721f8,
13851 +
            0xad4c17e7, 0x70ad95ba, 0x5956a3a5, 0x235bf984, 0x0aa0cf9b, 0x09269761, 0x20dda17e,
13852 +
            0x5ad0fb5f, 0x732bcd40, 0xaeca4f1d, 0x87317902, 0xfd3c2323, 0xd4c7153c, 0xa0d32cf5,
13853 +
            0x89281aea, 0xf32540cb, 0xdade76d4, 0x073ff489, 0x2ec4c296, 0x54c998b7, 0x7d32aea8,
13854 +
            0x7eb4f652, 0x574fc04d, 0x2d429a6c, 0x04b9ac73, 0xd9582e2e, 0xf0a31831, 0x8aae4210,
13855 +
            0xa355740f, 0x8da2f3e4, 0xa459c5fb, 0xde549fda, 0xf7afa9c5, 0x2a4e2b98, 0x03b51d87,
13856 +
            0x79b847a6, 0x504371b9, 0x53c52943, 0x7a3e1f5c, 0x0033457d, 0x29c87362, 0xf429f13f,
13857 +
            0xddd2c720, 0xa7df9d01, 0x8e24ab1e, 0x4ff7ee93, 0x660cd88c, 0x1c0182ad, 0x35fab4b2,
13858 +
            0xe81b36ef, 0xc1e000f0, 0xbbed5ad1, 0x92166cce, 0x91903434, 0xb86b022b, 0xc266580a,
13859 +
            0xeb9d6e15, 0x367cec48, 0x1f87da57, 0x658a8076, 0x4c71b669, 0x62863182, 0x4b7d079d,
13860 +
            0x31705dbc, 0x188b6ba3, 0xc56ae9fe, 0xec91dfe1, 0x969c85c0, 0xbf67b3df, 0xbce1eb25,
13861 +
            0x951add3a, 0xef17871b, 0xc6ecb104, 0x1b0d3359, 0x32f60546, 0x48fb5f67, 0x61006978,
13862 +
            0x151450b1, 0x3cef66ae, 0x46e23c8f, 0x6f190a90, 0xb2f888cd, 0x9b03bed2, 0xe10ee4f3,
13863 +
            0xc8f5d2ec, 0xcb738a16, 0xe288bc09, 0x9885e628, 0xb17ed037, 0x6c9f526a, 0x45646475,
13864 +
            0x3f693e54, 0x1692084b, 0x38658fa0, 0x119eb9bf, 0x6b93e39e, 0x4268d581, 0x9f8957dc,
13865 +
            0xb67261c3, 0xcc7f3be2, 0xe5840dfd, 0xe6025507, 0xcff96318, 0xb5f43939, 0x9c0f0f26,
13866 +
            0x41ee8d7b, 0x6815bb64, 0x1218e145, 0x3be3d75a,
13867 +
        ],
13868 +
        [
13869 +
            0x00000000, 0xad08eae4, 0xcbafbf97, 0x66a75573, 0x06e11571, 0xabe9ff95, 0xcd4eaae6,
13870 +
            0x60464002, 0x0dc22ae2, 0xa0cac006, 0xc66d9575, 0x6b657f91, 0x0b233f93, 0xa62bd577,
13871 +
            0xc08c8004, 0x6d846ae0, 0x1b8455c4, 0xb68cbf20, 0xd02bea53, 0x7d2300b7, 0x1d6540b5,
13872 +
            0xb06daa51, 0xd6caff22, 0x7bc215c6, 0x16467f26, 0xbb4e95c2, 0xdde9c0b1, 0x70e12a55,
13873 +
            0x10a76a57, 0xbdaf80b3, 0xdb08d5c0, 0x76003f24, 0x3708ab88, 0x9a00416c, 0xfca7141f,
13874 +
            0x51affefb, 0x31e9bef9, 0x9ce1541d, 0xfa46016e, 0x574eeb8a, 0x3aca816a, 0x97c26b8e,
13875 +
            0xf1653efd, 0x5c6dd419, 0x3c2b941b, 0x91237eff, 0xf7842b8c, 0x5a8cc168, 0x2c8cfe4c,
13876 +
            0x818414a8, 0xe72341db, 0x4a2bab3f, 0x2a6deb3d, 0x876501d9, 0xe1c254aa, 0x4ccabe4e,
13877 +
            0x214ed4ae, 0x8c463e4a, 0xeae16b39, 0x47e981dd, 0x27afc1df, 0x8aa72b3b, 0xec007e48,
13878 +
            0x410894ac, 0x6e115710, 0xc319bdf4, 0xa5bee887, 0x08b60263, 0x68f04261, 0xc5f8a885,
13879 +
            0xa35ffdf6, 0x0e571712, 0x63d37df2, 0xcedb9716, 0xa87cc265, 0x05742881, 0x65326883,
13880 +
            0xc83a8267, 0xae9dd714, 0x03953df0, 0x759502d4, 0xd89de830, 0xbe3abd43, 0x133257a7,
13881 +
            0x737417a5, 0xde7cfd41, 0xb8dba832, 0x15d342d6, 0x78572836, 0xd55fc2d2, 0xb3f897a1,
13882 +
            0x1ef07d45, 0x7eb63d47, 0xd3bed7a3, 0xb51982d0, 0x18116834, 0x5919fc98, 0xf411167c,
13883 +
            0x92b6430f, 0x3fbea9eb, 0x5ff8e9e9, 0xf2f0030d, 0x9457567e, 0x395fbc9a, 0x54dbd67a,
13884 +
            0xf9d33c9e, 0x9f7469ed, 0x327c8309, 0x523ac30b, 0xff3229ef, 0x99957c9c, 0x349d9678,
13885 +
            0x429da95c, 0xef9543b8, 0x893216cb, 0x243afc2f, 0x447cbc2d, 0xe97456c9, 0x8fd303ba,
13886 +
            0x22dbe95e, 0x4f5f83be, 0xe257695a, 0x84f03c29, 0x29f8d6cd, 0x49be96cf, 0xe4b67c2b,
13887 +
            0x82112958, 0x2f19c3bc, 0xdc22ae20, 0x712a44c4, 0x178d11b7, 0xba85fb53, 0xdac3bb51,
13888 +
            0x77cb51b5, 0x116c04c6, 0xbc64ee22, 0xd1e084c2, 0x7ce86e26, 0x1a4f3b55, 0xb747d1b1,
13889 +
            0xd70191b3, 0x7a097b57, 0x1cae2e24, 0xb1a6c4c0, 0xc7a6fbe4, 0x6aae1100, 0x0c094473,
13890 +
            0xa101ae97, 0xc147ee95, 0x6c4f0471, 0x0ae85102, 0xa7e0bbe6, 0xca64d106, 0x676c3be2,
13891 +
            0x01cb6e91, 0xacc38475, 0xcc85c477, 0x618d2e93, 0x072a7be0, 0xaa229104, 0xeb2a05a8,
13892 +
            0x4622ef4c, 0x2085ba3f, 0x8d8d50db, 0xedcb10d9, 0x40c3fa3d, 0x2664af4e, 0x8b6c45aa,
13893 +
            0xe6e82f4a, 0x4be0c5ae, 0x2d4790dd, 0x804f7a39, 0xe0093a3b, 0x4d01d0df, 0x2ba685ac,
13894 +
            0x86ae6f48, 0xf0ae506c, 0x5da6ba88, 0x3b01effb, 0x9609051f, 0xf64f451d, 0x5b47aff9,
13895 +
            0x3de0fa8a, 0x90e8106e, 0xfd6c7a8e, 0x5064906a, 0x36c3c519, 0x9bcb2ffd, 0xfb8d6fff,
13896 +
            0x5685851b, 0x3022d068, 0x9d2a3a8c, 0xb233f930, 0x1f3b13d4, 0x799c46a7, 0xd494ac43,
13897 +
            0xb4d2ec41, 0x19da06a5, 0x7f7d53d6, 0xd275b932, 0xbff1d3d2, 0x12f93936, 0x745e6c45,
13898 +
            0xd95686a1, 0xb910c6a3, 0x14182c47, 0x72bf7934, 0xdfb793d0, 0xa9b7acf4, 0x04bf4610,
13899 +
            0x62181363, 0xcf10f987, 0xaf56b985, 0x025e5361, 0x64f90612, 0xc9f1ecf6, 0xa4758616,
13900 +
            0x097d6cf2, 0x6fda3981, 0xc2d2d365, 0xa2949367, 0x0f9c7983, 0x693b2cf0, 0xc433c614,
13901 +
            0x853b52b8, 0x2833b85c, 0x4e94ed2f, 0xe39c07cb, 0x83da47c9, 0x2ed2ad2d, 0x4875f85e,
13902 +
            0xe57d12ba, 0x88f9785a, 0x25f192be, 0x4356c7cd, 0xee5e2d29, 0x8e186d2b, 0x231087cf,
13903 +
            0x45b7d2bc, 0xe8bf3858, 0x9ebf077c, 0x33b7ed98, 0x5510b8eb, 0xf818520f, 0x985e120d,
13904 +
            0x3556f8e9, 0x53f1ad9a, 0xfef9477e, 0x937d2d9e, 0x3e75c77a, 0x58d29209, 0xf5da78ed,
13905 +
            0x959c38ef, 0x3894d20b, 0x5e338778, 0xf33b6d9c,
13906 +
        ],
13907 +
        [
13908 +
            0x00000000, 0xf08efa75, 0x70a39eb5, 0x802d64c0, 0xe1473d6a, 0x11c9c71f, 0x91e4a3df,
13909 +
            0x616a59aa, 0x5330108b, 0xa3beeafe, 0x23938e3e, 0xd31d744b, 0xb2772de1, 0x42f9d794,
13910 +
            0xc2d4b354, 0x325a4921, 0xa6602116, 0x56eedb63, 0xd6c3bfa3, 0x264d45d6, 0x47271c7c,
13911 +
            0xb7a9e609, 0x378482c9, 0xc70a78bc, 0xf550319d, 0x05decbe8, 0x85f3af28, 0x757d555d,
13912 +
            0x14170cf7, 0xe499f682, 0x64b49242, 0x943a6837, 0xdd7e2873, 0x2df0d206, 0xadddb6c6,
13913 +
            0x5d534cb3, 0x3c391519, 0xccb7ef6c, 0x4c9a8bac, 0xbc1471d9, 0x8e4e38f8, 0x7ec0c28d,
13914 +
            0xfeeda64d, 0x0e635c38, 0x6f090592, 0x9f87ffe7, 0x1faa9b27, 0xef246152, 0x7b1e0965,
13915 +
            0x8b90f310, 0x0bbd97d0, 0xfb336da5, 0x9a59340f, 0x6ad7ce7a, 0xeafaaaba, 0x1a7450cf,
13916 +
            0x282e19ee, 0xd8a0e39b, 0x588d875b, 0xa8037d2e, 0xc9692484, 0x39e7def1, 0xb9caba31,
13917 +
            0x49444044, 0x2b423ab9, 0xdbccc0cc, 0x5be1a40c, 0xab6f5e79, 0xca0507d3, 0x3a8bfda6,
13918 +
            0xbaa69966, 0x4a286313, 0x78722a32, 0x88fcd047, 0x08d1b487, 0xf85f4ef2, 0x99351758,
13919 +
            0x69bbed2d, 0xe99689ed, 0x19187398, 0x8d221baf, 0x7dace1da, 0xfd81851a, 0x0d0f7f6f,
13920 +
            0x6c6526c5, 0x9cebdcb0, 0x1cc6b870, 0xec484205, 0xde120b24, 0x2e9cf151, 0xaeb19591,
13921 +
            0x5e3f6fe4, 0x3f55364e, 0xcfdbcc3b, 0x4ff6a8fb, 0xbf78528e, 0xf63c12ca, 0x06b2e8bf,
13922 +
            0x869f8c7f, 0x7611760a, 0x177b2fa0, 0xe7f5d5d5, 0x67d8b115, 0x97564b60, 0xa50c0241,
13923 +
            0x5582f834, 0xd5af9cf4, 0x25216681, 0x444b3f2b, 0xb4c5c55e, 0x34e8a19e, 0xc4665beb,
13924 +
            0x505c33dc, 0xa0d2c9a9, 0x20ffad69, 0xd071571c, 0xb11b0eb6, 0x4195f4c3, 0xc1b89003,
13925 +
            0x31366a76, 0x036c2357, 0xf3e2d922, 0x73cfbde2, 0x83414797, 0xe22b1e3d, 0x12a5e448,
13926 +
            0x92888088, 0x62067afd, 0x56847572, 0xa60a8f07, 0x2627ebc7, 0xd6a911b2, 0xb7c34818,
13927 +
            0x474db26d, 0xc760d6ad, 0x37ee2cd8, 0x05b465f9, 0xf53a9f8c, 0x7517fb4c, 0x85990139,
13928 +
            0xe4f35893, 0x147da2e6, 0x9450c626, 0x64de3c53, 0xf0e45464, 0x006aae11, 0x8047cad1,
13929 +
            0x70c930a4, 0x11a3690e, 0xe12d937b, 0x6100f7bb, 0x918e0dce, 0xa3d444ef, 0x535abe9a,
13930 +
            0xd377da5a, 0x23f9202f, 0x42937985, 0xb21d83f0, 0x3230e730, 0xc2be1d45, 0x8bfa5d01,
13931 +
            0x7b74a774, 0xfb59c3b4, 0x0bd739c1, 0x6abd606b, 0x9a339a1e, 0x1a1efede, 0xea9004ab,
13932 +
            0xd8ca4d8a, 0x2844b7ff, 0xa869d33f, 0x58e7294a, 0x398d70e0, 0xc9038a95, 0x492eee55,
13933 +
            0xb9a01420, 0x2d9a7c17, 0xdd148662, 0x5d39e2a2, 0xadb718d7, 0xccdd417d, 0x3c53bb08,
13934 +
            0xbc7edfc8, 0x4cf025bd, 0x7eaa6c9c, 0x8e2496e9, 0x0e09f229, 0xfe87085c, 0x9fed51f6,
13935 +
            0x6f63ab83, 0xef4ecf43, 0x1fc03536, 0x7dc64fcb, 0x8d48b5be, 0x0d65d17e, 0xfdeb2b0b,
13936 +
            0x9c8172a1, 0x6c0f88d4, 0xec22ec14, 0x1cac1661, 0x2ef65f40, 0xde78a535, 0x5e55c1f5,
13937 +
            0xaedb3b80, 0xcfb1622a, 0x3f3f985f, 0xbf12fc9f, 0x4f9c06ea, 0xdba66edd, 0x2b2894a8,
13938 +
            0xab05f068, 0x5b8b0a1d, 0x3ae153b7, 0xca6fa9c2, 0x4a42cd02, 0xbacc3777, 0x88967e56,
13939 +
            0x78188423, 0xf835e0e3, 0x08bb1a96, 0x69d1433c, 0x995fb949, 0x1972dd89, 0xe9fc27fc,
13940 +
            0xa0b867b8, 0x50369dcd, 0xd01bf90d, 0x20950378, 0x41ff5ad2, 0xb171a0a7, 0x315cc467,
13941 +
            0xc1d23e12, 0xf3887733, 0x03068d46, 0x832be986, 0x73a513f3, 0x12cf4a59, 0xe241b02c,
13942 +
            0x626cd4ec, 0x92e22e99, 0x06d846ae, 0xf656bcdb, 0x767bd81b, 0x86f5226e, 0xe79f7bc4,
13943 +
            0x171181b1, 0x973ce571, 0x67b21f04, 0x55e85625, 0xa566ac50, 0x254bc890, 0xd5c532e5,
13944 +
            0xb4af6b4f, 0x4421913a, 0xc40cf5fa, 0x34820f8f,
13945 +
        ],
13946 +
        [
13947 +
            0x00000000, 0x23a56d51, 0x474adaa2, 0x64efb7f3, 0x8e95b544, 0xad30d815, 0xc9df6fe6,
13948 +
            0xea7a02b7, 0x8c9500d7, 0xaf306d86, 0xcbdfda75, 0xe87ab724, 0x0200b593, 0x21a5d8c2,
13949 +
            0x454a6f31, 0x66ef0260, 0x88946bf1, 0xab3106a0, 0xcfdeb153, 0xec7bdc02, 0x0601deb5,
13950 +
            0x25a4b3e4, 0x414b0417, 0x62ee6946, 0x04016b26, 0x27a40677, 0x434bb184, 0x60eedcd5,
13951 +
            0x8a94de62, 0xa931b333, 0xcdde04c0, 0xee7b6991, 0x8096bdbd, 0xa333d0ec, 0xc7dc671f,
13952 +
            0xe4790a4e, 0x0e0308f9, 0x2da665a8, 0x4949d25b, 0x6aecbf0a, 0x0c03bd6a, 0x2fa6d03b,
13953 +
            0x4b4967c8, 0x68ec0a99, 0x8296082e, 0xa133657f, 0xc5dcd28c, 0xe679bfdd, 0x0802d64c,
13954 +
            0x2ba7bb1d, 0x4f480cee, 0x6ced61bf, 0x86976308, 0xa5320e59, 0xc1ddb9aa, 0xe278d4fb,
13955 +
            0x8497d69b, 0xa732bbca, 0xc3dd0c39, 0xe0786168, 0x0a0263df, 0x29a70e8e, 0x4d48b97d,
13956 +
            0x6eedd42c, 0x90931125, 0xb3367c74, 0xd7d9cb87, 0xf47ca6d6, 0x1e06a461, 0x3da3c930,
13957 +
            0x594c7ec3, 0x7ae91392, 0x1c0611f2, 0x3fa37ca3, 0x5b4ccb50, 0x78e9a601, 0x9293a4b6,
13958 +
            0xb136c9e7, 0xd5d97e14, 0xf67c1345, 0x18077ad4, 0x3ba21785, 0x5f4da076, 0x7ce8cd27,
13959 +
            0x9692cf90, 0xb537a2c1, 0xd1d81532, 0xf27d7863, 0x94927a03, 0xb7371752, 0xd3d8a0a1,
13960 +
            0xf07dcdf0, 0x1a07cf47, 0x39a2a216, 0x5d4d15e5, 0x7ee878b4, 0x1005ac98, 0x33a0c1c9,
13961 +
            0x574f763a, 0x74ea1b6b, 0x9e9019dc, 0xbd35748d, 0xd9dac37e, 0xfa7fae2f, 0x9c90ac4f,
13962 +
            0xbf35c11e, 0xdbda76ed, 0xf87f1bbc, 0x1205190b, 0x31a0745a, 0x554fc3a9, 0x76eaaef8,
13963 +
            0x9891c769, 0xbb34aa38, 0xdfdb1dcb, 0xfc7e709a, 0x1604722d, 0x35a11f7c, 0x514ea88f,
13964 +
            0x72ebc5de, 0x1404c7be, 0x37a1aaef, 0x534e1d1c, 0x70eb704d, 0x9a9172fa, 0xb9341fab,
13965 +
            0xdddba858, 0xfe7ec509, 0xb0984815, 0x933d2544, 0xf7d292b7, 0xd477ffe6, 0x3e0dfd51,
13966 +
            0x1da89000, 0x794727f3, 0x5ae24aa2, 0x3c0d48c2, 0x1fa82593, 0x7b479260, 0x58e2ff31,
13967 +
            0xb298fd86, 0x913d90d7, 0xf5d22724, 0xd6774a75, 0x380c23e4, 0x1ba94eb5, 0x7f46f946,
13968 +
            0x5ce39417, 0xb69996a0, 0x953cfbf1, 0xf1d34c02, 0xd2762153, 0xb4992333, 0x973c4e62,
13969 +
            0xf3d3f991, 0xd07694c0, 0x3a0c9677, 0x19a9fb26, 0x7d464cd5, 0x5ee32184, 0x300ef5a8,
13970 +
            0x13ab98f9, 0x77442f0a, 0x54e1425b, 0xbe9b40ec, 0x9d3e2dbd, 0xf9d19a4e, 0xda74f71f,
13971 +
            0xbc9bf57f, 0x9f3e982e, 0xfbd12fdd, 0xd874428c, 0x320e403b, 0x11ab2d6a, 0x75449a99,
13972 +
            0x56e1f7c8, 0xb89a9e59, 0x9b3ff308, 0xffd044fb, 0xdc7529aa, 0x360f2b1d, 0x15aa464c,
13973 +
            0x7145f1bf, 0x52e09cee, 0x340f9e8e, 0x17aaf3df, 0x7345442c, 0x50e0297d, 0xba9a2bca,
13974 +
            0x993f469b, 0xfdd0f168, 0xde759c39, 0x200b5930, 0x03ae3461, 0x67418392, 0x44e4eec3,
13975 +
            0xae9eec74, 0x8d3b8125, 0xe9d436d6, 0xca715b87, 0xac9e59e7, 0x8f3b34b6, 0xebd48345,
13976 +
            0xc871ee14, 0x220beca3, 0x01ae81f2, 0x65413601, 0x46e45b50, 0xa89f32c1, 0x8b3a5f90,
13977 +
            0xefd5e863, 0xcc708532, 0x260a8785, 0x05afead4, 0x61405d27, 0x42e53076, 0x240a3216,
13978 +
            0x07af5f47, 0x6340e8b4, 0x40e585e5, 0xaa9f8752, 0x893aea03, 0xedd55df0, 0xce7030a1,
13979 +
            0xa09de48d, 0x833889dc, 0xe7d73e2f, 0xc472537e, 0x2e0851c9, 0x0dad3c98, 0x69428b6b,
13980 +
            0x4ae7e63a, 0x2c08e45a, 0x0fad890b, 0x6b423ef8, 0x48e753a9, 0xa29d511e, 0x81383c4f,
13981 +
            0xe5d78bbc, 0xc672e6ed, 0x28098f7c, 0x0bace22d, 0x6f4355de, 0x4ce6388f, 0xa69c3a38,
13982 +
            0x85395769, 0xe1d6e09a, 0xc2738dcb, 0xa49c8fab, 0x8739e2fa, 0xe3d65509, 0xc0733858,
13983 +
            0x2a093aef, 0x09ac57be, 0x6d43e04d, 0x4ee68d1c,
13984 +
        ],
13985 +
        [
13986 +
            0x00000000, 0xb73a2ece, 0xffca37c3, 0x48f0190d, 0x6e2a05d9, 0xd9102b17, 0x91e0321a,
13987 +
            0x26da1cd4, 0xdc540bb2, 0x6b6e257c, 0x239e3c71, 0x94a412bf, 0xb27e0e6b, 0x054420a5,
13988 +
            0x4db439a8, 0xfa8e1766, 0x29167d3b, 0x9e2c53f5, 0xd6dc4af8, 0x61e66436, 0x473c78e2,
13989 +
            0xf006562c, 0xb8f64f21, 0x0fcc61ef, 0xf5427689, 0x42785847, 0x0a88414a, 0xbdb26f84,
13990 +
            0x9b687350, 0x2c525d9e, 0x64a24493, 0xd3986a5d, 0x522cfa76, 0xe516d4b8, 0xade6cdb5,
13991 +
            0x1adce37b, 0x3c06ffaf, 0x8b3cd161, 0xc3ccc86c, 0x74f6e6a2, 0x8e78f1c4, 0x3942df0a,
13992 +
            0x71b2c607, 0xc688e8c9, 0xe052f41d, 0x5768dad3, 0x1f98c3de, 0xa8a2ed10, 0x7b3a874d,
13993 +
            0xcc00a983, 0x84f0b08e, 0x33ca9e40, 0x15108294, 0xa22aac5a, 0xeadab557, 0x5de09b99,
13994 +
            0xa76e8cff, 0x1054a231, 0x58a4bb3c, 0xef9e95f2, 0xc9448926, 0x7e7ea7e8, 0x368ebee5,
13995 +
            0x81b4902b, 0xa459f4ec, 0x1363da22, 0x5b93c32f, 0xeca9ede1, 0xca73f135, 0x7d49dffb,
13996 +
            0x35b9c6f6, 0x8283e838, 0x780dff5e, 0xcf37d190, 0x87c7c89d, 0x30fde653, 0x1627fa87,
13997 +
            0xa11dd449, 0xe9edcd44, 0x5ed7e38a, 0x8d4f89d7, 0x3a75a719, 0x7285be14, 0xc5bf90da,
13998 +
            0xe3658c0e, 0x545fa2c0, 0x1cafbbcd, 0xab959503, 0x511b8265, 0xe621acab, 0xaed1b5a6,
13999 +
            0x19eb9b68, 0x3f3187bc, 0x880ba972, 0xc0fbb07f, 0x77c19eb1, 0xf6750e9a, 0x414f2054,
14000 +
            0x09bf3959, 0xbe851797, 0x985f0b43, 0x2f65258d, 0x67953c80, 0xd0af124e, 0x2a210528,
14001 +
            0x9d1b2be6, 0xd5eb32eb, 0x62d11c25, 0x440b00f1, 0xf3312e3f, 0xbbc13732, 0x0cfb19fc,
14002 +
            0xdf6373a1, 0x68595d6f, 0x20a94462, 0x97936aac, 0xb1497678, 0x067358b6, 0x4e8341bb,
14003 +
            0xf9b96f75, 0x03377813, 0xb40d56dd, 0xfcfd4fd0, 0x4bc7611e, 0x6d1d7dca, 0xda275304,
14004 +
            0x92d74a09, 0x25ed64c7, 0xd90d8387, 0x6e37ad49, 0x26c7b444, 0x91fd9a8a, 0xb727865e,
14005 +
            0x001da890, 0x48edb19d, 0xffd79f53, 0x05598835, 0xb263a6fb, 0xfa93bff6, 0x4da99138,
14006 +
            0x6b738dec, 0xdc49a322, 0x94b9ba2f, 0x238394e1, 0xf01bfebc, 0x4721d072, 0x0fd1c97f,
14007 +
            0xb8ebe7b1, 0x9e31fb65, 0x290bd5ab, 0x61fbcca6, 0xd6c1e268, 0x2c4ff50e, 0x9b75dbc0,
14008 +
            0xd385c2cd, 0x64bfec03, 0x4265f0d7, 0xf55fde19, 0xbdafc714, 0x0a95e9da, 0x8b2179f1,
14009 +
            0x3c1b573f, 0x74eb4e32, 0xc3d160fc, 0xe50b7c28, 0x523152e6, 0x1ac14beb, 0xadfb6525,
14010 +
            0x57757243, 0xe04f5c8d, 0xa8bf4580, 0x1f856b4e, 0x395f779a, 0x8e655954, 0xc6954059,
14011 +
            0x71af6e97, 0xa23704ca, 0x150d2a04, 0x5dfd3309, 0xeac71dc7, 0xcc1d0113, 0x7b272fdd,
14012 +
            0x33d736d0, 0x84ed181e, 0x7e630f78, 0xc95921b6, 0x81a938bb, 0x36931675, 0x10490aa1,
14013 +
            0xa773246f, 0xef833d62, 0x58b913ac, 0x7d54776b, 0xca6e59a5, 0x829e40a8, 0x35a46e66,
14014 +
            0x137e72b2, 0xa4445c7c, 0xecb44571, 0x5b8e6bbf, 0xa1007cd9, 0x163a5217, 0x5eca4b1a,
14015 +
            0xe9f065d4, 0xcf2a7900, 0x781057ce, 0x30e04ec3, 0x87da600d, 0x54420a50, 0xe378249e,
14016 +
            0xab883d93, 0x1cb2135d, 0x3a680f89, 0x8d522147, 0xc5a2384a, 0x72981684, 0x881601e2,
14017 +
            0x3f2c2f2c, 0x77dc3621, 0xc0e618ef, 0xe63c043b, 0x51062af5, 0x19f633f8, 0xaecc1d36,
14018 +
            0x2f788d1d, 0x9842a3d3, 0xd0b2bade, 0x67889410, 0x415288c4, 0xf668a60a, 0xbe98bf07,
14019 +
            0x09a291c9, 0xf32c86af, 0x4416a861, 0x0ce6b16c, 0xbbdc9fa2, 0x9d068376, 0x2a3cadb8,
14020 +
            0x62ccb4b5, 0xd5f69a7b, 0x066ef026, 0xb154dee8, 0xf9a4c7e5, 0x4e9ee92b, 0x6844f5ff,
14021 +
            0xdf7edb31, 0x978ec23c, 0x20b4ecf2, 0xda3afb94, 0x6d00d55a, 0x25f0cc57, 0x92cae299,
14022 +
            0xb410fe4d, 0x032ad083, 0x4bdac98e, 0xfce0e740,
14023 +
        ],
14024 +
        [
14025 +
            0x00000000, 0xd2509570, 0x351f40bf, 0xe74fd5cf, 0x6a3e817e, 0xb86e140e, 0x5f21c1c1,
14026 +
            0x8d7154b1, 0xd47d02fc, 0x062d978c, 0xe1624243, 0x3332d733, 0xbe438382, 0x6c1316f2,
14027 +
            0x8b5cc33d, 0x590c564d, 0x39446fa7, 0xeb14fad7, 0x0c5b2f18, 0xde0bba68, 0x537aeed9,
14028 +
            0x812a7ba9, 0x6665ae66, 0xb4353b16, 0xed396d5b, 0x3f69f82b, 0xd8262de4, 0x0a76b894,
14029 +
            0x8707ec25, 0x55577955, 0xb218ac9a, 0x604839ea, 0x7288df4e, 0xa0d84a3e, 0x47979ff1,
14030 +
            0x95c70a81, 0x18b65e30, 0xcae6cb40, 0x2da91e8f, 0xfff98bff, 0xa6f5ddb2, 0x74a548c2,
14031 +
            0x93ea9d0d, 0x41ba087d, 0xcccb5ccc, 0x1e9bc9bc, 0xf9d41c73, 0x2b848903, 0x4bccb0e9,
14032 +
            0x999c2599, 0x7ed3f056, 0xac836526, 0x21f23197, 0xf3a2a4e7, 0x14ed7128, 0xc6bde458,
14033 +
            0x9fb1b215, 0x4de12765, 0xaaaef2aa, 0x78fe67da, 0xf58f336b, 0x27dfa61b, 0xc09073d4,
14034 +
            0x12c0e6a4, 0xe511be9c, 0x37412bec, 0xd00efe23, 0x025e6b53, 0x8f2f3fe2, 0x5d7faa92,
14035 +
            0xba307f5d, 0x6860ea2d, 0x316cbc60, 0xe33c2910, 0x0473fcdf, 0xd62369af, 0x5b523d1e,
14036 +
            0x8902a86e, 0x6e4d7da1, 0xbc1de8d1, 0xdc55d13b, 0x0e05444b, 0xe94a9184, 0x3b1a04f4,
14037 +
            0xb66b5045, 0x643bc535, 0x837410fa, 0x5124858a, 0x0828d3c7, 0xda7846b7, 0x3d379378,
14038 +
            0xef670608, 0x621652b9, 0xb046c7c9, 0x57091206, 0x85598776, 0x979961d2, 0x45c9f4a2,
14039 +
            0xa286216d, 0x70d6b41d, 0xfda7e0ac, 0x2ff775dc, 0xc8b8a013, 0x1ae83563, 0x43e4632e,
14040 +
            0x91b4f65e, 0x76fb2391, 0xa4abb6e1, 0x29dae250, 0xfb8a7720, 0x1cc5a2ef, 0xce95379f,
14041 +
            0xaedd0e75, 0x7c8d9b05, 0x9bc24eca, 0x4992dbba, 0xc4e38f0b, 0x16b31a7b, 0xf1fccfb4,
14042 +
            0x23ac5ac4, 0x7aa00c89, 0xa8f099f9, 0x4fbf4c36, 0x9defd946, 0x109e8df7, 0xc2ce1887,
14043 +
            0x2581cd48, 0xf7d15838, 0x5b9d1767, 0x89cd8217, 0x6e8257d8, 0xbcd2c2a8, 0x31a39619,
14044 +
            0xe3f30369, 0x04bcd6a6, 0xd6ec43d6, 0x8fe0159b, 0x5db080eb, 0xbaff5524, 0x68afc054,
14045 +
            0xe5de94e5, 0x378e0195, 0xd0c1d45a, 0x0291412a, 0x62d978c0, 0xb089edb0, 0x57c6387f,
14046 +
            0x8596ad0f, 0x08e7f9be, 0xdab76cce, 0x3df8b901, 0xefa82c71, 0xb6a47a3c, 0x64f4ef4c,
14047 +
            0x83bb3a83, 0x51ebaff3, 0xdc9afb42, 0x0eca6e32, 0xe985bbfd, 0x3bd52e8d, 0x2915c829,
14048 +
            0xfb455d59, 0x1c0a8896, 0xce5a1de6, 0x432b4957, 0x917bdc27, 0x763409e8, 0xa4649c98,
14049 +
            0xfd68cad5, 0x2f385fa5, 0xc8778a6a, 0x1a271f1a, 0x97564bab, 0x4506dedb, 0xa2490b14,
14050 +
            0x70199e64, 0x1051a78e, 0xc20132fe, 0x254ee731, 0xf71e7241, 0x7a6f26f0, 0xa83fb380,
14051 +
            0x4f70664f, 0x9d20f33f, 0xc42ca572, 0x167c3002, 0xf133e5cd, 0x236370bd, 0xae12240c,
14052 +
            0x7c42b17c, 0x9b0d64b3, 0x495df1c3, 0xbe8ca9fb, 0x6cdc3c8b, 0x8b93e944, 0x59c37c34,
14053 +
            0xd4b22885, 0x06e2bdf5, 0xe1ad683a, 0x33fdfd4a, 0x6af1ab07, 0xb8a13e77, 0x5feeebb8,
14054 +
            0x8dbe7ec8, 0x00cf2a79, 0xd29fbf09, 0x35d06ac6, 0xe780ffb6, 0x87c8c65c, 0x5598532c,
14055 +
            0xb2d786e3, 0x60871393, 0xedf64722, 0x3fa6d252, 0xd8e9079d, 0x0ab992ed, 0x53b5c4a0,
14056 +
            0x81e551d0, 0x66aa841f, 0xb4fa116f, 0x398b45de, 0xebdbd0ae, 0x0c940561, 0xdec49011,
14057 +
            0xcc0476b5, 0x1e54e3c5, 0xf91b360a, 0x2b4ba37a, 0xa63af7cb, 0x746a62bb, 0x9325b774,
14058 +
            0x41752204, 0x18797449, 0xca29e139, 0x2d6634f6, 0xff36a186, 0x7247f537, 0xa0176047,
14059 +
            0x4758b588, 0x950820f8, 0xf5401912, 0x27108c62, 0xc05f59ad, 0x120fccdd, 0x9f7e986c,
14060 +
            0x4d2e0d1c, 0xaa61d8d3, 0x78314da3, 0x213d1bee, 0xf36d8e9e, 0x14225b51, 0xc672ce21,
14061 +
            0x4b039a90, 0x99530fe0, 0x7e1cda2f, 0xac4c4f5f,
14062 +
        ],
14063 +
        [
14064 +
            0x00000000, 0xd116831f, 0x33936c61, 0xe285ef7e, 0x6726d8c2, 0xb6305bdd, 0x54b5b4a3,
14065 +
            0x85a337bc, 0xce4db184, 0x1f5b329b, 0xfddedde5, 0x2cc85efa, 0xa96b6946, 0x787dea59,
14066 +
            0x9af80527, 0x4bee8638, 0x0d250957, 0xdc338a48, 0x3eb66536, 0xefa0e629, 0x6a03d195,
14067 +
            0xbb15528a, 0x5990bdf4, 0x88863eeb, 0xc368b8d3, 0x127e3bcc, 0xf0fbd4b2, 0x21ed57ad,
14068 +
            0xa44e6011, 0x7558e30e, 0x97dd0c70, 0x46cb8f6f, 0x1a4a12ae, 0xcb5c91b1, 0x29d97ecf,
14069 +
            0xf8cffdd0, 0x7d6cca6c, 0xac7a4973, 0x4effa60d, 0x9fe92512, 0xd407a32a, 0x05112035,
14070 +
            0xe794cf4b, 0x36824c54, 0xb3217be8, 0x6237f8f7, 0x80b21789, 0x51a49496, 0x176f1bf9,
14071 +
            0xc67998e6, 0x24fc7798, 0xf5eaf487, 0x7049c33b, 0xa15f4024, 0x43daaf5a, 0x92cc2c45,
14072 +
            0xd922aa7d, 0x08342962, 0xeab1c61c, 0x3ba74503, 0xbe0472bf, 0x6f12f1a0, 0x8d971ede,
14073 +
            0x5c819dc1, 0x3494255c, 0xe582a643, 0x0707493d, 0xd611ca22, 0x53b2fd9e, 0x82a47e81,
14074 +
            0x602191ff, 0xb13712e0, 0xfad994d8, 0x2bcf17c7, 0xc94af8b9, 0x185c7ba6, 0x9dff4c1a,
14075 +
            0x4ce9cf05, 0xae6c207b, 0x7f7aa364, 0x39b12c0b, 0xe8a7af14, 0x0a22406a, 0xdb34c375,
14076 +
            0x5e97f4c9, 0x8f8177d6, 0x6d0498a8, 0xbc121bb7, 0xf7fc9d8f, 0x26ea1e90, 0xc46ff1ee,
14077 +
            0x157972f1, 0x90da454d, 0x41ccc652, 0xa349292c, 0x725faa33, 0x2ede37f2, 0xffc8b4ed,
14078 +
            0x1d4d5b93, 0xcc5bd88c, 0x49f8ef30, 0x98ee6c2f, 0x7a6b8351, 0xab7d004e, 0xe0938676,
14079 +
            0x31850569, 0xd300ea17, 0x02166908, 0x87b55eb4, 0x56a3ddab, 0xb42632d5, 0x6530b1ca,
14080 +
            0x23fb3ea5, 0xf2edbdba, 0x106852c4, 0xc17ed1db, 0x44dde667, 0x95cb6578, 0x774e8a06,
14081 +
            0xa6580919, 0xedb68f21, 0x3ca00c3e, 0xde25e340, 0x0f33605f, 0x8a9057e3, 0x5b86d4fc,
14082 +
            0xb9033b82, 0x6815b89d, 0x69284ab8, 0xb83ec9a7, 0x5abb26d9, 0x8bada5c6, 0x0e0e927a,
14083 +
            0xdf181165, 0x3d9dfe1b, 0xec8b7d04, 0xa765fb3c, 0x76737823, 0x94f6975d, 0x45e01442,
14084 +
            0xc04323fe, 0x1155a0e1, 0xf3d04f9f, 0x22c6cc80, 0x640d43ef, 0xb51bc0f0, 0x579e2f8e,
14085 +
            0x8688ac91, 0x032b9b2d, 0xd23d1832, 0x30b8f74c, 0xe1ae7453, 0xaa40f26b, 0x7b567174,
14086 +
            0x99d39e0a, 0x48c51d15, 0xcd662aa9, 0x1c70a9b6, 0xfef546c8, 0x2fe3c5d7, 0x73625816,
14087 +
            0xa274db09, 0x40f13477, 0x91e7b768, 0x144480d4, 0xc55203cb, 0x27d7ecb5, 0xf6c16faa,
14088 +
            0xbd2fe992, 0x6c396a8d, 0x8ebc85f3, 0x5faa06ec, 0xda093150, 0x0b1fb24f, 0xe99a5d31,
14089 +
            0x388cde2e, 0x7e475141, 0xaf51d25e, 0x4dd43d20, 0x9cc2be3f, 0x19618983, 0xc8770a9c,
14090 +
            0x2af2e5e2, 0xfbe466fd, 0xb00ae0c5, 0x611c63da, 0x83998ca4, 0x528f0fbb, 0xd72c3807,
14091 +
            0x063abb18, 0xe4bf5466, 0x35a9d779, 0x5dbc6fe4, 0x8caaecfb, 0x6e2f0385, 0xbf39809a,
14092 +
            0x3a9ab726, 0xeb8c3439, 0x0909db47, 0xd81f5858, 0x93f1de60, 0x42e75d7f, 0xa062b201,
14093 +
            0x7174311e, 0xf4d706a2, 0x25c185bd, 0xc7446ac3, 0x1652e9dc, 0x509966b3, 0x818fe5ac,
14094 +
            0x630a0ad2, 0xb21c89cd, 0x37bfbe71, 0xe6a93d6e, 0x042cd210, 0xd53a510f, 0x9ed4d737,
14095 +
            0x4fc25428, 0xad47bb56, 0x7c513849, 0xf9f20ff5, 0x28e48cea, 0xca616394, 0x1b77e08b,
14096 +
            0x47f67d4a, 0x96e0fe55, 0x7465112b, 0xa5739234, 0x20d0a588, 0xf1c62697, 0x1343c9e9,
14097 +
            0xc2554af6, 0x89bbccce, 0x58ad4fd1, 0xba28a0af, 0x6b3e23b0, 0xee9d140c, 0x3f8b9713,
14098 +
            0xdd0e786d, 0x0c18fb72, 0x4ad3741d, 0x9bc5f702, 0x7940187c, 0xa8569b63, 0x2df5acdf,
14099 +
            0xfce32fc0, 0x1e66c0be, 0xcf7043a1, 0x849ec599, 0x55884686, 0xb70da9f8, 0x661b2ae7,
14100 +
            0xe3b81d5b, 0x32ae9e44, 0xd02b713a, 0x013df225,
14101 +
        ],
14102 +
        [
14103 +
            0x00000000, 0xadf00751, 0xca5e64fd, 0x67ae63ac, 0x0502a3a5, 0xa8f2a4f4, 0xcf5cc758,
14104 +
            0x62acc009, 0x0a05474a, 0xa7f5401b, 0xc05b23b7, 0x6dab24e6, 0x0f07e4ef, 0xa2f7e3be,
14105 +
            0xc5598012, 0x68a98743, 0x140a8e94, 0xb9fa89c5, 0xde54ea69, 0x73a4ed38, 0x11082d31,
14106 +
            0xbcf82a60, 0xdb5649cc, 0x76a64e9d, 0x1e0fc9de, 0xb3ffce8f, 0xd451ad23, 0x79a1aa72,
14107 +
            0x1b0d6a7b, 0xb6fd6d2a, 0xd1530e86, 0x7ca309d7, 0x28151d28, 0x85e51a79, 0xe24b79d5,
14108 +
            0x4fbb7e84, 0x2d17be8d, 0x80e7b9dc, 0xe749da70, 0x4ab9dd21, 0x22105a62, 0x8fe05d33,
14109 +
            0xe84e3e9f, 0x45be39ce, 0x2712f9c7, 0x8ae2fe96, 0xed4c9d3a, 0x40bc9a6b, 0x3c1f93bc,
14110 +
            0x91ef94ed, 0xf641f741, 0x5bb1f010, 0x391d3019, 0x94ed3748, 0xf34354e4, 0x5eb353b5,
14111 +
            0x361ad4f6, 0x9bead3a7, 0xfc44b00b, 0x51b4b75a, 0x33187753, 0x9ee87002, 0xf94613ae,
14112 +
            0x54b614ff, 0x502a3a50, 0xfdda3d01, 0x9a745ead, 0x378459fc, 0x552899f5, 0xf8d89ea4,
14113 +
            0x9f76fd08, 0x3286fa59, 0x5a2f7d1a, 0xf7df7a4b, 0x907119e7, 0x3d811eb6, 0x5f2ddebf,
14114 +
            0xf2ddd9ee, 0x9573ba42, 0x3883bd13, 0x4420b4c4, 0xe9d0b395, 0x8e7ed039, 0x238ed768,
14115 +
            0x41221761, 0xecd21030, 0x8b7c739c, 0x268c74cd, 0x4e25f38e, 0xe3d5f4df, 0x847b9773,
14116 +
            0x298b9022, 0x4b27502b, 0xe6d7577a, 0x817934d6, 0x2c893387, 0x783f2778, 0xd5cf2029,
14117 +
            0xb2614385, 0x1f9144d4, 0x7d3d84dd, 0xd0cd838c, 0xb763e020, 0x1a93e771, 0x723a6032,
14118 +
            0xdfca6763, 0xb86404cf, 0x1594039e, 0x7738c397, 0xdac8c4c6, 0xbd66a76a, 0x1096a03b,
14119 +
            0x6c35a9ec, 0xc1c5aebd, 0xa66bcd11, 0x0b9bca40, 0x69370a49, 0xc4c70d18, 0xa3696eb4,
14120 +
            0x0e9969e5, 0x6630eea6, 0xcbc0e9f7, 0xac6e8a5b, 0x019e8d0a, 0x63324d03, 0xcec24a52,
14121 +
            0xa96c29fe, 0x049c2eaf, 0xa05474a0, 0x0da473f1, 0x6a0a105d, 0xc7fa170c, 0xa556d705,
14122 +
            0x08a6d054, 0x6f08b3f8, 0xc2f8b4a9, 0xaa5133ea, 0x07a134bb, 0x600f5717, 0xcdff5046,
14123 +
            0xaf53904f, 0x02a3971e, 0x650df4b2, 0xc8fdf3e3, 0xb45efa34, 0x19aefd65, 0x7e009ec9,
14124 +
            0xd3f09998, 0xb15c5991, 0x1cac5ec0, 0x7b023d6c, 0xd6f23a3d, 0xbe5bbd7e, 0x13abba2f,
14125 +
            0x7405d983, 0xd9f5ded2, 0xbb591edb, 0x16a9198a, 0x71077a26, 0xdcf77d77, 0x88416988,
14126 +
            0x25b16ed9, 0x421f0d75, 0xefef0a24, 0x8d43ca2d, 0x20b3cd7c, 0x471daed0, 0xeaeda981,
14127 +
            0x82442ec2, 0x2fb42993, 0x481a4a3f, 0xe5ea4d6e, 0x87468d67, 0x2ab68a36, 0x4d18e99a,
14128 +
            0xe0e8eecb, 0x9c4be71c, 0x31bbe04d, 0x561583e1, 0xfbe584b0, 0x994944b9, 0x34b943e8,
14129 +
            0x53172044, 0xfee72715, 0x964ea056, 0x3bbea707, 0x5c10c4ab, 0xf1e0c3fa, 0x934c03f3,
14130 +
            0x3ebc04a2, 0x5912670e, 0xf4e2605f, 0xf07e4ef0, 0x5d8e49a1, 0x3a202a0d, 0x97d02d5c,
14131 +
            0xf57ced55, 0x588cea04, 0x3f2289a8, 0x92d28ef9, 0xfa7b09ba, 0x578b0eeb, 0x30256d47,
14132 +
            0x9dd56a16, 0xff79aa1f, 0x5289ad4e, 0x3527cee2, 0x98d7c9b3, 0xe474c064, 0x4984c735,
14133 +
            0x2e2aa499, 0x83daa3c8, 0xe17663c1, 0x4c866490, 0x2b28073c, 0x86d8006d, 0xee71872e,
14134 +
            0x4381807f, 0x242fe3d3, 0x89dfe482, 0xeb73248b, 0x468323da, 0x212d4076, 0x8cdd4727,
14135 +
            0xd86b53d8, 0x759b5489, 0x12353725, 0xbfc53074, 0xdd69f07d, 0x7099f72c, 0x17379480,
14136 +
            0xbac793d1, 0xd26e1492, 0x7f9e13c3, 0x1830706f, 0xb5c0773e, 0xd76cb737, 0x7a9cb066,
14137 +
            0x1d32d3ca, 0xb0c2d49b, 0xcc61dd4c, 0x6191da1d, 0x063fb9b1, 0xabcfbee0, 0xc9637ee9,
14138 +
            0x649379b8, 0x033d1a14, 0xaecd1d45, 0xc6649a06, 0x6b949d57, 0x0c3afefb, 0xa1caf9aa,
14139 +
            0xc36639a3, 0x6e963ef2, 0x09385d5e, 0xa4c85a0f,
14140 +
        ],
14141 +
        [
14142 +
            0x00000000, 0xb7b47ba4, 0xfed69d17, 0x4962e6b3, 0x6c135071, 0xdba72bd5, 0x92c5cd66,
14143 +
            0x2571b6c2, 0xd826a0e2, 0x6f92db46, 0x26f03df5, 0x91444651, 0xb435f093, 0x03818b37,
14144 +
            0x4ae36d84, 0xfd571620, 0x21f32b9b, 0x9647503f, 0xdf25b68c, 0x6891cd28, 0x4de07bea,
14145 +
            0xfa54004e, 0xb336e6fd, 0x04829d59, 0xf9d58b79, 0x4e61f0dd, 0x0703166e, 0xb0b76dca,
14146 +
            0x95c6db08, 0x2272a0ac, 0x6b10461f, 0xdca43dbb, 0x43e65736, 0xf4522c92, 0xbd30ca21,
14147 +
            0x0a84b185, 0x2ff50747, 0x98417ce3, 0xd1239a50, 0x6697e1f4, 0x9bc0f7d4, 0x2c748c70,
14148 +
            0x65166ac3, 0xd2a21167, 0xf7d3a7a5, 0x4067dc01, 0x09053ab2, 0xbeb14116, 0x62157cad,
14149 +
            0xd5a10709, 0x9cc3e1ba, 0x2b779a1e, 0x0e062cdc, 0xb9b25778, 0xf0d0b1cb, 0x4764ca6f,
14150 +
            0xba33dc4f, 0x0d87a7eb, 0x44e54158, 0xf3513afc, 0xd6208c3e, 0x6194f79a, 0x28f61129,
14151 +
            0x9f426a8d, 0x87ccae6c, 0x3078d5c8, 0x791a337b, 0xceae48df, 0xebdffe1d, 0x5c6b85b9,
14152 +
            0x1509630a, 0xa2bd18ae, 0x5fea0e8e, 0xe85e752a, 0xa13c9399, 0x1688e83d, 0x33f95eff,
14153 +
            0x844d255b, 0xcd2fc3e8, 0x7a9bb84c, 0xa63f85f7, 0x118bfe53, 0x58e918e0, 0xef5d6344,
14154 +
            0xca2cd586, 0x7d98ae22, 0x34fa4891, 0x834e3335, 0x7e192515, 0xc9ad5eb1, 0x80cfb802,
14155 +
            0x377bc3a6, 0x120a7564, 0xa5be0ec0, 0xecdce873, 0x5b6893d7, 0xc42af95a, 0x739e82fe,
14156 +
            0x3afc644d, 0x8d481fe9, 0xa839a92b, 0x1f8dd28f, 0x56ef343c, 0xe15b4f98, 0x1c0c59b8,
14157 +
            0xabb8221c, 0xe2dac4af, 0x556ebf0b, 0x701f09c9, 0xc7ab726d, 0x8ec994de, 0x397def7a,
14158 +
            0xe5d9d2c1, 0x526da965, 0x1b0f4fd6, 0xacbb3472, 0x89ca82b0, 0x3e7ef914, 0x771c1fa7,
14159 +
            0xc0a86403, 0x3dff7223, 0x8a4b0987, 0xc329ef34, 0x749d9490, 0x51ec2252, 0xe65859f6,
14160 +
            0xaf3abf45, 0x188ec4e1, 0x9e273687, 0x29934d23, 0x60f1ab90, 0xd745d034, 0xf23466f6,
14161 +
            0x45801d52, 0x0ce2fbe1, 0xbb568045, 0x46019665, 0xf1b5edc1, 0xb8d70b72, 0x0f6370d6,
14162 +
            0x2a12c614, 0x9da6bdb0, 0xd4c45b03, 0x637020a7, 0xbfd41d1c, 0x086066b8, 0x4102800b,
14163 +
            0xf6b6fbaf, 0xd3c74d6d, 0x647336c9, 0x2d11d07a, 0x9aa5abde, 0x67f2bdfe, 0xd046c65a,
14164 +
            0x992420e9, 0x2e905b4d, 0x0be1ed8f, 0xbc55962b, 0xf5377098, 0x42830b3c, 0xddc161b1,
14165 +
            0x6a751a15, 0x2317fca6, 0x94a38702, 0xb1d231c0, 0x06664a64, 0x4f04acd7, 0xf8b0d773,
14166 +
            0x05e7c153, 0xb253baf7, 0xfb315c44, 0x4c8527e0, 0x69f49122, 0xde40ea86, 0x97220c35,
14167 +
            0x20967791, 0xfc324a2a, 0x4b86318e, 0x02e4d73d, 0xb550ac99, 0x90211a5b, 0x279561ff,
14168 +
            0x6ef7874c, 0xd943fce8, 0x2414eac8, 0x93a0916c, 0xdac277df, 0x6d760c7b, 0x4807bab9,
14169 +
            0xffb3c11d, 0xb6d127ae, 0x01655c0a, 0x19eb98eb, 0xae5fe34f, 0xe73d05fc, 0x50897e58,
14170 +
            0x75f8c89a, 0xc24cb33e, 0x8b2e558d, 0x3c9a2e29, 0xc1cd3809, 0x767943ad, 0x3f1ba51e,
14171 +
            0x88afdeba, 0xadde6878, 0x1a6a13dc, 0x5308f56f, 0xe4bc8ecb, 0x3818b370, 0x8facc8d4,
14172 +
            0xc6ce2e67, 0x717a55c3, 0x540be301, 0xe3bf98a5, 0xaadd7e16, 0x1d6905b2, 0xe03e1392,
14173 +
            0x578a6836, 0x1ee88e85, 0xa95cf521, 0x8c2d43e3, 0x3b993847, 0x72fbdef4, 0xc54fa550,
14174 +
            0x5a0dcfdd, 0xedb9b479, 0xa4db52ca, 0x136f296e, 0x361e9fac, 0x81aae408, 0xc8c802bb,
14175 +
            0x7f7c791f, 0x822b6f3f, 0x359f149b, 0x7cfdf228, 0xcb49898c, 0xee383f4e, 0x598c44ea,
14176 +
            0x10eea259, 0xa75ad9fd, 0x7bfee446, 0xcc4a9fe2, 0x85287951, 0x329c02f5, 0x17edb437,
14177 +
            0xa059cf93, 0xe93b2920, 0x5e8f5284, 0xa3d844a4, 0x146c3f00, 0x5d0ed9b3, 0xeabaa217,
14178 +
            0xcfcb14d5, 0x787f6f71, 0x311d89c2, 0x86a9f266,
14179 +
        ],
14180 +
        [
14181 +
            0x00000000, 0x5c24e95c, 0xb849d2b8, 0xe46d3be4, 0xe12dcf2f, 0xbd092673, 0x59641d97,
14182 +
            0x0540f4cb, 0x53e5f401, 0x0fc11d5d, 0xebac26b9, 0xb788cfe5, 0xb2c83b2e, 0xeeecd272,
14183 +
            0x0a81e996, 0x56a500ca, 0xa7cbe802, 0xfbef015e, 0x1f823aba, 0x43a6d3e6, 0x46e6272d,
14184 +
            0x1ac2ce71, 0xfeaff595, 0xa28b1cc9, 0xf42e1c03, 0xa80af55f, 0x4c67cebb, 0x104327e7,
14185 +
            0x1503d32c, 0x49273a70, 0xad4a0194, 0xf16ee8c8, 0xde29ba5b, 0x820d5307, 0x666068e3,
14186 +
            0x3a4481bf, 0x3f047574, 0x63209c28, 0x874da7cc, 0xdb694e90, 0x8dcc4e5a, 0xd1e8a706,
14187 +
            0x35859ce2, 0x69a175be, 0x6ce18175, 0x30c56829, 0xd4a853cd, 0x888cba91, 0x79e25259,
14188 +
            0x25c6bb05, 0xc1ab80e1, 0x9d8f69bd, 0x98cf9d76, 0xc4eb742a, 0x20864fce, 0x7ca2a692,
14189 +
            0x2a07a658, 0x76234f04, 0x924e74e0, 0xce6a9dbc, 0xcb2a6977, 0x970e802b, 0x7363bbcf,
14190 +
            0x2f475293, 0x2ded1ee9, 0x71c9f7b5, 0x95a4cc51, 0xc980250d, 0xccc0d1c6, 0x90e4389a,
14191 +
            0x7489037e, 0x28adea22, 0x7e08eae8, 0x222c03b4, 0xc6413850, 0x9a65d10c, 0x9f2525c7,
14192 +
            0xc301cc9b, 0x276cf77f, 0x7b481e23, 0x8a26f6eb, 0xd6021fb7, 0x326f2453, 0x6e4bcd0f,
14193 +
            0x6b0b39c4, 0x372fd098, 0xd342eb7c, 0x8f660220, 0xd9c302ea, 0x85e7ebb6, 0x618ad052,
14194 +
            0x3dae390e, 0x38eecdc5, 0x64ca2499, 0x80a71f7d, 0xdc83f621, 0xf3c4a4b2, 0xafe04dee,
14195 +
            0x4b8d760a, 0x17a99f56, 0x12e96b9d, 0x4ecd82c1, 0xaaa0b925, 0xf6845079, 0xa02150b3,
14196 +
            0xfc05b9ef, 0x1868820b, 0x444c6b57, 0x410c9f9c, 0x1d2876c0, 0xf9454d24, 0xa561a478,
14197 +
            0x540f4cb0, 0x082ba5ec, 0xec469e08, 0xb0627754, 0xb522839f, 0xe9066ac3, 0x0d6b5127,
14198 +
            0x514fb87b, 0x07eab8b1, 0x5bce51ed, 0xbfa36a09, 0xe3878355, 0xe6c7779e, 0xbae39ec2,
14199 +
            0x5e8ea526, 0x02aa4c7a, 0x5bda3dd2, 0x07fed48e, 0xe393ef6a, 0xbfb70636, 0xbaf7f2fd,
14200 +
            0xe6d31ba1, 0x02be2045, 0x5e9ac919, 0x083fc9d3, 0x541b208f, 0xb0761b6b, 0xec52f237,
14201 +
            0xe91206fc, 0xb536efa0, 0x515bd444, 0x0d7f3d18, 0xfc11d5d0, 0xa0353c8c, 0x44580768,
14202 +
            0x187cee34, 0x1d3c1aff, 0x4118f3a3, 0xa575c847, 0xf951211b, 0xaff421d1, 0xf3d0c88d,
14203 +
            0x17bdf369, 0x4b991a35, 0x4ed9eefe, 0x12fd07a2, 0xf6903c46, 0xaab4d51a, 0x85f38789,
14204 +
            0xd9d76ed5, 0x3dba5531, 0x619ebc6d, 0x64de48a6, 0x38faa1fa, 0xdc979a1e, 0x80b37342,
14205 +
            0xd6167388, 0x8a329ad4, 0x6e5fa130, 0x327b486c, 0x373bbca7, 0x6b1f55fb, 0x8f726e1f,
14206 +
            0xd3568743, 0x22386f8b, 0x7e1c86d7, 0x9a71bd33, 0xc655546f, 0xc315a0a4, 0x9f3149f8,
14207 +
            0x7b5c721c, 0x27789b40, 0x71dd9b8a, 0x2df972d6, 0xc9944932, 0x95b0a06e, 0x90f054a5,
14208 +
            0xccd4bdf9, 0x28b9861d, 0x749d6f41, 0x7637233b, 0x2a13ca67, 0xce7ef183, 0x925a18df,
14209 +
            0x971aec14, 0xcb3e0548, 0x2f533eac, 0x7377d7f0, 0x25d2d73a, 0x79f63e66, 0x9d9b0582,
14210 +
            0xc1bfecde, 0xc4ff1815, 0x98dbf149, 0x7cb6caad, 0x209223f1, 0xd1fccb39, 0x8dd82265,
14211 +
            0x69b51981, 0x3591f0dd, 0x30d10416, 0x6cf5ed4a, 0x8898d6ae, 0xd4bc3ff2, 0x82193f38,
14212 +
            0xde3dd664, 0x3a50ed80, 0x667404dc, 0x6334f017, 0x3f10194b, 0xdb7d22af, 0x8759cbf3,
14213 +
            0xa81e9960, 0xf43a703c, 0x10574bd8, 0x4c73a284, 0x4933564f, 0x1517bf13, 0xf17a84f7,
14214 +
            0xad5e6dab, 0xfbfb6d61, 0xa7df843d, 0x43b2bfd9, 0x1f965685, 0x1ad6a24e, 0x46f24b12,
14215 +
            0xa29f70f6, 0xfebb99aa, 0x0fd57162, 0x53f1983e, 0xb79ca3da, 0xebb84a86, 0xeef8be4d,
14216 +
            0xb2dc5711, 0x56b16cf5, 0x0a9585a9, 0x5c308563, 0x00146c3f, 0xe47957db, 0xb85dbe87,
14217 +
            0xbd1d4a4c, 0xe139a310, 0x055498f4, 0x597071a8,
14218 +
        ],
14219 +
        [
14220 +
            0x00000000, 0x50428a9c, 0xa0851538, 0xf0c79fa4, 0xd0b4402f, 0x80f6cab3, 0x70315517,
14221 +
            0x2073df8b, 0x30d6ea01, 0x6094609d, 0x9053ff39, 0xc01175a5, 0xe062aa2e, 0xb02020b2,
14222 +
            0x40e7bf16, 0x10a5358a, 0x61add402, 0x31ef5e9e, 0xc128c13a, 0x916a4ba6, 0xb119942d,
14223 +
            0xe15b1eb1, 0x119c8115, 0x41de0b89, 0x517b3e03, 0x0139b49f, 0xf1fe2b3b, 0xa1bca1a7,
14224 +
            0x81cf7e2c, 0xd18df4b0, 0x214a6b14, 0x7108e188, 0xc35ba804, 0x93192298, 0x63debd3c,
14225 +
            0x339c37a0, 0x13efe82b, 0x43ad62b7, 0xb36afd13, 0xe328778f, 0xf38d4205, 0xa3cfc899,
14226 +
            0x5308573d, 0x034adda1, 0x2339022a, 0x737b88b6, 0x83bc1712, 0xd3fe9d8e, 0xa2f67c06,
14227 +
            0xf2b4f69a, 0x0273693e, 0x5231e3a2, 0x72423c29, 0x2200b6b5, 0xd2c72911, 0x8285a38d,
14228 +
            0x92209607, 0xc2621c9b, 0x32a5833f, 0x62e709a3, 0x4294d628, 0x12d65cb4, 0xe211c310,
14229 +
            0xb253498c, 0x17093a57, 0x474bb0cb, 0xb78c2f6f, 0xe7cea5f3, 0xc7bd7a78, 0x97fff0e4,
14230 +
            0x67386f40, 0x377ae5dc, 0x27dfd056, 0x779d5aca, 0x875ac56e, 0xd7184ff2, 0xf76b9079,
14231 +
            0xa7291ae5, 0x57ee8541, 0x07ac0fdd, 0x76a4ee55, 0x26e664c9, 0xd621fb6d, 0x866371f1,
14232 +
            0xa610ae7a, 0xf65224e6, 0x0695bb42, 0x56d731de, 0x46720454, 0x16308ec8, 0xe6f7116c,
14233 +
            0xb6b59bf0, 0x96c6447b, 0xc684cee7, 0x36435143, 0x6601dbdf, 0xd4529253, 0x841018cf,
14234 +
            0x74d7876b, 0x24950df7, 0x04e6d27c, 0x54a458e0, 0xa463c744, 0xf4214dd8, 0xe4847852,
14235 +
            0xb4c6f2ce, 0x44016d6a, 0x1443e7f6, 0x3430387d, 0x6472b2e1, 0x94b52d45, 0xc4f7a7d9,
14236 +
            0xb5ff4651, 0xe5bdcccd, 0x157a5369, 0x4538d9f5, 0x654b067e, 0x35098ce2, 0xc5ce1346,
14237 +
            0x958c99da, 0x8529ac50, 0xd56b26cc, 0x25acb968, 0x75ee33f4, 0x559dec7f, 0x05df66e3,
14238 +
            0xf518f947, 0xa55a73db, 0x2e1274ae, 0x7e50fe32, 0x8e976196, 0xded5eb0a, 0xfea63481,
14239 +
            0xaee4be1d, 0x5e2321b9, 0x0e61ab25, 0x1ec49eaf, 0x4e861433, 0xbe418b97, 0xee03010b,
14240 +
            0xce70de80, 0x9e32541c, 0x6ef5cbb8, 0x3eb74124, 0x4fbfa0ac, 0x1ffd2a30, 0xef3ab594,
14241 +
            0xbf783f08, 0x9f0be083, 0xcf496a1f, 0x3f8ef5bb, 0x6fcc7f27, 0x7f694aad, 0x2f2bc031,
14242 +
            0xdfec5f95, 0x8faed509, 0xafdd0a82, 0xff9f801e, 0x0f581fba, 0x5f1a9526, 0xed49dcaa,
14243 +
            0xbd0b5636, 0x4dccc992, 0x1d8e430e, 0x3dfd9c85, 0x6dbf1619, 0x9d7889bd, 0xcd3a0321,
14244 +
            0xdd9f36ab, 0x8dddbc37, 0x7d1a2393, 0x2d58a90f, 0x0d2b7684, 0x5d69fc18, 0xadae63bc,
14245 +
            0xfdece920, 0x8ce408a8, 0xdca68234, 0x2c611d90, 0x7c23970c, 0x5c504887, 0x0c12c21b,
14246 +
            0xfcd55dbf, 0xac97d723, 0xbc32e2a9, 0xec706835, 0x1cb7f791, 0x4cf57d0d, 0x6c86a286,
14247 +
            0x3cc4281a, 0xcc03b7be, 0x9c413d22, 0x391b4ef9, 0x6959c465, 0x999e5bc1, 0xc9dcd15d,
14248 +
            0xe9af0ed6, 0xb9ed844a, 0x492a1bee, 0x19689172, 0x09cda4f8, 0x598f2e64, 0xa948b1c0,
14249 +
            0xf90a3b5c, 0xd979e4d7, 0x893b6e4b, 0x79fcf1ef, 0x29be7b73, 0x58b69afb, 0x08f41067,
14250 +
            0xf8338fc3, 0xa871055f, 0x8802dad4, 0xd8405048, 0x2887cfec, 0x78c54570, 0x686070fa,
14251 +
            0x3822fa66, 0xc8e565c2, 0x98a7ef5e, 0xb8d430d5, 0xe896ba49, 0x185125ed, 0x4813af71,
14252 +
            0xfa40e6fd, 0xaa026c61, 0x5ac5f3c5, 0x0a877959, 0x2af4a6d2, 0x7ab62c4e, 0x8a71b3ea,
14253 +
            0xda333976, 0xca960cfc, 0x9ad48660, 0x6a1319c4, 0x3a519358, 0x1a224cd3, 0x4a60c64f,
14254 +
            0xbaa759eb, 0xeae5d377, 0x9bed32ff, 0xcbafb863, 0x3b6827c7, 0x6b2aad5b, 0x4b5972d0,
14255 +
            0x1b1bf84c, 0xebdc67e8, 0xbb9eed74, 0xab3bd8fe, 0xfb795262, 0x0bbecdc6, 0x5bfc475a,
14256 +
            0x7b8f98d1, 0x2bcd124d, 0xdb0a8de9, 0x8b480775,
14257 +
        ],
14258 +
    ];
14259 +
14260 +
    pub static CRC32_BASE91_D_TABLE: [[u32; 256]; 16] = [
14261 +
        [
14262 +
            0x00000000, 0x2bddd04f, 0x57bba09e, 0x7c6670d1, 0xaf77413c, 0x84aa9173, 0xf8cce1a2,
14263 +
            0xd31131ed, 0xf6dd1a53, 0xdd00ca1c, 0xa166bacd, 0x8abb6a82, 0x59aa5b6f, 0x72778b20,
14264 +
            0x0e11fbf1, 0x25cc2bbe, 0x4589ac8d, 0x6e547cc2, 0x12320c13, 0x39efdc5c, 0xeafeedb1,
14265 +
            0xc1233dfe, 0xbd454d2f, 0x96989d60, 0xb354b6de, 0x98896691, 0xe4ef1640, 0xcf32c60f,
14266 +
            0x1c23f7e2, 0x37fe27ad, 0x4b98577c, 0x60458733, 0x8b13591a, 0xa0ce8955, 0xdca8f984,
14267 +
            0xf77529cb, 0x24641826, 0x0fb9c869, 0x73dfb8b8, 0x580268f7, 0x7dce4349, 0x56139306,
14268 +
            0x2a75e3d7, 0x01a83398, 0xd2b90275, 0xf964d23a, 0x8502a2eb, 0xaedf72a4, 0xce9af597,
14269 +
            0xe54725d8, 0x99215509, 0xb2fc8546, 0x61edb4ab, 0x4a3064e4, 0x36561435, 0x1d8bc47a,
14270 +
            0x3847efc4, 0x139a3f8b, 0x6ffc4f5a, 0x44219f15, 0x9730aef8, 0xbced7eb7, 0xc08b0e66,
14271 +
            0xeb56de29, 0xbe152a1f, 0x95c8fa50, 0xe9ae8a81, 0xc2735ace, 0x11626b23, 0x3abfbb6c,
14272 +
            0x46d9cbbd, 0x6d041bf2, 0x48c8304c, 0x6315e003, 0x1f7390d2, 0x34ae409d, 0xe7bf7170,
14273 +
            0xcc62a13f, 0xb004d1ee, 0x9bd901a1, 0xfb9c8692, 0xd04156dd, 0xac27260c, 0x87faf643,
14274 +
            0x54ebc7ae, 0x7f3617e1, 0x03506730, 0x288db77f, 0x0d419cc1, 0x269c4c8e, 0x5afa3c5f,
14275 +
            0x7127ec10, 0xa236ddfd, 0x89eb0db2, 0xf58d7d63, 0xde50ad2c, 0x35067305, 0x1edba34a,
14276 +
            0x62bdd39b, 0x496003d4, 0x9a713239, 0xb1ace276, 0xcdca92a7, 0xe61742e8, 0xc3db6956,
14277 +
            0xe806b919, 0x9460c9c8, 0xbfbd1987, 0x6cac286a, 0x4771f825, 0x3b1788f4, 0x10ca58bb,
14278 +
            0x708fdf88, 0x5b520fc7, 0x27347f16, 0x0ce9af59, 0xdff89eb4, 0xf4254efb, 0x88433e2a,
14279 +
            0xa39eee65, 0x8652c5db, 0xad8f1594, 0xd1e96545, 0xfa34b50a, 0x292584e7, 0x02f854a8,
14280 +
            0x7e9e2479, 0x5543f436, 0xd419cc15, 0xffc41c5a, 0x83a26c8b, 0xa87fbcc4, 0x7b6e8d29,
14281 +
            0x50b35d66, 0x2cd52db7, 0x0708fdf8, 0x22c4d646, 0x09190609, 0x757f76d8, 0x5ea2a697,
14282 +
            0x8db3977a, 0xa66e4735, 0xda0837e4, 0xf1d5e7ab, 0x91906098, 0xba4db0d7, 0xc62bc006,
14283 +
            0xedf61049, 0x3ee721a4, 0x153af1eb, 0x695c813a, 0x42815175, 0x674d7acb, 0x4c90aa84,
14284 +
            0x30f6da55, 0x1b2b0a1a, 0xc83a3bf7, 0xe3e7ebb8, 0x9f819b69, 0xb45c4b26, 0x5f0a950f,
14285 +
            0x74d74540, 0x08b13591, 0x236ce5de, 0xf07dd433, 0xdba0047c, 0xa7c674ad, 0x8c1ba4e2,
14286 +
            0xa9d78f5c, 0x820a5f13, 0xfe6c2fc2, 0xd5b1ff8d, 0x06a0ce60, 0x2d7d1e2f, 0x511b6efe,
14287 +
            0x7ac6beb1, 0x1a833982, 0x315ee9cd, 0x4d38991c, 0x66e54953, 0xb5f478be, 0x9e29a8f1,
14288 +
            0xe24fd820, 0xc992086f, 0xec5e23d1, 0xc783f39e, 0xbbe5834f, 0x90385300, 0x432962ed,
14289 +
            0x68f4b2a2, 0x1492c273, 0x3f4f123c, 0x6a0ce60a, 0x41d13645, 0x3db74694, 0x166a96db,
14290 +
            0xc57ba736, 0xeea67779, 0x92c007a8, 0xb91dd7e7, 0x9cd1fc59, 0xb70c2c16, 0xcb6a5cc7,
14291 +
            0xe0b78c88, 0x33a6bd65, 0x187b6d2a, 0x641d1dfb, 0x4fc0cdb4, 0x2f854a87, 0x04589ac8,
14292 +
            0x783eea19, 0x53e33a56, 0x80f20bbb, 0xab2fdbf4, 0xd749ab25, 0xfc947b6a, 0xd95850d4,
14293 +
            0xf285809b, 0x8ee3f04a, 0xa53e2005, 0x762f11e8, 0x5df2c1a7, 0x2194b176, 0x0a496139,
14294 +
            0xe11fbf10, 0xcac26f5f, 0xb6a41f8e, 0x9d79cfc1, 0x4e68fe2c, 0x65b52e63, 0x19d35eb2,
14295 +
            0x320e8efd, 0x17c2a543, 0x3c1f750c, 0x407905dd, 0x6ba4d592, 0xb8b5e47f, 0x93683430,
14296 +
            0xef0e44e1, 0xc4d394ae, 0xa496139d, 0x8f4bc3d2, 0xf32db303, 0xd8f0634c, 0x0be152a1,
14297 +
            0x203c82ee, 0x5c5af23f, 0x77872270, 0x524b09ce, 0x7996d981, 0x05f0a950, 0x2e2d791f,
14298 +
            0xfd3c48f2, 0xd6e198bd, 0xaa87e86c, 0x815a3823,
14299 +
        ],
14300 +
        [
14301 +
            0x00000000, 0x9bf2dc71, 0x9fd620c9, 0x0424fcb8, 0x979fd9b9, 0x0c6d05c8, 0x0849f970,
14302 +
            0x93bb2501, 0x870c2b59, 0x1cfef728, 0x18da0b90, 0x8328d7e1, 0x1093f2e0, 0x8b612e91,
14303 +
            0x8f45d229, 0x14b70e58, 0xa62bce99, 0x3dd912e8, 0x39fdee50, 0xa20f3221, 0x31b41720,
14304 +
            0xaa46cb51, 0xae6237e9, 0x3590eb98, 0x2127e5c0, 0xbad539b1, 0xbef1c509, 0x25031978,
14305 +
            0xb6b83c79, 0x2d4ae008, 0x296e1cb0, 0xb29cc0c1, 0xe4640519, 0x7f96d968, 0x7bb225d0,
14306 +
            0xe040f9a1, 0x73fbdca0, 0xe80900d1, 0xec2dfc69, 0x77df2018, 0x63682e40, 0xf89af231,
14307 +
            0xfcbe0e89, 0x674cd2f8, 0xf4f7f7f9, 0x6f052b88, 0x6b21d730, 0xf0d30b41, 0x424fcb80,
14308 +
            0xd9bd17f1, 0xdd99eb49, 0x466b3738, 0xd5d01239, 0x4e22ce48, 0x4a0632f0, 0xd1f4ee81,
14309 +
            0xc543e0d9, 0x5eb13ca8, 0x5a95c010, 0xc1671c61, 0x52dc3960, 0xc92ee511, 0xcd0a19a9,
14310 +
            0x56f8c5d8, 0x60fb9219, 0xfb094e68, 0xff2db2d0, 0x64df6ea1, 0xf7644ba0, 0x6c9697d1,
14311 +
            0x68b26b69, 0xf340b718, 0xe7f7b940, 0x7c056531, 0x78219989, 0xe3d345f8, 0x706860f9,
14312 +
            0xeb9abc88, 0xefbe4030, 0x744c9c41, 0xc6d05c80, 0x5d2280f1, 0x59067c49, 0xc2f4a038,
14313 +
            0x514f8539, 0xcabd5948, 0xce99a5f0, 0x556b7981, 0x41dc77d9, 0xda2eaba8, 0xde0a5710,
14314 +
            0x45f88b61, 0xd643ae60, 0x4db17211, 0x49958ea9, 0xd26752d8, 0x849f9700, 0x1f6d4b71,
14315 +
            0x1b49b7c9, 0x80bb6bb8, 0x13004eb9, 0x88f292c8, 0x8cd66e70, 0x1724b201, 0x0393bc59,
14316 +
            0x98616028, 0x9c459c90, 0x07b740e1, 0x940c65e0, 0x0ffeb991, 0x0bda4529, 0x90289958,
14317 +
            0x22b45999, 0xb94685e8, 0xbd627950, 0x2690a521, 0xb52b8020, 0x2ed95c51, 0x2afda0e9,
14318 +
            0xb10f7c98, 0xa5b872c0, 0x3e4aaeb1, 0x3a6e5209, 0xa19c8e78, 0x3227ab79, 0xa9d57708,
14319 +
            0xadf18bb0, 0x360357c1, 0xc1f72432, 0x5a05f843, 0x5e2104fb, 0xc5d3d88a, 0x5668fd8b,
14320 +
            0xcd9a21fa, 0xc9bedd42, 0x524c0133, 0x46fb0f6b, 0xdd09d31a, 0xd92d2fa2, 0x42dff3d3,
14321 +
            0xd164d6d2, 0x4a960aa3, 0x4eb2f61b, 0xd5402a6a, 0x67dceaab, 0xfc2e36da, 0xf80aca62,
14322 +
            0x63f81613, 0xf0433312, 0x6bb1ef63, 0x6f9513db, 0xf467cfaa, 0xe0d0c1f2, 0x7b221d83,
14323 +
            0x7f06e13b, 0xe4f43d4a, 0x774f184b, 0xecbdc43a, 0xe8993882, 0x736be4f3, 0x2593212b,
14324 +
            0xbe61fd5a, 0xba4501e2, 0x21b7dd93, 0xb20cf892, 0x29fe24e3, 0x2ddad85b, 0xb628042a,
14325 +
            0xa29f0a72, 0x396dd603, 0x3d492abb, 0xa6bbf6ca, 0x3500d3cb, 0xaef20fba, 0xaad6f302,
14326 +
            0x31242f73, 0x83b8efb2, 0x184a33c3, 0x1c6ecf7b, 0x879c130a, 0x1427360b, 0x8fd5ea7a,
14327 +
            0x8bf116c2, 0x1003cab3, 0x04b4c4eb, 0x9f46189a, 0x9b62e422, 0x00903853, 0x932b1d52,
14328 +
            0x08d9c123, 0x0cfd3d9b, 0x970fe1ea, 0xa10cb62b, 0x3afe6a5a, 0x3eda96e2, 0xa5284a93,
14329 +
            0x36936f92, 0xad61b3e3, 0xa9454f5b, 0x32b7932a, 0x26009d72, 0xbdf24103, 0xb9d6bdbb,
14330 +
            0x222461ca, 0xb19f44cb, 0x2a6d98ba, 0x2e496402, 0xb5bbb873, 0x072778b2, 0x9cd5a4c3,
14331 +
            0x98f1587b, 0x0303840a, 0x90b8a10b, 0x0b4a7d7a, 0x0f6e81c2, 0x949c5db3, 0x802b53eb,
14332 +
            0x1bd98f9a, 0x1ffd7322, 0x840faf53, 0x17b48a52, 0x8c465623, 0x8862aa9b, 0x139076ea,
14333 +
            0x4568b332, 0xde9a6f43, 0xdabe93fb, 0x414c4f8a, 0xd2f76a8b, 0x4905b6fa, 0x4d214a42,
14334 +
            0xd6d39633, 0xc264986b, 0x5996441a, 0x5db2b8a2, 0xc64064d3, 0x55fb41d2, 0xce099da3,
14335 +
            0xca2d611b, 0x51dfbd6a, 0xe3437dab, 0x78b1a1da, 0x7c955d62, 0xe7678113, 0x74dca412,
14336 +
            0xef2e7863, 0xeb0a84db, 0x70f858aa, 0x644f56f2, 0xffbd8a83, 0xfb99763b, 0x606baa4a,
14337 +
            0xf3d08f4b, 0x6822533a, 0x6c06af82, 0xf7f473f3,
14338 +
        ],
14339 +
        [
14340 +
            0x00000000, 0x5bc9fd1b, 0xb793fa36, 0xec5a072d, 0xc7146c47, 0x9cdd915c, 0x70879671,
14341 +
            0x2b4e6b6a, 0x261b40a5, 0x7dd2bdbe, 0x9188ba93, 0xca414788, 0xe10f2ce2, 0xbac6d1f9,
14342 +
            0x569cd6d4, 0x0d552bcf, 0x4c36814a, 0x17ff7c51, 0xfba57b7c, 0xa06c8667, 0x8b22ed0d,
14343 +
            0xd0eb1016, 0x3cb1173b, 0x6778ea20, 0x6a2dc1ef, 0x31e43cf4, 0xddbe3bd9, 0x8677c6c2,
14344 +
            0xad39ada8, 0xf6f050b3, 0x1aaa579e, 0x4163aa85, 0x986d0294, 0xc3a4ff8f, 0x2ffef8a2,
14345 +
            0x743705b9, 0x5f796ed3, 0x04b093c8, 0xe8ea94e5, 0xb32369fe, 0xbe764231, 0xe5bfbf2a,
14346 +
            0x09e5b807, 0x522c451c, 0x79622e76, 0x22abd36d, 0xcef1d440, 0x9538295b, 0xd45b83de,
14347 +
            0x8f927ec5, 0x63c879e8, 0x380184f3, 0x134fef99, 0x48861282, 0xa4dc15af, 0xff15e8b4,
14348 +
            0xf240c37b, 0xa9893e60, 0x45d3394d, 0x1e1ac456, 0x3554af3c, 0x6e9d5227, 0x82c7550a,
14349 +
            0xd90ea811, 0x98e99d03, 0xc3206018, 0x2f7a6735, 0x74b39a2e, 0x5ffdf144, 0x04340c5f,
14350 +
            0xe86e0b72, 0xb3a7f669, 0xbef2dda6, 0xe53b20bd, 0x09612790, 0x52a8da8b, 0x79e6b1e1,
14351 +
            0x222f4cfa, 0xce754bd7, 0x95bcb6cc, 0xd4df1c49, 0x8f16e152, 0x634ce67f, 0x38851b64,
14352 +
            0x13cb700e, 0x48028d15, 0xa4588a38, 0xff917723, 0xf2c45cec, 0xa90da1f7, 0x4557a6da,
14353 +
            0x1e9e5bc1, 0x35d030ab, 0x6e19cdb0, 0x8243ca9d, 0xd98a3786, 0x00849f97, 0x5b4d628c,
14354 +
            0xb71765a1, 0xecde98ba, 0xc790f3d0, 0x9c590ecb, 0x700309e6, 0x2bcaf4fd, 0x269fdf32,
14355 +
            0x7d562229, 0x910c2504, 0xcac5d81f, 0xe18bb375, 0xba424e6e, 0x56184943, 0x0dd1b458,
14356 +
            0x4cb21edd, 0x177be3c6, 0xfb21e4eb, 0xa0e819f0, 0x8ba6729a, 0xd06f8f81, 0x3c3588ac,
14357 +
            0x67fc75b7, 0x6aa95e78, 0x3160a363, 0xdd3aa44e, 0x86f35955, 0xadbd323f, 0xf674cf24,
14358 +
            0x1a2ec809, 0x41e73512, 0x99e0a22d, 0xc2295f36, 0x2e73581b, 0x75baa500, 0x5ef4ce6a,
14359 +
            0x053d3371, 0xe967345c, 0xb2aec947, 0xbffbe288, 0xe4321f93, 0x086818be, 0x53a1e5a5,
14360 +
            0x78ef8ecf, 0x232673d4, 0xcf7c74f9, 0x94b589e2, 0xd5d62367, 0x8e1fde7c, 0x6245d951,
14361 +
            0x398c244a, 0x12c24f20, 0x490bb23b, 0xa551b516, 0xfe98480d, 0xf3cd63c2, 0xa8049ed9,
14362 +
            0x445e99f4, 0x1f9764ef, 0x34d90f85, 0x6f10f29e, 0x834af5b3, 0xd88308a8, 0x018da0b9,
14363 +
            0x5a445da2, 0xb61e5a8f, 0xedd7a794, 0xc699ccfe, 0x9d5031e5, 0x710a36c8, 0x2ac3cbd3,
14364 +
            0x2796e01c, 0x7c5f1d07, 0x90051a2a, 0xcbcce731, 0xe0828c5b, 0xbb4b7140, 0x5711766d,
14365 +
            0x0cd88b76, 0x4dbb21f3, 0x1672dce8, 0xfa28dbc5, 0xa1e126de, 0x8aaf4db4, 0xd166b0af,
14366 +
            0x3d3cb782, 0x66f54a99, 0x6ba06156, 0x30699c4d, 0xdc339b60, 0x87fa667b, 0xacb40d11,
14367 +
            0xf77df00a, 0x1b27f727, 0x40ee0a3c, 0x01093f2e, 0x5ac0c235, 0xb69ac518, 0xed533803,
14368 +
            0xc61d5369, 0x9dd4ae72, 0x718ea95f, 0x2a475444, 0x27127f8b, 0x7cdb8290, 0x908185bd,
14369 +
            0xcb4878a6, 0xe00613cc, 0xbbcfeed7, 0x5795e9fa, 0x0c5c14e1, 0x4d3fbe64, 0x16f6437f,
14370 +
            0xfaac4452, 0xa165b949, 0x8a2bd223, 0xd1e22f38, 0x3db82815, 0x6671d50e, 0x6b24fec1,
14371 +
            0x30ed03da, 0xdcb704f7, 0x877ef9ec, 0xac309286, 0xf7f96f9d, 0x1ba368b0, 0x406a95ab,
14372 +
            0x99643dba, 0xc2adc0a1, 0x2ef7c78c, 0x753e3a97, 0x5e7051fd, 0x05b9ace6, 0xe9e3abcb,
14373 +
            0xb22a56d0, 0xbf7f7d1f, 0xe4b68004, 0x08ec8729, 0x53257a32, 0x786b1158, 0x23a2ec43,
14374 +
            0xcff8eb6e, 0x94311675, 0xd552bcf0, 0x8e9b41eb, 0x62c146c6, 0x3908bbdd, 0x1246d0b7,
14375 +
            0x498f2dac, 0xa5d52a81, 0xfe1cd79a, 0xf349fc55, 0xa880014e, 0x44da0663, 0x1f13fb78,
14376 +
            0x345d9012, 0x6f946d09, 0x83ce6a24, 0xd807973f,
14377 +
        ],
14378 +
        [
14379 +
            0x00000000, 0xcf690ff2, 0x36e187cf, 0xf988883d, 0x6dc30f9e, 0xa2aa006c, 0x5b228851,
14380 +
            0x944b87a3, 0xdb861f3c, 0x14ef10ce, 0xed6798f3, 0x220e9701, 0xb64510a2, 0x792c1f50,
14381 +
            0x80a4976d, 0x4fcd989f, 0x1f3fa653, 0xd056a9a1, 0x29de219c, 0xe6b72e6e, 0x72fca9cd,
14382 +
            0xbd95a63f, 0x441d2e02, 0x8b7421f0, 0xc4b9b96f, 0x0bd0b69d, 0xf2583ea0, 0x3d313152,
14383 +
            0xa97ab6f1, 0x6613b903, 0x9f9b313e, 0x50f23ecc, 0x3e7f4ca6, 0xf1164354, 0x089ecb69,
14384 +
            0xc7f7c49b, 0x53bc4338, 0x9cd54cca, 0x655dc4f7, 0xaa34cb05, 0xe5f9539a, 0x2a905c68,
14385 +
            0xd318d455, 0x1c71dba7, 0x883a5c04, 0x475353f6, 0xbedbdbcb, 0x71b2d439, 0x2140eaf5,
14386 +
            0xee29e507, 0x17a16d3a, 0xd8c862c8, 0x4c83e56b, 0x83eaea99, 0x7a6262a4, 0xb50b6d56,
14387 +
            0xfac6f5c9, 0x35affa3b, 0xcc277206, 0x034e7df4, 0x9705fa57, 0x586cf5a5, 0xa1e47d98,
14388 +
            0x6e8d726a, 0x7cfe994c, 0xb39796be, 0x4a1f1e83, 0x85761171, 0x113d96d2, 0xde549920,
14389 +
            0x27dc111d, 0xe8b51eef, 0xa7788670, 0x68118982, 0x919901bf, 0x5ef00e4d, 0xcabb89ee,
14390 +
            0x05d2861c, 0xfc5a0e21, 0x333301d3, 0x63c13f1f, 0xaca830ed, 0x5520b8d0, 0x9a49b722,
14391 +
            0x0e023081, 0xc16b3f73, 0x38e3b74e, 0xf78ab8bc, 0xb8472023, 0x772e2fd1, 0x8ea6a7ec,
14392 +
            0x41cfa81e, 0xd5842fbd, 0x1aed204f, 0xe365a872, 0x2c0ca780, 0x4281d5ea, 0x8de8da18,
14393 +
            0x74605225, 0xbb095dd7, 0x2f42da74, 0xe02bd586, 0x19a35dbb, 0xd6ca5249, 0x9907cad6,
14394 +
            0x566ec524, 0xafe64d19, 0x608f42eb, 0xf4c4c548, 0x3badcaba, 0xc2254287, 0x0d4c4d75,
14395 +
            0x5dbe73b9, 0x92d77c4b, 0x6b5ff476, 0xa436fb84, 0x307d7c27, 0xff1473d5, 0x069cfbe8,
14396 +
            0xc9f5f41a, 0x86386c85, 0x49516377, 0xb0d9eb4a, 0x7fb0e4b8, 0xebfb631b, 0x24926ce9,
14397 +
            0xdd1ae4d4, 0x1273eb26, 0xf9fd3298, 0x36943d6a, 0xcf1cb557, 0x0075baa5, 0x943e3d06,
14398 +
            0x5b5732f4, 0xa2dfbac9, 0x6db6b53b, 0x227b2da4, 0xed122256, 0x149aaa6b, 0xdbf3a599,
14399 +
            0x4fb8223a, 0x80d12dc8, 0x7959a5f5, 0xb630aa07, 0xe6c294cb, 0x29ab9b39, 0xd0231304,
14400 +
            0x1f4a1cf6, 0x8b019b55, 0x446894a7, 0xbde01c9a, 0x72891368, 0x3d448bf7, 0xf22d8405,
14401 +
            0x0ba50c38, 0xc4cc03ca, 0x50878469, 0x9fee8b9b, 0x666603a6, 0xa90f0c54, 0xc7827e3e,
14402 +
            0x08eb71cc, 0xf163f9f1, 0x3e0af603, 0xaa4171a0, 0x65287e52, 0x9ca0f66f, 0x53c9f99d,
14403 +
            0x1c046102, 0xd36d6ef0, 0x2ae5e6cd, 0xe58ce93f, 0x71c76e9c, 0xbeae616e, 0x4726e953,
14404 +
            0x884fe6a1, 0xd8bdd86d, 0x17d4d79f, 0xee5c5fa2, 0x21355050, 0xb57ed7f3, 0x7a17d801,
14405 +
            0x839f503c, 0x4cf65fce, 0x033bc751, 0xcc52c8a3, 0x35da409e, 0xfab34f6c, 0x6ef8c8cf,
14406 +
            0xa191c73d, 0x58194f00, 0x977040f2, 0x8503abd4, 0x4a6aa426, 0xb3e22c1b, 0x7c8b23e9,
14407 +
            0xe8c0a44a, 0x27a9abb8, 0xde212385, 0x11482c77, 0x5e85b4e8, 0x91ecbb1a, 0x68643327,
14408 +
            0xa70d3cd5, 0x3346bb76, 0xfc2fb484, 0x05a73cb9, 0xcace334b, 0x9a3c0d87, 0x55550275,
14409 +
            0xacdd8a48, 0x63b485ba, 0xf7ff0219, 0x38960deb, 0xc11e85d6, 0x0e778a24, 0x41ba12bb,
14410 +
            0x8ed31d49, 0x775b9574, 0xb8329a86, 0x2c791d25, 0xe31012d7, 0x1a989aea, 0xd5f19518,
14411 +
            0xbb7ce772, 0x7415e880, 0x8d9d60bd, 0x42f46f4f, 0xd6bfe8ec, 0x19d6e71e, 0xe05e6f23,
14412 +
            0x2f3760d1, 0x60faf84e, 0xaf93f7bc, 0x561b7f81, 0x99727073, 0x0d39f7d0, 0xc250f822,
14413 +
            0x3bd8701f, 0xf4b17fed, 0xa4434121, 0x6b2a4ed3, 0x92a2c6ee, 0x5dcbc91c, 0xc9804ebf,
14414 +
            0x06e9414d, 0xff61c970, 0x3008c682, 0x7fc55e1d, 0xb0ac51ef, 0x4924d9d2, 0x864dd620,
14415 +
            0x12065183, 0xdd6f5e71, 0x24e7d64c, 0xeb8ed9be,
14416 +
        ],
14417 +
        [
14418 +
            0x00000000, 0xf3e2da0c, 0x4ff62c33, 0xbc14f63f, 0x9fec5866, 0x6c0e826a, 0xd01a7455,
14419 +
            0x23f8ae59, 0x97eb28e7, 0x6409f2eb, 0xd81d04d4, 0x2bffded8, 0x08077081, 0xfbe5aa8d,
14420 +
            0x47f15cb2, 0xb41386be, 0x87e5c9e5, 0x740713e9, 0xc813e5d6, 0x3bf13fda, 0x18099183,
14421 +
            0xebeb4b8f, 0x57ffbdb0, 0xa41d67bc, 0x100ee102, 0xe3ec3b0e, 0x5ff8cd31, 0xac1a173d,
14422 +
            0x8fe2b964, 0x7c006368, 0xc0149557, 0x33f64f5b, 0xa7f80be1, 0x541ad1ed, 0xe80e27d2,
14423 +
            0x1becfdde, 0x38145387, 0xcbf6898b, 0x77e27fb4, 0x8400a5b8, 0x30132306, 0xc3f1f90a,
14424 +
            0x7fe50f35, 0x8c07d539, 0xafff7b60, 0x5c1da16c, 0xe0095753, 0x13eb8d5f, 0x201dc204,
14425 +
            0xd3ff1808, 0x6febee37, 0x9c09343b, 0xbff19a62, 0x4c13406e, 0xf007b651, 0x03e56c5d,
14426 +
            0xb7f6eae3, 0x441430ef, 0xf800c6d0, 0x0be21cdc, 0x281ab285, 0xdbf86889, 0x67ec9eb6,
14427 +
            0x940e44ba, 0xe7c38fe9, 0x142155e5, 0xa835a3da, 0x5bd779d6, 0x782fd78f, 0x8bcd0d83,
14428 +
            0x37d9fbbc, 0xc43b21b0, 0x7028a70e, 0x83ca7d02, 0x3fde8b3d, 0xcc3c5131, 0xefc4ff68,
14429 +
            0x1c262564, 0xa032d35b, 0x53d00957, 0x6026460c, 0x93c49c00, 0x2fd06a3f, 0xdc32b033,
14430 +
            0xffca1e6a, 0x0c28c466, 0xb03c3259, 0x43dee855, 0xf7cd6eeb, 0x042fb4e7, 0xb83b42d8,
14431 +
            0x4bd998d4, 0x6821368d, 0x9bc3ec81, 0x27d71abe, 0xd435c0b2, 0x403b8408, 0xb3d95e04,
14432 +
            0x0fcda83b, 0xfc2f7237, 0xdfd7dc6e, 0x2c350662, 0x9021f05d, 0x63c32a51, 0xd7d0acef,
14433 +
            0x243276e3, 0x982680dc, 0x6bc45ad0, 0x483cf489, 0xbbde2e85, 0x07cad8ba, 0xf42802b6,
14434 +
            0xc7de4ded, 0x343c97e1, 0x882861de, 0x7bcabbd2, 0x5832158b, 0xabd0cf87, 0x17c439b8,
14435 +
            0xe426e3b4, 0x5035650a, 0xa3d7bf06, 0x1fc34939, 0xec219335, 0xcfd93d6c, 0x3c3be760,
14436 +
            0x802f115f, 0x73cdcb53, 0x67b487f9, 0x94565df5, 0x2842abca, 0xdba071c6, 0xf858df9f,
14437 +
            0x0bba0593, 0xb7aef3ac, 0x444c29a0, 0xf05faf1e, 0x03bd7512, 0xbfa9832d, 0x4c4b5921,
14438 +
            0x6fb3f778, 0x9c512d74, 0x2045db4b, 0xd3a70147, 0xe0514e1c, 0x13b39410, 0xafa7622f,
14439 +
            0x5c45b823, 0x7fbd167a, 0x8c5fcc76, 0x304b3a49, 0xc3a9e045, 0x77ba66fb, 0x8458bcf7,
14440 +
            0x384c4ac8, 0xcbae90c4, 0xe8563e9d, 0x1bb4e491, 0xa7a012ae, 0x5442c8a2, 0xc04c8c18,
14441 +
            0x33ae5614, 0x8fbaa02b, 0x7c587a27, 0x5fa0d47e, 0xac420e72, 0x1056f84d, 0xe3b42241,
14442 +
            0x57a7a4ff, 0xa4457ef3, 0x185188cc, 0xebb352c0, 0xc84bfc99, 0x3ba92695, 0x87bdd0aa,
14443 +
            0x745f0aa6, 0x47a945fd, 0xb44b9ff1, 0x085f69ce, 0xfbbdb3c2, 0xd8451d9b, 0x2ba7c797,
14444 +
            0x97b331a8, 0x6451eba4, 0xd0426d1a, 0x23a0b716, 0x9fb44129, 0x6c569b25, 0x4fae357c,
14445 +
            0xbc4cef70, 0x0058194f, 0xf3bac343, 0x80770810, 0x7395d21c, 0xcf812423, 0x3c63fe2f,
14446 +
            0x1f9b5076, 0xec798a7a, 0x506d7c45, 0xa38fa649, 0x179c20f7, 0xe47efafb, 0x586a0cc4,
14447 +
            0xab88d6c8, 0x88707891, 0x7b92a29d, 0xc78654a2, 0x34648eae, 0x0792c1f5, 0xf4701bf9,
14448 +
            0x4864edc6, 0xbb8637ca, 0x987e9993, 0x6b9c439f, 0xd788b5a0, 0x246a6fac, 0x9079e912,
14449 +
            0x639b331e, 0xdf8fc521, 0x2c6d1f2d, 0x0f95b174, 0xfc776b78, 0x40639d47, 0xb381474b,
14450 +
            0x278f03f1, 0xd46dd9fd, 0x68792fc2, 0x9b9bf5ce, 0xb8635b97, 0x4b81819b, 0xf79577a4,
14451 +
            0x0477ada8, 0xb0642b16, 0x4386f11a, 0xff920725, 0x0c70dd29, 0x2f887370, 0xdc6aa97c,
14452 +
            0x607e5f43, 0x939c854f, 0xa06aca14, 0x53881018, 0xef9ce627, 0x1c7e3c2b, 0x3f869272,
14453 +
            0xcc64487e, 0x7070be41, 0x8392644d, 0x3781e2f3, 0xc46338ff, 0x7877cec0, 0x8b9514cc,
14454 +
            0xa86dba95, 0x5b8f6099, 0xe79b96a6, 0x14794caa,
14455 +
        ],
14456 +
        [
14457 +
            0x00000000, 0x5959b9b5, 0xb2b3736a, 0xebeacadf, 0xcd557eff, 0x940cc74a, 0x7fe60d95,
14458 +
            0x26bfb420, 0x329965d5, 0x6bc0dc60, 0x802a16bf, 0xd973af0a, 0xffcc1b2a, 0xa695a29f,
14459 +
            0x4d7f6840, 0x1426d1f5, 0x6532cbaa, 0x3c6b721f, 0xd781b8c0, 0x8ed80175, 0xa867b555,
14460 +
            0xf13e0ce0, 0x1ad4c63f, 0x438d7f8a, 0x57abae7f, 0x0ef217ca, 0xe518dd15, 0xbc4164a0,
14461 +
            0x9afed080, 0xc3a76935, 0x284da3ea, 0x71141a5f, 0xca659754, 0x933c2ee1, 0x78d6e43e,
14462 +
            0x218f5d8b, 0x0730e9ab, 0x5e69501e, 0xb5839ac1, 0xecda2374, 0xf8fcf281, 0xa1a54b34,
14463 +
            0x4a4f81eb, 0x1316385e, 0x35a98c7e, 0x6cf035cb, 0x871aff14, 0xde4346a1, 0xaf575cfe,
14464 +
            0xf60ee54b, 0x1de42f94, 0x44bd9621, 0x62022201, 0x3b5b9bb4, 0xd0b1516b, 0x89e8e8de,
14465 +
            0x9dce392b, 0xc497809e, 0x2f7d4a41, 0x7624f3f4, 0x509b47d4, 0x09c2fe61, 0xe22834be,
14466 +
            0xbb718d0b, 0x3cf8b683, 0x65a10f36, 0x8e4bc5e9, 0xd7127c5c, 0xf1adc87c, 0xa8f471c9,
14467 +
            0x431ebb16, 0x1a4702a3, 0x0e61d356, 0x57386ae3, 0xbcd2a03c, 0xe58b1989, 0xc334ada9,
14468 +
            0x9a6d141c, 0x7187dec3, 0x28de6776, 0x59ca7d29, 0x0093c49c, 0xeb790e43, 0xb220b7f6,
14469 +
            0x949f03d6, 0xcdc6ba63, 0x262c70bc, 0x7f75c909, 0x6b5318fc, 0x320aa149, 0xd9e06b96,
14470 +
            0x80b9d223, 0xa6066603, 0xff5fdfb6, 0x14b51569, 0x4decacdc, 0xf69d21d7, 0xafc49862,
14471 +
            0x442e52bd, 0x1d77eb08, 0x3bc85f28, 0x6291e69d, 0x897b2c42, 0xd02295f7, 0xc4044402,
14472 +
            0x9d5dfdb7, 0x76b73768, 0x2fee8edd, 0x09513afd, 0x50088348, 0xbbe24997, 0xe2bbf022,
14473 +
            0x93afea7d, 0xcaf653c8, 0x211c9917, 0x784520a2, 0x5efa9482, 0x07a32d37, 0xec49e7e8,
14474 +
            0xb5105e5d, 0xa1368fa8, 0xf86f361d, 0x1385fcc2, 0x4adc4577, 0x6c63f157, 0x353a48e2,
14475 +
            0xded0823d, 0x87893b88, 0x79f16d06, 0x20a8d4b3, 0xcb421e6c, 0x921ba7d9, 0xb4a413f9,
14476 +
            0xedfdaa4c, 0x06176093, 0x5f4ed926, 0x4b6808d3, 0x1231b166, 0xf9db7bb9, 0xa082c20c,
14477 +
            0x863d762c, 0xdf64cf99, 0x348e0546, 0x6dd7bcf3, 0x1cc3a6ac, 0x459a1f19, 0xae70d5c6,
14478 +
            0xf7296c73, 0xd196d853, 0x88cf61e6, 0x6325ab39, 0x3a7c128c, 0x2e5ac379, 0x77037acc,
14479 +
            0x9ce9b013, 0xc5b009a6, 0xe30fbd86, 0xba560433, 0x51bcceec, 0x08e57759, 0xb394fa52,
14480 +
            0xeacd43e7, 0x01278938, 0x587e308d, 0x7ec184ad, 0x27983d18, 0xcc72f7c7, 0x952b4e72,
14481 +
            0x810d9f87, 0xd8542632, 0x33beeced, 0x6ae75558, 0x4c58e178, 0x150158cd, 0xfeeb9212,
14482 +
            0xa7b22ba7, 0xd6a631f8, 0x8fff884d, 0x64154292, 0x3d4cfb27, 0x1bf34f07, 0x42aaf6b2,
14483 +
            0xa9403c6d, 0xf01985d8, 0xe43f542d, 0xbd66ed98, 0x568c2747, 0x0fd59ef2, 0x296a2ad2,
14484 +
            0x70339367, 0x9bd959b8, 0xc280e00d, 0x4509db85, 0x1c506230, 0xf7baa8ef, 0xaee3115a,
14485 +
            0x885ca57a, 0xd1051ccf, 0x3aefd610, 0x63b66fa5, 0x7790be50, 0x2ec907e5, 0xc523cd3a,
14486 +
            0x9c7a748f, 0xbac5c0af, 0xe39c791a, 0x0876b3c5, 0x512f0a70, 0x203b102f, 0x7962a99a,
14487 +
            0x92886345, 0xcbd1daf0, 0xed6e6ed0, 0xb437d765, 0x5fdd1dba, 0x0684a40f, 0x12a275fa,
14488 +
            0x4bfbcc4f, 0xa0110690, 0xf948bf25, 0xdff70b05, 0x86aeb2b0, 0x6d44786f, 0x341dc1da,
14489 +
            0x8f6c4cd1, 0xd635f564, 0x3ddf3fbb, 0x6486860e, 0x4239322e, 0x1b608b9b, 0xf08a4144,
14490 +
            0xa9d3f8f1, 0xbdf52904, 0xe4ac90b1, 0x0f465a6e, 0x561fe3db, 0x70a057fb, 0x29f9ee4e,
14491 +
            0xc2132491, 0x9b4a9d24, 0xea5e877b, 0xb3073ece, 0x58edf411, 0x01b44da4, 0x270bf984,
14492 +
            0x7e524031, 0x95b88aee, 0xcce1335b, 0xd8c7e2ae, 0x819e5b1b, 0x6a7491c4, 0x332d2871,
14493 +
            0x15929c51, 0x4ccb25e4, 0xa721ef3b, 0xfe78568e,
14494 +
        ],
14495 +
        [
14496 +
            0x00000000, 0x9e70f148, 0x94d27abb, 0x0aa28bf3, 0x81976d5d, 0x1fe79c15, 0x154517e6,
14497 +
            0x8b35e6ae, 0xab1d4291, 0x356db3d9, 0x3fcf382a, 0xa1bfc962, 0x2a8a2fcc, 0xb4fade84,
14498 +
            0xbe585577, 0x2028a43f, 0xfe091d09, 0x6079ec41, 0x6adb67b2, 0xf4ab96fa, 0x7f9e7054,
14499 +
            0xe1ee811c, 0xeb4c0aef, 0x753cfba7, 0x55145f98, 0xcb64aed0, 0xc1c62523, 0x5fb6d46b,
14500 +
            0xd48332c5, 0x4af3c38d, 0x4051487e, 0xde21b936, 0x5421a239, 0xca515371, 0xc0f3d882,
14501 +
            0x5e8329ca, 0xd5b6cf64, 0x4bc63e2c, 0x4164b5df, 0xdf144497, 0xff3ce0a8, 0x614c11e0,
14502 +
            0x6bee9a13, 0xf59e6b5b, 0x7eab8df5, 0xe0db7cbd, 0xea79f74e, 0x74090606, 0xaa28bf30,
14503 +
            0x34584e78, 0x3efac58b, 0xa08a34c3, 0x2bbfd26d, 0xb5cf2325, 0xbf6da8d6, 0x211d599e,
14504 +
            0x0135fda1, 0x9f450ce9, 0x95e7871a, 0x0b977652, 0x80a290fc, 0x1ed261b4, 0x1470ea47,
14505 +
            0x8a001b0f, 0xa8434472, 0x3633b53a, 0x3c913ec9, 0xa2e1cf81, 0x29d4292f, 0xb7a4d867,
14506 +
            0xbd065394, 0x2376a2dc, 0x035e06e3, 0x9d2ef7ab, 0x978c7c58, 0x09fc8d10, 0x82c96bbe,
14507 +
            0x1cb99af6, 0x161b1105, 0x886be04d, 0x564a597b, 0xc83aa833, 0xc29823c0, 0x5ce8d288,
14508 +
            0xd7dd3426, 0x49adc56e, 0x430f4e9d, 0xdd7fbfd5, 0xfd571bea, 0x6327eaa2, 0x69856151,
14509 +
            0xf7f59019, 0x7cc076b7, 0xe2b087ff, 0xe8120c0c, 0x7662fd44, 0xfc62e64b, 0x62121703,
14510 +
            0x68b09cf0, 0xf6c06db8, 0x7df58b16, 0xe3857a5e, 0xe927f1ad, 0x775700e5, 0x577fa4da,
14511 +
            0xc90f5592, 0xc3adde61, 0x5ddd2f29, 0xd6e8c987, 0x489838cf, 0x423ab33c, 0xdc4a4274,
14512 +
            0x026bfb42, 0x9c1b0a0a, 0x96b981f9, 0x08c970b1, 0x83fc961f, 0x1d8c6757, 0x172eeca4,
14513 +
            0x895e1dec, 0xa976b9d3, 0x3706489b, 0x3da4c368, 0xa3d43220, 0x28e1d48e, 0xb69125c6,
14514 +
            0xbc33ae35, 0x22435f7d, 0xf8b510cf, 0x66c5e187, 0x6c676a74, 0xf2179b3c, 0x79227d92,
14515 +
            0xe7528cda, 0xedf00729, 0x7380f661, 0x53a8525e, 0xcdd8a316, 0xc77a28e5, 0x590ad9ad,
14516 +
            0xd23f3f03, 0x4c4fce4b, 0x46ed45b8, 0xd89db4f0, 0x06bc0dc6, 0x98ccfc8e, 0x926e777d,
14517 +
            0x0c1e8635, 0x872b609b, 0x195b91d3, 0x13f91a20, 0x8d89eb68, 0xada14f57, 0x33d1be1f,
14518 +
            0x397335ec, 0xa703c4a4, 0x2c36220a, 0xb246d342, 0xb8e458b1, 0x2694a9f9, 0xac94b2f6,
14519 +
            0x32e443be, 0x3846c84d, 0xa6363905, 0x2d03dfab, 0xb3732ee3, 0xb9d1a510, 0x27a15458,
14520 +
            0x0789f067, 0x99f9012f, 0x935b8adc, 0x0d2b7b94, 0x861e9d3a, 0x186e6c72, 0x12cce781,
14521 +
            0x8cbc16c9, 0x529dafff, 0xcced5eb7, 0xc64fd544, 0x583f240c, 0xd30ac2a2, 0x4d7a33ea,
14522 +
            0x47d8b819, 0xd9a84951, 0xf980ed6e, 0x67f01c26, 0x6d5297d5, 0xf322669d, 0x78178033,
14523 +
            0xe667717b, 0xecc5fa88, 0x72b50bc0, 0x50f654bd, 0xce86a5f5, 0xc4242e06, 0x5a54df4e,
14524 +
            0xd16139e0, 0x4f11c8a8, 0x45b3435b, 0xdbc3b213, 0xfbeb162c, 0x659be764, 0x6f396c97,
14525 +
            0xf1499ddf, 0x7a7c7b71, 0xe40c8a39, 0xeeae01ca, 0x70def082, 0xaeff49b4, 0x308fb8fc,
14526 +
            0x3a2d330f, 0xa45dc247, 0x2f6824e9, 0xb118d5a1, 0xbbba5e52, 0x25caaf1a, 0x05e20b25,
14527 +
            0x9b92fa6d, 0x9130719e, 0x0f4080d6, 0x84756678, 0x1a059730, 0x10a71cc3, 0x8ed7ed8b,
14528 +
            0x04d7f684, 0x9aa707cc, 0x90058c3f, 0x0e757d77, 0x85409bd9, 0x1b306a91, 0x1192e162,
14529 +
            0x8fe2102a, 0xafcab415, 0x31ba455d, 0x3b18ceae, 0xa5683fe6, 0x2e5dd948, 0xb02d2800,
14530 +
            0xba8fa3f3, 0x24ff52bb, 0xfadeeb8d, 0x64ae1ac5, 0x6e0c9136, 0xf07c607e, 0x7b4986d0,
14531 +
            0xe5397798, 0xef9bfc6b, 0x71eb0d23, 0x51c3a91c, 0xcfb35854, 0xc511d3a7, 0x5b6122ef,
14532 +
            0xd054c441, 0x4e243509, 0x4486befa, 0xdaf64fb2,
14533 +
        ],
14534 +
        [
14535 +
            0x00000000, 0x485640bd, 0x90ac817a, 0xd8fac1c7, 0x896a9adf, 0xc13cda62, 0x19c61ba5,
14536 +
            0x51905b18, 0xbae6ad95, 0xf2b0ed28, 0x2a4a2cef, 0x621c6c52, 0x338c374a, 0x7bda77f7,
14537 +
            0xa320b630, 0xeb76f68d, 0xddfec301, 0x95a883bc, 0x4d52427b, 0x050402c6, 0x549459de,
14538 +
            0x1cc21963, 0xc438d8a4, 0x8c6e9819, 0x67186e94, 0x2f4e2e29, 0xf7b4efee, 0xbfe2af53,
14539 +
            0xee72f44b, 0xa624b4f6, 0x7ede7531, 0x3688358c, 0x13ce1e29, 0x5b985e94, 0x83629f53,
14540 +
            0xcb34dfee, 0x9aa484f6, 0xd2f2c44b, 0x0a08058c, 0x425e4531, 0xa928b3bc, 0xe17ef301,
14541 +
            0x398432c6, 0x71d2727b, 0x20422963, 0x681469de, 0xb0eea819, 0xf8b8e8a4, 0xce30dd28,
14542 +
            0x86669d95, 0x5e9c5c52, 0x16ca1cef, 0x475a47f7, 0x0f0c074a, 0xd7f6c68d, 0x9fa08630,
14543 +
            0x74d670bd, 0x3c803000, 0xe47af1c7, 0xac2cb17a, 0xfdbcea62, 0xb5eaaadf, 0x6d106b18,
14544 +
            0x25462ba5, 0x279c3c52, 0x6fca7cef, 0xb730bd28, 0xff66fd95, 0xaef6a68d, 0xe6a0e630,
14545 +
            0x3e5a27f7, 0x760c674a, 0x9d7a91c7, 0xd52cd17a, 0x0dd610bd, 0x45805000, 0x14100b18,
14546 +
            0x5c464ba5, 0x84bc8a62, 0xcceacadf, 0xfa62ff53, 0xb234bfee, 0x6ace7e29, 0x22983e94,
14547 +
            0x7308658c, 0x3b5e2531, 0xe3a4e4f6, 0xabf2a44b, 0x408452c6, 0x08d2127b, 0xd028d3bc,
14548 +
            0x987e9301, 0xc9eec819, 0x81b888a4, 0x59424963, 0x111409de, 0x3452227b, 0x7c0462c6,
14549 +
            0xa4fea301, 0xeca8e3bc, 0xbd38b8a4, 0xf56ef819, 0x2d9439de, 0x65c27963, 0x8eb48fee,
14550 +
            0xc6e2cf53, 0x1e180e94, 0x564e4e29, 0x07de1531, 0x4f88558c, 0x9772944b, 0xdf24d4f6,
14551 +
            0xe9ace17a, 0xa1faa1c7, 0x79006000, 0x315620bd, 0x60c67ba5, 0x28903b18, 0xf06afadf,
14552 +
            0xb83cba62, 0x534a4cef, 0x1b1c0c52, 0xc3e6cd95, 0x8bb08d28, 0xda20d630, 0x9276968d,
14553 +
            0x4a8c574a, 0x02da17f7, 0x4f3878a4, 0x076e3819, 0xdf94f9de, 0x97c2b963, 0xc652e27b,
14554 +
            0x8e04a2c6, 0x56fe6301, 0x1ea823bc, 0xf5ded531, 0xbd88958c, 0x6572544b, 0x2d2414f6,
14555 +
            0x7cb44fee, 0x34e20f53, 0xec18ce94, 0xa44e8e29, 0x92c6bba5, 0xda90fb18, 0x026a3adf,
14556 +
            0x4a3c7a62, 0x1bac217a, 0x53fa61c7, 0x8b00a000, 0xc356e0bd, 0x28201630, 0x6076568d,
14557 +
            0xb88c974a, 0xf0dad7f7, 0xa14a8cef, 0xe91ccc52, 0x31e60d95, 0x79b04d28, 0x5cf6668d,
14558 +
            0x14a02630, 0xcc5ae7f7, 0x840ca74a, 0xd59cfc52, 0x9dcabcef, 0x45307d28, 0x0d663d95,
14559 +
            0xe610cb18, 0xae468ba5, 0x76bc4a62, 0x3eea0adf, 0x6f7a51c7, 0x272c117a, 0xffd6d0bd,
14560 +
            0xb7809000, 0x8108a58c, 0xc95ee531, 0x11a424f6, 0x59f2644b, 0x08623f53, 0x40347fee,
14561 +
            0x98cebe29, 0xd098fe94, 0x3bee0819, 0x73b848a4, 0xab428963, 0xe314c9de, 0xb28492c6,
14562 +
            0xfad2d27b, 0x222813bc, 0x6a7e5301, 0x68a444f6, 0x20f2044b, 0xf808c58c, 0xb05e8531,
14563 +
            0xe1cede29, 0xa9989e94, 0x71625f53, 0x39341fee, 0xd242e963, 0x9a14a9de, 0x42ee6819,
14564 +
            0x0ab828a4, 0x5b2873bc, 0x137e3301, 0xcb84f2c6, 0x83d2b27b, 0xb55a87f7, 0xfd0cc74a,
14565 +
            0x25f6068d, 0x6da04630, 0x3c301d28, 0x74665d95, 0xac9c9c52, 0xe4cadcef, 0x0fbc2a62,
14566 +
            0x47ea6adf, 0x9f10ab18, 0xd746eba5, 0x86d6b0bd, 0xce80f000, 0x167a31c7, 0x5e2c717a,
14567 +
            0x7b6a5adf, 0x333c1a62, 0xebc6dba5, 0xa3909b18, 0xf200c000, 0xba5680bd, 0x62ac417a,
14568 +
            0x2afa01c7, 0xc18cf74a, 0x89dab7f7, 0x51207630, 0x1976368d, 0x48e66d95, 0x00b02d28,
14569 +
            0xd84aecef, 0x901cac52, 0xa69499de, 0xeec2d963, 0x363818a4, 0x7e6e5819, 0x2ffe0301,
14570 +
            0x67a843bc, 0xbf52827b, 0xf704c2c6, 0x1c72344b, 0x542474f6, 0x8cdeb531, 0xc488f58c,
14571 +
            0x9518ae94, 0xdd4eee29, 0x05b42fee, 0x4de26f53,
14572 +
        ],
14573 +
        [
14574 +
            0x00000000, 0x68bce4e2, 0xd179c9c4, 0xb9c52d26, 0x0ac00ba3, 0x627cef41, 0xdbb9c267,
14575 +
            0xb3052685, 0x15801746, 0x7d3cf3a4, 0xc4f9de82, 0xac453a60, 0x1f401ce5, 0x77fcf807,
14576 +
            0xce39d521, 0xa68531c3, 0x2b002e8c, 0x43bcca6e, 0xfa79e748, 0x92c503aa, 0x21c0252f,
14577 +
            0x497cc1cd, 0xf0b9eceb, 0x98050809, 0x3e8039ca, 0x563cdd28, 0xeff9f00e, 0x874514ec,
14578 +
            0x34403269, 0x5cfcd68b, 0xe539fbad, 0x8d851f4f, 0x56005d18, 0x3ebcb9fa, 0x877994dc,
14579 +
            0xefc5703e, 0x5cc056bb, 0x347cb259, 0x8db99f7f, 0xe5057b9d, 0x43804a5e, 0x2b3caebc,
14580 +
            0x92f9839a, 0xfa456778, 0x494041fd, 0x21fca51f, 0x98398839, 0xf0856cdb, 0x7d007394,
14581 +
            0x15bc9776, 0xac79ba50, 0xc4c55eb2, 0x77c07837, 0x1f7c9cd5, 0xa6b9b1f3, 0xce055511,
14582 +
            0x688064d2, 0x003c8030, 0xb9f9ad16, 0xd14549f4, 0x62406f71, 0x0afc8b93, 0xb339a6b5,
14583 +
            0xdb854257, 0xac00ba30, 0xc4bc5ed2, 0x7d7973f4, 0x15c59716, 0xa6c0b193, 0xce7c5571,
14584 +
            0x77b97857, 0x1f059cb5, 0xb980ad76, 0xd13c4994, 0x68f964b2, 0x00458050, 0xb340a6d5,
14585 +
            0xdbfc4237, 0x62396f11, 0x0a858bf3, 0x870094bc, 0xefbc705e, 0x56795d78, 0x3ec5b99a,
14586 +
            0x8dc09f1f, 0xe57c7bfd, 0x5cb956db, 0x3405b239, 0x928083fa, 0xfa3c6718, 0x43f94a3e,
14587 +
            0x2b45aedc, 0x98408859, 0xf0fc6cbb, 0x4939419d, 0x2185a57f, 0xfa00e728, 0x92bc03ca,
14588 +
            0x2b792eec, 0x43c5ca0e, 0xf0c0ec8b, 0x987c0869, 0x21b9254f, 0x4905c1ad, 0xef80f06e,
14589 +
            0x873c148c, 0x3ef939aa, 0x5645dd48, 0xe540fbcd, 0x8dfc1f2f, 0x34393209, 0x5c85d6eb,
14590 +
            0xd100c9a4, 0xb9bc2d46, 0x00790060, 0x68c5e482, 0xdbc0c207, 0xb37c26e5, 0x0ab90bc3,
14591 +
            0x6205ef21, 0xc480dee2, 0xac3c3a00, 0x15f91726, 0x7d45f3c4, 0xce40d541, 0xa6fc31a3,
14592 +
            0x1f391c85, 0x7785f867, 0xf032ec4b, 0x988e08a9, 0x214b258f, 0x49f7c16d, 0xfaf2e7e8,
14593 +
            0x924e030a, 0x2b8b2e2c, 0x4337cace, 0xe5b2fb0d, 0x8d0e1fef, 0x34cb32c9, 0x5c77d62b,
14594 +
            0xef72f0ae, 0x87ce144c, 0x3e0b396a, 0x56b7dd88, 0xdb32c2c7, 0xb38e2625, 0x0a4b0b03,
14595 +
            0x62f7efe1, 0xd1f2c964, 0xb94e2d86, 0x008b00a0, 0x6837e442, 0xceb2d581, 0xa60e3163,
14596 +
            0x1fcb1c45, 0x7777f8a7, 0xc472de22, 0xacce3ac0, 0x150b17e6, 0x7db7f304, 0xa632b153,
14597 +
            0xce8e55b1, 0x774b7897, 0x1ff79c75, 0xacf2baf0, 0xc44e5e12, 0x7d8b7334, 0x153797d6,
14598 +
            0xb3b2a615, 0xdb0e42f7, 0x62cb6fd1, 0x0a778b33, 0xb972adb6, 0xd1ce4954, 0x680b6472,
14599 +
            0x00b78090, 0x8d329fdf, 0xe58e7b3d, 0x5c4b561b, 0x34f7b2f9, 0x87f2947c, 0xef4e709e,
14600 +
            0x568b5db8, 0x3e37b95a, 0x98b28899, 0xf00e6c7b, 0x49cb415d, 0x2177a5bf, 0x9272833a,
14601 +
            0xface67d8, 0x430b4afe, 0x2bb7ae1c, 0x5c32567b, 0x348eb299, 0x8d4b9fbf, 0xe5f77b5d,
14602 +
            0x56f25dd8, 0x3e4eb93a, 0x878b941c, 0xef3770fe, 0x49b2413d, 0x210ea5df, 0x98cb88f9,
14603 +
            0xf0776c1b, 0x43724a9e, 0x2bceae7c, 0x920b835a, 0xfab767b8, 0x773278f7, 0x1f8e9c15,
14604 +
            0xa64bb133, 0xcef755d1, 0x7df27354, 0x154e97b6, 0xac8bba90, 0xc4375e72, 0x62b26fb1,
14605 +
            0x0a0e8b53, 0xb3cba675, 0xdb774297, 0x68726412, 0x00ce80f0, 0xb90badd6, 0xd1b74934,
14606 +
            0x0a320b63, 0x628eef81, 0xdb4bc2a7, 0xb3f72645, 0x00f200c0, 0x684ee422, 0xd18bc904,
14607 +
            0xb9372de6, 0x1fb21c25, 0x770ef8c7, 0xcecbd5e1, 0xa6773103, 0x15721786, 0x7dcef364,
14608 +
            0xc40bde42, 0xacb73aa0, 0x213225ef, 0x498ec10d, 0xf04bec2b, 0x98f708c9, 0x2bf22e4c,
14609 +
            0x434ecaae, 0xfa8be788, 0x9237036a, 0x34b232a9, 0x5c0ed64b, 0xe5cbfb6d, 0x8d771f8f,
14610 +
            0x3e72390a, 0x56cedde8, 0xef0bf0ce, 0x87b7142c,
14611 +
        ],
14612 +
        [
14613 +
            0x00000000, 0xb6cca36a, 0xc5aadeff, 0x73667d95, 0x236625d5, 0x95aa86bf, 0xe6ccfb2a,
14614 +
            0x50005840, 0x46cc4baa, 0xf000e8c0, 0x83669555, 0x35aa363f, 0x65aa6e7f, 0xd366cd15,
14615 +
            0xa000b080, 0x16cc13ea, 0x8d989754, 0x3b54343e, 0x483249ab, 0xfefeeac1, 0xaefeb281,
14616 +
            0x183211eb, 0x6b546c7e, 0xdd98cf14, 0xcb54dcfe, 0x7d987f94, 0x0efe0201, 0xb832a16b,
14617 +
            0xe832f92b, 0x5efe5a41, 0x2d9827d4, 0x9b5484be, 0xb302b683, 0x05ce15e9, 0x76a8687c,
14618 +
            0xc064cb16, 0x90649356, 0x26a8303c, 0x55ce4da9, 0xe302eec3, 0xf5cefd29, 0x43025e43,
14619 +
            0x306423d6, 0x86a880bc, 0xd6a8d8fc, 0x60647b96, 0x13020603, 0xa5cea569, 0x3e9a21d7,
14620 +
            0x885682bd, 0xfb30ff28, 0x4dfc5c42, 0x1dfc0402, 0xab30a768, 0xd856dafd, 0x6e9a7997,
14621 +
            0x78566a7d, 0xce9ac917, 0xbdfcb482, 0x0b3017e8, 0x5b304fa8, 0xedfcecc2, 0x9e9a9157,
14622 +
            0x2856323d, 0xce36f52d, 0x78fa5647, 0x0b9c2bd2, 0xbd5088b8, 0xed50d0f8, 0x5b9c7392,
14623 +
            0x28fa0e07, 0x9e36ad6d, 0x88fabe87, 0x3e361ded, 0x4d506078, 0xfb9cc312, 0xab9c9b52,
14624 +
            0x1d503838, 0x6e3645ad, 0xd8fae6c7, 0x43ae6279, 0xf562c113, 0x8604bc86, 0x30c81fec,
14625 +
            0x60c847ac, 0xd604e4c6, 0xa5629953, 0x13ae3a39, 0x056229d3, 0xb3ae8ab9, 0xc0c8f72c,
14626 +
            0x76045446, 0x26040c06, 0x90c8af6c, 0xe3aed2f9, 0x55627193, 0x7d3443ae, 0xcbf8e0c4,
14627 +
            0xb89e9d51, 0x0e523e3b, 0x5e52667b, 0xe89ec511, 0x9bf8b884, 0x2d341bee, 0x3bf80804,
14628 +
            0x8d34ab6e, 0xfe52d6fb, 0x489e7591, 0x189e2dd1, 0xae528ebb, 0xdd34f32e, 0x6bf85044,
14629 +
            0xf0acd4fa, 0x46607790, 0x35060a05, 0x83caa96f, 0xd3caf12f, 0x65065245, 0x16602fd0,
14630 +
            0xa0ac8cba, 0xb6609f50, 0x00ac3c3a, 0x73ca41af, 0xc506e2c5, 0x9506ba85, 0x23ca19ef,
14631 +
            0x50ac647a, 0xe660c710, 0x345e7271, 0x8292d11b, 0xf1f4ac8e, 0x47380fe4, 0x173857a4,
14632 +
            0xa1f4f4ce, 0xd292895b, 0x645e2a31, 0x729239db, 0xc45e9ab1, 0xb738e724, 0x01f4444e,
14633 +
            0x51f41c0e, 0xe738bf64, 0x945ec2f1, 0x2292619b, 0xb9c6e525, 0x0f0a464f, 0x7c6c3bda,
14634 +
            0xcaa098b0, 0x9aa0c0f0, 0x2c6c639a, 0x5f0a1e0f, 0xe9c6bd65, 0xff0aae8f, 0x49c60de5,
14635 +
            0x3aa07070, 0x8c6cd31a, 0xdc6c8b5a, 0x6aa02830, 0x19c655a5, 0xaf0af6cf, 0x875cc4f2,
14636 +
            0x31906798, 0x42f61a0d, 0xf43ab967, 0xa43ae127, 0x12f6424d, 0x61903fd8, 0xd75c9cb2,
14637 +
            0xc1908f58, 0x775c2c32, 0x043a51a7, 0xb2f6f2cd, 0xe2f6aa8d, 0x543a09e7, 0x275c7472,
14638 +
            0x9190d718, 0x0ac453a6, 0xbc08f0cc, 0xcf6e8d59, 0x79a22e33, 0x29a27673, 0x9f6ed519,
14639 +
            0xec08a88c, 0x5ac40be6, 0x4c08180c, 0xfac4bb66, 0x89a2c6f3, 0x3f6e6599, 0x6f6e3dd9,
14640 +
            0xd9a29eb3, 0xaac4e326, 0x1c08404c, 0xfa68875c, 0x4ca42436, 0x3fc259a3, 0x890efac9,
14641 +
            0xd90ea289, 0x6fc201e3, 0x1ca47c76, 0xaa68df1c, 0xbca4ccf6, 0x0a686f9c, 0x790e1209,
14642 +
            0xcfc2b163, 0x9fc2e923, 0x290e4a49, 0x5a6837dc, 0xeca494b6, 0x77f01008, 0xc13cb362,
14643 +
            0xb25acef7, 0x04966d9d, 0x549635dd, 0xe25a96b7, 0x913ceb22, 0x27f04848, 0x313c5ba2,
14644 +
            0x87f0f8c8, 0xf496855d, 0x425a2637, 0x125a7e77, 0xa496dd1d, 0xd7f0a088, 0x613c03e2,
14645 +
            0x496a31df, 0xffa692b5, 0x8cc0ef20, 0x3a0c4c4a, 0x6a0c140a, 0xdcc0b760, 0xafa6caf5,
14646 +
            0x196a699f, 0x0fa67a75, 0xb96ad91f, 0xca0ca48a, 0x7cc007e0, 0x2cc05fa0, 0x9a0cfcca,
14647 +
            0xe96a815f, 0x5fa62235, 0xc4f2a68b, 0x723e05e1, 0x01587874, 0xb794db1e, 0xe794835e,
14648 +
            0x51582034, 0x223e5da1, 0x94f2fecb, 0x823eed21, 0x34f24e4b, 0x479433de, 0xf15890b4,
14649 +
            0xa158c8f4, 0x17946b9e, 0x64f2160b, 0xd23eb561,
14650 +
        ],
14651 +
        [
14652 +
            0x00000000, 0x94d6056b, 0x819f92fd, 0x15499796, 0xab0cbdd1, 0x3fdab8ba, 0x2a932f2c,
14653 +
            0xbe452a47, 0xfe2ae389, 0x6afce6e2, 0x7fb57174, 0xeb63741f, 0x55265e58, 0xc1f05b33,
14654 +
            0xd4b9cca5, 0x406fc9ce, 0x54665f39, 0xc0b05a52, 0xd5f9cdc4, 0x412fc8af, 0xff6ae2e8,
14655 +
            0x6bbce783, 0x7ef57015, 0xea23757e, 0xaa4cbcb0, 0x3e9ab9db, 0x2bd32e4d, 0xbf052b26,
14656 +
            0x01400161, 0x9596040a, 0x80df939c, 0x140996f7, 0xa8ccbe72, 0x3c1abb19, 0x29532c8f,
14657 +
            0xbd8529e4, 0x03c003a3, 0x971606c8, 0x825f915e, 0x16899435, 0x56e65dfb, 0xc2305890,
14658 +
            0xd779cf06, 0x43afca6d, 0xfdeae02a, 0x693ce541, 0x7c7572d7, 0xe8a377bc, 0xfcaae14b,
14659 +
            0x687ce420, 0x7d3573b6, 0xe9e376dd, 0x57a65c9a, 0xc37059f1, 0xd639ce67, 0x42efcb0c,
14660 +
            0x028002c2, 0x965607a9, 0x831f903f, 0x17c99554, 0xa98cbf13, 0x3d5aba78, 0x28132dee,
14661 +
            0xbcc52885, 0xf9aae4cf, 0x6d7ce1a4, 0x78357632, 0xece37359, 0x52a6591e, 0xc6705c75,
14662 +
            0xd339cbe3, 0x47efce88, 0x07800746, 0x9356022d, 0x861f95bb, 0x12c990d0, 0xac8cba97,
14663 +
            0x385abffc, 0x2d13286a, 0xb9c52d01, 0xadccbbf6, 0x391abe9d, 0x2c53290b, 0xb8852c60,
14664 +
            0x06c00627, 0x9216034c, 0x875f94da, 0x138991b1, 0x53e6587f, 0xc7305d14, 0xd279ca82,
14665 +
            0x46afcfe9, 0xf8eae5ae, 0x6c3ce0c5, 0x79757753, 0xeda37238, 0x51665abd, 0xc5b05fd6,
14666 +
            0xd0f9c840, 0x442fcd2b, 0xfa6ae76c, 0x6ebce207, 0x7bf57591, 0xef2370fa, 0xaf4cb934,
14667 +
            0x3b9abc5f, 0x2ed32bc9, 0xba052ea2, 0x044004e5, 0x9096018e, 0x85df9618, 0x11099373,
14668 +
            0x05000584, 0x91d600ef, 0x849f9779, 0x10499212, 0xae0cb855, 0x3adabd3e, 0x2f932aa8,
14669 +
            0xbb452fc3, 0xfb2ae60d, 0x6ffce366, 0x7ab574f0, 0xee63719b, 0x50265bdc, 0xc4f05eb7,
14670 +
            0xd1b9c921, 0x456fcc4a, 0x5b6651b5, 0xcfb054de, 0xdaf9c348, 0x4e2fc623, 0xf06aec64,
14671 +
            0x64bce90f, 0x71f57e99, 0xe5237bf2, 0xa54cb23c, 0x319ab757, 0x24d320c1, 0xb00525aa,
14672 +
            0x0e400fed, 0x9a960a86, 0x8fdf9d10, 0x1b09987b, 0x0f000e8c, 0x9bd60be7, 0x8e9f9c71,
14673 +
            0x1a49991a, 0xa40cb35d, 0x30dab636, 0x259321a0, 0xb14524cb, 0xf12aed05, 0x65fce86e,
14674 +
            0x70b57ff8, 0xe4637a93, 0x5a2650d4, 0xcef055bf, 0xdbb9c229, 0x4f6fc742, 0xf3aaefc7,
14675 +
            0x677ceaac, 0x72357d3a, 0xe6e37851, 0x58a65216, 0xcc70577d, 0xd939c0eb, 0x4defc580,
14676 +
            0x0d800c4e, 0x99560925, 0x8c1f9eb3, 0x18c99bd8, 0xa68cb19f, 0x325ab4f4, 0x27132362,
14677 +
            0xb3c52609, 0xa7ccb0fe, 0x331ab595, 0x26532203, 0xb2852768, 0x0cc00d2f, 0x98160844,
14678 +
            0x8d5f9fd2, 0x19899ab9, 0x59e65377, 0xcd30561c, 0xd879c18a, 0x4cafc4e1, 0xf2eaeea6,
14679 +
            0x663cebcd, 0x73757c5b, 0xe7a37930, 0xa2ccb57a, 0x361ab011, 0x23532787, 0xb78522ec,
14680 +
            0x09c008ab, 0x9d160dc0, 0x885f9a56, 0x1c899f3d, 0x5ce656f3, 0xc8305398, 0xdd79c40e,
14681 +
            0x49afc165, 0xf7eaeb22, 0x633cee49, 0x767579df, 0xe2a37cb4, 0xf6aaea43, 0x627cef28,
14682 +
            0x773578be, 0xe3e37dd5, 0x5da65792, 0xc97052f9, 0xdc39c56f, 0x48efc004, 0x088009ca,
14683 +
            0x9c560ca1, 0x891f9b37, 0x1dc99e5c, 0xa38cb41b, 0x375ab170, 0x221326e6, 0xb6c5238d,
14684 +
            0x0a000b08, 0x9ed60e63, 0x8b9f99f5, 0x1f499c9e, 0xa10cb6d9, 0x35dab3b2, 0x20932424,
14685 +
            0xb445214f, 0xf42ae881, 0x60fcedea, 0x75b57a7c, 0xe1637f17, 0x5f265550, 0xcbf0503b,
14686 +
            0xdeb9c7ad, 0x4a6fc2c6, 0x5e665431, 0xcab0515a, 0xdff9c6cc, 0x4b2fc3a7, 0xf56ae9e0,
14687 +
            0x61bcec8b, 0x74f57b1d, 0xe0237e76, 0xa04cb7b8, 0x349ab2d3, 0x21d32545, 0xb505202e,
14688 +
            0x0b400a69, 0x9f960f02, 0x8adf9894, 0x1e099dff,
14689 +
        ],
14690 +
        [
14691 +
            0x00000000, 0xbf29cf82, 0xd660072f, 0x6949c8ad, 0x04f39675, 0xbbda59f7, 0xd293915a,
14692 +
            0x6dba5ed8, 0x09e72cea, 0xb6cee368, 0xdf872bc5, 0x60aee447, 0x0d14ba9f, 0xb23d751d,
14693 +
            0xdb74bdb0, 0x645d7232, 0x13ce59d4, 0xace79656, 0xc5ae5efb, 0x7a879179, 0x173dcfa1,
14694 +
            0xa8140023, 0xc15dc88e, 0x7e74070c, 0x1a29753e, 0xa500babc, 0xcc497211, 0x7360bd93,
14695 +
            0x1edae34b, 0xa1f32cc9, 0xc8bae464, 0x77932be6, 0x279cb3a8, 0x98b57c2a, 0xf1fcb487,
14696 +
            0x4ed57b05, 0x236f25dd, 0x9c46ea5f, 0xf50f22f2, 0x4a26ed70, 0x2e7b9f42, 0x915250c0,
14697 +
            0xf81b986d, 0x473257ef, 0x2a880937, 0x95a1c6b5, 0xfce80e18, 0x43c1c19a, 0x3452ea7c,
14698 +
            0x8b7b25fe, 0xe232ed53, 0x5d1b22d1, 0x30a17c09, 0x8f88b38b, 0xe6c17b26, 0x59e8b4a4,
14699 +
            0x3db5c696, 0x829c0914, 0xebd5c1b9, 0x54fc0e3b, 0x394650e3, 0x866f9f61, 0xef2657cc,
14700 +
            0x500f984e, 0x4f396750, 0xf010a8d2, 0x9959607f, 0x2670affd, 0x4bcaf125, 0xf4e33ea7,
14701 +
            0x9daaf60a, 0x22833988, 0x46de4bba, 0xf9f78438, 0x90be4c95, 0x2f978317, 0x422dddcf,
14702 +
            0xfd04124d, 0x944ddae0, 0x2b641562, 0x5cf73e84, 0xe3def106, 0x8a9739ab, 0x35bef629,
14703 +
            0x5804a8f1, 0xe72d6773, 0x8e64afde, 0x314d605c, 0x5510126e, 0xea39ddec, 0x83701541,
14704 +
            0x3c59dac3, 0x51e3841b, 0xeeca4b99, 0x87838334, 0x38aa4cb6, 0x68a5d4f8, 0xd78c1b7a,
14705 +
            0xbec5d3d7, 0x01ec1c55, 0x6c56428d, 0xd37f8d0f, 0xba3645a2, 0x051f8a20, 0x6142f812,
14706 +
            0xde6b3790, 0xb722ff3d, 0x080b30bf, 0x65b16e67, 0xda98a1e5, 0xb3d16948, 0x0cf8a6ca,
14707 +
            0x7b6b8d2c, 0xc44242ae, 0xad0b8a03, 0x12224581, 0x7f981b59, 0xc0b1d4db, 0xa9f81c76,
14708 +
            0x16d1d3f4, 0x728ca1c6, 0xcda56e44, 0xa4eca6e9, 0x1bc5696b, 0x767f37b3, 0xc956f831,
14709 +
            0xa01f309c, 0x1f36ff1e, 0x9e72cea0, 0x215b0122, 0x4812c98f, 0xf73b060d, 0x9a8158d5,
14710 +
            0x25a89757, 0x4ce15ffa, 0xf3c89078, 0x9795e24a, 0x28bc2dc8, 0x41f5e565, 0xfedc2ae7,
14711 +
            0x9366743f, 0x2c4fbbbd, 0x45067310, 0xfa2fbc92, 0x8dbc9774, 0x329558f6, 0x5bdc905b,
14712 +
            0xe4f55fd9, 0x894f0101, 0x3666ce83, 0x5f2f062e, 0xe006c9ac, 0x845bbb9e, 0x3b72741c,
14713 +
            0x523bbcb1, 0xed127333, 0x80a82deb, 0x3f81e269, 0x56c82ac4, 0xe9e1e546, 0xb9ee7d08,
14714 +
            0x06c7b28a, 0x6f8e7a27, 0xd0a7b5a5, 0xbd1deb7d, 0x023424ff, 0x6b7dec52, 0xd45423d0,
14715 +
            0xb00951e2, 0x0f209e60, 0x666956cd, 0xd940994f, 0xb4fac797, 0x0bd30815, 0x629ac0b8,
14716 +
            0xddb30f3a, 0xaa2024dc, 0x1509eb5e, 0x7c4023f3, 0xc369ec71, 0xaed3b2a9, 0x11fa7d2b,
14717 +
            0x78b3b586, 0xc79a7a04, 0xa3c70836, 0x1ceec7b4, 0x75a70f19, 0xca8ec09b, 0xa7349e43,
14718 +
            0x181d51c1, 0x7154996c, 0xce7d56ee, 0xd14ba9f0, 0x6e626672, 0x072baedf, 0xb802615d,
14719 +
            0xd5b83f85, 0x6a91f007, 0x03d838aa, 0xbcf1f728, 0xd8ac851a, 0x67854a98, 0x0ecc8235,
14720 +
            0xb1e54db7, 0xdc5f136f, 0x6376dced, 0x0a3f1440, 0xb516dbc2, 0xc285f024, 0x7dac3fa6,
14721 +
            0x14e5f70b, 0xabcc3889, 0xc6766651, 0x795fa9d3, 0x1016617e, 0xaf3faefc, 0xcb62dcce,
14722 +
            0x744b134c, 0x1d02dbe1, 0xa22b1463, 0xcf914abb, 0x70b88539, 0x19f14d94, 0xa6d88216,
14723 +
            0xf6d71a58, 0x49fed5da, 0x20b71d77, 0x9f9ed2f5, 0xf2248c2d, 0x4d0d43af, 0x24448b02,
14724 +
            0x9b6d4480, 0xff3036b2, 0x4019f930, 0x2950319d, 0x9679fe1f, 0xfbc3a0c7, 0x44ea6f45,
14725 +
            0x2da3a7e8, 0x928a686a, 0xe519438c, 0x5a308c0e, 0x337944a3, 0x8c508b21, 0xe1ead5f9,
14726 +
            0x5ec31a7b, 0x378ad2d6, 0x88a31d54, 0xecfe6f66, 0x53d7a0e4, 0x3a9e6849, 0x85b7a7cb,
14727 +
            0xe80df913, 0x57243691, 0x3e6dfe3c, 0x814431be,
14728 +
        ],
14729 +
        [
14730 +
            0x00000000, 0x831d4544, 0xae0912a3, 0x2d1457e7, 0xf421bd6d, 0x773cf829, 0x5a28afce,
14731 +
            0xd935ea8a, 0x4070e2f1, 0xc36da7b5, 0xee79f052, 0x6d64b516, 0xb4515f9c, 0x374c1ad8,
14732 +
            0x1a584d3f, 0x9945087b, 0x80e1c5e2, 0x03fc80a6, 0x2ee8d741, 0xadf59205, 0x74c0788f,
14733 +
            0xf7dd3dcb, 0xdac96a2c, 0x59d42f68, 0xc0912713, 0x438c6257, 0x6e9835b0, 0xed8570f4,
14734 +
            0x34b09a7e, 0xb7addf3a, 0x9ab988dd, 0x19a4cd99, 0xa9f013ef, 0x2aed56ab, 0x07f9014c,
14735 +
            0x84e44408, 0x5dd1ae82, 0xdeccebc6, 0xf3d8bc21, 0x70c5f965, 0xe980f11e, 0x6a9db45a,
14736 +
            0x4789e3bd, 0xc494a6f9, 0x1da14c73, 0x9ebc0937, 0xb3a85ed0, 0x30b51b94, 0x2911d60d,
14737 +
            0xaa0c9349, 0x8718c4ae, 0x040581ea, 0xdd306b60, 0x5e2d2e24, 0x733979c3, 0xf0243c87,
14738 +
            0x696134fc, 0xea7c71b8, 0xc768265f, 0x4475631b, 0x9d408991, 0x1e5dccd5, 0x33499b32,
14739 +
            0xb054de76, 0xfbd3bff5, 0x78cefab1, 0x55daad56, 0xd6c7e812, 0x0ff20298, 0x8cef47dc,
14740 +
            0xa1fb103b, 0x22e6557f, 0xbba35d04, 0x38be1840, 0x15aa4fa7, 0x96b70ae3, 0x4f82e069,
14741 +
            0xcc9fa52d, 0xe18bf2ca, 0x6296b78e, 0x7b327a17, 0xf82f3f53, 0xd53b68b4, 0x56262df0,
14742 +
            0x8f13c77a, 0x0c0e823e, 0x211ad5d9, 0xa207909d, 0x3b4298e6, 0xb85fdda2, 0x954b8a45,
14743 +
            0x1656cf01, 0xcf63258b, 0x4c7e60cf, 0x616a3728, 0xe277726c, 0x5223ac1a, 0xd13ee95e,
14744 +
            0xfc2abeb9, 0x7f37fbfd, 0xa6021177, 0x251f5433, 0x080b03d4, 0x8b164690, 0x12534eeb,
14745 +
            0x914e0baf, 0xbc5a5c48, 0x3f47190c, 0xe672f386, 0x656fb6c2, 0x487be125, 0xcb66a461,
14746 +
            0xd2c269f8, 0x51df2cbc, 0x7ccb7b5b, 0xffd63e1f, 0x26e3d495, 0xa5fe91d1, 0x88eac636,
14747 +
            0x0bf78372, 0x92b28b09, 0x11afce4d, 0x3cbb99aa, 0xbfa6dcee, 0x66933664, 0xe58e7320,
14748 +
            0xc89a24c7, 0x4b876183, 0x5f94e7c1, 0xdc89a285, 0xf19df562, 0x7280b026, 0xabb55aac,
14749 +
            0x28a81fe8, 0x05bc480f, 0x86a10d4b, 0x1fe40530, 0x9cf94074, 0xb1ed1793, 0x32f052d7,
14750 +
            0xebc5b85d, 0x68d8fd19, 0x45ccaafe, 0xc6d1efba, 0xdf752223, 0x5c686767, 0x717c3080,
14751 +
            0xf26175c4, 0x2b549f4e, 0xa849da0a, 0x855d8ded, 0x0640c8a9, 0x9f05c0d2, 0x1c188596,
14752 +
            0x310cd271, 0xb2119735, 0x6b247dbf, 0xe83938fb, 0xc52d6f1c, 0x46302a58, 0xf664f42e,
14753 +
            0x7579b16a, 0x586de68d, 0xdb70a3c9, 0x02454943, 0x81580c07, 0xac4c5be0, 0x2f511ea4,
14754 +
            0xb61416df, 0x3509539b, 0x181d047c, 0x9b004138, 0x4235abb2, 0xc128eef6, 0xec3cb911,
14755 +
            0x6f21fc55, 0x768531cc, 0xf5987488, 0xd88c236f, 0x5b91662b, 0x82a48ca1, 0x01b9c9e5,
14756 +
            0x2cad9e02, 0xafb0db46, 0x36f5d33d, 0xb5e89679, 0x98fcc19e, 0x1be184da, 0xc2d46e50,
14757 +
            0x41c92b14, 0x6cdd7cf3, 0xefc039b7, 0xa4475834, 0x275a1d70, 0x0a4e4a97, 0x89530fd3,
14758 +
            0x5066e559, 0xd37ba01d, 0xfe6ff7fa, 0x7d72b2be, 0xe437bac5, 0x672aff81, 0x4a3ea866,
14759 +
            0xc923ed22, 0x101607a8, 0x930b42ec, 0xbe1f150b, 0x3d02504f, 0x24a69dd6, 0xa7bbd892,
14760 +
            0x8aaf8f75, 0x09b2ca31, 0xd08720bb, 0x539a65ff, 0x7e8e3218, 0xfd93775c, 0x64d67f27,
14761 +
            0xe7cb3a63, 0xcadf6d84, 0x49c228c0, 0x90f7c24a, 0x13ea870e, 0x3efed0e9, 0xbde395ad,
14762 +
            0x0db74bdb, 0x8eaa0e9f, 0xa3be5978, 0x20a31c3c, 0xf996f6b6, 0x7a8bb3f2, 0x579fe415,
14763 +
            0xd482a151, 0x4dc7a92a, 0xcedaec6e, 0xe3cebb89, 0x60d3fecd, 0xb9e61447, 0x3afb5103,
14764 +
            0x17ef06e4, 0x94f243a0, 0x8d568e39, 0x0e4bcb7d, 0x235f9c9a, 0xa042d9de, 0x79773354,
14765 +
            0xfa6a7610, 0xd77e21f7, 0x546364b3, 0xcd266cc8, 0x4e3b298c, 0x632f7e6b, 0xe0323b2f,
14766 +
            0x3907d1a5, 0xba1a94e1, 0x970ec306, 0x14138642,
14767 +
        ],
14768 +
        [
14769 +
            0x00000000, 0x11e17666, 0x23c2eccc, 0x32239aaa, 0x4785d998, 0x5664affe, 0x64473554,
14770 +
            0x75a64332, 0x8f0bb330, 0x9eeac556, 0xacc95ffc, 0xbd28299a, 0xc88e6aa8, 0xd96f1cce,
14771 +
            0xeb4c8664, 0xfaadf002, 0xb624fe4b, 0xa7c5882d, 0x95e61287, 0x840764e1, 0xf1a127d3,
14772 +
            0xe04051b5, 0xd263cb1f, 0xc382bd79, 0x392f4d7b, 0x28ce3b1d, 0x1aeda1b7, 0x0b0cd7d1,
14773 +
            0x7eaa94e3, 0x6f4be285, 0x5d68782f, 0x4c890e49, 0xc47a64bd, 0xd59b12db, 0xe7b88871,
14774 +
            0xf659fe17, 0x83ffbd25, 0x921ecb43, 0xa03d51e9, 0xb1dc278f, 0x4b71d78d, 0x5a90a1eb,
14775 +
            0x68b33b41, 0x79524d27, 0x0cf40e15, 0x1d157873, 0x2f36e2d9, 0x3ed794bf, 0x725e9af6,
14776 +
            0x63bfec90, 0x519c763a, 0x407d005c, 0x35db436e, 0x243a3508, 0x1619afa2, 0x07f8d9c4,
14777 +
            0xfd5529c6, 0xecb45fa0, 0xde97c50a, 0xcf76b36c, 0xbad0f05e, 0xab318638, 0x99121c92,
14778 +
            0x88f36af4, 0x20c75151, 0x31262737, 0x0305bd9d, 0x12e4cbfb, 0x674288c9, 0x76a3feaf,
14779 +
            0x44806405, 0x55611263, 0xafcce261, 0xbe2d9407, 0x8c0e0ead, 0x9def78cb, 0xe8493bf9,
14780 +
            0xf9a84d9f, 0xcb8bd735, 0xda6aa153, 0x96e3af1a, 0x8702d97c, 0xb52143d6, 0xa4c035b0,
14781 +
            0xd1667682, 0xc08700e4, 0xf2a49a4e, 0xe345ec28, 0x19e81c2a, 0x08096a4c, 0x3a2af0e6,
14782 +
            0x2bcb8680, 0x5e6dc5b2, 0x4f8cb3d4, 0x7daf297e, 0x6c4e5f18, 0xe4bd35ec, 0xf55c438a,
14783 +
            0xc77fd920, 0xd69eaf46, 0xa338ec74, 0xb2d99a12, 0x80fa00b8, 0x911b76de, 0x6bb686dc,
14784 +
            0x7a57f0ba, 0x48746a10, 0x59951c76, 0x2c335f44, 0x3dd22922, 0x0ff1b388, 0x1e10c5ee,
14785 +
            0x5299cba7, 0x4378bdc1, 0x715b276b, 0x60ba510d, 0x151c123f, 0x04fd6459, 0x36defef3,
14786 +
            0x273f8895, 0xdd927897, 0xcc730ef1, 0xfe50945b, 0xefb1e23d, 0x9a17a10f, 0x8bf6d769,
14787 +
            0xb9d54dc3, 0xa8343ba5, 0x418ea2a2, 0x506fd4c4, 0x624c4e6e, 0x73ad3808, 0x060b7b3a,
14788 +
            0x17ea0d5c, 0x25c997f6, 0x3428e190, 0xce851192, 0xdf6467f4, 0xed47fd5e, 0xfca68b38,
14789 +
            0x8900c80a, 0x98e1be6c, 0xaac224c6, 0xbb2352a0, 0xf7aa5ce9, 0xe64b2a8f, 0xd468b025,
14790 +
            0xc589c643, 0xb02f8571, 0xa1cef317, 0x93ed69bd, 0x820c1fdb, 0x78a1efd9, 0x694099bf,
14791 +
            0x5b630315, 0x4a827573, 0x3f243641, 0x2ec54027, 0x1ce6da8d, 0x0d07aceb, 0x85f4c61f,
14792 +
            0x9415b079, 0xa6362ad3, 0xb7d75cb5, 0xc2711f87, 0xd39069e1, 0xe1b3f34b, 0xf052852d,
14793 +
            0x0aff752f, 0x1b1e0349, 0x293d99e3, 0x38dcef85, 0x4d7aacb7, 0x5c9bdad1, 0x6eb8407b,
14794 +
            0x7f59361d, 0x33d03854, 0x22314e32, 0x1012d498, 0x01f3a2fe, 0x7455e1cc, 0x65b497aa,
14795 +
            0x57970d00, 0x46767b66, 0xbcdb8b64, 0xad3afd02, 0x9f1967a8, 0x8ef811ce, 0xfb5e52fc,
14796 +
            0xeabf249a, 0xd89cbe30, 0xc97dc856, 0x6149f3f3, 0x70a88595, 0x428b1f3f, 0x536a6959,
14797 +
            0x26cc2a6b, 0x372d5c0d, 0x050ec6a7, 0x14efb0c1, 0xee4240c3, 0xffa336a5, 0xcd80ac0f,
14798 +
            0xdc61da69, 0xa9c7995b, 0xb826ef3d, 0x8a057597, 0x9be403f1, 0xd76d0db8, 0xc68c7bde,
14799 +
            0xf4afe174, 0xe54e9712, 0x90e8d420, 0x8109a246, 0xb32a38ec, 0xa2cb4e8a, 0x5866be88,
14800 +
            0x4987c8ee, 0x7ba45244, 0x6a452422, 0x1fe36710, 0x0e021176, 0x3c218bdc, 0x2dc0fdba,
14801 +
            0xa533974e, 0xb4d2e128, 0x86f17b82, 0x97100de4, 0xe2b64ed6, 0xf35738b0, 0xc174a21a,
14802 +
            0xd095d47c, 0x2a38247e, 0x3bd95218, 0x09fac8b2, 0x181bbed4, 0x6dbdfde6, 0x7c5c8b80,
14803 +
            0x4e7f112a, 0x5f9e674c, 0x13176905, 0x02f61f63, 0x30d585c9, 0x2134f3af, 0x5492b09d,
14804 +
            0x4573c6fb, 0x77505c51, 0x66b12a37, 0x9c1cda35, 0x8dfdac53, 0xbfde36f9, 0xae3f409f,
14805 +
            0xdb9903ad, 0xca7875cb, 0xf85bef61, 0xe9ba9907,
14806 +
        ],
14807 +
        [
14808 +
            0x00000000, 0xcddb73d1, 0x33857f89, 0xfe5e0c58, 0x670aff12, 0xaad18cc3, 0x548f809b,
14809 +
            0x9954f34a, 0xce15fe24, 0x03ce8df5, 0xfd9081ad, 0x304bf27c, 0xa91f0136, 0x64c472e7,
14810 +
            0x9a9a7ebf, 0x57410d6e, 0x34186463, 0xf9c317b2, 0x079d1bea, 0xca46683b, 0x53129b71,
14811 +
            0x9ec9e8a0, 0x6097e4f8, 0xad4c9729, 0xfa0d9a47, 0x37d6e996, 0xc988e5ce, 0x0453961f,
14812 +
            0x9d076555, 0x50dc1684, 0xae821adc, 0x6359690d, 0x6830c8c6, 0xa5ebbb17, 0x5bb5b74f,
14813 +
            0x966ec49e, 0x0f3a37d4, 0xc2e14405, 0x3cbf485d, 0xf1643b8c, 0xa62536e2, 0x6bfe4533,
14814 +
            0x95a0496b, 0x587b3aba, 0xc12fc9f0, 0x0cf4ba21, 0xf2aab679, 0x3f71c5a8, 0x5c28aca5,
14815 +
            0x91f3df74, 0x6fadd32c, 0xa276a0fd, 0x3b2253b7, 0xf6f92066, 0x08a72c3e, 0xc57c5fef,
14816 +
            0x923d5281, 0x5fe62150, 0xa1b82d08, 0x6c635ed9, 0xf537ad93, 0x38ecde42, 0xc6b2d21a,
14817 +
            0x0b69a1cb, 0xd061918c, 0x1dbae25d, 0xe3e4ee05, 0x2e3f9dd4, 0xb76b6e9e, 0x7ab01d4f,
14818 +
            0x84ee1117, 0x493562c6, 0x1e746fa8, 0xd3af1c79, 0x2df11021, 0xe02a63f0, 0x797e90ba,
14819 +
            0xb4a5e36b, 0x4afbef33, 0x87209ce2, 0xe479f5ef, 0x29a2863e, 0xd7fc8a66, 0x1a27f9b7,
14820 +
            0x83730afd, 0x4ea8792c, 0xb0f67574, 0x7d2d06a5, 0x2a6c0bcb, 0xe7b7781a, 0x19e97442,
14821 +
            0xd4320793, 0x4d66f4d9, 0x80bd8708, 0x7ee38b50, 0xb338f881, 0xb851594a, 0x758a2a9b,
14822 +
            0x8bd426c3, 0x460f5512, 0xdf5ba658, 0x1280d589, 0xecded9d1, 0x2105aa00, 0x7644a76e,
14823 +
            0xbb9fd4bf, 0x45c1d8e7, 0x881aab36, 0x114e587c, 0xdc952bad, 0x22cb27f5, 0xef105424,
14824 +
            0x8c493d29, 0x41924ef8, 0xbfcc42a0, 0x72173171, 0xeb43c23b, 0x2698b1ea, 0xd8c6bdb2,
14825 +
            0x151dce63, 0x425cc30d, 0x8f87b0dc, 0x71d9bc84, 0xbc02cf55, 0x25563c1f, 0xe88d4fce,
14826 +
            0x16d34396, 0xdb083047, 0x08f0bb33, 0xc52bc8e2, 0x3b75c4ba, 0xf6aeb76b, 0x6ffa4421,
14827 +
            0xa22137f0, 0x5c7f3ba8, 0x91a44879, 0xc6e54517, 0x0b3e36c6, 0xf5603a9e, 0x38bb494f,
14828 +
            0xa1efba05, 0x6c34c9d4, 0x926ac58c, 0x5fb1b65d, 0x3ce8df50, 0xf133ac81, 0x0f6da0d9,
14829 +
            0xc2b6d308, 0x5be22042, 0x96395393, 0x68675fcb, 0xa5bc2c1a, 0xf2fd2174, 0x3f2652a5,
14830 +
            0xc1785efd, 0x0ca32d2c, 0x95f7de66, 0x582cadb7, 0xa672a1ef, 0x6ba9d23e, 0x60c073f5,
14831 +
            0xad1b0024, 0x53450c7c, 0x9e9e7fad, 0x07ca8ce7, 0xca11ff36, 0x344ff36e, 0xf99480bf,
14832 +
            0xaed58dd1, 0x630efe00, 0x9d50f258, 0x508b8189, 0xc9df72c3, 0x04040112, 0xfa5a0d4a,
14833 +
            0x37817e9b, 0x54d81796, 0x99036447, 0x675d681f, 0xaa861bce, 0x33d2e884, 0xfe099b55,
14834 +
            0x0057970d, 0xcd8ce4dc, 0x9acde9b2, 0x57169a63, 0xa948963b, 0x6493e5ea, 0xfdc716a0,
14835 +
            0x301c6571, 0xce426929, 0x03991af8, 0xd8912abf, 0x154a596e, 0xeb145536, 0x26cf26e7,
14836 +
            0xbf9bd5ad, 0x7240a67c, 0x8c1eaa24, 0x41c5d9f5, 0x1684d49b, 0xdb5fa74a, 0x2501ab12,
14837 +
            0xe8dad8c3, 0x718e2b89, 0xbc555858, 0x420b5400, 0x8fd027d1, 0xec894edc, 0x21523d0d,
14838 +
            0xdf0c3155, 0x12d74284, 0x8b83b1ce, 0x4658c21f, 0xb806ce47, 0x75ddbd96, 0x229cb0f8,
14839 +
            0xef47c329, 0x1119cf71, 0xdcc2bca0, 0x45964fea, 0x884d3c3b, 0x76133063, 0xbbc843b2,
14840 +
            0xb0a1e279, 0x7d7a91a8, 0x83249df0, 0x4effee21, 0xd7ab1d6b, 0x1a706eba, 0xe42e62e2,
14841 +
            0x29f51133, 0x7eb41c5d, 0xb36f6f8c, 0x4d3163d4, 0x80ea1005, 0x19bee34f, 0xd465909e,
14842 +
            0x2a3b9cc6, 0xe7e0ef17, 0x84b9861a, 0x4962f5cb, 0xb73cf993, 0x7ae78a42, 0xe3b37908,
14843 +
            0x2e680ad9, 0xd0360681, 0x1ded7550, 0x4aac783e, 0x87770bef, 0x792907b7, 0xb4f27466,
14844 +
            0x2da6872c, 0xe07df4fd, 0x1e23f8a5, 0xd3f88b74,
14845 +
        ],
14846 +
        [
14847 +
            0x00000000, 0x049541bb, 0x092a8376, 0x0dbfc2cd, 0x125506ec, 0x16c04757, 0x1b7f859a,
14848 +
            0x1feac421, 0x24aa0dd8, 0x203f4c63, 0x2d808eae, 0x2915cf15, 0x36ff0b34, 0x326a4a8f,
14849 +
            0x3fd58842, 0x3b40c9f9, 0x49541bb0, 0x4dc15a0b, 0x407e98c6, 0x44ebd97d, 0x5b011d5c,
14850 +
            0x5f945ce7, 0x522b9e2a, 0x56bedf91, 0x6dfe1668, 0x696b57d3, 0x64d4951e, 0x6041d4a5,
14851 +
            0x7fab1084, 0x7b3e513f, 0x768193f2, 0x7214d249, 0x92a83760, 0x963d76db, 0x9b82b416,
14852 +
            0x9f17f5ad, 0x80fd318c, 0x84687037, 0x89d7b2fa, 0x8d42f341, 0xb6023ab8, 0xb2977b03,
14853 +
            0xbf28b9ce, 0xbbbdf875, 0xa4573c54, 0xa0c27def, 0xad7dbf22, 0xa9e8fe99, 0xdbfc2cd0,
14854 +
            0xdf696d6b, 0xd2d6afa6, 0xd643ee1d, 0xc9a92a3c, 0xcd3c6b87, 0xc083a94a, 0xc416e8f1,
14855 +
            0xff562108, 0xfbc360b3, 0xf67ca27e, 0xf2e9e3c5, 0xed0327e4, 0xe996665f, 0xe429a492,
14856 +
            0xe0bce529, 0x8d63f6eb, 0x89f6b750, 0x8449759d, 0x80dc3426, 0x9f36f007, 0x9ba3b1bc,
14857 +
            0x961c7371, 0x928932ca, 0xa9c9fb33, 0xad5cba88, 0xa0e37845, 0xa47639fe, 0xbb9cfddf,
14858 +
            0xbf09bc64, 0xb2b67ea9, 0xb6233f12, 0xc437ed5b, 0xc0a2ace0, 0xcd1d6e2d, 0xc9882f96,
14859 +
            0xd662ebb7, 0xd2f7aa0c, 0xdf4868c1, 0xdbdd297a, 0xe09de083, 0xe408a138, 0xe9b763f5,
14860 +
            0xed22224e, 0xf2c8e66f, 0xf65da7d4, 0xfbe26519, 0xff7724a2, 0x1fcbc18b, 0x1b5e8030,
14861 +
            0x16e142fd, 0x12740346, 0x0d9ec767, 0x090b86dc, 0x04b44411, 0x002105aa, 0x3b61cc53,
14862 +
            0x3ff48de8, 0x324b4f25, 0x36de0e9e, 0x2934cabf, 0x2da18b04, 0x201e49c9, 0x248b0872,
14863 +
            0x569fda3b, 0x520a9b80, 0x5fb5594d, 0x5b2018f6, 0x44cadcd7, 0x405f9d6c, 0x4de05fa1,
14864 +
            0x49751e1a, 0x7235d7e3, 0x76a09658, 0x7b1f5495, 0x7f8a152e, 0x6060d10f, 0x64f590b4,
14865 +
            0x694a5279, 0x6ddf13c2, 0xb2f475fd, 0xb6613446, 0xbbdef68b, 0xbf4bb730, 0xa0a17311,
14866 +
            0xa43432aa, 0xa98bf067, 0xad1eb1dc, 0x965e7825, 0x92cb399e, 0x9f74fb53, 0x9be1bae8,
14867 +
            0x840b7ec9, 0x809e3f72, 0x8d21fdbf, 0x89b4bc04, 0xfba06e4d, 0xff352ff6, 0xf28aed3b,
14868 +
            0xf61fac80, 0xe9f568a1, 0xed60291a, 0xe0dfebd7, 0xe44aaa6c, 0xdf0a6395, 0xdb9f222e,
14869 +
            0xd620e0e3, 0xd2b5a158, 0xcd5f6579, 0xc9ca24c2, 0xc475e60f, 0xc0e0a7b4, 0x205c429d,
14870 +
            0x24c90326, 0x2976c1eb, 0x2de38050, 0x32094471, 0x369c05ca, 0x3b23c707, 0x3fb686bc,
14871 +
            0x04f64f45, 0x00630efe, 0x0ddccc33, 0x09498d88, 0x16a349a9, 0x12360812, 0x1f89cadf,
14872 +
            0x1b1c8b64, 0x6908592d, 0x6d9d1896, 0x6022da5b, 0x64b79be0, 0x7b5d5fc1, 0x7fc81e7a,
14873 +
            0x7277dcb7, 0x76e29d0c, 0x4da254f5, 0x4937154e, 0x4488d783, 0x401d9638, 0x5ff75219,
14874 +
            0x5b6213a2, 0x56ddd16f, 0x524890d4, 0x3f978316, 0x3b02c2ad, 0x36bd0060, 0x322841db,
14875 +
            0x2dc285fa, 0x2957c441, 0x24e8068c, 0x207d4737, 0x1b3d8ece, 0x1fa8cf75, 0x12170db8,
14876 +
            0x16824c03, 0x09688822, 0x0dfdc999, 0x00420b54, 0x04d74aef, 0x76c398a6, 0x7256d91d,
14877 +
            0x7fe91bd0, 0x7b7c5a6b, 0x64969e4a, 0x6003dff1, 0x6dbc1d3c, 0x69295c87, 0x5269957e,
14878 +
            0x56fcd4c5, 0x5b431608, 0x5fd657b3, 0x403c9392, 0x44a9d229, 0x491610e4, 0x4d83515f,
14879 +
            0xad3fb476, 0xa9aaf5cd, 0xa4153700, 0xa08076bb, 0xbf6ab29a, 0xbbfff321, 0xb64031ec,
14880 +
            0xb2d57057, 0x8995b9ae, 0x8d00f815, 0x80bf3ad8, 0x842a7b63, 0x9bc0bf42, 0x9f55fef9,
14881 +
            0x92ea3c34, 0x967f7d8f, 0xe46bafc6, 0xe0feee7d, 0xed412cb0, 0xe9d46d0b, 0xf63ea92a,
14882 +
            0xf2abe891, 0xff142a5c, 0xfb816be7, 0xc0c1a21e, 0xc454e3a5, 0xc9eb2168, 0xcd7e60d3,
14883 +
            0xd294a4f2, 0xd601e549, 0xdbbe2784, 0xdf2b663f,
14884 +
        ],
14885 +
    ];
14886 +
14887 +
    pub static CRC32_BZIP2_TABLE: [[u32; 256]; 16] = [
14888 +
        [
14889 +
            0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2,
14890 +
            0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3,
14891 +
            0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
14892 +
            0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
14893 +
            0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e,
14894 +
            0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef,
14895 +
            0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90,
14896 +
            0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
14897 +
            0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a,
14898 +
            0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c,
14899 +
            0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13,
14900 +
            0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
14901 +
            0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
14902 +
            0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20,
14903 +
            0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f,
14904 +
            0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
14905 +
            0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055,
14906 +
            0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
14907 +
            0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632,
14908 +
            0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
14909 +
            0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0,
14910 +
            0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91,
14911 +
            0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
14912 +
            0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
14913 +
            0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604,
14914 +
            0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615,
14915 +
            0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a,
14916 +
            0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
14917 +
            0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f,
14918 +
            0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e,
14919 +
            0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651,
14920 +
            0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
14921 +
            0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
14922 +
            0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa,
14923 +
            0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5,
14924 +
            0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
14925 +
            0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4,
14926 +
        ],
14927 +
        [
14928 +
            0x00000000, 0xd219c1dc, 0xa0f29e0f, 0x72eb5fd3, 0x452421a9, 0x973de075, 0xe5d6bfa6,
14929 +
            0x37cf7e7a, 0x8a484352, 0x5851828e, 0x2abadd5d, 0xf8a31c81, 0xcf6c62fb, 0x1d75a327,
14930 +
            0x6f9efcf4, 0xbd873d28, 0x10519b13, 0xc2485acf, 0xb0a3051c, 0x62bac4c0, 0x5575baba,
14931 +
            0x876c7b66, 0xf58724b5, 0x279ee569, 0x9a19d841, 0x4800199d, 0x3aeb464e, 0xe8f28792,
14932 +
            0xdf3df9e8, 0x0d243834, 0x7fcf67e7, 0xadd6a63b, 0x20a33626, 0xf2baf7fa, 0x8051a829,
14933 +
            0x524869f5, 0x6587178f, 0xb79ed653, 0xc5758980, 0x176c485c, 0xaaeb7574, 0x78f2b4a8,
14934 +
            0x0a19eb7b, 0xd8002aa7, 0xefcf54dd, 0x3dd69501, 0x4f3dcad2, 0x9d240b0e, 0x30f2ad35,
14935 +
            0xe2eb6ce9, 0x9000333a, 0x4219f2e6, 0x75d68c9c, 0xa7cf4d40, 0xd5241293, 0x073dd34f,
14936 +
            0xbabaee67, 0x68a32fbb, 0x1a487068, 0xc851b1b4, 0xff9ecfce, 0x2d870e12, 0x5f6c51c1,
14937 +
            0x8d75901d, 0x41466c4c, 0x935fad90, 0xe1b4f243, 0x33ad339f, 0x04624de5, 0xd67b8c39,
14938 +
            0xa490d3ea, 0x76891236, 0xcb0e2f1e, 0x1917eec2, 0x6bfcb111, 0xb9e570cd, 0x8e2a0eb7,
14939 +
            0x5c33cf6b, 0x2ed890b8, 0xfcc15164, 0x5117f75f, 0x830e3683, 0xf1e56950, 0x23fca88c,
14940 +
            0x1433d6f6, 0xc62a172a, 0xb4c148f9, 0x66d88925, 0xdb5fb40d, 0x094675d1, 0x7bad2a02,
14941 +
            0xa9b4ebde, 0x9e7b95a4, 0x4c625478, 0x3e890bab, 0xec90ca77, 0x61e55a6a, 0xb3fc9bb6,
14942 +
            0xc117c465, 0x130e05b9, 0x24c17bc3, 0xf6d8ba1f, 0x8433e5cc, 0x562a2410, 0xebad1938,
14943 +
            0x39b4d8e4, 0x4b5f8737, 0x994646eb, 0xae893891, 0x7c90f94d, 0x0e7ba69e, 0xdc626742,
14944 +
            0x71b4c179, 0xa3ad00a5, 0xd1465f76, 0x035f9eaa, 0x3490e0d0, 0xe689210c, 0x94627edf,
14945 +
            0x467bbf03, 0xfbfc822b, 0x29e543f7, 0x5b0e1c24, 0x8917ddf8, 0xbed8a382, 0x6cc1625e,
14946 +
            0x1e2a3d8d, 0xcc33fc51, 0x828cd898, 0x50951944, 0x227e4697, 0xf067874b, 0xc7a8f931,
14947 +
            0x15b138ed, 0x675a673e, 0xb543a6e2, 0x08c49bca, 0xdadd5a16, 0xa83605c5, 0x7a2fc419,
14948 +
            0x4de0ba63, 0x9ff97bbf, 0xed12246c, 0x3f0be5b0, 0x92dd438b, 0x40c48257, 0x322fdd84,
14949 +
            0xe0361c58, 0xd7f96222, 0x05e0a3fe, 0x770bfc2d, 0xa5123df1, 0x189500d9, 0xca8cc105,
14950 +
            0xb8679ed6, 0x6a7e5f0a, 0x5db12170, 0x8fa8e0ac, 0xfd43bf7f, 0x2f5a7ea3, 0xa22feebe,
14951 +
            0x70362f62, 0x02dd70b1, 0xd0c4b16d, 0xe70bcf17, 0x35120ecb, 0x47f95118, 0x95e090c4,
14952 +
            0x2867adec, 0xfa7e6c30, 0x889533e3, 0x5a8cf23f, 0x6d438c45, 0xbf5a4d99, 0xcdb1124a,
14953 +
            0x1fa8d396, 0xb27e75ad, 0x6067b471, 0x128ceba2, 0xc0952a7e, 0xf75a5404, 0x254395d8,
14954 +
            0x57a8ca0b, 0x85b10bd7, 0x383636ff, 0xea2ff723, 0x98c4a8f0, 0x4add692c, 0x7d121756,
14955 +
            0xaf0bd68a, 0xdde08959, 0x0ff94885, 0xc3cab4d4, 0x11d37508, 0x63382adb, 0xb121eb07,
14956 +
            0x86ee957d, 0x54f754a1, 0x261c0b72, 0xf405caae, 0x4982f786, 0x9b9b365a, 0xe9706989,
14957 +
            0x3b69a855, 0x0ca6d62f, 0xdebf17f3, 0xac544820, 0x7e4d89fc, 0xd39b2fc7, 0x0182ee1b,
14958 +
            0x7369b1c8, 0xa1707014, 0x96bf0e6e, 0x44a6cfb2, 0x364d9061, 0xe45451bd, 0x59d36c95,
14959 +
            0x8bcaad49, 0xf921f29a, 0x2b383346, 0x1cf74d3c, 0xceee8ce0, 0xbc05d333, 0x6e1c12ef,
14960 +
            0xe36982f2, 0x3170432e, 0x439b1cfd, 0x9182dd21, 0xa64da35b, 0x74546287, 0x06bf3d54,
14961 +
            0xd4a6fc88, 0x6921c1a0, 0xbb38007c, 0xc9d35faf, 0x1bca9e73, 0x2c05e009, 0xfe1c21d5,
14962 +
            0x8cf77e06, 0x5eeebfda, 0xf33819e1, 0x2121d83d, 0x53ca87ee, 0x81d34632, 0xb61c3848,
14963 +
            0x6405f994, 0x16eea647, 0xc4f7679b, 0x79705ab3, 0xab699b6f, 0xd982c4bc, 0x0b9b0560,
14964 +
            0x3c547b1a, 0xee4dbac6, 0x9ca6e515, 0x4ebf24c9,
14965 +
        ],
14966 +
        [
14967 +
            0x00000000, 0x01d8ac87, 0x03b1590e, 0x0269f589, 0x0762b21c, 0x06ba1e9b, 0x04d3eb12,
14968 +
            0x050b4795, 0x0ec56438, 0x0f1dc8bf, 0x0d743d36, 0x0cac91b1, 0x09a7d624, 0x087f7aa3,
14969 +
            0x0a168f2a, 0x0bce23ad, 0x1d8ac870, 0x1c5264f7, 0x1e3b917e, 0x1fe33df9, 0x1ae87a6c,
14970 +
            0x1b30d6eb, 0x19592362, 0x18818fe5, 0x134fac48, 0x129700cf, 0x10fef546, 0x112659c1,
14971 +
            0x142d1e54, 0x15f5b2d3, 0x179c475a, 0x1644ebdd, 0x3b1590e0, 0x3acd3c67, 0x38a4c9ee,
14972 +
            0x397c6569, 0x3c7722fc, 0x3daf8e7b, 0x3fc67bf2, 0x3e1ed775, 0x35d0f4d8, 0x3408585f,
14973 +
            0x3661add6, 0x37b90151, 0x32b246c4, 0x336aea43, 0x31031fca, 0x30dbb34d, 0x269f5890,
14974 +
            0x2747f417, 0x252e019e, 0x24f6ad19, 0x21fdea8c, 0x2025460b, 0x224cb382, 0x23941f05,
14975 +
            0x285a3ca8, 0x2982902f, 0x2beb65a6, 0x2a33c921, 0x2f388eb4, 0x2ee02233, 0x2c89d7ba,
14976 +
            0x2d517b3d, 0x762b21c0, 0x77f38d47, 0x759a78ce, 0x7442d449, 0x714993dc, 0x70913f5b,
14977 +
            0x72f8cad2, 0x73206655, 0x78ee45f8, 0x7936e97f, 0x7b5f1cf6, 0x7a87b071, 0x7f8cf7e4,
14978 +
            0x7e545b63, 0x7c3daeea, 0x7de5026d, 0x6ba1e9b0, 0x6a794537, 0x6810b0be, 0x69c81c39,
14979 +
            0x6cc35bac, 0x6d1bf72b, 0x6f7202a2, 0x6eaaae25, 0x65648d88, 0x64bc210f, 0x66d5d486,
14980 +
            0x670d7801, 0x62063f94, 0x63de9313, 0x61b7669a, 0x606fca1d, 0x4d3eb120, 0x4ce61da7,
14981 +
            0x4e8fe82e, 0x4f5744a9, 0x4a5c033c, 0x4b84afbb, 0x49ed5a32, 0x4835f6b5, 0x43fbd518,
14982 +
            0x4223799f, 0x404a8c16, 0x41922091, 0x44996704, 0x4541cb83, 0x47283e0a, 0x46f0928d,
14983 +
            0x50b47950, 0x516cd5d7, 0x5305205e, 0x52dd8cd9, 0x57d6cb4c, 0x560e67cb, 0x54679242,
14984 +
            0x55bf3ec5, 0x5e711d68, 0x5fa9b1ef, 0x5dc04466, 0x5c18e8e1, 0x5913af74, 0x58cb03f3,
14985 +
            0x5aa2f67a, 0x5b7a5afd, 0xec564380, 0xed8eef07, 0xefe71a8e, 0xee3fb609, 0xeb34f19c,
14986 +
            0xeaec5d1b, 0xe885a892, 0xe95d0415, 0xe29327b8, 0xe34b8b3f, 0xe1227eb6, 0xe0fad231,
14987 +
            0xe5f195a4, 0xe4293923, 0xe640ccaa, 0xe798602d, 0xf1dc8bf0, 0xf0042777, 0xf26dd2fe,
14988 +
            0xf3b57e79, 0xf6be39ec, 0xf766956b, 0xf50f60e2, 0xf4d7cc65, 0xff19efc8, 0xfec1434f,
14989 +
            0xfca8b6c6, 0xfd701a41, 0xf87b5dd4, 0xf9a3f153, 0xfbca04da, 0xfa12a85d, 0xd743d360,
14990 +
            0xd69b7fe7, 0xd4f28a6e, 0xd52a26e9, 0xd021617c, 0xd1f9cdfb, 0xd3903872, 0xd24894f5,
14991 +
            0xd986b758, 0xd85e1bdf, 0xda37ee56, 0xdbef42d1, 0xdee40544, 0xdf3ca9c3, 0xdd555c4a,
14992 +
            0xdc8df0cd, 0xcac91b10, 0xcb11b797, 0xc978421e, 0xc8a0ee99, 0xcdaba90c, 0xcc73058b,
14993 +
            0xce1af002, 0xcfc25c85, 0xc40c7f28, 0xc5d4d3af, 0xc7bd2626, 0xc6658aa1, 0xc36ecd34,
14994 +
            0xc2b661b3, 0xc0df943a, 0xc10738bd, 0x9a7d6240, 0x9ba5cec7, 0x99cc3b4e, 0x981497c9,
14995 +
            0x9d1fd05c, 0x9cc77cdb, 0x9eae8952, 0x9f7625d5, 0x94b80678, 0x9560aaff, 0x97095f76,
14996 +
            0x96d1f3f1, 0x93dab464, 0x920218e3, 0x906bed6a, 0x91b341ed, 0x87f7aa30, 0x862f06b7,
14997 +
            0x8446f33e, 0x859e5fb9, 0x8095182c, 0x814db4ab, 0x83244122, 0x82fceda5, 0x8932ce08,
14998 +
            0x88ea628f, 0x8a839706, 0x8b5b3b81, 0x8e507c14, 0x8f88d093, 0x8de1251a, 0x8c39899d,
14999 +
            0xa168f2a0, 0xa0b05e27, 0xa2d9abae, 0xa3010729, 0xa60a40bc, 0xa7d2ec3b, 0xa5bb19b2,
15000 +
            0xa463b535, 0xafad9698, 0xae753a1f, 0xac1ccf96, 0xadc46311, 0xa8cf2484, 0xa9178803,
15001 +
            0xab7e7d8a, 0xaaa6d10d, 0xbce23ad0, 0xbd3a9657, 0xbf5363de, 0xbe8bcf59, 0xbb8088cc,
15002 +
            0xba58244b, 0xb831d1c2, 0xb9e97d45, 0xb2275ee8, 0xb3fff26f, 0xb19607e6, 0xb04eab61,
15003 +
            0xb545ecf4, 0xb49d4073, 0xb6f4b5fa, 0xb72c197d,
15004 +
        ],
15005 +
        [
15006 +
            0x00000000, 0xdc6d9ab7, 0xbc1a28d9, 0x6077b26e, 0x7cf54c05, 0xa098d6b2, 0xc0ef64dc,
15007 +
            0x1c82fe6b, 0xf9ea980a, 0x258702bd, 0x45f0b0d3, 0x999d2a64, 0x851fd40f, 0x59724eb8,
15008 +
            0x3905fcd6, 0xe5686661, 0xf7142da3, 0x2b79b714, 0x4b0e057a, 0x97639fcd, 0x8be161a6,
15009 +
            0x578cfb11, 0x37fb497f, 0xeb96d3c8, 0x0efeb5a9, 0xd2932f1e, 0xb2e49d70, 0x6e8907c7,
15010 +
            0x720bf9ac, 0xae66631b, 0xce11d175, 0x127c4bc2, 0xeae946f1, 0x3684dc46, 0x56f36e28,
15011 +
            0x8a9ef49f, 0x961c0af4, 0x4a719043, 0x2a06222d, 0xf66bb89a, 0x1303defb, 0xcf6e444c,
15012 +
            0xaf19f622, 0x73746c95, 0x6ff692fe, 0xb39b0849, 0xd3ecba27, 0x0f812090, 0x1dfd6b52,
15013 +
            0xc190f1e5, 0xa1e7438b, 0x7d8ad93c, 0x61082757, 0xbd65bde0, 0xdd120f8e, 0x017f9539,
15014 +
            0xe417f358, 0x387a69ef, 0x580ddb81, 0x84604136, 0x98e2bf5d, 0x448f25ea, 0x24f89784,
15015 +
            0xf8950d33, 0xd1139055, 0x0d7e0ae2, 0x6d09b88c, 0xb164223b, 0xade6dc50, 0x718b46e7,
15016 +
            0x11fcf489, 0xcd916e3e, 0x28f9085f, 0xf49492e8, 0x94e32086, 0x488eba31, 0x540c445a,
15017 +
            0x8861deed, 0xe8166c83, 0x347bf634, 0x2607bdf6, 0xfa6a2741, 0x9a1d952f, 0x46700f98,
15018 +
            0x5af2f1f3, 0x869f6b44, 0xe6e8d92a, 0x3a85439d, 0xdfed25fc, 0x0380bf4b, 0x63f70d25,
15019 +
            0xbf9a9792, 0xa31869f9, 0x7f75f34e, 0x1f024120, 0xc36fdb97, 0x3bfad6a4, 0xe7974c13,
15020 +
            0x87e0fe7d, 0x5b8d64ca, 0x470f9aa1, 0x9b620016, 0xfb15b278, 0x277828cf, 0xc2104eae,
15021 +
            0x1e7dd419, 0x7e0a6677, 0xa267fcc0, 0xbee502ab, 0x6288981c, 0x02ff2a72, 0xde92b0c5,
15022 +
            0xcceefb07, 0x108361b0, 0x70f4d3de, 0xac994969, 0xb01bb702, 0x6c762db5, 0x0c019fdb,
15023 +
            0xd06c056c, 0x3504630d, 0xe969f9ba, 0x891e4bd4, 0x5573d163, 0x49f12f08, 0x959cb5bf,
15024 +
            0xf5eb07d1, 0x29869d66, 0xa6e63d1d, 0x7a8ba7aa, 0x1afc15c4, 0xc6918f73, 0xda137118,
15025 +
            0x067eebaf, 0x660959c1, 0xba64c376, 0x5f0ca517, 0x83613fa0, 0xe3168dce, 0x3f7b1779,
15026 +
            0x23f9e912, 0xff9473a5, 0x9fe3c1cb, 0x438e5b7c, 0x51f210be, 0x8d9f8a09, 0xede83867,
15027 +
            0x3185a2d0, 0x2d075cbb, 0xf16ac60c, 0x911d7462, 0x4d70eed5, 0xa81888b4, 0x74751203,
15028 +
            0x1402a06d, 0xc86f3ada, 0xd4edc4b1, 0x08805e06, 0x68f7ec68, 0xb49a76df, 0x4c0f7bec,
15029 +
            0x9062e15b, 0xf0155335, 0x2c78c982, 0x30fa37e9, 0xec97ad5e, 0x8ce01f30, 0x508d8587,
15030 +
            0xb5e5e3e6, 0x69887951, 0x09ffcb3f, 0xd5925188, 0xc910afe3, 0x157d3554, 0x750a873a,
15031 +
            0xa9671d8d, 0xbb1b564f, 0x6776ccf8, 0x07017e96, 0xdb6ce421, 0xc7ee1a4a, 0x1b8380fd,
15032 +
            0x7bf43293, 0xa799a824, 0x42f1ce45, 0x9e9c54f2, 0xfeebe69c, 0x22867c2b, 0x3e048240,
15033 +
            0xe26918f7, 0x821eaa99, 0x5e73302e, 0x77f5ad48, 0xab9837ff, 0xcbef8591, 0x17821f26,
15034 +
            0x0b00e14d, 0xd76d7bfa, 0xb71ac994, 0x6b775323, 0x8e1f3542, 0x5272aff5, 0x32051d9b,
15035 +
            0xee68872c, 0xf2ea7947, 0x2e87e3f0, 0x4ef0519e, 0x929dcb29, 0x80e180eb, 0x5c8c1a5c,
15036 +
            0x3cfba832, 0xe0963285, 0xfc14ccee, 0x20795659, 0x400ee437, 0x9c637e80, 0x790b18e1,
15037 +
            0xa5668256, 0xc5113038, 0x197caa8f, 0x05fe54e4, 0xd993ce53, 0xb9e47c3d, 0x6589e68a,
15038 +
            0x9d1cebb9, 0x4171710e, 0x2106c360, 0xfd6b59d7, 0xe1e9a7bc, 0x3d843d0b, 0x5df38f65,
15039 +
            0x819e15d2, 0x64f673b3, 0xb89be904, 0xd8ec5b6a, 0x0481c1dd, 0x18033fb6, 0xc46ea501,
15040 +
            0xa419176f, 0x78748dd8, 0x6a08c61a, 0xb6655cad, 0xd612eec3, 0x0a7f7474, 0x16fd8a1f,
15041 +
            0xca9010a8, 0xaae7a2c6, 0x768a3871, 0x93e25e10, 0x4f8fc4a7, 0x2ff876c9, 0xf395ec7e,
15042 +
            0xef171215, 0x337a88a2, 0x530d3acc, 0x8f60a07b,
15043 +
        ],
15044 +
        [
15045 +
            0x00000000, 0x490d678d, 0x921acf1a, 0xdb17a897, 0x20f48383, 0x69f9e40e, 0xb2ee4c99,
15046 +
            0xfbe32b14, 0x41e90706, 0x08e4608b, 0xd3f3c81c, 0x9afeaf91, 0x611d8485, 0x2810e308,
15047 +
            0xf3074b9f, 0xba0a2c12, 0x83d20e0c, 0xcadf6981, 0x11c8c116, 0x58c5a69b, 0xa3268d8f,
15048 +
            0xea2bea02, 0x313c4295, 0x78312518, 0xc23b090a, 0x8b366e87, 0x5021c610, 0x192ca19d,
15049 +
            0xe2cf8a89, 0xabc2ed04, 0x70d54593, 0x39d8221e, 0x036501af, 0x4a686622, 0x917fceb5,
15050 +
            0xd872a938, 0x2391822c, 0x6a9ce5a1, 0xb18b4d36, 0xf8862abb, 0x428c06a9, 0x0b816124,
15051 +
            0xd096c9b3, 0x999bae3e, 0x6278852a, 0x2b75e2a7, 0xf0624a30, 0xb96f2dbd, 0x80b70fa3,
15052 +
            0xc9ba682e, 0x12adc0b9, 0x5ba0a734, 0xa0438c20, 0xe94eebad, 0x3259433a, 0x7b5424b7,
15053 +
            0xc15e08a5, 0x88536f28, 0x5344c7bf, 0x1a49a032, 0xe1aa8b26, 0xa8a7ecab, 0x73b0443c,
15054 +
            0x3abd23b1, 0x06ca035e, 0x4fc764d3, 0x94d0cc44, 0xddddabc9, 0x263e80dd, 0x6f33e750,
15055 +
            0xb4244fc7, 0xfd29284a, 0x47230458, 0x0e2e63d5, 0xd539cb42, 0x9c34accf, 0x67d787db,
15056 +
            0x2edae056, 0xf5cd48c1, 0xbcc02f4c, 0x85180d52, 0xcc156adf, 0x1702c248, 0x5e0fa5c5,
15057 +
            0xa5ec8ed1, 0xece1e95c, 0x37f641cb, 0x7efb2646, 0xc4f10a54, 0x8dfc6dd9, 0x56ebc54e,
15058 +
            0x1fe6a2c3, 0xe40589d7, 0xad08ee5a, 0x761f46cd, 0x3f122140, 0x05af02f1, 0x4ca2657c,
15059 +
            0x97b5cdeb, 0xdeb8aa66, 0x255b8172, 0x6c56e6ff, 0xb7414e68, 0xfe4c29e5, 0x444605f7,
15060 +
            0x0d4b627a, 0xd65ccaed, 0x9f51ad60, 0x64b28674, 0x2dbfe1f9, 0xf6a8496e, 0xbfa52ee3,
15061 +
            0x867d0cfd, 0xcf706b70, 0x1467c3e7, 0x5d6aa46a, 0xa6898f7e, 0xef84e8f3, 0x34934064,
15062 +
            0x7d9e27e9, 0xc7940bfb, 0x8e996c76, 0x558ec4e1, 0x1c83a36c, 0xe7608878, 0xae6deff5,
15063 +
            0x757a4762, 0x3c7720ef, 0x0d9406bc, 0x44996131, 0x9f8ec9a6, 0xd683ae2b, 0x2d60853f,
15064 +
            0x646de2b2, 0xbf7a4a25, 0xf6772da8, 0x4c7d01ba, 0x05706637, 0xde67cea0, 0x976aa92d,
15065 +
            0x6c898239, 0x2584e5b4, 0xfe934d23, 0xb79e2aae, 0x8e4608b0, 0xc74b6f3d, 0x1c5cc7aa,
15066 +
            0x5551a027, 0xaeb28b33, 0xe7bfecbe, 0x3ca84429, 0x75a523a4, 0xcfaf0fb6, 0x86a2683b,
15067 +
            0x5db5c0ac, 0x14b8a721, 0xef5b8c35, 0xa656ebb8, 0x7d41432f, 0x344c24a2, 0x0ef10713,
15068 +
            0x47fc609e, 0x9cebc809, 0xd5e6af84, 0x2e058490, 0x6708e31d, 0xbc1f4b8a, 0xf5122c07,
15069 +
            0x4f180015, 0x06156798, 0xdd02cf0f, 0x940fa882, 0x6fec8396, 0x26e1e41b, 0xfdf64c8c,
15070 +
            0xb4fb2b01, 0x8d23091f, 0xc42e6e92, 0x1f39c605, 0x5634a188, 0xadd78a9c, 0xe4daed11,
15071 +
            0x3fcd4586, 0x76c0220b, 0xccca0e19, 0x85c76994, 0x5ed0c103, 0x17dda68e, 0xec3e8d9a,
15072 +
            0xa533ea17, 0x7e244280, 0x3729250d, 0x0b5e05e2, 0x4253626f, 0x9944caf8, 0xd049ad75,
15073 +
            0x2baa8661, 0x62a7e1ec, 0xb9b0497b, 0xf0bd2ef6, 0x4ab702e4, 0x03ba6569, 0xd8adcdfe,
15074 +
            0x91a0aa73, 0x6a438167, 0x234ee6ea, 0xf8594e7d, 0xb15429f0, 0x888c0bee, 0xc1816c63,
15075 +
            0x1a96c4f4, 0x539ba379, 0xa878886d, 0xe175efe0, 0x3a624777, 0x736f20fa, 0xc9650ce8,
15076 +
            0x80686b65, 0x5b7fc3f2, 0x1272a47f, 0xe9918f6b, 0xa09ce8e6, 0x7b8b4071, 0x328627fc,
15077 +
            0x083b044d, 0x413663c0, 0x9a21cb57, 0xd32cacda, 0x28cf87ce, 0x61c2e043, 0xbad548d4,
15078 +
            0xf3d82f59, 0x49d2034b, 0x00df64c6, 0xdbc8cc51, 0x92c5abdc, 0x692680c8, 0x202be745,
15079 +
            0xfb3c4fd2, 0xb231285f, 0x8be90a41, 0xc2e46dcc, 0x19f3c55b, 0x50fea2d6, 0xab1d89c2,
15080 +
            0xe210ee4f, 0x390746d8, 0x700a2155, 0xca000d47, 0x830d6aca, 0x581ac25d, 0x1117a5d0,
15081 +
            0xeaf48ec4, 0xa3f9e949, 0x78ee41de, 0x31e32653,
15082 +
        ],
15083 +
        [
15084 +
            0x00000000, 0x1b280d78, 0x36501af0, 0x2d781788, 0x6ca035e0, 0x77883898, 0x5af02f10,
15085 +
            0x41d82268, 0xd9406bc0, 0xc26866b8, 0xef107130, 0xf4387c48, 0xb5e05e20, 0xaec85358,
15086 +
            0x83b044d0, 0x989849a8, 0xb641ca37, 0xad69c74f, 0x8011d0c7, 0x9b39ddbf, 0xdae1ffd7,
15087 +
            0xc1c9f2af, 0xecb1e527, 0xf799e85f, 0x6f01a1f7, 0x7429ac8f, 0x5951bb07, 0x4279b67f,
15088 +
            0x03a19417, 0x1889996f, 0x35f18ee7, 0x2ed9839f, 0x684289d9, 0x736a84a1, 0x5e129329,
15089 +
            0x453a9e51, 0x04e2bc39, 0x1fcab141, 0x32b2a6c9, 0x299aabb1, 0xb102e219, 0xaa2aef61,
15090 +
            0x8752f8e9, 0x9c7af591, 0xdda2d7f9, 0xc68ada81, 0xebf2cd09, 0xf0dac071, 0xde0343ee,
15091 +
            0xc52b4e96, 0xe853591e, 0xf37b5466, 0xb2a3760e, 0xa98b7b76, 0x84f36cfe, 0x9fdb6186,
15092 +
            0x0743282e, 0x1c6b2556, 0x311332de, 0x2a3b3fa6, 0x6be31dce, 0x70cb10b6, 0x5db3073e,
15093 +
            0x469b0a46, 0xd08513b2, 0xcbad1eca, 0xe6d50942, 0xfdfd043a, 0xbc252652, 0xa70d2b2a,
15094 +
            0x8a753ca2, 0x915d31da, 0x09c57872, 0x12ed750a, 0x3f956282, 0x24bd6ffa, 0x65654d92,
15095 +
            0x7e4d40ea, 0x53355762, 0x481d5a1a, 0x66c4d985, 0x7decd4fd, 0x5094c375, 0x4bbcce0d,
15096 +
            0x0a64ec65, 0x114ce11d, 0x3c34f695, 0x271cfbed, 0xbf84b245, 0xa4acbf3d, 0x89d4a8b5,
15097 +
            0x92fca5cd, 0xd32487a5, 0xc80c8add, 0xe5749d55, 0xfe5c902d, 0xb8c79a6b, 0xa3ef9713,
15098 +
            0x8e97809b, 0x95bf8de3, 0xd467af8b, 0xcf4fa2f3, 0xe237b57b, 0xf91fb803, 0x6187f1ab,
15099 +
            0x7aaffcd3, 0x57d7eb5b, 0x4cffe623, 0x0d27c44b, 0x160fc933, 0x3b77debb, 0x205fd3c3,
15100 +
            0x0e86505c, 0x15ae5d24, 0x38d64aac, 0x23fe47d4, 0x622665bc, 0x790e68c4, 0x54767f4c,
15101 +
            0x4f5e7234, 0xd7c63b9c, 0xccee36e4, 0xe196216c, 0xfabe2c14, 0xbb660e7c, 0xa04e0304,
15102 +
            0x8d36148c, 0x961e19f4, 0xa5cb3ad3, 0xbee337ab, 0x939b2023, 0x88b32d5b, 0xc96b0f33,
15103 +
            0xd243024b, 0xff3b15c3, 0xe41318bb, 0x7c8b5113, 0x67a35c6b, 0x4adb4be3, 0x51f3469b,
15104 +
            0x102b64f3, 0x0b03698b, 0x267b7e03, 0x3d53737b, 0x138af0e4, 0x08a2fd9c, 0x25daea14,
15105 +
            0x3ef2e76c, 0x7f2ac504, 0x6402c87c, 0x497adff4, 0x5252d28c, 0xcaca9b24, 0xd1e2965c,
15106 +
            0xfc9a81d4, 0xe7b28cac, 0xa66aaec4, 0xbd42a3bc, 0x903ab434, 0x8b12b94c, 0xcd89b30a,
15107 +
            0xd6a1be72, 0xfbd9a9fa, 0xe0f1a482, 0xa12986ea, 0xba018b92, 0x97799c1a, 0x8c519162,
15108 +
            0x14c9d8ca, 0x0fe1d5b2, 0x2299c23a, 0x39b1cf42, 0x7869ed2a, 0x6341e052, 0x4e39f7da,
15109 +
            0x5511faa2, 0x7bc8793d, 0x60e07445, 0x4d9863cd, 0x56b06eb5, 0x17684cdd, 0x0c4041a5,
15110 +
            0x2138562d, 0x3a105b55, 0xa28812fd, 0xb9a01f85, 0x94d8080d, 0x8ff00575, 0xce28271d,
15111 +
            0xd5002a65, 0xf8783ded, 0xe3503095, 0x754e2961, 0x6e662419, 0x431e3391, 0x58363ee9,
15112 +
            0x19ee1c81, 0x02c611f9, 0x2fbe0671, 0x34960b09, 0xac0e42a1, 0xb7264fd9, 0x9a5e5851,
15113 +
            0x81765529, 0xc0ae7741, 0xdb867a39, 0xf6fe6db1, 0xedd660c9, 0xc30fe356, 0xd827ee2e,
15114 +
            0xf55ff9a6, 0xee77f4de, 0xafafd6b6, 0xb487dbce, 0x99ffcc46, 0x82d7c13e, 0x1a4f8896,
15115 +
            0x016785ee, 0x2c1f9266, 0x37379f1e, 0x76efbd76, 0x6dc7b00e, 0x40bfa786, 0x5b97aafe,
15116 +
            0x1d0ca0b8, 0x0624adc0, 0x2b5cba48, 0x3074b730, 0x71ac9558, 0x6a849820, 0x47fc8fa8,
15117 +
            0x5cd482d0, 0xc44ccb78, 0xdf64c600, 0xf21cd188, 0xe934dcf0, 0xa8ecfe98, 0xb3c4f3e0,
15118 +
            0x9ebce468, 0x8594e910, 0xab4d6a8f, 0xb06567f7, 0x9d1d707f, 0x86357d07, 0xc7ed5f6f,
15119 +
            0xdcc55217, 0xf1bd459f, 0xea9548e7, 0x720d014f, 0x69250c37, 0x445d1bbf, 0x5f7516c7,
15120 +
            0x1ead34af, 0x058539d7, 0x28fd2e5f, 0x33d52327,
15121 +
        ],
15122 +
        [
15123 +
            0x00000000, 0x4f576811, 0x9eaed022, 0xd1f9b833, 0x399cbdf3, 0x76cbd5e2, 0xa7326dd1,
15124 +
            0xe86505c0, 0x73397be6, 0x3c6e13f7, 0xed97abc4, 0xa2c0c3d5, 0x4aa5c615, 0x05f2ae04,
15125 +
            0xd40b1637, 0x9b5c7e26, 0xe672f7cc, 0xa9259fdd, 0x78dc27ee, 0x378b4fff, 0xdfee4a3f,
15126 +
            0x90b9222e, 0x41409a1d, 0x0e17f20c, 0x954b8c2a, 0xda1ce43b, 0x0be55c08, 0x44b23419,
15127 +
            0xacd731d9, 0xe38059c8, 0x3279e1fb, 0x7d2e89ea, 0xc824f22f, 0x87739a3e, 0x568a220d,
15128 +
            0x19dd4a1c, 0xf1b84fdc, 0xbeef27cd, 0x6f169ffe, 0x2041f7ef, 0xbb1d89c9, 0xf44ae1d8,
15129 +
            0x25b359eb, 0x6ae431fa, 0x8281343a, 0xcdd65c2b, 0x1c2fe418, 0x53788c09, 0x2e5605e3,
15130 +
            0x61016df2, 0xb0f8d5c1, 0xffafbdd0, 0x17cab810, 0x589dd001, 0x89646832, 0xc6330023,
15131 +
            0x5d6f7e05, 0x12381614, 0xc3c1ae27, 0x8c96c636, 0x64f3c3f6, 0x2ba4abe7, 0xfa5d13d4,
15132 +
            0xb50a7bc5, 0x9488f9e9, 0xdbdf91f8, 0x0a2629cb, 0x457141da, 0xad14441a, 0xe2432c0b,
15133 +
            0x33ba9438, 0x7cedfc29, 0xe7b1820f, 0xa8e6ea1e, 0x791f522d, 0x36483a3c, 0xde2d3ffc,
15134 +
            0x917a57ed, 0x4083efde, 0x0fd487cf, 0x72fa0e25, 0x3dad6634, 0xec54de07, 0xa303b616,
15135 +
            0x4b66b3d6, 0x0431dbc7, 0xd5c863f4, 0x9a9f0be5, 0x01c375c3, 0x4e941dd2, 0x9f6da5e1,
15136 +
            0xd03acdf0, 0x385fc830, 0x7708a021, 0xa6f11812, 0xe9a67003, 0x5cac0bc6, 0x13fb63d7,
15137 +
            0xc202dbe4, 0x8d55b3f5, 0x6530b635, 0x2a67de24, 0xfb9e6617, 0xb4c90e06, 0x2f957020,
15138 +
            0x60c21831, 0xb13ba002, 0xfe6cc813, 0x1609cdd3, 0x595ea5c2, 0x88a71df1, 0xc7f075e0,
15139 +
            0xbadefc0a, 0xf589941b, 0x24702c28, 0x6b274439, 0x834241f9, 0xcc1529e8, 0x1dec91db,
15140 +
            0x52bbf9ca, 0xc9e787ec, 0x86b0effd, 0x574957ce, 0x181e3fdf, 0xf07b3a1f, 0xbf2c520e,
15141 +
            0x6ed5ea3d, 0x2182822c, 0x2dd0ee65, 0x62878674, 0xb37e3e47, 0xfc295656, 0x144c5396,
15142 +
            0x5b1b3b87, 0x8ae283b4, 0xc5b5eba5, 0x5ee99583, 0x11befd92, 0xc04745a1, 0x8f102db0,
15143 +
            0x67752870, 0x28224061, 0xf9dbf852, 0xb68c9043, 0xcba219a9, 0x84f571b8, 0x550cc98b,
15144 +
            0x1a5ba19a, 0xf23ea45a, 0xbd69cc4b, 0x6c907478, 0x23c71c69, 0xb89b624f, 0xf7cc0a5e,
15145 +
            0x2635b26d, 0x6962da7c, 0x8107dfbc, 0xce50b7ad, 0x1fa90f9e, 0x50fe678f, 0xe5f41c4a,
15146 +
            0xaaa3745b, 0x7b5acc68, 0x340da479, 0xdc68a1b9, 0x933fc9a8, 0x42c6719b, 0x0d91198a,
15147 +
            0x96cd67ac, 0xd99a0fbd, 0x0863b78e, 0x4734df9f, 0xaf51da5f, 0xe006b24e, 0x31ff0a7d,
15148 +
            0x7ea8626c, 0x0386eb86, 0x4cd18397, 0x9d283ba4, 0xd27f53b5, 0x3a1a5675, 0x754d3e64,
15149 +
            0xa4b48657, 0xebe3ee46, 0x70bf9060, 0x3fe8f871, 0xee114042, 0xa1462853, 0x49232d93,
15150 +
            0x06744582, 0xd78dfdb1, 0x98da95a0, 0xb958178c, 0xf60f7f9d, 0x27f6c7ae, 0x68a1afbf,
15151 +
            0x80c4aa7f, 0xcf93c26e, 0x1e6a7a5d, 0x513d124c, 0xca616c6a, 0x8536047b, 0x54cfbc48,
15152 +
            0x1b98d459, 0xf3fdd199, 0xbcaab988, 0x6d5301bb, 0x220469aa, 0x5f2ae040, 0x107d8851,
15153 +
            0xc1843062, 0x8ed35873, 0x66b65db3, 0x29e135a2, 0xf8188d91, 0xb74fe580, 0x2c139ba6,
15154 +
            0x6344f3b7, 0xb2bd4b84, 0xfdea2395, 0x158f2655, 0x5ad84e44, 0x8b21f677, 0xc4769e66,
15155 +
            0x717ce5a3, 0x3e2b8db2, 0xefd23581, 0xa0855d90, 0x48e05850, 0x07b73041, 0xd64e8872,
15156 +
            0x9919e063, 0x02459e45, 0x4d12f654, 0x9ceb4e67, 0xd3bc2676, 0x3bd923b6, 0x748e4ba7,
15157 +
            0xa577f394, 0xea209b85, 0x970e126f, 0xd8597a7e, 0x09a0c24d, 0x46f7aa5c, 0xae92af9c,
15158 +
            0xe1c5c78d, 0x303c7fbe, 0x7f6b17af, 0xe4376989, 0xab600198, 0x7a99b9ab, 0x35ced1ba,
15159 +
            0xddabd47a, 0x92fcbc6b, 0x43050458, 0x0c526c49,
15160 +
        ],
15161 +
        [
15162 +
            0x00000000, 0x5ba1dcca, 0xb743b994, 0xece2655e, 0x6a466e9f, 0x31e7b255, 0xdd05d70b,
15163 +
            0x86a40bc1, 0xd48cdd3e, 0x8f2d01f4, 0x63cf64aa, 0x386eb860, 0xbecab3a1, 0xe56b6f6b,
15164 +
            0x09890a35, 0x5228d6ff, 0xadd8a7cb, 0xf6797b01, 0x1a9b1e5f, 0x413ac295, 0xc79ec954,
15165 +
            0x9c3f159e, 0x70dd70c0, 0x2b7cac0a, 0x79547af5, 0x22f5a63f, 0xce17c361, 0x95b61fab,
15166 +
            0x1312146a, 0x48b3c8a0, 0xa451adfe, 0xfff07134, 0x5f705221, 0x04d18eeb, 0xe833ebb5,
15167 +
            0xb392377f, 0x35363cbe, 0x6e97e074, 0x8275852a, 0xd9d459e0, 0x8bfc8f1f, 0xd05d53d5,
15168 +
            0x3cbf368b, 0x671eea41, 0xe1bae180, 0xba1b3d4a, 0x56f95814, 0x0d5884de, 0xf2a8f5ea,
15169 +
            0xa9092920, 0x45eb4c7e, 0x1e4a90b4, 0x98ee9b75, 0xc34f47bf, 0x2fad22e1, 0x740cfe2b,
15170 +
            0x262428d4, 0x7d85f41e, 0x91679140, 0xcac64d8a, 0x4c62464b, 0x17c39a81, 0xfb21ffdf,
15171 +
            0xa0802315, 0xbee0a442, 0xe5417888, 0x09a31dd6, 0x5202c11c, 0xd4a6cadd, 0x8f071617,
15172 +
            0x63e57349, 0x3844af83, 0x6a6c797c, 0x31cda5b6, 0xdd2fc0e8, 0x868e1c22, 0x002a17e3,
15173 +
            0x5b8bcb29, 0xb769ae77, 0xecc872bd, 0x13380389, 0x4899df43, 0xa47bba1d, 0xffda66d7,
15174 +
            0x797e6d16, 0x22dfb1dc, 0xce3dd482, 0x959c0848, 0xc7b4deb7, 0x9c15027d, 0x70f76723,
15175 +
            0x2b56bbe9, 0xadf2b028, 0xf6536ce2, 0x1ab109bc, 0x4110d576, 0xe190f663, 0xba312aa9,
15176 +
            0x56d34ff7, 0x0d72933d, 0x8bd698fc, 0xd0774436, 0x3c952168, 0x6734fda2, 0x351c2b5d,
15177 +
            0x6ebdf797, 0x825f92c9, 0xd9fe4e03, 0x5f5a45c2, 0x04fb9908, 0xe819fc56, 0xb3b8209c,
15178 +
            0x4c4851a8, 0x17e98d62, 0xfb0be83c, 0xa0aa34f6, 0x260e3f37, 0x7dafe3fd, 0x914d86a3,
15179 +
            0xcaec5a69, 0x98c48c96, 0xc365505c, 0x2f873502, 0x7426e9c8, 0xf282e209, 0xa9233ec3,
15180 +
            0x45c15b9d, 0x1e608757, 0x79005533, 0x22a189f9, 0xce43eca7, 0x95e2306d, 0x13463bac,
15181 +
            0x48e7e766, 0xa4058238, 0xffa45ef2, 0xad8c880d, 0xf62d54c7, 0x1acf3199, 0x416eed53,
15182 +
            0xc7cae692, 0x9c6b3a58, 0x70895f06, 0x2b2883cc, 0xd4d8f2f8, 0x8f792e32, 0x639b4b6c,
15183 +
            0x383a97a6, 0xbe9e9c67, 0xe53f40ad, 0x09dd25f3, 0x527cf939, 0x00542fc6, 0x5bf5f30c,
15184 +
            0xb7179652, 0xecb64a98, 0x6a124159, 0x31b39d93, 0xdd51f8cd, 0x86f02407, 0x26700712,
15185 +
            0x7dd1dbd8, 0x9133be86, 0xca92624c, 0x4c36698d, 0x1797b547, 0xfb75d019, 0xa0d40cd3,
15186 +
            0xf2fcda2c, 0xa95d06e6, 0x45bf63b8, 0x1e1ebf72, 0x98bab4b3, 0xc31b6879, 0x2ff90d27,
15187 +
            0x7458d1ed, 0x8ba8a0d9, 0xd0097c13, 0x3ceb194d, 0x674ac587, 0xe1eece46, 0xba4f128c,
15188 +
            0x56ad77d2, 0x0d0cab18, 0x5f247de7, 0x0485a12d, 0xe867c473, 0xb3c618b9, 0x35621378,
15189 +
            0x6ec3cfb2, 0x8221aaec, 0xd9807626, 0xc7e0f171, 0x9c412dbb, 0x70a348e5, 0x2b02942f,
15190 +
            0xada69fee, 0xf6074324, 0x1ae5267a, 0x4144fab0, 0x136c2c4f, 0x48cdf085, 0xa42f95db,
15191 +
            0xff8e4911, 0x792a42d0, 0x228b9e1a, 0xce69fb44, 0x95c8278e, 0x6a3856ba, 0x31998a70,
15192 +
            0xdd7bef2e, 0x86da33e4, 0x007e3825, 0x5bdfe4ef, 0xb73d81b1, 0xec9c5d7b, 0xbeb48b84,
15193 +
            0xe515574e, 0x09f73210, 0x5256eeda, 0xd4f2e51b, 0x8f5339d1, 0x63b15c8f, 0x38108045,
15194 +
            0x9890a350, 0xc3317f9a, 0x2fd31ac4, 0x7472c60e, 0xf2d6cdcf, 0xa9771105, 0x4595745b,
15195 +
            0x1e34a891, 0x4c1c7e6e, 0x17bda2a4, 0xfb5fc7fa, 0xa0fe1b30, 0x265a10f1, 0x7dfbcc3b,
15196 +
            0x9119a965, 0xcab875af, 0x3548049b, 0x6ee9d851, 0x820bbd0f, 0xd9aa61c5, 0x5f0e6a04,
15197 +
            0x04afb6ce, 0xe84dd390, 0xb3ec0f5a, 0xe1c4d9a5, 0xba65056f, 0x56876031, 0x0d26bcfb,
15198 +
            0x8b82b73a, 0xd0236bf0, 0x3cc10eae, 0x6760d264,
15199 +
        ],
15200 +
        [
15201 +
            0x00000000, 0xf200aa66, 0xe0c0497b, 0x12c0e31d, 0xc5418f41, 0x37412527, 0x2581c63a,
15202 +
            0xd7816c5c, 0x8e420335, 0x7c42a953, 0x6e824a4e, 0x9c82e028, 0x4b038c74, 0xb9032612,
15203 +
            0xabc3c50f, 0x59c36f69, 0x18451bdd, 0xea45b1bb, 0xf88552a6, 0x0a85f8c0, 0xdd04949c,
15204 +
            0x2f043efa, 0x3dc4dde7, 0xcfc47781, 0x960718e8, 0x6407b28e, 0x76c75193, 0x84c7fbf5,
15205 +
            0x534697a9, 0xa1463dcf, 0xb386ded2, 0x418674b4, 0x308a37ba, 0xc28a9ddc, 0xd04a7ec1,
15206 +
            0x224ad4a7, 0xf5cbb8fb, 0x07cb129d, 0x150bf180, 0xe70b5be6, 0xbec8348f, 0x4cc89ee9,
15207 +
            0x5e087df4, 0xac08d792, 0x7b89bbce, 0x898911a8, 0x9b49f2b5, 0x694958d3, 0x28cf2c67,
15208 +
            0xdacf8601, 0xc80f651c, 0x3a0fcf7a, 0xed8ea326, 0x1f8e0940, 0x0d4eea5d, 0xff4e403b,
15209 +
            0xa68d2f52, 0x548d8534, 0x464d6629, 0xb44dcc4f, 0x63cca013, 0x91cc0a75, 0x830ce968,
15210 +
            0x710c430e, 0x61146f74, 0x9314c512, 0x81d4260f, 0x73d48c69, 0xa455e035, 0x56554a53,
15211 +
            0x4495a94e, 0xb6950328, 0xef566c41, 0x1d56c627, 0x0f96253a, 0xfd968f5c, 0x2a17e300,
15212 +
            0xd8174966, 0xcad7aa7b, 0x38d7001d, 0x795174a9, 0x8b51decf, 0x99913dd2, 0x6b9197b4,
15213 +
            0xbc10fbe8, 0x4e10518e, 0x5cd0b293, 0xaed018f5, 0xf713779c, 0x0513ddfa, 0x17d33ee7,
15214 +
            0xe5d39481, 0x3252f8dd, 0xc05252bb, 0xd292b1a6, 0x20921bc0, 0x519e58ce, 0xa39ef2a8,
15215 +
            0xb15e11b5, 0x435ebbd3, 0x94dfd78f, 0x66df7de9, 0x741f9ef4, 0x861f3492, 0xdfdc5bfb,
15216 +
            0x2ddcf19d, 0x3f1c1280, 0xcd1cb8e6, 0x1a9dd4ba, 0xe89d7edc, 0xfa5d9dc1, 0x085d37a7,
15217 +
            0x49db4313, 0xbbdbe975, 0xa91b0a68, 0x5b1ba00e, 0x8c9acc52, 0x7e9a6634, 0x6c5a8529,
15218 +
            0x9e5a2f4f, 0xc7994026, 0x3599ea40, 0x2759095d, 0xd559a33b, 0x02d8cf67, 0xf0d86501,
15219 +
            0xe218861c, 0x10182c7a, 0xc228dee8, 0x3028748e, 0x22e89793, 0xd0e83df5, 0x076951a9,
15220 +
            0xf569fbcf, 0xe7a918d2, 0x15a9b2b4, 0x4c6adddd, 0xbe6a77bb, 0xacaa94a6, 0x5eaa3ec0,
15221 +
            0x892b529c, 0x7b2bf8fa, 0x69eb1be7, 0x9bebb181, 0xda6dc535, 0x286d6f53, 0x3aad8c4e,
15222 +
            0xc8ad2628, 0x1f2c4a74, 0xed2ce012, 0xffec030f, 0x0deca969, 0x542fc600, 0xa62f6c66,
15223 +
            0xb4ef8f7b, 0x46ef251d, 0x916e4941, 0x636ee327, 0x71ae003a, 0x83aeaa5c, 0xf2a2e952,
15224 +
            0x00a24334, 0x1262a029, 0xe0620a4f, 0x37e36613, 0xc5e3cc75, 0xd7232f68, 0x2523850e,
15225 +
            0x7ce0ea67, 0x8ee04001, 0x9c20a31c, 0x6e20097a, 0xb9a16526, 0x4ba1cf40, 0x59612c5d,
15226 +
            0xab61863b, 0xeae7f28f, 0x18e758e9, 0x0a27bbf4, 0xf8271192, 0x2fa67dce, 0xdda6d7a8,
15227 +
            0xcf6634b5, 0x3d669ed3, 0x64a5f1ba, 0x96a55bdc, 0x8465b8c1, 0x766512a7, 0xa1e47efb,
15228 +
            0x53e4d49d, 0x41243780, 0xb3249de6, 0xa33cb19c, 0x513c1bfa, 0x43fcf8e7, 0xb1fc5281,
15229 +
            0x667d3edd, 0x947d94bb, 0x86bd77a6, 0x74bdddc0, 0x2d7eb2a9, 0xdf7e18cf, 0xcdbefbd2,
15230 +
            0x3fbe51b4, 0xe83f3de8, 0x1a3f978e, 0x08ff7493, 0xfaffdef5, 0xbb79aa41, 0x49790027,
15231 +
            0x5bb9e33a, 0xa9b9495c, 0x7e382500, 0x8c388f66, 0x9ef86c7b, 0x6cf8c61d, 0x353ba974,
15232 +
            0xc73b0312, 0xd5fbe00f, 0x27fb4a69, 0xf07a2635, 0x027a8c53, 0x10ba6f4e, 0xe2bac528,
15233 +
            0x93b68626, 0x61b62c40, 0x7376cf5d, 0x8176653b, 0x56f70967, 0xa4f7a301, 0xb637401c,
15234 +
            0x4437ea7a, 0x1df48513, 0xeff42f75, 0xfd34cc68, 0x0f34660e, 0xd8b50a52, 0x2ab5a034,
15235 +
            0x38754329, 0xca75e94f, 0x8bf39dfb, 0x79f3379d, 0x6b33d480, 0x99337ee6, 0x4eb212ba,
15236 +
            0xbcb2b8dc, 0xae725bc1, 0x5c72f1a7, 0x05b19ece, 0xf7b134a8, 0xe571d7b5, 0x17717dd3,
15237 +
            0xc0f0118f, 0x32f0bbe9, 0x203058f4, 0xd230f292,
15238 +
        ],
15239 +
        [
15240 +
            0x00000000, 0x8090a067, 0x05e05d79, 0x8570fd1e, 0x0bc0baf2, 0x8b501a95, 0x0e20e78b,
15241 +
            0x8eb047ec, 0x178175e4, 0x9711d583, 0x1261289d, 0x92f188fa, 0x1c41cf16, 0x9cd16f71,
15242 +
            0x19a1926f, 0x99313208, 0x2f02ebc8, 0xaf924baf, 0x2ae2b6b1, 0xaa7216d6, 0x24c2513a,
15243 +
            0xa452f15d, 0x21220c43, 0xa1b2ac24, 0x38839e2c, 0xb8133e4b, 0x3d63c355, 0xbdf36332,
15244 +
            0x334324de, 0xb3d384b9, 0x36a379a7, 0xb633d9c0, 0x5e05d790, 0xde9577f7, 0x5be58ae9,
15245 +
            0xdb752a8e, 0x55c56d62, 0xd555cd05, 0x5025301b, 0xd0b5907c, 0x4984a274, 0xc9140213,
15246 +
            0x4c64ff0d, 0xccf45f6a, 0x42441886, 0xc2d4b8e1, 0x47a445ff, 0xc734e598, 0x71073c58,
15247 +
            0xf1979c3f, 0x74e76121, 0xf477c146, 0x7ac786aa, 0xfa5726cd, 0x7f27dbd3, 0xffb77bb4,
15248 +
            0x668649bc, 0xe616e9db, 0x636614c5, 0xe3f6b4a2, 0x6d46f34e, 0xedd65329, 0x68a6ae37,
15249 +
            0xe8360e50, 0xbc0baf20, 0x3c9b0f47, 0xb9ebf259, 0x397b523e, 0xb7cb15d2, 0x375bb5b5,
15250 +
            0xb22b48ab, 0x32bbe8cc, 0xab8adac4, 0x2b1a7aa3, 0xae6a87bd, 0x2efa27da, 0xa04a6036,
15251 +
            0x20dac051, 0xa5aa3d4f, 0x253a9d28, 0x930944e8, 0x1399e48f, 0x96e91991, 0x1679b9f6,
15252 +
            0x98c9fe1a, 0x18595e7d, 0x9d29a363, 0x1db90304, 0x8488310c, 0x0418916b, 0x81686c75,
15253 +
            0x01f8cc12, 0x8f488bfe, 0x0fd82b99, 0x8aa8d687, 0x0a3876e0, 0xe20e78b0, 0x629ed8d7,
15254 +
            0xe7ee25c9, 0x677e85ae, 0xe9cec242, 0x695e6225, 0xec2e9f3b, 0x6cbe3f5c, 0xf58f0d54,
15255 +
            0x751fad33, 0xf06f502d, 0x70fff04a, 0xfe4fb7a6, 0x7edf17c1, 0xfbafeadf, 0x7b3f4ab8,
15256 +
            0xcd0c9378, 0x4d9c331f, 0xc8ecce01, 0x487c6e66, 0xc6cc298a, 0x465c89ed, 0xc32c74f3,
15257 +
            0x43bcd494, 0xda8de69c, 0x5a1d46fb, 0xdf6dbbe5, 0x5ffd1b82, 0xd14d5c6e, 0x51ddfc09,
15258 +
            0xd4ad0117, 0x543da170, 0x7cd643f7, 0xfc46e390, 0x79361e8e, 0xf9a6bee9, 0x7716f905,
15259 +
            0xf7865962, 0x72f6a47c, 0xf266041b, 0x6b573613, 0xebc79674, 0x6eb76b6a, 0xee27cb0d,
15260 +
            0x60978ce1, 0xe0072c86, 0x6577d198, 0xe5e771ff, 0x53d4a83f, 0xd3440858, 0x5634f546,
15261 +
            0xd6a45521, 0x581412cd, 0xd884b2aa, 0x5df44fb4, 0xdd64efd3, 0x4455dddb, 0xc4c57dbc,
15262 +
            0x41b580a2, 0xc12520c5, 0x4f956729, 0xcf05c74e, 0x4a753a50, 0xcae59a37, 0x22d39467,
15263 +
            0xa2433400, 0x2733c91e, 0xa7a36979, 0x29132e95, 0xa9838ef2, 0x2cf373ec, 0xac63d38b,
15264 +
            0x3552e183, 0xb5c241e4, 0x30b2bcfa, 0xb0221c9d, 0x3e925b71, 0xbe02fb16, 0x3b720608,
15265 +
            0xbbe2a66f, 0x0dd17faf, 0x8d41dfc8, 0x083122d6, 0x88a182b1, 0x0611c55d, 0x8681653a,
15266 +
            0x03f19824, 0x83613843, 0x1a500a4b, 0x9ac0aa2c, 0x1fb05732, 0x9f20f755, 0x1190b0b9,
15267 +
            0x910010de, 0x1470edc0, 0x94e04da7, 0xc0ddecd7, 0x404d4cb0, 0xc53db1ae, 0x45ad11c9,
15268 +
            0xcb1d5625, 0x4b8df642, 0xcefd0b5c, 0x4e6dab3b, 0xd75c9933, 0x57cc3954, 0xd2bcc44a,
15269 +
            0x522c642d, 0xdc9c23c1, 0x5c0c83a6, 0xd97c7eb8, 0x59ecdedf, 0xefdf071f, 0x6f4fa778,
15270 +
            0xea3f5a66, 0x6aaffa01, 0xe41fbded, 0x648f1d8a, 0xe1ffe094, 0x616f40f3, 0xf85e72fb,
15271 +
            0x78ced29c, 0xfdbe2f82, 0x7d2e8fe5, 0xf39ec809, 0x730e686e, 0xf67e9570, 0x76ee3517,
15272 +
            0x9ed83b47, 0x1e489b20, 0x9b38663e, 0x1ba8c659, 0x951881b5, 0x158821d2, 0x90f8dccc,
15273 +
            0x10687cab, 0x89594ea3, 0x09c9eec4, 0x8cb913da, 0x0c29b3bd, 0x8299f451, 0x02095436,
15274 +
            0x8779a928, 0x07e9094f, 0xb1dad08f, 0x314a70e8, 0xb43a8df6, 0x34aa2d91, 0xba1a6a7d,
15275 +
            0x3a8aca1a, 0xbffa3704, 0x3f6a9763, 0xa65ba56b, 0x26cb050c, 0xa3bbf812, 0x232b5875,
15276 +
            0xad9b1f99, 0x2d0bbffe, 0xa87b42e0, 0x28ebe287,
15277 +
        ],
15278 +
        [
15279 +
            0x00000000, 0xf9ac87ee, 0xf798126b, 0x0e349585, 0xebf13961, 0x125dbe8f, 0x1c692b0a,
15280 +
            0xe5c5ace4, 0xd3236f75, 0x2a8fe89b, 0x24bb7d1e, 0xdd17faf0, 0x38d25614, 0xc17ed1fa,
15281 +
            0xcf4a447f, 0x36e6c391, 0xa287c35d, 0x5b2b44b3, 0x551fd136, 0xacb356d8, 0x4976fa3c,
15282 +
            0xb0da7dd2, 0xbeeee857, 0x47426fb9, 0x71a4ac28, 0x88082bc6, 0x863cbe43, 0x7f9039ad,
15283 +
            0x9a559549, 0x63f912a7, 0x6dcd8722, 0x946100cc, 0x41ce9b0d, 0xb8621ce3, 0xb6568966,
15284 +
            0x4ffa0e88, 0xaa3fa26c, 0x53932582, 0x5da7b007, 0xa40b37e9, 0x92edf478, 0x6b417396,
15285 +
            0x6575e613, 0x9cd961fd, 0x791ccd19, 0x80b04af7, 0x8e84df72, 0x7728589c, 0xe3495850,
15286 +
            0x1ae5dfbe, 0x14d14a3b, 0xed7dcdd5, 0x08b86131, 0xf114e6df, 0xff20735a, 0x068cf4b4,
15287 +
            0x306a3725, 0xc9c6b0cb, 0xc7f2254e, 0x3e5ea2a0, 0xdb9b0e44, 0x223789aa, 0x2c031c2f,
15288 +
            0xd5af9bc1, 0x839d361a, 0x7a31b1f4, 0x74052471, 0x8da9a39f, 0x686c0f7b, 0x91c08895,
15289 +
            0x9ff41d10, 0x66589afe, 0x50be596f, 0xa912de81, 0xa7264b04, 0x5e8accea, 0xbb4f600e,
15290 +
            0x42e3e7e0, 0x4cd77265, 0xb57bf58b, 0x211af547, 0xd8b672a9, 0xd682e72c, 0x2f2e60c2,
15291 +
            0xcaebcc26, 0x33474bc8, 0x3d73de4d, 0xc4df59a3, 0xf2399a32, 0x0b951ddc, 0x05a18859,
15292 +
            0xfc0d0fb7, 0x19c8a353, 0xe06424bd, 0xee50b138, 0x17fc36d6, 0xc253ad17, 0x3bff2af9,
15293 +
            0x35cbbf7c, 0xcc673892, 0x29a29476, 0xd00e1398, 0xde3a861d, 0x279601f3, 0x1170c262,
15294 +
            0xe8dc458c, 0xe6e8d009, 0x1f4457e7, 0xfa81fb03, 0x032d7ced, 0x0d19e968, 0xf4b56e86,
15295 +
            0x60d46e4a, 0x9978e9a4, 0x974c7c21, 0x6ee0fbcf, 0x8b25572b, 0x7289d0c5, 0x7cbd4540,
15296 +
            0x8511c2ae, 0xb3f7013f, 0x4a5b86d1, 0x446f1354, 0xbdc394ba, 0x5806385e, 0xa1aabfb0,
15297 +
            0xaf9e2a35, 0x5632addb, 0x03fb7183, 0xfa57f66d, 0xf46363e8, 0x0dcfe406, 0xe80a48e2,
15298 +
            0x11a6cf0c, 0x1f925a89, 0xe63edd67, 0xd0d81ef6, 0x29749918, 0x27400c9d, 0xdeec8b73,
15299 +
            0x3b292797, 0xc285a079, 0xccb135fc, 0x351db212, 0xa17cb2de, 0x58d03530, 0x56e4a0b5,
15300 +
            0xaf48275b, 0x4a8d8bbf, 0xb3210c51, 0xbd1599d4, 0x44b91e3a, 0x725fddab, 0x8bf35a45,
15301 +
            0x85c7cfc0, 0x7c6b482e, 0x99aee4ca, 0x60026324, 0x6e36f6a1, 0x979a714f, 0x4235ea8e,
15302 +
            0xbb996d60, 0xb5adf8e5, 0x4c017f0b, 0xa9c4d3ef, 0x50685401, 0x5e5cc184, 0xa7f0466a,
15303 +
            0x911685fb, 0x68ba0215, 0x668e9790, 0x9f22107e, 0x7ae7bc9a, 0x834b3b74, 0x8d7faef1,
15304 +
            0x74d3291f, 0xe0b229d3, 0x191eae3d, 0x172a3bb8, 0xee86bc56, 0x0b4310b2, 0xf2ef975c,
15305 +
            0xfcdb02d9, 0x05778537, 0x339146a6, 0xca3dc148, 0xc40954cd, 0x3da5d323, 0xd8607fc7,
15306 +
            0x21ccf829, 0x2ff86dac, 0xd654ea42, 0x80664799, 0x79cac077, 0x77fe55f2, 0x8e52d21c,
15307 +
            0x6b977ef8, 0x923bf916, 0x9c0f6c93, 0x65a3eb7d, 0x534528ec, 0xaae9af02, 0xa4dd3a87,
15308 +
            0x5d71bd69, 0xb8b4118d, 0x41189663, 0x4f2c03e6, 0xb6808408, 0x22e184c4, 0xdb4d032a,
15309 +
            0xd57996af, 0x2cd51141, 0xc910bda5, 0x30bc3a4b, 0x3e88afce, 0xc7242820, 0xf1c2ebb1,
15310 +
            0x086e6c5f, 0x065af9da, 0xfff67e34, 0x1a33d2d0, 0xe39f553e, 0xedabc0bb, 0x14074755,
15311 +
            0xc1a8dc94, 0x38045b7a, 0x3630ceff, 0xcf9c4911, 0x2a59e5f5, 0xd3f5621b, 0xddc1f79e,
15312 +
            0x246d7070, 0x128bb3e1, 0xeb27340f, 0xe513a18a, 0x1cbf2664, 0xf97a8a80, 0x00d60d6e,
15313 +
            0x0ee298eb, 0xf74e1f05, 0x632f1fc9, 0x9a839827, 0x94b70da2, 0x6d1b8a4c, 0x88de26a8,
15314 +
            0x7172a146, 0x7f4634c3, 0x86eab32d, 0xb00c70bc, 0x49a0f752, 0x479462d7, 0xbe38e539,
15315 +
            0x5bfd49dd, 0xa251ce33, 0xac655bb6, 0x55c9dc58,
15316 +
        ],
15317 +
        [
15318 +
            0x00000000, 0x07f6e306, 0x0fedc60c, 0x081b250a, 0x1fdb8c18, 0x182d6f1e, 0x10364a14,
15319 +
            0x17c0a912, 0x3fb71830, 0x3841fb36, 0x305ade3c, 0x37ac3d3a, 0x206c9428, 0x279a772e,
15320 +
            0x2f815224, 0x2877b122, 0x7f6e3060, 0x7898d366, 0x7083f66c, 0x7775156a, 0x60b5bc78,
15321 +
            0x67435f7e, 0x6f587a74, 0x68ae9972, 0x40d92850, 0x472fcb56, 0x4f34ee5c, 0x48c20d5a,
15322 +
            0x5f02a448, 0x58f4474e, 0x50ef6244, 0x57198142, 0xfedc60c0, 0xf92a83c6, 0xf131a6cc,
15323 +
            0xf6c745ca, 0xe107ecd8, 0xe6f10fde, 0xeeea2ad4, 0xe91cc9d2, 0xc16b78f0, 0xc69d9bf6,
15324 +
            0xce86befc, 0xc9705dfa, 0xdeb0f4e8, 0xd94617ee, 0xd15d32e4, 0xd6abd1e2, 0x81b250a0,
15325 +
            0x8644b3a6, 0x8e5f96ac, 0x89a975aa, 0x9e69dcb8, 0x999f3fbe, 0x91841ab4, 0x9672f9b2,
15326 +
            0xbe054890, 0xb9f3ab96, 0xb1e88e9c, 0xb61e6d9a, 0xa1dec488, 0xa628278e, 0xae330284,
15327 +
            0xa9c5e182, 0xf979dc37, 0xfe8f3f31, 0xf6941a3b, 0xf162f93d, 0xe6a2502f, 0xe154b329,
15328 +
            0xe94f9623, 0xeeb97525, 0xc6cec407, 0xc1382701, 0xc923020b, 0xced5e10d, 0xd915481f,
15329 +
            0xdee3ab19, 0xd6f88e13, 0xd10e6d15, 0x8617ec57, 0x81e10f51, 0x89fa2a5b, 0x8e0cc95d,
15330 +
            0x99cc604f, 0x9e3a8349, 0x9621a643, 0x91d74545, 0xb9a0f467, 0xbe561761, 0xb64d326b,
15331 +
            0xb1bbd16d, 0xa67b787f, 0xa18d9b79, 0xa996be73, 0xae605d75, 0x07a5bcf7, 0x00535ff1,
15332 +
            0x08487afb, 0x0fbe99fd, 0x187e30ef, 0x1f88d3e9, 0x1793f6e3, 0x106515e5, 0x3812a4c7,
15333 +
            0x3fe447c1, 0x37ff62cb, 0x300981cd, 0x27c928df, 0x203fcbd9, 0x2824eed3, 0x2fd20dd5,
15334 +
            0x78cb8c97, 0x7f3d6f91, 0x77264a9b, 0x70d0a99d, 0x6710008f, 0x60e6e389, 0x68fdc683,
15335 +
            0x6f0b2585, 0x477c94a7, 0x408a77a1, 0x489152ab, 0x4f67b1ad, 0x58a718bf, 0x5f51fbb9,
15336 +
            0x574adeb3, 0x50bc3db5, 0xf632a5d9, 0xf1c446df, 0xf9df63d5, 0xfe2980d3, 0xe9e929c1,
15337 +
            0xee1fcac7, 0xe604efcd, 0xe1f20ccb, 0xc985bde9, 0xce735eef, 0xc6687be5, 0xc19e98e3,
15338 +
            0xd65e31f1, 0xd1a8d2f7, 0xd9b3f7fd, 0xde4514fb, 0x895c95b9, 0x8eaa76bf, 0x86b153b5,
15339 +
            0x8147b0b3, 0x968719a1, 0x9171faa7, 0x996adfad, 0x9e9c3cab, 0xb6eb8d89, 0xb11d6e8f,
15340 +
            0xb9064b85, 0xbef0a883, 0xa9300191, 0xaec6e297, 0xa6ddc79d, 0xa12b249b, 0x08eec519,
15341 +
            0x0f18261f, 0x07030315, 0x00f5e013, 0x17354901, 0x10c3aa07, 0x18d88f0d, 0x1f2e6c0b,
15342 +
            0x3759dd29, 0x30af3e2f, 0x38b41b25, 0x3f42f823, 0x28825131, 0x2f74b237, 0x276f973d,
15343 +
            0x2099743b, 0x7780f579, 0x7076167f, 0x786d3375, 0x7f9bd073, 0x685b7961, 0x6fad9a67,
15344 +
            0x67b6bf6d, 0x60405c6b, 0x4837ed49, 0x4fc10e4f, 0x47da2b45, 0x402cc843, 0x57ec6151,
15345 +
            0x501a8257, 0x5801a75d, 0x5ff7445b, 0x0f4b79ee, 0x08bd9ae8, 0x00a6bfe2, 0x07505ce4,
15346 +
            0x1090f5f6, 0x176616f0, 0x1f7d33fa, 0x188bd0fc, 0x30fc61de, 0x370a82d8, 0x3f11a7d2,
15347 +
            0x38e744d4, 0x2f27edc6, 0x28d10ec0, 0x20ca2bca, 0x273cc8cc, 0x7025498e, 0x77d3aa88,
15348 +
            0x7fc88f82, 0x783e6c84, 0x6ffec596, 0x68082690, 0x6013039a, 0x67e5e09c, 0x4f9251be,
15349 +
            0x4864b2b8, 0x407f97b2, 0x478974b4, 0x5049dda6, 0x57bf3ea0, 0x5fa41baa, 0x5852f8ac,
15350 +
            0xf197192e, 0xf661fa28, 0xfe7adf22, 0xf98c3c24, 0xee4c9536, 0xe9ba7630, 0xe1a1533a,
15351 +
            0xe657b03c, 0xce20011e, 0xc9d6e218, 0xc1cdc712, 0xc63b2414, 0xd1fb8d06, 0xd60d6e00,
15352 +
            0xde164b0a, 0xd9e0a80c, 0x8ef9294e, 0x890fca48, 0x8114ef42, 0x86e20c44, 0x9122a556,
15353 +
            0x96d44650, 0x9ecf635a, 0x9939805c, 0xb14e317e, 0xb6b8d278, 0xbea3f772, 0xb9551474,
15354 +
            0xae95bd66, 0xa9635e60, 0xa1787b6a, 0xa68e986c,
15355 +
        ],
15356 +
        [
15357 +
            0x00000000, 0xe8a45605, 0xd589b1bd, 0x3d2de7b8, 0xafd27ecd, 0x477628c8, 0x7a5bcf70,
15358 +
            0x92ff9975, 0x5b65e02d, 0xb3c1b628, 0x8eec5190, 0x66480795, 0xf4b79ee0, 0x1c13c8e5,
15359 +
            0x213e2f5d, 0xc99a7958, 0xb6cbc05a, 0x5e6f965f, 0x634271e7, 0x8be627e2, 0x1919be97,
15360 +
            0xf1bde892, 0xcc900f2a, 0x2434592f, 0xedae2077, 0x050a7672, 0x382791ca, 0xd083c7cf,
15361 +
            0x427c5eba, 0xaad808bf, 0x97f5ef07, 0x7f51b902, 0x69569d03, 0x81f2cb06, 0xbcdf2cbe,
15362 +
            0x547b7abb, 0xc684e3ce, 0x2e20b5cb, 0x130d5273, 0xfba90476, 0x32337d2e, 0xda972b2b,
15363 +
            0xe7bacc93, 0x0f1e9a96, 0x9de103e3, 0x754555e6, 0x4868b25e, 0xa0cce45b, 0xdf9d5d59,
15364 +
            0x37390b5c, 0x0a14ece4, 0xe2b0bae1, 0x704f2394, 0x98eb7591, 0xa5c69229, 0x4d62c42c,
15365 +
            0x84f8bd74, 0x6c5ceb71, 0x51710cc9, 0xb9d55acc, 0x2b2ac3b9, 0xc38e95bc, 0xfea37204,
15366 +
            0x16072401, 0xd2ad3a06, 0x3a096c03, 0x07248bbb, 0xef80ddbe, 0x7d7f44cb, 0x95db12ce,
15367 +
            0xa8f6f576, 0x4052a373, 0x89c8da2b, 0x616c8c2e, 0x5c416b96, 0xb4e53d93, 0x261aa4e6,
15368 +
            0xcebef2e3, 0xf393155b, 0x1b37435e, 0x6466fa5c, 0x8cc2ac59, 0xb1ef4be1, 0x594b1de4,
15369 +
            0xcbb48491, 0x2310d294, 0x1e3d352c, 0xf6996329, 0x3f031a71, 0xd7a74c74, 0xea8aabcc,
15370 +
            0x022efdc9, 0x90d164bc, 0x787532b9, 0x4558d501, 0xadfc8304, 0xbbfba705, 0x535ff100,
15371 +
            0x6e7216b8, 0x86d640bd, 0x1429d9c8, 0xfc8d8fcd, 0xc1a06875, 0x29043e70, 0xe09e4728,
15372 +
            0x083a112d, 0x3517f695, 0xddb3a090, 0x4f4c39e5, 0xa7e86fe0, 0x9ac58858, 0x7261de5d,
15373 +
            0x0d30675f, 0xe594315a, 0xd8b9d6e2, 0x301d80e7, 0xa2e21992, 0x4a464f97, 0x776ba82f,
15374 +
            0x9fcffe2a, 0x56558772, 0xbef1d177, 0x83dc36cf, 0x6b7860ca, 0xf987f9bf, 0x1123afba,
15375 +
            0x2c0e4802, 0xc4aa1e07, 0xa19b69bb, 0x493f3fbe, 0x7412d806, 0x9cb68e03, 0x0e491776,
15376 +
            0xe6ed4173, 0xdbc0a6cb, 0x3364f0ce, 0xfafe8996, 0x125adf93, 0x2f77382b, 0xc7d36e2e,
15377 +
            0x552cf75b, 0xbd88a15e, 0x80a546e6, 0x680110e3, 0x1750a9e1, 0xfff4ffe4, 0xc2d9185c,
15378 +
            0x2a7d4e59, 0xb882d72c, 0x50268129, 0x6d0b6691, 0x85af3094, 0x4c3549cc, 0xa4911fc9,
15379 +
            0x99bcf871, 0x7118ae74, 0xe3e73701, 0x0b436104, 0x366e86bc, 0xdecad0b9, 0xc8cdf4b8,
15380 +
            0x2069a2bd, 0x1d444505, 0xf5e01300, 0x671f8a75, 0x8fbbdc70, 0xb2963bc8, 0x5a326dcd,
15381 +
            0x93a81495, 0x7b0c4290, 0x4621a528, 0xae85f32d, 0x3c7a6a58, 0xd4de3c5d, 0xe9f3dbe5,
15382 +
            0x01578de0, 0x7e0634e2, 0x96a262e7, 0xab8f855f, 0x432bd35a, 0xd1d44a2f, 0x39701c2a,
15383 +
            0x045dfb92, 0xecf9ad97, 0x2563d4cf, 0xcdc782ca, 0xf0ea6572, 0x184e3377, 0x8ab1aa02,
15384 +
            0x6215fc07, 0x5f381bbf, 0xb79c4dba, 0x733653bd, 0x9b9205b8, 0xa6bfe200, 0x4e1bb405,
15385 +
            0xdce42d70, 0x34407b75, 0x096d9ccd, 0xe1c9cac8, 0x2853b390, 0xc0f7e595, 0xfdda022d,
15386 +
            0x157e5428, 0x8781cd5d, 0x6f259b58, 0x52087ce0, 0xbaac2ae5, 0xc5fd93e7, 0x2d59c5e2,
15387 +
            0x1074225a, 0xf8d0745f, 0x6a2fed2a, 0x828bbb2f, 0xbfa65c97, 0x57020a92, 0x9e9873ca,
15388 +
            0x763c25cf, 0x4b11c277, 0xa3b59472, 0x314a0d07, 0xd9ee5b02, 0xe4c3bcba, 0x0c67eabf,
15389 +
            0x1a60cebe, 0xf2c498bb, 0xcfe97f03, 0x274d2906, 0xb5b2b073, 0x5d16e676, 0x603b01ce,
15390 +
            0x889f57cb, 0x41052e93, 0xa9a17896, 0x948c9f2e, 0x7c28c92b, 0xeed7505e, 0x0673065b,
15391 +
            0x3b5ee1e3, 0xd3fab7e6, 0xacab0ee4, 0x440f58e1, 0x7922bf59, 0x9186e95c, 0x03797029,
15392 +
            0xebdd262c, 0xd6f0c194, 0x3e549791, 0xf7ceeec9, 0x1f6ab8cc, 0x22475f74, 0xcae30971,
15393 +
            0x581c9004, 0xb0b8c601, 0x8d9521b9, 0x653177bc,
15394 +
        ],
15395 +
        [
15396 +
            0x00000000, 0x47f7cec1, 0x8fef9d82, 0xc8185343, 0x1b1e26b3, 0x5ce9e872, 0x94f1bb31,
15397 +
            0xd30675f0, 0x363c4d66, 0x71cb83a7, 0xb9d3d0e4, 0xfe241e25, 0x2d226bd5, 0x6ad5a514,
15398 +
            0xa2cdf657, 0xe53a3896, 0x6c789acc, 0x2b8f540d, 0xe397074e, 0xa460c98f, 0x7766bc7f,
15399 +
            0x309172be, 0xf88921fd, 0xbf7eef3c, 0x5a44d7aa, 0x1db3196b, 0xd5ab4a28, 0x925c84e9,
15400 +
            0x415af119, 0x06ad3fd8, 0xceb56c9b, 0x8942a25a, 0xd8f13598, 0x9f06fb59, 0x571ea81a,
15401 +
            0x10e966db, 0xc3ef132b, 0x8418ddea, 0x4c008ea9, 0x0bf74068, 0xeecd78fe, 0xa93ab63f,
15402 +
            0x6122e57c, 0x26d52bbd, 0xf5d35e4d, 0xb224908c, 0x7a3cc3cf, 0x3dcb0d0e, 0xb489af54,
15403 +
            0xf37e6195, 0x3b6632d6, 0x7c91fc17, 0xaf9789e7, 0xe8604726, 0x20781465, 0x678fdaa4,
15404 +
            0x82b5e232, 0xc5422cf3, 0x0d5a7fb0, 0x4aadb171, 0x99abc481, 0xde5c0a40, 0x16445903,
15405 +
            0x51b397c2, 0xb5237687, 0xf2d4b846, 0x3acceb05, 0x7d3b25c4, 0xae3d5034, 0xe9ca9ef5,
15406 +
            0x21d2cdb6, 0x66250377, 0x831f3be1, 0xc4e8f520, 0x0cf0a663, 0x4b0768a2, 0x98011d52,
15407 +
            0xdff6d393, 0x17ee80d0, 0x50194e11, 0xd95bec4b, 0x9eac228a, 0x56b471c9, 0x1143bf08,
15408 +
            0xc245caf8, 0x85b20439, 0x4daa577a, 0x0a5d99bb, 0xef67a12d, 0xa8906fec, 0x60883caf,
15409 +
            0x277ff26e, 0xf479879e, 0xb38e495f, 0x7b961a1c, 0x3c61d4dd, 0x6dd2431f, 0x2a258dde,
15410 +
            0xe23dde9d, 0xa5ca105c, 0x76cc65ac, 0x313bab6d, 0xf923f82e, 0xbed436ef, 0x5bee0e79,
15411 +
            0x1c19c0b8, 0xd40193fb, 0x93f65d3a, 0x40f028ca, 0x0707e60b, 0xcf1fb548, 0x88e87b89,
15412 +
            0x01aad9d3, 0x465d1712, 0x8e454451, 0xc9b28a90, 0x1ab4ff60, 0x5d4331a1, 0x955b62e2,
15413 +
            0xd2acac23, 0x379694b5, 0x70615a74, 0xb8790937, 0xff8ec7f6, 0x2c88b206, 0x6b7f7cc7,
15414 +
            0xa3672f84, 0xe490e145, 0x6e87f0b9, 0x29703e78, 0xe1686d3b, 0xa69fa3fa, 0x7599d60a,
15415 +
            0x326e18cb, 0xfa764b88, 0xbd818549, 0x58bbbddf, 0x1f4c731e, 0xd754205d, 0x90a3ee9c,
15416 +
            0x43a59b6c, 0x045255ad, 0xcc4a06ee, 0x8bbdc82f, 0x02ff6a75, 0x4508a4b4, 0x8d10f7f7,
15417 +
            0xcae73936, 0x19e14cc6, 0x5e168207, 0x960ed144, 0xd1f91f85, 0x34c32713, 0x7334e9d2,
15418 +
            0xbb2cba91, 0xfcdb7450, 0x2fdd01a0, 0x682acf61, 0xa0329c22, 0xe7c552e3, 0xb676c521,
15419 +
            0xf1810be0, 0x399958a3, 0x7e6e9662, 0xad68e392, 0xea9f2d53, 0x22877e10, 0x6570b0d1,
15420 +
            0x804a8847, 0xc7bd4686, 0x0fa515c5, 0x4852db04, 0x9b54aef4, 0xdca36035, 0x14bb3376,
15421 +
            0x534cfdb7, 0xda0e5fed, 0x9df9912c, 0x55e1c26f, 0x12160cae, 0xc110795e, 0x86e7b79f,
15422 +
            0x4effe4dc, 0x09082a1d, 0xec32128b, 0xabc5dc4a, 0x63dd8f09, 0x242a41c8, 0xf72c3438,
15423 +
            0xb0dbfaf9, 0x78c3a9ba, 0x3f34677b, 0xdba4863e, 0x9c5348ff, 0x544b1bbc, 0x13bcd57d,
15424 +
            0xc0baa08d, 0x874d6e4c, 0x4f553d0f, 0x08a2f3ce, 0xed98cb58, 0xaa6f0599, 0x627756da,
15425 +
            0x2580981b, 0xf686edeb, 0xb171232a, 0x79697069, 0x3e9ebea8, 0xb7dc1cf2, 0xf02bd233,
15426 +
            0x38338170, 0x7fc44fb1, 0xacc23a41, 0xeb35f480, 0x232da7c3, 0x64da6902, 0x81e05194,
15427 +
            0xc6179f55, 0x0e0fcc16, 0x49f802d7, 0x9afe7727, 0xdd09b9e6, 0x1511eaa5, 0x52e62464,
15428 +
            0x0355b3a6, 0x44a27d67, 0x8cba2e24, 0xcb4de0e5, 0x184b9515, 0x5fbc5bd4, 0x97a40897,
15429 +
            0xd053c656, 0x3569fec0, 0x729e3001, 0xba866342, 0xfd71ad83, 0x2e77d873, 0x698016b2,
15430 +
            0xa19845f1, 0xe66f8b30, 0x6f2d296a, 0x28dae7ab, 0xe0c2b4e8, 0xa7357a29, 0x74330fd9,
15431 +
            0x33c4c118, 0xfbdc925b, 0xbc2b5c9a, 0x5911640c, 0x1ee6aacd, 0xd6fef98e, 0x9109374f,
15432 +
            0x420f42bf, 0x05f88c7e, 0xcde0df3d, 0x8a1711fc,
15433 +
        ],
15434 +
        [
15435 +
            0x00000000, 0xdd0fe172, 0xbededf53, 0x63d13e21, 0x797ca311, 0xa4734263, 0xc7a27c42,
15436 +
            0x1aad9d30, 0xf2f94622, 0x2ff6a750, 0x4c279971, 0x91287803, 0x8b85e533, 0x568a0441,
15437 +
            0x355b3a60, 0xe854db12, 0xe13391f3, 0x3c3c7081, 0x5fed4ea0, 0x82e2afd2, 0x984f32e2,
15438 +
            0x4540d390, 0x2691edb1, 0xfb9e0cc3, 0x13cad7d1, 0xcec536a3, 0xad140882, 0x701be9f0,
15439 +
            0x6ab674c0, 0xb7b995b2, 0xd468ab93, 0x09674ae1, 0xc6a63e51, 0x1ba9df23, 0x7878e102,
15440 +
            0xa5770070, 0xbfda9d40, 0x62d57c32, 0x01044213, 0xdc0ba361, 0x345f7873, 0xe9509901,
15441 +
            0x8a81a720, 0x578e4652, 0x4d23db62, 0x902c3a10, 0xf3fd0431, 0x2ef2e543, 0x2795afa2,
15442 +
            0xfa9a4ed0, 0x994b70f1, 0x44449183, 0x5ee90cb3, 0x83e6edc1, 0xe037d3e0, 0x3d383292,
15443 +
            0xd56ce980, 0x086308f2, 0x6bb236d3, 0xb6bdd7a1, 0xac104a91, 0x711fabe3, 0x12ce95c2,
15444 +
            0xcfc174b0, 0x898d6115, 0x54828067, 0x3753be46, 0xea5c5f34, 0xf0f1c204, 0x2dfe2376,
15445 +
            0x4e2f1d57, 0x9320fc25, 0x7b742737, 0xa67bc645, 0xc5aaf864, 0x18a51916, 0x02088426,
15446 +
            0xdf076554, 0xbcd65b75, 0x61d9ba07, 0x68bef0e6, 0xb5b11194, 0xd6602fb5, 0x0b6fcec7,
15447 +
            0x11c253f7, 0xcccdb285, 0xaf1c8ca4, 0x72136dd6, 0x9a47b6c4, 0x474857b6, 0x24996997,
15448 +
            0xf99688e5, 0xe33b15d5, 0x3e34f4a7, 0x5de5ca86, 0x80ea2bf4, 0x4f2b5f44, 0x9224be36,
15449 +
            0xf1f58017, 0x2cfa6165, 0x3657fc55, 0xeb581d27, 0x88892306, 0x5586c274, 0xbdd21966,
15450 +
            0x60ddf814, 0x030cc635, 0xde032747, 0xc4aeba77, 0x19a15b05, 0x7a706524, 0xa77f8456,
15451 +
            0xae18ceb7, 0x73172fc5, 0x10c611e4, 0xcdc9f096, 0xd7646da6, 0x0a6b8cd4, 0x69bab2f5,
15452 +
            0xb4b55387, 0x5ce18895, 0x81ee69e7, 0xe23f57c6, 0x3f30b6b4, 0x259d2b84, 0xf892caf6,
15453 +
            0x9b43f4d7, 0x464c15a5, 0x17dbdf9d, 0xcad43eef, 0xa90500ce, 0x740ae1bc, 0x6ea77c8c,
15454 +
            0xb3a89dfe, 0xd079a3df, 0x0d7642ad, 0xe52299bf, 0x382d78cd, 0x5bfc46ec, 0x86f3a79e,
15455 +
            0x9c5e3aae, 0x4151dbdc, 0x2280e5fd, 0xff8f048f, 0xf6e84e6e, 0x2be7af1c, 0x4836913d,
15456 +
            0x9539704f, 0x8f94ed7f, 0x529b0c0d, 0x314a322c, 0xec45d35e, 0x0411084c, 0xd91ee93e,
15457 +
            0xbacfd71f, 0x67c0366d, 0x7d6dab5d, 0xa0624a2f, 0xc3b3740e, 0x1ebc957c, 0xd17de1cc,
15458 +
            0x0c7200be, 0x6fa33e9f, 0xb2acdfed, 0xa80142dd, 0x750ea3af, 0x16df9d8e, 0xcbd07cfc,
15459 +
            0x2384a7ee, 0xfe8b469c, 0x9d5a78bd, 0x405599cf, 0x5af804ff, 0x87f7e58d, 0xe426dbac,
15460 +
            0x39293ade, 0x304e703f, 0xed41914d, 0x8e90af6c, 0x539f4e1e, 0x4932d32e, 0x943d325c,
15461 +
            0xf7ec0c7d, 0x2ae3ed0f, 0xc2b7361d, 0x1fb8d76f, 0x7c69e94e, 0xa166083c, 0xbbcb950c,
15462 +
            0x66c4747e, 0x05154a5f, 0xd81aab2d, 0x9e56be88, 0x43595ffa, 0x208861db, 0xfd8780a9,
15463 +
            0xe72a1d99, 0x3a25fceb, 0x59f4c2ca, 0x84fb23b8, 0x6caff8aa, 0xb1a019d8, 0xd27127f9,
15464 +
            0x0f7ec68b, 0x15d35bbb, 0xc8dcbac9, 0xab0d84e8, 0x7602659a, 0x7f652f7b, 0xa26ace09,
15465 +
            0xc1bbf028, 0x1cb4115a, 0x06198c6a, 0xdb166d18, 0xb8c75339, 0x65c8b24b, 0x8d9c6959,
15466 +
            0x5093882b, 0x3342b60a, 0xee4d5778, 0xf4e0ca48, 0x29ef2b3a, 0x4a3e151b, 0x9731f469,
15467 +
            0x58f080d9, 0x85ff61ab, 0xe62e5f8a, 0x3b21bef8, 0x218c23c8, 0xfc83c2ba, 0x9f52fc9b,
15468 +
            0x425d1de9, 0xaa09c6fb, 0x77062789, 0x14d719a8, 0xc9d8f8da, 0xd37565ea, 0x0e7a8498,
15469 +
            0x6dabbab9, 0xb0a45bcb, 0xb9c3112a, 0x64ccf058, 0x071dce79, 0xda122f0b, 0xc0bfb23b,
15470 +
            0x1db05349, 0x7e616d68, 0xa36e8c1a, 0x4b3a5708, 0x9635b67a, 0xf5e4885b, 0x28eb6929,
15471 +
            0x3246f419, 0xef49156b, 0x8c982b4a, 0x5197ca38,
15472 +
        ],
15473 +
        [
15474 +
            0x00000000, 0x2fb7bf3a, 0x5f6f7e74, 0x70d8c14e, 0xbedefce8, 0x916943d2, 0xe1b1829c,
15475 +
            0xce063da6, 0x797ce467, 0x56cb5b5d, 0x26139a13, 0x09a42529, 0xc7a2188f, 0xe815a7b5,
15476 +
            0x98cd66fb, 0xb77ad9c1, 0xf2f9c8ce, 0xdd4e77f4, 0xad96b6ba, 0x82210980, 0x4c273426,
15477 +
            0x63908b1c, 0x13484a52, 0x3cfff568, 0x8b852ca9, 0xa4329393, 0xd4ea52dd, 0xfb5dede7,
15478 +
            0x355bd041, 0x1aec6f7b, 0x6a34ae35, 0x4583110f, 0xe1328c2b, 0xce853311, 0xbe5df25f,
15479 +
            0x91ea4d65, 0x5fec70c3, 0x705bcff9, 0x00830eb7, 0x2f34b18d, 0x984e684c, 0xb7f9d776,
15480 +
            0xc7211638, 0xe896a902, 0x269094a4, 0x09272b9e, 0x79ffead0, 0x564855ea, 0x13cb44e5,
15481 +
            0x3c7cfbdf, 0x4ca43a91, 0x631385ab, 0xad15b80d, 0x82a20737, 0xf27ac679, 0xddcd7943,
15482 +
            0x6ab7a082, 0x45001fb8, 0x35d8def6, 0x1a6f61cc, 0xd4695c6a, 0xfbdee350, 0x8b06221e,
15483 +
            0xa4b19d24, 0xc6a405e1, 0xe913badb, 0x99cb7b95, 0xb67cc4af, 0x787af909, 0x57cd4633,
15484 +
            0x2715877d, 0x08a23847, 0xbfd8e186, 0x906f5ebc, 0xe0b79ff2, 0xcf0020c8, 0x01061d6e,
15485 +
            0x2eb1a254, 0x5e69631a, 0x71dedc20, 0x345dcd2f, 0x1bea7215, 0x6b32b35b, 0x44850c61,
15486 +
            0x8a8331c7, 0xa5348efd, 0xd5ec4fb3, 0xfa5bf089, 0x4d212948, 0x62969672, 0x124e573c,
15487 +
            0x3df9e806, 0xf3ffd5a0, 0xdc486a9a, 0xac90abd4, 0x832714ee, 0x279689ca, 0x082136f0,
15488 +
            0x78f9f7be, 0x574e4884, 0x99487522, 0xb6ffca18, 0xc6270b56, 0xe990b46c, 0x5eea6dad,
15489 +
            0x715dd297, 0x018513d9, 0x2e32ace3, 0xe0349145, 0xcf832e7f, 0xbf5bef31, 0x90ec500b,
15490 +
            0xd56f4104, 0xfad8fe3e, 0x8a003f70, 0xa5b7804a, 0x6bb1bdec, 0x440602d6, 0x34dec398,
15491 +
            0x1b697ca2, 0xac13a563, 0x83a41a59, 0xf37cdb17, 0xdccb642d, 0x12cd598b, 0x3d7ae6b1,
15492 +
            0x4da227ff, 0x621598c5, 0x89891675, 0xa63ea94f, 0xd6e66801, 0xf951d73b, 0x3757ea9d,
15493 +
            0x18e055a7, 0x683894e9, 0x478f2bd3, 0xf0f5f212, 0xdf424d28, 0xaf9a8c66, 0x802d335c,
15494 +
            0x4e2b0efa, 0x619cb1c0, 0x1144708e, 0x3ef3cfb4, 0x7b70debb, 0x54c76181, 0x241fa0cf,
15495 +
            0x0ba81ff5, 0xc5ae2253, 0xea199d69, 0x9ac15c27, 0xb576e31d, 0x020c3adc, 0x2dbb85e6,
15496 +
            0x5d6344a8, 0x72d4fb92, 0xbcd2c634, 0x9365790e, 0xe3bdb840, 0xcc0a077a, 0x68bb9a5e,
15497 +
            0x470c2564, 0x37d4e42a, 0x18635b10, 0xd66566b6, 0xf9d2d98c, 0x890a18c2, 0xa6bda7f8,
15498 +
            0x11c77e39, 0x3e70c103, 0x4ea8004d, 0x611fbf77, 0xaf1982d1, 0x80ae3deb, 0xf076fca5,
15499 +
            0xdfc1439f, 0x9a425290, 0xb5f5edaa, 0xc52d2ce4, 0xea9a93de, 0x249cae78, 0x0b2b1142,
15500 +
            0x7bf3d00c, 0x54446f36, 0xe33eb6f7, 0xcc8909cd, 0xbc51c883, 0x93e677b9, 0x5de04a1f,
15501 +
            0x7257f525, 0x028f346b, 0x2d388b51, 0x4f2d1394, 0x609aacae, 0x10426de0, 0x3ff5d2da,
15502 +
            0xf1f3ef7c, 0xde445046, 0xae9c9108, 0x812b2e32, 0x3651f7f3, 0x19e648c9, 0x693e8987,
15503 +
            0x468936bd, 0x888f0b1b, 0xa738b421, 0xd7e0756f, 0xf857ca55, 0xbdd4db5a, 0x92636460,
15504 +
            0xe2bba52e, 0xcd0c1a14, 0x030a27b2, 0x2cbd9888, 0x5c6559c6, 0x73d2e6fc, 0xc4a83f3d,
15505 +
            0xeb1f8007, 0x9bc74149, 0xb470fe73, 0x7a76c3d5, 0x55c17cef, 0x2519bda1, 0x0aae029b,
15506 +
            0xae1f9fbf, 0x81a82085, 0xf170e1cb, 0xdec75ef1, 0x10c16357, 0x3f76dc6d, 0x4fae1d23,
15507 +
            0x6019a219, 0xd7637bd8, 0xf8d4c4e2, 0x880c05ac, 0xa7bbba96, 0x69bd8730, 0x460a380a,
15508 +
            0x36d2f944, 0x1965467e, 0x5ce65771, 0x7351e84b, 0x03892905, 0x2c3e963f, 0xe238ab99,
15509 +
            0xcd8f14a3, 0xbd57d5ed, 0x92e06ad7, 0x259ab316, 0x0a2d0c2c, 0x7af5cd62, 0x55427258,
15510 +
            0x9b444ffe, 0xb4f3f0c4, 0xc42b318a, 0xeb9c8eb0,
15511 +
        ],
15512 +
    ];
15513 +
15514 +
    pub static CRC32_CD_ROM_EDC_TABLE: [[u32; 256]; 16] = [
15515 +
        [
15516 +
            0x00000000, 0x90910101, 0x91210201, 0x01b00300, 0x92410401, 0x02d00500, 0x03600600,
15517 +
            0x93f10701, 0x94810801, 0x04100900, 0x05a00a00, 0x95310b01, 0x06c00c00, 0x96510d01,
15518 +
            0x97e10e01, 0x07700f00, 0x99011001, 0x09901100, 0x08201200, 0x98b11301, 0x0b401400,
15519 +
            0x9bd11501, 0x9a611601, 0x0af01700, 0x0d801800, 0x9d111901, 0x9ca11a01, 0x0c301b00,
15520 +
            0x9fc11c01, 0x0f501d00, 0x0ee01e00, 0x9e711f01, 0x82012001, 0x12902100, 0x13202200,
15521 +
            0x83b12301, 0x10402400, 0x80d12501, 0x81612601, 0x11f02700, 0x16802800, 0x86112901,
15522 +
            0x87a12a01, 0x17302b00, 0x84c12c01, 0x14502d00, 0x15e02e00, 0x85712f01, 0x1b003000,
15523 +
            0x8b913101, 0x8a213201, 0x1ab03300, 0x89413401, 0x19d03500, 0x18603600, 0x88f13701,
15524 +
            0x8f813801, 0x1f103900, 0x1ea03a00, 0x8e313b01, 0x1dc03c00, 0x8d513d01, 0x8ce13e01,
15525 +
            0x1c703f00, 0xb4014001, 0x24904100, 0x25204200, 0xb5b14301, 0x26404400, 0xb6d14501,
15526 +
            0xb7614601, 0x27f04700, 0x20804800, 0xb0114901, 0xb1a14a01, 0x21304b00, 0xb2c14c01,
15527 +
            0x22504d00, 0x23e04e00, 0xb3714f01, 0x2d005000, 0xbd915101, 0xbc215201, 0x2cb05300,
15528 +
            0xbf415401, 0x2fd05500, 0x2e605600, 0xbef15701, 0xb9815801, 0x29105900, 0x28a05a00,
15529 +
            0xb8315b01, 0x2bc05c00, 0xbb515d01, 0xbae15e01, 0x2a705f00, 0x36006000, 0xa6916101,
15530 +
            0xa7216201, 0x37b06300, 0xa4416401, 0x34d06500, 0x35606600, 0xa5f16701, 0xa2816801,
15531 +
            0x32106900, 0x33a06a00, 0xa3316b01, 0x30c06c00, 0xa0516d01, 0xa1e16e01, 0x31706f00,
15532 +
            0xaf017001, 0x3f907100, 0x3e207200, 0xaeb17301, 0x3d407400, 0xadd17501, 0xac617601,
15533 +
            0x3cf07700, 0x3b807800, 0xab117901, 0xaaa17a01, 0x3a307b00, 0xa9c17c01, 0x39507d00,
15534 +
            0x38e07e00, 0xa8717f01, 0xd8018001, 0x48908100, 0x49208200, 0xd9b18301, 0x4a408400,
15535 +
            0xdad18501, 0xdb618601, 0x4bf08700, 0x4c808800, 0xdc118901, 0xdda18a01, 0x4d308b00,
15536 +
            0xdec18c01, 0x4e508d00, 0x4fe08e00, 0xdf718f01, 0x41009000, 0xd1919101, 0xd0219201,
15537 +
            0x40b09300, 0xd3419401, 0x43d09500, 0x42609600, 0xd2f19701, 0xd5819801, 0x45109900,
15538 +
            0x44a09a00, 0xd4319b01, 0x47c09c00, 0xd7519d01, 0xd6e19e01, 0x46709f00, 0x5a00a000,
15539 +
            0xca91a101, 0xcb21a201, 0x5bb0a300, 0xc841a401, 0x58d0a500, 0x5960a600, 0xc9f1a701,
15540 +
            0xce81a801, 0x5e10a900, 0x5fa0aa00, 0xcf31ab01, 0x5cc0ac00, 0xcc51ad01, 0xcde1ae01,
15541 +
            0x5d70af00, 0xc301b001, 0x5390b100, 0x5220b200, 0xc2b1b301, 0x5140b400, 0xc1d1b501,
15542 +
            0xc061b601, 0x50f0b700, 0x5780b800, 0xc711b901, 0xc6a1ba01, 0x5630bb00, 0xc5c1bc01,
15543 +
            0x5550bd00, 0x54e0be00, 0xc471bf01, 0x6c00c000, 0xfc91c101, 0xfd21c201, 0x6db0c300,
15544 +
            0xfe41c401, 0x6ed0c500, 0x6f60c600, 0xfff1c701, 0xf881c801, 0x6810c900, 0x69a0ca00,
15545 +
            0xf931cb01, 0x6ac0cc00, 0xfa51cd01, 0xfbe1ce01, 0x6b70cf00, 0xf501d001, 0x6590d100,
15546 +
            0x6420d200, 0xf4b1d301, 0x6740d400, 0xf7d1d501, 0xf661d601, 0x66f0d700, 0x6180d800,
15547 +
            0xf111d901, 0xf0a1da01, 0x6030db00, 0xf3c1dc01, 0x6350dd00, 0x62e0de00, 0xf271df01,
15548 +
            0xee01e001, 0x7e90e100, 0x7f20e200, 0xefb1e301, 0x7c40e400, 0xecd1e501, 0xed61e601,
15549 +
            0x7df0e700, 0x7a80e800, 0xea11e901, 0xeba1ea01, 0x7b30eb00, 0xe8c1ec01, 0x7850ed00,
15550 +
            0x79e0ee00, 0xe971ef01, 0x7700f000, 0xe791f101, 0xe621f201, 0x76b0f300, 0xe541f401,
15551 +
            0x75d0f500, 0x7460f600, 0xe4f1f701, 0xe381f801, 0x7310f900, 0x72a0fa00, 0xe231fb01,
15552 +
            0x71c0fc00, 0xe151fd01, 0xe0e1fe01, 0x7070ff00,
15553 +
        ],
15554 +
        [
15555 +
            0x00000000, 0x90019000, 0x90002003, 0x0001b003, 0x90034005, 0x0002d005, 0x00036006,
15556 +
            0x9002f006, 0x90058009, 0x00041009, 0x0005a00a, 0x9004300a, 0x0006c00c, 0x9007500c,
15557 +
            0x9006e00f, 0x0007700f, 0x90080011, 0x00099011, 0x00082012, 0x9009b012, 0x000b4014,
15558 +
            0x900ad014, 0x900b6017, 0x000af017, 0x000d8018, 0x900c1018, 0x900da01b, 0x000c301b,
15559 +
            0x900ec01d, 0x000f501d, 0x000ee01e, 0x900f701e, 0x90130021, 0x00129021, 0x00132022,
15560 +
            0x9012b022, 0x00104024, 0x9011d024, 0x90106027, 0x0011f027, 0x00168028, 0x90171028,
15561 +
            0x9016a02b, 0x0017302b, 0x9015c02d, 0x0014502d, 0x0015e02e, 0x9014702e, 0x001b0030,
15562 +
            0x901a9030, 0x901b2033, 0x001ab033, 0x90184035, 0x0019d035, 0x00186036, 0x9019f036,
15563 +
            0x901e8039, 0x001f1039, 0x001ea03a, 0x901f303a, 0x001dc03c, 0x901c503c, 0x901de03f,
15564 +
            0x001c703f, 0x90250041, 0x00249041, 0x00252042, 0x9024b042, 0x00264044, 0x9027d044,
15565 +
            0x90266047, 0x0027f047, 0x00208048, 0x90211048, 0x9020a04b, 0x0021304b, 0x9023c04d,
15566 +
            0x0022504d, 0x0023e04e, 0x9022704e, 0x002d0050, 0x902c9050, 0x902d2053, 0x002cb053,
15567 +
            0x902e4055, 0x002fd055, 0x002e6056, 0x902ff056, 0x90288059, 0x00291059, 0x0028a05a,
15568 +
            0x9029305a, 0x002bc05c, 0x902a505c, 0x902be05f, 0x002a705f, 0x00360060, 0x90379060,
15569 +
            0x90362063, 0x0037b063, 0x90354065, 0x0034d065, 0x00356066, 0x9034f066, 0x90338069,
15570 +
            0x00321069, 0x0033a06a, 0x9032306a, 0x0030c06c, 0x9031506c, 0x9030e06f, 0x0031706f,
15571 +
            0x903e0071, 0x003f9071, 0x003e2072, 0x903fb072, 0x003d4074, 0x903cd074, 0x903d6077,
15572 +
            0x003cf077, 0x003b8078, 0x903a1078, 0x903ba07b, 0x003a307b, 0x9038c07d, 0x0039507d,
15573 +
            0x0038e07e, 0x9039707e, 0x90490081, 0x00489081, 0x00492082, 0x9048b082, 0x004a4084,
15574 +
            0x904bd084, 0x904a6087, 0x004bf087, 0x004c8088, 0x904d1088, 0x904ca08b, 0x004d308b,
15575 +
            0x904fc08d, 0x004e508d, 0x004fe08e, 0x904e708e, 0x00410090, 0x90409090, 0x90412093,
15576 +
            0x0040b093, 0x90424095, 0x0043d095, 0x00426096, 0x9043f096, 0x90448099, 0x00451099,
15577 +
            0x0044a09a, 0x9045309a, 0x0047c09c, 0x9046509c, 0x9047e09f, 0x0046709f, 0x005a00a0,
15578 +
            0x905b90a0, 0x905a20a3, 0x005bb0a3, 0x905940a5, 0x0058d0a5, 0x005960a6, 0x9058f0a6,
15579 +
            0x905f80a9, 0x005e10a9, 0x005fa0aa, 0x905e30aa, 0x005cc0ac, 0x905d50ac, 0x905ce0af,
15580 +
            0x005d70af, 0x905200b1, 0x005390b1, 0x005220b2, 0x9053b0b2, 0x005140b4, 0x9050d0b4,
15581 +
            0x905160b7, 0x0050f0b7, 0x005780b8, 0x905610b8, 0x9057a0bb, 0x005630bb, 0x9054c0bd,
15582 +
            0x005550bd, 0x0054e0be, 0x905570be, 0x006c00c0, 0x906d90c0, 0x906c20c3, 0x006db0c3,
15583 +
            0x906f40c5, 0x006ed0c5, 0x006f60c6, 0x906ef0c6, 0x906980c9, 0x006810c9, 0x0069a0ca,
15584 +
            0x906830ca, 0x006ac0cc, 0x906b50cc, 0x906ae0cf, 0x006b70cf, 0x906400d1, 0x006590d1,
15585 +
            0x006420d2, 0x9065b0d2, 0x006740d4, 0x9066d0d4, 0x906760d7, 0x0066f0d7, 0x006180d8,
15586 +
            0x906010d8, 0x9061a0db, 0x006030db, 0x9062c0dd, 0x006350dd, 0x0062e0de, 0x906370de,
15587 +
            0x907f00e1, 0x007e90e1, 0x007f20e2, 0x907eb0e2, 0x007c40e4, 0x907dd0e4, 0x907c60e7,
15588 +
            0x007df0e7, 0x007a80e8, 0x907b10e8, 0x907aa0eb, 0x007b30eb, 0x9079c0ed, 0x007850ed,
15589 +
            0x0079e0ee, 0x907870ee, 0x007700f0, 0x907690f0, 0x907720f3, 0x0076b0f3, 0x907440f5,
15590 +
            0x0075d0f5, 0x007460f6, 0x9075f0f6, 0x907280f9, 0x007310f9, 0x0072a0fa, 0x907330fa,
15591 +
            0x0071c0fc, 0x907050fc, 0x9071e0ff, 0x007070ff,
15592 +
        ],
15593 +
        [
15594 +
            0x00000000, 0x00900190, 0x01200320, 0x01b002b0, 0x02400640, 0x02d007d0, 0x03600560,
15595 +
            0x03f004f0, 0x04800c80, 0x04100d10, 0x05a00fa0, 0x05300e30, 0x06c00ac0, 0x06500b50,
15596 +
            0x07e009e0, 0x07700870, 0x09001900, 0x09901890, 0x08201a20, 0x08b01bb0, 0x0b401f40,
15597 +
            0x0bd01ed0, 0x0a601c60, 0x0af01df0, 0x0d801580, 0x0d101410, 0x0ca016a0, 0x0c301730,
15598 +
            0x0fc013c0, 0x0f501250, 0x0ee010e0, 0x0e701170, 0x12003200, 0x12903390, 0x13203120,
15599 +
            0x13b030b0, 0x10403440, 0x10d035d0, 0x11603760, 0x11f036f0, 0x16803e80, 0x16103f10,
15600 +
            0x17a03da0, 0x17303c30, 0x14c038c0, 0x14503950, 0x15e03be0, 0x15703a70, 0x1b002b00,
15601 +
            0x1b902a90, 0x1a202820, 0x1ab029b0, 0x19402d40, 0x19d02cd0, 0x18602e60, 0x18f02ff0,
15602 +
            0x1f802780, 0x1f102610, 0x1ea024a0, 0x1e302530, 0x1dc021c0, 0x1d502050, 0x1ce022e0,
15603 +
            0x1c702370, 0x24006400, 0x24906590, 0x25206720, 0x25b066b0, 0x26406240, 0x26d063d0,
15604 +
            0x27606160, 0x27f060f0, 0x20806880, 0x20106910, 0x21a06ba0, 0x21306a30, 0x22c06ec0,
15605 +
            0x22506f50, 0x23e06de0, 0x23706c70, 0x2d007d00, 0x2d907c90, 0x2c207e20, 0x2cb07fb0,
15606 +
            0x2f407b40, 0x2fd07ad0, 0x2e607860, 0x2ef079f0, 0x29807180, 0x29107010, 0x28a072a0,
15607 +
            0x28307330, 0x2bc077c0, 0x2b507650, 0x2ae074e0, 0x2a707570, 0x36005600, 0x36905790,
15608 +
            0x37205520, 0x37b054b0, 0x34405040, 0x34d051d0, 0x35605360, 0x35f052f0, 0x32805a80,
15609 +
            0x32105b10, 0x33a059a0, 0x33305830, 0x30c05cc0, 0x30505d50, 0x31e05fe0, 0x31705e70,
15610 +
            0x3f004f00, 0x3f904e90, 0x3e204c20, 0x3eb04db0, 0x3d404940, 0x3dd048d0, 0x3c604a60,
15611 +
            0x3cf04bf0, 0x3b804380, 0x3b104210, 0x3aa040a0, 0x3a304130, 0x39c045c0, 0x39504450,
15612 +
            0x38e046e0, 0x38704770, 0x4800c800, 0x4890c990, 0x4920cb20, 0x49b0cab0, 0x4a40ce40,
15613 +
            0x4ad0cfd0, 0x4b60cd60, 0x4bf0ccf0, 0x4c80c480, 0x4c10c510, 0x4da0c7a0, 0x4d30c630,
15614 +
            0x4ec0c2c0, 0x4e50c350, 0x4fe0c1e0, 0x4f70c070, 0x4100d100, 0x4190d090, 0x4020d220,
15615 +
            0x40b0d3b0, 0x4340d740, 0x43d0d6d0, 0x4260d460, 0x42f0d5f0, 0x4580dd80, 0x4510dc10,
15616 +
            0x44a0dea0, 0x4430df30, 0x47c0dbc0, 0x4750da50, 0x46e0d8e0, 0x4670d970, 0x5a00fa00,
15617 +
            0x5a90fb90, 0x5b20f920, 0x5bb0f8b0, 0x5840fc40, 0x58d0fdd0, 0x5960ff60, 0x59f0fef0,
15618 +
            0x5e80f680, 0x5e10f710, 0x5fa0f5a0, 0x5f30f430, 0x5cc0f0c0, 0x5c50f150, 0x5de0f3e0,
15619 +
            0x5d70f270, 0x5300e300, 0x5390e290, 0x5220e020, 0x52b0e1b0, 0x5140e540, 0x51d0e4d0,
15620 +
            0x5060e660, 0x50f0e7f0, 0x5780ef80, 0x5710ee10, 0x56a0eca0, 0x5630ed30, 0x55c0e9c0,
15621 +
            0x5550e850, 0x54e0eae0, 0x5470eb70, 0x6c00ac00, 0x6c90ad90, 0x6d20af20, 0x6db0aeb0,
15622 +
            0x6e40aa40, 0x6ed0abd0, 0x6f60a960, 0x6ff0a8f0, 0x6880a080, 0x6810a110, 0x69a0a3a0,
15623 +
            0x6930a230, 0x6ac0a6c0, 0x6a50a750, 0x6be0a5e0, 0x6b70a470, 0x6500b500, 0x6590b490,
15624 +
            0x6420b620, 0x64b0b7b0, 0x6740b340, 0x67d0b2d0, 0x6660b060, 0x66f0b1f0, 0x6180b980,
15625 +
            0x6110b810, 0x60a0baa0, 0x6030bb30, 0x63c0bfc0, 0x6350be50, 0x62e0bce0, 0x6270bd70,
15626 +
            0x7e009e00, 0x7e909f90, 0x7f209d20, 0x7fb09cb0, 0x7c409840, 0x7cd099d0, 0x7d609b60,
15627 +
            0x7df09af0, 0x7a809280, 0x7a109310, 0x7ba091a0, 0x7b309030, 0x78c094c0, 0x78509550,
15628 +
            0x79e097e0, 0x79709670, 0x77008700, 0x77908690, 0x76208420, 0x76b085b0, 0x75408140,
15629 +
            0x75d080d0, 0x74608260, 0x74f083f0, 0x73808b80, 0x73108a10, 0x72a088a0, 0x72308930,
15630 +
            0x71c08dc0, 0x71508c50, 0x70e08ee0, 0x70708f70,
15631 +
        ],
15632 +
        [
15633 +
            0x00000000, 0x41000001, 0x82000002, 0xc3000003, 0xb4030007, 0xf5030006, 0x36030005,
15634 +
            0x77030004, 0xd805000d, 0x9905000c, 0x5a05000f, 0x1b05000e, 0x6c06000a, 0x2d06000b,
15635 +
            0xee060008, 0xaf060009, 0x00090019, 0x41090018, 0x8209001b, 0xc309001a, 0xb40a001e,
15636 +
            0xf50a001f, 0x360a001c, 0x770a001d, 0xd80c0014, 0x990c0015, 0x5a0c0016, 0x1b0c0017,
15637 +
            0x6c0f0013, 0x2d0f0012, 0xee0f0011, 0xaf0f0010, 0x00120032, 0x41120033, 0x82120030,
15638 +
            0xc3120031, 0xb4110035, 0xf5110034, 0x36110037, 0x77110036, 0xd817003f, 0x9917003e,
15639 +
            0x5a17003d, 0x1b17003c, 0x6c140038, 0x2d140039, 0xee14003a, 0xaf14003b, 0x001b002b,
15640 +
            0x411b002a, 0x821b0029, 0xc31b0028, 0xb418002c, 0xf518002d, 0x3618002e, 0x7718002f,
15641 +
            0xd81e0026, 0x991e0027, 0x5a1e0024, 0x1b1e0025, 0x6c1d0021, 0x2d1d0020, 0xee1d0023,
15642 +
            0xaf1d0022, 0x00240064, 0x41240065, 0x82240066, 0xc3240067, 0xb4270063, 0xf5270062,
15643 +
            0x36270061, 0x77270060, 0xd8210069, 0x99210068, 0x5a21006b, 0x1b21006a, 0x6c22006e,
15644 +
            0x2d22006f, 0xee22006c, 0xaf22006d, 0x002d007d, 0x412d007c, 0x822d007f, 0xc32d007e,
15645 +
            0xb42e007a, 0xf52e007b, 0x362e0078, 0x772e0079, 0xd8280070, 0x99280071, 0x5a280072,
15646 +
            0x1b280073, 0x6c2b0077, 0x2d2b0076, 0xee2b0075, 0xaf2b0074, 0x00360056, 0x41360057,
15647 +
            0x82360054, 0xc3360055, 0xb4350051, 0xf5350050, 0x36350053, 0x77350052, 0xd833005b,
15648 +
            0x9933005a, 0x5a330059, 0x1b330058, 0x6c30005c, 0x2d30005d, 0xee30005e, 0xaf30005f,
15649 +
            0x003f004f, 0x413f004e, 0x823f004d, 0xc33f004c, 0xb43c0048, 0xf53c0049, 0x363c004a,
15650 +
            0x773c004b, 0xd83a0042, 0x993a0043, 0x5a3a0040, 0x1b3a0041, 0x6c390045, 0x2d390044,
15651 +
            0xee390047, 0xaf390046, 0x004800c8, 0x414800c9, 0x824800ca, 0xc34800cb, 0xb44b00cf,
15652 +
            0xf54b00ce, 0x364b00cd, 0x774b00cc, 0xd84d00c5, 0x994d00c4, 0x5a4d00c7, 0x1b4d00c6,
15653 +
            0x6c4e00c2, 0x2d4e00c3, 0xee4e00c0, 0xaf4e00c1, 0x004100d1, 0x414100d0, 0x824100d3,
15654 +
            0xc34100d2, 0xb44200d6, 0xf54200d7, 0x364200d4, 0x774200d5, 0xd84400dc, 0x994400dd,
15655 +
            0x5a4400de, 0x1b4400df, 0x6c4700db, 0x2d4700da, 0xee4700d9, 0xaf4700d8, 0x005a00fa,
15656 +
            0x415a00fb, 0x825a00f8, 0xc35a00f9, 0xb45900fd, 0xf55900fc, 0x365900ff, 0x775900fe,
15657 +
            0xd85f00f7, 0x995f00f6, 0x5a5f00f5, 0x1b5f00f4, 0x6c5c00f0, 0x2d5c00f1, 0xee5c00f2,
15658 +
            0xaf5c00f3, 0x005300e3, 0x415300e2, 0x825300e1, 0xc35300e0, 0xb45000e4, 0xf55000e5,
15659 +
            0x365000e6, 0x775000e7, 0xd85600ee, 0x995600ef, 0x5a5600ec, 0x1b5600ed, 0x6c5500e9,
15660 +
            0x2d5500e8, 0xee5500eb, 0xaf5500ea, 0x006c00ac, 0x416c00ad, 0x826c00ae, 0xc36c00af,
15661 +
            0xb46f00ab, 0xf56f00aa, 0x366f00a9, 0x776f00a8, 0xd86900a1, 0x996900a0, 0x5a6900a3,
15662 +
            0x1b6900a2, 0x6c6a00a6, 0x2d6a00a7, 0xee6a00a4, 0xaf6a00a5, 0x006500b5, 0x416500b4,
15663 +
            0x826500b7, 0xc36500b6, 0xb46600b2, 0xf56600b3, 0x366600b0, 0x776600b1, 0xd86000b8,
15664 +
            0x996000b9, 0x5a6000ba, 0x1b6000bb, 0x6c6300bf, 0x2d6300be, 0xee6300bd, 0xaf6300bc,
15665 +
            0x007e009e, 0x417e009f, 0x827e009c, 0xc37e009d, 0xb47d0099, 0xf57d0098, 0x367d009b,
15666 +
            0x777d009a, 0xd87b0093, 0x997b0092, 0x5a7b0091, 0x1b7b0090, 0x6c780094, 0x2d780095,
15667 +
            0xee780096, 0xaf780097, 0x00770087, 0x41770086, 0x82770085, 0xc3770084, 0xb4740080,
15668 +
            0xf5740081, 0x36740082, 0x77740083, 0xd872008a, 0x9972008b, 0x5a720088, 0x1b720089,
15669 +
            0x6c71008d, 0x2d71008c, 0xee71008f, 0xaf71008e,
15670 +
        ],
15671 +
        [
15672 +
            0x00000000, 0x90d00101, 0x91a30201, 0x01730300, 0x93450401, 0x03950500, 0x02e60600,
15673 +
            0x92360701, 0x96890801, 0x06590900, 0x072a0a00, 0x97fa0b01, 0x05cc0c00, 0x951c0d01,
15674 +
            0x946f0e01, 0x04bf0f00, 0x9d111001, 0x0dc11100, 0x0cb21200, 0x9c621301, 0x0e541400,
15675 +
            0x9e841501, 0x9ff71601, 0x0f271700, 0x0b981800, 0x9b481901, 0x9a3b1a01, 0x0aeb1b00,
15676 +
            0x98dd1c01, 0x080d1d00, 0x097e1e00, 0x99ae1f01, 0x8a212001, 0x1af12100, 0x1b822200,
15677 +
            0x8b522301, 0x19642400, 0x89b42501, 0x88c72601, 0x18172700, 0x1ca82800, 0x8c782901,
15678 +
            0x8d0b2a01, 0x1ddb2b00, 0x8fed2c01, 0x1f3d2d00, 0x1e4e2e00, 0x8e9e2f01, 0x17303000,
15679 +
            0x87e03101, 0x86933201, 0x16433300, 0x84753401, 0x14a53500, 0x15d63600, 0x85063701,
15680 +
            0x81b93801, 0x11693900, 0x101a3a00, 0x80ca3b01, 0x12fc3c00, 0x822c3d01, 0x835f3e01,
15681 +
            0x138f3f00, 0xa4414001, 0x34914100, 0x35e24200, 0xa5324301, 0x37044400, 0xa7d44501,
15682 +
            0xa6a74601, 0x36774700, 0x32c84800, 0xa2184901, 0xa36b4a01, 0x33bb4b00, 0xa18d4c01,
15683 +
            0x315d4d00, 0x302e4e00, 0xa0fe4f01, 0x39505000, 0xa9805101, 0xa8f35201, 0x38235300,
15684 +
            0xaa155401, 0x3ac55500, 0x3bb65600, 0xab665701, 0xafd95801, 0x3f095900, 0x3e7a5a00,
15685 +
            0xaeaa5b01, 0x3c9c5c00, 0xac4c5d01, 0xad3f5e01, 0x3def5f00, 0x2e606000, 0xbeb06101,
15686 +
            0xbfc36201, 0x2f136300, 0xbd256401, 0x2df56500, 0x2c866600, 0xbc566701, 0xb8e96801,
15687 +
            0x28396900, 0x294a6a00, 0xb99a6b01, 0x2bac6c00, 0xbb7c6d01, 0xba0f6e01, 0x2adf6f00,
15688 +
            0xb3717001, 0x23a17100, 0x22d27200, 0xb2027301, 0x20347400, 0xb0e47501, 0xb1977601,
15689 +
            0x21477700, 0x25f87800, 0xb5287901, 0xb45b7a01, 0x248b7b00, 0xb6bd7c01, 0x266d7d00,
15690 +
            0x271e7e00, 0xb7ce7f01, 0xf8818001, 0x68518100, 0x69228200, 0xf9f28301, 0x6bc48400,
15691 +
            0xfb148501, 0xfa678601, 0x6ab78700, 0x6e088800, 0xfed88901, 0xffab8a01, 0x6f7b8b00,
15692 +
            0xfd4d8c01, 0x6d9d8d00, 0x6cee8e00, 0xfc3e8f01, 0x65909000, 0xf5409101, 0xf4339201,
15693 +
            0x64e39300, 0xf6d59401, 0x66059500, 0x67769600, 0xf7a69701, 0xf3199801, 0x63c99900,
15694 +
            0x62ba9a00, 0xf26a9b01, 0x605c9c00, 0xf08c9d01, 0xf1ff9e01, 0x612f9f00, 0x72a0a000,
15695 +
            0xe270a101, 0xe303a201, 0x73d3a300, 0xe1e5a401, 0x7135a500, 0x7046a600, 0xe096a701,
15696 +
            0xe429a801, 0x74f9a900, 0x758aaa00, 0xe55aab01, 0x776cac00, 0xe7bcad01, 0xe6cfae01,
15697 +
            0x761faf00, 0xefb1b001, 0x7f61b100, 0x7e12b200, 0xeec2b301, 0x7cf4b400, 0xec24b501,
15698 +
            0xed57b601, 0x7d87b700, 0x7938b800, 0xe9e8b901, 0xe89bba01, 0x784bbb00, 0xea7dbc01,
15699 +
            0x7aadbd00, 0x7bdebe00, 0xeb0ebf01, 0x5cc0c000, 0xcc10c101, 0xcd63c201, 0x5db3c300,
15700 +
            0xcf85c401, 0x5f55c500, 0x5e26c600, 0xcef6c701, 0xca49c801, 0x5a99c900, 0x5beaca00,
15701 +
            0xcb3acb01, 0x590ccc00, 0xc9dccd01, 0xc8afce01, 0x587fcf00, 0xc1d1d001, 0x5101d100,
15702 +
            0x5072d200, 0xc0a2d301, 0x5294d400, 0xc244d501, 0xc337d601, 0x53e7d700, 0x5758d800,
15703 +
            0xc788d901, 0xc6fbda01, 0x562bdb00, 0xc41ddc01, 0x54cddd00, 0x55bede00, 0xc56edf01,
15704 +
            0xd6e1e001, 0x4631e100, 0x4742e200, 0xd792e301, 0x45a4e400, 0xd574e501, 0xd407e601,
15705 +
            0x44d7e700, 0x4068e800, 0xd0b8e901, 0xd1cbea01, 0x411beb00, 0xd32dec01, 0x43fded00,
15706 +
            0x428eee00, 0xd25eef01, 0x4bf0f000, 0xdb20f101, 0xda53f201, 0x4a83f300, 0xd8b5f401,
15707 +
            0x4865f500, 0x4916f600, 0xd9c6f701, 0xdd79f801, 0x4da9f900, 0x4cdafa00, 0xdc0afb01,
15708 +
            0x4e3cfc00, 0xdeecfd01, 0xdf9ffe01, 0x4f4fff00,
15709 +
        ],
15710 +
        [
15711 +
            0x00000000, 0x9001d100, 0x9000a203, 0x00017303, 0x90024405, 0x00039505, 0x0002e606,
15712 +
            0x90033706, 0x90078809, 0x00065909, 0x00072a0a, 0x9006fb0a, 0x0005cc0c, 0x90041d0c,
15713 +
            0x90056e0f, 0x0004bf0f, 0x900c1011, 0x000dc111, 0x000cb212, 0x900d6312, 0x000e5414,
15714 +
            0x900f8514, 0x900ef617, 0x000f2717, 0x000b9818, 0x900a4918, 0x900b3a1b, 0x000aeb1b,
15715 +
            0x9009dc1d, 0x00080d1d, 0x00097e1e, 0x9008af1e, 0x901b2021, 0x001af121, 0x001b8222,
15716 +
            0x901a5322, 0x00196424, 0x9018b524, 0x9019c627, 0x00181727, 0x001ca828, 0x901d7928,
15717 +
            0x901c0a2b, 0x001ddb2b, 0x901eec2d, 0x001f3d2d, 0x001e4e2e, 0x901f9f2e, 0x00173030,
15718 +
            0x9016e130, 0x90179233, 0x00164333, 0x90157435, 0x0014a535, 0x0015d636, 0x90140736,
15719 +
            0x9010b839, 0x00116939, 0x00101a3a, 0x9011cb3a, 0x0012fc3c, 0x90132d3c, 0x90125e3f,
15720 +
            0x00138f3f, 0x90354041, 0x00349141, 0x0035e242, 0x90343342, 0x00370444, 0x9036d544,
15721 +
            0x9037a647, 0x00367747, 0x0032c848, 0x90331948, 0x90326a4b, 0x0033bb4b, 0x90308c4d,
15722 +
            0x00315d4d, 0x00302e4e, 0x9031ff4e, 0x00395050, 0x90388150, 0x9039f253, 0x00382353,
15723 +
            0x903b1455, 0x003ac555, 0x003bb656, 0x903a6756, 0x903ed859, 0x003f0959, 0x003e7a5a,
15724 +
            0x903fab5a, 0x003c9c5c, 0x903d4d5c, 0x903c3e5f, 0x003def5f, 0x002e6060, 0x902fb160,
15725 +
            0x902ec263, 0x002f1363, 0x902c2465, 0x002df565, 0x002c8666, 0x902d5766, 0x9029e869,
15726 +
            0x00283969, 0x00294a6a, 0x90289b6a, 0x002bac6c, 0x902a7d6c, 0x902b0e6f, 0x002adf6f,
15727 +
            0x90227071, 0x0023a171, 0x0022d272, 0x90230372, 0x00203474, 0x9021e574, 0x90209677,
15728 +
            0x00214777, 0x0025f878, 0x90242978, 0x90255a7b, 0x00248b7b, 0x9027bc7d, 0x00266d7d,
15729 +
            0x00271e7e, 0x9026cf7e, 0x90698081, 0x00685181, 0x00692282, 0x9068f382, 0x006bc484,
15730 +
            0x906a1584, 0x906b6687, 0x006ab787, 0x006e0888, 0x906fd988, 0x906eaa8b, 0x006f7b8b,
15731 +
            0x906c4c8d, 0x006d9d8d, 0x006cee8e, 0x906d3f8e, 0x00659090, 0x90644190, 0x90653293,
15732 +
            0x0064e393, 0x9067d495, 0x00660595, 0x00677696, 0x9066a796, 0x90621899, 0x0063c999,
15733 +
            0x0062ba9a, 0x90636b9a, 0x00605c9c, 0x90618d9c, 0x9060fe9f, 0x00612f9f, 0x0072a0a0,
15734 +
            0x907371a0, 0x907202a3, 0x0073d3a3, 0x9070e4a5, 0x007135a5, 0x007046a6, 0x907197a6,
15735 +
            0x907528a9, 0x0074f9a9, 0x00758aaa, 0x90745baa, 0x00776cac, 0x9076bdac, 0x9077ceaf,
15736 +
            0x00761faf, 0x907eb0b1, 0x007f61b1, 0x007e12b2, 0x907fc3b2, 0x007cf4b4, 0x907d25b4,
15737 +
            0x907c56b7, 0x007d87b7, 0x007938b8, 0x9078e9b8, 0x90799abb, 0x00784bbb, 0x907b7cbd,
15738 +
            0x007aadbd, 0x007bdebe, 0x907a0fbe, 0x005cc0c0, 0x905d11c0, 0x905c62c3, 0x005db3c3,
15739 +
            0x905e84c5, 0x005f55c5, 0x005e26c6, 0x905ff7c6, 0x905b48c9, 0x005a99c9, 0x005beaca,
15740 +
            0x905a3bca, 0x00590ccc, 0x9058ddcc, 0x9059aecf, 0x00587fcf, 0x9050d0d1, 0x005101d1,
15741 +
            0x005072d2, 0x9051a3d2, 0x005294d4, 0x905345d4, 0x905236d7, 0x0053e7d7, 0x005758d8,
15742 +
            0x905689d8, 0x9057fadb, 0x00562bdb, 0x90551cdd, 0x0054cddd, 0x0055bede, 0x90546fde,
15743 +
            0x9047e0e1, 0x004631e1, 0x004742e2, 0x904693e2, 0x0045a4e4, 0x904475e4, 0x904506e7,
15744 +
            0x0044d7e7, 0x004068e8, 0x9041b9e8, 0x9040caeb, 0x00411beb, 0x90422ced, 0x0043fded,
15745 +
            0x00428eee, 0x90435fee, 0x004bf0f0, 0x904a21f0, 0x904b52f3, 0x004a83f3, 0x9049b4f5,
15746 +
            0x004865f5, 0x004916f6, 0x9048c7f6, 0x904c78f9, 0x004da9f9, 0x004cdafa, 0x904d0bfa,
15747 +
            0x004e3cfc, 0x904fedfc, 0x904e9eff, 0x004f4fff,
15748 +
        ],
15749 +
        [
15750 +
            0x00000000, 0x009001d1, 0x012003a2, 0x01b00273, 0x02400744, 0x02d00695, 0x036004e6,
15751 +
            0x03f00537, 0x04800e88, 0x04100f59, 0x05a00d2a, 0x05300cfb, 0x06c009cc, 0x0650081d,
15752 +
            0x07e00a6e, 0x07700bbf, 0x09001d10, 0x09901cc1, 0x08201eb2, 0x08b01f63, 0x0b401a54,
15753 +
            0x0bd01b85, 0x0a6019f6, 0x0af01827, 0x0d801398, 0x0d101249, 0x0ca0103a, 0x0c3011eb,
15754 +
            0x0fc014dc, 0x0f50150d, 0x0ee0177e, 0x0e7016af, 0x12003a20, 0x12903bf1, 0x13203982,
15755 +
            0x13b03853, 0x10403d64, 0x10d03cb5, 0x11603ec6, 0x11f03f17, 0x168034a8, 0x16103579,
15756 +
            0x17a0370a, 0x173036db, 0x14c033ec, 0x1450323d, 0x15e0304e, 0x1570319f, 0x1b002730,
15757 +
            0x1b9026e1, 0x1a202492, 0x1ab02543, 0x19402074, 0x19d021a5, 0x186023d6, 0x18f02207,
15758 +
            0x1f8029b8, 0x1f102869, 0x1ea02a1a, 0x1e302bcb, 0x1dc02efc, 0x1d502f2d, 0x1ce02d5e,
15759 +
            0x1c702c8f, 0x24007440, 0x24907591, 0x252077e2, 0x25b07633, 0x26407304, 0x26d072d5,
15760 +
            0x276070a6, 0x27f07177, 0x20807ac8, 0x20107b19, 0x21a0796a, 0x213078bb, 0x22c07d8c,
15761 +
            0x22507c5d, 0x23e07e2e, 0x23707fff, 0x2d006950, 0x2d906881, 0x2c206af2, 0x2cb06b23,
15762 +
            0x2f406e14, 0x2fd06fc5, 0x2e606db6, 0x2ef06c67, 0x298067d8, 0x29106609, 0x28a0647a,
15763 +
            0x283065ab, 0x2bc0609c, 0x2b50614d, 0x2ae0633e, 0x2a7062ef, 0x36004e60, 0x36904fb1,
15764 +
            0x37204dc2, 0x37b04c13, 0x34404924, 0x34d048f5, 0x35604a86, 0x35f04b57, 0x328040e8,
15765 +
            0x32104139, 0x33a0434a, 0x3330429b, 0x30c047ac, 0x3050467d, 0x31e0440e, 0x317045df,
15766 +
            0x3f005370, 0x3f9052a1, 0x3e2050d2, 0x3eb05103, 0x3d405434, 0x3dd055e5, 0x3c605796,
15767 +
            0x3cf05647, 0x3b805df8, 0x3b105c29, 0x3aa05e5a, 0x3a305f8b, 0x39c05abc, 0x39505b6d,
15768 +
            0x38e0591e, 0x387058cf, 0x4800e880, 0x4890e951, 0x4920eb22, 0x49b0eaf3, 0x4a40efc4,
15769 +
            0x4ad0ee15, 0x4b60ec66, 0x4bf0edb7, 0x4c80e608, 0x4c10e7d9, 0x4da0e5aa, 0x4d30e47b,
15770 +
            0x4ec0e14c, 0x4e50e09d, 0x4fe0e2ee, 0x4f70e33f, 0x4100f590, 0x4190f441, 0x4020f632,
15771 +
            0x40b0f7e3, 0x4340f2d4, 0x43d0f305, 0x4260f176, 0x42f0f0a7, 0x4580fb18, 0x4510fac9,
15772 +
            0x44a0f8ba, 0x4430f96b, 0x47c0fc5c, 0x4750fd8d, 0x46e0fffe, 0x4670fe2f, 0x5a00d2a0,
15773 +
            0x5a90d371, 0x5b20d102, 0x5bb0d0d3, 0x5840d5e4, 0x58d0d435, 0x5960d646, 0x59f0d797,
15774 +
            0x5e80dc28, 0x5e10ddf9, 0x5fa0df8a, 0x5f30de5b, 0x5cc0db6c, 0x5c50dabd, 0x5de0d8ce,
15775 +
            0x5d70d91f, 0x5300cfb0, 0x5390ce61, 0x5220cc12, 0x52b0cdc3, 0x5140c8f4, 0x51d0c925,
15776 +
            0x5060cb56, 0x50f0ca87, 0x5780c138, 0x5710c0e9, 0x56a0c29a, 0x5630c34b, 0x55c0c67c,
15777 +
            0x5550c7ad, 0x54e0c5de, 0x5470c40f, 0x6c009cc0, 0x6c909d11, 0x6d209f62, 0x6db09eb3,
15778 +
            0x6e409b84, 0x6ed09a55, 0x6f609826, 0x6ff099f7, 0x68809248, 0x68109399, 0x69a091ea,
15779 +
            0x6930903b, 0x6ac0950c, 0x6a5094dd, 0x6be096ae, 0x6b70977f, 0x650081d0, 0x65908001,
15780 +
            0x64208272, 0x64b083a3, 0x67408694, 0x67d08745, 0x66608536, 0x66f084e7, 0x61808f58,
15781 +
            0x61108e89, 0x60a08cfa, 0x60308d2b, 0x63c0881c, 0x635089cd, 0x62e08bbe, 0x62708a6f,
15782 +
            0x7e00a6e0, 0x7e90a731, 0x7f20a542, 0x7fb0a493, 0x7c40a1a4, 0x7cd0a075, 0x7d60a206,
15783 +
            0x7df0a3d7, 0x7a80a868, 0x7a10a9b9, 0x7ba0abca, 0x7b30aa1b, 0x78c0af2c, 0x7850aefd,
15784 +
            0x79e0ac8e, 0x7970ad5f, 0x7700bbf0, 0x7790ba21, 0x7620b852, 0x76b0b983, 0x7540bcb4,
15785 +
            0x75d0bd65, 0x7460bf16, 0x74f0bec7, 0x7380b578, 0x7310b4a9, 0x72a0b6da, 0x7230b70b,
15786 +
            0x71c0b23c, 0x7150b3ed, 0x70e0b19e, 0x7070b04f,
15787 +
        ],
15788 +
        [
15789 +
            0x00000000, 0x65904101, 0xcb208202, 0xaeb0c303, 0x26420407, 0x43d24506, 0xed628605,
15790 +
            0x88f2c704, 0x4c84080e, 0x2914490f, 0x87a48a0c, 0xe234cb0d, 0x6ac60c09, 0x0f564d08,
15791 +
            0xa1e68e0b, 0xc476cf0a, 0x9908101c, 0xfc98511d, 0x5228921e, 0x37b8d31f, 0xbf4a141b,
15792 +
            0xdada551a, 0x746a9619, 0x11fad718, 0xd58c1812, 0xb01c5913, 0x1eac9a10, 0x7b3cdb11,
15793 +
            0xf3ce1c15, 0x965e5d14, 0x38ee9e17, 0x5d7edf16, 0x8213203b, 0xe783613a, 0x4933a239,
15794 +
            0x2ca3e338, 0xa451243c, 0xc1c1653d, 0x6f71a63e, 0x0ae1e73f, 0xce972835, 0xab076934,
15795 +
            0x05b7aa37, 0x6027eb36, 0xe8d52c32, 0x8d456d33, 0x23f5ae30, 0x4665ef31, 0x1b1b3027,
15796 +
            0x7e8b7126, 0xd03bb225, 0xb5abf324, 0x3d593420, 0x58c97521, 0xf679b622, 0x93e9f723,
15797 +
            0x579f3829, 0x320f7928, 0x9cbfba2b, 0xf92ffb2a, 0x71dd3c2e, 0x144d7d2f, 0xbafdbe2c,
15798 +
            0xdf6dff2d, 0xb4254075, 0xd1b50174, 0x7f05c277, 0x1a958376, 0x92674472, 0xf7f70573,
15799 +
            0x5947c670, 0x3cd78771, 0xf8a1487b, 0x9d31097a, 0x3381ca79, 0x56118b78, 0xdee34c7c,
15800 +
            0xbb730d7d, 0x15c3ce7e, 0x70538f7f, 0x2d2d5069, 0x48bd1168, 0xe60dd26b, 0x839d936a,
15801 +
            0x0b6f546e, 0x6eff156f, 0xc04fd66c, 0xa5df976d, 0x61a95867, 0x04391966, 0xaa89da65,
15802 +
            0xcf199b64, 0x47eb5c60, 0x227b1d61, 0x8ccbde62, 0xe95b9f63, 0x3636604e, 0x53a6214f,
15803 +
            0xfd16e24c, 0x9886a34d, 0x10746449, 0x75e42548, 0xdb54e64b, 0xbec4a74a, 0x7ab26840,
15804 +
            0x1f222941, 0xb192ea42, 0xd402ab43, 0x5cf06c47, 0x39602d46, 0x97d0ee45, 0xf240af44,
15805 +
            0xaf3e7052, 0xcaae3153, 0x641ef250, 0x018eb351, 0x897c7455, 0xecec3554, 0x425cf657,
15806 +
            0x27ccb756, 0xe3ba785c, 0x862a395d, 0x289afa5e, 0x4d0abb5f, 0xc5f87c5b, 0xa0683d5a,
15807 +
            0x0ed8fe59, 0x6b48bf58, 0xd84980e9, 0xbdd9c1e8, 0x136902eb, 0x76f943ea, 0xfe0b84ee,
15808 +
            0x9b9bc5ef, 0x352b06ec, 0x50bb47ed, 0x94cd88e7, 0xf15dc9e6, 0x5fed0ae5, 0x3a7d4be4,
15809 +
            0xb28f8ce0, 0xd71fcde1, 0x79af0ee2, 0x1c3f4fe3, 0x414190f5, 0x24d1d1f4, 0x8a6112f7,
15810 +
            0xeff153f6, 0x670394f2, 0x0293d5f3, 0xac2316f0, 0xc9b357f1, 0x0dc598fb, 0x6855d9fa,
15811 +
            0xc6e51af9, 0xa3755bf8, 0x2b879cfc, 0x4e17ddfd, 0xe0a71efe, 0x85375fff, 0x5a5aa0d2,
15812 +
            0x3fcae1d3, 0x917a22d0, 0xf4ea63d1, 0x7c18a4d5, 0x1988e5d4, 0xb73826d7, 0xd2a867d6,
15813 +
            0x16dea8dc, 0x734ee9dd, 0xddfe2ade, 0xb86e6bdf, 0x309cacdb, 0x550cedda, 0xfbbc2ed9,
15814 +
            0x9e2c6fd8, 0xc352b0ce, 0xa6c2f1cf, 0x087232cc, 0x6de273cd, 0xe510b4c9, 0x8080f5c8,
15815 +
            0x2e3036cb, 0x4ba077ca, 0x8fd6b8c0, 0xea46f9c1, 0x44f63ac2, 0x21667bc3, 0xa994bcc7,
15816 +
            0xcc04fdc6, 0x62b43ec5, 0x07247fc4, 0x6c6cc09c, 0x09fc819d, 0xa74c429e, 0xc2dc039f,
15817 +
            0x4a2ec49b, 0x2fbe859a, 0x810e4699, 0xe49e0798, 0x20e8c892, 0x45788993, 0xebc84a90,
15818 +
            0x8e580b91, 0x06aacc95, 0x633a8d94, 0xcd8a4e97, 0xa81a0f96, 0xf564d080, 0x90f49181,
15819 +
            0x3e445282, 0x5bd41383, 0xd326d487, 0xb6b69586, 0x18065685, 0x7d961784, 0xb9e0d88e,
15820 +
            0xdc70998f, 0x72c05a8c, 0x17501b8d, 0x9fa2dc89, 0xfa329d88, 0x54825e8b, 0x31121f8a,
15821 +
            0xee7fe0a7, 0x8befa1a6, 0x255f62a5, 0x40cf23a4, 0xc83de4a0, 0xadada5a1, 0x031d66a2,
15822 +
            0x668d27a3, 0xa2fbe8a9, 0xc76ba9a8, 0x69db6aab, 0x0c4b2baa, 0x84b9ecae, 0xe129adaf,
15823 +
            0x4f996eac, 0x2a092fad, 0x7777f0bb, 0x12e7b1ba, 0xbc5772b9, 0xd9c733b8, 0x5135f4bc,
15824 +
            0x34a5b5bd, 0x9a1576be, 0xff8537bf, 0x3bf3f8b5, 0x5e63b9b4, 0xf0d37ab7, 0x95433bb6,
15825 +
            0x1db1fcb2, 0x7821bdb3, 0xd6917eb0, 0xb3013fb1,
15826 +
        ],
15827 +
        [
15828 +
            0x00000000, 0x90f49140, 0x91ea2283, 0x011eb3c3, 0x93d74505, 0x0323d445, 0x023d6786,
15829 +
            0x92c9f6c6, 0x97ad8a09, 0x07591b49, 0x0647a88a, 0x96b339ca, 0x047acf0c, 0x948e5e4c,
15830 +
            0x9590ed8f, 0x05647ccf, 0x9f581411, 0x0fac8551, 0x0eb23692, 0x9e46a7d2, 0x0c8f5114,
15831 +
            0x9c7bc054, 0x9d657397, 0x0d91e2d7, 0x08f59e18, 0x98010f58, 0x991fbc9b, 0x09eb2ddb,
15832 +
            0x9b22db1d, 0x0bd64a5d, 0x0ac8f99e, 0x9a3c68de, 0x8eb32821, 0x1e47b961, 0x1f590aa2,
15833 +
            0x8fad9be2, 0x1d646d24, 0x8d90fc64, 0x8c8e4fa7, 0x1c7adee7, 0x191ea228, 0x89ea3368,
15834 +
            0x88f480ab, 0x180011eb, 0x8ac9e72d, 0x1a3d766d, 0x1b23c5ae, 0x8bd754ee, 0x11eb3c30,
15835 +
            0x811fad70, 0x80011eb3, 0x10f58ff3, 0x823c7935, 0x12c8e875, 0x13d65bb6, 0x8322caf6,
15836 +
            0x8646b639, 0x16b22779, 0x17ac94ba, 0x875805fa, 0x1591f33c, 0x8565627c, 0x847bd1bf,
15837 +
            0x148f40ff, 0xad655041, 0x3d91c101, 0x3c8f72c2, 0xac7be382, 0x3eb21544, 0xae468404,
15838 +
            0xaf5837c7, 0x3faca687, 0x3ac8da48, 0xaa3c4b08, 0xab22f8cb, 0x3bd6698b, 0xa91f9f4d,
15839 +
            0x39eb0e0d, 0x38f5bdce, 0xa8012c8e, 0x323d4450, 0xa2c9d510, 0xa3d766d3, 0x3323f793,
15840 +
            0xa1ea0155, 0x311e9015, 0x300023d6, 0xa0f4b296, 0xa590ce59, 0x35645f19, 0x347aecda,
15841 +
            0xa48e7d9a, 0x36478b5c, 0xa6b31a1c, 0xa7ada9df, 0x3759389f, 0x23d67860, 0xb322e920,
15842 +
            0xb23c5ae3, 0x22c8cba3, 0xb0013d65, 0x20f5ac25, 0x21eb1fe6, 0xb11f8ea6, 0xb47bf269,
15843 +
            0x248f6329, 0x2591d0ea, 0xb56541aa, 0x27acb76c, 0xb758262c, 0xb64695ef, 0x26b204af,
15844 +
            0xbc8e6c71, 0x2c7afd31, 0x2d644ef2, 0xbd90dfb2, 0x2f592974, 0xbfadb834, 0xbeb30bf7,
15845 +
            0x2e479ab7, 0x2b23e678, 0xbbd77738, 0xbac9c4fb, 0x2a3d55bb, 0xb8f4a37d, 0x2800323d,
15846 +
            0x291e81fe, 0xb9ea10be, 0xeac9a081, 0x7a3d31c1, 0x7b238202, 0xebd71342, 0x791ee584,
15847 +
            0xe9ea74c4, 0xe8f4c707, 0x78005647, 0x7d642a88, 0xed90bbc8, 0xec8e080b, 0x7c7a994b,
15848 +
            0xeeb36f8d, 0x7e47fecd, 0x7f594d0e, 0xefaddc4e, 0x7591b490, 0xe56525d0, 0xe47b9613,
15849 +
            0x748f0753, 0xe646f195, 0x76b260d5, 0x77acd316, 0xe7584256, 0xe23c3e99, 0x72c8afd9,
15850 +
            0x73d61c1a, 0xe3228d5a, 0x71eb7b9c, 0xe11feadc, 0xe001591f, 0x70f5c85f, 0x647a88a0,
15851 +
            0xf48e19e0, 0xf590aa23, 0x65643b63, 0xf7adcda5, 0x67595ce5, 0x6647ef26, 0xf6b37e66,
15852 +
            0xf3d702a9, 0x632393e9, 0x623d202a, 0xf2c9b16a, 0x600047ac, 0xf0f4d6ec, 0xf1ea652f,
15853 +
            0x611ef46f, 0xfb229cb1, 0x6bd60df1, 0x6ac8be32, 0xfa3c2f72, 0x68f5d9b4, 0xf80148f4,
15854 +
            0xf91ffb37, 0x69eb6a77, 0x6c8f16b8, 0xfc7b87f8, 0xfd65343b, 0x6d91a57b, 0xff5853bd,
15855 +
            0x6facc2fd, 0x6eb2713e, 0xfe46e07e, 0x47acf0c0, 0xd7586180, 0xd646d243, 0x46b24303,
15856 +
            0xd47bb5c5, 0x448f2485, 0x45919746, 0xd5650606, 0xd0017ac9, 0x40f5eb89, 0x41eb584a,
15857 +
            0xd11fc90a, 0x43d63fcc, 0xd322ae8c, 0xd23c1d4f, 0x42c88c0f, 0xd8f4e4d1, 0x48007591,
15858 +
            0x491ec652, 0xd9ea5712, 0x4b23a1d4, 0xdbd73094, 0xdac98357, 0x4a3d1217, 0x4f596ed8,
15859 +
            0xdfadff98, 0xdeb34c5b, 0x4e47dd1b, 0xdc8e2bdd, 0x4c7aba9d, 0x4d64095e, 0xdd90981e,
15860 +
            0xc91fd8e1, 0x59eb49a1, 0x58f5fa62, 0xc8016b22, 0x5ac89de4, 0xca3c0ca4, 0xcb22bf67,
15861 +
            0x5bd62e27, 0x5eb252e8, 0xce46c3a8, 0xcf58706b, 0x5face12b, 0xcd6517ed, 0x5d9186ad,
15862 +
            0x5c8f356e, 0xcc7ba42e, 0x5647ccf0, 0xc6b35db0, 0xc7adee73, 0x57597f33, 0xc59089f5,
15863 +
            0x556418b5, 0x547aab76, 0xc48e3a36, 0xc1ea46f9, 0x511ed7b9, 0x5000647a, 0xc0f4f53a,
15864 +
            0x523d03fc, 0xc2c992bc, 0xc3d7217f, 0x5323b03f,
15865 +
        ],
15866 +
        [
15867 +
            0x00000000, 0xb491b490, 0xd9206923, 0x6db1ddb3, 0x0243d245, 0xb6d266d5, 0xdb63bb66,
15868 +
            0x6ff20ff6, 0x0487a48a, 0xb016101a, 0xdda7cda9, 0x69367939, 0x06c476cf, 0xb255c25f,
15869 +
            0xdfe41fec, 0x6b75ab7c, 0x090f4914, 0xbd9efd84, 0xd02f2037, 0x64be94a7, 0x0b4c9b51,
15870 +
            0xbfdd2fc1, 0xd26cf272, 0x66fd46e2, 0x0d88ed9e, 0xb919590e, 0xd4a884bd, 0x6039302d,
15871 +
            0x0fcb3fdb, 0xbb5a8b4b, 0xd6eb56f8, 0x627ae268, 0x121e9228, 0xa68f26b8, 0xcb3efb0b,
15872 +
            0x7faf4f9b, 0x105d406d, 0xa4ccf4fd, 0xc97d294e, 0x7dec9dde, 0x169936a2, 0xa2088232,
15873 +
            0xcfb95f81, 0x7b28eb11, 0x14dae4e7, 0xa04b5077, 0xcdfa8dc4, 0x796b3954, 0x1b11db3c,
15874 +
            0xaf806fac, 0xc231b21f, 0x76a0068f, 0x19520979, 0xadc3bde9, 0xc072605a, 0x74e3d4ca,
15875 +
            0x1f967fb6, 0xab07cb26, 0xc6b61695, 0x7227a205, 0x1dd5adf3, 0xa9441963, 0xc4f5c4d0,
15876 +
            0x70647040, 0x243d2450, 0x90ac90c0, 0xfd1d4d73, 0x498cf9e3, 0x267ef615, 0x92ef4285,
15877 +
            0xff5e9f36, 0x4bcf2ba6, 0x20ba80da, 0x942b344a, 0xf99ae9f9, 0x4d0b5d69, 0x22f9529f,
15878 +
            0x9668e60f, 0xfbd93bbc, 0x4f488f2c, 0x2d326d44, 0x99a3d9d4, 0xf4120467, 0x4083b0f7,
15879 +
            0x2f71bf01, 0x9be00b91, 0xf651d622, 0x42c062b2, 0x29b5c9ce, 0x9d247d5e, 0xf095a0ed,
15880 +
            0x4404147d, 0x2bf61b8b, 0x9f67af1b, 0xf2d672a8, 0x4647c638, 0x3623b678, 0x82b202e8,
15881 +
            0xef03df5b, 0x5b926bcb, 0x3460643d, 0x80f1d0ad, 0xed400d1e, 0x59d1b98e, 0x32a412f2,
15882 +
            0x8635a662, 0xeb847bd1, 0x5f15cf41, 0x30e7c0b7, 0x84767427, 0xe9c7a994, 0x5d561d04,
15883 +
            0x3f2cff6c, 0x8bbd4bfc, 0xe60c964f, 0x529d22df, 0x3d6f2d29, 0x89fe99b9, 0xe44f440a,
15884 +
            0x50def09a, 0x3bab5be6, 0x8f3aef76, 0xe28b32c5, 0x561a8655, 0x39e889a3, 0x8d793d33,
15885 +
            0xe0c8e080, 0x54595410, 0x487a48a0, 0xfcebfc30, 0x915a2183, 0x25cb9513, 0x4a399ae5,
15886 +
            0xfea82e75, 0x9319f3c6, 0x27884756, 0x4cfdec2a, 0xf86c58ba, 0x95dd8509, 0x214c3199,
15887 +
            0x4ebe3e6f, 0xfa2f8aff, 0x979e574c, 0x230fe3dc, 0x417501b4, 0xf5e4b524, 0x98556897,
15888 +
            0x2cc4dc07, 0x4336d3f1, 0xf7a76761, 0x9a16bad2, 0x2e870e42, 0x45f2a53e, 0xf16311ae,
15889 +
            0x9cd2cc1d, 0x2843788d, 0x47b1777b, 0xf320c3eb, 0x9e911e58, 0x2a00aac8, 0x5a64da88,
15890 +
            0xeef56e18, 0x8344b3ab, 0x37d5073b, 0x582708cd, 0xecb6bc5d, 0x810761ee, 0x3596d57e,
15891 +
            0x5ee37e02, 0xea72ca92, 0x87c31721, 0x3352a3b1, 0x5ca0ac47, 0xe83118d7, 0x8580c564,
15892 +
            0x311171f4, 0x536b939c, 0xe7fa270c, 0x8a4bfabf, 0x3eda4e2f, 0x512841d9, 0xe5b9f549,
15893 +
            0x880828fa, 0x3c999c6a, 0x57ec3716, 0xe37d8386, 0x8ecc5e35, 0x3a5deaa5, 0x55afe553,
15894 +
            0xe13e51c3, 0x8c8f8c70, 0x381e38e0, 0x6c476cf0, 0xd8d6d860, 0xb56705d3, 0x01f6b143,
15895 +
            0x6e04beb5, 0xda950a25, 0xb724d796, 0x03b56306, 0x68c0c87a, 0xdc517cea, 0xb1e0a159,
15896 +
            0x057115c9, 0x6a831a3f, 0xde12aeaf, 0xb3a3731c, 0x0732c78c, 0x654825e4, 0xd1d99174,
15897 +
            0xbc684cc7, 0x08f9f857, 0x670bf7a1, 0xd39a4331, 0xbe2b9e82, 0x0aba2a12, 0x61cf816e,
15898 +
            0xd55e35fe, 0xb8efe84d, 0x0c7e5cdd, 0x638c532b, 0xd71de7bb, 0xbaac3a08, 0x0e3d8e98,
15899 +
            0x7e59fed8, 0xcac84a48, 0xa77997fb, 0x13e8236b, 0x7c1a2c9d, 0xc88b980d, 0xa53a45be,
15900 +
            0x11abf12e, 0x7ade5a52, 0xce4feec2, 0xa3fe3371, 0x176f87e1, 0x789d8817, 0xcc0c3c87,
15901 +
            0xa1bde134, 0x152c55a4, 0x7756b7cc, 0xc3c7035c, 0xae76deef, 0x1ae76a7f, 0x75156589,
15902 +
            0xc184d119, 0xac350caa, 0x18a4b83a, 0x73d11346, 0xc740a7d6, 0xaaf17a65, 0x1e60cef5,
15903 +
            0x7192c103, 0xc5037593, 0xa8b2a820, 0x1c231cb0,
15904 +
        ],
15905 +
        [
15906 +
            0x00000000, 0x41b401b4, 0x83680368, 0xc2dc02dc, 0xb6d306d3, 0xf7670767, 0x35bb05bb,
15907 +
            0x740f040f, 0xdda50da5, 0x9c110c11, 0x5ecd0ecd, 0x1f790f79, 0x6b760b76, 0x2ac20ac2,
15908 +
            0xe81e081e, 0xa9aa09aa, 0x0b491b49, 0x4afd1afd, 0x88211821, 0xc9951995, 0xbd9a1d9a,
15909 +
            0xfc2e1c2e, 0x3ef21ef2, 0x7f461f46, 0xd6ec16ec, 0x97581758, 0x55841584, 0x14301430,
15910 +
            0x603f103f, 0x218b118b, 0xe3571357, 0xa2e312e3, 0x16923692, 0x57263726, 0x95fa35fa,
15911 +
            0xd44e344e, 0xa0413041, 0xe1f531f5, 0x23293329, 0x629d329d, 0xcb373b37, 0x8a833a83,
15912 +
            0x485f385f, 0x09eb39eb, 0x7de43de4, 0x3c503c50, 0xfe8c3e8c, 0xbf383f38, 0x1ddb2ddb,
15913 +
            0x5c6f2c6f, 0x9eb32eb3, 0xdf072f07, 0xab082b08, 0xeabc2abc, 0x28602860, 0x69d429d4,
15914 +
            0xc07e207e, 0x81ca21ca, 0x43162316, 0x02a222a2, 0x76ad26ad, 0x37192719, 0xf5c525c5,
15915 +
            0xb4712471, 0x2d246d24, 0x6c906c90, 0xae4c6e4c, 0xeff86ff8, 0x9bf76bf7, 0xda436a43,
15916 +
            0x189f689f, 0x592b692b, 0xf0816081, 0xb1356135, 0x73e963e9, 0x325d625d, 0x46526652,
15917 +
            0x07e667e6, 0xc53a653a, 0x848e648e, 0x266d766d, 0x67d977d9, 0xa5057505, 0xe4b174b1,
15918 +
            0x90be70be, 0xd10a710a, 0x13d673d6, 0x52627262, 0xfbc87bc8, 0xba7c7a7c, 0x78a078a0,
15919 +
            0x39147914, 0x4d1b7d1b, 0x0caf7caf, 0xce737e73, 0x8fc77fc7, 0x3bb65bb6, 0x7a025a02,
15920 +
            0xb8de58de, 0xf96a596a, 0x8d655d65, 0xccd15cd1, 0x0e0d5e0d, 0x4fb95fb9, 0xe6135613,
15921 +
            0xa7a757a7, 0x657b557b, 0x24cf54cf, 0x50c050c0, 0x11745174, 0xd3a853a8, 0x921c521c,
15922 +
            0x30ff40ff, 0x714b414b, 0xb3974397, 0xf2234223, 0x862c462c, 0xc7984798, 0x05444544,
15923 +
            0x44f044f0, 0xed5a4d5a, 0xacee4cee, 0x6e324e32, 0x2f864f86, 0x5b894b89, 0x1a3d4a3d,
15924 +
            0xd8e148e1, 0x99554955, 0x5a48da48, 0x1bfcdbfc, 0xd920d920, 0x9894d894, 0xec9bdc9b,
15925 +
            0xad2fdd2f, 0x6ff3dff3, 0x2e47de47, 0x87edd7ed, 0xc659d659, 0x0485d485, 0x4531d531,
15926 +
            0x313ed13e, 0x708ad08a, 0xb256d256, 0xf3e2d3e2, 0x5101c101, 0x10b5c0b5, 0xd269c269,
15927 +
            0x93ddc3dd, 0xe7d2c7d2, 0xa666c666, 0x64bac4ba, 0x250ec50e, 0x8ca4cca4, 0xcd10cd10,
15928 +
            0x0fcccfcc, 0x4e78ce78, 0x3a77ca77, 0x7bc3cbc3, 0xb91fc91f, 0xf8abc8ab, 0x4cdaecda,
15929 +
            0x0d6eed6e, 0xcfb2efb2, 0x8e06ee06, 0xfa09ea09, 0xbbbdebbd, 0x7961e961, 0x38d5e8d5,
15930 +
            0x917fe17f, 0xd0cbe0cb, 0x1217e217, 0x53a3e3a3, 0x27ace7ac, 0x6618e618, 0xa4c4e4c4,
15931 +
            0xe570e570, 0x4793f793, 0x0627f627, 0xc4fbf4fb, 0x854ff54f, 0xf140f140, 0xb0f4f0f4,
15932 +
            0x7228f228, 0x339cf39c, 0x9a36fa36, 0xdb82fb82, 0x195ef95e, 0x58eaf8ea, 0x2ce5fce5,
15933 +
            0x6d51fd51, 0xaf8dff8d, 0xee39fe39, 0x776cb76c, 0x36d8b6d8, 0xf404b404, 0xb5b0b5b0,
15934 +
            0xc1bfb1bf, 0x800bb00b, 0x42d7b2d7, 0x0363b363, 0xaac9bac9, 0xeb7dbb7d, 0x29a1b9a1,
15935 +
            0x6815b815, 0x1c1abc1a, 0x5daebdae, 0x9f72bf72, 0xdec6bec6, 0x7c25ac25, 0x3d91ad91,
15936 +
            0xff4daf4d, 0xbef9aef9, 0xcaf6aaf6, 0x8b42ab42, 0x499ea99e, 0x082aa82a, 0xa180a180,
15937 +
            0xe034a034, 0x22e8a2e8, 0x635ca35c, 0x1753a753, 0x56e7a6e7, 0x943ba43b, 0xd58fa58f,
15938 +
            0x61fe81fe, 0x204a804a, 0xe2968296, 0xa3228322, 0xd72d872d, 0x96998699, 0x54458445,
15939 +
            0x15f185f1, 0xbc5b8c5b, 0xfdef8def, 0x3f338f33, 0x7e878e87, 0x0a888a88, 0x4b3c8b3c,
15940 +
            0x89e089e0, 0xc8548854, 0x6ab79ab7, 0x2b039b03, 0xe9df99df, 0xa86b986b, 0xdc649c64,
15941 +
            0x9dd09dd0, 0x5f0c9f0c, 0x1eb89eb8, 0xb7129712, 0xf6a696a6, 0x347a947a, 0x75ce95ce,
15942 +
            0x01c191c1, 0x40759075, 0x82a992a9, 0xc31d931d,
15943 +
        ],
15944 +
        [
15945 +
            0x00000000, 0x51010001, 0xa2020002, 0xf3030003, 0xf4070007, 0xa5060006, 0x56050005,
15946 +
            0x07040004, 0x580d000d, 0x090c000c, 0xfa0f000f, 0xab0e000e, 0xac0a000a, 0xfd0b000b,
15947 +
            0x0e080008, 0x5f090009, 0xb01a001a, 0xe11b001b, 0x12180018, 0x43190019, 0x441d001d,
15948 +
            0x151c001c, 0xe61f001f, 0xb71e001e, 0xe8170017, 0xb9160016, 0x4a150015, 0x1b140014,
15949 +
            0x1c100010, 0x4d110011, 0xbe120012, 0xef130013, 0xd0370037, 0x81360036, 0x72350035,
15950 +
            0x23340034, 0x24300030, 0x75310031, 0x86320032, 0xd7330033, 0x883a003a, 0xd93b003b,
15951 +
            0x2a380038, 0x7b390039, 0x7c3d003d, 0x2d3c003c, 0xde3f003f, 0x8f3e003e, 0x602d002d,
15952 +
            0x312c002c, 0xc22f002f, 0x932e002e, 0x942a002a, 0xc52b002b, 0x36280028, 0x67290029,
15953 +
            0x38200020, 0x69210021, 0x9a220022, 0xcb230023, 0xcc270027, 0x9d260026, 0x6e250025,
15954 +
            0x3f240024, 0x106d006d, 0x416c006c, 0xb26f006f, 0xe36e006e, 0xe46a006a, 0xb56b006b,
15955 +
            0x46680068, 0x17690069, 0x48600060, 0x19610061, 0xea620062, 0xbb630063, 0xbc670067,
15956 +
            0xed660066, 0x1e650065, 0x4f640064, 0xa0770077, 0xf1760076, 0x02750075, 0x53740074,
15957 +
            0x54700070, 0x05710071, 0xf6720072, 0xa7730073, 0xf87a007a, 0xa97b007b, 0x5a780078,
15958 +
            0x0b790079, 0x0c7d007d, 0x5d7c007c, 0xae7f007f, 0xff7e007e, 0xc05a005a, 0x915b005b,
15959 +
            0x62580058, 0x33590059, 0x345d005d, 0x655c005c, 0x965f005f, 0xc75e005e, 0x98570057,
15960 +
            0xc9560056, 0x3a550055, 0x6b540054, 0x6c500050, 0x3d510051, 0xce520052, 0x9f530053,
15961 +
            0x70400040, 0x21410041, 0xd2420042, 0x83430043, 0x84470047, 0xd5460046, 0x26450045,
15962 +
            0x77440044, 0x284d004d, 0x794c004c, 0x8a4f004f, 0xdb4e004e, 0xdc4a004a, 0x8d4b004b,
15963 +
            0x7e480048, 0x2f490049, 0x20da00da, 0x71db00db, 0x82d800d8, 0xd3d900d9, 0xd4dd00dd,
15964 +
            0x85dc00dc, 0x76df00df, 0x27de00de, 0x78d700d7, 0x29d600d6, 0xdad500d5, 0x8bd400d4,
15965 +
            0x8cd000d0, 0xddd100d1, 0x2ed200d2, 0x7fd300d3, 0x90c000c0, 0xc1c100c1, 0x32c200c2,
15966 +
            0x63c300c3, 0x64c700c7, 0x35c600c6, 0xc6c500c5, 0x97c400c4, 0xc8cd00cd, 0x99cc00cc,
15967 +
            0x6acf00cf, 0x3bce00ce, 0x3cca00ca, 0x6dcb00cb, 0x9ec800c8, 0xcfc900c9, 0xf0ed00ed,
15968 +
            0xa1ec00ec, 0x52ef00ef, 0x03ee00ee, 0x04ea00ea, 0x55eb00eb, 0xa6e800e8, 0xf7e900e9,
15969 +
            0xa8e000e0, 0xf9e100e1, 0x0ae200e2, 0x5be300e3, 0x5ce700e7, 0x0de600e6, 0xfee500e5,
15970 +
            0xafe400e4, 0x40f700f7, 0x11f600f6, 0xe2f500f5, 0xb3f400f4, 0xb4f000f0, 0xe5f100f1,
15971 +
            0x16f200f2, 0x47f300f3, 0x18fa00fa, 0x49fb00fb, 0xbaf800f8, 0xebf900f9, 0xecfd00fd,
15972 +
            0xbdfc00fc, 0x4eff00ff, 0x1ffe00fe, 0x30b700b7, 0x61b600b6, 0x92b500b5, 0xc3b400b4,
15973 +
            0xc4b000b0, 0x95b100b1, 0x66b200b2, 0x37b300b3, 0x68ba00ba, 0x39bb00bb, 0xcab800b8,
15974 +
            0x9bb900b9, 0x9cbd00bd, 0xcdbc00bc, 0x3ebf00bf, 0x6fbe00be, 0x80ad00ad, 0xd1ac00ac,
15975 +
            0x22af00af, 0x73ae00ae, 0x74aa00aa, 0x25ab00ab, 0xd6a800a8, 0x87a900a9, 0xd8a000a0,
15976 +
            0x89a100a1, 0x7aa200a2, 0x2ba300a3, 0x2ca700a7, 0x7da600a6, 0x8ea500a5, 0xdfa400a4,
15977 +
            0xe0800080, 0xb1810081, 0x42820082, 0x13830083, 0x14870087, 0x45860086, 0xb6850085,
15978 +
            0xe7840084, 0xb88d008d, 0xe98c008c, 0x1a8f008f, 0x4b8e008e, 0x4c8a008a, 0x1d8b008b,
15979 +
            0xee880088, 0xbf890089, 0x509a009a, 0x019b009b, 0xf2980098, 0xa3990099, 0xa49d009d,
15980 +
            0xf59c009c, 0x069f009f, 0x579e009e, 0x08970097, 0x59960096, 0xaa950095, 0xfb940094,
15981 +
            0xfc900090, 0xad910091, 0x5e920092, 0x0f930093,
15982 +
        ],
15983 +
        [
15984 +
            0x00000000, 0x90c00001, 0x91830001, 0x01430000, 0x93050001, 0x03c50000, 0x02860000,
15985 +
            0x92460001, 0x96090001, 0x06c90000, 0x078a0000, 0x974a0001, 0x050c0000, 0x95cc0001,
15986 +
            0x948f0001, 0x044f0000, 0x9c110001, 0x0cd10000, 0x0d920000, 0x9d520001, 0x0f140000,
15987 +
            0x9fd40001, 0x9e970001, 0x0e570000, 0x0a180000, 0x9ad80001, 0x9b9b0001, 0x0b5b0000,
15988 +
            0x991d0001, 0x09dd0000, 0x089e0000, 0x985e0001, 0x88210001, 0x18e10000, 0x19a20000,
15989 +
            0x89620001, 0x1b240000, 0x8be40001, 0x8aa70001, 0x1a670000, 0x1e280000, 0x8ee80001,
15990 +
            0x8fab0001, 0x1f6b0000, 0x8d2d0001, 0x1ded0000, 0x1cae0000, 0x8c6e0001, 0x14300000,
15991 +
            0x84f00001, 0x85b30001, 0x15730000, 0x87350001, 0x17f50000, 0x16b60000, 0x86760001,
15992 +
            0x82390001, 0x12f90000, 0x13ba0000, 0x837a0001, 0x113c0000, 0x81fc0001, 0x80bf0001,
15993 +
            0x107f0000, 0xa0410001, 0x30810000, 0x31c20000, 0xa1020001, 0x33440000, 0xa3840001,
15994 +
            0xa2c70001, 0x32070000, 0x36480000, 0xa6880001, 0xa7cb0001, 0x370b0000, 0xa54d0001,
15995 +
            0x358d0000, 0x34ce0000, 0xa40e0001, 0x3c500000, 0xac900001, 0xadd30001, 0x3d130000,
15996 +
            0xaf550001, 0x3f950000, 0x3ed60000, 0xae160001, 0xaa590001, 0x3a990000, 0x3bda0000,
15997 +
            0xab1a0001, 0x395c0000, 0xa99c0001, 0xa8df0001, 0x381f0000, 0x28600000, 0xb8a00001,
15998 +
            0xb9e30001, 0x29230000, 0xbb650001, 0x2ba50000, 0x2ae60000, 0xba260001, 0xbe690001,
15999 +
            0x2ea90000, 0x2fea0000, 0xbf2a0001, 0x2d6c0000, 0xbdac0001, 0xbcef0001, 0x2c2f0000,
16000 +
            0xb4710001, 0x24b10000, 0x25f20000, 0xb5320001, 0x27740000, 0xb7b40001, 0xb6f70001,
16001 +
            0x26370000, 0x22780000, 0xb2b80001, 0xb3fb0001, 0x233b0000, 0xb17d0001, 0x21bd0000,
16002 +
            0x20fe0000, 0xb03e0001, 0xf0810001, 0x60410000, 0x61020000, 0xf1c20001, 0x63840000,
16003 +
            0xf3440001, 0xf2070001, 0x62c70000, 0x66880000, 0xf6480001, 0xf70b0001, 0x67cb0000,
16004 +
            0xf58d0001, 0x654d0000, 0x640e0000, 0xf4ce0001, 0x6c900000, 0xfc500001, 0xfd130001,
16005 +
            0x6dd30000, 0xff950001, 0x6f550000, 0x6e160000, 0xfed60001, 0xfa990001, 0x6a590000,
16006 +
            0x6b1a0000, 0xfbda0001, 0x699c0000, 0xf95c0001, 0xf81f0001, 0x68df0000, 0x78a00000,
16007 +
            0xe8600001, 0xe9230001, 0x79e30000, 0xeba50001, 0x7b650000, 0x7a260000, 0xeae60001,
16008 +
            0xeea90001, 0x7e690000, 0x7f2a0000, 0xefea0001, 0x7dac0000, 0xed6c0001, 0xec2f0001,
16009 +
            0x7cef0000, 0xe4b10001, 0x74710000, 0x75320000, 0xe5f20001, 0x77b40000, 0xe7740001,
16010 +
            0xe6370001, 0x76f70000, 0x72b80000, 0xe2780001, 0xe33b0001, 0x73fb0000, 0xe1bd0001,
16011 +
            0x717d0000, 0x703e0000, 0xe0fe0001, 0x50c00000, 0xc0000001, 0xc1430001, 0x51830000,
16012 +
            0xc3c50001, 0x53050000, 0x52460000, 0xc2860001, 0xc6c90001, 0x56090000, 0x574a0000,
16013 +
            0xc78a0001, 0x55cc0000, 0xc50c0001, 0xc44f0001, 0x548f0000, 0xccd10001, 0x5c110000,
16014 +
            0x5d520000, 0xcd920001, 0x5fd40000, 0xcf140001, 0xce570001, 0x5e970000, 0x5ad80000,
16015 +
            0xca180001, 0xcb5b0001, 0x5b9b0000, 0xc9dd0001, 0x591d0000, 0x585e0000, 0xc89e0001,
16016 +
            0xd8e10001, 0x48210000, 0x49620000, 0xd9a20001, 0x4be40000, 0xdb240001, 0xda670001,
16017 +
            0x4aa70000, 0x4ee80000, 0xde280001, 0xdf6b0001, 0x4fab0000, 0xdded0001, 0x4d2d0000,
16018 +
            0x4c6e0000, 0xdcae0001, 0x44f00000, 0xd4300001, 0xd5730001, 0x45b30000, 0xd7f50001,
16019 +
            0x47350000, 0x46760000, 0xd6b60001, 0xd2f90001, 0x42390000, 0x437a0000, 0xd3ba0001,
16020 +
            0x41fc0000, 0xd13c0001, 0xd07f0001, 0x40bf0000,
16021 +
        ],
16022 +
        [
16023 +
            0x00000000, 0x9001c101, 0x90008201, 0x00014300, 0x90020401, 0x0003c500, 0x00028600,
16024 +
            0x90034701, 0x90070801, 0x0006c900, 0x00078a00, 0x90064b01, 0x00050c00, 0x9004cd01,
16025 +
            0x90058e01, 0x00044f00, 0x900d1001, 0x000cd100, 0x000d9200, 0x900c5301, 0x000f1400,
16026 +
            0x900ed501, 0x900f9601, 0x000e5700, 0x000a1800, 0x900bd901, 0x900a9a01, 0x000b5b00,
16027 +
            0x90081c01, 0x0009dd00, 0x00089e00, 0x90095f01, 0x90192001, 0x0018e100, 0x0019a200,
16028 +
            0x90186301, 0x001b2400, 0x901ae501, 0x901ba601, 0x001a6700, 0x001e2800, 0x901fe901,
16029 +
            0x901eaa01, 0x001f6b00, 0x901c2c01, 0x001ded00, 0x001cae00, 0x901d6f01, 0x00143000,
16030 +
            0x9015f101, 0x9014b201, 0x00157300, 0x90163401, 0x0017f500, 0x0016b600, 0x90177701,
16031 +
            0x90133801, 0x0012f900, 0x0013ba00, 0x90127b01, 0x00113c00, 0x9010fd01, 0x9011be01,
16032 +
            0x00107f00, 0x90314001, 0x00308100, 0x0031c200, 0x90300301, 0x00334400, 0x90328501,
16033 +
            0x9033c601, 0x00320700, 0x00364800, 0x90378901, 0x9036ca01, 0x00370b00, 0x90344c01,
16034 +
            0x00358d00, 0x0034ce00, 0x90350f01, 0x003c5000, 0x903d9101, 0x903cd201, 0x003d1300,
16035 +
            0x903e5401, 0x003f9500, 0x003ed600, 0x903f1701, 0x903b5801, 0x003a9900, 0x003bda00,
16036 +
            0x903a1b01, 0x00395c00, 0x90389d01, 0x9039de01, 0x00381f00, 0x00286000, 0x9029a101,
16037 +
            0x9028e201, 0x00292300, 0x902a6401, 0x002ba500, 0x002ae600, 0x902b2701, 0x902f6801,
16038 +
            0x002ea900, 0x002fea00, 0x902e2b01, 0x002d6c00, 0x902cad01, 0x902dee01, 0x002c2f00,
16039 +
            0x90257001, 0x0024b100, 0x0025f200, 0x90243301, 0x00277400, 0x9026b501, 0x9027f601,
16040 +
            0x00263700, 0x00227800, 0x9023b901, 0x9022fa01, 0x00233b00, 0x90207c01, 0x0021bd00,
16041 +
            0x0020fe00, 0x90213f01, 0x90618001, 0x00604100, 0x00610200, 0x9060c301, 0x00638400,
16042 +
            0x90624501, 0x90630601, 0x0062c700, 0x00668800, 0x90674901, 0x90660a01, 0x0067cb00,
16043 +
            0x90648c01, 0x00654d00, 0x00640e00, 0x9065cf01, 0x006c9000, 0x906d5101, 0x906c1201,
16044 +
            0x006dd300, 0x906e9401, 0x006f5500, 0x006e1600, 0x906fd701, 0x906b9801, 0x006a5900,
16045 +
            0x006b1a00, 0x906adb01, 0x00699c00, 0x90685d01, 0x90691e01, 0x0068df00, 0x0078a000,
16046 +
            0x90796101, 0x90782201, 0x0079e300, 0x907aa401, 0x007b6500, 0x007a2600, 0x907be701,
16047 +
            0x907fa801, 0x007e6900, 0x007f2a00, 0x907eeb01, 0x007dac00, 0x907c6d01, 0x907d2e01,
16048 +
            0x007cef00, 0x9075b001, 0x00747100, 0x00753200, 0x9074f301, 0x0077b400, 0x90767501,
16049 +
            0x90773601, 0x0076f700, 0x0072b800, 0x90737901, 0x90723a01, 0x0073fb00, 0x9070bc01,
16050 +
            0x00717d00, 0x00703e00, 0x9071ff01, 0x0050c000, 0x90510101, 0x90504201, 0x00518300,
16051 +
            0x9052c401, 0x00530500, 0x00524600, 0x90538701, 0x9057c801, 0x00560900, 0x00574a00,
16052 +
            0x90568b01, 0x0055cc00, 0x90540d01, 0x90554e01, 0x00548f00, 0x905dd001, 0x005c1100,
16053 +
            0x005d5200, 0x905c9301, 0x005fd400, 0x905e1501, 0x905f5601, 0x005e9700, 0x005ad800,
16054 +
            0x905b1901, 0x905a5a01, 0x005b9b00, 0x9058dc01, 0x00591d00, 0x00585e00, 0x90599f01,
16055 +
            0x9049e001, 0x00482100, 0x00496200, 0x9048a301, 0x004be400, 0x904a2501, 0x904b6601,
16056 +
            0x004aa700, 0x004ee800, 0x904f2901, 0x904e6a01, 0x004fab00, 0x904cec01, 0x004d2d00,
16057 +
            0x004c6e00, 0x904daf01, 0x0044f000, 0x90453101, 0x90447201, 0x0045b300, 0x9046f401,
16058 +
            0x00473500, 0x00467600, 0x9047b701, 0x9043f801, 0x00423900, 0x00437a00, 0x9042bb01,
16059 +
            0x0041fc00, 0x90403d01, 0x90417e01, 0x0040bf00,
16060 +
        ],
16061 +
        [
16062 +
            0x00000000, 0x900100c0, 0x90010183, 0x00000143, 0x90010305, 0x000003c5, 0x00000286,
16063 +
            0x90010246, 0x90010609, 0x000006c9, 0x0000078a, 0x9001074a, 0x0000050c, 0x900105cc,
16064 +
            0x9001048f, 0x0000044f, 0x90010c11, 0x00000cd1, 0x00000d92, 0x90010d52, 0x00000f14,
16065 +
            0x90010fd4, 0x90010e97, 0x00000e57, 0x00000a18, 0x90010ad8, 0x90010b9b, 0x00000b5b,
16066 +
            0x9001091d, 0x000009dd, 0x0000089e, 0x9001085e, 0x90011821, 0x000018e1, 0x000019a2,
16067 +
            0x90011962, 0x00001b24, 0x90011be4, 0x90011aa7, 0x00001a67, 0x00001e28, 0x90011ee8,
16068 +
            0x90011fab, 0x00001f6b, 0x90011d2d, 0x00001ded, 0x00001cae, 0x90011c6e, 0x00001430,
16069 +
            0x900114f0, 0x900115b3, 0x00001573, 0x90011735, 0x000017f5, 0x000016b6, 0x90011676,
16070 +
            0x90011239, 0x000012f9, 0x000013ba, 0x9001137a, 0x0000113c, 0x900111fc, 0x900110bf,
16071 +
            0x0000107f, 0x90013041, 0x00003081, 0x000031c2, 0x90013102, 0x00003344, 0x90013384,
16072 +
            0x900132c7, 0x00003207, 0x00003648, 0x90013688, 0x900137cb, 0x0000370b, 0x9001354d,
16073 +
            0x0000358d, 0x000034ce, 0x9001340e, 0x00003c50, 0x90013c90, 0x90013dd3, 0x00003d13,
16074 +
            0x90013f55, 0x00003f95, 0x00003ed6, 0x90013e16, 0x90013a59, 0x00003a99, 0x00003bda,
16075 +
            0x90013b1a, 0x0000395c, 0x9001399c, 0x900138df, 0x0000381f, 0x00002860, 0x900128a0,
16076 +
            0x900129e3, 0x00002923, 0x90012b65, 0x00002ba5, 0x00002ae6, 0x90012a26, 0x90012e69,
16077 +
            0x00002ea9, 0x00002fea, 0x90012f2a, 0x00002d6c, 0x90012dac, 0x90012cef, 0x00002c2f,
16078 +
            0x90012471, 0x000024b1, 0x000025f2, 0x90012532, 0x00002774, 0x900127b4, 0x900126f7,
16079 +
            0x00002637, 0x00002278, 0x900122b8, 0x900123fb, 0x0000233b, 0x9001217d, 0x000021bd,
16080 +
            0x000020fe, 0x9001203e, 0x90016081, 0x00006041, 0x00006102, 0x900161c2, 0x00006384,
16081 +
            0x90016344, 0x90016207, 0x000062c7, 0x00006688, 0x90016648, 0x9001670b, 0x000067cb,
16082 +
            0x9001658d, 0x0000654d, 0x0000640e, 0x900164ce, 0x00006c90, 0x90016c50, 0x90016d13,
16083 +
            0x00006dd3, 0x90016f95, 0x00006f55, 0x00006e16, 0x90016ed6, 0x90016a99, 0x00006a59,
16084 +
            0x00006b1a, 0x90016bda, 0x0000699c, 0x9001695c, 0x9001681f, 0x000068df, 0x000078a0,
16085 +
            0x90017860, 0x90017923, 0x000079e3, 0x90017ba5, 0x00007b65, 0x00007a26, 0x90017ae6,
16086 +
            0x90017ea9, 0x00007e69, 0x00007f2a, 0x90017fea, 0x00007dac, 0x90017d6c, 0x90017c2f,
16087 +
            0x00007cef, 0x900174b1, 0x00007471, 0x00007532, 0x900175f2, 0x000077b4, 0x90017774,
16088 +
            0x90017637, 0x000076f7, 0x000072b8, 0x90017278, 0x9001733b, 0x000073fb, 0x900171bd,
16089 +
            0x0000717d, 0x0000703e, 0x900170fe, 0x000050c0, 0x90015000, 0x90015143, 0x00005183,
16090 +
            0x900153c5, 0x00005305, 0x00005246, 0x90015286, 0x900156c9, 0x00005609, 0x0000574a,
16091 +
            0x9001578a, 0x000055cc, 0x9001550c, 0x9001544f, 0x0000548f, 0x90015cd1, 0x00005c11,
16092 +
            0x00005d52, 0x90015d92, 0x00005fd4, 0x90015f14, 0x90015e57, 0x00005e97, 0x00005ad8,
16093 +
            0x90015a18, 0x90015b5b, 0x00005b9b, 0x900159dd, 0x0000591d, 0x0000585e, 0x9001589e,
16094 +
            0x900148e1, 0x00004821, 0x00004962, 0x900149a2, 0x00004be4, 0x90014b24, 0x90014a67,
16095 +
            0x00004aa7, 0x00004ee8, 0x90014e28, 0x90014f6b, 0x00004fab, 0x90014ded, 0x00004d2d,
16096 +
            0x00004c6e, 0x90014cae, 0x000044f0, 0x90014430, 0x90014573, 0x000045b3, 0x900147f5,
16097 +
            0x00004735, 0x00004676, 0x900146b6, 0x900142f9, 0x00004239, 0x0000437a, 0x900143ba,
16098 +
            0x000041fc, 0x9001413c, 0x9001407f, 0x000040bf,
16099 +
        ],
16100 +
        [
16101 +
            0x00000000, 0x6c90c100, 0xd9218200, 0xb5b14300, 0x02400403, 0x6ed0c503, 0xdb618603,
16102 +
            0xb7f14703, 0x04800806, 0x6810c906, 0xdda18a06, 0xb1314b06, 0x06c00c05, 0x6a50cd05,
16103 +
            0xdfe18e05, 0xb3714f05, 0x0900100c, 0x6590d10c, 0xd021920c, 0xbcb1530c, 0x0b40140f,
16104 +
            0x67d0d50f, 0xd261960f, 0xbef1570f, 0x0d80180a, 0x6110d90a, 0xd4a19a0a, 0xb8315b0a,
16105 +
            0x0fc01c09, 0x6350dd09, 0xd6e19e09, 0xba715f09, 0x12002018, 0x7e90e118, 0xcb21a218,
16106 +
            0xa7b16318, 0x1040241b, 0x7cd0e51b, 0xc961a61b, 0xa5f1671b, 0x1680281e, 0x7a10e91e,
16107 +
            0xcfa1aa1e, 0xa3316b1e, 0x14c02c1d, 0x7850ed1d, 0xcde1ae1d, 0xa1716f1d, 0x1b003014,
16108 +
            0x7790f114, 0xc221b214, 0xaeb17314, 0x19403417, 0x75d0f517, 0xc061b617, 0xacf17717,
16109 +
            0x1f803812, 0x7310f912, 0xc6a1ba12, 0xaa317b12, 0x1dc03c11, 0x7150fd11, 0xc4e1be11,
16110 +
            0xa8717f11, 0x24004030, 0x48908130, 0xfd21c230, 0x91b10330, 0x26404433, 0x4ad08533,
16111 +
            0xff61c633, 0x93f10733, 0x20804836, 0x4c108936, 0xf9a1ca36, 0x95310b36, 0x22c04c35,
16112 +
            0x4e508d35, 0xfbe1ce35, 0x97710f35, 0x2d00503c, 0x4190913c, 0xf421d23c, 0x98b1133c,
16113 +
            0x2f40543f, 0x43d0953f, 0xf661d63f, 0x9af1173f, 0x2980583a, 0x4510993a, 0xf0a1da3a,
16114 +
            0x9c311b3a, 0x2bc05c39, 0x47509d39, 0xf2e1de39, 0x9e711f39, 0x36006028, 0x5a90a128,
16115 +
            0xef21e228, 0x83b12328, 0x3440642b, 0x58d0a52b, 0xed61e62b, 0x81f1272b, 0x3280682e,
16116 +
            0x5e10a92e, 0xeba1ea2e, 0x87312b2e, 0x30c06c2d, 0x5c50ad2d, 0xe9e1ee2d, 0x85712f2d,
16117 +
            0x3f007024, 0x5390b124, 0xe621f224, 0x8ab13324, 0x3d407427, 0x51d0b527, 0xe461f627,
16118 +
            0x88f13727, 0x3b807822, 0x5710b922, 0xe2a1fa22, 0x8e313b22, 0x39c07c21, 0x5550bd21,
16119 +
            0xe0e1fe21, 0x8c713f21, 0x48008060, 0x24904160, 0x91210260, 0xfdb1c360, 0x4a408463,
16120 +
            0x26d04563, 0x93610663, 0xfff1c763, 0x4c808866, 0x20104966, 0x95a10a66, 0xf931cb66,
16121 +
            0x4ec08c65, 0x22504d65, 0x97e10e65, 0xfb71cf65, 0x4100906c, 0x2d90516c, 0x9821126c,
16122 +
            0xf4b1d36c, 0x4340946f, 0x2fd0556f, 0x9a61166f, 0xf6f1d76f, 0x4580986a, 0x2910596a,
16123 +
            0x9ca11a6a, 0xf031db6a, 0x47c09c69, 0x2b505d69, 0x9ee11e69, 0xf271df69, 0x5a00a078,
16124 +
            0x36906178, 0x83212278, 0xefb1e378, 0x5840a47b, 0x34d0657b, 0x8161267b, 0xedf1e77b,
16125 +
            0x5e80a87e, 0x3210697e, 0x87a12a7e, 0xeb31eb7e, 0x5cc0ac7d, 0x30506d7d, 0x85e12e7d,
16126 +
            0xe971ef7d, 0x5300b074, 0x3f907174, 0x8a213274, 0xe6b1f374, 0x5140b477, 0x3dd07577,
16127 +
            0x88613677, 0xe4f1f777, 0x5780b872, 0x3b107972, 0x8ea13a72, 0xe231fb72, 0x55c0bc71,
16128 +
            0x39507d71, 0x8ce13e71, 0xe071ff71, 0x6c00c050, 0x00900150, 0xb5214250, 0xd9b18350,
16129 +
            0x6e40c453, 0x02d00553, 0xb7614653, 0xdbf18753, 0x6880c856, 0x04100956, 0xb1a14a56,
16130 +
            0xdd318b56, 0x6ac0cc55, 0x06500d55, 0xb3e14e55, 0xdf718f55, 0x6500d05c, 0x0990115c,
16131 +
            0xbc21525c, 0xd0b1935c, 0x6740d45f, 0x0bd0155f, 0xbe61565f, 0xd2f1975f, 0x6180d85a,
16132 +
            0x0d10195a, 0xb8a15a5a, 0xd4319b5a, 0x63c0dc59, 0x0f501d59, 0xbae15e59, 0xd6719f59,
16133 +
            0x7e00e048, 0x12902148, 0xa7216248, 0xcbb1a348, 0x7c40e44b, 0x10d0254b, 0xa561664b,
16134 +
            0xc9f1a74b, 0x7a80e84e, 0x1610294e, 0xa3a16a4e, 0xcf31ab4e, 0x78c0ec4d, 0x14502d4d,
16135 +
            0xa1e16e4d, 0xcd71af4d, 0x7700f044, 0x1b903144, 0xae217244, 0xc2b1b344, 0x7540f447,
16136 +
            0x19d03547, 0xac617647, 0xc0f1b747, 0x7380f842, 0x1f103942, 0xaaa17a42, 0xc631bb42,
16137 +
            0x71c0fc41, 0x1d503d41, 0xa8e17e41, 0xc471bf41,
16138 +
        ],
16139 +
    ];
16140 +
16141 +
    pub static CRC32_CKSUM_TABLE: [[u32; 256]; 16] = [
16142 +
        [
16143 +
            0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2,
16144 +
            0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3,
16145 +
            0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
16146 +
            0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
16147 +
            0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e,
16148 +
            0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef,
16149 +
            0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90,
16150 +
            0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
16151 +
            0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a,
16152 +
            0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c,
16153 +
            0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13,
16154 +
            0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
16155 +
            0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
16156 +
            0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20,
16157 +
            0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f,
16158 +
            0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
16159 +
            0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055,
16160 +
            0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
16161 +
            0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632,
16162 +
            0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
16163 +
            0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0,
16164 +
            0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91,
16165 +
            0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
16166 +
            0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
16167 +
            0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604,
16168 +
            0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615,
16169 +
            0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a,
16170 +
            0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
16171 +
            0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f,
16172 +
            0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e,
16173 +
            0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651,
16174 +
            0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
16175 +
            0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
16176 +
            0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa,
16177 +
            0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5,
16178 +
            0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
16179 +
            0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4,
16180 +
        ],
16181 +
        [
16182 +
            0x00000000, 0xd219c1dc, 0xa0f29e0f, 0x72eb5fd3, 0x452421a9, 0x973de075, 0xe5d6bfa6,
16183 +
            0x37cf7e7a, 0x8a484352, 0x5851828e, 0x2abadd5d, 0xf8a31c81, 0xcf6c62fb, 0x1d75a327,
16184 +
            0x6f9efcf4, 0xbd873d28, 0x10519b13, 0xc2485acf, 0xb0a3051c, 0x62bac4c0, 0x5575baba,
16185 +
            0x876c7b66, 0xf58724b5, 0x279ee569, 0x9a19d841, 0x4800199d, 0x3aeb464e, 0xe8f28792,
16186 +
            0xdf3df9e8, 0x0d243834, 0x7fcf67e7, 0xadd6a63b, 0x20a33626, 0xf2baf7fa, 0x8051a829,
16187 +
            0x524869f5, 0x6587178f, 0xb79ed653, 0xc5758980, 0x176c485c, 0xaaeb7574, 0x78f2b4a8,
16188 +
            0x0a19eb7b, 0xd8002aa7, 0xefcf54dd, 0x3dd69501, 0x4f3dcad2, 0x9d240b0e, 0x30f2ad35,
16189 +
            0xe2eb6ce9, 0x9000333a, 0x4219f2e6, 0x75d68c9c, 0xa7cf4d40, 0xd5241293, 0x073dd34f,
16190 +
            0xbabaee67, 0x68a32fbb, 0x1a487068, 0xc851b1b4, 0xff9ecfce, 0x2d870e12, 0x5f6c51c1,
16191 +
            0x8d75901d, 0x41466c4c, 0x935fad90, 0xe1b4f243, 0x33ad339f, 0x04624de5, 0xd67b8c39,
16192 +
            0xa490d3ea, 0x76891236, 0xcb0e2f1e, 0x1917eec2, 0x6bfcb111, 0xb9e570cd, 0x8e2a0eb7,
16193 +
            0x5c33cf6b, 0x2ed890b8, 0xfcc15164, 0x5117f75f, 0x830e3683, 0xf1e56950, 0x23fca88c,
16194 +
            0x1433d6f6, 0xc62a172a, 0xb4c148f9, 0x66d88925, 0xdb5fb40d, 0x094675d1, 0x7bad2a02,
16195 +
            0xa9b4ebde, 0x9e7b95a4, 0x4c625478, 0x3e890bab, 0xec90ca77, 0x61e55a6a, 0xb3fc9bb6,
16196 +
            0xc117c465, 0x130e05b9, 0x24c17bc3, 0xf6d8ba1f, 0x8433e5cc, 0x562a2410, 0xebad1938,
16197 +
            0x39b4d8e4, 0x4b5f8737, 0x994646eb, 0xae893891, 0x7c90f94d, 0x0e7ba69e, 0xdc626742,
16198 +
            0x71b4c179, 0xa3ad00a5, 0xd1465f76, 0x035f9eaa, 0x3490e0d0, 0xe689210c, 0x94627edf,
16199 +
            0x467bbf03, 0xfbfc822b, 0x29e543f7, 0x5b0e1c24, 0x8917ddf8, 0xbed8a382, 0x6cc1625e,
16200 +
            0x1e2a3d8d, 0xcc33fc51, 0x828cd898, 0x50951944, 0x227e4697, 0xf067874b, 0xc7a8f931,
16201 +
            0x15b138ed, 0x675a673e, 0xb543a6e2, 0x08c49bca, 0xdadd5a16, 0xa83605c5, 0x7a2fc419,
16202 +
            0x4de0ba63, 0x9ff97bbf, 0xed12246c, 0x3f0be5b0, 0x92dd438b, 0x40c48257, 0x322fdd84,
16203 +
            0xe0361c58, 0xd7f96222, 0x05e0a3fe, 0x770bfc2d, 0xa5123df1, 0x189500d9, 0xca8cc105,
16204 +
            0xb8679ed6, 0x6a7e5f0a, 0x5db12170, 0x8fa8e0ac, 0xfd43bf7f, 0x2f5a7ea3, 0xa22feebe,
16205 +
            0x70362f62, 0x02dd70b1, 0xd0c4b16d, 0xe70bcf17, 0x35120ecb, 0x47f95118, 0x95e090c4,
16206 +
            0x2867adec, 0xfa7e6c30, 0x889533e3, 0x5a8cf23f, 0x6d438c45, 0xbf5a4d99, 0xcdb1124a,
16207 +
            0x1fa8d396, 0xb27e75ad, 0x6067b471, 0x128ceba2, 0xc0952a7e, 0xf75a5404, 0x254395d8,
16208 +
            0x57a8ca0b, 0x85b10bd7, 0x383636ff, 0xea2ff723, 0x98c4a8f0, 0x4add692c, 0x7d121756,
16209 +
            0xaf0bd68a, 0xdde08959, 0x0ff94885, 0xc3cab4d4, 0x11d37508, 0x63382adb, 0xb121eb07,
16210 +
            0x86ee957d, 0x54f754a1, 0x261c0b72, 0xf405caae, 0x4982f786, 0x9b9b365a, 0xe9706989,
16211 +
            0x3b69a855, 0x0ca6d62f, 0xdebf17f3, 0xac544820, 0x7e4d89fc, 0xd39b2fc7, 0x0182ee1b,
16212 +
            0x7369b1c8, 0xa1707014, 0x96bf0e6e, 0x44a6cfb2, 0x364d9061, 0xe45451bd, 0x59d36c95,
16213 +
            0x8bcaad49, 0xf921f29a, 0x2b383346, 0x1cf74d3c, 0xceee8ce0, 0xbc05d333, 0x6e1c12ef,
16214 +
            0xe36982f2, 0x3170432e, 0x439b1cfd, 0x9182dd21, 0xa64da35b, 0x74546287, 0x06bf3d54,
16215 +
            0xd4a6fc88, 0x6921c1a0, 0xbb38007c, 0xc9d35faf, 0x1bca9e73, 0x2c05e009, 0xfe1c21d5,
16216 +
            0x8cf77e06, 0x5eeebfda, 0xf33819e1, 0x2121d83d, 0x53ca87ee, 0x81d34632, 0xb61c3848,
16217 +
            0x6405f994, 0x16eea647, 0xc4f7679b, 0x79705ab3, 0xab699b6f, 0xd982c4bc, 0x0b9b0560,
16218 +
            0x3c547b1a, 0xee4dbac6, 0x9ca6e515, 0x4ebf24c9,
16219 +
        ],
16220 +
        [
16221 +
            0x00000000, 0x01d8ac87, 0x03b1590e, 0x0269f589, 0x0762b21c, 0x06ba1e9b, 0x04d3eb12,
16222 +
            0x050b4795, 0x0ec56438, 0x0f1dc8bf, 0x0d743d36, 0x0cac91b1, 0x09a7d624, 0x087f7aa3,
16223 +
            0x0a168f2a, 0x0bce23ad, 0x1d8ac870, 0x1c5264f7, 0x1e3b917e, 0x1fe33df9, 0x1ae87a6c,
16224 +
            0x1b30d6eb, 0x19592362, 0x18818fe5, 0x134fac48, 0x129700cf, 0x10fef546, 0x112659c1,
16225 +
            0x142d1e54, 0x15f5b2d3, 0x179c475a, 0x1644ebdd, 0x3b1590e0, 0x3acd3c67, 0x38a4c9ee,
16226 +
            0x397c6569, 0x3c7722fc, 0x3daf8e7b, 0x3fc67bf2, 0x3e1ed775, 0x35d0f4d8, 0x3408585f,
16227 +
            0x3661add6, 0x37b90151, 0x32b246c4, 0x336aea43, 0x31031fca, 0x30dbb34d, 0x269f5890,
16228 +
            0x2747f417, 0x252e019e, 0x24f6ad19, 0x21fdea8c, 0x2025460b, 0x224cb382, 0x23941f05,
16229 +
            0x285a3ca8, 0x2982902f, 0x2beb65a6, 0x2a33c921, 0x2f388eb4, 0x2ee02233, 0x2c89d7ba,
16230 +
            0x2d517b3d, 0x762b21c0, 0x77f38d47, 0x759a78ce, 0x7442d449, 0x714993dc, 0x70913f5b,
16231 +
            0x72f8cad2, 0x73206655, 0x78ee45f8, 0x7936e97f, 0x7b5f1cf6, 0x7a87b071, 0x7f8cf7e4,
16232 +
            0x7e545b63, 0x7c3daeea, 0x7de5026d, 0x6ba1e9b0, 0x6a794537, 0x6810b0be, 0x69c81c39,
16233 +
            0x6cc35bac, 0x6d1bf72b, 0x6f7202a2, 0x6eaaae25, 0x65648d88, 0x64bc210f, 0x66d5d486,
16234 +
            0x670d7801, 0x62063f94, 0x63de9313, 0x61b7669a, 0x606fca1d, 0x4d3eb120, 0x4ce61da7,
16235 +
            0x4e8fe82e, 0x4f5744a9, 0x4a5c033c, 0x4b84afbb, 0x49ed5a32, 0x4835f6b5, 0x43fbd518,
16236 +
            0x4223799f, 0x404a8c16, 0x41922091, 0x44996704, 0x4541cb83, 0x47283e0a, 0x46f0928d,
16237 +
            0x50b47950, 0x516cd5d7, 0x5305205e, 0x52dd8cd9, 0x57d6cb4c, 0x560e67cb, 0x54679242,
16238 +
            0x55bf3ec5, 0x5e711d68, 0x5fa9b1ef, 0x5dc04466, 0x5c18e8e1, 0x5913af74, 0x58cb03f3,
16239 +
            0x5aa2f67a, 0x5b7a5afd, 0xec564380, 0xed8eef07, 0xefe71a8e, 0xee3fb609, 0xeb34f19c,
16240 +
            0xeaec5d1b, 0xe885a892, 0xe95d0415, 0xe29327b8, 0xe34b8b3f, 0xe1227eb6, 0xe0fad231,
16241 +
            0xe5f195a4, 0xe4293923, 0xe640ccaa, 0xe798602d, 0xf1dc8bf0, 0xf0042777, 0xf26dd2fe,
16242 +
            0xf3b57e79, 0xf6be39ec, 0xf766956b, 0xf50f60e2, 0xf4d7cc65, 0xff19efc8, 0xfec1434f,
16243 +
            0xfca8b6c6, 0xfd701a41, 0xf87b5dd4, 0xf9a3f153, 0xfbca04da, 0xfa12a85d, 0xd743d360,
16244 +
            0xd69b7fe7, 0xd4f28a6e, 0xd52a26e9, 0xd021617c, 0xd1f9cdfb, 0xd3903872, 0xd24894f5,
16245 +
            0xd986b758, 0xd85e1bdf, 0xda37ee56, 0xdbef42d1, 0xdee40544, 0xdf3ca9c3, 0xdd555c4a,
16246 +
            0xdc8df0cd, 0xcac91b10, 0xcb11b797, 0xc978421e, 0xc8a0ee99, 0xcdaba90c, 0xcc73058b,
16247 +
            0xce1af002, 0xcfc25c85, 0xc40c7f28, 0xc5d4d3af, 0xc7bd2626, 0xc6658aa1, 0xc36ecd34,
16248 +
            0xc2b661b3, 0xc0df943a, 0xc10738bd, 0x9a7d6240, 0x9ba5cec7, 0x99cc3b4e, 0x981497c9,
16249 +
            0x9d1fd05c, 0x9cc77cdb, 0x9eae8952, 0x9f7625d5, 0x94b80678, 0x9560aaff, 0x97095f76,
16250 +
            0x96d1f3f1, 0x93dab464, 0x920218e3, 0x906bed6a, 0x91b341ed, 0x87f7aa30, 0x862f06b7,
16251 +
            0x8446f33e, 0x859e5fb9, 0x8095182c, 0x814db4ab, 0x83244122, 0x82fceda5, 0x8932ce08,
16252 +
            0x88ea628f, 0x8a839706, 0x8b5b3b81, 0x8e507c14, 0x8f88d093, 0x8de1251a, 0x8c39899d,
16253 +
            0xa168f2a0, 0xa0b05e27, 0xa2d9abae, 0xa3010729, 0xa60a40bc, 0xa7d2ec3b, 0xa5bb19b2,
16254 +
            0xa463b535, 0xafad9698, 0xae753a1f, 0xac1ccf96, 0xadc46311, 0xa8cf2484, 0xa9178803,
16255 +
            0xab7e7d8a, 0xaaa6d10d, 0xbce23ad0, 0xbd3a9657, 0xbf5363de, 0xbe8bcf59, 0xbb8088cc,
16256 +
            0xba58244b, 0xb831d1c2, 0xb9e97d45, 0xb2275ee8, 0xb3fff26f, 0xb19607e6, 0xb04eab61,
16257 +
            0xb545ecf4, 0xb49d4073, 0xb6f4b5fa, 0xb72c197d,
16258 +
        ],
16259 +
        [
16260 +
            0x00000000, 0xdc6d9ab7, 0xbc1a28d9, 0x6077b26e, 0x7cf54c05, 0xa098d6b2, 0xc0ef64dc,
16261 +
            0x1c82fe6b, 0xf9ea980a, 0x258702bd, 0x45f0b0d3, 0x999d2a64, 0x851fd40f, 0x59724eb8,
16262 +
            0x3905fcd6, 0xe5686661, 0xf7142da3, 0x2b79b714, 0x4b0e057a, 0x97639fcd, 0x8be161a6,
16263 +
            0x578cfb11, 0x37fb497f, 0xeb96d3c8, 0x0efeb5a9, 0xd2932f1e, 0xb2e49d70, 0x6e8907c7,
16264 +
            0x720bf9ac, 0xae66631b, 0xce11d175, 0x127c4bc2, 0xeae946f1, 0x3684dc46, 0x56f36e28,
16265 +
            0x8a9ef49f, 0x961c0af4, 0x4a719043, 0x2a06222d, 0xf66bb89a, 0x1303defb, 0xcf6e444c,
16266 +
            0xaf19f622, 0x73746c95, 0x6ff692fe, 0xb39b0849, 0xd3ecba27, 0x0f812090, 0x1dfd6b52,
16267 +
            0xc190f1e5, 0xa1e7438b, 0x7d8ad93c, 0x61082757, 0xbd65bde0, 0xdd120f8e, 0x017f9539,
16268 +
            0xe417f358, 0x387a69ef, 0x580ddb81, 0x84604136, 0x98e2bf5d, 0x448f25ea, 0x24f89784,
16269 +
            0xf8950d33, 0xd1139055, 0x0d7e0ae2, 0x6d09b88c, 0xb164223b, 0xade6dc50, 0x718b46e7,
16270 +
            0x11fcf489, 0xcd916e3e, 0x28f9085f, 0xf49492e8, 0x94e32086, 0x488eba31, 0x540c445a,
16271 +
            0x8861deed, 0xe8166c83, 0x347bf634, 0x2607bdf6, 0xfa6a2741, 0x9a1d952f, 0x46700f98,
16272 +
            0x5af2f1f3, 0x869f6b44, 0xe6e8d92a, 0x3a85439d, 0xdfed25fc, 0x0380bf4b, 0x63f70d25,
16273 +
            0xbf9a9792, 0xa31869f9, 0x7f75f34e, 0x1f024120, 0xc36fdb97, 0x3bfad6a4, 0xe7974c13,
16274 +
            0x87e0fe7d, 0x5b8d64ca, 0x470f9aa1, 0x9b620016, 0xfb15b278, 0x277828cf, 0xc2104eae,
16275 +
            0x1e7dd419, 0x7e0a6677, 0xa267fcc0, 0xbee502ab, 0x6288981c, 0x02ff2a72, 0xde92b0c5,
16276 +
            0xcceefb07, 0x108361b0, 0x70f4d3de, 0xac994969, 0xb01bb702, 0x6c762db5, 0x0c019fdb,
16277 +
            0xd06c056c, 0x3504630d, 0xe969f9ba, 0x891e4bd4, 0x5573d163, 0x49f12f08, 0x959cb5bf,
16278 +
            0xf5eb07d1, 0x29869d66, 0xa6e63d1d, 0x7a8ba7aa, 0x1afc15c4, 0xc6918f73, 0xda137118,
16279 +
            0x067eebaf, 0x660959c1, 0xba64c376, 0x5f0ca517, 0x83613fa0, 0xe3168dce, 0x3f7b1779,
16280 +
            0x23f9e912, 0xff9473a5, 0x9fe3c1cb, 0x438e5b7c, 0x51f210be, 0x8d9f8a09, 0xede83867,
16281 +
            0x3185a2d0, 0x2d075cbb, 0xf16ac60c, 0x911d7462, 0x4d70eed5, 0xa81888b4, 0x74751203,
16282 +
            0x1402a06d, 0xc86f3ada, 0xd4edc4b1, 0x08805e06, 0x68f7ec68, 0xb49a76df, 0x4c0f7bec,
16283 +
            0x9062e15b, 0xf0155335, 0x2c78c982, 0x30fa37e9, 0xec97ad5e, 0x8ce01f30, 0x508d8587,
16284 +
            0xb5e5e3e6, 0x69887951, 0x09ffcb3f, 0xd5925188, 0xc910afe3, 0x157d3554, 0x750a873a,
16285 +
            0xa9671d8d, 0xbb1b564f, 0x6776ccf8, 0x07017e96, 0xdb6ce421, 0xc7ee1a4a, 0x1b8380fd,
16286 +
            0x7bf43293, 0xa799a824, 0x42f1ce45, 0x9e9c54f2, 0xfeebe69c, 0x22867c2b, 0x3e048240,
16287 +
            0xe26918f7, 0x821eaa99, 0x5e73302e, 0x77f5ad48, 0xab9837ff, 0xcbef8591, 0x17821f26,
16288 +
            0x0b00e14d, 0xd76d7bfa, 0xb71ac994, 0x6b775323, 0x8e1f3542, 0x5272aff5, 0x32051d9b,
16289 +
            0xee68872c, 0xf2ea7947, 0x2e87e3f0, 0x4ef0519e, 0x929dcb29, 0x80e180eb, 0x5c8c1a5c,
16290 +
            0x3cfba832, 0xe0963285, 0xfc14ccee, 0x20795659, 0x400ee437, 0x9c637e80, 0x790b18e1,
16291 +
            0xa5668256, 0xc5113038, 0x197caa8f, 0x05fe54e4, 0xd993ce53, 0xb9e47c3d, 0x6589e68a,
16292 +
            0x9d1cebb9, 0x4171710e, 0x2106c360, 0xfd6b59d7, 0xe1e9a7bc, 0x3d843d0b, 0x5df38f65,
16293 +
            0x819e15d2, 0x64f673b3, 0xb89be904, 0xd8ec5b6a, 0x0481c1dd, 0x18033fb6, 0xc46ea501,
16294 +
            0xa419176f, 0x78748dd8, 0x6a08c61a, 0xb6655cad, 0xd612eec3, 0x0a7f7474, 0x16fd8a1f,
16295 +
            0xca9010a8, 0xaae7a2c6, 0x768a3871, 0x93e25e10, 0x4f8fc4a7, 0x2ff876c9, 0xf395ec7e,
16296 +
            0xef171215, 0x337a88a2, 0x530d3acc, 0x8f60a07b,
16297 +
        ],
16298 +
        [
16299 +
            0x00000000, 0x490d678d, 0x921acf1a, 0xdb17a897, 0x20f48383, 0x69f9e40e, 0xb2ee4c99,
16300 +
            0xfbe32b14, 0x41e90706, 0x08e4608b, 0xd3f3c81c, 0x9afeaf91, 0x611d8485, 0x2810e308,
16301 +
            0xf3074b9f, 0xba0a2c12, 0x83d20e0c, 0xcadf6981, 0x11c8c116, 0x58c5a69b, 0xa3268d8f,
16302 +
            0xea2bea02, 0x313c4295, 0x78312518, 0xc23b090a, 0x8b366e87, 0x5021c610, 0x192ca19d,
16303 +
            0xe2cf8a89, 0xabc2ed04, 0x70d54593, 0x39d8221e, 0x036501af, 0x4a686622, 0x917fceb5,
16304 +
            0xd872a938, 0x2391822c, 0x6a9ce5a1, 0xb18b4d36, 0xf8862abb, 0x428c06a9, 0x0b816124,
16305 +
            0xd096c9b3, 0x999bae3e, 0x6278852a, 0x2b75e2a7, 0xf0624a30, 0xb96f2dbd, 0x80b70fa3,
16306 +
            0xc9ba682e, 0x12adc0b9, 0x5ba0a734, 0xa0438c20, 0xe94eebad, 0x3259433a, 0x7b5424b7,
16307 +
            0xc15e08a5, 0x88536f28, 0x5344c7bf, 0x1a49a032, 0xe1aa8b26, 0xa8a7ecab, 0x73b0443c,
16308 +
            0x3abd23b1, 0x06ca035e, 0x4fc764d3, 0x94d0cc44, 0xddddabc9, 0x263e80dd, 0x6f33e750,
16309 +
            0xb4244fc7, 0xfd29284a, 0x47230458, 0x0e2e63d5, 0xd539cb42, 0x9c34accf, 0x67d787db,
16310 +
            0x2edae056, 0xf5cd48c1, 0xbcc02f4c, 0x85180d52, 0xcc156adf, 0x1702c248, 0x5e0fa5c5,
16311 +
            0xa5ec8ed1, 0xece1e95c, 0x37f641cb, 0x7efb2646, 0xc4f10a54, 0x8dfc6dd9, 0x56ebc54e,
16312 +
            0x1fe6a2c3, 0xe40589d7, 0xad08ee5a, 0x761f46cd, 0x3f122140, 0x05af02f1, 0x4ca2657c,
16313 +
            0x97b5cdeb, 0xdeb8aa66, 0x255b8172, 0x6c56e6ff, 0xb7414e68, 0xfe4c29e5, 0x444605f7,
16314 +
            0x0d4b627a, 0xd65ccaed, 0x9f51ad60, 0x64b28674, 0x2dbfe1f9, 0xf6a8496e, 0xbfa52ee3,
16315 +
            0x867d0cfd, 0xcf706b70, 0x1467c3e7, 0x5d6aa46a, 0xa6898f7e, 0xef84e8f3, 0x34934064,
16316 +
            0x7d9e27e9, 0xc7940bfb, 0x8e996c76, 0x558ec4e1, 0x1c83a36c, 0xe7608878, 0xae6deff5,
16317 +
            0x757a4762, 0x3c7720ef, 0x0d9406bc, 0x44996131, 0x9f8ec9a6, 0xd683ae2b, 0x2d60853f,
16318 +
            0x646de2b2, 0xbf7a4a25, 0xf6772da8, 0x4c7d01ba, 0x05706637, 0xde67cea0, 0x976aa92d,
16319 +
            0x6c898239, 0x2584e5b4, 0xfe934d23, 0xb79e2aae, 0x8e4608b0, 0xc74b6f3d, 0x1c5cc7aa,
16320 +
            0x5551a027, 0xaeb28b33, 0xe7bfecbe, 0x3ca84429, 0x75a523a4, 0xcfaf0fb6, 0x86a2683b,
16321 +
            0x5db5c0ac, 0x14b8a721, 0xef5b8c35, 0xa656ebb8, 0x7d41432f, 0x344c24a2, 0x0ef10713,
16322 +
            0x47fc609e, 0x9cebc809, 0xd5e6af84, 0x2e058490, 0x6708e31d, 0xbc1f4b8a, 0xf5122c07,
16323 +
            0x4f180015, 0x06156798, 0xdd02cf0f, 0x940fa882, 0x6fec8396, 0x26e1e41b, 0xfdf64c8c,
16324 +
            0xb4fb2b01, 0x8d23091f, 0xc42e6e92, 0x1f39c605, 0x5634a188, 0xadd78a9c, 0xe4daed11,
16325 +
            0x3fcd4586, 0x76c0220b, 0xccca0e19, 0x85c76994, 0x5ed0c103, 0x17dda68e, 0xec3e8d9a,
16326 +
            0xa533ea17, 0x7e244280, 0x3729250d, 0x0b5e05e2, 0x4253626f, 0x9944caf8, 0xd049ad75,
16327 +
            0x2baa8661, 0x62a7e1ec, 0xb9b0497b, 0xf0bd2ef6, 0x4ab702e4, 0x03ba6569, 0xd8adcdfe,
16328 +
            0x91a0aa73, 0x6a438167, 0x234ee6ea, 0xf8594e7d, 0xb15429f0, 0x888c0bee, 0xc1816c63,
16329 +
            0x1a96c4f4, 0x539ba379, 0xa878886d, 0xe175efe0, 0x3a624777, 0x736f20fa, 0xc9650ce8,
16330 +
            0x80686b65, 0x5b7fc3f2, 0x1272a47f, 0xe9918f6b, 0xa09ce8e6, 0x7b8b4071, 0x328627fc,
16331 +
            0x083b044d, 0x413663c0, 0x9a21cb57, 0xd32cacda, 0x28cf87ce, 0x61c2e043, 0xbad548d4,
16332 +
            0xf3d82f59, 0x49d2034b, 0x00df64c6, 0xdbc8cc51, 0x92c5abdc, 0x692680c8, 0x202be745,
16333 +
            0xfb3c4fd2, 0xb231285f, 0x8be90a41, 0xc2e46dcc, 0x19f3c55b, 0x50fea2d6, 0xab1d89c2,
16334 +
            0xe210ee4f, 0x390746d8, 0x700a2155, 0xca000d47, 0x830d6aca, 0x581ac25d, 0x1117a5d0,
16335 +
            0xeaf48ec4, 0xa3f9e949, 0x78ee41de, 0x31e32653,
16336 +
        ],
16337 +
        [
16338 +
            0x00000000, 0x1b280d78, 0x36501af0, 0x2d781788, 0x6ca035e0, 0x77883898, 0x5af02f10,
16339 +
            0x41d82268, 0xd9406bc0, 0xc26866b8, 0xef107130, 0xf4387c48, 0xb5e05e20, 0xaec85358,
16340 +
            0x83b044d0, 0x989849a8, 0xb641ca37, 0xad69c74f, 0x8011d0c7, 0x9b39ddbf, 0xdae1ffd7,
16341 +
            0xc1c9f2af, 0xecb1e527, 0xf799e85f, 0x6f01a1f7, 0x7429ac8f, 0x5951bb07, 0x4279b67f,
16342 +
            0x03a19417, 0x1889996f, 0x35f18ee7, 0x2ed9839f, 0x684289d9, 0x736a84a1, 0x5e129329,
16343 +
            0x453a9e51, 0x04e2bc39, 0x1fcab141, 0x32b2a6c9, 0x299aabb1, 0xb102e219, 0xaa2aef61,
16344 +
            0x8752f8e9, 0x9c7af591, 0xdda2d7f9, 0xc68ada81, 0xebf2cd09, 0xf0dac071, 0xde0343ee,
16345 +
            0xc52b4e96, 0xe853591e, 0xf37b5466, 0xb2a3760e, 0xa98b7b76, 0x84f36cfe, 0x9fdb6186,
16346 +
            0x0743282e, 0x1c6b2556, 0x311332de, 0x2a3b3fa6, 0x6be31dce, 0x70cb10b6, 0x5db3073e,
16347 +
            0x469b0a46, 0xd08513b2, 0xcbad1eca, 0xe6d50942, 0xfdfd043a, 0xbc252652, 0xa70d2b2a,
16348 +
            0x8a753ca2, 0x915d31da, 0x09c57872, 0x12ed750a, 0x3f956282, 0x24bd6ffa, 0x65654d92,
16349 +
            0x7e4d40ea, 0x53355762, 0x481d5a1a, 0x66c4d985, 0x7decd4fd, 0x5094c375, 0x4bbcce0d,
16350 +
            0x0a64ec65, 0x114ce11d, 0x3c34f695, 0x271cfbed, 0xbf84b245, 0xa4acbf3d, 0x89d4a8b5,
16351 +
            0x92fca5cd, 0xd32487a5, 0xc80c8add, 0xe5749d55, 0xfe5c902d, 0xb8c79a6b, 0xa3ef9713,
16352 +
            0x8e97809b, 0x95bf8de3, 0xd467af8b, 0xcf4fa2f3, 0xe237b57b, 0xf91fb803, 0x6187f1ab,
16353 +
            0x7aaffcd3, 0x57d7eb5b, 0x4cffe623, 0x0d27c44b, 0x160fc933, 0x3b77debb, 0x205fd3c3,
16354 +
            0x0e86505c, 0x15ae5d24, 0x38d64aac, 0x23fe47d4, 0x622665bc, 0x790e68c4, 0x54767f4c,
16355 +
            0x4f5e7234, 0xd7c63b9c, 0xccee36e4, 0xe196216c, 0xfabe2c14, 0xbb660e7c, 0xa04e0304,
16356 +
            0x8d36148c, 0x961e19f4, 0xa5cb3ad3, 0xbee337ab, 0x939b2023, 0x88b32d5b, 0xc96b0f33,
16357 +
            0xd243024b, 0xff3b15c3, 0xe41318bb, 0x7c8b5113, 0x67a35c6b, 0x4adb4be3, 0x51f3469b,
16358 +
            0x102b64f3, 0x0b03698b, 0x267b7e03, 0x3d53737b, 0x138af0e4, 0x08a2fd9c, 0x25daea14,
16359 +
            0x3ef2e76c, 0x7f2ac504, 0x6402c87c, 0x497adff4, 0x5252d28c, 0xcaca9b24, 0xd1e2965c,
16360 +
            0xfc9a81d4, 0xe7b28cac, 0xa66aaec4, 0xbd42a3bc, 0x903ab434, 0x8b12b94c, 0xcd89b30a,
16361 +
            0xd6a1be72, 0xfbd9a9fa, 0xe0f1a482, 0xa12986ea, 0xba018b92, 0x97799c1a, 0x8c519162,
16362 +
            0x14c9d8ca, 0x0fe1d5b2, 0x2299c23a, 0x39b1cf42, 0x7869ed2a, 0x6341e052, 0x4e39f7da,
16363 +
            0x5511faa2, 0x7bc8793d, 0x60e07445, 0x4d9863cd, 0x56b06eb5, 0x17684cdd, 0x0c4041a5,
16364 +
            0x2138562d, 0x3a105b55, 0xa28812fd, 0xb9a01f85, 0x94d8080d, 0x8ff00575, 0xce28271d,
16365 +
            0xd5002a65, 0xf8783ded, 0xe3503095, 0x754e2961, 0x6e662419, 0x431e3391, 0x58363ee9,
16366 +
            0x19ee1c81, 0x02c611f9, 0x2fbe0671, 0x34960b09, 0xac0e42a1, 0xb7264fd9, 0x9a5e5851,
16367 +
            0x81765529, 0xc0ae7741, 0xdb867a39, 0xf6fe6db1, 0xedd660c9, 0xc30fe356, 0xd827ee2e,
16368 +
            0xf55ff9a6, 0xee77f4de, 0xafafd6b6, 0xb487dbce, 0x99ffcc46, 0x82d7c13e, 0x1a4f8896,
16369 +
            0x016785ee, 0x2c1f9266, 0x37379f1e, 0x76efbd76, 0x6dc7b00e, 0x40bfa786, 0x5b97aafe,
16370 +
            0x1d0ca0b8, 0x0624adc0, 0x2b5cba48, 0x3074b730, 0x71ac9558, 0x6a849820, 0x47fc8fa8,
16371 +
            0x5cd482d0, 0xc44ccb78, 0xdf64c600, 0xf21cd188, 0xe934dcf0, 0xa8ecfe98, 0xb3c4f3e0,
16372 +
            0x9ebce468, 0x8594e910, 0xab4d6a8f, 0xb06567f7, 0x9d1d707f, 0x86357d07, 0xc7ed5f6f,
16373 +
            0xdcc55217, 0xf1bd459f, 0xea9548e7, 0x720d014f, 0x69250c37, 0x445d1bbf, 0x5f7516c7,
16374 +
            0x1ead34af, 0x058539d7, 0x28fd2e5f, 0x33d52327,
16375 +
        ],
16376 +
        [
16377 +
            0x00000000, 0x4f576811, 0x9eaed022, 0xd1f9b833, 0x399cbdf3, 0x76cbd5e2, 0xa7326dd1,
16378 +
            0xe86505c0, 0x73397be6, 0x3c6e13f7, 0xed97abc4, 0xa2c0c3d5, 0x4aa5c615, 0x05f2ae04,
16379 +
            0xd40b1637, 0x9b5c7e26, 0xe672f7cc, 0xa9259fdd, 0x78dc27ee, 0x378b4fff, 0xdfee4a3f,
16380 +
            0x90b9222e, 0x41409a1d, 0x0e17f20c, 0x954b8c2a, 0xda1ce43b, 0x0be55c08, 0x44b23419,
16381 +
            0xacd731d9, 0xe38059c8, 0x3279e1fb, 0x7d2e89ea, 0xc824f22f, 0x87739a3e, 0x568a220d,
16382 +
            0x19dd4a1c, 0xf1b84fdc, 0xbeef27cd, 0x6f169ffe, 0x2041f7ef, 0xbb1d89c9, 0xf44ae1d8,
16383 +
            0x25b359eb, 0x6ae431fa, 0x8281343a, 0xcdd65c2b, 0x1c2fe418, 0x53788c09, 0x2e5605e3,
16384 +
            0x61016df2, 0xb0f8d5c1, 0xffafbdd0, 0x17cab810, 0x589dd001, 0x89646832, 0xc6330023,
16385 +
            0x5d6f7e05, 0x12381614, 0xc3c1ae27, 0x8c96c636, 0x64f3c3f6, 0x2ba4abe7, 0xfa5d13d4,
16386 +
            0xb50a7bc5, 0x9488f9e9, 0xdbdf91f8, 0x0a2629cb, 0x457141da, 0xad14441a, 0xe2432c0b,
16387 +
            0x33ba9438, 0x7cedfc29, 0xe7b1820f, 0xa8e6ea1e, 0x791f522d, 0x36483a3c, 0xde2d3ffc,
16388 +
            0x917a57ed, 0x4083efde, 0x0fd487cf, 0x72fa0e25, 0x3dad6634, 0xec54de07, 0xa303b616,
16389 +
            0x4b66b3d6, 0x0431dbc7, 0xd5c863f4, 0x9a9f0be5, 0x01c375c3, 0x4e941dd2, 0x9f6da5e1,
16390 +
            0xd03acdf0, 0x385fc830, 0x7708a021, 0xa6f11812, 0xe9a67003, 0x5cac0bc6, 0x13fb63d7,
16391 +
            0xc202dbe4, 0x8d55b3f5, 0x6530b635, 0x2a67de24, 0xfb9e6617, 0xb4c90e06, 0x2f957020,
16392 +
            0x60c21831, 0xb13ba002, 0xfe6cc813, 0x1609cdd3, 0x595ea5c2, 0x88a71df1, 0xc7f075e0,
16393 +
            0xbadefc0a, 0xf589941b, 0x24702c28, 0x6b274439, 0x834241f9, 0xcc1529e8, 0x1dec91db,
16394 +
            0x52bbf9ca, 0xc9e787ec, 0x86b0effd, 0x574957ce, 0x181e3fdf, 0xf07b3a1f, 0xbf2c520e,
16395 +
            0x6ed5ea3d, 0x2182822c, 0x2dd0ee65, 0x62878674, 0xb37e3e47, 0xfc295656, 0x144c5396,
16396 +
            0x5b1b3b87, 0x8ae283b4, 0xc5b5eba5, 0x5ee99583, 0x11befd92, 0xc04745a1, 0x8f102db0,
16397 +
            0x67752870, 0x28224061, 0xf9dbf852, 0xb68c9043, 0xcba219a9, 0x84f571b8, 0x550cc98b,
16398 +
            0x1a5ba19a, 0xf23ea45a, 0xbd69cc4b, 0x6c907478, 0x23c71c69, 0xb89b624f, 0xf7cc0a5e,
16399 +
            0x2635b26d, 0x6962da7c, 0x8107dfbc, 0xce50b7ad, 0x1fa90f9e, 0x50fe678f, 0xe5f41c4a,
16400 +
            0xaaa3745b, 0x7b5acc68, 0x340da479, 0xdc68a1b9, 0x933fc9a8, 0x42c6719b, 0x0d91198a,
16401 +
            0x96cd67ac, 0xd99a0fbd, 0x0863b78e, 0x4734df9f, 0xaf51da5f, 0xe006b24e, 0x31ff0a7d,
16402 +
            0x7ea8626c, 0x0386eb86, 0x4cd18397, 0x9d283ba4, 0xd27f53b5, 0x3a1a5675, 0x754d3e64,
16403 +
            0xa4b48657, 0xebe3ee46, 0x70bf9060, 0x3fe8f871, 0xee114042, 0xa1462853, 0x49232d93,
16404 +
            0x06744582, 0xd78dfdb1, 0x98da95a0, 0xb958178c, 0xf60f7f9d, 0x27f6c7ae, 0x68a1afbf,
16405 +
            0x80c4aa7f, 0xcf93c26e, 0x1e6a7a5d, 0x513d124c, 0xca616c6a, 0x8536047b, 0x54cfbc48,
16406 +
            0x1b98d459, 0xf3fdd199, 0xbcaab988, 0x6d5301bb, 0x220469aa, 0x5f2ae040, 0x107d8851,
16407 +
            0xc1843062, 0x8ed35873, 0x66b65db3, 0x29e135a2, 0xf8188d91, 0xb74fe580, 0x2c139ba6,
16408 +
            0x6344f3b7, 0xb2bd4b84, 0xfdea2395, 0x158f2655, 0x5ad84e44, 0x8b21f677, 0xc4769e66,
16409 +
            0x717ce5a3, 0x3e2b8db2, 0xefd23581, 0xa0855d90, 0x48e05850, 0x07b73041, 0xd64e8872,
16410 +
            0x9919e063, 0x02459e45, 0x4d12f654, 0x9ceb4e67, 0xd3bc2676, 0x3bd923b6, 0x748e4ba7,
16411 +
            0xa577f394, 0xea209b85, 0x970e126f, 0xd8597a7e, 0x09a0c24d, 0x46f7aa5c, 0xae92af9c,
16412 +
            0xe1c5c78d, 0x303c7fbe, 0x7f6b17af, 0xe4376989, 0xab600198, 0x7a99b9ab, 0x35ced1ba,
16413 +
            0xddabd47a, 0x92fcbc6b, 0x43050458, 0x0c526c49,
16414 +
        ],
16415 +
        [
16416 +
            0x00000000, 0x5ba1dcca, 0xb743b994, 0xece2655e, 0x6a466e9f, 0x31e7b255, 0xdd05d70b,
16417 +
            0x86a40bc1, 0xd48cdd3e, 0x8f2d01f4, 0x63cf64aa, 0x386eb860, 0xbecab3a1, 0xe56b6f6b,
16418 +
            0x09890a35, 0x5228d6ff, 0xadd8a7cb, 0xf6797b01, 0x1a9b1e5f, 0x413ac295, 0xc79ec954,
16419 +
            0x9c3f159e, 0x70dd70c0, 0x2b7cac0a, 0x79547af5, 0x22f5a63f, 0xce17c361, 0x95b61fab,
16420 +
            0x1312146a, 0x48b3c8a0, 0xa451adfe, 0xfff07134, 0x5f705221, 0x04d18eeb, 0xe833ebb5,
16421 +
            0xb392377f, 0x35363cbe, 0x6e97e074, 0x8275852a, 0xd9d459e0, 0x8bfc8f1f, 0xd05d53d5,
16422 +
            0x3cbf368b, 0x671eea41, 0xe1bae180, 0xba1b3d4a, 0x56f95814, 0x0d5884de, 0xf2a8f5ea,
16423 +
            0xa9092920, 0x45eb4c7e, 0x1e4a90b4, 0x98ee9b75, 0xc34f47bf, 0x2fad22e1, 0x740cfe2b,
16424 +
            0x262428d4, 0x7d85f41e, 0x91679140, 0xcac64d8a, 0x4c62464b, 0x17c39a81, 0xfb21ffdf,
16425 +
            0xa0802315, 0xbee0a442, 0xe5417888, 0x09a31dd6, 0x5202c11c, 0xd4a6cadd, 0x8f071617,
16426 +
            0x63e57349, 0x3844af83, 0x6a6c797c, 0x31cda5b6, 0xdd2fc0e8, 0x868e1c22, 0x002a17e3,
16427 +
            0x5b8bcb29, 0xb769ae77, 0xecc872bd, 0x13380389, 0x4899df43, 0xa47bba1d, 0xffda66d7,
16428 +
            0x797e6d16, 0x22dfb1dc, 0xce3dd482, 0x959c0848, 0xc7b4deb7, 0x9c15027d, 0x70f76723,
16429 +
            0x2b56bbe9, 0xadf2b028, 0xf6536ce2, 0x1ab109bc, 0x4110d576, 0xe190f663, 0xba312aa9,
16430 +
            0x56d34ff7, 0x0d72933d, 0x8bd698fc, 0xd0774436, 0x3c952168, 0x6734fda2, 0x351c2b5d,
16431 +
            0x6ebdf797, 0x825f92c9, 0xd9fe4e03, 0x5f5a45c2, 0x04fb9908, 0xe819fc56, 0xb3b8209c,
16432 +
            0x4c4851a8, 0x17e98d62, 0xfb0be83c, 0xa0aa34f6, 0x260e3f37, 0x7dafe3fd, 0x914d86a3,
16433 +
            0xcaec5a69, 0x98c48c96, 0xc365505c, 0x2f873502, 0x7426e9c8, 0xf282e209, 0xa9233ec3,
16434 +
            0x45c15b9d, 0x1e608757, 0x79005533, 0x22a189f9, 0xce43eca7, 0x95e2306d, 0x13463bac,
16435 +
            0x48e7e766, 0xa4058238, 0xffa45ef2, 0xad8c880d, 0xf62d54c7, 0x1acf3199, 0x416eed53,
16436 +
            0xc7cae692, 0x9c6b3a58, 0x70895f06, 0x2b2883cc, 0xd4d8f2f8, 0x8f792e32, 0x639b4b6c,
16437 +
            0x383a97a6, 0xbe9e9c67, 0xe53f40ad, 0x09dd25f3, 0x527cf939, 0x00542fc6, 0x5bf5f30c,
16438 +
            0xb7179652, 0xecb64a98, 0x6a124159, 0x31b39d93, 0xdd51f8cd, 0x86f02407, 0x26700712,
16439 +
            0x7dd1dbd8, 0x9133be86, 0xca92624c, 0x4c36698d, 0x1797b547, 0xfb75d019, 0xa0d40cd3,
16440 +
            0xf2fcda2c, 0xa95d06e6, 0x45bf63b8, 0x1e1ebf72, 0x98bab4b3, 0xc31b6879, 0x2ff90d27,
16441 +
            0x7458d1ed, 0x8ba8a0d9, 0xd0097c13, 0x3ceb194d, 0x674ac587, 0xe1eece46, 0xba4f128c,
16442 +
            0x56ad77d2, 0x0d0cab18, 0x5f247de7, 0x0485a12d, 0xe867c473, 0xb3c618b9, 0x35621378,
16443 +
            0x6ec3cfb2, 0x8221aaec, 0xd9807626, 0xc7e0f171, 0x9c412dbb, 0x70a348e5, 0x2b02942f,
16444 +
            0xada69fee, 0xf6074324, 0x1ae5267a, 0x4144fab0, 0x136c2c4f, 0x48cdf085, 0xa42f95db,
16445 +
            0xff8e4911, 0x792a42d0, 0x228b9e1a, 0xce69fb44, 0x95c8278e, 0x6a3856ba, 0x31998a70,
16446 +
            0xdd7bef2e, 0x86da33e4, 0x007e3825, 0x5bdfe4ef, 0xb73d81b1, 0xec9c5d7b, 0xbeb48b84,
16447 +
            0xe515574e, 0x09f73210, 0x5256eeda, 0xd4f2e51b, 0x8f5339d1, 0x63b15c8f, 0x38108045,
16448 +
            0x9890a350, 0xc3317f9a, 0x2fd31ac4, 0x7472c60e, 0xf2d6cdcf, 0xa9771105, 0x4595745b,
16449 +
            0x1e34a891, 0x4c1c7e6e, 0x17bda2a4, 0xfb5fc7fa, 0xa0fe1b30, 0x265a10f1, 0x7dfbcc3b,
16450 +
            0x9119a965, 0xcab875af, 0x3548049b, 0x6ee9d851, 0x820bbd0f, 0xd9aa61c5, 0x5f0e6a04,
16451 +
            0x04afb6ce, 0xe84dd390, 0xb3ec0f5a, 0xe1c4d9a5, 0xba65056f, 0x56876031, 0x0d26bcfb,
16452 +
            0x8b82b73a, 0xd0236bf0, 0x3cc10eae, 0x6760d264,
16453 +
        ],
16454 +
        [
16455 +
            0x00000000, 0xf200aa66, 0xe0c0497b, 0x12c0e31d, 0xc5418f41, 0x37412527, 0x2581c63a,
16456 +
            0xd7816c5c, 0x8e420335, 0x7c42a953, 0x6e824a4e, 0x9c82e028, 0x4b038c74, 0xb9032612,
16457 +
            0xabc3c50f, 0x59c36f69, 0x18451bdd, 0xea45b1bb, 0xf88552a6, 0x0a85f8c0, 0xdd04949c,
16458 +
            0x2f043efa, 0x3dc4dde7, 0xcfc47781, 0x960718e8, 0x6407b28e, 0x76c75193, 0x84c7fbf5,
16459 +
            0x534697a9, 0xa1463dcf, 0xb386ded2, 0x418674b4, 0x308a37ba, 0xc28a9ddc, 0xd04a7ec1,
16460 +
            0x224ad4a7, 0xf5cbb8fb, 0x07cb129d, 0x150bf180, 0xe70b5be6, 0xbec8348f, 0x4cc89ee9,
16461 +
            0x5e087df4, 0xac08d792, 0x7b89bbce, 0x898911a8, 0x9b49f2b5, 0x694958d3, 0x28cf2c67,
16462 +
            0xdacf8601, 0xc80f651c, 0x3a0fcf7a, 0xed8ea326, 0x1f8e0940, 0x0d4eea5d, 0xff4e403b,
16463 +
            0xa68d2f52, 0x548d8534, 0x464d6629, 0xb44dcc4f, 0x63cca013, 0x91cc0a75, 0x830ce968,
16464 +
            0x710c430e, 0x61146f74, 0x9314c512, 0x81d4260f, 0x73d48c69, 0xa455e035, 0x56554a53,
16465 +
            0x4495a94e, 0xb6950328, 0xef566c41, 0x1d56c627, 0x0f96253a, 0xfd968f5c, 0x2a17e300,
16466 +
            0xd8174966, 0xcad7aa7b, 0x38d7001d, 0x795174a9, 0x8b51decf, 0x99913dd2, 0x6b9197b4,
16467 +
            0xbc10fbe8, 0x4e10518e, 0x5cd0b293, 0xaed018f5, 0xf713779c, 0x0513ddfa, 0x17d33ee7,
16468 +
            0xe5d39481, 0x3252f8dd, 0xc05252bb, 0xd292b1a6, 0x20921bc0, 0x519e58ce, 0xa39ef2a8,
16469 +
            0xb15e11b5, 0x435ebbd3, 0x94dfd78f, 0x66df7de9, 0x741f9ef4, 0x861f3492, 0xdfdc5bfb,
16470 +
            0x2ddcf19d, 0x3f1c1280, 0xcd1cb8e6, 0x1a9dd4ba, 0xe89d7edc, 0xfa5d9dc1, 0x085d37a7,
16471 +
            0x49db4313, 0xbbdbe975, 0xa91b0a68, 0x5b1ba00e, 0x8c9acc52, 0x7e9a6634, 0x6c5a8529,
16472 +
            0x9e5a2f4f, 0xc7994026, 0x3599ea40, 0x2759095d, 0xd559a33b, 0x02d8cf67, 0xf0d86501,
16473 +
            0xe218861c, 0x10182c7a, 0xc228dee8, 0x3028748e, 0x22e89793, 0xd0e83df5, 0x076951a9,
16474 +
            0xf569fbcf, 0xe7a918d2, 0x15a9b2b4, 0x4c6adddd, 0xbe6a77bb, 0xacaa94a6, 0x5eaa3ec0,
16475 +
            0x892b529c, 0x7b2bf8fa, 0x69eb1be7, 0x9bebb181, 0xda6dc535, 0x286d6f53, 0x3aad8c4e,
16476 +
            0xc8ad2628, 0x1f2c4a74, 0xed2ce012, 0xffec030f, 0x0deca969, 0x542fc600, 0xa62f6c66,
16477 +
            0xb4ef8f7b, 0x46ef251d, 0x916e4941, 0x636ee327, 0x71ae003a, 0x83aeaa5c, 0xf2a2e952,
16478 +
            0x00a24334, 0x1262a029, 0xe0620a4f, 0x37e36613, 0xc5e3cc75, 0xd7232f68, 0x2523850e,
16479 +
            0x7ce0ea67, 0x8ee04001, 0x9c20a31c, 0x6e20097a, 0xb9a16526, 0x4ba1cf40, 0x59612c5d,
16480 +
            0xab61863b, 0xeae7f28f, 0x18e758e9, 0x0a27bbf4, 0xf8271192, 0x2fa67dce, 0xdda6d7a8,
16481 +
            0xcf6634b5, 0x3d669ed3, 0x64a5f1ba, 0x96a55bdc, 0x8465b8c1, 0x766512a7, 0xa1e47efb,
16482 +
            0x53e4d49d, 0x41243780, 0xb3249de6, 0xa33cb19c, 0x513c1bfa, 0x43fcf8e7, 0xb1fc5281,
16483 +
            0x667d3edd, 0x947d94bb, 0x86bd77a6, 0x74bdddc0, 0x2d7eb2a9, 0xdf7e18cf, 0xcdbefbd2,
16484 +
            0x3fbe51b4, 0xe83f3de8, 0x1a3f978e, 0x08ff7493, 0xfaffdef5, 0xbb79aa41, 0x49790027,
16485 +
            0x5bb9e33a, 0xa9b9495c, 0x7e382500, 0x8c388f66, 0x9ef86c7b, 0x6cf8c61d, 0x353ba974,
16486 +
            0xc73b0312, 0xd5fbe00f, 0x27fb4a69, 0xf07a2635, 0x027a8c53, 0x10ba6f4e, 0xe2bac528,
16487 +
            0x93b68626, 0x61b62c40, 0x7376cf5d, 0x8176653b, 0x56f70967, 0xa4f7a301, 0xb637401c,
16488 +
            0x4437ea7a, 0x1df48513, 0xeff42f75, 0xfd34cc68, 0x0f34660e, 0xd8b50a52, 0x2ab5a034,
16489 +
            0x38754329, 0xca75e94f, 0x8bf39dfb, 0x79f3379d, 0x6b33d480, 0x99337ee6, 0x4eb212ba,
16490 +
            0xbcb2b8dc, 0xae725bc1, 0x5c72f1a7, 0x05b19ece, 0xf7b134a8, 0xe571d7b5, 0x17717dd3,
16491 +
            0xc0f0118f, 0x32f0bbe9, 0x203058f4, 0xd230f292,
16492 +
        ],
16493 +
        [
16494 +
            0x00000000, 0x8090a067, 0x05e05d79, 0x8570fd1e, 0x0bc0baf2, 0x8b501a95, 0x0e20e78b,
16495 +
            0x8eb047ec, 0x178175e4, 0x9711d583, 0x1261289d, 0x92f188fa, 0x1c41cf16, 0x9cd16f71,
16496 +
            0x19a1926f, 0x99313208, 0x2f02ebc8, 0xaf924baf, 0x2ae2b6b1, 0xaa7216d6, 0x24c2513a,
16497 +
            0xa452f15d, 0x21220c43, 0xa1b2ac24, 0x38839e2c, 0xb8133e4b, 0x3d63c355, 0xbdf36332,
16498 +
            0x334324de, 0xb3d384b9, 0x36a379a7, 0xb633d9c0, 0x5e05d790, 0xde9577f7, 0x5be58ae9,
16499 +
            0xdb752a8e, 0x55c56d62, 0xd555cd05, 0x5025301b, 0xd0b5907c, 0x4984a274, 0xc9140213,
16500 +
            0x4c64ff0d, 0xccf45f6a, 0x42441886, 0xc2d4b8e1, 0x47a445ff, 0xc734e598, 0x71073c58,
16501 +
            0xf1979c3f, 0x74e76121, 0xf477c146, 0x7ac786aa, 0xfa5726cd, 0x7f27dbd3, 0xffb77bb4,
16502 +
            0x668649bc, 0xe616e9db, 0x636614c5, 0xe3f6b4a2, 0x6d46f34e, 0xedd65329, 0x68a6ae37,
16503 +
            0xe8360e50, 0xbc0baf20, 0x3c9b0f47, 0xb9ebf259, 0x397b523e, 0xb7cb15d2, 0x375bb5b5,
16504 +
            0xb22b48ab, 0x32bbe8cc, 0xab8adac4, 0x2b1a7aa3, 0xae6a87bd, 0x2efa27da, 0xa04a6036,
16505 +
            0x20dac051, 0xa5aa3d4f, 0x253a9d28, 0x930944e8, 0x1399e48f, 0x96e91991, 0x1679b9f6,
16506 +
            0x98c9fe1a, 0x18595e7d, 0x9d29a363, 0x1db90304, 0x8488310c, 0x0418916b, 0x81686c75,
16507 +
            0x01f8cc12, 0x8f488bfe, 0x0fd82b99, 0x8aa8d687, 0x0a3876e0, 0xe20e78b0, 0x629ed8d7,
16508 +
            0xe7ee25c9, 0x677e85ae, 0xe9cec242, 0x695e6225, 0xec2e9f3b, 0x6cbe3f5c, 0xf58f0d54,
16509 +
            0x751fad33, 0xf06f502d, 0x70fff04a, 0xfe4fb7a6, 0x7edf17c1, 0xfbafeadf, 0x7b3f4ab8,
16510 +
            0xcd0c9378, 0x4d9c331f, 0xc8ecce01, 0x487c6e66, 0xc6cc298a, 0x465c89ed, 0xc32c74f3,
16511 +
            0x43bcd494, 0xda8de69c, 0x5a1d46fb, 0xdf6dbbe5, 0x5ffd1b82, 0xd14d5c6e, 0x51ddfc09,
16512 +
            0xd4ad0117, 0x543da170, 0x7cd643f7, 0xfc46e390, 0x79361e8e, 0xf9a6bee9, 0x7716f905,
16513 +
            0xf7865962, 0x72f6a47c, 0xf266041b, 0x6b573613, 0xebc79674, 0x6eb76b6a, 0xee27cb0d,
16514 +
            0x60978ce1, 0xe0072c86, 0x6577d198, 0xe5e771ff, 0x53d4a83f, 0xd3440858, 0x5634f546,
16515 +
            0xd6a45521, 0x581412cd, 0xd884b2aa, 0x5df44fb4, 0xdd64efd3, 0x4455dddb, 0xc4c57dbc,
16516 +
            0x41b580a2, 0xc12520c5, 0x4f956729, 0xcf05c74e, 0x4a753a50, 0xcae59a37, 0x22d39467,
16517 +
            0xa2433400, 0x2733c91e, 0xa7a36979, 0x29132e95, 0xa9838ef2, 0x2cf373ec, 0xac63d38b,
16518 +
            0x3552e183, 0xb5c241e4, 0x30b2bcfa, 0xb0221c9d, 0x3e925b71, 0xbe02fb16, 0x3b720608,
16519 +
            0xbbe2a66f, 0x0dd17faf, 0x8d41dfc8, 0x083122d6, 0x88a182b1, 0x0611c55d, 0x8681653a,
16520 +
            0x03f19824, 0x83613843, 0x1a500a4b, 0x9ac0aa2c, 0x1fb05732, 0x9f20f755, 0x1190b0b9,
16521 +
            0x910010de, 0x1470edc0, 0x94e04da7, 0xc0ddecd7, 0x404d4cb0, 0xc53db1ae, 0x45ad11c9,
16522 +
            0xcb1d5625, 0x4b8df642, 0xcefd0b5c, 0x4e6dab3b, 0xd75c9933, 0x57cc3954, 0xd2bcc44a,
16523 +
            0x522c642d, 0xdc9c23c1, 0x5c0c83a6, 0xd97c7eb8, 0x59ecdedf, 0xefdf071f, 0x6f4fa778,
16524 +
            0xea3f5a66, 0x6aaffa01, 0xe41fbded, 0x648f1d8a, 0xe1ffe094, 0x616f40f3, 0xf85e72fb,
16525 +
            0x78ced29c, 0xfdbe2f82, 0x7d2e8fe5, 0xf39ec809, 0x730e686e, 0xf67e9570, 0x76ee3517,
16526 +
            0x9ed83b47, 0x1e489b20, 0x9b38663e, 0x1ba8c659, 0x951881b5, 0x158821d2, 0x90f8dccc,
16527 +
            0x10687cab, 0x89594ea3, 0x09c9eec4, 0x8cb913da, 0x0c29b3bd, 0x8299f451, 0x02095436,
16528 +
            0x8779a928, 0x07e9094f, 0xb1dad08f, 0x314a70e8, 0xb43a8df6, 0x34aa2d91, 0xba1a6a7d,
16529 +
            0x3a8aca1a, 0xbffa3704, 0x3f6a9763, 0xa65ba56b, 0x26cb050c, 0xa3bbf812, 0x232b5875,
16530 +
            0xad9b1f99, 0x2d0bbffe, 0xa87b42e0, 0x28ebe287,
16531 +
        ],
16532 +
        [
16533 +
            0x00000000, 0xf9ac87ee, 0xf798126b, 0x0e349585, 0xebf13961, 0x125dbe8f, 0x1c692b0a,
16534 +
            0xe5c5ace4, 0xd3236f75, 0x2a8fe89b, 0x24bb7d1e, 0xdd17faf0, 0x38d25614, 0xc17ed1fa,
16535 +
            0xcf4a447f, 0x36e6c391, 0xa287c35d, 0x5b2b44b3, 0x551fd136, 0xacb356d8, 0x4976fa3c,
16536 +
            0xb0da7dd2, 0xbeeee857, 0x47426fb9, 0x71a4ac28, 0x88082bc6, 0x863cbe43, 0x7f9039ad,
16537 +
            0x9a559549, 0x63f912a7, 0x6dcd8722, 0x946100cc, 0x41ce9b0d, 0xb8621ce3, 0xb6568966,
16538 +
            0x4ffa0e88, 0xaa3fa26c, 0x53932582, 0x5da7b007, 0xa40b37e9, 0x92edf478, 0x6b417396,
16539 +
            0x6575e613, 0x9cd961fd, 0x791ccd19, 0x80b04af7, 0x8e84df72, 0x7728589c, 0xe3495850,
16540 +
            0x1ae5dfbe, 0x14d14a3b, 0xed7dcdd5, 0x08b86131, 0xf114e6df, 0xff20735a, 0x068cf4b4,
16541 +
            0x306a3725, 0xc9c6b0cb, 0xc7f2254e, 0x3e5ea2a0, 0xdb9b0e44, 0x223789aa, 0x2c031c2f,
16542 +
            0xd5af9bc1, 0x839d361a, 0x7a31b1f4, 0x74052471, 0x8da9a39f, 0x686c0f7b, 0x91c08895,
16543 +
            0x9ff41d10, 0x66589afe, 0x50be596f, 0xa912de81, 0xa7264b04, 0x5e8accea, 0xbb4f600e,
16544 +
            0x42e3e7e0, 0x4cd77265, 0xb57bf58b, 0x211af547, 0xd8b672a9, 0xd682e72c, 0x2f2e60c2,
16545 +
            0xcaebcc26, 0x33474bc8, 0x3d73de4d, 0xc4df59a3, 0xf2399a32, 0x0b951ddc, 0x05a18859,
16546 +
            0xfc0d0fb7, 0x19c8a353, 0xe06424bd, 0xee50b138, 0x17fc36d6, 0xc253ad17, 0x3bff2af9,
16547 +
            0x35cbbf7c, 0xcc673892, 0x29a29476, 0xd00e1398, 0xde3a861d, 0x279601f3, 0x1170c262,
16548 +
            0xe8dc458c, 0xe6e8d009, 0x1f4457e7, 0xfa81fb03, 0x032d7ced, 0x0d19e968, 0xf4b56e86,
16549 +
            0x60d46e4a, 0x9978e9a4, 0x974c7c21, 0x6ee0fbcf, 0x8b25572b, 0x7289d0c5, 0x7cbd4540,
16550 +
            0x8511c2ae, 0xb3f7013f, 0x4a5b86d1, 0x446f1354, 0xbdc394ba, 0x5806385e, 0xa1aabfb0,
16551 +
            0xaf9e2a35, 0x5632addb, 0x03fb7183, 0xfa57f66d, 0xf46363e8, 0x0dcfe406, 0xe80a48e2,
16552 +
            0x11a6cf0c, 0x1f925a89, 0xe63edd67, 0xd0d81ef6, 0x29749918, 0x27400c9d, 0xdeec8b73,
16553 +
            0x3b292797, 0xc285a079, 0xccb135fc, 0x351db212, 0xa17cb2de, 0x58d03530, 0x56e4a0b5,
16554 +
            0xaf48275b, 0x4a8d8bbf, 0xb3210c51, 0xbd1599d4, 0x44b91e3a, 0x725fddab, 0x8bf35a45,
16555 +
            0x85c7cfc0, 0x7c6b482e, 0x99aee4ca, 0x60026324, 0x6e36f6a1, 0x979a714f, 0x4235ea8e,
16556 +
            0xbb996d60, 0xb5adf8e5, 0x4c017f0b, 0xa9c4d3ef, 0x50685401, 0x5e5cc184, 0xa7f0466a,
16557 +
            0x911685fb, 0x68ba0215, 0x668e9790, 0x9f22107e, 0x7ae7bc9a, 0x834b3b74, 0x8d7faef1,
16558 +
            0x74d3291f, 0xe0b229d3, 0x191eae3d, 0x172a3bb8, 0xee86bc56, 0x0b4310b2, 0xf2ef975c,
16559 +
            0xfcdb02d9, 0x05778537, 0x339146a6, 0xca3dc148, 0xc40954cd, 0x3da5d323, 0xd8607fc7,
16560 +
            0x21ccf829, 0x2ff86dac, 0xd654ea42, 0x80664799, 0x79cac077, 0x77fe55f2, 0x8e52d21c,
16561 +
            0x6b977ef8, 0x923bf916, 0x9c0f6c93, 0x65a3eb7d, 0x534528ec, 0xaae9af02, 0xa4dd3a87,
16562 +
            0x5d71bd69, 0xb8b4118d, 0x41189663, 0x4f2c03e6, 0xb6808408, 0x22e184c4, 0xdb4d032a,
16563 +
            0xd57996af, 0x2cd51141, 0xc910bda5, 0x30bc3a4b, 0x3e88afce, 0xc7242820, 0xf1c2ebb1,
16564 +
            0x086e6c5f, 0x065af9da, 0xfff67e34, 0x1a33d2d0, 0xe39f553e, 0xedabc0bb, 0x14074755,
16565 +
            0xc1a8dc94, 0x38045b7a, 0x3630ceff, 0xcf9c4911, 0x2a59e5f5, 0xd3f5621b, 0xddc1f79e,
16566 +
            0x246d7070, 0x128bb3e1, 0xeb27340f, 0xe513a18a, 0x1cbf2664, 0xf97a8a80, 0x00d60d6e,
16567 +
            0x0ee298eb, 0xf74e1f05, 0x632f1fc9, 0x9a839827, 0x94b70da2, 0x6d1b8a4c, 0x88de26a8,
16568 +
            0x7172a146, 0x7f4634c3, 0x86eab32d, 0xb00c70bc, 0x49a0f752, 0x479462d7, 0xbe38e539,
16569 +
            0x5bfd49dd, 0xa251ce33, 0xac655bb6, 0x55c9dc58,
16570 +
        ],
16571 +
        [
16572 +
            0x00000000, 0x07f6e306, 0x0fedc60c, 0x081b250a, 0x1fdb8c18, 0x182d6f1e, 0x10364a14,
16573 +
            0x17c0a912, 0x3fb71830, 0x3841fb36, 0x305ade3c, 0x37ac3d3a, 0x206c9428, 0x279a772e,
16574 +
            0x2f815224, 0x2877b122, 0x7f6e3060, 0x7898d366, 0x7083f66c, 0x7775156a, 0x60b5bc78,
16575 +
            0x67435f7e, 0x6f587a74, 0x68ae9972, 0x40d92850, 0x472fcb56, 0x4f34ee5c, 0x48c20d5a,
16576 +
            0x5f02a448, 0x58f4474e, 0x50ef6244, 0x57198142, 0xfedc60c0, 0xf92a83c6, 0xf131a6cc,
16577 +
            0xf6c745ca, 0xe107ecd8, 0xe6f10fde, 0xeeea2ad4, 0xe91cc9d2, 0xc16b78f0, 0xc69d9bf6,
16578 +
            0xce86befc, 0xc9705dfa, 0xdeb0f4e8, 0xd94617ee, 0xd15d32e4, 0xd6abd1e2, 0x81b250a0,
16579 +
            0x8644b3a6, 0x8e5f96ac, 0x89a975aa, 0x9e69dcb8, 0x999f3fbe, 0x91841ab4, 0x9672f9b2,
16580 +
            0xbe054890, 0xb9f3ab96, 0xb1e88e9c, 0xb61e6d9a, 0xa1dec488, 0xa628278e, 0xae330284,
16581 +
            0xa9c5e182, 0xf979dc37, 0xfe8f3f31, 0xf6941a3b, 0xf162f93d, 0xe6a2502f, 0xe154b329,
16582 +
            0xe94f9623, 0xeeb97525, 0xc6cec407, 0xc1382701, 0xc923020b, 0xced5e10d, 0xd915481f,
16583 +
            0xdee3ab19, 0xd6f88e13, 0xd10e6d15, 0x8617ec57, 0x81e10f51, 0x89fa2a5b, 0x8e0cc95d,
16584 +
            0x99cc604f, 0x9e3a8349, 0x9621a643, 0x91d74545, 0xb9a0f467, 0xbe561761, 0xb64d326b,
16585 +
            0xb1bbd16d, 0xa67b787f, 0xa18d9b79, 0xa996be73, 0xae605d75, 0x07a5bcf7, 0x00535ff1,
16586 +
            0x08487afb, 0x0fbe99fd, 0x187e30ef, 0x1f88d3e9, 0x1793f6e3, 0x106515e5, 0x3812a4c7,
16587 +
            0x3fe447c1, 0x37ff62cb, 0x300981cd, 0x27c928df, 0x203fcbd9, 0x2824eed3, 0x2fd20dd5,
16588 +
            0x78cb8c97, 0x7f3d6f91, 0x77264a9b, 0x70d0a99d, 0x6710008f, 0x60e6e389, 0x68fdc683,
16589 +
            0x6f0b2585, 0x477c94a7, 0x408a77a1, 0x489152ab, 0x4f67b1ad, 0x58a718bf, 0x5f51fbb9,
16590 +
            0x574adeb3, 0x50bc3db5, 0xf632a5d9, 0xf1c446df, 0xf9df63d5, 0xfe2980d3, 0xe9e929c1,
16591 +
            0xee1fcac7, 0xe604efcd, 0xe1f20ccb, 0xc985bde9, 0xce735eef, 0xc6687be5, 0xc19e98e3,
16592 +
            0xd65e31f1, 0xd1a8d2f7, 0xd9b3f7fd, 0xde4514fb, 0x895c95b9, 0x8eaa76bf, 0x86b153b5,
16593 +
            0x8147b0b3, 0x968719a1, 0x9171faa7, 0x996adfad, 0x9e9c3cab, 0xb6eb8d89, 0xb11d6e8f,
16594 +
            0xb9064b85, 0xbef0a883, 0xa9300191, 0xaec6e297, 0xa6ddc79d, 0xa12b249b, 0x08eec519,
16595 +
            0x0f18261f, 0x07030315, 0x00f5e013, 0x17354901, 0x10c3aa07, 0x18d88f0d, 0x1f2e6c0b,
16596 +
            0x3759dd29, 0x30af3e2f, 0x38b41b25, 0x3f42f823, 0x28825131, 0x2f74b237, 0x276f973d,
16597 +
            0x2099743b, 0x7780f579, 0x7076167f, 0x786d3375, 0x7f9bd073, 0x685b7961, 0x6fad9a67,
16598 +
            0x67b6bf6d, 0x60405c6b, 0x4837ed49, 0x4fc10e4f, 0x47da2b45, 0x402cc843, 0x57ec6151,
16599 +
            0x501a8257, 0x5801a75d, 0x5ff7445b, 0x0f4b79ee, 0x08bd9ae8, 0x00a6bfe2, 0x07505ce4,
16600 +
            0x1090f5f6, 0x176616f0, 0x1f7d33fa, 0x188bd0fc, 0x30fc61de, 0x370a82d8, 0x3f11a7d2,
16601 +
            0x38e744d4, 0x2f27edc6, 0x28d10ec0, 0x20ca2bca, 0x273cc8cc, 0x7025498e, 0x77d3aa88,
16602 +
            0x7fc88f82, 0x783e6c84, 0x6ffec596, 0x68082690, 0x6013039a, 0x67e5e09c, 0x4f9251be,
16603 +
            0x4864b2b8, 0x407f97b2, 0x478974b4, 0x5049dda6, 0x57bf3ea0, 0x5fa41baa, 0x5852f8ac,
16604 +
            0xf197192e, 0xf661fa28, 0xfe7adf22, 0xf98c3c24, 0xee4c9536, 0xe9ba7630, 0xe1a1533a,
16605 +
            0xe657b03c, 0xce20011e, 0xc9d6e218, 0xc1cdc712, 0xc63b2414, 0xd1fb8d06, 0xd60d6e00,
16606 +
            0xde164b0a, 0xd9e0a80c, 0x8ef9294e, 0x890fca48, 0x8114ef42, 0x86e20c44, 0x9122a556,
16607 +
            0x96d44650, 0x9ecf635a, 0x9939805c, 0xb14e317e, 0xb6b8d278, 0xbea3f772, 0xb9551474,
16608 +
            0xae95bd66, 0xa9635e60, 0xa1787b6a, 0xa68e986c,
16609 +
        ],
16610 +
        [
16611 +
            0x00000000, 0xe8a45605, 0xd589b1bd, 0x3d2de7b8, 0xafd27ecd, 0x477628c8, 0x7a5bcf70,
16612 +
            0x92ff9975, 0x5b65e02d, 0xb3c1b628, 0x8eec5190, 0x66480795, 0xf4b79ee0, 0x1c13c8e5,
16613 +
            0x213e2f5d, 0xc99a7958, 0xb6cbc05a, 0x5e6f965f, 0x634271e7, 0x8be627e2, 0x1919be97,
16614 +
            0xf1bde892, 0xcc900f2a, 0x2434592f, 0xedae2077, 0x050a7672, 0x382791ca, 0xd083c7cf,
16615 +
            0x427c5eba, 0xaad808bf, 0x97f5ef07, 0x7f51b902, 0x69569d03, 0x81f2cb06, 0xbcdf2cbe,
16616 +
            0x547b7abb, 0xc684e3ce, 0x2e20b5cb, 0x130d5273, 0xfba90476, 0x32337d2e, 0xda972b2b,
16617 +
            0xe7bacc93, 0x0f1e9a96, 0x9de103e3, 0x754555e6, 0x4868b25e, 0xa0cce45b, 0xdf9d5d59,
16618 +
            0x37390b5c, 0x0a14ece4, 0xe2b0bae1, 0x704f2394, 0x98eb7591, 0xa5c69229, 0x4d62c42c,
16619 +
            0x84f8bd74, 0x6c5ceb71, 0x51710cc9, 0xb9d55acc, 0x2b2ac3b9, 0xc38e95bc, 0xfea37204,
16620 +
            0x16072401, 0xd2ad3a06, 0x3a096c03, 0x07248bbb, 0xef80ddbe, 0x7d7f44cb, 0x95db12ce,
16621 +
            0xa8f6f576, 0x4052a373, 0x89c8da2b, 0x616c8c2e, 0x5c416b96, 0xb4e53d93, 0x261aa4e6,
16622 +
            0xcebef2e3, 0xf393155b, 0x1b37435e, 0x6466fa5c, 0x8cc2ac59, 0xb1ef4be1, 0x594b1de4,
16623 +
            0xcbb48491, 0x2310d294, 0x1e3d352c, 0xf6996329, 0x3f031a71, 0xd7a74c74, 0xea8aabcc,
16624 +
            0x022efdc9, 0x90d164bc, 0x787532b9, 0x4558d501, 0xadfc8304, 0xbbfba705, 0x535ff100,
16625 +
            0x6e7216b8, 0x86d640bd, 0x1429d9c8, 0xfc8d8fcd, 0xc1a06875, 0x29043e70, 0xe09e4728,
16626 +
            0x083a112d, 0x3517f695, 0xddb3a090, 0x4f4c39e5, 0xa7e86fe0, 0x9ac58858, 0x7261de5d,
16627 +
            0x0d30675f, 0xe594315a, 0xd8b9d6e2, 0x301d80e7, 0xa2e21992, 0x4a464f97, 0x776ba82f,
16628 +
            0x9fcffe2a, 0x56558772, 0xbef1d177, 0x83dc36cf, 0x6b7860ca, 0xf987f9bf, 0x1123afba,
16629 +
            0x2c0e4802, 0xc4aa1e07, 0xa19b69bb, 0x493f3fbe, 0x7412d806, 0x9cb68e03, 0x0e491776,
16630 +
            0xe6ed4173, 0xdbc0a6cb, 0x3364f0ce, 0xfafe8996, 0x125adf93, 0x2f77382b, 0xc7d36e2e,
16631 +
            0x552cf75b, 0xbd88a15e, 0x80a546e6, 0x680110e3, 0x1750a9e1, 0xfff4ffe4, 0xc2d9185c,
16632 +
            0x2a7d4e59, 0xb882d72c, 0x50268129, 0x6d0b6691, 0x85af3094, 0x4c3549cc, 0xa4911fc9,
16633 +
            0x99bcf871, 0x7118ae74, 0xe3e73701, 0x0b436104, 0x366e86bc, 0xdecad0b9, 0xc8cdf4b8,
16634 +
            0x2069a2bd, 0x1d444505, 0xf5e01300, 0x671f8a75, 0x8fbbdc70, 0xb2963bc8, 0x5a326dcd,
16635 +
            0x93a81495, 0x7b0c4290, 0x4621a528, 0xae85f32d, 0x3c7a6a58, 0xd4de3c5d, 0xe9f3dbe5,
16636 +
            0x01578de0, 0x7e0634e2, 0x96a262e7, 0xab8f855f, 0x432bd35a, 0xd1d44a2f, 0x39701c2a,
16637 +
            0x045dfb92, 0xecf9ad97, 0x2563d4cf, 0xcdc782ca, 0xf0ea6572, 0x184e3377, 0x8ab1aa02,
16638 +
            0x6215fc07, 0x5f381bbf, 0xb79c4dba, 0x733653bd, 0x9b9205b8, 0xa6bfe200, 0x4e1bb405,
16639 +
            0xdce42d70, 0x34407b75, 0x096d9ccd, 0xe1c9cac8, 0x2853b390, 0xc0f7e595, 0xfdda022d,
16640 +
            0x157e5428, 0x8781cd5d, 0x6f259b58, 0x52087ce0, 0xbaac2ae5, 0xc5fd93e7, 0x2d59c5e2,
16641 +
            0x1074225a, 0xf8d0745f, 0x6a2fed2a, 0x828bbb2f, 0xbfa65c97, 0x57020a92, 0x9e9873ca,
16642 +
            0x763c25cf, 0x4b11c277, 0xa3b59472, 0x314a0d07, 0xd9ee5b02, 0xe4c3bcba, 0x0c67eabf,
16643 +
            0x1a60cebe, 0xf2c498bb, 0xcfe97f03, 0x274d2906, 0xb5b2b073, 0x5d16e676, 0x603b01ce,
16644 +
            0x889f57cb, 0x41052e93, 0xa9a17896, 0x948c9f2e, 0x7c28c92b, 0xeed7505e, 0x0673065b,
16645 +
            0x3b5ee1e3, 0xd3fab7e6, 0xacab0ee4, 0x440f58e1, 0x7922bf59, 0x9186e95c, 0x03797029,
16646 +
            0xebdd262c, 0xd6f0c194, 0x3e549791, 0xf7ceeec9, 0x1f6ab8cc, 0x22475f74, 0xcae30971,
16647 +
            0x581c9004, 0xb0b8c601, 0x8d9521b9, 0x653177bc,
16648 +
        ],
16649 +
        [
16650 +
            0x00000000, 0x47f7cec1, 0x8fef9d82, 0xc8185343, 0x1b1e26b3, 0x5ce9e872, 0x94f1bb31,
16651 +
            0xd30675f0, 0x363c4d66, 0x71cb83a7, 0xb9d3d0e4, 0xfe241e25, 0x2d226bd5, 0x6ad5a514,
16652 +
            0xa2cdf657, 0xe53a3896, 0x6c789acc, 0x2b8f540d, 0xe397074e, 0xa460c98f, 0x7766bc7f,
16653 +
            0x309172be, 0xf88921fd, 0xbf7eef3c, 0x5a44d7aa, 0x1db3196b, 0xd5ab4a28, 0x925c84e9,
16654 +
            0x415af119, 0x06ad3fd8, 0xceb56c9b, 0x8942a25a, 0xd8f13598, 0x9f06fb59, 0x571ea81a,
16655 +
            0x10e966db, 0xc3ef132b, 0x8418ddea, 0x4c008ea9, 0x0bf74068, 0xeecd78fe, 0xa93ab63f,
16656 +
            0x6122e57c, 0x26d52bbd, 0xf5d35e4d, 0xb224908c, 0x7a3cc3cf, 0x3dcb0d0e, 0xb489af54,
16657 +
            0xf37e6195, 0x3b6632d6, 0x7c91fc17, 0xaf9789e7, 0xe8604726, 0x20781465, 0x678fdaa4,
16658 +
            0x82b5e232, 0xc5422cf3, 0x0d5a7fb0, 0x4aadb171, 0x99abc481, 0xde5c0a40, 0x16445903,
16659 +
            0x51b397c2, 0xb5237687, 0xf2d4b846, 0x3acceb05, 0x7d3b25c4, 0xae3d5034, 0xe9ca9ef5,
16660 +
            0x21d2cdb6, 0x66250377, 0x831f3be1, 0xc4e8f520, 0x0cf0a663, 0x4b0768a2, 0x98011d52,
16661 +
            0xdff6d393, 0x17ee80d0, 0x50194e11, 0xd95bec4b, 0x9eac228a, 0x56b471c9, 0x1143bf08,
16662 +
            0xc245caf8, 0x85b20439, 0x4daa577a, 0x0a5d99bb, 0xef67a12d, 0xa8906fec, 0x60883caf,
16663 +
            0x277ff26e, 0xf479879e, 0xb38e495f, 0x7b961a1c, 0x3c61d4dd, 0x6dd2431f, 0x2a258dde,
16664 +
            0xe23dde9d, 0xa5ca105c, 0x76cc65ac, 0x313bab6d, 0xf923f82e, 0xbed436ef, 0x5bee0e79,
16665 +
            0x1c19c0b8, 0xd40193fb, 0x93f65d3a, 0x40f028ca, 0x0707e60b, 0xcf1fb548, 0x88e87b89,
16666 +
            0x01aad9d3, 0x465d1712, 0x8e454451, 0xc9b28a90, 0x1ab4ff60, 0x5d4331a1, 0x955b62e2,
16667 +
            0xd2acac23, 0x379694b5, 0x70615a74, 0xb8790937, 0xff8ec7f6, 0x2c88b206, 0x6b7f7cc7,
16668 +
            0xa3672f84, 0xe490e145, 0x6e87f0b9, 0x29703e78, 0xe1686d3b, 0xa69fa3fa, 0x7599d60a,
16669 +
            0x326e18cb, 0xfa764b88, 0xbd818549, 0x58bbbddf, 0x1f4c731e, 0xd754205d, 0x90a3ee9c,
16670 +
            0x43a59b6c, 0x045255ad, 0xcc4a06ee, 0x8bbdc82f, 0x02ff6a75, 0x4508a4b4, 0x8d10f7f7,
16671 +
            0xcae73936, 0x19e14cc6, 0x5e168207, 0x960ed144, 0xd1f91f85, 0x34c32713, 0x7334e9d2,
16672 +
            0xbb2cba91, 0xfcdb7450, 0x2fdd01a0, 0x682acf61, 0xa0329c22, 0xe7c552e3, 0xb676c521,
16673 +
            0xf1810be0, 0x399958a3, 0x7e6e9662, 0xad68e392, 0xea9f2d53, 0x22877e10, 0x6570b0d1,
16674 +
            0x804a8847, 0xc7bd4686, 0x0fa515c5, 0x4852db04, 0x9b54aef4, 0xdca36035, 0x14bb3376,
16675 +
            0x534cfdb7, 0xda0e5fed, 0x9df9912c, 0x55e1c26f, 0x12160cae, 0xc110795e, 0x86e7b79f,
16676 +
            0x4effe4dc, 0x09082a1d, 0xec32128b, 0xabc5dc4a, 0x63dd8f09, 0x242a41c8, 0xf72c3438,
16677 +
            0xb0dbfaf9, 0x78c3a9ba, 0x3f34677b, 0xdba4863e, 0x9c5348ff, 0x544b1bbc, 0x13bcd57d,
16678 +
            0xc0baa08d, 0x874d6e4c, 0x4f553d0f, 0x08a2f3ce, 0xed98cb58, 0xaa6f0599, 0x627756da,
16679 +
            0x2580981b, 0xf686edeb, 0xb171232a, 0x79697069, 0x3e9ebea8, 0xb7dc1cf2, 0xf02bd233,
16680 +
            0x38338170, 0x7fc44fb1, 0xacc23a41, 0xeb35f480, 0x232da7c3, 0x64da6902, 0x81e05194,
16681 +
            0xc6179f55, 0x0e0fcc16, 0x49f802d7, 0x9afe7727, 0xdd09b9e6, 0x1511eaa5, 0x52e62464,
16682 +
            0x0355b3a6, 0x44a27d67, 0x8cba2e24, 0xcb4de0e5, 0x184b9515, 0x5fbc5bd4, 0x97a40897,
16683 +
            0xd053c656, 0x3569fec0, 0x729e3001, 0xba866342, 0xfd71ad83, 0x2e77d873, 0x698016b2,
16684 +
            0xa19845f1, 0xe66f8b30, 0x6f2d296a, 0x28dae7ab, 0xe0c2b4e8, 0xa7357a29, 0x74330fd9,
16685 +
            0x33c4c118, 0xfbdc925b, 0xbc2b5c9a, 0x5911640c, 0x1ee6aacd, 0xd6fef98e, 0x9109374f,
16686 +
            0x420f42bf, 0x05f88c7e, 0xcde0df3d, 0x8a1711fc,
16687 +
        ],
16688 +
        [
16689 +
            0x00000000, 0xdd0fe172, 0xbededf53, 0x63d13e21, 0x797ca311, 0xa4734263, 0xc7a27c42,
16690 +
            0x1aad9d30, 0xf2f94622, 0x2ff6a750, 0x4c279971, 0x91287803, 0x8b85e533, 0x568a0441,
16691 +
            0x355b3a60, 0xe854db12, 0xe13391f3, 0x3c3c7081, 0x5fed4ea0, 0x82e2afd2, 0x984f32e2,
16692 +
            0x4540d390, 0x2691edb1, 0xfb9e0cc3, 0x13cad7d1, 0xcec536a3, 0xad140882, 0x701be9f0,
16693 +
            0x6ab674c0, 0xb7b995b2, 0xd468ab93, 0x09674ae1, 0xc6a63e51, 0x1ba9df23, 0x7878e102,
16694 +
            0xa5770070, 0xbfda9d40, 0x62d57c32, 0x01044213, 0xdc0ba361, 0x345f7873, 0xe9509901,
16695 +
            0x8a81a720, 0x578e4652, 0x4d23db62, 0x902c3a10, 0xf3fd0431, 0x2ef2e543, 0x2795afa2,
16696 +
            0xfa9a4ed0, 0x994b70f1, 0x44449183, 0x5ee90cb3, 0x83e6edc1, 0xe037d3e0, 0x3d383292,
16697 +
            0xd56ce980, 0x086308f2, 0x6bb236d3, 0xb6bdd7a1, 0xac104a91, 0x711fabe3, 0x12ce95c2,
16698 +
            0xcfc174b0, 0x898d6115, 0x54828067, 0x3753be46, 0xea5c5f34, 0xf0f1c204, 0x2dfe2376,
16699 +
            0x4e2f1d57, 0x9320fc25, 0x7b742737, 0xa67bc645, 0xc5aaf864, 0x18a51916, 0x02088426,
16700 +
            0xdf076554, 0xbcd65b75, 0x61d9ba07, 0x68bef0e6, 0xb5b11194, 0xd6602fb5, 0x0b6fcec7,
16701 +
            0x11c253f7, 0xcccdb285, 0xaf1c8ca4, 0x72136dd6, 0x9a47b6c4, 0x474857b6, 0x24996997,
16702 +
            0xf99688e5, 0xe33b15d5, 0x3e34f4a7, 0x5de5ca86, 0x80ea2bf4, 0x4f2b5f44, 0x9224be36,
16703 +
            0xf1f58017, 0x2cfa6165, 0x3657fc55, 0xeb581d27, 0x88892306, 0x5586c274, 0xbdd21966,
16704 +
            0x60ddf814, 0x030cc635, 0xde032747, 0xc4aeba77, 0x19a15b05, 0x7a706524, 0xa77f8456,
16705 +
            0xae18ceb7, 0x73172fc5, 0x10c611e4, 0xcdc9f096, 0xd7646da6, 0x0a6b8cd4, 0x69bab2f5,
16706 +
            0xb4b55387, 0x5ce18895, 0x81ee69e7, 0xe23f57c6, 0x3f30b6b4, 0x259d2b84, 0xf892caf6,
16707 +
            0x9b43f4d7, 0x464c15a5, 0x17dbdf9d, 0xcad43eef, 0xa90500ce, 0x740ae1bc, 0x6ea77c8c,
16708 +
            0xb3a89dfe, 0xd079a3df, 0x0d7642ad, 0xe52299bf, 0x382d78cd, 0x5bfc46ec, 0x86f3a79e,
16709 +
            0x9c5e3aae, 0x4151dbdc, 0x2280e5fd, 0xff8f048f, 0xf6e84e6e, 0x2be7af1c, 0x4836913d,
16710 +
            0x9539704f, 0x8f94ed7f, 0x529b0c0d, 0x314a322c, 0xec45d35e, 0x0411084c, 0xd91ee93e,
16711 +
            0xbacfd71f, 0x67c0366d, 0x7d6dab5d, 0xa0624a2f, 0xc3b3740e, 0x1ebc957c, 0xd17de1cc,
16712 +
            0x0c7200be, 0x6fa33e9f, 0xb2acdfed, 0xa80142dd, 0x750ea3af, 0x16df9d8e, 0xcbd07cfc,
16713 +
            0x2384a7ee, 0xfe8b469c, 0x9d5a78bd, 0x405599cf, 0x5af804ff, 0x87f7e58d, 0xe426dbac,
16714 +
            0x39293ade, 0x304e703f, 0xed41914d, 0x8e90af6c, 0x539f4e1e, 0x4932d32e, 0x943d325c,
16715 +
            0xf7ec0c7d, 0x2ae3ed0f, 0xc2b7361d, 0x1fb8d76f, 0x7c69e94e, 0xa166083c, 0xbbcb950c,
16716 +
            0x66c4747e, 0x05154a5f, 0xd81aab2d, 0x9e56be88, 0x43595ffa, 0x208861db, 0xfd8780a9,
16717 +
            0xe72a1d99, 0x3a25fceb, 0x59f4c2ca, 0x84fb23b8, 0x6caff8aa, 0xb1a019d8, 0xd27127f9,
16718 +
            0x0f7ec68b, 0x15d35bbb, 0xc8dcbac9, 0xab0d84e8, 0x7602659a, 0x7f652f7b, 0xa26ace09,
16719 +
            0xc1bbf028, 0x1cb4115a, 0x06198c6a, 0xdb166d18, 0xb8c75339, 0x65c8b24b, 0x8d9c6959,
16720 +
            0x5093882b, 0x3342b60a, 0xee4d5778, 0xf4e0ca48, 0x29ef2b3a, 0x4a3e151b, 0x9731f469,
16721 +
            0x58f080d9, 0x85ff61ab, 0xe62e5f8a, 0x3b21bef8, 0x218c23c8, 0xfc83c2ba, 0x9f52fc9b,
16722 +
            0x425d1de9, 0xaa09c6fb, 0x77062789, 0x14d719a8, 0xc9d8f8da, 0xd37565ea, 0x0e7a8498,
16723 +
            0x6dabbab9, 0xb0a45bcb, 0xb9c3112a, 0x64ccf058, 0x071dce79, 0xda122f0b, 0xc0bfb23b,
16724 +
            0x1db05349, 0x7e616d68, 0xa36e8c1a, 0x4b3a5708, 0x9635b67a, 0xf5e4885b, 0x28eb6929,
16725 +
            0x3246f419, 0xef49156b, 0x8c982b4a, 0x5197ca38,
16726 +
        ],
16727 +
        [
16728 +
            0x00000000, 0x2fb7bf3a, 0x5f6f7e74, 0x70d8c14e, 0xbedefce8, 0x916943d2, 0xe1b1829c,
16729 +
            0xce063da6, 0x797ce467, 0x56cb5b5d, 0x26139a13, 0x09a42529, 0xc7a2188f, 0xe815a7b5,
16730 +
            0x98cd66fb, 0xb77ad9c1, 0xf2f9c8ce, 0xdd4e77f4, 0xad96b6ba, 0x82210980, 0x4c273426,
16731 +
            0x63908b1c, 0x13484a52, 0x3cfff568, 0x8b852ca9, 0xa4329393, 0xd4ea52dd, 0xfb5dede7,
16732 +
            0x355bd041, 0x1aec6f7b, 0x6a34ae35, 0x4583110f, 0xe1328c2b, 0xce853311, 0xbe5df25f,
16733 +
            0x91ea4d65, 0x5fec70c3, 0x705bcff9, 0x00830eb7, 0x2f34b18d, 0x984e684c, 0xb7f9d776,
16734 +
            0xc7211638, 0xe896a902, 0x269094a4, 0x09272b9e, 0x79ffead0, 0x564855ea, 0x13cb44e5,
16735 +
            0x3c7cfbdf, 0x4ca43a91, 0x631385ab, 0xad15b80d, 0x82a20737, 0xf27ac679, 0xddcd7943,
16736 +
            0x6ab7a082, 0x45001fb8, 0x35d8def6, 0x1a6f61cc, 0xd4695c6a, 0xfbdee350, 0x8b06221e,
16737 +
            0xa4b19d24, 0xc6a405e1, 0xe913badb, 0x99cb7b95, 0xb67cc4af, 0x787af909, 0x57cd4633,
16738 +
            0x2715877d, 0x08a23847, 0xbfd8e186, 0x906f5ebc, 0xe0b79ff2, 0xcf0020c8, 0x01061d6e,
16739 +
            0x2eb1a254, 0x5e69631a, 0x71dedc20, 0x345dcd2f, 0x1bea7215, 0x6b32b35b, 0x44850c61,
16740 +
            0x8a8331c7, 0xa5348efd, 0xd5ec4fb3, 0xfa5bf089, 0x4d212948, 0x62969672, 0x124e573c,
16741 +
            0x3df9e806, 0xf3ffd5a0, 0xdc486a9a, 0xac90abd4, 0x832714ee, 0x279689ca, 0x082136f0,
16742 +
            0x78f9f7be, 0x574e4884, 0x99487522, 0xb6ffca18, 0xc6270b56, 0xe990b46c, 0x5eea6dad,
16743 +
            0x715dd297, 0x018513d9, 0x2e32ace3, 0xe0349145, 0xcf832e7f, 0xbf5bef31, 0x90ec500b,
16744 +
            0xd56f4104, 0xfad8fe3e, 0x8a003f70, 0xa5b7804a, 0x6bb1bdec, 0x440602d6, 0x34dec398,
16745 +
            0x1b697ca2, 0xac13a563, 0x83a41a59, 0xf37cdb17, 0xdccb642d, 0x12cd598b, 0x3d7ae6b1,
16746 +
            0x4da227ff, 0x621598c5, 0x89891675, 0xa63ea94f, 0xd6e66801, 0xf951d73b, 0x3757ea9d,
16747 +
            0x18e055a7, 0x683894e9, 0x478f2bd3, 0xf0f5f212, 0xdf424d28, 0xaf9a8c66, 0x802d335c,
16748 +
            0x4e2b0efa, 0x619cb1c0, 0x1144708e, 0x3ef3cfb4, 0x7b70debb, 0x54c76181, 0x241fa0cf,
16749 +
            0x0ba81ff5, 0xc5ae2253, 0xea199d69, 0x9ac15c27, 0xb576e31d, 0x020c3adc, 0x2dbb85e6,
16750 +
            0x5d6344a8, 0x72d4fb92, 0xbcd2c634, 0x9365790e, 0xe3bdb840, 0xcc0a077a, 0x68bb9a5e,
16751 +
            0x470c2564, 0x37d4e42a, 0x18635b10, 0xd66566b6, 0xf9d2d98c, 0x890a18c2, 0xa6bda7f8,
16752 +
            0x11c77e39, 0x3e70c103, 0x4ea8004d, 0x611fbf77, 0xaf1982d1, 0x80ae3deb, 0xf076fca5,
16753 +
            0xdfc1439f, 0x9a425290, 0xb5f5edaa, 0xc52d2ce4, 0xea9a93de, 0x249cae78, 0x0b2b1142,
16754 +
            0x7bf3d00c, 0x54446f36, 0xe33eb6f7, 0xcc8909cd, 0xbc51c883, 0x93e677b9, 0x5de04a1f,
16755 +
            0x7257f525, 0x028f346b, 0x2d388b51, 0x4f2d1394, 0x609aacae, 0x10426de0, 0x3ff5d2da,
16756 +
            0xf1f3ef7c, 0xde445046, 0xae9c9108, 0x812b2e32, 0x3651f7f3, 0x19e648c9, 0x693e8987,
16757 +
            0x468936bd, 0x888f0b1b, 0xa738b421, 0xd7e0756f, 0xf857ca55, 0xbdd4db5a, 0x92636460,
16758 +
            0xe2bba52e, 0xcd0c1a14, 0x030a27b2, 0x2cbd9888, 0x5c6559c6, 0x73d2e6fc, 0xc4a83f3d,
16759 +
            0xeb1f8007, 0x9bc74149, 0xb470fe73, 0x7a76c3d5, 0x55c17cef, 0x2519bda1, 0x0aae029b,
16760 +
            0xae1f9fbf, 0x81a82085, 0xf170e1cb, 0xdec75ef1, 0x10c16357, 0x3f76dc6d, 0x4fae1d23,
16761 +
            0x6019a219, 0xd7637bd8, 0xf8d4c4e2, 0x880c05ac, 0xa7bbba96, 0x69bd8730, 0x460a380a,
16762 +
            0x36d2f944, 0x1965467e, 0x5ce65771, 0x7351e84b, 0x03892905, 0x2c3e963f, 0xe238ab99,
16763 +
            0xcd8f14a3, 0xbd57d5ed, 0x92e06ad7, 0x259ab316, 0x0a2d0c2c, 0x7af5cd62, 0x55427258,
16764 +
            0x9b444ffe, 0xb4f3f0c4, 0xc42b318a, 0xeb9c8eb0,
16765 +
        ],
16766 +
    ];
16767 +
16768 +
    pub static CRC32_ISCSI_TABLE: [[u32; 256]; 16] = [
16769 +
        [
16770 +
            0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, 0x26a1e7e8,
16771 +
            0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, 0x4d43cfd0, 0xbf284cd3,
16772 +
            0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b, 0xd7c45070,
16773 +
            0x25afd373, 0x36ff2087, 0xc494a384, 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54,
16774 +
            0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29,
16775 +
            0x33ed7d2a, 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512,
16776 +
            0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, 0x30e349b1,
16777 +
            0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a,
16778 +
            0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, 0x7da08661, 0x8fcb0562, 0x9c9bf696,
16779 +
            0x6ef07595, 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0,
16780 +
            0x67dafa54, 0x95b17957, 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c,
16781 +
            0xfe53516f, 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
16782 +
            0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, 0x3ac7f2eb,
16783 +
            0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, 0x61c69362, 0x93ad1061,
16784 +
            0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789, 0xeb1fcbad,
16785 +
            0x197448ae, 0x0a24bb5a, 0xf84f3859, 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46,
16786 +
            0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5,
16787 +
            0xa55230e6, 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de,
16788 +
            0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, 0x456cac67,
16789 +
            0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043,
16790 +
            0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, 0x92a8fc17, 0x60c37f14, 0x73938ce0,
16791 +
            0x81f80fe3, 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db,
16792 +
            0xf94ad42f, 0x0b21572c, 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6,
16793 +
            0x502036a5, 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
16794 +
            0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, 0x0e330a81,
16795 +
            0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, 0x758fe5d6, 0x87e466d5,
16796 +
            0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19,
16797 +
            0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530,
16798 +
            0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc,
16799 +
            0x5a048dff, 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8,
16800 +
            0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, 0x590ab964,
16801 +
            0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f,
16802 +
            0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2,
16803 +
            0x37faccf1, 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9,
16804 +
            0x4f48173d, 0xbd23943e, 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a,
16805 +
            0xc69f7b69, 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
16806 +
            0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351,
16807 +
        ],
16808 +
        [
16809 +
            0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899, 0x4e8a61dc, 0x5d28f9ab, 0x69cf5132,
16810 +
            0x7a6dc945, 0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21, 0xd39ea264, 0xc03c3a13,
16811 +
            0xf4db928a, 0xe7790afd, 0x3fc5f181, 0x2c6769f6, 0x1880c16f, 0x0b225918, 0x714f905d,
16812 +
            0x62ed082a, 0x560aa0b3, 0x45a838c4, 0xa2d13239, 0xb173aa4e, 0x859402d7, 0x96369aa0,
16813 +
            0xec5b53e5, 0xfff9cb92, 0xcb1e630b, 0xd8bcfb7c, 0x7f8be302, 0x6c297b75, 0x58ced3ec,
16814 +
            0x4b6c4b9b, 0x310182de, 0x22a31aa9, 0x1644b230, 0x05e62a47, 0xe29f20ba, 0xf13db8cd,
16815 +
            0xc5da1054, 0xd6788823, 0xac154166, 0xbfb7d911, 0x8b507188, 0x98f2e9ff, 0x404e1283,
16816 +
            0x53ec8af4, 0x670b226d, 0x74a9ba1a, 0x0ec4735f, 0x1d66eb28, 0x298143b1, 0x3a23dbc6,
16817 +
            0xdd5ad13b, 0xcef8494c, 0xfa1fe1d5, 0xe9bd79a2, 0x93d0b0e7, 0x80722890, 0xb4958009,
16818 +
            0xa737187e, 0xff17c604, 0xecb55e73, 0xd852f6ea, 0xcbf06e9d, 0xb19da7d8, 0xa23f3faf,
16819 +
            0x96d89736, 0x857a0f41, 0x620305bc, 0x71a19dcb, 0x45463552, 0x56e4ad25, 0x2c896460,
16820 +
            0x3f2bfc17, 0x0bcc548e, 0x186eccf9, 0xc0d23785, 0xd370aff2, 0xe797076b, 0xf4359f1c,
16821 +
            0x8e585659, 0x9dface2e, 0xa91d66b7, 0xbabffec0, 0x5dc6f43d, 0x4e646c4a, 0x7a83c4d3,
16822 +
            0x69215ca4, 0x134c95e1, 0x00ee0d96, 0x3409a50f, 0x27ab3d78, 0x809c2506, 0x933ebd71,
16823 +
            0xa7d915e8, 0xb47b8d9f, 0xce1644da, 0xddb4dcad, 0xe9537434, 0xfaf1ec43, 0x1d88e6be,
16824 +
            0x0e2a7ec9, 0x3acdd650, 0x296f4e27, 0x53028762, 0x40a01f15, 0x7447b78c, 0x67e52ffb,
16825 +
            0xbf59d487, 0xacfb4cf0, 0x981ce469, 0x8bbe7c1e, 0xf1d3b55b, 0xe2712d2c, 0xd69685b5,
16826 +
            0xc5341dc2, 0x224d173f, 0x31ef8f48, 0x050827d1, 0x16aabfa6, 0x6cc776e3, 0x7f65ee94,
16827 +
            0x4b82460d, 0x5820de7a, 0xfbc3faf9, 0xe861628e, 0xdc86ca17, 0xcf245260, 0xb5499b25,
16828 +
            0xa6eb0352, 0x920cabcb, 0x81ae33bc, 0x66d73941, 0x7575a136, 0x419209af, 0x523091d8,
16829 +
            0x285d589d, 0x3bffc0ea, 0x0f186873, 0x1cbaf004, 0xc4060b78, 0xd7a4930f, 0xe3433b96,
16830 +
            0xf0e1a3e1, 0x8a8c6aa4, 0x992ef2d3, 0xadc95a4a, 0xbe6bc23d, 0x5912c8c0, 0x4ab050b7,
16831 +
            0x7e57f82e, 0x6df56059, 0x1798a91c, 0x043a316b, 0x30dd99f2, 0x237f0185, 0x844819fb,
16832 +
            0x97ea818c, 0xa30d2915, 0xb0afb162, 0xcac27827, 0xd960e050, 0xed8748c9, 0xfe25d0be,
16833 +
            0x195cda43, 0x0afe4234, 0x3e19eaad, 0x2dbb72da, 0x57d6bb9f, 0x447423e8, 0x70938b71,
16834 +
            0x63311306, 0xbb8de87a, 0xa82f700d, 0x9cc8d894, 0x8f6a40e3, 0xf50789a6, 0xe6a511d1,
16835 +
            0xd242b948, 0xc1e0213f, 0x26992bc2, 0x353bb3b5, 0x01dc1b2c, 0x127e835b, 0x68134a1e,
16836 +
            0x7bb1d269, 0x4f567af0, 0x5cf4e287, 0x04d43cfd, 0x1776a48a, 0x23910c13, 0x30339464,
16837 +
            0x4a5e5d21, 0x59fcc556, 0x6d1b6dcf, 0x7eb9f5b8, 0x99c0ff45, 0x8a626732, 0xbe85cfab,
16838 +
            0xad2757dc, 0xd74a9e99, 0xc4e806ee, 0xf00fae77, 0xe3ad3600, 0x3b11cd7c, 0x28b3550b,
16839 +
            0x1c54fd92, 0x0ff665e5, 0x759baca0, 0x663934d7, 0x52de9c4e, 0x417c0439, 0xa6050ec4,
16840 +
            0xb5a796b3, 0x81403e2a, 0x92e2a65d, 0xe88f6f18, 0xfb2df76f, 0xcfca5ff6, 0xdc68c781,
16841 +
            0x7b5fdfff, 0x68fd4788, 0x5c1aef11, 0x4fb87766, 0x35d5be23, 0x26772654, 0x12908ecd,
16842 +
            0x013216ba, 0xe64b1c47, 0xf5e98430, 0xc10e2ca9, 0xd2acb4de, 0xa8c17d9b, 0xbb63e5ec,
16843 +
            0x8f844d75, 0x9c26d502, 0x449a2e7e, 0x5738b609, 0x63df1e90, 0x707d86e7, 0x0a104fa2,
16844 +
            0x19b2d7d5, 0x2d557f4c, 0x3ef7e73b, 0xd98eedc6, 0xca2c75b1, 0xfecbdd28, 0xed69455f,
16845 +
            0x97048c1a, 0x84a6146d, 0xb041bcf4, 0xa3e32483,
16846 +
        ],
16847 +
        [
16848 +
            0x00000000, 0xa541927e, 0x4f6f520d, 0xea2ec073, 0x9edea41a, 0x3b9f3664, 0xd1b1f617,
16849 +
            0x74f06469, 0x38513ec5, 0x9d10acbb, 0x773e6cc8, 0xd27ffeb6, 0xa68f9adf, 0x03ce08a1,
16850 +
            0xe9e0c8d2, 0x4ca15aac, 0x70a27d8a, 0xd5e3eff4, 0x3fcd2f87, 0x9a8cbdf9, 0xee7cd990,
16851 +
            0x4b3d4bee, 0xa1138b9d, 0x045219e3, 0x48f3434f, 0xedb2d131, 0x079c1142, 0xa2dd833c,
16852 +
            0xd62de755, 0x736c752b, 0x9942b558, 0x3c032726, 0xe144fb14, 0x4405696a, 0xae2ba919,
16853 +
            0x0b6a3b67, 0x7f9a5f0e, 0xdadbcd70, 0x30f50d03, 0x95b49f7d, 0xd915c5d1, 0x7c5457af,
16854 +
            0x967a97dc, 0x333b05a2, 0x47cb61cb, 0xe28af3b5, 0x08a433c6, 0xade5a1b8, 0x91e6869e,
16855 +
            0x34a714e0, 0xde89d493, 0x7bc846ed, 0x0f382284, 0xaa79b0fa, 0x40577089, 0xe516e2f7,
16856 +
            0xa9b7b85b, 0x0cf62a25, 0xe6d8ea56, 0x43997828, 0x37691c41, 0x92288e3f, 0x78064e4c,
16857 +
            0xdd47dc32, 0xc76580d9, 0x622412a7, 0x880ad2d4, 0x2d4b40aa, 0x59bb24c3, 0xfcfab6bd,
16858 +
            0x16d476ce, 0xb395e4b0, 0xff34be1c, 0x5a752c62, 0xb05bec11, 0x151a7e6f, 0x61ea1a06,
16859 +
            0xc4ab8878, 0x2e85480b, 0x8bc4da75, 0xb7c7fd53, 0x12866f2d, 0xf8a8af5e, 0x5de93d20,
16860 +
            0x29195949, 0x8c58cb37, 0x66760b44, 0xc337993a, 0x8f96c396, 0x2ad751e8, 0xc0f9919b,
16861 +
            0x65b803e5, 0x1148678c, 0xb409f5f2, 0x5e273581, 0xfb66a7ff, 0x26217bcd, 0x8360e9b3,
16862 +
            0x694e29c0, 0xcc0fbbbe, 0xb8ffdfd7, 0x1dbe4da9, 0xf7908dda, 0x52d11fa4, 0x1e704508,
16863 +
            0xbb31d776, 0x511f1705, 0xf45e857b, 0x80aee112, 0x25ef736c, 0xcfc1b31f, 0x6a802161,
16864 +
            0x56830647, 0xf3c29439, 0x19ec544a, 0xbcadc634, 0xc85da25d, 0x6d1c3023, 0x8732f050,
16865 +
            0x2273622e, 0x6ed23882, 0xcb93aafc, 0x21bd6a8f, 0x84fcf8f1, 0xf00c9c98, 0x554d0ee6,
16866 +
            0xbf63ce95, 0x1a225ceb, 0x8b277743, 0x2e66e53d, 0xc448254e, 0x6109b730, 0x15f9d359,
16867 +
            0xb0b84127, 0x5a968154, 0xffd7132a, 0xb3764986, 0x1637dbf8, 0xfc191b8b, 0x595889f5,
16868 +
            0x2da8ed9c, 0x88e97fe2, 0x62c7bf91, 0xc7862def, 0xfb850ac9, 0x5ec498b7, 0xb4ea58c4,
16869 +
            0x11abcaba, 0x655baed3, 0xc01a3cad, 0x2a34fcde, 0x8f756ea0, 0xc3d4340c, 0x6695a672,
16870 +
            0x8cbb6601, 0x29faf47f, 0x5d0a9016, 0xf84b0268, 0x1265c21b, 0xb7245065, 0x6a638c57,
16871 +
            0xcf221e29, 0x250cde5a, 0x804d4c24, 0xf4bd284d, 0x51fcba33, 0xbbd27a40, 0x1e93e83e,
16872 +
            0x5232b292, 0xf77320ec, 0x1d5de09f, 0xb81c72e1, 0xccec1688, 0x69ad84f6, 0x83834485,
16873 +
            0x26c2d6fb, 0x1ac1f1dd, 0xbf8063a3, 0x55aea3d0, 0xf0ef31ae, 0x841f55c7, 0x215ec7b9,
16874 +
            0xcb7007ca, 0x6e3195b4, 0x2290cf18, 0x87d15d66, 0x6dff9d15, 0xc8be0f6b, 0xbc4e6b02,
16875 +
            0x190ff97c, 0xf321390f, 0x5660ab71, 0x4c42f79a, 0xe90365e4, 0x032da597, 0xa66c37e9,
16876 +
            0xd29c5380, 0x77ddc1fe, 0x9df3018d, 0x38b293f3, 0x7413c95f, 0xd1525b21, 0x3b7c9b52,
16877 +
            0x9e3d092c, 0xeacd6d45, 0x4f8cff3b, 0xa5a23f48, 0x00e3ad36, 0x3ce08a10, 0x99a1186e,
16878 +
            0x738fd81d, 0xd6ce4a63, 0xa23e2e0a, 0x077fbc74, 0xed517c07, 0x4810ee79, 0x04b1b4d5,
16879 +
            0xa1f026ab, 0x4bdee6d8, 0xee9f74a6, 0x9a6f10cf, 0x3f2e82b1, 0xd50042c2, 0x7041d0bc,
16880 +
            0xad060c8e, 0x08479ef0, 0xe2695e83, 0x4728ccfd, 0x33d8a894, 0x96993aea, 0x7cb7fa99,
16881 +
            0xd9f668e7, 0x9557324b, 0x3016a035, 0xda386046, 0x7f79f238, 0x0b899651, 0xaec8042f,
16882 +
            0x44e6c45c, 0xe1a75622, 0xdda47104, 0x78e5e37a, 0x92cb2309, 0x378ab177, 0x437ad51e,
16883 +
            0xe63b4760, 0x0c158713, 0xa954156d, 0xe5f54fc1, 0x40b4ddbf, 0xaa9a1dcc, 0x0fdb8fb2,
16884 +
            0x7b2bebdb, 0xde6a79a5, 0x3444b9d6, 0x91052ba8,
16885 +
        ],
16886 +
        [
16887 +
            0x00000000, 0xdd45aab8, 0xbf672381, 0x62228939, 0x7b2231f3, 0xa6679b4b, 0xc4451272,
16888 +
            0x1900b8ca, 0xf64463e6, 0x2b01c95e, 0x49234067, 0x9466eadf, 0x8d665215, 0x5023f8ad,
16889 +
            0x32017194, 0xef44db2c, 0xe964b13d, 0x34211b85, 0x560392bc, 0x8b463804, 0x924680ce,
16890 +
            0x4f032a76, 0x2d21a34f, 0xf06409f7, 0x1f20d2db, 0xc2657863, 0xa047f15a, 0x7d025be2,
16891 +
            0x6402e328, 0xb9474990, 0xdb65c0a9, 0x06206a11, 0xd725148b, 0x0a60be33, 0x6842370a,
16892 +
            0xb5079db2, 0xac072578, 0x71428fc0, 0x136006f9, 0xce25ac41, 0x2161776d, 0xfc24ddd5,
16893 +
            0x9e0654ec, 0x4343fe54, 0x5a43469e, 0x8706ec26, 0xe524651f, 0x3861cfa7, 0x3e41a5b6,
16894 +
            0xe3040f0e, 0x81268637, 0x5c632c8f, 0x45639445, 0x98263efd, 0xfa04b7c4, 0x27411d7c,
16895 +
            0xc805c650, 0x15406ce8, 0x7762e5d1, 0xaa274f69, 0xb327f7a3, 0x6e625d1b, 0x0c40d422,
16896 +
            0xd1057e9a, 0xaba65fe7, 0x76e3f55f, 0x14c17c66, 0xc984d6de, 0xd0846e14, 0x0dc1c4ac,
16897 +
            0x6fe34d95, 0xb2a6e72d, 0x5de23c01, 0x80a796b9, 0xe2851f80, 0x3fc0b538, 0x26c00df2,
16898 +
            0xfb85a74a, 0x99a72e73, 0x44e284cb, 0x42c2eeda, 0x9f874462, 0xfda5cd5b, 0x20e067e3,
16899 +
            0x39e0df29, 0xe4a57591, 0x8687fca8, 0x5bc25610, 0xb4868d3c, 0x69c32784, 0x0be1aebd,
16900 +
            0xd6a40405, 0xcfa4bccf, 0x12e11677, 0x70c39f4e, 0xad8635f6, 0x7c834b6c, 0xa1c6e1d4,
16901 +
            0xc3e468ed, 0x1ea1c255, 0x07a17a9f, 0xdae4d027, 0xb8c6591e, 0x6583f3a6, 0x8ac7288a,
16902 +
            0x57828232, 0x35a00b0b, 0xe8e5a1b3, 0xf1e51979, 0x2ca0b3c1, 0x4e823af8, 0x93c79040,
16903 +
            0x95e7fa51, 0x48a250e9, 0x2a80d9d0, 0xf7c57368, 0xeec5cba2, 0x3380611a, 0x51a2e823,
16904 +
            0x8ce7429b, 0x63a399b7, 0xbee6330f, 0xdcc4ba36, 0x0181108e, 0x1881a844, 0xc5c402fc,
16905 +
            0xa7e68bc5, 0x7aa3217d, 0x52a0c93f, 0x8fe56387, 0xedc7eabe, 0x30824006, 0x2982f8cc,
16906 +
            0xf4c75274, 0x96e5db4d, 0x4ba071f5, 0xa4e4aad9, 0x79a10061, 0x1b838958, 0xc6c623e0,
16907 +
            0xdfc69b2a, 0x02833192, 0x60a1b8ab, 0xbde41213, 0xbbc47802, 0x6681d2ba, 0x04a35b83,
16908 +
            0xd9e6f13b, 0xc0e649f1, 0x1da3e349, 0x7f816a70, 0xa2c4c0c8, 0x4d801be4, 0x90c5b15c,
16909 +
            0xf2e73865, 0x2fa292dd, 0x36a22a17, 0xebe780af, 0x89c50996, 0x5480a32e, 0x8585ddb4,
16910 +
            0x58c0770c, 0x3ae2fe35, 0xe7a7548d, 0xfea7ec47, 0x23e246ff, 0x41c0cfc6, 0x9c85657e,
16911 +
            0x73c1be52, 0xae8414ea, 0xcca69dd3, 0x11e3376b, 0x08e38fa1, 0xd5a62519, 0xb784ac20,
16912 +
            0x6ac10698, 0x6ce16c89, 0xb1a4c631, 0xd3864f08, 0x0ec3e5b0, 0x17c35d7a, 0xca86f7c2,
16913 +
            0xa8a47efb, 0x75e1d443, 0x9aa50f6f, 0x47e0a5d7, 0x25c22cee, 0xf8878656, 0xe1873e9c,
16914 +
            0x3cc29424, 0x5ee01d1d, 0x83a5b7a5, 0xf90696d8, 0x24433c60, 0x4661b559, 0x9b241fe1,
16915 +
            0x8224a72b, 0x5f610d93, 0x3d4384aa, 0xe0062e12, 0x0f42f53e, 0xd2075f86, 0xb025d6bf,
16916 +
            0x6d607c07, 0x7460c4cd, 0xa9256e75, 0xcb07e74c, 0x16424df4, 0x106227e5, 0xcd278d5d,
16917 +
            0xaf050464, 0x7240aedc, 0x6b401616, 0xb605bcae, 0xd4273597, 0x09629f2f, 0xe6264403,
16918 +
            0x3b63eebb, 0x59416782, 0x8404cd3a, 0x9d0475f0, 0x4041df48, 0x22635671, 0xff26fcc9,
16919 +
            0x2e238253, 0xf36628eb, 0x9144a1d2, 0x4c010b6a, 0x5501b3a0, 0x88441918, 0xea669021,
16920 +
            0x37233a99, 0xd867e1b5, 0x05224b0d, 0x6700c234, 0xba45688c, 0xa345d046, 0x7e007afe,
16921 +
            0x1c22f3c7, 0xc167597f, 0xc747336e, 0x1a0299d6, 0x782010ef, 0xa565ba57, 0xbc65029d,
16922 +
            0x6120a825, 0x0302211c, 0xde478ba4, 0x31035088, 0xec46fa30, 0x8e647309, 0x5321d9b1,
16923 +
            0x4a21617b, 0x9764cbc3, 0xf54642fa, 0x2803e842,
16924 +
        ],
16925 +
        [
16926 +
            0x00000000, 0x38116fac, 0x7022df58, 0x4833b0f4, 0xe045beb0, 0xd854d11c, 0x906761e8,
16927 +
            0xa8760e44, 0xc5670b91, 0xfd76643d, 0xb545d4c9, 0x8d54bb65, 0x2522b521, 0x1d33da8d,
16928 +
            0x55006a79, 0x6d1105d5, 0x8f2261d3, 0xb7330e7f, 0xff00be8b, 0xc711d127, 0x6f67df63,
16929 +
            0x5776b0cf, 0x1f45003b, 0x27546f97, 0x4a456a42, 0x725405ee, 0x3a67b51a, 0x0276dab6,
16930 +
            0xaa00d4f2, 0x9211bb5e, 0xda220baa, 0xe2336406, 0x1ba8b557, 0x23b9dafb, 0x6b8a6a0f,
16931 +
            0x539b05a3, 0xfbed0be7, 0xc3fc644b, 0x8bcfd4bf, 0xb3debb13, 0xdecfbec6, 0xe6ded16a,
16932 +
            0xaeed619e, 0x96fc0e32, 0x3e8a0076, 0x069b6fda, 0x4ea8df2e, 0x76b9b082, 0x948ad484,
16933 +
            0xac9bbb28, 0xe4a80bdc, 0xdcb96470, 0x74cf6a34, 0x4cde0598, 0x04edb56c, 0x3cfcdac0,
16934 +
            0x51eddf15, 0x69fcb0b9, 0x21cf004d, 0x19de6fe1, 0xb1a861a5, 0x89b90e09, 0xc18abefd,
16935 +
            0xf99bd151, 0x37516aae, 0x0f400502, 0x4773b5f6, 0x7f62da5a, 0xd714d41e, 0xef05bbb2,
16936 +
            0xa7360b46, 0x9f2764ea, 0xf236613f, 0xca270e93, 0x8214be67, 0xba05d1cb, 0x1273df8f,
16937 +
            0x2a62b023, 0x625100d7, 0x5a406f7b, 0xb8730b7d, 0x806264d1, 0xc851d425, 0xf040bb89,
16938 +
            0x5836b5cd, 0x6027da61, 0x28146a95, 0x10050539, 0x7d1400ec, 0x45056f40, 0x0d36dfb4,
16939 +
            0x3527b018, 0x9d51be5c, 0xa540d1f0, 0xed736104, 0xd5620ea8, 0x2cf9dff9, 0x14e8b055,
16940 +
            0x5cdb00a1, 0x64ca6f0d, 0xccbc6149, 0xf4ad0ee5, 0xbc9ebe11, 0x848fd1bd, 0xe99ed468,
16941 +
            0xd18fbbc4, 0x99bc0b30, 0xa1ad649c, 0x09db6ad8, 0x31ca0574, 0x79f9b580, 0x41e8da2c,
16942 +
            0xa3dbbe2a, 0x9bcad186, 0xd3f96172, 0xebe80ede, 0x439e009a, 0x7b8f6f36, 0x33bcdfc2,
16943 +
            0x0badb06e, 0x66bcb5bb, 0x5eadda17, 0x169e6ae3, 0x2e8f054f, 0x86f90b0b, 0xbee864a7,
16944 +
            0xf6dbd453, 0xcecabbff, 0x6ea2d55c, 0x56b3baf0, 0x1e800a04, 0x269165a8, 0x8ee76bec,
16945 +
            0xb6f60440, 0xfec5b4b4, 0xc6d4db18, 0xabc5decd, 0x93d4b161, 0xdbe70195, 0xe3f66e39,
16946 +
            0x4b80607d, 0x73910fd1, 0x3ba2bf25, 0x03b3d089, 0xe180b48f, 0xd991db23, 0x91a26bd7,
16947 +
            0xa9b3047b, 0x01c50a3f, 0x39d46593, 0x71e7d567, 0x49f6bacb, 0x24e7bf1e, 0x1cf6d0b2,
16948 +
            0x54c56046, 0x6cd40fea, 0xc4a201ae, 0xfcb36e02, 0xb480def6, 0x8c91b15a, 0x750a600b,
16949 +
            0x4d1b0fa7, 0x0528bf53, 0x3d39d0ff, 0x954fdebb, 0xad5eb117, 0xe56d01e3, 0xdd7c6e4f,
16950 +
            0xb06d6b9a, 0x887c0436, 0xc04fb4c2, 0xf85edb6e, 0x5028d52a, 0x6839ba86, 0x200a0a72,
16951 +
            0x181b65de, 0xfa2801d8, 0xc2396e74, 0x8a0ade80, 0xb21bb12c, 0x1a6dbf68, 0x227cd0c4,
16952 +
            0x6a4f6030, 0x525e0f9c, 0x3f4f0a49, 0x075e65e5, 0x4f6dd511, 0x777cbabd, 0xdf0ab4f9,
16953 +
            0xe71bdb55, 0xaf286ba1, 0x9739040d, 0x59f3bff2, 0x61e2d05e, 0x29d160aa, 0x11c00f06,
16954 +
            0xb9b60142, 0x81a76eee, 0xc994de1a, 0xf185b1b6, 0x9c94b463, 0xa485dbcf, 0xecb66b3b,
16955 +
            0xd4a70497, 0x7cd10ad3, 0x44c0657f, 0x0cf3d58b, 0x34e2ba27, 0xd6d1de21, 0xeec0b18d,
16956 +
            0xa6f30179, 0x9ee26ed5, 0x36946091, 0x0e850f3d, 0x46b6bfc9, 0x7ea7d065, 0x13b6d5b0,
16957 +
            0x2ba7ba1c, 0x63940ae8, 0x5b856544, 0xf3f36b00, 0xcbe204ac, 0x83d1b458, 0xbbc0dbf4,
16958 +
            0x425b0aa5, 0x7a4a6509, 0x3279d5fd, 0x0a68ba51, 0xa21eb415, 0x9a0fdbb9, 0xd23c6b4d,
16959 +
            0xea2d04e1, 0x873c0134, 0xbf2d6e98, 0xf71ede6c, 0xcf0fb1c0, 0x6779bf84, 0x5f68d028,
16960 +
            0x175b60dc, 0x2f4a0f70, 0xcd796b76, 0xf56804da, 0xbd5bb42e, 0x854adb82, 0x2d3cd5c6,
16961 +
            0x152dba6a, 0x5d1e0a9e, 0x650f6532, 0x081e60e7, 0x300f0f4b, 0x783cbfbf, 0x402dd013,
16962 +
            0xe85bde57, 0xd04ab1fb, 0x9879010f, 0xa0686ea3,
16963 +
        ],
16964 +
        [
16965 +
            0x00000000, 0xef306b19, 0xdb8ca0c3, 0x34bccbda, 0xb2f53777, 0x5dc55c6e, 0x697997b4,
16966 +
            0x8649fcad, 0x6006181f, 0x8f367306, 0xbb8ab8dc, 0x54bad3c5, 0xd2f32f68, 0x3dc34471,
16967 +
            0x097f8fab, 0xe64fe4b2, 0xc00c303e, 0x2f3c5b27, 0x1b8090fd, 0xf4b0fbe4, 0x72f90749,
16968 +
            0x9dc96c50, 0xa975a78a, 0x4645cc93, 0xa00a2821, 0x4f3a4338, 0x7b8688e2, 0x94b6e3fb,
16969 +
            0x12ff1f56, 0xfdcf744f, 0xc973bf95, 0x2643d48c, 0x85f4168d, 0x6ac47d94, 0x5e78b64e,
16970 +
            0xb148dd57, 0x370121fa, 0xd8314ae3, 0xec8d8139, 0x03bdea20, 0xe5f20e92, 0x0ac2658b,
16971 +
            0x3e7eae51, 0xd14ec548, 0x570739e5, 0xb83752fc, 0x8c8b9926, 0x63bbf23f, 0x45f826b3,
16972 +
            0xaac84daa, 0x9e748670, 0x7144ed69, 0xf70d11c4, 0x183d7add, 0x2c81b107, 0xc3b1da1e,
16973 +
            0x25fe3eac, 0xcace55b5, 0xfe729e6f, 0x1142f576, 0x970b09db, 0x783b62c2, 0x4c87a918,
16974 +
            0xa3b7c201, 0x0e045beb, 0xe13430f2, 0xd588fb28, 0x3ab89031, 0xbcf16c9c, 0x53c10785,
16975 +
            0x677dcc5f, 0x884da746, 0x6e0243f4, 0x813228ed, 0xb58ee337, 0x5abe882e, 0xdcf77483,
16976 +
            0x33c71f9a, 0x077bd440, 0xe84bbf59, 0xce086bd5, 0x213800cc, 0x1584cb16, 0xfab4a00f,
16977 +
            0x7cfd5ca2, 0x93cd37bb, 0xa771fc61, 0x48419778, 0xae0e73ca, 0x413e18d3, 0x7582d309,
16978 +
            0x9ab2b810, 0x1cfb44bd, 0xf3cb2fa4, 0xc777e47e, 0x28478f67, 0x8bf04d66, 0x64c0267f,
16979 +
            0x507ceda5, 0xbf4c86bc, 0x39057a11, 0xd6351108, 0xe289dad2, 0x0db9b1cb, 0xebf65579,
16980 +
            0x04c63e60, 0x307af5ba, 0xdf4a9ea3, 0x5903620e, 0xb6330917, 0x828fc2cd, 0x6dbfa9d4,
16981 +
            0x4bfc7d58, 0xa4cc1641, 0x9070dd9b, 0x7f40b682, 0xf9094a2f, 0x16392136, 0x2285eaec,
16982 +
            0xcdb581f5, 0x2bfa6547, 0xc4ca0e5e, 0xf076c584, 0x1f46ae9d, 0x990f5230, 0x763f3929,
16983 +
            0x4283f2f3, 0xadb399ea, 0x1c08b7d6, 0xf338dccf, 0xc7841715, 0x28b47c0c, 0xaefd80a1,
16984 +
            0x41cdebb8, 0x75712062, 0x9a414b7b, 0x7c0eafc9, 0x933ec4d0, 0xa7820f0a, 0x48b26413,
16985 +
            0xcefb98be, 0x21cbf3a7, 0x1577387d, 0xfa475364, 0xdc0487e8, 0x3334ecf1, 0x0788272b,
16986 +
            0xe8b84c32, 0x6ef1b09f, 0x81c1db86, 0xb57d105c, 0x5a4d7b45, 0xbc029ff7, 0x5332f4ee,
16987 +
            0x678e3f34, 0x88be542d, 0x0ef7a880, 0xe1c7c399, 0xd57b0843, 0x3a4b635a, 0x99fca15b,
16988 +
            0x76ccca42, 0x42700198, 0xad406a81, 0x2b09962c, 0xc439fd35, 0xf08536ef, 0x1fb55df6,
16989 +
            0xf9fab944, 0x16cad25d, 0x22761987, 0xcd46729e, 0x4b0f8e33, 0xa43fe52a, 0x90832ef0,
16990 +
            0x7fb345e9, 0x59f09165, 0xb6c0fa7c, 0x827c31a6, 0x6d4c5abf, 0xeb05a612, 0x0435cd0b,
16991 +
            0x308906d1, 0xdfb96dc8, 0x39f6897a, 0xd6c6e263, 0xe27a29b9, 0x0d4a42a0, 0x8b03be0d,
16992 +
            0x6433d514, 0x508f1ece, 0xbfbf75d7, 0x120cec3d, 0xfd3c8724, 0xc9804cfe, 0x26b027e7,
16993 +
            0xa0f9db4a, 0x4fc9b053, 0x7b757b89, 0x94451090, 0x720af422, 0x9d3a9f3b, 0xa98654e1,
16994 +
            0x46b63ff8, 0xc0ffc355, 0x2fcfa84c, 0x1b736396, 0xf443088f, 0xd200dc03, 0x3d30b71a,
16995 +
            0x098c7cc0, 0xe6bc17d9, 0x60f5eb74, 0x8fc5806d, 0xbb794bb7, 0x544920ae, 0xb206c41c,
16996 +
            0x5d36af05, 0x698a64df, 0x86ba0fc6, 0x00f3f36b, 0xefc39872, 0xdb7f53a8, 0x344f38b1,
16997 +
            0x97f8fab0, 0x78c891a9, 0x4c745a73, 0xa344316a, 0x250dcdc7, 0xca3da6de, 0xfe816d04,
16998 +
            0x11b1061d, 0xf7fee2af, 0x18ce89b6, 0x2c72426c, 0xc3422975, 0x450bd5d8, 0xaa3bbec1,
16999 +
            0x9e87751b, 0x71b71e02, 0x57f4ca8e, 0xb8c4a197, 0x8c786a4d, 0x63480154, 0xe501fdf9,
17000 +
            0x0a3196e0, 0x3e8d5d3a, 0xd1bd3623, 0x37f2d291, 0xd8c2b988, 0xec7e7252, 0x034e194b,
17001 +
            0x8507e5e6, 0x6a378eff, 0x5e8b4525, 0xb1bb2e3c,
17002 +
        ],
17003 +
        [
17004 +
            0x00000000, 0x68032cc8, 0xd0065990, 0xb8057558, 0xa5e0c5d1, 0xcde3e919, 0x75e69c41,
17005 +
            0x1de5b089, 0x4e2dfd53, 0x262ed19b, 0x9e2ba4c3, 0xf628880b, 0xebcd3882, 0x83ce144a,
17006 +
            0x3bcb6112, 0x53c84dda, 0x9c5bfaa6, 0xf458d66e, 0x4c5da336, 0x245e8ffe, 0x39bb3f77,
17007 +
            0x51b813bf, 0xe9bd66e7, 0x81be4a2f, 0xd27607f5, 0xba752b3d, 0x02705e65, 0x6a7372ad,
17008 +
            0x7796c224, 0x1f95eeec, 0xa7909bb4, 0xcf93b77c, 0x3d5b83bd, 0x5558af75, 0xed5dda2d,
17009 +
            0x855ef6e5, 0x98bb466c, 0xf0b86aa4, 0x48bd1ffc, 0x20be3334, 0x73767eee, 0x1b755226,
17010 +
            0xa370277e, 0xcb730bb6, 0xd696bb3f, 0xbe9597f7, 0x0690e2af, 0x6e93ce67, 0xa100791b,
17011 +
            0xc90355d3, 0x7106208b, 0x19050c43, 0x04e0bcca, 0x6ce39002, 0xd4e6e55a, 0xbce5c992,
17012 +
            0xef2d8448, 0x872ea880, 0x3f2bddd8, 0x5728f110, 0x4acd4199, 0x22ce6d51, 0x9acb1809,
17013 +
            0xf2c834c1, 0x7ab7077a, 0x12b42bb2, 0xaab15eea, 0xc2b27222, 0xdf57c2ab, 0xb754ee63,
17014 +
            0x0f519b3b, 0x6752b7f3, 0x349afa29, 0x5c99d6e1, 0xe49ca3b9, 0x8c9f8f71, 0x917a3ff8,
17015 +
            0xf9791330, 0x417c6668, 0x297f4aa0, 0xe6ecfddc, 0x8eefd114, 0x36eaa44c, 0x5ee98884,
17016 +
            0x430c380d, 0x2b0f14c5, 0x930a619d, 0xfb094d55, 0xa8c1008f, 0xc0c22c47, 0x78c7591f,
17017 +
            0x10c475d7, 0x0d21c55e, 0x6522e996, 0xdd279cce, 0xb524b006, 0x47ec84c7, 0x2fefa80f,
17018 +
            0x97eadd57, 0xffe9f19f, 0xe20c4116, 0x8a0f6dde, 0x320a1886, 0x5a09344e, 0x09c17994,
17019 +
            0x61c2555c, 0xd9c72004, 0xb1c40ccc, 0xac21bc45, 0xc422908d, 0x7c27e5d5, 0x1424c91d,
17020 +
            0xdbb77e61, 0xb3b452a9, 0x0bb127f1, 0x63b20b39, 0x7e57bbb0, 0x16549778, 0xae51e220,
17021 +
            0xc652cee8, 0x959a8332, 0xfd99affa, 0x459cdaa2, 0x2d9ff66a, 0x307a46e3, 0x58796a2b,
17022 +
            0xe07c1f73, 0x887f33bb, 0xf56e0ef4, 0x9d6d223c, 0x25685764, 0x4d6b7bac, 0x508ecb25,
17023 +
            0x388de7ed, 0x808892b5, 0xe88bbe7d, 0xbb43f3a7, 0xd340df6f, 0x6b45aa37, 0x034686ff,
17024 +
            0x1ea33676, 0x76a01abe, 0xcea56fe6, 0xa6a6432e, 0x6935f452, 0x0136d89a, 0xb933adc2,
17025 +
            0xd130810a, 0xccd53183, 0xa4d61d4b, 0x1cd36813, 0x74d044db, 0x27180901, 0x4f1b25c9,
17026 +
            0xf71e5091, 0x9f1d7c59, 0x82f8ccd0, 0xeafbe018, 0x52fe9540, 0x3afdb988, 0xc8358d49,
17027 +
            0xa036a181, 0x1833d4d9, 0x7030f811, 0x6dd54898, 0x05d66450, 0xbdd31108, 0xd5d03dc0,
17028 +
            0x8618701a, 0xee1b5cd2, 0x561e298a, 0x3e1d0542, 0x23f8b5cb, 0x4bfb9903, 0xf3feec5b,
17029 +
            0x9bfdc093, 0x546e77ef, 0x3c6d5b27, 0x84682e7f, 0xec6b02b7, 0xf18eb23e, 0x998d9ef6,
17030 +
            0x2188ebae, 0x498bc766, 0x1a438abc, 0x7240a674, 0xca45d32c, 0xa246ffe4, 0xbfa34f6d,
17031 +
            0xd7a063a5, 0x6fa516fd, 0x07a63a35, 0x8fd9098e, 0xe7da2546, 0x5fdf501e, 0x37dc7cd6,
17032 +
            0x2a39cc5f, 0x423ae097, 0xfa3f95cf, 0x923cb907, 0xc1f4f4dd, 0xa9f7d815, 0x11f2ad4d,
17033 +
            0x79f18185, 0x6414310c, 0x0c171dc4, 0xb412689c, 0xdc114454, 0x1382f328, 0x7b81dfe0,
17034 +
            0xc384aab8, 0xab878670, 0xb66236f9, 0xde611a31, 0x66646f69, 0x0e6743a1, 0x5daf0e7b,
17035 +
            0x35ac22b3, 0x8da957eb, 0xe5aa7b23, 0xf84fcbaa, 0x904ce762, 0x2849923a, 0x404abef2,
17036 +
            0xb2828a33, 0xda81a6fb, 0x6284d3a3, 0x0a87ff6b, 0x17624fe2, 0x7f61632a, 0xc7641672,
17037 +
            0xaf673aba, 0xfcaf7760, 0x94ac5ba8, 0x2ca92ef0, 0x44aa0238, 0x594fb2b1, 0x314c9e79,
17038 +
            0x8949eb21, 0xe14ac7e9, 0x2ed97095, 0x46da5c5d, 0xfedf2905, 0x96dc05cd, 0x8b39b544,
17039 +
            0xe33a998c, 0x5b3fecd4, 0x333cc01c, 0x60f48dc6, 0x08f7a10e, 0xb0f2d456, 0xd8f1f89e,
17040 +
            0xc5144817, 0xad1764df, 0x15121187, 0x7d113d4f,
17041 +
        ],
17042 +
        [
17043 +
            0x00000000, 0x493c7d27, 0x9278fa4e, 0xdb448769, 0x211d826d, 0x6821ff4a, 0xb3657823,
17044 +
            0xfa590504, 0x423b04da, 0x0b0779fd, 0xd043fe94, 0x997f83b3, 0x632686b7, 0x2a1afb90,
17045 +
            0xf15e7cf9, 0xb86201de, 0x847609b4, 0xcd4a7493, 0x160ef3fa, 0x5f328edd, 0xa56b8bd9,
17046 +
            0xec57f6fe, 0x37137197, 0x7e2f0cb0, 0xc64d0d6e, 0x8f717049, 0x5435f720, 0x1d098a07,
17047 +
            0xe7508f03, 0xae6cf224, 0x7528754d, 0x3c14086a, 0x0d006599, 0x443c18be, 0x9f789fd7,
17048 +
            0xd644e2f0, 0x2c1de7f4, 0x65219ad3, 0xbe651dba, 0xf759609d, 0x4f3b6143, 0x06071c64,
17049 +
            0xdd439b0d, 0x947fe62a, 0x6e26e32e, 0x271a9e09, 0xfc5e1960, 0xb5626447, 0x89766c2d,
17050 +
            0xc04a110a, 0x1b0e9663, 0x5232eb44, 0xa86bee40, 0xe1579367, 0x3a13140e, 0x732f6929,
17051 +
            0xcb4d68f7, 0x827115d0, 0x593592b9, 0x1009ef9e, 0xea50ea9a, 0xa36c97bd, 0x782810d4,
17052 +
            0x31146df3, 0x1a00cb32, 0x533cb615, 0x8878317c, 0xc1444c5b, 0x3b1d495f, 0x72213478,
17053 +
            0xa965b311, 0xe059ce36, 0x583bcfe8, 0x1107b2cf, 0xca4335a6, 0x837f4881, 0x79264d85,
17054 +
            0x301a30a2, 0xeb5eb7cb, 0xa262caec, 0x9e76c286, 0xd74abfa1, 0x0c0e38c8, 0x453245ef,
17055 +
            0xbf6b40eb, 0xf6573dcc, 0x2d13baa5, 0x642fc782, 0xdc4dc65c, 0x9571bb7b, 0x4e353c12,
17056 +
            0x07094135, 0xfd504431, 0xb46c3916, 0x6f28be7f, 0x2614c358, 0x1700aeab, 0x5e3cd38c,
17057 +
            0x857854e5, 0xcc4429c2, 0x361d2cc6, 0x7f2151e1, 0xa465d688, 0xed59abaf, 0x553baa71,
17058 +
            0x1c07d756, 0xc743503f, 0x8e7f2d18, 0x7426281c, 0x3d1a553b, 0xe65ed252, 0xaf62af75,
17059 +
            0x9376a71f, 0xda4ada38, 0x010e5d51, 0x48322076, 0xb26b2572, 0xfb575855, 0x2013df3c,
17060 +
            0x692fa21b, 0xd14da3c5, 0x9871dee2, 0x4335598b, 0x0a0924ac, 0xf05021a8, 0xb96c5c8f,
17061 +
            0x6228dbe6, 0x2b14a6c1, 0x34019664, 0x7d3deb43, 0xa6796c2a, 0xef45110d, 0x151c1409,
17062 +
            0x5c20692e, 0x8764ee47, 0xce589360, 0x763a92be, 0x3f06ef99, 0xe44268f0, 0xad7e15d7,
17063 +
            0x572710d3, 0x1e1b6df4, 0xc55fea9d, 0x8c6397ba, 0xb0779fd0, 0xf94be2f7, 0x220f659e,
17064 +
            0x6b3318b9, 0x916a1dbd, 0xd856609a, 0x0312e7f3, 0x4a2e9ad4, 0xf24c9b0a, 0xbb70e62d,
17065 +
            0x60346144, 0x29081c63, 0xd3511967, 0x9a6d6440, 0x4129e329, 0x08159e0e, 0x3901f3fd,
17066 +
            0x703d8eda, 0xab7909b3, 0xe2457494, 0x181c7190, 0x51200cb7, 0x8a648bde, 0xc358f6f9,
17067 +
            0x7b3af727, 0x32068a00, 0xe9420d69, 0xa07e704e, 0x5a27754a, 0x131b086d, 0xc85f8f04,
17068 +
            0x8163f223, 0xbd77fa49, 0xf44b876e, 0x2f0f0007, 0x66337d20, 0x9c6a7824, 0xd5560503,
17069 +
            0x0e12826a, 0x472eff4d, 0xff4cfe93, 0xb67083b4, 0x6d3404dd, 0x240879fa, 0xde517cfe,
17070 +
            0x976d01d9, 0x4c2986b0, 0x0515fb97, 0x2e015d56, 0x673d2071, 0xbc79a718, 0xf545da3f,
17071 +
            0x0f1cdf3b, 0x4620a21c, 0x9d642575, 0xd4585852, 0x6c3a598c, 0x250624ab, 0xfe42a3c2,
17072 +
            0xb77edee5, 0x4d27dbe1, 0x041ba6c6, 0xdf5f21af, 0x96635c88, 0xaa7754e2, 0xe34b29c5,
17073 +
            0x380faeac, 0x7133d38b, 0x8b6ad68f, 0xc256aba8, 0x19122cc1, 0x502e51e6, 0xe84c5038,
17074 +
            0xa1702d1f, 0x7a34aa76, 0x3308d751, 0xc951d255, 0x806daf72, 0x5b29281b, 0x1215553c,
17075 +
            0x230138cf, 0x6a3d45e8, 0xb179c281, 0xf845bfa6, 0x021cbaa2, 0x4b20c785, 0x906440ec,
17076 +
            0xd9583dcb, 0x613a3c15, 0x28064132, 0xf342c65b, 0xba7ebb7c, 0x4027be78, 0x091bc35f,
17077 +
            0xd25f4436, 0x9b633911, 0xa777317b, 0xee4b4c5c, 0x350fcb35, 0x7c33b612, 0x866ab316,
17078 +
            0xcf56ce31, 0x14124958, 0x5d2e347f, 0xe54c35a1, 0xac704886, 0x7734cfef, 0x3e08b2c8,
17079 +
            0xc451b7cc, 0x8d6dcaeb, 0x56294d82, 0x1f1530a5,
17080 +
        ],
17081 +
        [
17082 +
            0x00000000, 0xf43ed648, 0xed91da61, 0x19af0c29, 0xdecfc233, 0x2af1147b, 0x335e1852,
17083 +
            0xc760ce1a, 0xb873f297, 0x4c4d24df, 0x55e228f6, 0xa1dcfebe, 0x66bc30a4, 0x9282e6ec,
17084 +
            0x8b2deac5, 0x7f133c8d, 0x750b93df, 0x81354597, 0x989a49be, 0x6ca49ff6, 0xabc451ec,
17085 +
            0x5ffa87a4, 0x46558b8d, 0xb26b5dc5, 0xcd786148, 0x3946b700, 0x20e9bb29, 0xd4d76d61,
17086 +
            0x13b7a37b, 0xe7897533, 0xfe26791a, 0x0a18af52, 0xea1727be, 0x1e29f1f6, 0x0786fddf,
17087 +
            0xf3b82b97, 0x34d8e58d, 0xc0e633c5, 0xd9493fec, 0x2d77e9a4, 0x5264d529, 0xa65a0361,
17088 +
            0xbff50f48, 0x4bcbd900, 0x8cab171a, 0x7895c152, 0x613acd7b, 0x95041b33, 0x9f1cb461,
17089 +
            0x6b226229, 0x728d6e00, 0x86b3b848, 0x41d37652, 0xb5eda01a, 0xac42ac33, 0x587c7a7b,
17090 +
            0x276f46f6, 0xd35190be, 0xcafe9c97, 0x3ec04adf, 0xf9a084c5, 0x0d9e528d, 0x14315ea4,
17091 +
            0xe00f88ec, 0xd1c2398d, 0x25fcefc5, 0x3c53e3ec, 0xc86d35a4, 0x0f0dfbbe, 0xfb332df6,
17092 +
            0xe29c21df, 0x16a2f797, 0x69b1cb1a, 0x9d8f1d52, 0x8420117b, 0x701ec733, 0xb77e0929,
17093 +
            0x4340df61, 0x5aefd348, 0xaed10500, 0xa4c9aa52, 0x50f77c1a, 0x49587033, 0xbd66a67b,
17094 +
            0x7a066861, 0x8e38be29, 0x9797b200, 0x63a96448, 0x1cba58c5, 0xe8848e8d, 0xf12b82a4,
17095 +
            0x051554ec, 0xc2759af6, 0x364b4cbe, 0x2fe44097, 0xdbda96df, 0x3bd51e33, 0xcfebc87b,
17096 +
            0xd644c452, 0x227a121a, 0xe51adc00, 0x11240a48, 0x088b0661, 0xfcb5d029, 0x83a6eca4,
17097 +
            0x77983aec, 0x6e3736c5, 0x9a09e08d, 0x5d692e97, 0xa957f8df, 0xb0f8f4f6, 0x44c622be,
17098 +
            0x4ede8dec, 0xbae05ba4, 0xa34f578d, 0x577181c5, 0x90114fdf, 0x642f9997, 0x7d8095be,
17099 +
            0x89be43f6, 0xf6ad7f7b, 0x0293a933, 0x1b3ca51a, 0xef027352, 0x2862bd48, 0xdc5c6b00,
17100 +
            0xc5f36729, 0x31cdb161, 0xa66805eb, 0x5256d3a3, 0x4bf9df8a, 0xbfc709c2, 0x78a7c7d8,
17101 +
            0x8c991190, 0x95361db9, 0x6108cbf1, 0x1e1bf77c, 0xea252134, 0xf38a2d1d, 0x07b4fb55,
17102 +
            0xc0d4354f, 0x34eae307, 0x2d45ef2e, 0xd97b3966, 0xd3639634, 0x275d407c, 0x3ef24c55,
17103 +
            0xcacc9a1d, 0x0dac5407, 0xf992824f, 0xe03d8e66, 0x1403582e, 0x6b1064a3, 0x9f2eb2eb,
17104 +
            0x8681bec2, 0x72bf688a, 0xb5dfa690, 0x41e170d8, 0x584e7cf1, 0xac70aab9, 0x4c7f2255,
17105 +
            0xb841f41d, 0xa1eef834, 0x55d02e7c, 0x92b0e066, 0x668e362e, 0x7f213a07, 0x8b1fec4f,
17106 +
            0xf40cd0c2, 0x0032068a, 0x199d0aa3, 0xeda3dceb, 0x2ac312f1, 0xdefdc4b9, 0xc752c890,
17107 +
            0x336c1ed8, 0x3974b18a, 0xcd4a67c2, 0xd4e56beb, 0x20dbbda3, 0xe7bb73b9, 0x1385a5f1,
17108 +
            0x0a2aa9d8, 0xfe147f90, 0x8107431d, 0x75399555, 0x6c96997c, 0x98a84f34, 0x5fc8812e,
17109 +
            0xabf65766, 0xb2595b4f, 0x46678d07, 0x77aa3c66, 0x8394ea2e, 0x9a3be607, 0x6e05304f,
17110 +
            0xa965fe55, 0x5d5b281d, 0x44f42434, 0xb0caf27c, 0xcfd9cef1, 0x3be718b9, 0x22481490,
17111 +
            0xd676c2d8, 0x11160cc2, 0xe528da8a, 0xfc87d6a3, 0x08b900eb, 0x02a1afb9, 0xf69f79f1,
17112 +
            0xef3075d8, 0x1b0ea390, 0xdc6e6d8a, 0x2850bbc2, 0x31ffb7eb, 0xc5c161a3, 0xbad25d2e,
17113 +
            0x4eec8b66, 0x5743874f, 0xa37d5107, 0x641d9f1d, 0x90234955, 0x898c457c, 0x7db29334,
17114 +
            0x9dbd1bd8, 0x6983cd90, 0x702cc1b9, 0x841217f1, 0x4372d9eb, 0xb74c0fa3, 0xaee3038a,
17115 +
            0x5addd5c2, 0x25cee94f, 0xd1f03f07, 0xc85f332e, 0x3c61e566, 0xfb012b7c, 0x0f3ffd34,
17116 +
            0x1690f11d, 0xe2ae2755, 0xe8b68807, 0x1c885e4f, 0x05275266, 0xf119842e, 0x36794a34,
17117 +
            0xc2479c7c, 0xdbe89055, 0x2fd6461d, 0x50c57a90, 0xa4fbacd8, 0xbd54a0f1, 0x496a76b9,
17118 +
            0x8e0ab8a3, 0x7a346eeb, 0x639b62c2, 0x97a5b48a,
17119 +
        ],
17120 +
        [
17121 +
            0x00000000, 0xcb567ba5, 0x934081bb, 0x5816fa1e, 0x236d7587, 0xe83b0e22, 0xb02df43c,
17122 +
            0x7b7b8f99, 0x46daeb0e, 0x8d8c90ab, 0xd59a6ab5, 0x1ecc1110, 0x65b79e89, 0xaee1e52c,
17123 +
            0xf6f71f32, 0x3da16497, 0x8db5d61c, 0x46e3adb9, 0x1ef557a7, 0xd5a32c02, 0xaed8a39b,
17124 +
            0x658ed83e, 0x3d982220, 0xf6ce5985, 0xcb6f3d12, 0x003946b7, 0x582fbca9, 0x9379c70c,
17125 +
            0xe8024895, 0x23543330, 0x7b42c92e, 0xb014b28b, 0x1e87dac9, 0xd5d1a16c, 0x8dc75b72,
17126 +
            0x469120d7, 0x3deaaf4e, 0xf6bcd4eb, 0xaeaa2ef5, 0x65fc5550, 0x585d31c7, 0x930b4a62,
17127 +
            0xcb1db07c, 0x004bcbd9, 0x7b304440, 0xb0663fe5, 0xe870c5fb, 0x2326be5e, 0x93320cd5,
17128 +
            0x58647770, 0x00728d6e, 0xcb24f6cb, 0xb05f7952, 0x7b0902f7, 0x231ff8e9, 0xe849834c,
17129 +
            0xd5e8e7db, 0x1ebe9c7e, 0x46a86660, 0x8dfe1dc5, 0xf685925c, 0x3dd3e9f9, 0x65c513e7,
17130 +
            0xae936842, 0x3d0fb592, 0xf659ce37, 0xae4f3429, 0x65194f8c, 0x1e62c015, 0xd534bbb0,
17131 +
            0x8d2241ae, 0x46743a0b, 0x7bd55e9c, 0xb0832539, 0xe895df27, 0x23c3a482, 0x58b82b1b,
17132 +
            0x93ee50be, 0xcbf8aaa0, 0x00aed105, 0xb0ba638e, 0x7bec182b, 0x23fae235, 0xe8ac9990,
17133 +
            0x93d71609, 0x58816dac, 0x009797b2, 0xcbc1ec17, 0xf6608880, 0x3d36f325, 0x6520093b,
17134 +
            0xae76729e, 0xd50dfd07, 0x1e5b86a2, 0x464d7cbc, 0x8d1b0719, 0x23886f5b, 0xe8de14fe,
17135 +
            0xb0c8eee0, 0x7b9e9545, 0x00e51adc, 0xcbb36179, 0x93a59b67, 0x58f3e0c2, 0x65528455,
17136 +
            0xae04fff0, 0xf61205ee, 0x3d447e4b, 0x463ff1d2, 0x8d698a77, 0xd57f7069, 0x1e290bcc,
17137 +
            0xae3db947, 0x656bc2e2, 0x3d7d38fc, 0xf62b4359, 0x8d50ccc0, 0x4606b765, 0x1e104d7b,
17138 +
            0xd54636de, 0xe8e75249, 0x23b129ec, 0x7ba7d3f2, 0xb0f1a857, 0xcb8a27ce, 0x00dc5c6b,
17139 +
            0x58caa675, 0x939cddd0, 0x7a1f6b24, 0xb1491081, 0xe95fea9f, 0x2209913a, 0x59721ea3,
17140 +
            0x92246506, 0xca329f18, 0x0164e4bd, 0x3cc5802a, 0xf793fb8f, 0xaf850191, 0x64d37a34,
17141 +
            0x1fa8f5ad, 0xd4fe8e08, 0x8ce87416, 0x47be0fb3, 0xf7aabd38, 0x3cfcc69d, 0x64ea3c83,
17142 +
            0xafbc4726, 0xd4c7c8bf, 0x1f91b31a, 0x47874904, 0x8cd132a1, 0xb1705636, 0x7a262d93,
17143 +
            0x2230d78d, 0xe966ac28, 0x921d23b1, 0x594b5814, 0x015da20a, 0xca0bd9af, 0x6498b1ed,
17144 +
            0xafceca48, 0xf7d83056, 0x3c8e4bf3, 0x47f5c46a, 0x8ca3bfcf, 0xd4b545d1, 0x1fe33e74,
17145 +
            0x22425ae3, 0xe9142146, 0xb102db58, 0x7a54a0fd, 0x012f2f64, 0xca7954c1, 0x926faedf,
17146 +
            0x5939d57a, 0xe92d67f1, 0x227b1c54, 0x7a6de64a, 0xb13b9def, 0xca401276, 0x011669d3,
17147 +
            0x590093cd, 0x9256e868, 0xaff78cff, 0x64a1f75a, 0x3cb70d44, 0xf7e176e1, 0x8c9af978,
17148 +
            0x47cc82dd, 0x1fda78c3, 0xd48c0366, 0x4710deb6, 0x8c46a513, 0xd4505f0d, 0x1f0624a8,
17149 +
            0x647dab31, 0xaf2bd094, 0xf73d2a8a, 0x3c6b512f, 0x01ca35b8, 0xca9c4e1d, 0x928ab403,
17150 +
            0x59dccfa6, 0x22a7403f, 0xe9f13b9a, 0xb1e7c184, 0x7ab1ba21, 0xcaa508aa, 0x01f3730f,
17151 +
            0x59e58911, 0x92b3f2b4, 0xe9c87d2d, 0x229e0688, 0x7a88fc96, 0xb1de8733, 0x8c7fe3a4,
17152 +
            0x47299801, 0x1f3f621f, 0xd46919ba, 0xaf129623, 0x6444ed86, 0x3c521798, 0xf7046c3d,
17153 +
            0x5997047f, 0x92c17fda, 0xcad785c4, 0x0181fe61, 0x7afa71f8, 0xb1ac0a5d, 0xe9baf043,
17154 +
            0x22ec8be6, 0x1f4def71, 0xd41b94d4, 0x8c0d6eca, 0x475b156f, 0x3c209af6, 0xf776e153,
17155 +
            0xaf601b4d, 0x643660e8, 0xd422d263, 0x1f74a9c6, 0x476253d8, 0x8c34287d, 0xf74fa7e4,
17156 +
            0x3c19dc41, 0x640f265f, 0xaf595dfa, 0x92f8396d, 0x59ae42c8, 0x01b8b8d6, 0xcaeec373,
17157 +
            0xb1954cea, 0x7ac3374f, 0x22d5cd51, 0xe983b6f4,
17158 +
        ],
17159 +
        [
17160 +
            0x00000000, 0x9771f7c1, 0x2b0f9973, 0xbc7e6eb2, 0x561f32e6, 0xc16ec527, 0x7d10ab95,
17161 +
            0xea615c54, 0xac3e65cc, 0x3b4f920d, 0x8731fcbf, 0x10400b7e, 0xfa21572a, 0x6d50a0eb,
17162 +
            0xd12ece59, 0x465f3998, 0x5d90bd69, 0xcae14aa8, 0x769f241a, 0xe1eed3db, 0x0b8f8f8f,
17163 +
            0x9cfe784e, 0x208016fc, 0xb7f1e13d, 0xf1aed8a5, 0x66df2f64, 0xdaa141d6, 0x4dd0b617,
17164 +
            0xa7b1ea43, 0x30c01d82, 0x8cbe7330, 0x1bcf84f1, 0xbb217ad2, 0x2c508d13, 0x902ee3a1,
17165 +
            0x075f1460, 0xed3e4834, 0x7a4fbff5, 0xc631d147, 0x51402686, 0x171f1f1e, 0x806ee8df,
17166 +
            0x3c10866d, 0xab6171ac, 0x41002df8, 0xd671da39, 0x6a0fb48b, 0xfd7e434a, 0xe6b1c7bb,
17167 +
            0x71c0307a, 0xcdbe5ec8, 0x5acfa909, 0xb0aef55d, 0x27df029c, 0x9ba16c2e, 0x0cd09bef,
17168 +
            0x4a8fa277, 0xddfe55b6, 0x61803b04, 0xf6f1ccc5, 0x1c909091, 0x8be16750, 0x379f09e2,
17169 +
            0xa0eefe23, 0x73ae8355, 0xe4df7494, 0x58a11a26, 0xcfd0ede7, 0x25b1b1b3, 0xb2c04672,
17170 +
            0x0ebe28c0, 0x99cfdf01, 0xdf90e699, 0x48e11158, 0xf49f7fea, 0x63ee882b, 0x898fd47f,
17171 +
            0x1efe23be, 0xa2804d0c, 0x35f1bacd, 0x2e3e3e3c, 0xb94fc9fd, 0x0531a74f, 0x9240508e,
17172 +
            0x78210cda, 0xef50fb1b, 0x532e95a9, 0xc45f6268, 0x82005bf0, 0x1571ac31, 0xa90fc283,
17173 +
            0x3e7e3542, 0xd41f6916, 0x436e9ed7, 0xff10f065, 0x686107a4, 0xc88ff987, 0x5ffe0e46,
17174 +
            0xe38060f4, 0x74f19735, 0x9e90cb61, 0x09e13ca0, 0xb59f5212, 0x22eea5d3, 0x64b19c4b,
17175 +
            0xf3c06b8a, 0x4fbe0538, 0xd8cff2f9, 0x32aeaead, 0xa5df596c, 0x19a137de, 0x8ed0c01f,
17176 +
            0x951f44ee, 0x026eb32f, 0xbe10dd9d, 0x29612a5c, 0xc3007608, 0x547181c9, 0xe80fef7b,
17177 +
            0x7f7e18ba, 0x39212122, 0xae50d6e3, 0x122eb851, 0x855f4f90, 0x6f3e13c4, 0xf84fe405,
17178 +
            0x44318ab7, 0xd3407d76, 0xe75d06aa, 0x702cf16b, 0xcc529fd9, 0x5b236818, 0xb142344c,
17179 +
            0x2633c38d, 0x9a4dad3f, 0x0d3c5afe, 0x4b636366, 0xdc1294a7, 0x606cfa15, 0xf71d0dd4,
17180 +
            0x1d7c5180, 0x8a0da641, 0x3673c8f3, 0xa1023f32, 0xbacdbbc3, 0x2dbc4c02, 0x91c222b0,
17181 +
            0x06b3d571, 0xecd28925, 0x7ba37ee4, 0xc7dd1056, 0x50ace797, 0x16f3de0f, 0x818229ce,
17182 +
            0x3dfc477c, 0xaa8db0bd, 0x40ecece9, 0xd79d1b28, 0x6be3759a, 0xfc92825b, 0x5c7c7c78,
17183 +
            0xcb0d8bb9, 0x7773e50b, 0xe00212ca, 0x0a634e9e, 0x9d12b95f, 0x216cd7ed, 0xb61d202c,
17184 +
            0xf04219b4, 0x6733ee75, 0xdb4d80c7, 0x4c3c7706, 0xa65d2b52, 0x312cdc93, 0x8d52b221,
17185 +
            0x1a2345e0, 0x01ecc111, 0x969d36d0, 0x2ae35862, 0xbd92afa3, 0x57f3f3f7, 0xc0820436,
17186 +
            0x7cfc6a84, 0xeb8d9d45, 0xadd2a4dd, 0x3aa3531c, 0x86dd3dae, 0x11acca6f, 0xfbcd963b,
17187 +
            0x6cbc61fa, 0xd0c20f48, 0x47b3f889, 0x94f385ff, 0x0382723e, 0xbffc1c8c, 0x288deb4d,
17188 +
            0xc2ecb719, 0x559d40d8, 0xe9e32e6a, 0x7e92d9ab, 0x38cde033, 0xafbc17f2, 0x13c27940,
17189 +
            0x84b38e81, 0x6ed2d2d5, 0xf9a32514, 0x45dd4ba6, 0xd2acbc67, 0xc9633896, 0x5e12cf57,
17190 +
            0xe26ca1e5, 0x751d5624, 0x9f7c0a70, 0x080dfdb1, 0xb4739303, 0x230264c2, 0x655d5d5a,
17191 +
            0xf22caa9b, 0x4e52c429, 0xd92333e8, 0x33426fbc, 0xa433987d, 0x184df6cf, 0x8f3c010e,
17192 +
            0x2fd2ff2d, 0xb8a308ec, 0x04dd665e, 0x93ac919f, 0x79cdcdcb, 0xeebc3a0a, 0x52c254b8,
17193 +
            0xc5b3a379, 0x83ec9ae1, 0x149d6d20, 0xa8e30392, 0x3f92f453, 0xd5f3a807, 0x42825fc6,
17194 +
            0xfefc3174, 0x698dc6b5, 0x72424244, 0xe533b585, 0x594ddb37, 0xce3c2cf6, 0x245d70a2,
17195 +
            0xb32c8763, 0x0f52e9d1, 0x98231e10, 0xde7c2788, 0x490dd049, 0xf573befb, 0x6202493a,
17196 +
            0x8863156e, 0x1f12e2af, 0xa36c8c1d, 0x341d7bdc,
17197 +
        ],
17198 +
        [
17199 +
            0x00000000, 0x3171d430, 0x62e3a860, 0x53927c50, 0xc5c750c0, 0xf4b684f0, 0xa724f8a0,
17200 +
            0x96552c90, 0x8e62d771, 0xbf130341, 0xec817f11, 0xddf0ab21, 0x4ba587b1, 0x7ad45381,
17201 +
            0x29462fd1, 0x1837fbe1, 0x1929d813, 0x28580c23, 0x7bca7073, 0x4abba443, 0xdcee88d3,
17202 +
            0xed9f5ce3, 0xbe0d20b3, 0x8f7cf483, 0x974b0f62, 0xa63adb52, 0xf5a8a702, 0xc4d97332,
17203 +
            0x528c5fa2, 0x63fd8b92, 0x306ff7c2, 0x011e23f2, 0x3253b026, 0x03226416, 0x50b01846,
17204 +
            0x61c1cc76, 0xf794e0e6, 0xc6e534d6, 0x95774886, 0xa4069cb6, 0xbc316757, 0x8d40b367,
17205 +
            0xded2cf37, 0xefa31b07, 0x79f63797, 0x4887e3a7, 0x1b159ff7, 0x2a644bc7, 0x2b7a6835,
17206 +
            0x1a0bbc05, 0x4999c055, 0x78e81465, 0xeebd38f5, 0xdfccecc5, 0x8c5e9095, 0xbd2f44a5,
17207 +
            0xa518bf44, 0x94696b74, 0xc7fb1724, 0xf68ac314, 0x60dfef84, 0x51ae3bb4, 0x023c47e4,
17208 +
            0x334d93d4, 0x64a7604c, 0x55d6b47c, 0x0644c82c, 0x37351c1c, 0xa160308c, 0x9011e4bc,
17209 +
            0xc38398ec, 0xf2f24cdc, 0xeac5b73d, 0xdbb4630d, 0x88261f5d, 0xb957cb6d, 0x2f02e7fd,
17210 +
            0x1e7333cd, 0x4de14f9d, 0x7c909bad, 0x7d8eb85f, 0x4cff6c6f, 0x1f6d103f, 0x2e1cc40f,
17211 +
            0xb849e89f, 0x89383caf, 0xdaaa40ff, 0xebdb94cf, 0xf3ec6f2e, 0xc29dbb1e, 0x910fc74e,
17212 +
            0xa07e137e, 0x362b3fee, 0x075aebde, 0x54c8978e, 0x65b943be, 0x56f4d06a, 0x6785045a,
17213 +
            0x3417780a, 0x0566ac3a, 0x933380aa, 0xa242549a, 0xf1d028ca, 0xc0a1fcfa, 0xd896071b,
17214 +
            0xe9e7d32b, 0xba75af7b, 0x8b047b4b, 0x1d5157db, 0x2c2083eb, 0x7fb2ffbb, 0x4ec32b8b,
17215 +
            0x4fdd0879, 0x7eacdc49, 0x2d3ea019, 0x1c4f7429, 0x8a1a58b9, 0xbb6b8c89, 0xe8f9f0d9,
17216 +
            0xd98824e9, 0xc1bfdf08, 0xf0ce0b38, 0xa35c7768, 0x922da358, 0x04788fc8, 0x35095bf8,
17217 +
            0x669b27a8, 0x57eaf398, 0xc94ec098, 0xf83f14a8, 0xabad68f8, 0x9adcbcc8, 0x0c899058,
17218 +
            0x3df84468, 0x6e6a3838, 0x5f1bec08, 0x472c17e9, 0x765dc3d9, 0x25cfbf89, 0x14be6bb9,
17219 +
            0x82eb4729, 0xb39a9319, 0xe008ef49, 0xd1793b79, 0xd067188b, 0xe116ccbb, 0xb284b0eb,
17220 +
            0x83f564db, 0x15a0484b, 0x24d19c7b, 0x7743e02b, 0x4632341b, 0x5e05cffa, 0x6f741bca,
17221 +
            0x3ce6679a, 0x0d97b3aa, 0x9bc29f3a, 0xaab34b0a, 0xf921375a, 0xc850e36a, 0xfb1d70be,
17222 +
            0xca6ca48e, 0x99fed8de, 0xa88f0cee, 0x3eda207e, 0x0fabf44e, 0x5c39881e, 0x6d485c2e,
17223 +
            0x757fa7cf, 0x440e73ff, 0x179c0faf, 0x26eddb9f, 0xb0b8f70f, 0x81c9233f, 0xd25b5f6f,
17224 +
            0xe32a8b5f, 0xe234a8ad, 0xd3457c9d, 0x80d700cd, 0xb1a6d4fd, 0x27f3f86d, 0x16822c5d,
17225 +
            0x4510500d, 0x7461843d, 0x6c567fdc, 0x5d27abec, 0x0eb5d7bc, 0x3fc4038c, 0xa9912f1c,
17226 +
            0x98e0fb2c, 0xcb72877c, 0xfa03534c, 0xade9a0d4, 0x9c9874e4, 0xcf0a08b4, 0xfe7bdc84,
17227 +
            0x682ef014, 0x595f2424, 0x0acd5874, 0x3bbc8c44, 0x238b77a5, 0x12faa395, 0x4168dfc5,
17228 +
            0x70190bf5, 0xe64c2765, 0xd73df355, 0x84af8f05, 0xb5de5b35, 0xb4c078c7, 0x85b1acf7,
17229 +
            0xd623d0a7, 0xe7520497, 0x71072807, 0x4076fc37, 0x13e48067, 0x22955457, 0x3aa2afb6,
17230 +
            0x0bd37b86, 0x584107d6, 0x6930d3e6, 0xff65ff76, 0xce142b46, 0x9d865716, 0xacf78326,
17231 +
            0x9fba10f2, 0xaecbc4c2, 0xfd59b892, 0xcc286ca2, 0x5a7d4032, 0x6b0c9402, 0x389ee852,
17232 +
            0x09ef3c62, 0x11d8c783, 0x20a913b3, 0x733b6fe3, 0x424abbd3, 0xd41f9743, 0xe56e4373,
17233 +
            0xb6fc3f23, 0x878deb13, 0x8693c8e1, 0xb7e21cd1, 0xe4706081, 0xd501b4b1, 0x43549821,
17234 +
            0x72254c11, 0x21b73041, 0x10c6e471, 0x08f11f90, 0x3980cba0, 0x6a12b7f0, 0x5b6363c0,
17235 +
            0xcd364f50, 0xfc479b60, 0xafd5e730, 0x9ea43300,
17236 +
        ],
17237 +
        [
17238 +
            0x00000000, 0x30d23865, 0x61a470ca, 0x517648af, 0xc348e194, 0xf39ad9f1, 0xa2ec915e,
17239 +
            0x923ea93b, 0x837db5d9, 0xb3af8dbc, 0xe2d9c513, 0xd20bfd76, 0x4035544d, 0x70e76c28,
17240 +
            0x21912487, 0x11431ce2, 0x03171d43, 0x33c52526, 0x62b36d89, 0x526155ec, 0xc05ffcd7,
17241 +
            0xf08dc4b2, 0xa1fb8c1d, 0x9129b478, 0x806aa89a, 0xb0b890ff, 0xe1ced850, 0xd11ce035,
17242 +
            0x4322490e, 0x73f0716b, 0x228639c4, 0x125401a1, 0x062e3a86, 0x36fc02e3, 0x678a4a4c,
17243 +
            0x57587229, 0xc566db12, 0xf5b4e377, 0xa4c2abd8, 0x941093bd, 0x85538f5f, 0xb581b73a,
17244 +
            0xe4f7ff95, 0xd425c7f0, 0x461b6ecb, 0x76c956ae, 0x27bf1e01, 0x176d2664, 0x053927c5,
17245 +
            0x35eb1fa0, 0x649d570f, 0x544f6f6a, 0xc671c651, 0xf6a3fe34, 0xa7d5b69b, 0x97078efe,
17246 +
            0x8644921c, 0xb696aa79, 0xe7e0e2d6, 0xd732dab3, 0x450c7388, 0x75de4bed, 0x24a80342,
17247 +
            0x147a3b27, 0x0c5c750c, 0x3c8e4d69, 0x6df805c6, 0x5d2a3da3, 0xcf149498, 0xffc6acfd,
17248 +
            0xaeb0e452, 0x9e62dc37, 0x8f21c0d5, 0xbff3f8b0, 0xee85b01f, 0xde57887a, 0x4c692141,
17249 +
            0x7cbb1924, 0x2dcd518b, 0x1d1f69ee, 0x0f4b684f, 0x3f99502a, 0x6eef1885, 0x5e3d20e0,
17250 +
            0xcc0389db, 0xfcd1b1be, 0xada7f911, 0x9d75c174, 0x8c36dd96, 0xbce4e5f3, 0xed92ad5c,
17251 +
            0xdd409539, 0x4f7e3c02, 0x7fac0467, 0x2eda4cc8, 0x1e0874ad, 0x0a724f8a, 0x3aa077ef,
17252 +
            0x6bd63f40, 0x5b040725, 0xc93aae1e, 0xf9e8967b, 0xa89eded4, 0x984ce6b1, 0x890ffa53,
17253 +
            0xb9ddc236, 0xe8ab8a99, 0xd879b2fc, 0x4a471bc7, 0x7a9523a2, 0x2be36b0d, 0x1b315368,
17254 +
            0x096552c9, 0x39b76aac, 0x68c12203, 0x58131a66, 0xca2db35d, 0xfaff8b38, 0xab89c397,
17255 +
            0x9b5bfbf2, 0x8a18e710, 0xbacadf75, 0xebbc97da, 0xdb6eafbf, 0x49500684, 0x79823ee1,
17256 +
            0x28f4764e, 0x18264e2b, 0x18b8ea18, 0x286ad27d, 0x791c9ad2, 0x49cea2b7, 0xdbf00b8c,
17257 +
            0xeb2233e9, 0xba547b46, 0x8a864323, 0x9bc55fc1, 0xab1767a4, 0xfa612f0b, 0xcab3176e,
17258 +
            0x588dbe55, 0x685f8630, 0x3929ce9f, 0x09fbf6fa, 0x1baff75b, 0x2b7dcf3e, 0x7a0b8791,
17259 +
            0x4ad9bff4, 0xd8e716cf, 0xe8352eaa, 0xb9436605, 0x89915e60, 0x98d24282, 0xa8007ae7,
17260 +
            0xf9763248, 0xc9a40a2d, 0x5b9aa316, 0x6b489b73, 0x3a3ed3dc, 0x0aecebb9, 0x1e96d09e,
17261 +
            0x2e44e8fb, 0x7f32a054, 0x4fe09831, 0xddde310a, 0xed0c096f, 0xbc7a41c0, 0x8ca879a5,
17262 +
            0x9deb6547, 0xad395d22, 0xfc4f158d, 0xcc9d2de8, 0x5ea384d3, 0x6e71bcb6, 0x3f07f419,
17263 +
            0x0fd5cc7c, 0x1d81cddd, 0x2d53f5b8, 0x7c25bd17, 0x4cf78572, 0xdec92c49, 0xee1b142c,
17264 +
            0xbf6d5c83, 0x8fbf64e6, 0x9efc7804, 0xae2e4061, 0xff5808ce, 0xcf8a30ab, 0x5db49990,
17265 +
            0x6d66a1f5, 0x3c10e95a, 0x0cc2d13f, 0x14e49f14, 0x2436a771, 0x7540efde, 0x4592d7bb,
17266 +
            0xd7ac7e80, 0xe77e46e5, 0xb6080e4a, 0x86da362f, 0x97992acd, 0xa74b12a8, 0xf63d5a07,
17267 +
            0xc6ef6262, 0x54d1cb59, 0x6403f33c, 0x3575bb93, 0x05a783f6, 0x17f38257, 0x2721ba32,
17268 +
            0x7657f29d, 0x4685caf8, 0xd4bb63c3, 0xe4695ba6, 0xb51f1309, 0x85cd2b6c, 0x948e378e,
17269 +
            0xa45c0feb, 0xf52a4744, 0xc5f87f21, 0x57c6d61a, 0x6714ee7f, 0x3662a6d0, 0x06b09eb5,
17270 +
            0x12caa592, 0x22189df7, 0x736ed558, 0x43bced3d, 0xd1824406, 0xe1507c63, 0xb02634cc,
17271 +
            0x80f40ca9, 0x91b7104b, 0xa165282e, 0xf0136081, 0xc0c158e4, 0x52fff1df, 0x622dc9ba,
17272 +
            0x335b8115, 0x0389b970, 0x11ddb8d1, 0x210f80b4, 0x7079c81b, 0x40abf07e, 0xd2955945,
17273 +
            0xe2476120, 0xb331298f, 0x83e311ea, 0x92a00d08, 0xa272356d, 0xf3047dc2, 0xc3d645a7,
17274 +
            0x51e8ec9c, 0x613ad4f9, 0x304c9c56, 0x009ea433,
17275 +
        ],
17276 +
        [
17277 +
            0x00000000, 0x54075546, 0xa80eaa8c, 0xfc09ffca, 0x55f123e9, 0x01f676af, 0xfdff8965,
17278 +
            0xa9f8dc23, 0xabe247d2, 0xffe51294, 0x03eced5e, 0x57ebb818, 0xfe13643b, 0xaa14317d,
17279 +
            0x561dceb7, 0x021a9bf1, 0x5228f955, 0x062fac13, 0xfa2653d9, 0xae21069f, 0x07d9dabc,
17280 +
            0x53de8ffa, 0xafd77030, 0xfbd02576, 0xf9cabe87, 0xadcdebc1, 0x51c4140b, 0x05c3414d,
17281 +
            0xac3b9d6e, 0xf83cc828, 0x043537e2, 0x503262a4, 0xa451f2aa, 0xf056a7ec, 0x0c5f5826,
17282 +
            0x58580d60, 0xf1a0d143, 0xa5a78405, 0x59ae7bcf, 0x0da92e89, 0x0fb3b578, 0x5bb4e03e,
17283 +
            0xa7bd1ff4, 0xf3ba4ab2, 0x5a429691, 0x0e45c3d7, 0xf24c3c1d, 0xa64b695b, 0xf6790bff,
17284 +
            0xa27e5eb9, 0x5e77a173, 0x0a70f435, 0xa3882816, 0xf78f7d50, 0x0b86829a, 0x5f81d7dc,
17285 +
            0x5d9b4c2d, 0x099c196b, 0xf595e6a1, 0xa192b3e7, 0x086a6fc4, 0x5c6d3a82, 0xa064c548,
17286 +
            0xf463900e, 0x4d4f93a5, 0x1948c6e3, 0xe5413929, 0xb1466c6f, 0x18beb04c, 0x4cb9e50a,
17287 +
            0xb0b01ac0, 0xe4b74f86, 0xe6add477, 0xb2aa8131, 0x4ea37efb, 0x1aa42bbd, 0xb35cf79e,
17288 +
            0xe75ba2d8, 0x1b525d12, 0x4f550854, 0x1f676af0, 0x4b603fb6, 0xb769c07c, 0xe36e953a,
17289 +
            0x4a964919, 0x1e911c5f, 0xe298e395, 0xb69fb6d3, 0xb4852d22, 0xe0827864, 0x1c8b87ae,
17290 +
            0x488cd2e8, 0xe1740ecb, 0xb5735b8d, 0x497aa447, 0x1d7df101, 0xe91e610f, 0xbd193449,
17291 +
            0x4110cb83, 0x15179ec5, 0xbcef42e6, 0xe8e817a0, 0x14e1e86a, 0x40e6bd2c, 0x42fc26dd,
17292 +
            0x16fb739b, 0xeaf28c51, 0xbef5d917, 0x170d0534, 0x430a5072, 0xbf03afb8, 0xeb04fafe,
17293 +
            0xbb36985a, 0xef31cd1c, 0x133832d6, 0x473f6790, 0xeec7bbb3, 0xbac0eef5, 0x46c9113f,
17294 +
            0x12ce4479, 0x10d4df88, 0x44d38ace, 0xb8da7504, 0xecdd2042, 0x4525fc61, 0x1122a927,
17295 +
            0xed2b56ed, 0xb92c03ab, 0x9a9f274a, 0xce98720c, 0x32918dc6, 0x6696d880, 0xcf6e04a3,
17296 +
            0x9b6951e5, 0x6760ae2f, 0x3367fb69, 0x317d6098, 0x657a35de, 0x9973ca14, 0xcd749f52,
17297 +
            0x648c4371, 0x308b1637, 0xcc82e9fd, 0x9885bcbb, 0xc8b7de1f, 0x9cb08b59, 0x60b97493,
17298 +
            0x34be21d5, 0x9d46fdf6, 0xc941a8b0, 0x3548577a, 0x614f023c, 0x635599cd, 0x3752cc8b,
17299 +
            0xcb5b3341, 0x9f5c6607, 0x36a4ba24, 0x62a3ef62, 0x9eaa10a8, 0xcaad45ee, 0x3eced5e0,
17300 +
            0x6ac980a6, 0x96c07f6c, 0xc2c72a2a, 0x6b3ff609, 0x3f38a34f, 0xc3315c85, 0x973609c3,
17301 +
            0x952c9232, 0xc12bc774, 0x3d2238be, 0x69256df8, 0xc0ddb1db, 0x94dae49d, 0x68d31b57,
17302 +
            0x3cd44e11, 0x6ce62cb5, 0x38e179f3, 0xc4e88639, 0x90efd37f, 0x39170f5c, 0x6d105a1a,
17303 +
            0x9119a5d0, 0xc51ef096, 0xc7046b67, 0x93033e21, 0x6f0ac1eb, 0x3b0d94ad, 0x92f5488e,
17304 +
            0xc6f21dc8, 0x3afbe202, 0x6efcb744, 0xd7d0b4ef, 0x83d7e1a9, 0x7fde1e63, 0x2bd94b25,
17305 +
            0x82219706, 0xd626c240, 0x2a2f3d8a, 0x7e2868cc, 0x7c32f33d, 0x2835a67b, 0xd43c59b1,
17306 +
            0x803b0cf7, 0x29c3d0d4, 0x7dc48592, 0x81cd7a58, 0xd5ca2f1e, 0x85f84dba, 0xd1ff18fc,
17307 +
            0x2df6e736, 0x79f1b270, 0xd0096e53, 0x840e3b15, 0x7807c4df, 0x2c009199, 0x2e1a0a68,
17308 +
            0x7a1d5f2e, 0x8614a0e4, 0xd213f5a2, 0x7beb2981, 0x2fec7cc7, 0xd3e5830d, 0x87e2d64b,
17309 +
            0x73814645, 0x27861303, 0xdb8fecc9, 0x8f88b98f, 0x267065ac, 0x727730ea, 0x8e7ecf20,
17310 +
            0xda799a66, 0xd8630197, 0x8c6454d1, 0x706dab1b, 0x246afe5d, 0x8d92227e, 0xd9957738,
17311 +
            0x259c88f2, 0x719bddb4, 0x21a9bf10, 0x75aeea56, 0x89a7159c, 0xdda040da, 0x74589cf9,
17312 +
            0x205fc9bf, 0xdc563675, 0x88516333, 0x8a4bf8c2, 0xde4cad84, 0x2245524e, 0x76420708,
17313 +
            0xdfbadb2b, 0x8bbd8e6d, 0x77b471a7, 0x23b324e1,
17314 +
        ],
17315 +
        [
17316 +
            0x00000000, 0x678efd01, 0xcf1dfa02, 0xa8930703, 0x9bd782f5, 0xfc597ff4, 0x54ca78f7,
17317 +
            0x334485f6, 0x3243731b, 0x55cd8e1a, 0xfd5e8919, 0x9ad07418, 0xa994f1ee, 0xce1a0cef,
17318 +
            0x66890bec, 0x0107f6ed, 0x6486e636, 0x03081b37, 0xab9b1c34, 0xcc15e135, 0xff5164c3,
17319 +
            0x98df99c2, 0x304c9ec1, 0x57c263c0, 0x56c5952d, 0x314b682c, 0x99d86f2f, 0xfe56922e,
17320 +
            0xcd1217d8, 0xaa9cead9, 0x020fedda, 0x658110db, 0xc90dcc6c, 0xae83316d, 0x0610366e,
17321 +
            0x619ecb6f, 0x52da4e99, 0x3554b398, 0x9dc7b49b, 0xfa49499a, 0xfb4ebf77, 0x9cc04276,
17322 +
            0x34534575, 0x53ddb874, 0x60993d82, 0x0717c083, 0xaf84c780, 0xc80a3a81, 0xad8b2a5a,
17323 +
            0xca05d75b, 0x6296d058, 0x05182d59, 0x365ca8af, 0x51d255ae, 0xf94152ad, 0x9ecfafac,
17324 +
            0x9fc85941, 0xf846a440, 0x50d5a343, 0x375b5e42, 0x041fdbb4, 0x639126b5, 0xcb0221b6,
17325 +
            0xac8cdcb7, 0x97f7ee29, 0xf0791328, 0x58ea142b, 0x3f64e92a, 0x0c206cdc, 0x6bae91dd,
17326 +
            0xc33d96de, 0xa4b36bdf, 0xa5b49d32, 0xc23a6033, 0x6aa96730, 0x0d279a31, 0x3e631fc7,
17327 +
            0x59ede2c6, 0xf17ee5c5, 0x96f018c4, 0xf371081f, 0x94fff51e, 0x3c6cf21d, 0x5be20f1c,
17328 +
            0x68a68aea, 0x0f2877eb, 0xa7bb70e8, 0xc0358de9, 0xc1327b04, 0xa6bc8605, 0x0e2f8106,
17329 +
            0x69a17c07, 0x5ae5f9f1, 0x3d6b04f0, 0x95f803f3, 0xf276fef2, 0x5efa2245, 0x3974df44,
17330 +
            0x91e7d847, 0xf6692546, 0xc52da0b0, 0xa2a35db1, 0x0a305ab2, 0x6dbea7b3, 0x6cb9515e,
17331 +
            0x0b37ac5f, 0xa3a4ab5c, 0xc42a565d, 0xf76ed3ab, 0x90e02eaa, 0x387329a9, 0x5ffdd4a8,
17332 +
            0x3a7cc473, 0x5df23972, 0xf5613e71, 0x92efc370, 0xa1ab4686, 0xc625bb87, 0x6eb6bc84,
17333 +
            0x09384185, 0x083fb768, 0x6fb14a69, 0xc7224d6a, 0xa0acb06b, 0x93e8359d, 0xf466c89c,
17334 +
            0x5cf5cf9f, 0x3b7b329e, 0x2a03aaa3, 0x4d8d57a2, 0xe51e50a1, 0x8290ada0, 0xb1d42856,
17335 +
            0xd65ad557, 0x7ec9d254, 0x19472f55, 0x1840d9b8, 0x7fce24b9, 0xd75d23ba, 0xb0d3debb,
17336 +
            0x83975b4d, 0xe419a64c, 0x4c8aa14f, 0x2b045c4e, 0x4e854c95, 0x290bb194, 0x8198b697,
17337 +
            0xe6164b96, 0xd552ce60, 0xb2dc3361, 0x1a4f3462, 0x7dc1c963, 0x7cc63f8e, 0x1b48c28f,
17338 +
            0xb3dbc58c, 0xd455388d, 0xe711bd7b, 0x809f407a, 0x280c4779, 0x4f82ba78, 0xe30e66cf,
17339 +
            0x84809bce, 0x2c139ccd, 0x4b9d61cc, 0x78d9e43a, 0x1f57193b, 0xb7c41e38, 0xd04ae339,
17340 +
            0xd14d15d4, 0xb6c3e8d5, 0x1e50efd6, 0x79de12d7, 0x4a9a9721, 0x2d146a20, 0x85876d23,
17341 +
            0xe2099022, 0x878880f9, 0xe0067df8, 0x48957afb, 0x2f1b87fa, 0x1c5f020c, 0x7bd1ff0d,
17342 +
            0xd342f80e, 0xb4cc050f, 0xb5cbf3e2, 0xd2450ee3, 0x7ad609e0, 0x1d58f4e1, 0x2e1c7117,
17343 +
            0x49928c16, 0xe1018b15, 0x868f7614, 0xbdf4448a, 0xda7ab98b, 0x72e9be88, 0x15674389,
17344 +
            0x2623c67f, 0x41ad3b7e, 0xe93e3c7d, 0x8eb0c17c, 0x8fb73791, 0xe839ca90, 0x40aacd93,
17345 +
            0x27243092, 0x1460b564, 0x73ee4865, 0xdb7d4f66, 0xbcf3b267, 0xd972a2bc, 0xbefc5fbd,
17346 +
            0x166f58be, 0x71e1a5bf, 0x42a52049, 0x252bdd48, 0x8db8da4b, 0xea36274a, 0xeb31d1a7,
17347 +
            0x8cbf2ca6, 0x242c2ba5, 0x43a2d6a4, 0x70e65352, 0x1768ae53, 0xbffba950, 0xd8755451,
17348 +
            0x74f988e6, 0x137775e7, 0xbbe472e4, 0xdc6a8fe5, 0xef2e0a13, 0x88a0f712, 0x2033f011,
17349 +
            0x47bd0d10, 0x46bafbfd, 0x213406fc, 0x89a701ff, 0xee29fcfe, 0xdd6d7908, 0xbae38409,
17350 +
            0x1270830a, 0x75fe7e0b, 0x107f6ed0, 0x77f193d1, 0xdf6294d2, 0xb8ec69d3, 0x8ba8ec25,
17351 +
            0xec261124, 0x44b51627, 0x233beb26, 0x223c1dcb, 0x45b2e0ca, 0xed21e7c9, 0x8aaf1ac8,
17352 +
            0xb9eb9f3e, 0xde65623f, 0x76f6653c, 0x1178983d,
17353 +
        ],
17354 +
        [
17355 +
            0x00000000, 0xf20c0dfe, 0xe1f46d0d, 0x13f860f3, 0xc604aceb, 0x3408a115, 0x27f0c1e6,
17356 +
            0xd5fccc18, 0x89e52f27, 0x7be922d9, 0x6811422a, 0x9a1d4fd4, 0x4fe183cc, 0xbded8e32,
17357 +
            0xae15eec1, 0x5c19e33f, 0x162628bf, 0xe42a2541, 0xf7d245b2, 0x05de484c, 0xd0228454,
17358 +
            0x222e89aa, 0x31d6e959, 0xc3dae4a7, 0x9fc30798, 0x6dcf0a66, 0x7e376a95, 0x8c3b676b,
17359 +
            0x59c7ab73, 0xabcba68d, 0xb833c67e, 0x4a3fcb80, 0x2c4c517e, 0xde405c80, 0xcdb83c73,
17360 +
            0x3fb4318d, 0xea48fd95, 0x1844f06b, 0x0bbc9098, 0xf9b09d66, 0xa5a97e59, 0x57a573a7,
17361 +
            0x445d1354, 0xb6511eaa, 0x63add2b2, 0x91a1df4c, 0x8259bfbf, 0x7055b241, 0x3a6a79c1,
17362 +
            0xc866743f, 0xdb9e14cc, 0x29921932, 0xfc6ed52a, 0x0e62d8d4, 0x1d9ab827, 0xef96b5d9,
17363 +
            0xb38f56e6, 0x41835b18, 0x527b3beb, 0xa0773615, 0x758bfa0d, 0x8787f7f3, 0x947f9700,
17364 +
            0x66739afe, 0x5898a2fc, 0xaa94af02, 0xb96ccff1, 0x4b60c20f, 0x9e9c0e17, 0x6c9003e9,
17365 +
            0x7f68631a, 0x8d646ee4, 0xd17d8ddb, 0x23718025, 0x3089e0d6, 0xc285ed28, 0x17792130,
17366 +
            0xe5752cce, 0xf68d4c3d, 0x048141c3, 0x4ebe8a43, 0xbcb287bd, 0xaf4ae74e, 0x5d46eab0,
17367 +
            0x88ba26a8, 0x7ab62b56, 0x694e4ba5, 0x9b42465b, 0xc75ba564, 0x3557a89a, 0x26afc869,
17368 +
            0xd4a3c597, 0x015f098f, 0xf3530471, 0xe0ab6482, 0x12a7697c, 0x74d4f382, 0x86d8fe7c,
17369 +
            0x95209e8f, 0x672c9371, 0xb2d05f69, 0x40dc5297, 0x53243264, 0xa1283f9a, 0xfd31dca5,
17370 +
            0x0f3dd15b, 0x1cc5b1a8, 0xeec9bc56, 0x3b35704e, 0xc9397db0, 0xdac11d43, 0x28cd10bd,
17371 +
            0x62f2db3d, 0x90fed6c3, 0x8306b630, 0x710abbce, 0xa4f677d6, 0x56fa7a28, 0x45021adb,
17372 +
            0xb70e1725, 0xeb17f41a, 0x191bf9e4, 0x0ae39917, 0xf8ef94e9, 0x2d1358f1, 0xdf1f550f,
17373 +
            0xcce735fc, 0x3eeb3802, 0xb13145f8, 0x433d4806, 0x50c528f5, 0xa2c9250b, 0x7735e913,
17374 +
            0x8539e4ed, 0x96c1841e, 0x64cd89e0, 0x38d46adf, 0xcad86721, 0xd92007d2, 0x2b2c0a2c,
17375 +
            0xfed0c634, 0x0cdccbca, 0x1f24ab39, 0xed28a6c7, 0xa7176d47, 0x551b60b9, 0x46e3004a,
17376 +
            0xb4ef0db4, 0x6113c1ac, 0x931fcc52, 0x80e7aca1, 0x72eba15f, 0x2ef24260, 0xdcfe4f9e,
17377 +
            0xcf062f6d, 0x3d0a2293, 0xe8f6ee8b, 0x1afae375, 0x09028386, 0xfb0e8e78, 0x9d7d1486,
17378 +
            0x6f711978, 0x7c89798b, 0x8e857475, 0x5b79b86d, 0xa975b593, 0xba8dd560, 0x4881d89e,
17379 +
            0x14983ba1, 0xe694365f, 0xf56c56ac, 0x07605b52, 0xd29c974a, 0x20909ab4, 0x3368fa47,
17380 +
            0xc164f7b9, 0x8b5b3c39, 0x795731c7, 0x6aaf5134, 0x98a35cca, 0x4d5f90d2, 0xbf539d2c,
17381 +
            0xacabfddf, 0x5ea7f021, 0x02be131e, 0xf0b21ee0, 0xe34a7e13, 0x114673ed, 0xc4babff5,
17382 +
            0x36b6b20b, 0x254ed2f8, 0xd742df06, 0xe9a9e704, 0x1ba5eafa, 0x085d8a09, 0xfa5187f7,
17383 +
            0x2fad4bef, 0xdda14611, 0xce5926e2, 0x3c552b1c, 0x604cc823, 0x9240c5dd, 0x81b8a52e,
17384 +
            0x73b4a8d0, 0xa64864c8, 0x54446936, 0x47bc09c5, 0xb5b0043b, 0xff8fcfbb, 0x0d83c245,
17385 +
            0x1e7ba2b6, 0xec77af48, 0x398b6350, 0xcb876eae, 0xd87f0e5d, 0x2a7303a3, 0x766ae09c,
17386 +
            0x8466ed62, 0x979e8d91, 0x6592806f, 0xb06e4c77, 0x42624189, 0x519a217a, 0xa3962c84,
17387 +
            0xc5e5b67a, 0x37e9bb84, 0x2411db77, 0xd61dd689, 0x03e11a91, 0xf1ed176f, 0xe215779c,
17388 +
            0x10197a62, 0x4c00995d, 0xbe0c94a3, 0xadf4f450, 0x5ff8f9ae, 0x8a0435b6, 0x78083848,
17389 +
            0x6bf058bb, 0x99fc5545, 0xd3c39ec5, 0x21cf933b, 0x3237f3c8, 0xc03bfe36, 0x15c7322e,
17390 +
            0xe7cb3fd0, 0xf4335f23, 0x063f52dd, 0x5a26b1e2, 0xa82abc1c, 0xbbd2dcef, 0x49ded111,
17391 +
            0x9c221d09, 0x6e2e10f7, 0x7dd67004, 0x8fda7dfa,
17392 +
        ],
17393 +
    ];
17394 +
17395 +
    pub static CRC32_ISO_HDLC_TABLE: [[u32; 256]; 16] = [
17396 +
        [
17397 +
            0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535,
17398 +
            0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd,
17399 +
            0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d,
17400 +
            0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
17401 +
            0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
17402 +
            0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
17403 +
            0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac,
17404 +
            0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
17405 +
            0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab,
17406 +
            0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
17407 +
            0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb,
17408 +
            0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
17409 +
            0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea,
17410 +
            0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce,
17411 +
            0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
17412 +
            0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
17413 +
            0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409,
17414 +
            0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
17415 +
            0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739,
17416 +
            0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
17417 +
            0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268,
17418 +
            0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0,
17419 +
            0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8,
17420 +
            0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
17421 +
            0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
17422 +
            0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703,
17423 +
            0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7,
17424 +
            0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
17425 +
            0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae,
17426 +
            0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
17427 +
            0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6,
17428 +
            0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
17429 +
            0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d,
17430 +
            0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5,
17431 +
            0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
17432 +
            0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
17433 +
            0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
17434 +
        ],
17435 +
        [
17436 +
            0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, 0x565aa786,
17437 +
            0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d,
17438 +
            0x9e832d8e, 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, 0x2eaed755,
17439 +
            0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a,
17440 +
            0xe6775d5d, 0xff6c6c1c, 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
17441 +
            0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb,
17442 +
            0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3,
17443 +
            0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, 0x9007a034,
17444 +
            0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, 0x73f379ff, 0x6ae848be, 0x41c51b7d,
17445 +
            0x58de2a3c, 0xf0794f05, 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
17446 +
            0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009,
17447 +
            0x45d73148, 0x6efa628b, 0x77e153ca, 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97,
17448 +
            0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, 0x4054b5de,
17449 +
            0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6,
17450 +
            0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
17451 +
            0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768,
17452 +
            0x2f3f79f6, 0x362448b7, 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70,
17453 +
            0x607eef31, 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb,
17454 +
            0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, 0x5fef5d4f,
17455 +
            0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
17456 +
            0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, 0x685abb5b, 0x4377e898,
17457 +
            0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153,
17458 +
            0x8bae6290, 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, 0xae07bce9,
17459 +
            0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e,
17460 +
            0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
17461 +
            0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, 0x80a96bbc, 0x99b25afd,
17462 +
            0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4,
17463 +
            0x516bd0f5, 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d,
17464 +
            0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4,
17465 +
            0x280e0e85, 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
17466 +
            0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, 0x49e14f17,
17467 +
            0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0,
17468 +
            0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, 0x0824546a,
17469 +
            0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1,
17470 +
            0xc0fdde62, 0xd9e6ef23, 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
17471 +
            0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876,
17472 +
            0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72,
17473 +
        ],
17474 +
        [
17475 +
            0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, 0x048d7cb2,
17476 +
            0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353,
17477 +
            0x0a9e2d0a, 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, 0x1b2f0bac,
17478 +
            0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91,
17479 +
            0x153c5a14, 0x14fe3023, 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
17480 +
            0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f,
17481 +
            0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590,
17482 +
            0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, 0x2124f315,
17483 +
            0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a,
17484 +
            0x2f37a2ad, 0x709a8dc0, 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
17485 +
            0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4,
17486 +
            0x78421e93, 0x7a04a0ca, 0x7bc6cafd, 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9,
17487 +
            0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, 0x612bab66,
17488 +
            0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d, 0x48d7cb20, 0x4915a117,
17489 +
            0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
17490 +
            0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d,
17491 +
            0x54f16850, 0x55330267, 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2,
17492 +
            0x51be7ed5, 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03,
17493 +
            0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c,
17494 +
            0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
17495 +
            0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e,
17496 +
            0xff5506a9, 0xfa1a102c, 0xfbd87a1b, 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f,
17497 +
            0xf0843d26, 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, 0xd9785d60,
17498 +
            0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5,
17499 +
            0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
17500 +
            0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, 0xc25756cc, 0xc3953cfb,
17501 +
            0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774,
17502 +
            0xcd866d43, 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819,
17503 +
            0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396,
17504 +
            0x9dfa79a1, 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
17505 +
            0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, 0x839a6488,
17506 +
            0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d,
17507 +
            0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, 0xad6fac12,
17508 +
            0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3,
17509 +
            0xa37cfdaa, 0xa2be979d, 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
17510 +
            0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31,
17511 +
            0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed,
17512 +
        ],
17513 +
        [
17514 +
            0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, 0x256b5fdc,
17515 +
            0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd,
17516 +
            0xe0df7733, 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, 0xdf7bc0c8,
17517 +
            0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e,
17518 +
            0x1acfe827, 0xa2738f42, 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
17519 +
            0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4,
17520 +
            0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1,
17521 +
            0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, 0x6dfcc018,
17522 +
            0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, 0xbafd4719, 0x0241207c, 0x10f48f92,
17523 +
            0xa848e8f7, 0x9b14583d, 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
17524 +
            0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785,
17525 +
            0x697e80e0, 0x7bcb2f0e, 0xc377486b, 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c,
17526 +
            0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, 0xa4b0efc6,
17527 +
            0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4, 0x3b26f703, 0x839a9066,
17528 +
            0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
17529 +
            0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755,
17530 +
            0x6b3fa09c, 0xd383c7f9, 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40,
17531 +
            0xf6e89825, 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841,
17532 +
            0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, 0x623b216c,
17533 +
            0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
17534 +
            0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, 0x05fc86c1, 0x1749292f,
17535 +
            0xaff54e4a, 0x322276f3, 0x8a9e1196, 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e,
17536 +
            0xd2fd01c0, 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, 0x4d6b1905,
17537 +
            0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc,
17538 +
            0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
17539 +
            0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, 0x9210d9cd, 0x2aacbea8,
17540 +
            0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122,
17541 +
            0xef189647, 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8,
17542 +
            0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62,
17543 +
            0xa14c6907, 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
17544 +
            0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, 0xe3e09176,
17545 +
            0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf,
17546 +
            0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, 0xf3141ee4,
17547 +
            0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5,
17548 +
            0x36a0360b, 0x8e1c516e, 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
17549 +
            0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6,
17550 +
            0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1,
17551 +
        ],
17552 +
        [
17553 +
            0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, 0x8f40f5a0,
17554 +
            0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1,
17555 +
            0xbf30be61, 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, 0x95603142,
17556 +
            0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693,
17557 +
            0xa5107a83, 0x98705333, 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
17558 +
            0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75,
17559 +
            0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886,
17560 +
            0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, 0x13016496,
17561 +
            0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, 0x64d15587, 0x59b17c37, 0x1e1106e7,
17562 +
            0x23712f57, 0x58f35849, 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
17563 +
            0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548,
17564 +
            0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b,
17565 +
            0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, 0x72a3d76a,
17566 +
            0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a, 0x9932774d, 0xa4525efd,
17567 +
            0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
17568 +
            0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c,
17569 +
            0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f,
17570 +
            0x4bf23cdf, 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e,
17571 +
            0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, 0x44661652,
17572 +
            0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
17573 +
            0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, 0xec660ea0, 0xabc67470,
17574 +
            0x96a65dc0, 0x248681d0, 0x19e6a860, 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561,
17575 +
            0x9bb63fb1, 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, 0x70279f96,
17576 +
            0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386,
17577 +
            0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
17578 +
            0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, 0xe547aed4, 0xd8278764,
17579 +
            0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515,
17580 +
            0xe857cca5, 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b,
17581 +
            0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a,
17582 +
            0x9ec5d9ca, 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
17583 +
            0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, 0xb9853498,
17584 +
            0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888,
17585 +
            0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, 0xa794327f,
17586 +
            0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e,
17587 +
            0x97e479be, 0xaa84500e, 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
17588 +
            0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c,
17589 +
            0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c,
17590 +
        ],
17591 +
        [
17592 +
            0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, 0xd659e31d,
17593 +
            0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de,
17594 +
            0x3a0a6170, 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, 0x9847408d,
17595 +
            0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258,
17596 +
            0x7414c2e0, 0xbf481145, 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
17597 +
            0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe,
17598 +
            0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad,
17599 +
            0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, 0x197f3715,
17600 +
            0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, 0x73b8c7d6, 0xb8e41473, 0x3e7066dd,
17601 +
            0xf52cb578, 0x0f580a6c, 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
17602 +
            0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17,
17603 +
            0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59,
17604 +
            0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, 0xad152b91,
17605 +
            0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff,
17606 +
            0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
17607 +
            0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f,
17608 +
            0x0b220dc1, 0xc07ede64, 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc,
17609 +
            0x16273d79, 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f,
17610 +
            0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, 0x852156ce,
17611 +
            0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
17612 +
            0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, 0xd63ac5e6, 0x50aeb748,
17613 +
            0x9bf264ed, 0x86f75455, 0x4dab87f0, 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b,
17614 +
            0xbcfd3525, 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, 0x191c11ee,
17615 +
            0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156,
17616 +
            0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
17617 +
            0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, 0x815b5163, 0x4a0782c6,
17618 +
            0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e,
17619 +
            0xa65400ab, 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a,
17620 +
            0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2,
17621 +
            0x7b2fee77, 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
17622 +
            0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, 0xfe6d9e42,
17623 +
            0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa,
17624 +
            0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, 0xc01df89f,
17625 +
            0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c,
17626 +
            0x2c4e7af2, 0xe712a957, 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
17627 +
            0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da,
17628 +
            0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc,
17629 +
        ],
17630 +
        [
17631 +
            0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, 0x63d0353a,
17632 +
            0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0,
17633 +
            0x503f7b5d, 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, 0x9391b8dd,
17634 +
            0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834,
17635 +
            0xa07ef6ba, 0x0609fd0e, 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
17636 +
            0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f,
17637 +
            0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552,
17638 +
            0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, 0x6dc49bdc,
17639 +
            0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f,
17640 +
            0x5e2bd5bb, 0x440b7579, 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
17641 +
            0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d,
17642 +
            0x25dc14b9, 0x14340e24, 0xb2430590, 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a,
17643 +
            0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, 0x87a5b6f9,
17644 +
            0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e, 0x8bb64ce5, 0x2dc14751,
17645 +
            0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
17646 +
            0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c,
17647 +
            0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511,
17648 +
            0x29cfeea5, 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb,
17649 +
            0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1,
17650 +
            0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
17651 +
            0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, 0x49bf7d88, 0x78576715,
17652 +
            0xde206ca1, 0x1b87522f, 0xbdf0599b, 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef,
17653 +
            0x4bb82972, 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, 0x47abd36e,
17654 +
            0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0,
17655 +
            0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
17656 +
            0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, 0xd43a6bb3, 0x724d6007,
17657 +
            0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4,
17658 +
            0x41a22e60, 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516,
17659 +
            0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5,
17660 +
            0xce1acb71, 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
17661 +
            0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, 0x982c4d22,
17662 +
            0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac,
17663 +
            0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, 0x6070932d,
17664 +
            0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7,
17665 +
            0x539fdd4a, 0xf5e8d6fe, 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
17666 +
            0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23,
17667 +
            0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30,
17668 +
        ],
17669 +
        [
17670 +
            0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, 0xc66f0987,
17671 +
            0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1,
17672 +
            0x158a1232, 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, 0xf8f13fd1,
17673 +
            0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d,
17674 +
            0x2b142464, 0xe7be24fa, 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
17675 +
            0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d,
17676 +
            0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d,
17677 +
            0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, 0x8f085a64,
17678 +
            0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, 0xd2624632, 0x1ec846ac, 0x9047414f,
17679 +
            0x5ced41d1, 0x299dc2ed, 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
17680 +
            0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2,
17681 +
            0xb298d73c, 0x3c17d0df, 0xf0bdd041, 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425,
17682 +
            0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, 0xc4e6ef0e,
17683 +
            0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a, 0xd0eba0bb, 0x1c41a025,
17684 +
            0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
17685 +
            0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217,
17686 +
            0xac509190, 0x60fa910e, 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817,
17687 +
            0xa6959889, 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441,
17688 +
            0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, 0xd7718b20,
17689 +
            0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
17690 +
            0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, 0xe32ab46f, 0x6da5b38c,
17691 +
            0xa10fb312, 0xabcaba0b, 0x6760ba95, 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda,
17692 +
            0xbe40a839, 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, 0xaa4de78c,
17693 +
            0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95,
17694 +
            0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
17695 +
            0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, 0x52bcd85d, 0x9e16d8c3,
17696 +
            0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8,
17697 +
            0x4df3c376, 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4,
17698 +
            0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff,
17699 +
            0x27cc5b61, 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
17700 +
            0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, 0xd5f86da9,
17701 +
            0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0,
17702 +
            0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, 0x45bf2ce6,
17703 +
            0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0,
17704 +
            0x965a3753, 0x5af037cd, 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
17705 +
            0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c,
17706 +
            0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6,
17707 +
        ],
17708 +
        [
17709 +
            0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, 0x4a97454f, 0x731a798a,
17710 +
            0x64616dc9, 0xbbd8a218, 0xaca3b65b, 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757,
17711 +
            0xc8c2db92, 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, 0xf12c137d,
17712 +
            0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, 0x0063f42a, 0x39eec8ef, 0x2e95dcac,
17713 +
            0x4af4b165, 0x5d8fa526, 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
17714 +
            0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, 0x392920bb, 0x2e5234f8,
17715 +
            0x17df083d, 0x00a41c7e, 0x64c571b7, 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2,
17716 +
            0x394ad491, 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, 0x4a50ad1b,
17717 +
            0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, 0xc80533c6, 0xdf7e2785, 0xe6f31b40,
17718 +
            0xf1880f03, 0xde920307, 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
17719 +
            0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, 0x5cc79dda, 0x38a6f013,
17720 +
            0x2fdde450, 0x1650d895, 0x012bccd6, 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3,
17721 +
            0x2fbe107a, 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, 0xe77ccbe8,
17722 +
            0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7,
17723 +
            0x7295a922, 0x65eebd61, 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
17724 +
            0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, 0x94a15a36, 0x83da4e75,
17725 +
            0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f,
17726 +
            0x94c2ae1c, 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, 0x01ec2482,
17727 +
            0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, 0x48a328c9, 0x5fd83c8a, 0x3bb95143,
17728 +
            0x2cc24500, 0x154f79c5, 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
17729 +
            0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, 0xddee567d, 0xe4636ab8,
17730 +
            0xf3187efb, 0x97791332, 0x80020771, 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465,
17731 +
            0x5fbbc8a0, 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, 0xe4a482ec,
17732 +
            0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, 0xae33c7a3, 0x97befb66, 0x80c5ef25,
17733 +
            0x5f7c20f4, 0x480734b7, 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
17734 +
            0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, 0x15889191, 0x02f385d2,
17735 +
            0x3b7eb917, 0x2c05ad54, 0xf3bc6285, 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389,
17736 +
            0xb92b27ca, 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, 0x814a3f8d,
17737 +
            0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, 0x031fa150, 0x1464b513, 0x2de989d6,
17738 +
            0x3a929d95, 0x5ef3f05c, 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
17739 +
            0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, 0x70662cf0, 0xafdfe321,
17740 +
            0xb8a4f762, 0x8129cba7, 0x9652dfe4, 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8,
17741 +
            0x3a3681eb, 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, 0x492cf861,
17742 +
            0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, 0xb8631f36, 0xdc0272ff, 0xcb7966bc,
17743 +
            0xf2f45a79, 0xe58f4e3a, 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
17744 +
            0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, 0x03d84904, 0x14a35d47,
17745 +
            0x70c2308e, 0x67b924cd, 0x5e341808, 0x494f0c4b,
17746 +
        ],
17747 +
        [
17748 +
            0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, 0xe629cb44, 0x0d1e7047,
17749 +
            0xe2dc1b79, 0x13d740f4, 0xfc152bca, 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0,
17750 +
            0x1ec930b3, 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, 0x2e452192,
17751 +
            0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f,
17752 +
            0x3d926166, 0xd2500a58, 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
17753 +
            0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, 0x5c8a4324, 0xb348281a,
17754 +
            0x587f9319, 0xb7bdf827, 0x5561e35e, 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238,
17755 +
            0x8731e906, 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, 0x8a2f9941,
17756 +
            0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, 0x72cf62b6, 0x9d0d0988, 0x763ab28b,
17757 +
            0x99f8d9b5, 0x9eba07a0, 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
17758 +
            0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, 0x665afc57, 0x8486e72e,
17759 +
            0x6b448c10, 0x80733713, 0x6fb15c2d, 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b,
17760 +
            0xb0ff2632, 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, 0xae361681,
17761 +
            0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, 0x481fddc5, 0xd1e70470, 0x3e256f4e,
17762 +
            0xd512d44d, 0x3ad0bf73, 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
17763 +
            0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, 0xcf2e34c3, 0x20ec5ffd,
17764 +
            0xf6498598, 0x198beea6, 0xf2bc55a5, 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df,
17765 +
            0x14959ee1, 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, 0x03b70e28,
17766 +
            0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, 0xe2f0d93c, 0x0d32b202, 0xefeea97b,
17767 +
            0x002cc245, 0xeb1b7946, 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
17768 +
            0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, 0x2e69e3d7, 0xc55e58d4,
17769 +
            0x2a9c33ea, 0xc8402893, 0x278243ad, 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323,
17770 +
            0xd6891820, 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, 0xa9580ad1,
17771 +
            0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, 0x4f71c195, 0xa4467a96, 0x4b8411a8,
17772 +
            0xba8f4a25, 0x554d211b, 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
17773 +
            0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, 0x871d2b43, 0x68df407d,
17774 +
            0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7,
17775 +
            0x7b080089, 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, 0x9388b5a2,
17776 +
            0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, 0x6b684e55, 0x84aa256b, 0x6f9d9e68,
17777 +
            0x805ff556, 0x6283ee2f, 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
17778 +
            0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, 0xbdcd9430, 0x4cc6cfbd,
17779 +
            0xa304a483, 0x48331f80, 0xa7f174be, 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4,
17780 +
            0x37e20d71, 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, 0x3afc7d36,
17781 +
            0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, 0xcf02f686, 0x2ddeedff, 0xc21c86c1,
17782 +
            0x292b3dc2, 0xc6e956fc, 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
17783 +
            0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, 0x076e1c50, 0xe8ac776e,
17784 +
            0x0a706c17, 0xe5b20729, 0x0e85bc2a, 0xe147d714,
17785 +
        ],
17786 +
        [
17787 +
            0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, 0x7157ac42, 0xe8b5ca43,
17788 +
            0x293b1583, 0xbac3e145, 0x7b4d3e85, 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07,
17789 +
            0x52762b06, 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, 0x1e2fb749,
17790 +
            0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f,
17791 +
            0xa4ec560c, 0x656289cc, 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
17792 +
            0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, 0x3c5f6e92, 0xfdd1b152,
17793 +
            0x6433d753, 0xa5bd0893, 0x8c861d10, 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c,
17794 +
            0xe9e494dc, 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, 0x01515e9f,
17795 +
            0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, 0x2270d9db, 0xe3fe061b, 0x7a1c601a,
17796 +
            0xbb92bfda, 0xd64819ef, 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
17797 +
            0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, 0xf5699eab, 0xdc528b28,
17798 +
            0x1ddc54e8, 0x843e32e9, 0x45b0ed29, 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25,
17799 +
            0xc867aea6, 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, 0x9a1185a0,
17800 +
            0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, 0xeb4629e2, 0x50d49638, 0x915a49f8,
17801 +
            0x08b82ff9, 0xc936f039, 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
17802 +
            0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, 0x02a2bd3e, 0xc32c62fe,
17803 +
            0xfe2252f3, 0x3fac8d33, 0xa64eeb32, 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0,
17804 +
            0xd7194770, 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, 0x35b61ff4,
17805 +
            0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, 0x2f8d8c5e, 0xee03539e, 0xc738461d,
17806 +
            0x06b699dd, 0x9f54ffdc, 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
17807 +
            0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, 0x18992e94, 0x817b4895,
17808 +
            0x40f59755, 0x69ce82d6, 0xa8405d16, 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1,
17809 +
            0x3bb8a9d0, 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, 0xf17dba48,
17810 +
            0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, 0x802a160a, 0x19c8700b, 0xd846afcb,
17811 +
            0x4bbe5b0d, 0x8a3084cd, 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
17812 +
            0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, 0xef520d01, 0x2edcd2c1,
17813 +
            0xb73eb4c0, 0x76b06b00, 0xe5489fc6, 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44,
17814 +
            0x941f3384, 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, 0x384b4a71,
17815 +
            0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, 0x1b6acd35, 0xdae412f5, 0x430674f4,
17816 +
            0x8288ab34, 0xabb3beb7, 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
17817 +
            0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, 0x2664fd38, 0xb59c09fe,
17818 +
            0x7412d63e, 0xedf0b03f, 0x2c7e6fff, 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d,
17819 +
            0x2735a3a7, 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, 0xcf8069e4,
17820 +
            0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, 0x041424e3, 0x2d2f3160, 0xeca1eea0,
17821 +
            0x754388a1, 0xb4cd5761, 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
17822 +
            0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, 0x6b6c3fe8, 0xaae2e028,
17823 +
            0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, 0x1a3b93aa,
17824 +
        ],
17825 +
        [
17826 +
            0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, 0x98a37710, 0xef3da5e0,
17827 +
            0x7498e98f, 0x060c76fe, 0x9da93a91, 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee,
17828 +
            0xe931d31e, 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, 0x0f1ed683,
17829 +
            0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, 0x91b1d76d, 0xe62f059d, 0x7d8a49f2,
17830 +
            0x0912a07d, 0x92b7ec12, 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
17831 +
            0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, 0x1e3dad06, 0x8598e169,
17832 +
            0xf2063399, 0x69a37ff6, 0x1d3b9679, 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604,
17833 +
            0x8f8c7a6b, 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, 0x60b1df8b,
17834 +
            0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, 0x11237b85, 0x8a8637ea, 0xfd18e51a,
17835 +
            0x66bda975, 0x3063b7f0, 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
17836 +
            0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, 0x41f113fe, 0x3569fa71,
17837 +
            0xaeccb61e, 0xd95264ee, 0x42f72881, 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc,
17838 +
            0x3f7d6173, 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, 0xd64cb26d,
17839 +
            0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, 0x4eefc57d, 0x28526c08, 0xb3f72067,
17840 +
            0xc469f297, 0x5fccbef8, 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
17841 +
            0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, 0xc163bf16, 0x5ac6f379,
17842 +
            0x244a81f4, 0xbfefcd9b, 0xc8711f6b, 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414,
17843 +
            0x50d2687b, 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, 0xbae5801a,
17844 +
            0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, 0x8cfcf17f, 0x1759bd10, 0x63c1549f,
17845 +
            0xf86418f0, 0x8ffaca00, 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
17846 +
            0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, 0xf77ace73, 0x80e41c83,
17847 +
            0x1b4150ec, 0x6fd9b963, 0xf47cf50c, 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d,
17848 +
            0x86e86a7d, 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, 0x78f6b418,
17849 +
            0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, 0xe055c308, 0x97cb11f8, 0x0c6e5d97,
17850 +
            0x7efac2e6, 0xe55f8e89, 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
17851 +
            0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, 0x77e8629b, 0xec4d2ef4,
17852 +
            0x9bd3fc04, 0x0076b06b, 0x72e22f1a, 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465,
17853 +
            0xea41580a, 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, 0x273a0ae0,
17854 +
            0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, 0x56a8aeee, 0xcd0de281, 0xba933071,
17855 +
            0x21367c1e, 0x55ae9591, 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
17856 +
            0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, 0x2824dc63, 0x5ab04312,
17857 +
            0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d,
17858 +
            0x489503e8, 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, 0xa7a8a608,
17859 +
            0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, 0x3907a7e6, 0x4d9f4e69, 0xd63a0206,
17860 +
            0xa1a4d0f6, 0x3a019c99, 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
17861 +
            0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, 0xaeba0675, 0x351f4a1a,
17862 +
            0x4187a395, 0xda22effa, 0xadbc3d0a, 0x36197165,
17863 +
        ],
17864 +
        [
17865 +
            0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, 0x1d2fb313, 0xa0e5dfdd,
17866 +
            0x7d730658, 0x5a03d36d, 0x87950ae8, 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e,
17867 +
            0xfae60cb0, 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, 0x74becc4c,
17868 +
            0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, 0x3392ac32, 0x8e58c0fc, 0x53ce1979,
17869 +
            0x2ebd1f21, 0xf32bc6a4, 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
17870 +
            0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, 0xe97d9898, 0x34eb411d,
17871 +
            0x89212dd3, 0x54b7f456, 0x29c4f20e, 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f,
17872 +
            0xdaef34aa, 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, 0x7a0aeb77,
17873 +
            0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, 0x9dc354d4, 0x40558d51, 0xfd9fe19f,
17874 +
            0x2009381a, 0xbd8d91ab, 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
17875 +
            0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, 0x5a442e08, 0x27372850,
17876 +
            0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf,
17877 +
            0xc9335de7, 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, 0x33d55157,
17878 +
            0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, 0x2efae244, 0x0ef3da5e, 0xd36503db,
17879 +
            0x6eaf6f15, 0xb339b690, 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
17880 +
            0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, 0xf415d6ee, 0x29830f6b,
17881 +
            0xbaf47c84, 0x6762a501, 0xdaa8c9cf, 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359,
17882 +
            0xc7877adc, 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, 0xfdd81cfa,
17883 +
            0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, 0xc036905c, 0x1da049d9, 0x60d34f81,
17884 +
            0xbd459604, 0x008ffaca, 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
17885 +
            0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, 0xc9fb5a48, 0x74313686,
17886 +
            0xa9a7ef03, 0xd4d4e95b, 0x094230de, 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925,
17887 +
            0x2e32e5eb, 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, 0x13146ee2,
17888 +
            0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba,
17889 +
            0x4917bd8f, 0x9481640a, 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
17890 +
            0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, 0x67aaa2ae, 0xba3c7b2b,
17891 +
            0x07f617e5, 0xda60ce60, 0xfd101b55, 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3,
17892 +
            0xe03fa846, 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, 0xa02dd872,
17893 +
            0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, 0x47e467d1, 0x9a72be54, 0x27b8d29a,
17894 +
            0xfa2e0b1f, 0x875d0d47, 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
17895 +
            0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, 0xd493143e, 0xf3e3c10b,
17896 +
            0x2e75188e, 0x93bf7440, 0x4e29adc5, 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753,
17897 +
            0xae99ff49, 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, 0x0e7c2094,
17898 +
            0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, 0x495040ea, 0x342346b2, 0xe9b59f37,
17899 +
            0x547ff3f9, 0x89e92a7c, 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
17900 +
            0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, 0x20c13fb5, 0xfd57e630,
17901 +
            0x8024e068, 0x5db239ed, 0xe0785523, 0x3dee8ca6,
17902 +
        ],
17903 +
        [
17904 +
            0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, 0x84a36e6d, 0xf8c24bb6,
17905 +
            0x65cdaac0, 0x33591e36, 0xae56ff40, 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b,
17906 +
            0xcb9b5580, 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, 0x7f1eb377,
17907 +
            0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, 0xc8e4c32c, 0xb485e6f7, 0x298a0781,
17908 +
            0x4c47ad41, 0xd1484c37, 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
17909 +
            0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, 0xfe3d66ee, 0x63328798,
17910 +
            0x1f53a243, 0x825c4335, 0xe791e9f5, 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4,
17911 +
            0x36d9a5c2, 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, 0xce1bee74,
17912 +
            0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, 0x8123d599, 0x1c2c34ef, 0x604d1134,
17913 +
            0xfd42f042, 0x41b9f7f1, 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
17914 +
            0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, 0x0e81cc1c, 0x6b4c66dc,
17915 +
            0xf64387aa, 0x8a22a271, 0x172d4307, 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46,
17916 +
            0x3ea74486, 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, 0xf53c1106,
17917 +
            0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f,
17918 +
            0x6db34b84, 0xf0bcaaf2, 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
17919 +
            0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, 0x4746daa9, 0xda493bdf,
17920 +
            0xea6fb345, 0x77605233, 0x0b0177e8, 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3,
17921 +
            0x8fa21985, 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, 0x5d95c31e,
17922 +
            0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, 0x621d2b4f, 0xff12ca39, 0x9adf60f9,
17923 +
            0x07d0818f, 0x7bb1a454, 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
17924 +
            0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, 0x78ce32f8, 0x04af1723,
17925 +
            0x99a0f655, 0xfc6d5c95, 0x6162bde3, 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce,
17926 +
            0x37f60915, 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, 0x4e17973a,
17927 +
            0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa,
17928 +
            0x7d4e890c, 0xe041687a, 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
17929 +
            0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, 0x3109244d, 0xac06c53b,
17930 +
            0xd067e0e0, 0x4d680196, 0x1bfcb560, 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b,
17931 +
            0x9f5fdb0d, 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, 0xbeab3dc8,
17932 +
            0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, 0xf1930625, 0x6c9ce753, 0x10fdc288,
17933 +
            0x8df223fe, 0xe83f893e, 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
17934 +
            0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, 0xc1b58ebf, 0x97213a49,
17935 +
            0x0a2edb3f, 0x764ffee4, 0xeb401f92, 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089,
17936 +
            0x0fae60cb, 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, 0xf76c2b7d,
17937 +
            0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, 0x40965b26, 0x255bf1e6, 0xb8541090,
17938 +
            0xc435354b, 0x593ad43d, 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
17939 +
            0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, 0xbb2b863c, 0x2624674a,
17940 +
            0x43e9cd8a, 0xdee62cfc, 0xa2870927, 0x3f88e851,
17941 +
        ],
17942 +
        [
17943 +
            0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, 0x3387be8b, 0x22fad4f2,
17944 +
            0x9b010f1a, 0xcf89cc87, 0x7672176f, 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c,
17945 +
            0xed731875, 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, 0xce1efa2c,
17946 +
            0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, 0x32108820, 0x236de259, 0x9a9639b1,
17947 +
            0x019736ab, 0xb86ced43, 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
17948 +
            0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, 0x474cf219, 0xfeb729f1,
17949 +
            0xefca4388, 0x56319860, 0xcd30977a, 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1,
17950 +
            0x755c7a39, 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, 0x57a6aecb,
17951 +
            0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, 0x89520835, 0x30a9d3dd, 0x21d4b9a4,
17952 +
            0x982f624c, 0xcafb7b7d, 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
17953 +
            0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, 0x140fdd83, 0x8f0ed299,
17954 +
            0x36f50971, 0x27886308, 0x9e73b8e0, 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b,
17955 +
            0x04e58151, 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, 0xe9969924,
17956 +
            0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, 0xda1127af, 0x423e45e3, 0xfbc59e0b,
17957 +
            0xeab8f472, 0x53432f9a, 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
17958 +
            0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, 0xaf4d5d96, 0x16b6867e,
17959 +
            0x065cdaac, 0xbfa70144, 0xaeda6b3d, 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e,
17960 +
            0x9d5dd5b6, 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, 0xfa52a8a0,
17961 +
            0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8,
17962 +
            0x7d004e30, 0x6c7d2449, 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
17963 +
            0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, 0xb31eb41c, 0xa263de65,
17964 +
            0x1b98058d, 0x80990a97, 0x3962d17f, 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b,
17965 +
            0x6dea12e2, 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, 0xc642ce25,
17966 +
            0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f,
17967 +
            0x09cb02a2, 0xb030d94a, 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
17968 +
            0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, 0x085c3409, 0xb1a7efe1,
17969 +
            0xa0da8598, 0x19215e70, 0x4da99ded, 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e,
17970 +
            0x7e2e2366, 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, 0x9501e1bf,
17971 +
            0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, 0x4bf54741, 0xf20e9ca9, 0xe373f6d0,
17972 +
            0x5a882d38, 0xc1892222, 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
17973 +
            0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, 0x5b1f1b93, 0x0f97d80e,
17974 +
            0xb66c03e6, 0xa711699f, 0x1eeab277, 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714,
17975 +
            0x0cb9b558, 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, 0x2e4361aa,
17976 +
            0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, 0xd24d13a6, 0x494c1cbc, 0xf0b7c754,
17977 +
            0xe1caad2d, 0x583176c5, 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
17978 +
            0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, 0x2fd45701, 0x962f8ce9,
17979 +
            0x0d2e83f3, 0xb4d5581b, 0xa5a83262, 0x1c53e98a,
17980 +
        ],
17981 +
        [
17982 +
            0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, 0x7a59dd16, 0x539169e4,
17983 +
            0xfdf9f875, 0x73139f4f, 0xdd7b0ede, 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259,
17984 +
            0x2082f6ab, 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, 0x32167219,
17985 +
            0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, 0x3b5c3040, 0x129484b2, 0xbcfc1523,
17986 +
            0x4105ed56, 0xef6d7cc7, 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
17987 +
            0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, 0x642ce432, 0xca4475a3,
17988 +
            0xe38cc151, 0x4de450c0, 0xb01da8b5, 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3,
17989 +
            0x5f70d472, 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, 0x0ce1bd96,
17990 +
            0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, 0x563a962b, 0xf85207ba, 0xd19ab348,
17991 +
            0x7ff222d9, 0x2e7ef6fa, 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
17992 +
            0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, 0x74a5dd47, 0x895c2532,
17993 +
            0x2734b4a3, 0x0efc0051, 0xa09491c0, 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96,
17994 +
            0x1c6884e3, 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, 0x3cea7248,
17995 +
            0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, 0x46b3af5e, 0x39418d87, 0x97291c16,
17996 +
            0xbee1a8e4, 0x10893975, 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
17997 +
            0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, 0x19c37b2c, 0xb7abeabd,
17998 +
            0xdf66b319, 0x710e2288, 0x58c6967a, 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd,
17999 +
            0x229f4b6c, 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, 0xd62cf140,
18000 +
            0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, 0xdb5dc897, 0x75355906, 0x88cca173,
18001 +
            0x26a430e2, 0x0f6c8410, 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
18002 +
            0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, 0x14b242fb, 0x3d7af609,
18003 +
            0x93126798, 0x6eeb9fed, 0xc0830e7c, 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4,
18004 +
            0x4e696946, 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, 0x4bc29689,
18005 +
            0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, 0x319b4b9f, 0x1853ff6d, 0xb63b6efc,
18006 +
            0x38d109c6, 0x96b99857, 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
18007 +
            0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, 0x79d4e490, 0xd7bc7501,
18008 +
            0xfe74c1f3, 0x501c5062, 0xdef63758, 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf,
18009 +
            0xa4afea4e, 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, 0x5b4baffc,
18010 +
            0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, 0x01908441, 0xaff815d0, 0x8630a122,
18011 +
            0x285830b3, 0xd5a1c8c6, 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
18012 +
            0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, 0x695ddde5, 0xe7b7badf,
18013 +
            0x49df2b4e, 0x60179fbc, 0xce7f0e2d, 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa,
18014 +
            0x65bc6073, 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, 0x362d0997,
18015 +
            0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, 0x3f674bce, 0xc29eb3bb, 0x6cf6222a,
18016 +
            0x453e96d8, 0xeb560749, 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
18017 +
            0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, 0x7728e4c1, 0xd9407550,
18018 +
            0x24b98d25, 0x8ad11cb4, 0xa319a846, 0x0d7139d7,
18019 +
        ],
18020 +
    ];
18021 +
18022 +
    pub static CRC32_JAMCRC_TABLE: [[u32; 256]; 16] = [
18023 +
        [
18024 +
            0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535,
18025 +
            0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd,
18026 +
            0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d,
18027 +
            0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
18028 +
            0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
18029 +
            0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
18030 +
            0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac,
18031 +
            0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
18032 +
            0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab,
18033 +
            0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
18034 +
            0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb,
18035 +
            0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
18036 +
            0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea,
18037 +
            0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce,
18038 +
            0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
18039 +
            0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
18040 +
            0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409,
18041 +
            0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
18042 +
            0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739,
18043 +
            0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
18044 +
            0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268,
18045 +
            0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0,
18046 +
            0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8,
18047 +
            0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
18048 +
            0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
18049 +
            0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703,
18050 +
            0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7,
18051 +
            0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
18052 +
            0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae,
18053 +
            0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
18054 +
            0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6,
18055 +
            0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
18056 +
            0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d,
18057 +
            0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5,
18058 +
            0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
18059 +
            0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
18060 +
            0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
18061 +
        ],
18062 +
        [
18063 +
            0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, 0x565aa786,
18064 +
            0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d,
18065 +
            0x9e832d8e, 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, 0x2eaed755,
18066 +
            0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a,
18067 +
            0xe6775d5d, 0xff6c6c1c, 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
18068 +
            0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb,
18069 +
            0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3,
18070 +
            0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, 0x9007a034,
18071 +
            0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, 0x73f379ff, 0x6ae848be, 0x41c51b7d,
18072 +
            0x58de2a3c, 0xf0794f05, 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
18073 +
            0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009,
18074 +
            0x45d73148, 0x6efa628b, 0x77e153ca, 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97,
18075 +
            0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, 0x4054b5de,
18076 +
            0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6,
18077 +
            0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
18078 +
            0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768,
18079 +
            0x2f3f79f6, 0x362448b7, 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70,
18080 +
            0x607eef31, 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb,
18081 +
            0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, 0x5fef5d4f,
18082 +
            0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
18083 +
            0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, 0x685abb5b, 0x4377e898,
18084 +
            0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153,
18085 +
            0x8bae6290, 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, 0xae07bce9,
18086 +
            0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e,
18087 +
            0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
18088 +
            0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, 0x80a96bbc, 0x99b25afd,
18089 +
            0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4,
18090 +
            0x516bd0f5, 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d,
18091 +
            0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4,
18092 +
            0x280e0e85, 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
18093 +
            0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, 0x49e14f17,
18094 +
            0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0,
18095 +
            0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, 0x0824546a,
18096 +
            0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1,
18097 +
            0xc0fdde62, 0xd9e6ef23, 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
18098 +
            0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876,
18099 +
            0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72,
18100 +
        ],
18101 +
        [
18102 +
            0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, 0x048d7cb2,
18103 +
            0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353,
18104 +
            0x0a9e2d0a, 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, 0x1b2f0bac,
18105 +
            0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91,
18106 +
            0x153c5a14, 0x14fe3023, 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
18107 +
            0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f,
18108 +
            0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590,
18109 +
            0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, 0x2124f315,
18110 +
            0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a,
18111 +
            0x2f37a2ad, 0x709a8dc0, 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
18112 +
            0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4,
18113 +
            0x78421e93, 0x7a04a0ca, 0x7bc6cafd, 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9,
18114 +
            0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, 0x612bab66,
18115 +
            0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d, 0x48d7cb20, 0x4915a117,
18116 +
            0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
18117 +
            0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d,
18118 +
            0x54f16850, 0x55330267, 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2,
18119 +
            0x51be7ed5, 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03,
18120 +
            0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c,
18121 +
            0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
18122 +
            0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e,
18123 +
            0xff5506a9, 0xfa1a102c, 0xfbd87a1b, 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f,
18124 +
            0xf0843d26, 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, 0xd9785d60,
18125 +
            0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5,
18126 +
            0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
18127 +
            0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, 0xc25756cc, 0xc3953cfb,
18128 +
            0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774,
18129 +
            0xcd866d43, 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819,
18130 +
            0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396,
18131 +
            0x9dfa79a1, 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
18132 +
            0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, 0x839a6488,
18133 +
            0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d,
18134 +
            0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, 0xad6fac12,
18135 +
            0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3,
18136 +
            0xa37cfdaa, 0xa2be979d, 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
18137 +
            0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31,
18138 +
            0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed,
18139 +
        ],
18140 +
        [
18141 +
            0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, 0x256b5fdc,
18142 +
            0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd,
18143 +
            0xe0df7733, 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, 0xdf7bc0c8,
18144 +
            0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e,
18145 +
            0x1acfe827, 0xa2738f42, 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
18146 +
            0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4,
18147 +
            0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1,
18148 +
            0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, 0x6dfcc018,
18149 +
            0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, 0xbafd4719, 0x0241207c, 0x10f48f92,
18150 +
            0xa848e8f7, 0x9b14583d, 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
18151 +
            0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785,
18152 +
            0x697e80e0, 0x7bcb2f0e, 0xc377486b, 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c,
18153 +
            0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, 0xa4b0efc6,
18154 +
            0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4, 0x3b26f703, 0x839a9066,
18155 +
            0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
18156 +
            0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755,
18157 +
            0x6b3fa09c, 0xd383c7f9, 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40,
18158 +
            0xf6e89825, 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841,
18159 +
            0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, 0x623b216c,
18160 +
            0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
18161 +
            0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, 0x05fc86c1, 0x1749292f,
18162 +
            0xaff54e4a, 0x322276f3, 0x8a9e1196, 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e,
18163 +
            0xd2fd01c0, 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, 0x4d6b1905,
18164 +
            0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc,
18165 +
            0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
18166 +
            0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, 0x9210d9cd, 0x2aacbea8,
18167 +
            0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122,
18168 +
            0xef189647, 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8,
18169 +
            0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62,
18170 +
            0xa14c6907, 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
18171 +
            0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, 0xe3e09176,
18172 +
            0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf,
18173 +
            0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, 0xf3141ee4,
18174 +
            0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5,
18175 +
            0x36a0360b, 0x8e1c516e, 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
18176 +
            0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6,
18177 +
            0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1,
18178 +
        ],
18179 +
        [
18180 +
            0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, 0x8f40f5a0,
18181 +
            0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1,
18182 +
            0xbf30be61, 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, 0x95603142,
18183 +
            0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693,
18184 +
            0xa5107a83, 0x98705333, 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
18185 +
            0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75,
18186 +
            0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886,
18187 +
            0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, 0x13016496,
18188 +
            0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, 0x64d15587, 0x59b17c37, 0x1e1106e7,
18189 +
            0x23712f57, 0x58f35849, 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
18190 +
            0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548,
18191 +
            0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b,
18192 +
            0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, 0x72a3d76a,
18193 +
            0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a, 0x9932774d, 0xa4525efd,
18194 +
            0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
18195 +
            0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c,
18196 +
            0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f,
18197 +
            0x4bf23cdf, 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e,
18198 +
            0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, 0x44661652,
18199 +
            0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
18200 +
            0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, 0xec660ea0, 0xabc67470,
18201 +
            0x96a65dc0, 0x248681d0, 0x19e6a860, 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561,
18202 +
            0x9bb63fb1, 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, 0x70279f96,
18203 +
            0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386,
18204 +
            0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
18205 +
            0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, 0xe547aed4, 0xd8278764,
18206 +
            0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515,
18207 +
            0xe857cca5, 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b,
18208 +
            0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a,
18209 +
            0x9ec5d9ca, 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
18210 +
            0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, 0xb9853498,
18211 +
            0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888,
18212 +
            0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, 0xa794327f,
18213 +
            0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e,
18214 +
            0x97e479be, 0xaa84500e, 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
18215 +
            0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c,
18216 +
            0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c,
18217 +
        ],
18218 +
        [
18219 +
            0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, 0xd659e31d,
18220 +
            0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de,
18221 +
            0x3a0a6170, 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, 0x9847408d,
18222 +
            0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258,
18223 +
            0x7414c2e0, 0xbf481145, 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
18224 +
            0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe,
18225 +
            0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad,
18226 +
            0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, 0x197f3715,
18227 +
            0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, 0x73b8c7d6, 0xb8e41473, 0x3e7066dd,
18228 +
            0xf52cb578, 0x0f580a6c, 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
18229 +
            0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17,
18230 +
            0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59,
18231 +
            0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, 0xad152b91,
18232 +
            0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff,
18233 +
            0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
18234 +
            0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f,
18235 +
            0x0b220dc1, 0xc07ede64, 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc,
18236 +
            0x16273d79, 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f,
18237 +
            0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, 0x852156ce,
18238 +
            0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
18239 +
            0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, 0xd63ac5e6, 0x50aeb748,
18240 +
            0x9bf264ed, 0x86f75455, 0x4dab87f0, 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b,
18241 +
            0xbcfd3525, 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, 0x191c11ee,
18242 +
            0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156,
18243 +
            0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
18244 +
            0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, 0x815b5163, 0x4a0782c6,
18245 +
            0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e,
18246 +
            0xa65400ab, 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a,
18247 +
            0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2,
18248 +
            0x7b2fee77, 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
18249 +
            0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, 0xfe6d9e42,
18250 +
            0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa,
18251 +
            0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, 0xc01df89f,
18252 +
            0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c,
18253 +
            0x2c4e7af2, 0xe712a957, 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
18254 +
            0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da,
18255 +
            0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc,
18256 +
        ],
18257 +
        [
18258 +
            0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, 0x63d0353a,
18259 +
            0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0,
18260 +
            0x503f7b5d, 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, 0x9391b8dd,
18261 +
            0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834,
18262 +
            0xa07ef6ba, 0x0609fd0e, 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
18263 +
            0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f,
18264 +
            0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552,
18265 +
            0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, 0x6dc49bdc,
18266 +
            0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f,
18267 +
            0x5e2bd5bb, 0x440b7579, 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
18268 +
            0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d,
18269 +
            0x25dc14b9, 0x14340e24, 0xb2430590, 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a,
18270 +
            0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, 0x87a5b6f9,
18271 +
            0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e, 0x8bb64ce5, 0x2dc14751,
18272 +
            0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
18273 +
            0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c,
18274 +
            0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511,
18275 +
            0x29cfeea5, 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb,
18276 +
            0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1,
18277 +
            0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
18278 +
            0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, 0x49bf7d88, 0x78576715,
18279 +
            0xde206ca1, 0x1b87522f, 0xbdf0599b, 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef,
18280 +
            0x4bb82972, 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, 0x47abd36e,
18281 +
            0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0,
18282 +
            0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
18283 +
            0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, 0xd43a6bb3, 0x724d6007,
18284 +
            0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4,
18285 +
            0x41a22e60, 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516,
18286 +
            0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5,
18287 +
            0xce1acb71, 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
18288 +
            0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, 0x982c4d22,
18289 +
            0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac,
18290 +
            0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, 0x6070932d,
18291 +
            0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7,
18292 +
            0x539fdd4a, 0xf5e8d6fe, 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
18293 +
            0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23,
18294 +
            0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30,
18295 +
        ],
18296 +
        [
18297 +
            0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, 0xc66f0987,
18298 +
            0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1,
18299 +
            0x158a1232, 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, 0xf8f13fd1,
18300 +
            0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d,
18301 +
            0x2b142464, 0xe7be24fa, 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
18302 +
            0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d,
18303 +
            0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d,
18304 +
            0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, 0x8f085a64,
18305 +
            0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, 0xd2624632, 0x1ec846ac, 0x9047414f,
18306 +
            0x5ced41d1, 0x299dc2ed, 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
18307 +
            0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2,
18308 +
            0xb298d73c, 0x3c17d0df, 0xf0bdd041, 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425,
18309 +
            0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, 0xc4e6ef0e,
18310 +
            0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a, 0xd0eba0bb, 0x1c41a025,
18311 +
            0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
18312 +
            0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217,
18313 +
            0xac509190, 0x60fa910e, 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817,
18314 +
            0xa6959889, 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441,
18315 +
            0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, 0xd7718b20,
18316 +
            0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
18317 +
            0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, 0xe32ab46f, 0x6da5b38c,
18318 +
            0xa10fb312, 0xabcaba0b, 0x6760ba95, 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda,
18319 +
            0xbe40a839, 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, 0xaa4de78c,
18320 +
            0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95,
18321 +
            0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
18322 +
            0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, 0x52bcd85d, 0x9e16d8c3,
18323 +
            0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8,
18324 +
            0x4df3c376, 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4,
18325 +
            0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff,
18326 +
            0x27cc5b61, 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
18327 +
            0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, 0xd5f86da9,
18328 +
            0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0,
18329 +
            0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, 0x45bf2ce6,
18330 +
            0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0,
18331 +
            0x965a3753, 0x5af037cd, 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
18332 +
            0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c,
18333 +
            0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6,
18334 +
        ],
18335 +
        [
18336 +
            0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, 0x4a97454f, 0x731a798a,
18337 +
            0x64616dc9, 0xbbd8a218, 0xaca3b65b, 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757,
18338 +
            0xc8c2db92, 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, 0xf12c137d,
18339 +
            0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, 0x0063f42a, 0x39eec8ef, 0x2e95dcac,
18340 +
            0x4af4b165, 0x5d8fa526, 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
18341 +
            0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, 0x392920bb, 0x2e5234f8,
18342 +
            0x17df083d, 0x00a41c7e, 0x64c571b7, 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2,
18343 +
            0x394ad491, 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, 0x4a50ad1b,
18344 +
            0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, 0xc80533c6, 0xdf7e2785, 0xe6f31b40,
18345 +
            0xf1880f03, 0xde920307, 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
18346 +
            0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, 0x5cc79dda, 0x38a6f013,
18347 +
            0x2fdde450, 0x1650d895, 0x012bccd6, 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3,
18348 +
            0x2fbe107a, 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, 0xe77ccbe8,
18349 +
            0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7,
18350 +
            0x7295a922, 0x65eebd61, 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
18351 +
            0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, 0x94a15a36, 0x83da4e75,
18352 +
            0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f,
18353 +
            0x94c2ae1c, 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, 0x01ec2482,
18354 +
            0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, 0x48a328c9, 0x5fd83c8a, 0x3bb95143,
18355 +
            0x2cc24500, 0x154f79c5, 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
18356 +
            0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, 0xddee567d, 0xe4636ab8,
18357 +
            0xf3187efb, 0x97791332, 0x80020771, 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465,
18358 +
            0x5fbbc8a0, 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, 0xe4a482ec,
18359 +
            0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, 0xae33c7a3, 0x97befb66, 0x80c5ef25,
18360 +
            0x5f7c20f4, 0x480734b7, 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
18361 +
            0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, 0x15889191, 0x02f385d2,
18362 +
            0x3b7eb917, 0x2c05ad54, 0xf3bc6285, 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389,
18363 +
            0xb92b27ca, 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, 0x814a3f8d,
18364 +
            0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, 0x031fa150, 0x1464b513, 0x2de989d6,
18365 +
            0x3a929d95, 0x5ef3f05c, 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
18366 +
            0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, 0x70662cf0, 0xafdfe321,
18367 +
            0xb8a4f762, 0x8129cba7, 0x9652dfe4, 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8,
18368 +
            0x3a3681eb, 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, 0x492cf861,
18369 +
            0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, 0xb8631f36, 0xdc0272ff, 0xcb7966bc,
18370 +
            0xf2f45a79, 0xe58f4e3a, 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
18371 +
            0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, 0x03d84904, 0x14a35d47,
18372 +
            0x70c2308e, 0x67b924cd, 0x5e341808, 0x494f0c4b,
18373 +
        ],
18374 +
        [
18375 +
            0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, 0xe629cb44, 0x0d1e7047,
18376 +
            0xe2dc1b79, 0x13d740f4, 0xfc152bca, 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0,
18377 +
            0x1ec930b3, 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, 0x2e452192,
18378 +
            0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f,
18379 +
            0x3d926166, 0xd2500a58, 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
18380 +
            0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, 0x5c8a4324, 0xb348281a,
18381 +
            0x587f9319, 0xb7bdf827, 0x5561e35e, 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238,
18382 +
            0x8731e906, 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, 0x8a2f9941,
18383 +
            0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, 0x72cf62b6, 0x9d0d0988, 0x763ab28b,
18384 +
            0x99f8d9b5, 0x9eba07a0, 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
18385 +
            0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, 0x665afc57, 0x8486e72e,
18386 +
            0x6b448c10, 0x80733713, 0x6fb15c2d, 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b,
18387 +
            0xb0ff2632, 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, 0xae361681,
18388 +
            0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, 0x481fddc5, 0xd1e70470, 0x3e256f4e,
18389 +
            0xd512d44d, 0x3ad0bf73, 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
18390 +
            0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, 0xcf2e34c3, 0x20ec5ffd,
18391 +
            0xf6498598, 0x198beea6, 0xf2bc55a5, 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df,
18392 +
            0x14959ee1, 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, 0x03b70e28,
18393 +
            0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, 0xe2f0d93c, 0x0d32b202, 0xefeea97b,
18394 +
            0x002cc245, 0xeb1b7946, 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
18395 +
            0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, 0x2e69e3d7, 0xc55e58d4,
18396 +
            0x2a9c33ea, 0xc8402893, 0x278243ad, 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323,
18397 +
            0xd6891820, 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, 0xa9580ad1,
18398 +
            0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, 0x4f71c195, 0xa4467a96, 0x4b8411a8,
18399 +
            0xba8f4a25, 0x554d211b, 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
18400 +
            0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, 0x871d2b43, 0x68df407d,
18401 +
            0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7,
18402 +
            0x7b080089, 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, 0x9388b5a2,
18403 +
            0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, 0x6b684e55, 0x84aa256b, 0x6f9d9e68,
18404 +
            0x805ff556, 0x6283ee2f, 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
18405 +
            0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, 0xbdcd9430, 0x4cc6cfbd,
18406 +
            0xa304a483, 0x48331f80, 0xa7f174be, 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4,
18407 +
            0x37e20d71, 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, 0x3afc7d36,
18408 +
            0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, 0xcf02f686, 0x2ddeedff, 0xc21c86c1,
18409 +
            0x292b3dc2, 0xc6e956fc, 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
18410 +
            0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, 0x076e1c50, 0xe8ac776e,
18411 +
            0x0a706c17, 0xe5b20729, 0x0e85bc2a, 0xe147d714,
18412 +
        ],
18413 +
        [
18414 +
            0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, 0x7157ac42, 0xe8b5ca43,
18415 +
            0x293b1583, 0xbac3e145, 0x7b4d3e85, 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07,
18416 +
            0x52762b06, 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, 0x1e2fb749,
18417 +
            0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f,
18418 +
            0xa4ec560c, 0x656289cc, 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
18419 +
            0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, 0x3c5f6e92, 0xfdd1b152,
18420 +
            0x6433d753, 0xa5bd0893, 0x8c861d10, 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c,
18421 +
            0xe9e494dc, 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, 0x01515e9f,
18422 +
            0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, 0x2270d9db, 0xe3fe061b, 0x7a1c601a,
18423 +
            0xbb92bfda, 0xd64819ef, 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
18424 +
            0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, 0xf5699eab, 0xdc528b28,
18425 +
            0x1ddc54e8, 0x843e32e9, 0x45b0ed29, 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25,
18426 +
            0xc867aea6, 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, 0x9a1185a0,
18427 +
            0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, 0xeb4629e2, 0x50d49638, 0x915a49f8,
18428 +
            0x08b82ff9, 0xc936f039, 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
18429 +
            0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, 0x02a2bd3e, 0xc32c62fe,
18430 +
            0xfe2252f3, 0x3fac8d33, 0xa64eeb32, 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0,
18431 +
            0xd7194770, 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, 0x35b61ff4,
18432 +
            0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, 0x2f8d8c5e, 0xee03539e, 0xc738461d,
18433 +
            0x06b699dd, 0x9f54ffdc, 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
18434 +
            0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, 0x18992e94, 0x817b4895,
18435 +
            0x40f59755, 0x69ce82d6, 0xa8405d16, 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1,
18436 +
            0x3bb8a9d0, 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, 0xf17dba48,
18437 +
            0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, 0x802a160a, 0x19c8700b, 0xd846afcb,
18438 +
            0x4bbe5b0d, 0x8a3084cd, 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
18439 +
            0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, 0xef520d01, 0x2edcd2c1,
18440 +
            0xb73eb4c0, 0x76b06b00, 0xe5489fc6, 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44,
18441 +
            0x941f3384, 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, 0x384b4a71,
18442 +
            0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, 0x1b6acd35, 0xdae412f5, 0x430674f4,
18443 +
            0x8288ab34, 0xabb3beb7, 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
18444 +
            0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, 0x2664fd38, 0xb59c09fe,
18445 +
            0x7412d63e, 0xedf0b03f, 0x2c7e6fff, 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d,
18446 +
            0x2735a3a7, 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, 0xcf8069e4,
18447 +
            0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, 0x041424e3, 0x2d2f3160, 0xeca1eea0,
18448 +
            0x754388a1, 0xb4cd5761, 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
18449 +
            0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, 0x6b6c3fe8, 0xaae2e028,
18450 +
            0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, 0x1a3b93aa,
18451 +
        ],
18452 +
        [
18453 +
            0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, 0x98a37710, 0xef3da5e0,
18454 +
            0x7498e98f, 0x060c76fe, 0x9da93a91, 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee,
18455 +
            0xe931d31e, 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, 0x0f1ed683,
18456 +
            0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, 0x91b1d76d, 0xe62f059d, 0x7d8a49f2,
18457 +
            0x0912a07d, 0x92b7ec12, 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
18458 +
            0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, 0x1e3dad06, 0x8598e169,
18459 +
            0xf2063399, 0x69a37ff6, 0x1d3b9679, 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604,
18460 +
            0x8f8c7a6b, 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, 0x60b1df8b,
18461 +
            0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, 0x11237b85, 0x8a8637ea, 0xfd18e51a,
18462 +
            0x66bda975, 0x3063b7f0, 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
18463 +
            0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, 0x41f113fe, 0x3569fa71,
18464 +
            0xaeccb61e, 0xd95264ee, 0x42f72881, 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc,
18465 +
            0x3f7d6173, 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, 0xd64cb26d,
18466 +
            0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, 0x4eefc57d, 0x28526c08, 0xb3f72067,
18467 +
            0xc469f297, 0x5fccbef8, 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
18468 +
            0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, 0xc163bf16, 0x5ac6f379,
18469 +
            0x244a81f4, 0xbfefcd9b, 0xc8711f6b, 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414,
18470 +
            0x50d2687b, 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, 0xbae5801a,
18471 +
            0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, 0x8cfcf17f, 0x1759bd10, 0x63c1549f,
18472 +
            0xf86418f0, 0x8ffaca00, 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
18473 +
            0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, 0xf77ace73, 0x80e41c83,
18474 +
            0x1b4150ec, 0x6fd9b963, 0xf47cf50c, 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d,
18475 +
            0x86e86a7d, 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, 0x78f6b418,
18476 +
            0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, 0xe055c308, 0x97cb11f8, 0x0c6e5d97,
18477 +
            0x7efac2e6, 0xe55f8e89, 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
18478 +
            0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, 0x77e8629b, 0xec4d2ef4,
18479 +
            0x9bd3fc04, 0x0076b06b, 0x72e22f1a, 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465,
18480 +
            0xea41580a, 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, 0x273a0ae0,
18481 +
            0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, 0x56a8aeee, 0xcd0de281, 0xba933071,
18482 +
            0x21367c1e, 0x55ae9591, 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
18483 +
            0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, 0x2824dc63, 0x5ab04312,
18484 +
            0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d,
18485 +
            0x489503e8, 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, 0xa7a8a608,
18486 +
            0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, 0x3907a7e6, 0x4d9f4e69, 0xd63a0206,
18487 +
            0xa1a4d0f6, 0x3a019c99, 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
18488 +
            0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, 0xaeba0675, 0x351f4a1a,
18489 +
            0x4187a395, 0xda22effa, 0xadbc3d0a, 0x36197165,
18490 +
        ],
18491 +
        [
18492 +
            0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, 0x1d2fb313, 0xa0e5dfdd,
18493 +
            0x7d730658, 0x5a03d36d, 0x87950ae8, 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e,
18494 +
            0xfae60cb0, 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, 0x74becc4c,
18495 +
            0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, 0x3392ac32, 0x8e58c0fc, 0x53ce1979,
18496 +
            0x2ebd1f21, 0xf32bc6a4, 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
18497 +
            0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, 0xe97d9898, 0x34eb411d,
18498 +
            0x89212dd3, 0x54b7f456, 0x29c4f20e, 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f,
18499 +
            0xdaef34aa, 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, 0x7a0aeb77,
18500 +
            0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, 0x9dc354d4, 0x40558d51, 0xfd9fe19f,
18501 +
            0x2009381a, 0xbd8d91ab, 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
18502 +
            0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, 0x5a442e08, 0x27372850,
18503 +
            0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf,
18504 +
            0xc9335de7, 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, 0x33d55157,
18505 +
            0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, 0x2efae244, 0x0ef3da5e, 0xd36503db,
18506 +
            0x6eaf6f15, 0xb339b690, 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
18507 +
            0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, 0xf415d6ee, 0x29830f6b,
18508 +
            0xbaf47c84, 0x6762a501, 0xdaa8c9cf, 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359,
18509 +
            0xc7877adc, 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, 0xfdd81cfa,
18510 +
            0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, 0xc036905c, 0x1da049d9, 0x60d34f81,
18511 +
            0xbd459604, 0x008ffaca, 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
18512 +
            0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, 0xc9fb5a48, 0x74313686,
18513 +
            0xa9a7ef03, 0xd4d4e95b, 0x094230de, 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925,
18514 +
            0x2e32e5eb, 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, 0x13146ee2,
18515 +
            0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba,
18516 +
            0x4917bd8f, 0x9481640a, 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
18517 +
            0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, 0x67aaa2ae, 0xba3c7b2b,
18518 +
            0x07f617e5, 0xda60ce60, 0xfd101b55, 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3,
18519 +
            0xe03fa846, 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, 0xa02dd872,
18520 +
            0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, 0x47e467d1, 0x9a72be54, 0x27b8d29a,
18521 +
            0xfa2e0b1f, 0x875d0d47, 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
18522 +
            0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, 0xd493143e, 0xf3e3c10b,
18523 +
            0x2e75188e, 0x93bf7440, 0x4e29adc5, 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753,
18524 +
            0xae99ff49, 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, 0x0e7c2094,
18525 +
            0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, 0x495040ea, 0x342346b2, 0xe9b59f37,
18526 +
            0x547ff3f9, 0x89e92a7c, 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
18527 +
            0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, 0x20c13fb5, 0xfd57e630,
18528 +
            0x8024e068, 0x5db239ed, 0xe0785523, 0x3dee8ca6,
18529 +
        ],
18530 +
        [
18531 +
            0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, 0x84a36e6d, 0xf8c24bb6,
18532 +
            0x65cdaac0, 0x33591e36, 0xae56ff40, 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b,
18533 +
            0xcb9b5580, 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, 0x7f1eb377,
18534 +
            0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, 0xc8e4c32c, 0xb485e6f7, 0x298a0781,
18535 +
            0x4c47ad41, 0xd1484c37, 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
18536 +
            0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, 0xfe3d66ee, 0x63328798,
18537 +
            0x1f53a243, 0x825c4335, 0xe791e9f5, 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4,
18538 +
            0x36d9a5c2, 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, 0xce1bee74,
18539 +
            0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, 0x8123d599, 0x1c2c34ef, 0x604d1134,
18540 +
            0xfd42f042, 0x41b9f7f1, 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
18541 +
            0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, 0x0e81cc1c, 0x6b4c66dc,
18542 +
            0xf64387aa, 0x8a22a271, 0x172d4307, 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46,
18543 +
            0x3ea74486, 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, 0xf53c1106,
18544 +
            0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f,
18545 +
            0x6db34b84, 0xf0bcaaf2, 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
18546 +
            0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, 0x4746daa9, 0xda493bdf,
18547 +
            0xea6fb345, 0x77605233, 0x0b0177e8, 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3,
18548 +
            0x8fa21985, 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, 0x5d95c31e,
18549 +
            0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, 0x621d2b4f, 0xff12ca39, 0x9adf60f9,
18550 +
            0x07d0818f, 0x7bb1a454, 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
18551 +
            0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, 0x78ce32f8, 0x04af1723,
18552 +
            0x99a0f655, 0xfc6d5c95, 0x6162bde3, 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce,
18553 +
            0x37f60915, 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, 0x4e17973a,
18554 +
            0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa,
18555 +
            0x7d4e890c, 0xe041687a, 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
18556 +
            0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, 0x3109244d, 0xac06c53b,
18557 +
            0xd067e0e0, 0x4d680196, 0x1bfcb560, 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b,
18558 +
            0x9f5fdb0d, 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, 0xbeab3dc8,
18559 +
            0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, 0xf1930625, 0x6c9ce753, 0x10fdc288,
18560 +
            0x8df223fe, 0xe83f893e, 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
18561 +
            0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, 0xc1b58ebf, 0x97213a49,
18562 +
            0x0a2edb3f, 0x764ffee4, 0xeb401f92, 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089,
18563 +
            0x0fae60cb, 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, 0xf76c2b7d,
18564 +
            0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, 0x40965b26, 0x255bf1e6, 0xb8541090,
18565 +
            0xc435354b, 0x593ad43d, 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
18566 +
            0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, 0xbb2b863c, 0x2624674a,
18567 +
            0x43e9cd8a, 0xdee62cfc, 0xa2870927, 0x3f88e851,
18568 +
        ],
18569 +
        [
18570 +
            0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, 0x3387be8b, 0x22fad4f2,
18571 +
            0x9b010f1a, 0xcf89cc87, 0x7672176f, 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c,
18572 +
            0xed731875, 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, 0xce1efa2c,
18573 +
            0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, 0x32108820, 0x236de259, 0x9a9639b1,
18574 +
            0x019736ab, 0xb86ced43, 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
18575 +
            0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, 0x474cf219, 0xfeb729f1,
18576 +
            0xefca4388, 0x56319860, 0xcd30977a, 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1,
18577 +
            0x755c7a39, 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, 0x57a6aecb,
18578 +
            0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, 0x89520835, 0x30a9d3dd, 0x21d4b9a4,
18579 +
            0x982f624c, 0xcafb7b7d, 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
18580 +
            0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, 0x140fdd83, 0x8f0ed299,
18581 +
            0x36f50971, 0x27886308, 0x9e73b8e0, 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b,
18582 +
            0x04e58151, 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, 0xe9969924,
18583 +
            0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, 0xda1127af, 0x423e45e3, 0xfbc59e0b,
18584 +
            0xeab8f472, 0x53432f9a, 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
18585 +
            0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, 0xaf4d5d96, 0x16b6867e,
18586 +
            0x065cdaac, 0xbfa70144, 0xaeda6b3d, 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e,
18587 +
            0x9d5dd5b6, 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, 0xfa52a8a0,
18588 +
            0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8,
18589 +
            0x7d004e30, 0x6c7d2449, 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
18590 +
            0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, 0xb31eb41c, 0xa263de65,
18591 +
            0x1b98058d, 0x80990a97, 0x3962d17f, 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b,
18592 +
            0x6dea12e2, 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, 0xc642ce25,
18593 +
            0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f,
18594 +
            0x09cb02a2, 0xb030d94a, 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
18595 +
            0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, 0x085c3409, 0xb1a7efe1,
18596 +
            0xa0da8598, 0x19215e70, 0x4da99ded, 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e,
18597 +
            0x7e2e2366, 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, 0x9501e1bf,
18598 +
            0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, 0x4bf54741, 0xf20e9ca9, 0xe373f6d0,
18599 +
            0x5a882d38, 0xc1892222, 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
18600 +
            0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, 0x5b1f1b93, 0x0f97d80e,
18601 +
            0xb66c03e6, 0xa711699f, 0x1eeab277, 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714,
18602 +
            0x0cb9b558, 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, 0x2e4361aa,
18603 +
            0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, 0xd24d13a6, 0x494c1cbc, 0xf0b7c754,
18604 +
            0xe1caad2d, 0x583176c5, 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
18605 +
            0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, 0x2fd45701, 0x962f8ce9,
18606 +
            0x0d2e83f3, 0xb4d5581b, 0xa5a83262, 0x1c53e98a,
18607 +
        ],
18608 +
        [
18609 +
            0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, 0x7a59dd16, 0x539169e4,
18610 +
            0xfdf9f875, 0x73139f4f, 0xdd7b0ede, 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259,
18611 +
            0x2082f6ab, 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, 0x32167219,
18612 +
            0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, 0x3b5c3040, 0x129484b2, 0xbcfc1523,
18613 +
            0x4105ed56, 0xef6d7cc7, 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
18614 +
            0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, 0x642ce432, 0xca4475a3,
18615 +
            0xe38cc151, 0x4de450c0, 0xb01da8b5, 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3,
18616 +
            0x5f70d472, 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, 0x0ce1bd96,
18617 +
            0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, 0x563a962b, 0xf85207ba, 0xd19ab348,
18618 +
            0x7ff222d9, 0x2e7ef6fa, 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
18619 +
            0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, 0x74a5dd47, 0x895c2532,
18620 +
            0x2734b4a3, 0x0efc0051, 0xa09491c0, 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96,
18621 +
            0x1c6884e3, 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, 0x3cea7248,
18622 +
            0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, 0x46b3af5e, 0x39418d87, 0x97291c16,
18623 +
            0xbee1a8e4, 0x10893975, 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
18624 +
            0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, 0x19c37b2c, 0xb7abeabd,
18625 +
            0xdf66b319, 0x710e2288, 0x58c6967a, 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd,
18626 +
            0x229f4b6c, 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, 0xd62cf140,
18627 +
            0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, 0xdb5dc897, 0x75355906, 0x88cca173,
18628 +
            0x26a430e2, 0x0f6c8410, 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
18629 +
            0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, 0x14b242fb, 0x3d7af609,
18630 +
            0x93126798, 0x6eeb9fed, 0xc0830e7c, 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4,
18631 +
            0x4e696946, 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, 0x4bc29689,
18632 +
            0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, 0x319b4b9f, 0x1853ff6d, 0xb63b6efc,
18633 +
            0x38d109c6, 0x96b99857, 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
18634 +
            0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, 0x79d4e490, 0xd7bc7501,
18635 +
            0xfe74c1f3, 0x501c5062, 0xdef63758, 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf,
18636 +
            0xa4afea4e, 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, 0x5b4baffc,
18637 +
            0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, 0x01908441, 0xaff815d0, 0x8630a122,
18638 +
            0x285830b3, 0xd5a1c8c6, 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
18639 +
            0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, 0x695ddde5, 0xe7b7badf,
18640 +
            0x49df2b4e, 0x60179fbc, 0xce7f0e2d, 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa,
18641 +
            0x65bc6073, 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, 0x362d0997,
18642 +
            0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, 0x3f674bce, 0xc29eb3bb, 0x6cf6222a,
18643 +
            0x453e96d8, 0xeb560749, 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
18644 +
            0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, 0x7728e4c1, 0xd9407550,
18645 +
            0x24b98d25, 0x8ad11cb4, 0xa319a846, 0x0d7139d7,
18646 +
        ],
18647 +
    ];
18648 +
18649 +
    pub static CRC32_MEF_TABLE: [[u32; 256]; 16] = [
18650 +
        [
18651 +
            0x00000000, 0x9695c4ca, 0xfb4839c9, 0x6dddfd03, 0x20f3c3cf, 0xb6660705, 0xdbbbfa06,
18652 +
            0x4d2e3ecc, 0x41e7879e, 0xd7724354, 0xbaafbe57, 0x2c3a7a9d, 0x61144451, 0xf781809b,
18653 +
            0x9a5c7d98, 0x0cc9b952, 0x83cf0f3c, 0x155acbf6, 0x788736f5, 0xee12f23f, 0xa33cccf3,
18654 +
            0x35a90839, 0x5874f53a, 0xcee131f0, 0xc22888a2, 0x54bd4c68, 0x3960b16b, 0xaff575a1,
18655 +
            0xe2db4b6d, 0x744e8fa7, 0x199372a4, 0x8f06b66e, 0xd1fdae25, 0x47686aef, 0x2ab597ec,
18656 +
            0xbc205326, 0xf10e6dea, 0x679ba920, 0x0a465423, 0x9cd390e9, 0x901a29bb, 0x068fed71,
18657 +
            0x6b521072, 0xfdc7d4b8, 0xb0e9ea74, 0x267c2ebe, 0x4ba1d3bd, 0xdd341777, 0x5232a119,
18658 +
            0xc4a765d3, 0xa97a98d0, 0x3fef5c1a, 0x72c162d6, 0xe454a61c, 0x89895b1f, 0x1f1c9fd5,
18659 +
            0x13d52687, 0x8540e24d, 0xe89d1f4e, 0x7e08db84, 0x3326e548, 0xa5b32182, 0xc86edc81,
18660 +
            0x5efb184b, 0x7598ec17, 0xe30d28dd, 0x8ed0d5de, 0x18451114, 0x556b2fd8, 0xc3feeb12,
18661 +
            0xae231611, 0x38b6d2db, 0x347f6b89, 0xa2eaaf43, 0xcf375240, 0x59a2968a, 0x148ca846,
18662 +
            0x82196c8c, 0xefc4918f, 0x79515545, 0xf657e32b, 0x60c227e1, 0x0d1fdae2, 0x9b8a1e28,
18663 +
            0xd6a420e4, 0x4031e42e, 0x2dec192d, 0xbb79dde7, 0xb7b064b5, 0x2125a07f, 0x4cf85d7c,
18664 +
            0xda6d99b6, 0x9743a77a, 0x01d663b0, 0x6c0b9eb3, 0xfa9e5a79, 0xa4654232, 0x32f086f8,
18665 +
            0x5f2d7bfb, 0xc9b8bf31, 0x849681fd, 0x12034537, 0x7fdeb834, 0xe94b7cfe, 0xe582c5ac,
18666 +
            0x73170166, 0x1ecafc65, 0x885f38af, 0xc5710663, 0x53e4c2a9, 0x3e393faa, 0xa8acfb60,
18667 +
            0x27aa4d0e, 0xb13f89c4, 0xdce274c7, 0x4a77b00d, 0x07598ec1, 0x91cc4a0b, 0xfc11b708,
18668 +
            0x6a8473c2, 0x664dca90, 0xf0d80e5a, 0x9d05f359, 0x0b903793, 0x46be095f, 0xd02bcd95,
18669 +
            0xbdf63096, 0x2b63f45c, 0xeb31d82e, 0x7da41ce4, 0x1079e1e7, 0x86ec252d, 0xcbc21be1,
18670 +
            0x5d57df2b, 0x308a2228, 0xa61fe6e2, 0xaad65fb0, 0x3c439b7a, 0x519e6679, 0xc70ba2b3,
18671 +
            0x8a259c7f, 0x1cb058b5, 0x716da5b6, 0xe7f8617c, 0x68fed712, 0xfe6b13d8, 0x93b6eedb,
18672 +
            0x05232a11, 0x480d14dd, 0xde98d017, 0xb3452d14, 0x25d0e9de, 0x2919508c, 0xbf8c9446,
18673 +
            0xd2516945, 0x44c4ad8f, 0x09ea9343, 0x9f7f5789, 0xf2a2aa8a, 0x64376e40, 0x3acc760b,
18674 +
            0xac59b2c1, 0xc1844fc2, 0x57118b08, 0x1a3fb5c4, 0x8caa710e, 0xe1778c0d, 0x77e248c7,
18675 +
            0x7b2bf195, 0xedbe355f, 0x8063c85c, 0x16f60c96, 0x5bd8325a, 0xcd4df690, 0xa0900b93,
18676 +
            0x3605cf59, 0xb9037937, 0x2f96bdfd, 0x424b40fe, 0xd4de8434, 0x99f0baf8, 0x0f657e32,
18677 +
            0x62b88331, 0xf42d47fb, 0xf8e4fea9, 0x6e713a63, 0x03acc760, 0x953903aa, 0xd8173d66,
18678 +
            0x4e82f9ac, 0x235f04af, 0xb5cac065, 0x9ea93439, 0x083cf0f3, 0x65e10df0, 0xf374c93a,
18679 +
            0xbe5af7f6, 0x28cf333c, 0x4512ce3f, 0xd3870af5, 0xdf4eb3a7, 0x49db776d, 0x24068a6e,
18680 +
            0xb2934ea4, 0xffbd7068, 0x6928b4a2, 0x04f549a1, 0x92608d6b, 0x1d663b05, 0x8bf3ffcf,
18681 +
            0xe62e02cc, 0x70bbc606, 0x3d95f8ca, 0xab003c00, 0xc6ddc103, 0x504805c9, 0x5c81bc9b,
18682 +
            0xca147851, 0xa7c98552, 0x315c4198, 0x7c727f54, 0xeae7bb9e, 0x873a469d, 0x11af8257,
18683 +
            0x4f549a1c, 0xd9c15ed6, 0xb41ca3d5, 0x2289671f, 0x6fa759d3, 0xf9329d19, 0x94ef601a,
18684 +
            0x027aa4d0, 0x0eb31d82, 0x9826d948, 0xf5fb244b, 0x636ee081, 0x2e40de4d, 0xb8d51a87,
18685 +
            0xd508e784, 0x439d234e, 0xcc9b9520, 0x5a0e51ea, 0x37d3ace9, 0xa1466823, 0xec6856ef,
18686 +
            0x7afd9225, 0x17206f26, 0x81b5abec, 0x8d7c12be, 0x1be9d674, 0x76342b77, 0xe0a1efbd,
18687 +
            0xad8fd171, 0x3b1a15bb, 0x56c7e8b8, 0xc0522c72,
18688 +
        ],
18689 +
        [
18690 +
            0x00000000, 0x24901faa, 0x49203f54, 0x6db020fe, 0x92407ea8, 0xb6d06102, 0xdb6041fc,
18691 +
            0xfff05e56, 0xf2e34d0d, 0xd67352a7, 0xbbc37259, 0x9f536df3, 0x60a333a5, 0x44332c0f,
18692 +
            0x29830cf1, 0x0d13135b, 0x33a52a47, 0x173535ed, 0x7a851513, 0x5e150ab9, 0xa1e554ef,
18693 +
            0x85754b45, 0xe8c56bbb, 0xcc557411, 0xc146674a, 0xe5d678e0, 0x8866581e, 0xacf647b4,
18694 +
            0x530619e2, 0x77960648, 0x1a2626b6, 0x3eb6391c, 0x674a548e, 0x43da4b24, 0x2e6a6bda,
18695 +
            0x0afa7470, 0xf50a2a26, 0xd19a358c, 0xbc2a1572, 0x98ba0ad8, 0x95a91983, 0xb1390629,
18696 +
            0xdc8926d7, 0xf819397d, 0x07e9672b, 0x23797881, 0x4ec9587f, 0x6a5947d5, 0x54ef7ec9,
18697 +
            0x707f6163, 0x1dcf419d, 0x395f5e37, 0xc6af0061, 0xe23f1fcb, 0x8f8f3f35, 0xab1f209f,
18698 +
            0xa60c33c4, 0x829c2c6e, 0xef2c0c90, 0xcbbc133a, 0x344c4d6c, 0x10dc52c6, 0x7d6c7238,
18699 +
            0x59fc6d92, 0xce94a91c, 0xea04b6b6, 0x87b49648, 0xa32489e2, 0x5cd4d7b4, 0x7844c81e,
18700 +
            0x15f4e8e0, 0x3164f74a, 0x3c77e411, 0x18e7fbbb, 0x7557db45, 0x51c7c4ef, 0xae379ab9,
18701 +
            0x8aa78513, 0xe717a5ed, 0xc387ba47, 0xfd31835b, 0xd9a19cf1, 0xb411bc0f, 0x9081a3a5,
18702 +
            0x6f71fdf3, 0x4be1e259, 0x2651c2a7, 0x02c1dd0d, 0x0fd2ce56, 0x2b42d1fc, 0x46f2f102,
18703 +
            0x6262eea8, 0x9d92b0fe, 0xb902af54, 0xd4b28faa, 0xf0229000, 0xa9defd92, 0x8d4ee238,
18704 +
            0xe0fec2c6, 0xc46edd6c, 0x3b9e833a, 0x1f0e9c90, 0x72bebc6e, 0x562ea3c4, 0x5b3db09f,
18705 +
            0x7fadaf35, 0x121d8fcb, 0x368d9061, 0xc97dce37, 0xededd19d, 0x805df163, 0xa4cdeec9,
18706 +
            0x9a7bd7d5, 0xbeebc87f, 0xd35be881, 0xf7cbf72b, 0x083ba97d, 0x2cabb6d7, 0x411b9629,
18707 +
            0x658b8983, 0x68989ad8, 0x4c088572, 0x21b8a58c, 0x0528ba26, 0xfad8e470, 0xde48fbda,
18708 +
            0xb3f8db24, 0x9768c48e, 0x4b4ae265, 0x6fdafdcf, 0x026add31, 0x26fac29b, 0xd90a9ccd,
18709 +
            0xfd9a8367, 0x902aa399, 0xb4babc33, 0xb9a9af68, 0x9d39b0c2, 0xf089903c, 0xd4198f96,
18710 +
            0x2be9d1c0, 0x0f79ce6a, 0x62c9ee94, 0x4659f13e, 0x78efc822, 0x5c7fd788, 0x31cff776,
18711 +
            0x155fe8dc, 0xeaafb68a, 0xce3fa920, 0xa38f89de, 0x871f9674, 0x8a0c852f, 0xae9c9a85,
18712 +
            0xc32cba7b, 0xe7bca5d1, 0x184cfb87, 0x3cdce42d, 0x516cc4d3, 0x75fcdb79, 0x2c00b6eb,
18713 +
            0x0890a941, 0x652089bf, 0x41b09615, 0xbe40c843, 0x9ad0d7e9, 0xf760f717, 0xd3f0e8bd,
18714 +
            0xdee3fbe6, 0xfa73e44c, 0x97c3c4b2, 0xb353db18, 0x4ca3854e, 0x68339ae4, 0x0583ba1a,
18715 +
            0x2113a5b0, 0x1fa59cac, 0x3b358306, 0x5685a3f8, 0x7215bc52, 0x8de5e204, 0xa975fdae,
18716 +
            0xc4c5dd50, 0xe055c2fa, 0xed46d1a1, 0xc9d6ce0b, 0xa466eef5, 0x80f6f15f, 0x7f06af09,
18717 +
            0x5b96b0a3, 0x3626905d, 0x12b68ff7, 0x85de4b79, 0xa14e54d3, 0xccfe742d, 0xe86e6b87,
18718 +
            0x179e35d1, 0x330e2a7b, 0x5ebe0a85, 0x7a2e152f, 0x773d0674, 0x53ad19de, 0x3e1d3920,
18719 +
            0x1a8d268a, 0xe57d78dc, 0xc1ed6776, 0xac5d4788, 0x88cd5822, 0xb67b613e, 0x92eb7e94,
18720 +
            0xff5b5e6a, 0xdbcb41c0, 0x243b1f96, 0x00ab003c, 0x6d1b20c2, 0x498b3f68, 0x44982c33,
18721 +
            0x60083399, 0x0db81367, 0x29280ccd, 0xd6d8529b, 0xf2484d31, 0x9ff86dcf, 0xbb687265,
18722 +
            0xe2941ff7, 0xc604005d, 0xabb420a3, 0x8f243f09, 0x70d4615f, 0x54447ef5, 0x39f45e0b,
18723 +
            0x1d6441a1, 0x107752fa, 0x34e74d50, 0x59576dae, 0x7dc77204, 0x82372c52, 0xa6a733f8,
18724 +
            0xcb171306, 0xef870cac, 0xd13135b0, 0xf5a12a1a, 0x98110ae4, 0xbc81154e, 0x43714b18,
18725 +
            0x67e154b2, 0x0a51744c, 0x2ec16be6, 0x23d278bd, 0x07426717, 0x6af247e9, 0x4e625843,
18726 +
            0xb1920615, 0x950219bf, 0xf8b23941, 0xdc2226eb,
18727 +
        ],
18728 +
        [
18729 +
            0x00000000, 0x80475843, 0xd6ed00db, 0x56aa5898, 0x7bb9b1eb, 0xfbfee9a8, 0xad54b130,
18730 +
            0x2d13e973, 0xf77363d6, 0x77343b95, 0x219e630d, 0xa1d93b4e, 0x8ccad23d, 0x0c8d8a7e,
18731 +
            0x5a27d2e6, 0xda608aa5, 0x388577f1, 0xb8c22fb2, 0xee68772a, 0x6e2f2f69, 0x433cc61a,
18732 +
            0xc37b9e59, 0x95d1c6c1, 0x15969e82, 0xcff61427, 0x4fb14c64, 0x191b14fc, 0x995c4cbf,
18733 +
            0xb44fa5cc, 0x3408fd8f, 0x62a2a517, 0xe2e5fd54, 0x710aefe2, 0xf14db7a1, 0xa7e7ef39,
18734 +
            0x27a0b77a, 0x0ab35e09, 0x8af4064a, 0xdc5e5ed2, 0x5c190691, 0x86798c34, 0x063ed477,
18735 +
            0x50948cef, 0xd0d3d4ac, 0xfdc03ddf, 0x7d87659c, 0x2b2d3d04, 0xab6a6547, 0x498f9813,
18736 +
            0xc9c8c050, 0x9f6298c8, 0x1f25c08b, 0x323629f8, 0xb27171bb, 0xe4db2923, 0x649c7160,
18737 +
            0xbefcfbc5, 0x3ebba386, 0x6811fb1e, 0xe856a35d, 0xc5454a2e, 0x4502126d, 0x13a84af5,
18738 +
            0x93ef12b6, 0xe215dfc4, 0x62528787, 0x34f8df1f, 0xb4bf875c, 0x99ac6e2f, 0x19eb366c,
18739 +
            0x4f416ef4, 0xcf0636b7, 0x1566bc12, 0x9521e451, 0xc38bbcc9, 0x43cce48a, 0x6edf0df9,
18740 +
            0xee9855ba, 0xb8320d22, 0x38755561, 0xda90a835, 0x5ad7f076, 0x0c7da8ee, 0x8c3af0ad,
18741 +
            0xa12919de, 0x216e419d, 0x77c41905, 0xf7834146, 0x2de3cbe3, 0xada493a0, 0xfb0ecb38,
18742 +
            0x7b49937b, 0x565a7a08, 0xd61d224b, 0x80b77ad3, 0x00f02290, 0x931f3026, 0x13586865,
18743 +
            0x45f230fd, 0xc5b568be, 0xe8a681cd, 0x68e1d98e, 0x3e4b8116, 0xbe0cd955, 0x646c53f0,
18744 +
            0xe42b0bb3, 0xb281532b, 0x32c60b68, 0x1fd5e21b, 0x9f92ba58, 0xc938e2c0, 0x497fba83,
18745 +
            0xab9a47d7, 0x2bdd1f94, 0x7d77470c, 0xfd301f4f, 0xd023f63c, 0x5064ae7f, 0x06cef6e7,
18746 +
            0x8689aea4, 0x5ce92401, 0xdcae7c42, 0x8a0424da, 0x0a437c99, 0x275095ea, 0xa717cda9,
18747 +
            0xf1bd9531, 0x71facd72, 0x12480fd5, 0x920f5796, 0xc4a50f0e, 0x44e2574d, 0x69f1be3e,
18748 +
            0xe9b6e67d, 0xbf1cbee5, 0x3f5be6a6, 0xe53b6c03, 0x657c3440, 0x33d66cd8, 0xb391349b,
18749 +
            0x9e82dde8, 0x1ec585ab, 0x486fdd33, 0xc8288570, 0x2acd7824, 0xaa8a2067, 0xfc2078ff,
18750 +
            0x7c6720bc, 0x5174c9cf, 0xd133918c, 0x8799c914, 0x07de9157, 0xddbe1bf2, 0x5df943b1,
18751 +
            0x0b531b29, 0x8b14436a, 0xa607aa19, 0x2640f25a, 0x70eaaac2, 0xf0adf281, 0x6342e037,
18752 +
            0xe305b874, 0xb5afe0ec, 0x35e8b8af, 0x18fb51dc, 0x98bc099f, 0xce165107, 0x4e510944,
18753 +
            0x943183e1, 0x1476dba2, 0x42dc833a, 0xc29bdb79, 0xef88320a, 0x6fcf6a49, 0x396532d1,
18754 +
            0xb9226a92, 0x5bc797c6, 0xdb80cf85, 0x8d2a971d, 0x0d6dcf5e, 0x207e262d, 0xa0397e6e,
18755 +
            0xf69326f6, 0x76d47eb5, 0xacb4f410, 0x2cf3ac53, 0x7a59f4cb, 0xfa1eac88, 0xd70d45fb,
18756 +
            0x574a1db8, 0x01e04520, 0x81a71d63, 0xf05dd011, 0x701a8852, 0x26b0d0ca, 0xa6f78889,
18757 +
            0x8be461fa, 0x0ba339b9, 0x5d096121, 0xdd4e3962, 0x072eb3c7, 0x8769eb84, 0xd1c3b31c,
18758 +
            0x5184eb5f, 0x7c97022c, 0xfcd05a6f, 0xaa7a02f7, 0x2a3d5ab4, 0xc8d8a7e0, 0x489fffa3,
18759 +
            0x1e35a73b, 0x9e72ff78, 0xb361160b, 0x33264e48, 0x658c16d0, 0xe5cb4e93, 0x3fabc436,
18760 +
            0xbfec9c75, 0xe946c4ed, 0x69019cae, 0x441275dd, 0xc4552d9e, 0x92ff7506, 0x12b82d45,
18761 +
            0x81573ff3, 0x011067b0, 0x57ba3f28, 0xd7fd676b, 0xfaee8e18, 0x7aa9d65b, 0x2c038ec3,
18762 +
            0xac44d680, 0x76245c25, 0xf6630466, 0xa0c95cfe, 0x208e04bd, 0x0d9dedce, 0x8ddab58d,
18763 +
            0xdb70ed15, 0x5b37b556, 0xb9d24802, 0x39951041, 0x6f3f48d9, 0xef78109a, 0xc26bf9e9,
18764 +
            0x422ca1aa, 0x1486f932, 0x94c1a171, 0x4ea12bd4, 0xcee67397, 0x984c2b0f, 0x180b734c,
18765 +
            0x35189a3f, 0xb55fc27c, 0xe3f59ae4, 0x63b2c2a7,
18766 +
        ],
18767 +
        [
18768 +
            0x00000000, 0x18c5564c, 0x318aac98, 0x294ffad4, 0x63155930, 0x7bd00f7c, 0x529ff5a8,
18769 +
            0x4a5aa3e4, 0xc62ab260, 0xdeefe42c, 0xf7a01ef8, 0xef6548b4, 0xa53feb50, 0xbdfabd1c,
18770 +
            0x94b547c8, 0x8c701184, 0x5a36d49d, 0x42f382d1, 0x6bbc7805, 0x73792e49, 0x39238dad,
18771 +
            0x21e6dbe1, 0x08a92135, 0x106c7779, 0x9c1c66fd, 0x84d930b1, 0xad96ca65, 0xb5539c29,
18772 +
            0xff093fcd, 0xe7cc6981, 0xce839355, 0xd646c519, 0xb46da93a, 0xaca8ff76, 0x85e705a2,
18773 +
            0x9d2253ee, 0xd778f00a, 0xcfbda646, 0xe6f25c92, 0xfe370ade, 0x72471b5a, 0x6a824d16,
18774 +
            0x43cdb7c2, 0x5b08e18e, 0x1152426a, 0x09971426, 0x20d8eef2, 0x381db8be, 0xee5b7da7,
18775 +
            0xf69e2beb, 0xdfd1d13f, 0xc7148773, 0x8d4e2497, 0x958b72db, 0xbcc4880f, 0xa401de43,
18776 +
            0x2871cfc7, 0x30b4998b, 0x19fb635f, 0x013e3513, 0x4b6496f7, 0x53a1c0bb, 0x7aee3a6f,
18777 +
            0x622b6c23, 0xbeb8e229, 0xa67db465, 0x8f324eb1, 0x97f718fd, 0xddadbb19, 0xc568ed55,
18778 +
            0xec271781, 0xf4e241cd, 0x78925049, 0x60570605, 0x4918fcd1, 0x51ddaa9d, 0x1b870979,
18779 +
            0x03425f35, 0x2a0da5e1, 0x32c8f3ad, 0xe48e36b4, 0xfc4b60f8, 0xd5049a2c, 0xcdc1cc60,
18780 +
            0x879b6f84, 0x9f5e39c8, 0xb611c31c, 0xaed49550, 0x22a484d4, 0x3a61d298, 0x132e284c,
18781 +
            0x0beb7e00, 0x41b1dde4, 0x59748ba8, 0x703b717c, 0x68fe2730, 0x0ad54b13, 0x12101d5f,
18782 +
            0x3b5fe78b, 0x239ab1c7, 0x69c01223, 0x7105446f, 0x584abebb, 0x408fe8f7, 0xccfff973,
18783 +
            0xd43aaf3f, 0xfd7555eb, 0xe5b003a7, 0xafeaa043, 0xb72ff60f, 0x9e600cdb, 0x86a55a97,
18784 +
            0x50e39f8e, 0x4826c9c2, 0x61693316, 0x79ac655a, 0x33f6c6be, 0x2b3390f2, 0x027c6a26,
18785 +
            0x1ab93c6a, 0x96c92dee, 0x8e0c7ba2, 0xa7438176, 0xbf86d73a, 0xf5dc74de, 0xed192292,
18786 +
            0xc456d846, 0xdc938e0a, 0xab12740f, 0xb3d72243, 0x9a98d897, 0x825d8edb, 0xc8072d3f,
18787 +
            0xd0c27b73, 0xf98d81a7, 0xe148d7eb, 0x6d38c66f, 0x75fd9023, 0x5cb26af7, 0x44773cbb,
18788 +
            0x0e2d9f5f, 0x16e8c913, 0x3fa733c7, 0x2762658b, 0xf124a092, 0xe9e1f6de, 0xc0ae0c0a,
18789 +
            0xd86b5a46, 0x9231f9a2, 0x8af4afee, 0xa3bb553a, 0xbb7e0376, 0x370e12f2, 0x2fcb44be,
18790 +
            0x0684be6a, 0x1e41e826, 0x541b4bc2, 0x4cde1d8e, 0x6591e75a, 0x7d54b116, 0x1f7fdd35,
18791 +
            0x07ba8b79, 0x2ef571ad, 0x363027e1, 0x7c6a8405, 0x64afd249, 0x4de0289d, 0x55257ed1,
18792 +
            0xd9556f55, 0xc1903919, 0xe8dfc3cd, 0xf01a9581, 0xba403665, 0xa2856029, 0x8bca9afd,
18793 +
            0x930fccb1, 0x454909a8, 0x5d8c5fe4, 0x74c3a530, 0x6c06f37c, 0x265c5098, 0x3e9906d4,
18794 +
            0x17d6fc00, 0x0f13aa4c, 0x8363bbc8, 0x9ba6ed84, 0xb2e91750, 0xaa2c411c, 0xe076e2f8,
18795 +
            0xf8b3b4b4, 0xd1fc4e60, 0xc939182c, 0x15aa9626, 0x0d6fc06a, 0x24203abe, 0x3ce56cf2,
18796 +
            0x76bfcf16, 0x6e7a995a, 0x4735638e, 0x5ff035c2, 0xd3802446, 0xcb45720a, 0xe20a88de,
18797 +
            0xfacfde92, 0xb0957d76, 0xa8502b3a, 0x811fd1ee, 0x99da87a2, 0x4f9c42bb, 0x575914f7,
18798 +
            0x7e16ee23, 0x66d3b86f, 0x2c891b8b, 0x344c4dc7, 0x1d03b713, 0x05c6e15f, 0x89b6f0db,
18799 +
            0x9173a697, 0xb83c5c43, 0xa0f90a0f, 0xeaa3a9eb, 0xf266ffa7, 0xdb290573, 0xc3ec533f,
18800 +
            0xa1c73f1c, 0xb9026950, 0x904d9384, 0x8888c5c8, 0xc2d2662c, 0xda173060, 0xf358cab4,
18801 +
            0xeb9d9cf8, 0x67ed8d7c, 0x7f28db30, 0x566721e4, 0x4ea277a8, 0x04f8d44c, 0x1c3d8200,
18802 +
            0x357278d4, 0x2db72e98, 0xfbf1eb81, 0xe334bdcd, 0xca7b4719, 0xd2be1155, 0x98e4b2b1,
18803 +
            0x8021e4fd, 0xa96e1e29, 0xb1ab4865, 0x3ddb59e1, 0x251e0fad, 0x0c51f579, 0x1494a335,
18804 +
            0x5ece00d1, 0x460b569d, 0x6f44ac49, 0x7781fa05,
18805 +
        ],
18806 +
        [
18807 +
            0x00000000, 0x14946d10, 0x2928da20, 0x3dbcb730, 0x5251b440, 0x46c5d950, 0x7b796e60,
18808 +
            0x6fed0370, 0xa4a36880, 0xb0370590, 0x8d8bb2a0, 0x991fdfb0, 0xf6f2dcc0, 0xe266b1d0,
18809 +
            0xdfda06e0, 0xcb4e6bf0, 0x9f25615d, 0x8bb10c4d, 0xb60dbb7d, 0xa299d66d, 0xcd74d51d,
18810 +
            0xd9e0b80d, 0xe45c0f3d, 0xf0c8622d, 0x3b8609dd, 0x2f1264cd, 0x12aed3fd, 0x063abeed,
18811 +
            0x69d7bd9d, 0x7d43d08d, 0x40ff67bd, 0x546b0aad, 0xe82972e7, 0xfcbd1ff7, 0xc101a8c7,
18812 +
            0xd595c5d7, 0xba78c6a7, 0xaeecabb7, 0x93501c87, 0x87c47197, 0x4c8a1a67, 0x581e7777,
18813 +
            0x65a2c047, 0x7136ad57, 0x1edbae27, 0x0a4fc337, 0x37f37407, 0x23671917, 0x770c13ba,
18814 +
            0x63987eaa, 0x5e24c99a, 0x4ab0a48a, 0x255da7fa, 0x31c9caea, 0x0c757dda, 0x18e110ca,
18815 +
            0xd3af7b3a, 0xc73b162a, 0xfa87a11a, 0xee13cc0a, 0x81fecf7a, 0x956aa26a, 0xa8d6155a,
18816 +
            0xbc42784a, 0x06315593, 0x12a53883, 0x2f198fb3, 0x3b8de2a3, 0x5460e1d3, 0x40f48cc3,
18817 +
            0x7d483bf3, 0x69dc56e3, 0xa2923d13, 0xb6065003, 0x8bbae733, 0x9f2e8a23, 0xf0c38953,
18818 +
            0xe457e443, 0xd9eb5373, 0xcd7f3e63, 0x991434ce, 0x8d8059de, 0xb03ceeee, 0xa4a883fe,
18819 +
            0xcb45808e, 0xdfd1ed9e, 0xe26d5aae, 0xf6f937be, 0x3db75c4e, 0x2923315e, 0x149f866e,
18820 +
            0x000beb7e, 0x6fe6e80e, 0x7b72851e, 0x46ce322e, 0x525a5f3e, 0xee182774, 0xfa8c4a64,
18821 +
            0xc730fd54, 0xd3a49044, 0xbc499334, 0xa8ddfe24, 0x95614914, 0x81f52404, 0x4abb4ff4,
18822 +
            0x5e2f22e4, 0x639395d4, 0x7707f8c4, 0x18eafbb4, 0x0c7e96a4, 0x31c22194, 0x25564c84,
18823 +
            0x713d4629, 0x65a92b39, 0x58159c09, 0x4c81f119, 0x236cf269, 0x37f89f79, 0x0a442849,
18824 +
            0x1ed04559, 0xd59e2ea9, 0xc10a43b9, 0xfcb6f489, 0xe8229999, 0x87cf9ae9, 0x935bf7f9,
18825 +
            0xaee740c9, 0xba732dd9, 0x0c62ab26, 0x18f6c636, 0x254a7106, 0x31de1c16, 0x5e331f66,
18826 +
            0x4aa77276, 0x771bc546, 0x638fa856, 0xa8c1c3a6, 0xbc55aeb6, 0x81e91986, 0x957d7496,
18827 +
            0xfa9077e6, 0xee041af6, 0xd3b8adc6, 0xc72cc0d6, 0x9347ca7b, 0x87d3a76b, 0xba6f105b,
18828 +
            0xaefb7d4b, 0xc1167e3b, 0xd582132b, 0xe83ea41b, 0xfcaac90b, 0x37e4a2fb, 0x2370cfeb,
18829 +
            0x1ecc78db, 0x0a5815cb, 0x65b516bb, 0x71217bab, 0x4c9dcc9b, 0x5809a18b, 0xe44bd9c1,
18830 +
            0xf0dfb4d1, 0xcd6303e1, 0xd9f76ef1, 0xb61a6d81, 0xa28e0091, 0x9f32b7a1, 0x8ba6dab1,
18831 +
            0x40e8b141, 0x547cdc51, 0x69c06b61, 0x7d540671, 0x12b90501, 0x062d6811, 0x3b91df21,
18832 +
            0x2f05b231, 0x7b6eb89c, 0x6ffad58c, 0x524662bc, 0x46d20fac, 0x293f0cdc, 0x3dab61cc,
18833 +
            0x0017d6fc, 0x1483bbec, 0xdfcdd01c, 0xcb59bd0c, 0xf6e50a3c, 0xe271672c, 0x8d9c645c,
18834 +
            0x9908094c, 0xa4b4be7c, 0xb020d36c, 0x0a53feb5, 0x1ec793a5, 0x237b2495, 0x37ef4985,
18835 +
            0x58024af5, 0x4c9627e5, 0x712a90d5, 0x65befdc5, 0xaef09635, 0xba64fb25, 0x87d84c15,
18836 +
            0x934c2105, 0xfca12275, 0xe8354f65, 0xd589f855, 0xc11d9545, 0x95769fe8, 0x81e2f2f8,
18837 +
            0xbc5e45c8, 0xa8ca28d8, 0xc7272ba8, 0xd3b346b8, 0xee0ff188, 0xfa9b9c98, 0x31d5f768,
18838 +
            0x25419a78, 0x18fd2d48, 0x0c694058, 0x63844328, 0x77102e38, 0x4aac9908, 0x5e38f418,
18839 +
            0xe27a8c52, 0xf6eee142, 0xcb525672, 0xdfc63b62, 0xb02b3812, 0xa4bf5502, 0x9903e232,
18840 +
            0x8d978f22, 0x46d9e4d2, 0x524d89c2, 0x6ff13ef2, 0x7b6553e2, 0x14885092, 0x001c3d82,
18841 +
            0x3da08ab2, 0x2934e7a2, 0x7d5fed0f, 0x69cb801f, 0x5477372f, 0x40e35a3f, 0x2f0e594f,
18842 +
            0x3b9a345f, 0x0626836f, 0x12b2ee7f, 0xd9fc858f, 0xcd68e89f, 0xf0d45faf, 0xe44032bf,
18843 +
            0x8bad31cf, 0x9f395cdf, 0xa285ebef, 0xb61186ff,
18844 +
        ],
18845 +
        [
18846 +
            0x00000000, 0x83db9b51, 0xd1d486ff, 0x520f1dae, 0x75cabda3, 0xf61126f2, 0xa41e3b5c,
18847 +
            0x27c5a00d, 0xeb957b46, 0x684ee017, 0x3a41fdb9, 0xb99a66e8, 0x9e5fc6e5, 0x1d845db4,
18848 +
            0x4f8b401a, 0xcc50db4b, 0x014946d1, 0x8292dd80, 0xd09dc02e, 0x53465b7f, 0x7483fb72,
18849 +
            0xf7586023, 0xa5577d8d, 0x268ce6dc, 0xeadc3d97, 0x6907a6c6, 0x3b08bb68, 0xb8d32039,
18850 +
            0x9f168034, 0x1ccd1b65, 0x4ec206cb, 0xcd199d9a, 0x02928da2, 0x814916f3, 0xd3460b5d,
18851 +
            0x509d900c, 0x77583001, 0xf483ab50, 0xa68cb6fe, 0x25572daf, 0xe907f6e4, 0x6adc6db5,
18852 +
            0x38d3701b, 0xbb08eb4a, 0x9ccd4b47, 0x1f16d016, 0x4d19cdb8, 0xcec256e9, 0x03dbcb73,
18853 +
            0x80005022, 0xd20f4d8c, 0x51d4d6dd, 0x761176d0, 0xf5caed81, 0xa7c5f02f, 0x241e6b7e,
18854 +
            0xe84eb035, 0x6b952b64, 0x399a36ca, 0xba41ad9b, 0x9d840d96, 0x1e5f96c7, 0x4c508b69,
18855 +
            0xcf8b1038, 0x05251b44, 0x86fe8015, 0xd4f19dbb, 0x572a06ea, 0x70efa6e7, 0xf3343db6,
18856 +
            0xa13b2018, 0x22e0bb49, 0xeeb06002, 0x6d6bfb53, 0x3f64e6fd, 0xbcbf7dac, 0x9b7adda1,
18857 +
            0x18a146f0, 0x4aae5b5e, 0xc975c00f, 0x046c5d95, 0x87b7c6c4, 0xd5b8db6a, 0x5663403b,
18858 +
            0x71a6e036, 0xf27d7b67, 0xa07266c9, 0x23a9fd98, 0xeff926d3, 0x6c22bd82, 0x3e2da02c,
18859 +
            0xbdf63b7d, 0x9a339b70, 0x19e80021, 0x4be71d8f, 0xc83c86de, 0x07b796e6, 0x846c0db7,
18860 +
            0xd6631019, 0x55b88b48, 0x727d2b45, 0xf1a6b014, 0xa3a9adba, 0x207236eb, 0xec22eda0,
18861 +
            0x6ff976f1, 0x3df66b5f, 0xbe2df00e, 0x99e85003, 0x1a33cb52, 0x483cd6fc, 0xcbe74dad,
18862 +
            0x06fed037, 0x85254b66, 0xd72a56c8, 0x54f1cd99, 0x73346d94, 0xf0eff6c5, 0xa2e0eb6b,
18863 +
            0x213b703a, 0xed6bab71, 0x6eb03020, 0x3cbf2d8e, 0xbf64b6df, 0x98a116d2, 0x1b7a8d83,
18864 +
            0x4975902d, 0xcaae0b7c, 0x0a4a3688, 0x8991add9, 0xdb9eb077, 0x58452b26, 0x7f808b2b,
18865 +
            0xfc5b107a, 0xae540dd4, 0x2d8f9685, 0xe1df4dce, 0x6204d69f, 0x300bcb31, 0xb3d05060,
18866 +
            0x9415f06d, 0x17ce6b3c, 0x45c17692, 0xc61aedc3, 0x0b037059, 0x88d8eb08, 0xdad7f6a6,
18867 +
            0x590c6df7, 0x7ec9cdfa, 0xfd1256ab, 0xaf1d4b05, 0x2cc6d054, 0xe0960b1f, 0x634d904e,
18868 +
            0x31428de0, 0xb29916b1, 0x955cb6bc, 0x16872ded, 0x44883043, 0xc753ab12, 0x08d8bb2a,
18869 +
            0x8b03207b, 0xd90c3dd5, 0x5ad7a684, 0x7d120689, 0xfec99dd8, 0xacc68076, 0x2f1d1b27,
18870 +
            0xe34dc06c, 0x60965b3d, 0x32994693, 0xb142ddc2, 0x96877dcf, 0x155ce69e, 0x4753fb30,
18871 +
            0xc4886061, 0x0991fdfb, 0x8a4a66aa, 0xd8457b04, 0x5b9ee055, 0x7c5b4058, 0xff80db09,
18872 +
            0xad8fc6a7, 0x2e545df6, 0xe20486bd, 0x61df1dec, 0x33d00042, 0xb00b9b13, 0x97ce3b1e,
18873 +
            0x1415a04f, 0x461abde1, 0xc5c126b0, 0x0f6f2dcc, 0x8cb4b69d, 0xdebbab33, 0x5d603062,
18874 +
            0x7aa5906f, 0xf97e0b3e, 0xab711690, 0x28aa8dc1, 0xe4fa568a, 0x6721cddb, 0x352ed075,
18875 +
            0xb6f54b24, 0x9130eb29, 0x12eb7078, 0x40e46dd6, 0xc33ff687, 0x0e266b1d, 0x8dfdf04c,
18876 +
            0xdff2ede2, 0x5c2976b3, 0x7becd6be, 0xf8374def, 0xaa385041, 0x29e3cb10, 0xe5b3105b,
18877 +
            0x66688b0a, 0x346796a4, 0xb7bc0df5, 0x9079adf8, 0x13a236a9, 0x41ad2b07, 0xc276b056,
18878 +
            0x0dfda06e, 0x8e263b3f, 0xdc292691, 0x5ff2bdc0, 0x78371dcd, 0xfbec869c, 0xa9e39b32,
18879 +
            0x2a380063, 0xe668db28, 0x65b34079, 0x37bc5dd7, 0xb467c686, 0x93a2668b, 0x1079fdda,
18880 +
            0x4276e074, 0xc1ad7b25, 0x0cb4e6bf, 0x8f6f7dee, 0xdd606040, 0x5ebbfb11, 0x797e5b1c,
18881 +
            0xfaa5c04d, 0xa8aadde3, 0x2b7146b2, 0xe7219df9, 0x64fa06a8, 0x36f51b06, 0xb52e8057,
18882 +
            0x92eb205a, 0x1130bb0b, 0x433fa6a5, 0xc0e43df4,
18883 +
        ],
18884 +
        [
18885 +
            0x00000000, 0x6041fc7a, 0xc083f8f4, 0xa0c2048e, 0x576441b5, 0x3725bdcf, 0x97e7b941,
18886 +
            0xf7a6453b, 0xaec8836a, 0xce897f10, 0x6e4b7b9e, 0x0e0a87e4, 0xf9acc2df, 0x99ed3ea5,
18887 +
            0x392f3a2b, 0x596ec651, 0x8bf2b689, 0xebb34af3, 0x4b714e7d, 0x2b30b207, 0xdc96f73c,
18888 +
            0xbcd70b46, 0x1c150fc8, 0x7c54f3b2, 0x253a35e3, 0x457bc999, 0xe5b9cd17, 0x85f8316d,
18889 +
            0x725e7456, 0x121f882c, 0xb2dd8ca2, 0xd29c70d8, 0xc186dd4f, 0xa1c72135, 0x010525bb,
18890 +
            0x6144d9c1, 0x96e29cfa, 0xf6a36080, 0x5661640e, 0x36209874, 0x6f4e5e25, 0x0f0fa25f,
18891 +
            0xafcda6d1, 0xcf8c5aab, 0x382a1f90, 0x586be3ea, 0xf8a9e764, 0x98e81b1e, 0x4a746bc6,
18892 +
            0x2a3597bc, 0x8af79332, 0xeab66f48, 0x1d102a73, 0x7d51d609, 0xdd93d287, 0xbdd22efd,
18893 +
            0xe4bce8ac, 0x84fd14d6, 0x243f1058, 0x447eec22, 0xb3d8a919, 0xd3995563, 0x735b51ed,
18894 +
            0x131aad97, 0x556e0ac3, 0x352ff6b9, 0x95edf237, 0xf5ac0e4d, 0x020a4b76, 0x624bb70c,
18895 +
            0xc289b382, 0xa2c84ff8, 0xfba689a9, 0x9be775d3, 0x3b25715d, 0x5b648d27, 0xacc2c81c,
18896 +
            0xcc833466, 0x6c4130e8, 0x0c00cc92, 0xde9cbc4a, 0xbedd4030, 0x1e1f44be, 0x7e5eb8c4,
18897 +
            0x89f8fdff, 0xe9b90185, 0x497b050b, 0x293af971, 0x70543f20, 0x1015c35a, 0xb0d7c7d4,
18898 +
            0xd0963bae, 0x27307e95, 0x477182ef, 0xe7b38661, 0x87f27a1b, 0x94e8d78c, 0xf4a92bf6,
18899 +
            0x546b2f78, 0x342ad302, 0xc38c9639, 0xa3cd6a43, 0x030f6ecd, 0x634e92b7, 0x3a2054e6,
18900 +
            0x5a61a89c, 0xfaa3ac12, 0x9ae25068, 0x6d441553, 0x0d05e929, 0xadc7eda7, 0xcd8611dd,
18901 +
            0x1f1a6105, 0x7f5b9d7f, 0xdf9999f1, 0xbfd8658b, 0x487e20b0, 0x283fdcca, 0x88fdd844,
18902 +
            0xe8bc243e, 0xb1d2e26f, 0xd1931e15, 0x71511a9b, 0x1110e6e1, 0xe6b6a3da, 0x86f75fa0,
18903 +
            0x26355b2e, 0x4674a754, 0xaadc1586, 0xca9de9fc, 0x6a5fed72, 0x0a1e1108, 0xfdb85433,
18904 +
            0x9df9a849, 0x3d3bacc7, 0x5d7a50bd, 0x041496ec, 0x64556a96, 0xc4976e18, 0xa4d69262,
18905 +
            0x5370d759, 0x33312b23, 0x93f32fad, 0xf3b2d3d7, 0x212ea30f, 0x416f5f75, 0xe1ad5bfb,
18906 +
            0x81eca781, 0x764ae2ba, 0x160b1ec0, 0xb6c91a4e, 0xd688e634, 0x8fe62065, 0xefa7dc1f,
18907 +
            0x4f65d891, 0x2f2424eb, 0xd88261d0, 0xb8c39daa, 0x18019924, 0x7840655e, 0x6b5ac8c9,
18908 +
            0x0b1b34b3, 0xabd9303d, 0xcb98cc47, 0x3c3e897c, 0x5c7f7506, 0xfcbd7188, 0x9cfc8df2,
18909 +
            0xc5924ba3, 0xa5d3b7d9, 0x0511b357, 0x65504f2d, 0x92f60a16, 0xf2b7f66c, 0x5275f2e2,
18910 +
            0x32340e98, 0xe0a87e40, 0x80e9823a, 0x202b86b4, 0x406a7ace, 0xb7cc3ff5, 0xd78dc38f,
18911 +
            0x774fc701, 0x170e3b7b, 0x4e60fd2a, 0x2e210150, 0x8ee305de, 0xeea2f9a4, 0x1904bc9f,
18912 +
            0x794540e5, 0xd987446b, 0xb9c6b811, 0xffb21f45, 0x9ff3e33f, 0x3f31e7b1, 0x5f701bcb,
18913 +
            0xa8d65ef0, 0xc897a28a, 0x6855a604, 0x08145a7e, 0x517a9c2f, 0x313b6055, 0x91f964db,
18914 +
            0xf1b898a1, 0x061edd9a, 0x665f21e0, 0xc69d256e, 0xa6dcd914, 0x7440a9cc, 0x140155b6,
18915 +
            0xb4c35138, 0xd482ad42, 0x2324e879, 0x43651403, 0xe3a7108d, 0x83e6ecf7, 0xda882aa6,
18916 +
            0xbac9d6dc, 0x1a0bd252, 0x7a4a2e28, 0x8dec6b13, 0xedad9769, 0x4d6f93e7, 0x2d2e6f9d,
18917 +
            0x3e34c20a, 0x5e753e70, 0xfeb73afe, 0x9ef6c684, 0x695083bf, 0x09117fc5, 0xa9d37b4b,
18918 +
            0xc9928731, 0x90fc4160, 0xf0bdbd1a, 0x507fb994, 0x303e45ee, 0xc79800d5, 0xa7d9fcaf,
18919 +
            0x071bf821, 0x675a045b, 0xb5c67483, 0xd58788f9, 0x75458c77, 0x1504700d, 0xe2a23536,
18920 +
            0x82e3c94c, 0x2221cdc2, 0x426031b8, 0x1b0ef7e9, 0x7b4f0b93, 0xdb8d0f1d, 0xbbccf367,
18921 +
            0x4c6ab65c, 0x2c2b4a26, 0x8ce94ea8, 0xeca8b2d2,
18922 +
        ],
18923 +
        [
18924 +
            0x00000000, 0x9d65b2a5, 0xeca8d517, 0x71cd67b2, 0x0f321a73, 0x9257a8d6, 0xe39acf64,
18925 +
            0x7eff7dc1, 0x1e6434e6, 0x83018643, 0xf2cce1f1, 0x6fa95354, 0x11562e95, 0x8c339c30,
18926 +
            0xfdfefb82, 0x609b4927, 0x3cc869cc, 0xa1addb69, 0xd060bcdb, 0x4d050e7e, 0x33fa73bf,
18927 +
            0xae9fc11a, 0xdf52a6a8, 0x4237140d, 0x22ac5d2a, 0xbfc9ef8f, 0xce04883d, 0x53613a98,
18928 +
            0x2d9e4759, 0xb0fbf5fc, 0xc136924e, 0x5c5320eb, 0x7990d398, 0xe4f5613d, 0x9538068f,
18929 +
            0x085db42a, 0x76a2c9eb, 0xebc77b4e, 0x9a0a1cfc, 0x076fae59, 0x67f4e77e, 0xfa9155db,
18930 +
            0x8b5c3269, 0x163980cc, 0x68c6fd0d, 0xf5a34fa8, 0x846e281a, 0x190b9abf, 0x4558ba54,
18931 +
            0xd83d08f1, 0xa9f06f43, 0x3495dde6, 0x4a6aa027, 0xd70f1282, 0xa6c27530, 0x3ba7c795,
18932 +
            0x5b3c8eb2, 0xc6593c17, 0xb7945ba5, 0x2af1e900, 0x540e94c1, 0xc96b2664, 0xb8a641d6,
18933 +
            0x25c3f373, 0xf321a730, 0x6e441595, 0x1f897227, 0x82ecc082, 0xfc13bd43, 0x61760fe6,
18934 +
            0x10bb6854, 0x8ddedaf1, 0xed4593d6, 0x70202173, 0x01ed46c1, 0x9c88f464, 0xe27789a5,
18935 +
            0x7f123b00, 0x0edf5cb2, 0x93baee17, 0xcfe9cefc, 0x528c7c59, 0x23411beb, 0xbe24a94e,
18936 +
            0xc0dbd48f, 0x5dbe662a, 0x2c730198, 0xb116b33d, 0xd18dfa1a, 0x4ce848bf, 0x3d252f0d,
18937 +
            0xa0409da8, 0xdebfe069, 0x43da52cc, 0x3217357e, 0xaf7287db, 0x8ab174a8, 0x17d4c60d,
18938 +
            0x6619a1bf, 0xfb7c131a, 0x85836edb, 0x18e6dc7e, 0x692bbbcc, 0xf44e0969, 0x94d5404e,
18939 +
            0x09b0f2eb, 0x787d9559, 0xe51827fc, 0x9be75a3d, 0x0682e898, 0x774f8f2a, 0xea2a3d8f,
18940 +
            0xb6791d64, 0x2b1cafc1, 0x5ad1c873, 0xc7b47ad6, 0xb94b0717, 0x242eb5b2, 0x55e3d200,
18941 +
            0xc88660a5, 0xa81d2982, 0x35789b27, 0x44b5fc95, 0xd9d04e30, 0xa72f33f1, 0x3a4a8154,
18942 +
            0x4b87e6e6, 0xd6e25443, 0x3020fe3d, 0xad454c98, 0xdc882b2a, 0x41ed998f, 0x3f12e44e,
18943 +
            0xa27756eb, 0xd3ba3159, 0x4edf83fc, 0x2e44cadb, 0xb321787e, 0xc2ec1fcc, 0x5f89ad69,
18944 +
            0x2176d0a8, 0xbc13620d, 0xcdde05bf, 0x50bbb71a, 0x0ce897f1, 0x918d2554, 0xe04042e6,
18945 +
            0x7d25f043, 0x03da8d82, 0x9ebf3f27, 0xef725895, 0x7217ea30, 0x128ca317, 0x8fe911b2,
18946 +
            0xfe247600, 0x6341c4a5, 0x1dbeb964, 0x80db0bc1, 0xf1166c73, 0x6c73ded6, 0x49b02da5,
18947 +
            0xd4d59f00, 0xa518f8b2, 0x387d4a17, 0x468237d6, 0xdbe78573, 0xaa2ae2c1, 0x374f5064,
18948 +
            0x57d41943, 0xcab1abe6, 0xbb7ccc54, 0x26197ef1, 0x58e60330, 0xc583b195, 0xb44ed627,
18949 +
            0x292b6482, 0x75784469, 0xe81df6cc, 0x99d0917e, 0x04b523db, 0x7a4a5e1a, 0xe72fecbf,
18950 +
            0x96e28b0d, 0x0b8739a8, 0x6b1c708f, 0xf679c22a, 0x87b4a598, 0x1ad1173d, 0x642e6afc,
18951 +
            0xf94bd859, 0x8886bfeb, 0x15e30d4e, 0xc301590d, 0x5e64eba8, 0x2fa98c1a, 0xb2cc3ebf,
18952 +
            0xcc33437e, 0x5156f1db, 0x209b9669, 0xbdfe24cc, 0xdd656deb, 0x4000df4e, 0x31cdb8fc,
18953 +
            0xaca80a59, 0xd2577798, 0x4f32c53d, 0x3effa28f, 0xa39a102a, 0xffc930c1, 0x62ac8264,
18954 +
            0x1361e5d6, 0x8e045773, 0xf0fb2ab2, 0x6d9e9817, 0x1c53ffa5, 0x81364d00, 0xe1ad0427,
18955 +
            0x7cc8b682, 0x0d05d130, 0x90606395, 0xee9f1e54, 0x73faacf1, 0x0237cb43, 0x9f5279e6,
18956 +
            0xba918a95, 0x27f43830, 0x56395f82, 0xcb5ced27, 0xb5a390e6, 0x28c62243, 0x590b45f1,
18957 +
            0xc46ef754, 0xa4f5be73, 0x39900cd6, 0x485d6b64, 0xd538d9c1, 0xabc7a400, 0x36a216a5,
18958 +
            0x476f7117, 0xda0ac3b2, 0x8659e359, 0x1b3c51fc, 0x6af1364e, 0xf79484eb, 0x896bf92a,
18959 +
            0x140e4b8f, 0x65c32c3d, 0xf8a69e98, 0x983dd7bf, 0x0558651a, 0x749502a8, 0xe9f0b00d,
18960 +
            0x970fcdcc, 0x0a6a7f69, 0x7ba718db, 0xe6c2aa7e,
18961 +
        ],
18962 +
        [
18963 +
            0x00000000, 0x8c3714bc, 0xce0d9925, 0x423a8d99, 0x4a788217, 0xc64f96ab, 0x84751b32,
18964 +
            0x08420f8e, 0x94f1042e, 0x18c61092, 0x5afc9d0b, 0xd6cb89b7, 0xde898639, 0x52be9285,
18965 +
            0x10841f1c, 0x9cb30ba0, 0xff81b801, 0x73b6acbd, 0x318c2124, 0xbdbb3598, 0xb5f93a16,
18966 +
            0x39ce2eaa, 0x7bf4a333, 0xf7c3b78f, 0x6b70bc2f, 0xe747a893, 0xa57d250a, 0x294a31b6,
18967 +
            0x21083e38, 0xad3f2a84, 0xef05a71d, 0x6332b3a1, 0x2960c05f, 0xa557d4e3, 0xe76d597a,
18968 +
            0x6b5a4dc6, 0x63184248, 0xef2f56f4, 0xad15db6d, 0x2122cfd1, 0xbd91c471, 0x31a6d0cd,
18969 +
            0x739c5d54, 0xffab49e8, 0xf7e94666, 0x7bde52da, 0x39e4df43, 0xb5d3cbff, 0xd6e1785e,
18970 +
            0x5ad66ce2, 0x18ece17b, 0x94dbf5c7, 0x9c99fa49, 0x10aeeef5, 0x5294636c, 0xdea377d0,
18971 +
            0x42107c70, 0xce2768cc, 0x8c1de555, 0x002af1e9, 0x0868fe67, 0x845feadb, 0xc6656742,
18972 +
            0x4a5273fe, 0x52c180be, 0xdef69402, 0x9ccc199b, 0x10fb0d27, 0x18b902a9, 0x948e1615,
18973 +
            0xd6b49b8c, 0x5a838f30, 0xc6308490, 0x4a07902c, 0x083d1db5, 0x840a0909, 0x8c480687,
18974 +
            0x007f123b, 0x42459fa2, 0xce728b1e, 0xad4038bf, 0x21772c03, 0x634da19a, 0xef7ab526,
18975 +
            0xe738baa8, 0x6b0fae14, 0x2935238d, 0xa5023731, 0x39b13c91, 0xb586282d, 0xf7bca5b4,
18976 +
            0x7b8bb108, 0x73c9be86, 0xfffeaa3a, 0xbdc427a3, 0x31f3331f, 0x7ba140e1, 0xf796545d,
18977 +
            0xb5acd9c4, 0x399bcd78, 0x31d9c2f6, 0xbdeed64a, 0xffd45bd3, 0x73e34f6f, 0xef5044cf,
18978 +
            0x63675073, 0x215dddea, 0xad6ac956, 0xa528c6d8, 0x291fd264, 0x6b255ffd, 0xe7124b41,
18979 +
            0x8420f8e0, 0x0817ec5c, 0x4a2d61c5, 0xc61a7579, 0xce587af7, 0x426f6e4b, 0x0055e3d2,
18980 +
            0x8c62f76e, 0x10d1fcce, 0x9ce6e872, 0xdedc65eb, 0x52eb7157, 0x5aa97ed9, 0xd69e6a65,
18981 +
            0x94a4e7fc, 0x1893f340, 0xa583017c, 0x29b415c0, 0x6b8e9859, 0xe7b98ce5, 0xeffb836b,
18982 +
            0x63cc97d7, 0x21f61a4e, 0xadc10ef2, 0x31720552, 0xbd4511ee, 0xff7f9c77, 0x734888cb,
18983 +
            0x7b0a8745, 0xf73d93f9, 0xb5071e60, 0x39300adc, 0x5a02b97d, 0xd635adc1, 0x940f2058,
18984 +
            0x183834e4, 0x107a3b6a, 0x9c4d2fd6, 0xde77a24f, 0x5240b6f3, 0xcef3bd53, 0x42c4a9ef,
18985 +
            0x00fe2476, 0x8cc930ca, 0x848b3f44, 0x08bc2bf8, 0x4a86a661, 0xc6b1b2dd, 0x8ce3c123,
18986 +
            0x00d4d59f, 0x42ee5806, 0xced94cba, 0xc69b4334, 0x4aac5788, 0x0896da11, 0x84a1cead,
18987 +
            0x1812c50d, 0x9425d1b1, 0xd61f5c28, 0x5a284894, 0x526a471a, 0xde5d53a6, 0x9c67de3f,
18988 +
            0x1050ca83, 0x73627922, 0xff556d9e, 0xbd6fe007, 0x3158f4bb, 0x391afb35, 0xb52def89,
18989 +
            0xf7176210, 0x7b2076ac, 0xe7937d0c, 0x6ba469b0, 0x299ee429, 0xa5a9f095, 0xadebff1b,
18990 +
            0x21dceba7, 0x63e6663e, 0xefd17282, 0xf74281c2, 0x7b75957e, 0x394f18e7, 0xb5780c5b,
18991 +
            0xbd3a03d5, 0x310d1769, 0x73379af0, 0xff008e4c, 0x63b385ec, 0xef849150, 0xadbe1cc9,
18992 +
            0x21890875, 0x29cb07fb, 0xa5fc1347, 0xe7c69ede, 0x6bf18a62, 0x08c339c3, 0x84f42d7f,
18993 +
            0xc6cea0e6, 0x4af9b45a, 0x42bbbbd4, 0xce8caf68, 0x8cb622f1, 0x0081364d, 0x9c323ded,
18994 +
            0x10052951, 0x523fa4c8, 0xde08b074, 0xd64abffa, 0x5a7dab46, 0x184726df, 0x94703263,
18995 +
            0xde22419d, 0x52155521, 0x102fd8b8, 0x9c18cc04, 0x945ac38a, 0x186dd736, 0x5a575aaf,
18996 +
            0xd6604e13, 0x4ad345b3, 0xc6e4510f, 0x84dedc96, 0x08e9c82a, 0x00abc7a4, 0x8c9cd318,
18997 +
            0xcea65e81, 0x42914a3d, 0x21a3f99c, 0xad94ed20, 0xefae60b9, 0x63997405, 0x6bdb7b8b,
18998 +
            0xe7ec6f37, 0xa5d6e2ae, 0x29e1f612, 0xb552fdb2, 0x3965e90e, 0x7b5f6497, 0xf768702b,
18999 +
            0xff2a7fa5, 0x731d6b19, 0x3127e680, 0xbd10f23c,
19000 +
        ],
19001 +
        [
19002 +
            0x00000000, 0xd89b0a72, 0x6755a4b9, 0xbfceaecb, 0xceab4972, 0x16304300, 0xa9feedcb,
19003 +
            0x7165e7b9, 0x4b3522b9, 0x93ae28cb, 0x2c608600, 0xf4fb8c72, 0x859e6bcb, 0x5d0561b9,
19004 +
            0xe2cbcf72, 0x3a50c500, 0x966a4572, 0x4ef14f00, 0xf13fe1cb, 0x29a4ebb9, 0x58c10c00,
19005 +
            0x805a0672, 0x3f94a8b9, 0xe70fa2cb, 0xdd5f67cb, 0x05c46db9, 0xba0ac372, 0x6291c900,
19006 +
            0x13f42eb9, 0xcb6f24cb, 0x74a18a00, 0xac3a8072, 0xfab73ab9, 0x222c30cb, 0x9de29e00,
19007 +
            0x45799472, 0x341c73cb, 0xec8779b9, 0x5349d772, 0x8bd2dd00, 0xb1821800, 0x69191272,
19008 +
            0xd6d7bcb9, 0x0e4cb6cb, 0x7f295172, 0xa7b25b00, 0x187cf5cb, 0xc0e7ffb9, 0x6cdd7fcb,
19009 +
            0xb44675b9, 0x0b88db72, 0xd313d100, 0xa27636b9, 0x7aed3ccb, 0xc5239200, 0x1db89872,
19010 +
            0x27e85d72, 0xff735700, 0x40bdf9cb, 0x9826f3b9, 0xe9431400, 0x31d81e72, 0x8e16b0b9,
19011 +
            0x568dbacb, 0x230dc52f, 0xfb96cf5d, 0x44586196, 0x9cc36be4, 0xeda68c5d, 0x353d862f,
19012 +
            0x8af328e4, 0x52682296, 0x6838e796, 0xb0a3ede4, 0x0f6d432f, 0xd7f6495d, 0xa693aee4,
19013 +
            0x7e08a496, 0xc1c60a5d, 0x195d002f, 0xb567805d, 0x6dfc8a2f, 0xd23224e4, 0x0aa92e96,
19014 +
            0x7bccc92f, 0xa357c35d, 0x1c996d96, 0xc40267e4, 0xfe52a2e4, 0x26c9a896, 0x9907065d,
19015 +
            0x419c0c2f, 0x30f9eb96, 0xe862e1e4, 0x57ac4f2f, 0x8f37455d, 0xd9baff96, 0x0121f5e4,
19016 +
            0xbeef5b2f, 0x6674515d, 0x1711b6e4, 0xcf8abc96, 0x7044125d, 0xa8df182f, 0x928fdd2f,
19017 +
            0x4a14d75d, 0xf5da7996, 0x2d4173e4, 0x5c24945d, 0x84bf9e2f, 0x3b7130e4, 0xe3ea3a96,
19018 +
            0x4fd0bae4, 0x974bb096, 0x28851e5d, 0xf01e142f, 0x817bf396, 0x59e0f9e4, 0xe62e572f,
19019 +
            0x3eb55d5d, 0x04e5985d, 0xdc7e922f, 0x63b03ce4, 0xbb2b3696, 0xca4ed12f, 0x12d5db5d,
19020 +
            0xad1b7596, 0x75807fe4, 0x461b8a5e, 0x9e80802c, 0x214e2ee7, 0xf9d52495, 0x88b0c32c,
19021 +
            0x502bc95e, 0xefe56795, 0x377e6de7, 0x0d2ea8e7, 0xd5b5a295, 0x6a7b0c5e, 0xb2e0062c,
19022 +
            0xc385e195, 0x1b1eebe7, 0xa4d0452c, 0x7c4b4f5e, 0xd071cf2c, 0x08eac55e, 0xb7246b95,
19023 +
            0x6fbf61e7, 0x1eda865e, 0xc6418c2c, 0x798f22e7, 0xa1142895, 0x9b44ed95, 0x43dfe7e7,
19024 +
            0xfc11492c, 0x248a435e, 0x55efa4e7, 0x8d74ae95, 0x32ba005e, 0xea210a2c, 0xbcacb0e7,
19025 +
            0x6437ba95, 0xdbf9145e, 0x03621e2c, 0x7207f995, 0xaa9cf3e7, 0x15525d2c, 0xcdc9575e,
19026 +
            0xf799925e, 0x2f02982c, 0x90cc36e7, 0x48573c95, 0x3932db2c, 0xe1a9d15e, 0x5e677f95,
19027 +
            0x86fc75e7, 0x2ac6f595, 0xf25dffe7, 0x4d93512c, 0x95085b5e, 0xe46dbce7, 0x3cf6b695,
19028 +
            0x8338185e, 0x5ba3122c, 0x61f3d72c, 0xb968dd5e, 0x06a67395, 0xde3d79e7, 0xaf589e5e,
19029 +
            0x77c3942c, 0xc80d3ae7, 0x10963095, 0x65164f71, 0xbd8d4503, 0x0243ebc8, 0xdad8e1ba,
19030 +
            0xabbd0603, 0x73260c71, 0xcce8a2ba, 0x1473a8c8, 0x2e236dc8, 0xf6b867ba, 0x4976c971,
19031 +
            0x91edc303, 0xe08824ba, 0x38132ec8, 0x87dd8003, 0x5f468a71, 0xf37c0a03, 0x2be70071,
19032 +
            0x9429aeba, 0x4cb2a4c8, 0x3dd74371, 0xe54c4903, 0x5a82e7c8, 0x8219edba, 0xb84928ba,
19033 +
            0x60d222c8, 0xdf1c8c03, 0x07878671, 0x76e261c8, 0xae796bba, 0x11b7c571, 0xc92ccf03,
19034 +
            0x9fa175c8, 0x473a7fba, 0xf8f4d171, 0x206fdb03, 0x510a3cba, 0x899136c8, 0x365f9803,
19035 +
            0xeec49271, 0xd4945771, 0x0c0f5d03, 0xb3c1f3c8, 0x6b5af9ba, 0x1a3f1e03, 0xc2a41471,
19036 +
            0x7d6ababa, 0xa5f1b0c8, 0x09cb30ba, 0xd1503ac8, 0x6e9e9403, 0xb6059e71, 0xc76079c8,
19037 +
            0x1ffb73ba, 0xa035dd71, 0x78aed703, 0x42fe1203, 0x9a651871, 0x25abb6ba, 0xfd30bcc8,
19038 +
            0x8c555b71, 0x54ce5103, 0xeb00ffc8, 0x339bf5ba,
19039 +
        ],
19040 +
        [
19041 +
            0x00000000, 0xdc3aefcd, 0x6e166fc7, 0xb22c800a, 0xdc2cdf8e, 0x00163043, 0xb23ab049,
19042 +
            0x6e005f84, 0x6e3a0f41, 0xb200e08c, 0x002c6086, 0xdc168f4b, 0xb216d0cf, 0x6e2c3f02,
19043 +
            0xdc00bf08, 0x003a50c5, 0xdc741e82, 0x004ef14f, 0xb2627145, 0x6e589e88, 0x0058c10c,
19044 +
            0xdc622ec1, 0x6e4eaecb, 0xb2744106, 0xb24e11c3, 0x6e74fe0e, 0xdc587e04, 0x006291c9,
19045 +
            0x6e62ce4d, 0xb2582180, 0x0074a18a, 0xdc4e4e47, 0x6e8b8d59, 0xb2b16294, 0x009de29e,
19046 +
            0xdca70d53, 0xb2a752d7, 0x6e9dbd1a, 0xdcb13d10, 0x008bd2dd, 0x00b18218, 0xdc8b6dd5,
19047 +
            0x6ea7eddf, 0xb29d0212, 0xdc9d5d96, 0x00a7b25b, 0xb28b3251, 0x6eb1dd9c, 0xb2ff93db,
19048 +
            0x6ec57c16, 0xdce9fc1c, 0x00d313d1, 0x6ed34c55, 0xb2e9a398, 0x00c52392, 0xdcffcc5f,
19049 +
            0xdcc59c9a, 0x00ff7357, 0xb2d3f35d, 0x6ee91c90, 0x00e94314, 0xdcd3acd9, 0x6eff2cd3,
19050 +
            0xb2c5c31e, 0xdd171ab2, 0x012df57f, 0xb3017575, 0x6f3b9ab8, 0x013bc53c, 0xdd012af1,
19051 +
            0x6f2daafb, 0xb3174536, 0xb32d15f3, 0x6f17fa3e, 0xdd3b7a34, 0x010195f9, 0x6f01ca7d,
19052 +
            0xb33b25b0, 0x0117a5ba, 0xdd2d4a77, 0x01630430, 0xdd59ebfd, 0x6f756bf7, 0xb34f843a,
19053 +
            0xdd4fdbbe, 0x01753473, 0xb359b479, 0x6f635bb4, 0x6f590b71, 0xb363e4bc, 0x014f64b6,
19054 +
            0xdd758b7b, 0xb375d4ff, 0x6f4f3b32, 0xdd63bb38, 0x015954f5, 0xb39c97eb, 0x6fa67826,
19055 +
            0xdd8af82c, 0x01b017e1, 0x6fb04865, 0xb38aa7a8, 0x01a627a2, 0xdd9cc86f, 0xdda698aa,
19056 +
            0x019c7767, 0xb3b0f76d, 0x6f8a18a0, 0x018a4724, 0xddb0a8e9, 0x6f9c28e3, 0xb3a6c72e,
19057 +
            0x6fe88969, 0xb3d266a4, 0x01fee6ae, 0xddc40963, 0xb3c456e7, 0x6ffeb92a, 0xddd23920,
19058 +
            0x01e8d6ed, 0x01d28628, 0xdde869e5, 0x6fc4e9ef, 0xb3fe0622, 0xddfe59a6, 0x01c4b66b,
19059 +
            0xb3e83661, 0x6fd2d9ac, 0x6c4d8539, 0xb0776af4, 0x025beafe, 0xde610533, 0xb0615ab7,
19060 +
            0x6c5bb57a, 0xde773570, 0x024ddabd, 0x02778a78, 0xde4d65b5, 0x6c61e5bf, 0xb05b0a72,
19061 +
            0xde5b55f6, 0x0261ba3b, 0xb04d3a31, 0x6c77d5fc, 0xb0399bbb, 0x6c037476, 0xde2ff47c,
19062 +
            0x02151bb1, 0x6c154435, 0xb02fabf8, 0x02032bf2, 0xde39c43f, 0xde0394fa, 0x02397b37,
19063 +
            0xb015fb3d, 0x6c2f14f0, 0x022f4b74, 0xde15a4b9, 0x6c3924b3, 0xb003cb7e, 0x02c60860,
19064 +
            0xdefce7ad, 0x6cd067a7, 0xb0ea886a, 0xdeead7ee, 0x02d03823, 0xb0fcb829, 0x6cc657e4,
19065 +
            0x6cfc0721, 0xb0c6e8ec, 0x02ea68e6, 0xded0872b, 0xb0d0d8af, 0x6cea3762, 0xdec6b768,
19066 +
            0x02fc58a5, 0xdeb216e2, 0x0288f92f, 0xb0a47925, 0x6c9e96e8, 0x029ec96c, 0xdea426a1,
19067 +
            0x6c88a6ab, 0xb0b24966, 0xb08819a3, 0x6cb2f66e, 0xde9e7664, 0x02a499a9, 0x6ca4c62d,
19068 +
            0xb09e29e0, 0x02b2a9ea, 0xde884627, 0xb15a9f8b, 0x6d607046, 0xdf4cf04c, 0x03761f81,
19069 +
            0x6d764005, 0xb14cafc8, 0x03602fc2, 0xdf5ac00f, 0xdf6090ca, 0x035a7f07, 0xb176ff0d,
19070 +
            0x6d4c10c0, 0x034c4f44, 0xdf76a089, 0x6d5a2083, 0xb160cf4e, 0x6d2e8109, 0xb1146ec4,
19071 +
            0x0338eece, 0xdf020103, 0xb1025e87, 0x6d38b14a, 0xdf143140, 0x032ede8d, 0x03148e48,
19072 +
            0xdf2e6185, 0x6d02e18f, 0xb1380e42, 0xdf3851c6, 0x0302be0b, 0xb12e3e01, 0x6d14d1cc,
19073 +
            0xdfd112d2, 0x03ebfd1f, 0xb1c77d15, 0x6dfd92d8, 0x03fdcd5c, 0xdfc72291, 0x6deba29b,
19074 +
            0xb1d14d56, 0xb1eb1d93, 0x6dd1f25e, 0xdffd7254, 0x03c79d99, 0x6dc7c21d, 0xb1fd2dd0,
19075 +
            0x03d1adda, 0xdfeb4217, 0x03a50c50, 0xdf9fe39d, 0x6db36397, 0xb1898c5a, 0xdf89d3de,
19076 +
            0x03b33c13, 0xb19fbc19, 0x6da553d4, 0x6d9f0311, 0xb1a5ecdc, 0x03896cd6, 0xdfb3831b,
19077 +
            0xb1b3dc9f, 0x6d893352, 0xdfa5b358, 0x039f5c95,
19078 +
        ],
19079 +
        [
19080 +
            0x00000000, 0x69f48e4d, 0xd3e91c9a, 0xba1d92d7, 0x71b18969, 0x18450724, 0xa25895f3,
19081 +
            0xcbac1bbe, 0xe36312d2, 0x8a979c9f, 0x308a0e48, 0x597e8005, 0x92d29bbb, 0xfb2615f6,
19082 +
            0x413b8721, 0x28cf096c, 0x10a595f9, 0x79511bb4, 0xc34c8963, 0xaab8072e, 0x61141c90,
19083 +
            0x08e092dd, 0xb2fd000a, 0xdb098e47, 0xf3c6872b, 0x9a320966, 0x202f9bb1, 0x49db15fc,
19084 +
            0x82770e42, 0xeb83800f, 0x519e12d8, 0x386a9c95, 0x214b2bf2, 0x48bfa5bf, 0xf2a23768,
19085 +
            0x9b56b925, 0x50faa29b, 0x390e2cd6, 0x8313be01, 0xeae7304c, 0xc2283920, 0xabdcb76d,
19086 +
            0x11c125ba, 0x7835abf7, 0xb399b049, 0xda6d3e04, 0x6070acd3, 0x0984229e, 0x31eebe0b,
19087 +
            0x581a3046, 0xe207a291, 0x8bf32cdc, 0x405f3762, 0x29abb92f, 0x93b62bf8, 0xfa42a5b5,
19088 +
            0xd28dacd9, 0xbb792294, 0x0164b043, 0x68903e0e, 0xa33c25b0, 0xcac8abfd, 0x70d5392a,
19089 +
            0x1921b767, 0x429657e4, 0x2b62d9a9, 0x917f4b7e, 0xf88bc533, 0x3327de8d, 0x5ad350c0,
19090 +
            0xe0cec217, 0x893a4c5a, 0xa1f54536, 0xc801cb7b, 0x721c59ac, 0x1be8d7e1, 0xd044cc5f,
19091 +
            0xb9b04212, 0x03add0c5, 0x6a595e88, 0x5233c21d, 0x3bc74c50, 0x81dade87, 0xe82e50ca,
19092 +
            0x23824b74, 0x4a76c539, 0xf06b57ee, 0x999fd9a3, 0xb150d0cf, 0xd8a45e82, 0x62b9cc55,
19093 +
            0x0b4d4218, 0xc0e159a6, 0xa915d7eb, 0x1308453c, 0x7afccb71, 0x63dd7c16, 0x0a29f25b,
19094 +
            0xb034608c, 0xd9c0eec1, 0x126cf57f, 0x7b987b32, 0xc185e9e5, 0xa87167a8, 0x80be6ec4,
19095 +
            0xe94ae089, 0x5357725e, 0x3aa3fc13, 0xf10fe7ad, 0x98fb69e0, 0x22e6fb37, 0x4b12757a,
19096 +
            0x7378e9ef, 0x1a8c67a2, 0xa091f575, 0xc9657b38, 0x02c96086, 0x6b3deecb, 0xd1207c1c,
19097 +
            0xb8d4f251, 0x901bfb3d, 0xf9ef7570, 0x43f2e7a7, 0x2a0669ea, 0xe1aa7254, 0x885efc19,
19098 +
            0x32436ece, 0x5bb7e083, 0x852cafc8, 0xecd82185, 0x56c5b352, 0x3f313d1f, 0xf49d26a1,
19099 +
            0x9d69a8ec, 0x27743a3b, 0x4e80b476, 0x664fbd1a, 0x0fbb3357, 0xb5a6a180, 0xdc522fcd,
19100 +
            0x17fe3473, 0x7e0aba3e, 0xc41728e9, 0xade3a6a4, 0x95893a31, 0xfc7db47c, 0x466026ab,
19101 +
            0x2f94a8e6, 0xe438b358, 0x8dcc3d15, 0x37d1afc2, 0x5e25218f, 0x76ea28e3, 0x1f1ea6ae,
19102 +
            0xa5033479, 0xccf7ba34, 0x075ba18a, 0x6eaf2fc7, 0xd4b2bd10, 0xbd46335d, 0xa467843a,
19103 +
            0xcd930a77, 0x778e98a0, 0x1e7a16ed, 0xd5d60d53, 0xbc22831e, 0x063f11c9, 0x6fcb9f84,
19104 +
            0x470496e8, 0x2ef018a5, 0x94ed8a72, 0xfd19043f, 0x36b51f81, 0x5f4191cc, 0xe55c031b,
19105 +
            0x8ca88d56, 0xb4c211c3, 0xdd369f8e, 0x672b0d59, 0x0edf8314, 0xc57398aa, 0xac8716e7,
19106 +
            0x169a8430, 0x7f6e0a7d, 0x57a10311, 0x3e558d5c, 0x84481f8b, 0xedbc91c6, 0x26108a78,
19107 +
            0x4fe40435, 0xf5f996e2, 0x9c0d18af, 0xc7baf82c, 0xae4e7661, 0x1453e4b6, 0x7da76afb,
19108 +
            0xb60b7145, 0xdfffff08, 0x65e26ddf, 0x0c16e392, 0x24d9eafe, 0x4d2d64b3, 0xf730f664,
19109 +
            0x9ec47829, 0x55686397, 0x3c9cedda, 0x86817f0d, 0xef75f140, 0xd71f6dd5, 0xbeebe398,
19110 +
            0x04f6714f, 0x6d02ff02, 0xa6aee4bc, 0xcf5a6af1, 0x7547f826, 0x1cb3766b, 0x347c7f07,
19111 +
            0x5d88f14a, 0xe795639d, 0x8e61edd0, 0x45cdf66e, 0x2c397823, 0x9624eaf4, 0xffd064b9,
19112 +
            0xe6f1d3de, 0x8f055d93, 0x3518cf44, 0x5cec4109, 0x97405ab7, 0xfeb4d4fa, 0x44a9462d,
19113 +
            0x2d5dc860, 0x0592c10c, 0x6c664f41, 0xd67bdd96, 0xbf8f53db, 0x74234865, 0x1dd7c628,
19114 +
            0xa7ca54ff, 0xce3edab2, 0xf6544627, 0x9fa0c86a, 0x25bd5abd, 0x4c49d4f0, 0x87e5cf4e,
19115 +
            0xee114103, 0x540cd3d4, 0x3df85d99, 0x153754f5, 0x7cc3dab8, 0xc6de486f, 0xaf2ac622,
19116 +
            0x6486dd9c, 0x0d7253d1, 0xb76fc106, 0xde9b4f4b,
19117 +
        ],
19118 +
        [
19119 +
            0x00000000, 0x82709802, 0xd2828059, 0x50f2185b, 0x7366b0ef, 0xf11628ed, 0xa1e430b6,
19120 +
            0x2394a8b4, 0xe6cd61de, 0x64bdf9dc, 0x344fe187, 0xb63f7985, 0x95abd131, 0x17db4933,
19121 +
            0x47295168, 0xc559c96a, 0x1bf973e1, 0x9989ebe3, 0xc97bf3b8, 0x4b0b6bba, 0x689fc30e,
19122 +
            0xeaef5b0c, 0xba1d4357, 0x386ddb55, 0xfd34123f, 0x7f448a3d, 0x2fb69266, 0xadc60a64,
19123 +
            0x8e52a2d0, 0x0c223ad2, 0x5cd02289, 0xdea0ba8b, 0x37f2e7c2, 0xb5827fc0, 0xe570679b,
19124 +
            0x6700ff99, 0x4494572d, 0xc6e4cf2f, 0x9616d774, 0x14664f76, 0xd13f861c, 0x534f1e1e,
19125 +
            0x03bd0645, 0x81cd9e47, 0xa25936f3, 0x2029aef1, 0x70dbb6aa, 0xf2ab2ea8, 0x2c0b9423,
19126 +
            0xae7b0c21, 0xfe89147a, 0x7cf98c78, 0x5f6d24cc, 0xdd1dbcce, 0x8defa495, 0x0f9f3c97,
19127 +
            0xcac6f5fd, 0x48b66dff, 0x184475a4, 0x9a34eda6, 0xb9a04512, 0x3bd0dd10, 0x6b22c54b,
19128 +
            0xe9525d49, 0x6fe5cf84, 0xed955786, 0xbd674fdd, 0x3f17d7df, 0x1c837f6b, 0x9ef3e769,
19129 +
            0xce01ff32, 0x4c716730, 0x8928ae5a, 0x0b583658, 0x5baa2e03, 0xd9dab601, 0xfa4e1eb5,
19130 +
            0x783e86b7, 0x28cc9eec, 0xaabc06ee, 0x741cbc65, 0xf66c2467, 0xa69e3c3c, 0x24eea43e,
19131 +
            0x077a0c8a, 0x850a9488, 0xd5f88cd3, 0x578814d1, 0x92d1ddbb, 0x10a145b9, 0x40535de2,
19132 +
            0xc223c5e0, 0xe1b76d54, 0x63c7f556, 0x3335ed0d, 0xb145750f, 0x58172846, 0xda67b044,
19133 +
            0x8a95a81f, 0x08e5301d, 0x2b7198a9, 0xa90100ab, 0xf9f318f0, 0x7b8380f2, 0xbeda4998,
19134 +
            0x3caad19a, 0x6c58c9c1, 0xee2851c3, 0xcdbcf977, 0x4fcc6175, 0x1f3e792e, 0x9d4ee12c,
19135 +
            0x43ee5ba7, 0xc19ec3a5, 0x916cdbfe, 0x131c43fc, 0x3088eb48, 0xb2f8734a, 0xe20a6b11,
19136 +
            0x607af313, 0xa5233a79, 0x2753a27b, 0x77a1ba20, 0xf5d12222, 0xd6458a96, 0x54351294,
19137 +
            0x04c70acf, 0x86b792cd, 0xdfcb9f08, 0x5dbb070a, 0x0d491f51, 0x8f398753, 0xacad2fe7,
19138 +
            0x2eddb7e5, 0x7e2fafbe, 0xfc5f37bc, 0x3906fed6, 0xbb7666d4, 0xeb847e8f, 0x69f4e68d,
19139 +
            0x4a604e39, 0xc810d63b, 0x98e2ce60, 0x1a925662, 0xc432ece9, 0x464274eb, 0x16b06cb0,
19140 +
            0x94c0f4b2, 0xb7545c06, 0x3524c404, 0x65d6dc5f, 0xe7a6445d, 0x22ff8d37, 0xa08f1535,
19141 +
            0xf07d0d6e, 0x720d956c, 0x51993dd8, 0xd3e9a5da, 0x831bbd81, 0x016b2583, 0xe83978ca,
19142 +
            0x6a49e0c8, 0x3abbf893, 0xb8cb6091, 0x9b5fc825, 0x192f5027, 0x49dd487c, 0xcbadd07e,
19143 +
            0x0ef41914, 0x8c848116, 0xdc76994d, 0x5e06014f, 0x7d92a9fb, 0xffe231f9, 0xaf1029a2,
19144 +
            0x2d60b1a0, 0xf3c00b2b, 0x71b09329, 0x21428b72, 0xa3321370, 0x80a6bbc4, 0x02d623c6,
19145 +
            0x52243b9d, 0xd054a39f, 0x150d6af5, 0x977df2f7, 0xc78feaac, 0x45ff72ae, 0x666bda1a,
19146 +
            0xe41b4218, 0xb4e95a43, 0x3699c241, 0xb02e508c, 0x325ec88e, 0x62acd0d5, 0xe0dc48d7,
19147 +
            0xc348e063, 0x41387861, 0x11ca603a, 0x93baf838, 0x56e33152, 0xd493a950, 0x8461b10b,
19148 +
            0x06112909, 0x258581bd, 0xa7f519bf, 0xf70701e4, 0x757799e6, 0xabd7236d, 0x29a7bb6f,
19149 +
            0x7955a334, 0xfb253b36, 0xd8b19382, 0x5ac10b80, 0x0a3313db, 0x88438bd9, 0x4d1a42b3,
19150 +
            0xcf6adab1, 0x9f98c2ea, 0x1de85ae8, 0x3e7cf25c, 0xbc0c6a5e, 0xecfe7205, 0x6e8eea07,
19151 +
            0x87dcb74e, 0x05ac2f4c, 0x555e3717, 0xd72eaf15, 0xf4ba07a1, 0x76ca9fa3, 0x263887f8,
19152 +
            0xa4481ffa, 0x6111d690, 0xe3614e92, 0xb39356c9, 0x31e3cecb, 0x1277667f, 0x9007fe7d,
19153 +
            0xc0f5e626, 0x42857e24, 0x9c25c4af, 0x1e555cad, 0x4ea744f6, 0xccd7dcf4, 0xef437440,
19154 +
            0x6d33ec42, 0x3dc1f419, 0xbfb16c1b, 0x7ae8a571, 0xf8983d73, 0xa86a2528, 0x2a1abd2a,
19155 +
            0x098e159e, 0x8bfe8d9c, 0xdb0c95c7, 0x597c0dc5,
19156 +
        ],
19157 +
        [
19158 +
            0x00000000, 0xfbca4951, 0x21f722ff, 0xda3d6bae, 0x43ee45fe, 0xb8240caf, 0x62196701,
19159 +
            0x99d32e50, 0x87dc8bfc, 0x7c16c2ad, 0xa62ba903, 0x5de1e052, 0xc432ce02, 0x3ff88753,
19160 +
            0xe5c5ecfd, 0x1e0fa5ac, 0xd9daa7a5, 0x2210eef4, 0xf82d855a, 0x03e7cc0b, 0x9a34e25b,
19161 +
            0x61feab0a, 0xbbc3c0a4, 0x400989f5, 0x5e062c59, 0xa5cc6508, 0x7ff10ea6, 0x843b47f7,
19162 +
            0x1de869a7, 0xe62220f6, 0x3c1f4b58, 0xc7d50209, 0x65d6ff17, 0x9e1cb646, 0x4421dde8,
19163 +
            0xbfeb94b9, 0x2638bae9, 0xddf2f3b8, 0x07cf9816, 0xfc05d147, 0xe20a74eb, 0x19c03dba,
19164 +
            0xc3fd5614, 0x38371f45, 0xa1e43115, 0x5a2e7844, 0x801313ea, 0x7bd95abb, 0xbc0c58b2,
19165 +
            0x47c611e3, 0x9dfb7a4d, 0x6631331c, 0xffe21d4c, 0x0428541d, 0xde153fb3, 0x25df76e2,
19166 +
            0x3bd0d34e, 0xc01a9a1f, 0x1a27f1b1, 0xe1edb8e0, 0x783e96b0, 0x83f4dfe1, 0x59c9b44f,
19167 +
            0xa203fd1e, 0xcbadfe2e, 0x3067b77f, 0xea5adcd1, 0x11909580, 0x8843bbd0, 0x7389f281,
19168 +
            0xa9b4992f, 0x527ed07e, 0x4c7175d2, 0xb7bb3c83, 0x6d86572d, 0x964c1e7c, 0x0f9f302c,
19169 +
            0xf455797d, 0x2e6812d3, 0xd5a25b82, 0x1277598b, 0xe9bd10da, 0x33807b74, 0xc84a3225,
19170 +
            0x51991c75, 0xaa535524, 0x706e3e8a, 0x8ba477db, 0x95abd277, 0x6e619b26, 0xb45cf088,
19171 +
            0x4f96b9d9, 0xd6459789, 0x2d8fded8, 0xf7b2b576, 0x0c78fc27, 0xae7b0139, 0x55b14868,
19172 +
            0x8f8c23c6, 0x74466a97, 0xed9544c7, 0x165f0d96, 0xcc626638, 0x37a82f69, 0x29a78ac5,
19173 +
            0xd26dc394, 0x0850a83a, 0xf39ae16b, 0x6a49cf3b, 0x9183866a, 0x4bbeedc4, 0xb074a495,
19174 +
            0x77a1a69c, 0x8c6befcd, 0x56568463, 0xad9ccd32, 0x344fe362, 0xcf85aa33, 0x15b8c19d,
19175 +
            0xee7288cc, 0xf07d2d60, 0x0bb76431, 0xd18a0f9f, 0x2a4046ce, 0xb393689e, 0x485921cf,
19176 +
            0x92644a61, 0x69ae0330, 0x41384c01, 0xbaf20550, 0x60cf6efe, 0x9b0527af, 0x02d609ff,
19177 +
            0xf91c40ae, 0x23212b00, 0xd8eb6251, 0xc6e4c7fd, 0x3d2e8eac, 0xe713e502, 0x1cd9ac53,
19178 +
            0x850a8203, 0x7ec0cb52, 0xa4fda0fc, 0x5f37e9ad, 0x98e2eba4, 0x6328a2f5, 0xb915c95b,
19179 +
            0x42df800a, 0xdb0cae5a, 0x20c6e70b, 0xfafb8ca5, 0x0131c5f4, 0x1f3e6058, 0xe4f42909,
19180 +
            0x3ec942a7, 0xc5030bf6, 0x5cd025a6, 0xa71a6cf7, 0x7d270759, 0x86ed4e08, 0x24eeb316,
19181 +
            0xdf24fa47, 0x051991e9, 0xfed3d8b8, 0x6700f6e8, 0x9ccabfb9, 0x46f7d417, 0xbd3d9d46,
19182 +
            0xa33238ea, 0x58f871bb, 0x82c51a15, 0x790f5344, 0xe0dc7d14, 0x1b163445, 0xc12b5feb,
19183 +
            0x3ae116ba, 0xfd3414b3, 0x06fe5de2, 0xdcc3364c, 0x27097f1d, 0xbeda514d, 0x4510181c,
19184 +
            0x9f2d73b2, 0x64e73ae3, 0x7ae89f4f, 0x8122d61e, 0x5b1fbdb0, 0xa0d5f4e1, 0x3906dab1,
19185 +
            0xc2cc93e0, 0x18f1f84e, 0xe33bb11f, 0x8a95b22f, 0x715ffb7e, 0xab6290d0, 0x50a8d981,
19186 +
            0xc97bf7d1, 0x32b1be80, 0xe88cd52e, 0x13469c7f, 0x0d4939d3, 0xf6837082, 0x2cbe1b2c,
19187 +
            0xd774527d, 0x4ea77c2d, 0xb56d357c, 0x6f505ed2, 0x949a1783, 0x534f158a, 0xa8855cdb,
19188 +
            0x72b83775, 0x89727e24, 0x10a15074, 0xeb6b1925, 0x3156728b, 0xca9c3bda, 0xd4939e76,
19189 +
            0x2f59d727, 0xf564bc89, 0x0eaef5d8, 0x977ddb88, 0x6cb792d9, 0xb68af977, 0x4d40b026,
19190 +
            0xef434d38, 0x14890469, 0xceb46fc7, 0x357e2696, 0xacad08c6, 0x57674197, 0x8d5a2a39,
19191 +
            0x76906368, 0x689fc6c4, 0x93558f95, 0x4968e43b, 0xb2a2ad6a, 0x2b71833a, 0xd0bbca6b,
19192 +
            0x0a86a1c5, 0xf14ce894, 0x3699ea9d, 0xcd53a3cc, 0x176ec862, 0xeca48133, 0x7577af63,
19193 +
            0x8ebde632, 0x54808d9c, 0xaf4ac4cd, 0xb1456161, 0x4a8f2830, 0x90b2439e, 0x6b780acf,
19194 +
            0xf2ab249f, 0x09616dce, 0xd35c0660, 0x28964f31,
19195 +
        ],
19196 +
        [
19197 +
            0x00000000, 0x6039eda8, 0xc073db50, 0xa04a36f8, 0x568406fd, 0x36bdeb55, 0x96f7ddad,
19198 +
            0xf6ce3005, 0xad080dfa, 0xcd31e052, 0x6d7bd6aa, 0x0d423b02, 0xfb8c0b07, 0x9bb5e6af,
19199 +
            0x3bffd057, 0x5bc63dff, 0x8c73aba9, 0xec4a4601, 0x4c0070f9, 0x2c399d51, 0xdaf7ad54,
19200 +
            0xbace40fc, 0x1a847604, 0x7abd9bac, 0x217ba653, 0x41424bfb, 0xe1087d03, 0x813190ab,
19201 +
            0x77ffa0ae, 0x17c64d06, 0xb78c7bfe, 0xd7b59656, 0xce84e70f, 0xaebd0aa7, 0x0ef73c5f,
19202 +
            0x6eced1f7, 0x9800e1f2, 0xf8390c5a, 0x58733aa2, 0x384ad70a, 0x638ceaf5, 0x03b5075d,
19203 +
            0xa3ff31a5, 0xc3c6dc0d, 0x3508ec08, 0x553101a0, 0xf57b3758, 0x9542daf0, 0x42f74ca6,
19204 +
            0x22cea10e, 0x828497f6, 0xe2bd7a5e, 0x14734a5b, 0x744aa7f3, 0xd400910b, 0xb4397ca3,
19205 +
            0xefff415c, 0x8fc6acf4, 0x2f8c9a0c, 0x4fb577a4, 0xb97b47a1, 0xd942aa09, 0x79089cf1,
19206 +
            0x19317159, 0x4b6a7e43, 0x2b5393eb, 0x8b19a513, 0xeb2048bb, 0x1dee78be, 0x7dd79516,
19207 +
            0xdd9da3ee, 0xbda44e46, 0xe66273b9, 0x865b9e11, 0x2611a8e9, 0x46284541, 0xb0e67544,
19208 +
            0xd0df98ec, 0x7095ae14, 0x10ac43bc, 0xc719d5ea, 0xa7203842, 0x076a0eba, 0x6753e312,
19209 +
            0x919dd317, 0xf1a43ebf, 0x51ee0847, 0x31d7e5ef, 0x6a11d810, 0x0a2835b8, 0xaa620340,
19210 +
            0xca5beee8, 0x3c95deed, 0x5cac3345, 0xfce605bd, 0x9cdfe815, 0x85ee994c, 0xe5d774e4,
19211 +
            0x459d421c, 0x25a4afb4, 0xd36a9fb1, 0xb3537219, 0x131944e1, 0x7320a949, 0x28e694b6,
19212 +
            0x48df791e, 0xe8954fe6, 0x88aca24e, 0x7e62924b, 0x1e5b7fe3, 0xbe11491b, 0xde28a4b3,
19213 +
            0x099d32e5, 0x69a4df4d, 0xc9eee9b5, 0xa9d7041d, 0x5f193418, 0x3f20d9b0, 0x9f6aef48,
19214 +
            0xff5302e0, 0xa4953f1f, 0xc4acd2b7, 0x64e6e44f, 0x04df09e7, 0xf21139e2, 0x9228d44a,
19215 +
            0x3262e2b2, 0x525b0f1a, 0x96d4fc86, 0xf6ed112e, 0x56a727d6, 0x369eca7e, 0xc050fa7b,
19216 +
            0xa06917d3, 0x0023212b, 0x601acc83, 0x3bdcf17c, 0x5be51cd4, 0xfbaf2a2c, 0x9b96c784,
19217 +
            0x6d58f781, 0x0d611a29, 0xad2b2cd1, 0xcd12c179, 0x1aa7572f, 0x7a9eba87, 0xdad48c7f,
19218 +
            0xbaed61d7, 0x4c2351d2, 0x2c1abc7a, 0x8c508a82, 0xec69672a, 0xb7af5ad5, 0xd796b77d,
19219 +
            0x77dc8185, 0x17e56c2d, 0xe12b5c28, 0x8112b180, 0x21588778, 0x41616ad0, 0x58501b89,
19220 +
            0x3869f621, 0x9823c0d9, 0xf81a2d71, 0x0ed41d74, 0x6eedf0dc, 0xcea7c624, 0xae9e2b8c,
19221 +
            0xf5581673, 0x9561fbdb, 0x352bcd23, 0x5512208b, 0xa3dc108e, 0xc3e5fd26, 0x63afcbde,
19222 +
            0x03962676, 0xd423b020, 0xb41a5d88, 0x14506b70, 0x746986d8, 0x82a7b6dd, 0xe29e5b75,
19223 +
            0x42d46d8d, 0x22ed8025, 0x792bbdda, 0x19125072, 0xb958668a, 0xd9618b22, 0x2fafbb27,
19224 +
            0x4f96568f, 0xefdc6077, 0x8fe58ddf, 0xddbe82c5, 0xbd876f6d, 0x1dcd5995, 0x7df4b43d,
19225 +
            0x8b3a8438, 0xeb036990, 0x4b495f68, 0x2b70b2c0, 0x70b68f3f, 0x108f6297, 0xb0c5546f,
19226 +
            0xd0fcb9c7, 0x263289c2, 0x460b646a, 0xe6415292, 0x8678bf3a, 0x51cd296c, 0x31f4c4c4,
19227 +
            0x91bef23c, 0xf1871f94, 0x07492f91, 0x6770c239, 0xc73af4c1, 0xa7031969, 0xfcc52496,
19228 +
            0x9cfcc93e, 0x3cb6ffc6, 0x5c8f126e, 0xaa41226b, 0xca78cfc3, 0x6a32f93b, 0x0a0b1493,
19229 +
            0x133a65ca, 0x73038862, 0xd349be9a, 0xb3705332, 0x45be6337, 0x25878e9f, 0x85cdb867,
19230 +
            0xe5f455cf, 0xbe326830, 0xde0b8598, 0x7e41b360, 0x1e785ec8, 0xe8b66ecd, 0x888f8365,
19231 +
            0x28c5b59d, 0x48fc5835, 0x9f49ce63, 0xff7023cb, 0x5f3a1533, 0x3f03f89b, 0xc9cdc89e,
19232 +
            0xa9f42536, 0x09be13ce, 0x6987fe66, 0x3241c399, 0x52782e31, 0xf23218c9, 0x920bf561,
19233 +
            0x64c5c564, 0x04fc28cc, 0xa4b61e34, 0xc48ff39c,
19234 +
        ],
19235 +
        [
19236 +
            0x00000000, 0x7b4bc878, 0xf69790f0, 0x8ddc5888, 0x3b4c91bd, 0x400759c5, 0xcddb014d,
19237 +
            0xb690c935, 0x7699237a, 0x0dd2eb02, 0x800eb38a, 0xfb457bf2, 0x4dd5b2c7, 0x369e7abf,
19238 +
            0xbb422237, 0xc009ea4f, 0xed3246f4, 0x96798e8c, 0x1ba5d604, 0x60ee1e7c, 0xd67ed749,
19239 +
            0xad351f31, 0x20e947b9, 0x5ba28fc1, 0x9bab658e, 0xe0e0adf6, 0x6d3cf57e, 0x16773d06,
19240 +
            0xa0e7f433, 0xdbac3c4b, 0x567064c3, 0x2d3bacbb, 0x0c073db5, 0x774cf5cd, 0xfa90ad45,
19241 +
            0x81db653d, 0x374bac08, 0x4c006470, 0xc1dc3cf8, 0xba97f480, 0x7a9e1ecf, 0x01d5d6b7,
19242 +
            0x8c098e3f, 0xf7424647, 0x41d28f72, 0x3a99470a, 0xb7451f82, 0xcc0ed7fa, 0xe1357b41,
19243 +
            0x9a7eb339, 0x17a2ebb1, 0x6ce923c9, 0xda79eafc, 0xa1322284, 0x2cee7a0c, 0x57a5b274,
19244 +
            0x97ac583b, 0xece79043, 0x613bc8cb, 0x1a7000b3, 0xace0c986, 0xd7ab01fe, 0x5a775976,
19245 +
            0x213c910e, 0x180e7b6a, 0x6345b312, 0xee99eb9a, 0x95d223e2, 0x2342ead7, 0x580922af,
19246 +
            0xd5d57a27, 0xae9eb25f, 0x6e975810, 0x15dc9068, 0x9800c8e0, 0xe34b0098, 0x55dbc9ad,
19247 +
            0x2e9001d5, 0xa34c595d, 0xd8079125, 0xf53c3d9e, 0x8e77f5e6, 0x03abad6e, 0x78e06516,
19248 +
            0xce70ac23, 0xb53b645b, 0x38e73cd3, 0x43acf4ab, 0x83a51ee4, 0xf8eed69c, 0x75328e14,
19249 +
            0x0e79466c, 0xb8e98f59, 0xc3a24721, 0x4e7e1fa9, 0x3535d7d1, 0x140946df, 0x6f428ea7,
19250 +
            0xe29ed62f, 0x99d51e57, 0x2f45d762, 0x540e1f1a, 0xd9d24792, 0xa2998fea, 0x629065a5,
19251 +
            0x19dbaddd, 0x9407f555, 0xef4c3d2d, 0x59dcf418, 0x22973c60, 0xaf4b64e8, 0xd400ac90,
19252 +
            0xf93b002b, 0x8270c853, 0x0fac90db, 0x74e758a3, 0xc2779196, 0xb93c59ee, 0x34e00166,
19253 +
            0x4fabc91e, 0x8fa22351, 0xf4e9eb29, 0x7935b3a1, 0x027e7bd9, 0xb4eeb2ec, 0xcfa57a94,
19254 +
            0x4279221c, 0x3932ea64, 0x301cf6d4, 0x4b573eac, 0xc68b6624, 0xbdc0ae5c, 0x0b506769,
19255 +
            0x701baf11, 0xfdc7f799, 0x868c3fe1, 0x4685d5ae, 0x3dce1dd6, 0xb012455e, 0xcb598d26,
19256 +
            0x7dc94413, 0x06828c6b, 0x8b5ed4e3, 0xf0151c9b, 0xdd2eb020, 0xa6657858, 0x2bb920d0,
19257 +
            0x50f2e8a8, 0xe662219d, 0x9d29e9e5, 0x10f5b16d, 0x6bbe7915, 0xabb7935a, 0xd0fc5b22,
19258 +
            0x5d2003aa, 0x266bcbd2, 0x90fb02e7, 0xebb0ca9f, 0x666c9217, 0x1d275a6f, 0x3c1bcb61,
19259 +
            0x47500319, 0xca8c5b91, 0xb1c793e9, 0x07575adc, 0x7c1c92a4, 0xf1c0ca2c, 0x8a8b0254,
19260 +
            0x4a82e81b, 0x31c92063, 0xbc1578eb, 0xc75eb093, 0x71ce79a6, 0x0a85b1de, 0x8759e956,
19261 +
            0xfc12212e, 0xd1298d95, 0xaa6245ed, 0x27be1d65, 0x5cf5d51d, 0xea651c28, 0x912ed450,
19262 +
            0x1cf28cd8, 0x67b944a0, 0xa7b0aeef, 0xdcfb6697, 0x51273e1f, 0x2a6cf667, 0x9cfc3f52,
19263 +
            0xe7b7f72a, 0x6a6bafa2, 0x112067da, 0x28128dbe, 0x535945c6, 0xde851d4e, 0xa5ced536,
19264 +
            0x135e1c03, 0x6815d47b, 0xe5c98cf3, 0x9e82448b, 0x5e8baec4, 0x25c066bc, 0xa81c3e34,
19265 +
            0xd357f64c, 0x65c73f79, 0x1e8cf701, 0x9350af89, 0xe81b67f1, 0xc520cb4a, 0xbe6b0332,
19266 +
            0x33b75bba, 0x48fc93c2, 0xfe6c5af7, 0x8527928f, 0x08fbca07, 0x73b0027f, 0xb3b9e830,
19267 +
            0xc8f22048, 0x452e78c0, 0x3e65b0b8, 0x88f5798d, 0xf3beb1f5, 0x7e62e97d, 0x05292105,
19268 +
            0x2415b00b, 0x5f5e7873, 0xd28220fb, 0xa9c9e883, 0x1f5921b6, 0x6412e9ce, 0xe9ceb146,
19269 +
            0x9285793e, 0x528c9371, 0x29c75b09, 0xa41b0381, 0xdf50cbf9, 0x69c002cc, 0x128bcab4,
19270 +
            0x9f57923c, 0xe41c5a44, 0xc927f6ff, 0xb26c3e87, 0x3fb0660f, 0x44fbae77, 0xf26b6742,
19271 +
            0x8920af3a, 0x04fcf7b2, 0x7fb73fca, 0xbfbed585, 0xc4f51dfd, 0x49294575, 0x32628d0d,
19272 +
            0x84f24438, 0xffb98c40, 0x7265d4c8, 0x092e1cb0,
19273 +
        ],
19274 +
    ];
19275 +
19276 +
    pub static CRC32_MPEG_2_TABLE: [[u32; 256]; 16] = [
19277 +
        [
19278 +
            0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2,
19279 +
            0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3,
19280 +
            0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
19281 +
            0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
19282 +
            0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e,
19283 +
            0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef,
19284 +
            0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90,
19285 +
            0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
19286 +
            0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a,
19287 +
            0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c,
19288 +
            0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13,
19289 +
            0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
19290 +
            0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
19291 +
            0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20,
19292 +
            0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f,
19293 +
            0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
19294 +
            0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055,
19295 +
            0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
19296 +
            0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632,
19297 +
            0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
19298 +
            0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0,
19299 +
            0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91,
19300 +
            0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
19301 +
            0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
19302 +
            0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604,
19303 +
            0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615,
19304 +
            0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a,
19305 +
            0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
19306 +
            0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f,
19307 +
            0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e,
19308 +
            0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651,
19309 +
            0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
19310 +
            0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
19311 +
            0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa,
19312 +
            0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5,
19313 +
            0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
19314 +
            0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4,
19315 +
        ],
19316 +
        [
19317 +
            0x00000000, 0xd219c1dc, 0xa0f29e0f, 0x72eb5fd3, 0x452421a9, 0x973de075, 0xe5d6bfa6,
19318 +
            0x37cf7e7a, 0x8a484352, 0x5851828e, 0x2abadd5d, 0xf8a31c81, 0xcf6c62fb, 0x1d75a327,
19319 +
            0x6f9efcf4, 0xbd873d28, 0x10519b13, 0xc2485acf, 0xb0a3051c, 0x62bac4c0, 0x5575baba,
19320 +
            0x876c7b66, 0xf58724b5, 0x279ee569, 0x9a19d841, 0x4800199d, 0x3aeb464e, 0xe8f28792,
19321 +
            0xdf3df9e8, 0x0d243834, 0x7fcf67e7, 0xadd6a63b, 0x20a33626, 0xf2baf7fa, 0x8051a829,
19322 +
            0x524869f5, 0x6587178f, 0xb79ed653, 0xc5758980, 0x176c485c, 0xaaeb7574, 0x78f2b4a8,
19323 +
            0x0a19eb7b, 0xd8002aa7, 0xefcf54dd, 0x3dd69501, 0x4f3dcad2, 0x9d240b0e, 0x30f2ad35,
19324 +
            0xe2eb6ce9, 0x9000333a, 0x4219f2e6, 0x75d68c9c, 0xa7cf4d40, 0xd5241293, 0x073dd34f,
19325 +
            0xbabaee67, 0x68a32fbb, 0x1a487068, 0xc851b1b4, 0xff9ecfce, 0x2d870e12, 0x5f6c51c1,
19326 +
            0x8d75901d, 0x41466c4c, 0x935fad90, 0xe1b4f243, 0x33ad339f, 0x04624de5, 0xd67b8c39,
19327 +
            0xa490d3ea, 0x76891236, 0xcb0e2f1e, 0x1917eec2, 0x6bfcb111, 0xb9e570cd, 0x8e2a0eb7,
19328 +
            0x5c33cf6b, 0x2ed890b8, 0xfcc15164, 0x5117f75f, 0x830e3683, 0xf1e56950, 0x23fca88c,
19329 +
            0x1433d6f6, 0xc62a172a, 0xb4c148f9, 0x66d88925, 0xdb5fb40d, 0x094675d1, 0x7bad2a02,
19330 +
            0xa9b4ebde, 0x9e7b95a4, 0x4c625478, 0x3e890bab, 0xec90ca77, 0x61e55a6a, 0xb3fc9bb6,
19331 +
            0xc117c465, 0x130e05b9, 0x24c17bc3, 0xf6d8ba1f, 0x8433e5cc, 0x562a2410, 0xebad1938,
19332 +
            0x39b4d8e4, 0x4b5f8737, 0x994646eb, 0xae893891, 0x7c90f94d, 0x0e7ba69e, 0xdc626742,
19333 +
            0x71b4c179, 0xa3ad00a5, 0xd1465f76, 0x035f9eaa, 0x3490e0d0, 0xe689210c, 0x94627edf,
19334 +
            0x467bbf03, 0xfbfc822b, 0x29e543f7, 0x5b0e1c24, 0x8917ddf8, 0xbed8a382, 0x6cc1625e,
19335 +
            0x1e2a3d8d, 0xcc33fc51, 0x828cd898, 0x50951944, 0x227e4697, 0xf067874b, 0xc7a8f931,
19336 +
            0x15b138ed, 0x675a673e, 0xb543a6e2, 0x08c49bca, 0xdadd5a16, 0xa83605c5, 0x7a2fc419,
19337 +
            0x4de0ba63, 0x9ff97bbf, 0xed12246c, 0x3f0be5b0, 0x92dd438b, 0x40c48257, 0x322fdd84,
19338 +
            0xe0361c58, 0xd7f96222, 0x05e0a3fe, 0x770bfc2d, 0xa5123df1, 0x189500d9, 0xca8cc105,
19339 +
            0xb8679ed6, 0x6a7e5f0a, 0x5db12170, 0x8fa8e0ac, 0xfd43bf7f, 0x2f5a7ea3, 0xa22feebe,
19340 +
            0x70362f62, 0x02dd70b1, 0xd0c4b16d, 0xe70bcf17, 0x35120ecb, 0x47f95118, 0x95e090c4,
19341 +
            0x2867adec, 0xfa7e6c30, 0x889533e3, 0x5a8cf23f, 0x6d438c45, 0xbf5a4d99, 0xcdb1124a,
19342 +
            0x1fa8d396, 0xb27e75ad, 0x6067b471, 0x128ceba2, 0xc0952a7e, 0xf75a5404, 0x254395d8,
19343 +
            0x57a8ca0b, 0x85b10bd7, 0x383636ff, 0xea2ff723, 0x98c4a8f0, 0x4add692c, 0x7d121756,
19344 +
            0xaf0bd68a, 0xdde08959, 0x0ff94885, 0xc3cab4d4, 0x11d37508, 0x63382adb, 0xb121eb07,
19345 +
            0x86ee957d, 0x54f754a1, 0x261c0b72, 0xf405caae, 0x4982f786, 0x9b9b365a, 0xe9706989,
19346 +
            0x3b69a855, 0x0ca6d62f, 0xdebf17f3, 0xac544820, 0x7e4d89fc, 0xd39b2fc7, 0x0182ee1b,
19347 +
            0x7369b1c8, 0xa1707014, 0x96bf0e6e, 0x44a6cfb2, 0x364d9061, 0xe45451bd, 0x59d36c95,
19348 +
            0x8bcaad49, 0xf921f29a, 0x2b383346, 0x1cf74d3c, 0xceee8ce0, 0xbc05d333, 0x6e1c12ef,
19349 +
            0xe36982f2, 0x3170432e, 0x439b1cfd, 0x9182dd21, 0xa64da35b, 0x74546287, 0x06bf3d54,
19350 +
            0xd4a6fc88, 0x6921c1a0, 0xbb38007c, 0xc9d35faf, 0x1bca9e73, 0x2c05e009, 0xfe1c21d5,
19351 +
            0x8cf77e06, 0x5eeebfda, 0xf33819e1, 0x2121d83d, 0x53ca87ee, 0x81d34632, 0xb61c3848,
19352 +
            0x6405f994, 0x16eea647, 0xc4f7679b, 0x79705ab3, 0xab699b6f, 0xd982c4bc, 0x0b9b0560,
19353 +
            0x3c547b1a, 0xee4dbac6, 0x9ca6e515, 0x4ebf24c9,
19354 +
        ],
19355 +
        [
19356 +
            0x00000000, 0x01d8ac87, 0x03b1590e, 0x0269f589, 0x0762b21c, 0x06ba1e9b, 0x04d3eb12,
19357 +
            0x050b4795, 0x0ec56438, 0x0f1dc8bf, 0x0d743d36, 0x0cac91b1, 0x09a7d624, 0x087f7aa3,
19358 +
            0x0a168f2a, 0x0bce23ad, 0x1d8ac870, 0x1c5264f7, 0x1e3b917e, 0x1fe33df9, 0x1ae87a6c,
19359 +
            0x1b30d6eb, 0x19592362, 0x18818fe5, 0x134fac48, 0x129700cf, 0x10fef546, 0x112659c1,
19360 +
            0x142d1e54, 0x15f5b2d3, 0x179c475a, 0x1644ebdd, 0x3b1590e0, 0x3acd3c67, 0x38a4c9ee,
19361 +
            0x397c6569, 0x3c7722fc, 0x3daf8e7b, 0x3fc67bf2, 0x3e1ed775, 0x35d0f4d8, 0x3408585f,
19362 +
            0x3661add6, 0x37b90151, 0x32b246c4, 0x336aea43, 0x31031fca, 0x30dbb34d, 0x269f5890,
19363 +
            0x2747f417, 0x252e019e, 0x24f6ad19, 0x21fdea8c, 0x2025460b, 0x224cb382, 0x23941f05,
19364 +
            0x285a3ca8, 0x2982902f, 0x2beb65a6, 0x2a33c921, 0x2f388eb4, 0x2ee02233, 0x2c89d7ba,
19365 +
            0x2d517b3d, 0x762b21c0, 0x77f38d47, 0x759a78ce, 0x7442d449, 0x714993dc, 0x70913f5b,
19366 +
            0x72f8cad2, 0x73206655, 0x78ee45f8, 0x7936e97f, 0x7b5f1cf6, 0x7a87b071, 0x7f8cf7e4,
19367 +
            0x7e545b63, 0x7c3daeea, 0x7de5026d, 0x6ba1e9b0, 0x6a794537, 0x6810b0be, 0x69c81c39,
19368 +
            0x6cc35bac, 0x6d1bf72b, 0x6f7202a2, 0x6eaaae25, 0x65648d88, 0x64bc210f, 0x66d5d486,
19369 +
            0x670d7801, 0x62063f94, 0x63de9313, 0x61b7669a, 0x606fca1d, 0x4d3eb120, 0x4ce61da7,
19370 +
            0x4e8fe82e, 0x4f5744a9, 0x4a5c033c, 0x4b84afbb, 0x49ed5a32, 0x4835f6b5, 0x43fbd518,
19371 +
            0x4223799f, 0x404a8c16, 0x41922091, 0x44996704, 0x4541cb83, 0x47283e0a, 0x46f0928d,
19372 +
            0x50b47950, 0x516cd5d7, 0x5305205e, 0x52dd8cd9, 0x57d6cb4c, 0x560e67cb, 0x54679242,
19373 +
            0x55bf3ec5, 0x5e711d68, 0x5fa9b1ef, 0x5dc04466, 0x5c18e8e1, 0x5913af74, 0x58cb03f3,
19374 +
            0x5aa2f67a, 0x5b7a5afd, 0xec564380, 0xed8eef07, 0xefe71a8e, 0xee3fb609, 0xeb34f19c,
19375 +
            0xeaec5d1b, 0xe885a892, 0xe95d0415, 0xe29327b8, 0xe34b8b3f, 0xe1227eb6, 0xe0fad231,
19376 +
            0xe5f195a4, 0xe4293923, 0xe640ccaa, 0xe798602d, 0xf1dc8bf0, 0xf0042777, 0xf26dd2fe,
19377 +
            0xf3b57e79, 0xf6be39ec, 0xf766956b, 0xf50f60e2, 0xf4d7cc65, 0xff19efc8, 0xfec1434f,
19378 +
            0xfca8b6c6, 0xfd701a41, 0xf87b5dd4, 0xf9a3f153, 0xfbca04da, 0xfa12a85d, 0xd743d360,
19379 +
            0xd69b7fe7, 0xd4f28a6e, 0xd52a26e9, 0xd021617c, 0xd1f9cdfb, 0xd3903872, 0xd24894f5,
19380 +
            0xd986b758, 0xd85e1bdf, 0xda37ee56, 0xdbef42d1, 0xdee40544, 0xdf3ca9c3, 0xdd555c4a,
19381 +
            0xdc8df0cd, 0xcac91b10, 0xcb11b797, 0xc978421e, 0xc8a0ee99, 0xcdaba90c, 0xcc73058b,
19382 +
            0xce1af002, 0xcfc25c85, 0xc40c7f28, 0xc5d4d3af, 0xc7bd2626, 0xc6658aa1, 0xc36ecd34,
19383 +
            0xc2b661b3, 0xc0df943a, 0xc10738bd, 0x9a7d6240, 0x9ba5cec7, 0x99cc3b4e, 0x981497c9,
19384 +
            0x9d1fd05c, 0x9cc77cdb, 0x9eae8952, 0x9f7625d5, 0x94b80678, 0x9560aaff, 0x97095f76,
19385 +
            0x96d1f3f1, 0x93dab464, 0x920218e3, 0x906bed6a, 0x91b341ed, 0x87f7aa30, 0x862f06b7,
19386 +
            0x8446f33e, 0x859e5fb9, 0x8095182c, 0x814db4ab, 0x83244122, 0x82fceda5, 0x8932ce08,
19387 +
            0x88ea628f, 0x8a839706, 0x8b5b3b81, 0x8e507c14, 0x8f88d093, 0x8de1251a, 0x8c39899d,
19388 +
            0xa168f2a0, 0xa0b05e27, 0xa2d9abae, 0xa3010729, 0xa60a40bc, 0xa7d2ec3b, 0xa5bb19b2,
19389 +
            0xa463b535, 0xafad9698, 0xae753a1f, 0xac1ccf96, 0xadc46311, 0xa8cf2484, 0xa9178803,
19390 +
            0xab7e7d8a, 0xaaa6d10d, 0xbce23ad0, 0xbd3a9657, 0xbf5363de, 0xbe8bcf59, 0xbb8088cc,
19391 +
            0xba58244b, 0xb831d1c2, 0xb9e97d45, 0xb2275ee8, 0xb3fff26f, 0xb19607e6, 0xb04eab61,
19392 +
            0xb545ecf4, 0xb49d4073, 0xb6f4b5fa, 0xb72c197d,
19393 +
        ],
19394 +
        [
19395 +
            0x00000000, 0xdc6d9ab7, 0xbc1a28d9, 0x6077b26e, 0x7cf54c05, 0xa098d6b2, 0xc0ef64dc,
19396 +
            0x1c82fe6b, 0xf9ea980a, 0x258702bd, 0x45f0b0d3, 0x999d2a64, 0x851fd40f, 0x59724eb8,
19397 +
            0x3905fcd6, 0xe5686661, 0xf7142da3, 0x2b79b714, 0x4b0e057a, 0x97639fcd, 0x8be161a6,
19398 +
            0x578cfb11, 0x37fb497f, 0xeb96d3c8, 0x0efeb5a9, 0xd2932f1e, 0xb2e49d70, 0x6e8907c7,
19399 +
            0x720bf9ac, 0xae66631b, 0xce11d175, 0x127c4bc2, 0xeae946f1, 0x3684dc46, 0x56f36e28,
19400 +
            0x8a9ef49f, 0x961c0af4, 0x4a719043, 0x2a06222d, 0xf66bb89a, 0x1303defb, 0xcf6e444c,
19401 +
            0xaf19f622, 0x73746c95, 0x6ff692fe, 0xb39b0849, 0xd3ecba27, 0x0f812090, 0x1dfd6b52,
19402 +
            0xc190f1e5, 0xa1e7438b, 0x7d8ad93c, 0x61082757, 0xbd65bde0, 0xdd120f8e, 0x017f9539,
19403 +
            0xe417f358, 0x387a69ef, 0x580ddb81, 0x84604136, 0x98e2bf5d, 0x448f25ea, 0x24f89784,
19404 +
            0xf8950d33, 0xd1139055, 0x0d7e0ae2, 0x6d09b88c, 0xb164223b, 0xade6dc50, 0x718b46e7,
19405 +
            0x11fcf489, 0xcd916e3e, 0x28f9085f, 0xf49492e8, 0x94e32086, 0x488eba31, 0x540c445a,
19406 +
            0x8861deed, 0xe8166c83, 0x347bf634, 0x2607bdf6, 0xfa6a2741, 0x9a1d952f, 0x46700f98,
19407 +
            0x5af2f1f3, 0x869f6b44, 0xe6e8d92a, 0x3a85439d, 0xdfed25fc, 0x0380bf4b, 0x63f70d25,
19408 +
            0xbf9a9792, 0xa31869f9, 0x7f75f34e, 0x1f024120, 0xc36fdb97, 0x3bfad6a4, 0xe7974c13,
19409 +
            0x87e0fe7d, 0x5b8d64ca, 0x470f9aa1, 0x9b620016, 0xfb15b278, 0x277828cf, 0xc2104eae,
19410 +
            0x1e7dd419, 0x7e0a6677, 0xa267fcc0, 0xbee502ab, 0x6288981c, 0x02ff2a72, 0xde92b0c5,
19411 +
            0xcceefb07, 0x108361b0, 0x70f4d3de, 0xac994969, 0xb01bb702, 0x6c762db5, 0x0c019fdb,
19412 +
            0xd06c056c, 0x3504630d, 0xe969f9ba, 0x891e4bd4, 0x5573d163, 0x49f12f08, 0x959cb5bf,
19413 +
            0xf5eb07d1, 0x29869d66, 0xa6e63d1d, 0x7a8ba7aa, 0x1afc15c4, 0xc6918f73, 0xda137118,
19414 +
            0x067eebaf, 0x660959c1, 0xba64c376, 0x5f0ca517, 0x83613fa0, 0xe3168dce, 0x3f7b1779,
19415 +
            0x23f9e912, 0xff9473a5, 0x9fe3c1cb, 0x438e5b7c, 0x51f210be, 0x8d9f8a09, 0xede83867,
19416 +
            0x3185a2d0, 0x2d075cbb, 0xf16ac60c, 0x911d7462, 0x4d70eed5, 0xa81888b4, 0x74751203,
19417 +
            0x1402a06d, 0xc86f3ada, 0xd4edc4b1, 0x08805e06, 0x68f7ec68, 0xb49a76df, 0x4c0f7bec,
19418 +
            0x9062e15b, 0xf0155335, 0x2c78c982, 0x30fa37e9, 0xec97ad5e, 0x8ce01f30, 0x508d8587,
19419 +
            0xb5e5e3e6, 0x69887951, 0x09ffcb3f, 0xd5925188, 0xc910afe3, 0x157d3554, 0x750a873a,
19420 +
            0xa9671d8d, 0xbb1b564f, 0x6776ccf8, 0x07017e96, 0xdb6ce421, 0xc7ee1a4a, 0x1b8380fd,
19421 +
            0x7bf43293, 0xa799a824, 0x42f1ce45, 0x9e9c54f2, 0xfeebe69c, 0x22867c2b, 0x3e048240,
19422 +
            0xe26918f7, 0x821eaa99, 0x5e73302e, 0x77f5ad48, 0xab9837ff, 0xcbef8591, 0x17821f26,
19423 +
            0x0b00e14d, 0xd76d7bfa, 0xb71ac994, 0x6b775323, 0x8e1f3542, 0x5272aff5, 0x32051d9b,
19424 +
            0xee68872c, 0xf2ea7947, 0x2e87e3f0, 0x4ef0519e, 0x929dcb29, 0x80e180eb, 0x5c8c1a5c,
19425 +
            0x3cfba832, 0xe0963285, 0xfc14ccee, 0x20795659, 0x400ee437, 0x9c637e80, 0x790b18e1,
19426 +
            0xa5668256, 0xc5113038, 0x197caa8f, 0x05fe54e4, 0xd993ce53, 0xb9e47c3d, 0x6589e68a,
19427 +
            0x9d1cebb9, 0x4171710e, 0x2106c360, 0xfd6b59d7, 0xe1e9a7bc, 0x3d843d0b, 0x5df38f65,
19428 +
            0x819e15d2, 0x64f673b3, 0xb89be904, 0xd8ec5b6a, 0x0481c1dd, 0x18033fb6, 0xc46ea501,
19429 +
            0xa419176f, 0x78748dd8, 0x6a08c61a, 0xb6655cad, 0xd612eec3, 0x0a7f7474, 0x16fd8a1f,
19430 +
            0xca9010a8, 0xaae7a2c6, 0x768a3871, 0x93e25e10, 0x4f8fc4a7, 0x2ff876c9, 0xf395ec7e,
19431 +
            0xef171215, 0x337a88a2, 0x530d3acc, 0x8f60a07b,
19432 +
        ],
19433 +
        [
19434 +
            0x00000000, 0x490d678d, 0x921acf1a, 0xdb17a897, 0x20f48383, 0x69f9e40e, 0xb2ee4c99,
19435 +
            0xfbe32b14, 0x41e90706, 0x08e4608b, 0xd3f3c81c, 0x9afeaf91, 0x611d8485, 0x2810e308,
19436 +
            0xf3074b9f, 0xba0a2c12, 0x83d20e0c, 0xcadf6981, 0x11c8c116, 0x58c5a69b, 0xa3268d8f,
19437 +
            0xea2bea02, 0x313c4295, 0x78312518, 0xc23b090a, 0x8b366e87, 0x5021c610, 0x192ca19d,
19438 +
            0xe2cf8a89, 0xabc2ed04, 0x70d54593, 0x39d8221e, 0x036501af, 0x4a686622, 0x917fceb5,
19439 +
            0xd872a938, 0x2391822c, 0x6a9ce5a1, 0xb18b4d36, 0xf8862abb, 0x428c06a9, 0x0b816124,
19440 +
            0xd096c9b3, 0x999bae3e, 0x6278852a, 0x2b75e2a7, 0xf0624a30, 0xb96f2dbd, 0x80b70fa3,
19441 +
            0xc9ba682e, 0x12adc0b9, 0x5ba0a734, 0xa0438c20, 0xe94eebad, 0x3259433a, 0x7b5424b7,
19442 +
            0xc15e08a5, 0x88536f28, 0x5344c7bf, 0x1a49a032, 0xe1aa8b26, 0xa8a7ecab, 0x73b0443c,
19443 +
            0x3abd23b1, 0x06ca035e, 0x4fc764d3, 0x94d0cc44, 0xddddabc9, 0x263e80dd, 0x6f33e750,
19444 +
            0xb4244fc7, 0xfd29284a, 0x47230458, 0x0e2e63d5, 0xd539cb42, 0x9c34accf, 0x67d787db,
19445 +
            0x2edae056, 0xf5cd48c1, 0xbcc02f4c, 0x85180d52, 0xcc156adf, 0x1702c248, 0x5e0fa5c5,
19446 +
            0xa5ec8ed1, 0xece1e95c, 0x37f641cb, 0x7efb2646, 0xc4f10a54, 0x8dfc6dd9, 0x56ebc54e,
19447 +
            0x1fe6a2c3, 0xe40589d7, 0xad08ee5a, 0x761f46cd, 0x3f122140, 0x05af02f1, 0x4ca2657c,
19448 +
            0x97b5cdeb, 0xdeb8aa66, 0x255b8172, 0x6c56e6ff, 0xb7414e68, 0xfe4c29e5, 0x444605f7,
19449 +
            0x0d4b627a, 0xd65ccaed, 0x9f51ad60, 0x64b28674, 0x2dbfe1f9, 0xf6a8496e, 0xbfa52ee3,
19450 +
            0x867d0cfd, 0xcf706b70, 0x1467c3e7, 0x5d6aa46a, 0xa6898f7e, 0xef84e8f3, 0x34934064,
19451 +
            0x7d9e27e9, 0xc7940bfb, 0x8e996c76, 0x558ec4e1, 0x1c83a36c, 0xe7608878, 0xae6deff5,
19452 +
            0x757a4762, 0x3c7720ef, 0x0d9406bc, 0x44996131, 0x9f8ec9a6, 0xd683ae2b, 0x2d60853f,
19453 +
            0x646de2b2, 0xbf7a4a25, 0xf6772da8, 0x4c7d01ba, 0x05706637, 0xde67cea0, 0x976aa92d,
19454 +
            0x6c898239, 0x2584e5b4, 0xfe934d23, 0xb79e2aae, 0x8e4608b0, 0xc74b6f3d, 0x1c5cc7aa,
19455 +
            0x5551a027, 0xaeb28b33, 0xe7bfecbe, 0x3ca84429, 0x75a523a4, 0xcfaf0fb6, 0x86a2683b,
19456 +
            0x5db5c0ac, 0x14b8a721, 0xef5b8c35, 0xa656ebb8, 0x7d41432f, 0x344c24a2, 0x0ef10713,
19457 +
            0x47fc609e, 0x9cebc809, 0xd5e6af84, 0x2e058490, 0x6708e31d, 0xbc1f4b8a, 0xf5122c07,
19458 +
            0x4f180015, 0x06156798, 0xdd02cf0f, 0x940fa882, 0x6fec8396, 0x26e1e41b, 0xfdf64c8c,
19459 +
            0xb4fb2b01, 0x8d23091f, 0xc42e6e92, 0x1f39c605, 0x5634a188, 0xadd78a9c, 0xe4daed11,
19460 +
            0x3fcd4586, 0x76c0220b, 0xccca0e19, 0x85c76994, 0x5ed0c103, 0x17dda68e, 0xec3e8d9a,
19461 +
            0xa533ea17, 0x7e244280, 0x3729250d, 0x0b5e05e2, 0x4253626f, 0x9944caf8, 0xd049ad75,
19462 +
            0x2baa8661, 0x62a7e1ec, 0xb9b0497b, 0xf0bd2ef6, 0x4ab702e4, 0x03ba6569, 0xd8adcdfe,
19463 +
            0x91a0aa73, 0x6a438167, 0x234ee6ea, 0xf8594e7d, 0xb15429f0, 0x888c0bee, 0xc1816c63,
19464 +
            0x1a96c4f4, 0x539ba379, 0xa878886d, 0xe175efe0, 0x3a624777, 0x736f20fa, 0xc9650ce8,
19465 +
            0x80686b65, 0x5b7fc3f2, 0x1272a47f, 0xe9918f6b, 0xa09ce8e6, 0x7b8b4071, 0x328627fc,
19466 +
            0x083b044d, 0x413663c0, 0x9a21cb57, 0xd32cacda, 0x28cf87ce, 0x61c2e043, 0xbad548d4,
19467 +
            0xf3d82f59, 0x49d2034b, 0x00df64c6, 0xdbc8cc51, 0x92c5abdc, 0x692680c8, 0x202be745,
19468 +
            0xfb3c4fd2, 0xb231285f, 0x8be90a41, 0xc2e46dcc, 0x19f3c55b, 0x50fea2d6, 0xab1d89c2,
19469 +
            0xe210ee4f, 0x390746d8, 0x700a2155, 0xca000d47, 0x830d6aca, 0x581ac25d, 0x1117a5d0,
19470 +
            0xeaf48ec4, 0xa3f9e949, 0x78ee41de, 0x31e32653,
19471 +
        ],
19472 +
        [
19473 +
            0x00000000, 0x1b280d78, 0x36501af0, 0x2d781788, 0x6ca035e0, 0x77883898, 0x5af02f10,
19474 +
            0x41d82268, 0xd9406bc0, 0xc26866b8, 0xef107130, 0xf4387c48, 0xb5e05e20, 0xaec85358,
19475 +
            0x83b044d0, 0x989849a8, 0xb641ca37, 0xad69c74f, 0x8011d0c7, 0x9b39ddbf, 0xdae1ffd7,
19476 +
            0xc1c9f2af, 0xecb1e527, 0xf799e85f, 0x6f01a1f7, 0x7429ac8f, 0x5951bb07, 0x4279b67f,
19477 +
            0x03a19417, 0x1889996f, 0x35f18ee7, 0x2ed9839f, 0x684289d9, 0x736a84a1, 0x5e129329,
19478 +
            0x453a9e51, 0x04e2bc39, 0x1fcab141, 0x32b2a6c9, 0x299aabb1, 0xb102e219, 0xaa2aef61,
19479 +
            0x8752f8e9, 0x9c7af591, 0xdda2d7f9, 0xc68ada81, 0xebf2cd09, 0xf0dac071, 0xde0343ee,
19480 +
            0xc52b4e96, 0xe853591e, 0xf37b5466, 0xb2a3760e, 0xa98b7b76, 0x84f36cfe, 0x9fdb6186,
19481 +
            0x0743282e, 0x1c6b2556, 0x311332de, 0x2a3b3fa6, 0x6be31dce, 0x70cb10b6, 0x5db3073e,
19482 +
            0x469b0a46, 0xd08513b2, 0xcbad1eca, 0xe6d50942, 0xfdfd043a, 0xbc252652, 0xa70d2b2a,
19483 +
            0x8a753ca2, 0x915d31da, 0x09c57872, 0x12ed750a, 0x3f956282, 0x24bd6ffa, 0x65654d92,
19484 +
            0x7e4d40ea, 0x53355762, 0x481d5a1a, 0x66c4d985, 0x7decd4fd, 0x5094c375, 0x4bbcce0d,
19485 +
            0x0a64ec65, 0x114ce11d, 0x3c34f695, 0x271cfbed, 0xbf84b245, 0xa4acbf3d, 0x89d4a8b5,
19486 +
            0x92fca5cd, 0xd32487a5, 0xc80c8add, 0xe5749d55, 0xfe5c902d, 0xb8c79a6b, 0xa3ef9713,
19487 +
            0x8e97809b, 0x95bf8de3, 0xd467af8b, 0xcf4fa2f3, 0xe237b57b, 0xf91fb803, 0x6187f1ab,
19488 +
            0x7aaffcd3, 0x57d7eb5b, 0x4cffe623, 0x0d27c44b, 0x160fc933, 0x3b77debb, 0x205fd3c3,
19489 +
            0x0e86505c, 0x15ae5d24, 0x38d64aac, 0x23fe47d4, 0x622665bc, 0x790e68c4, 0x54767f4c,
19490 +
            0x4f5e7234, 0xd7c63b9c, 0xccee36e4, 0xe196216c, 0xfabe2c14, 0xbb660e7c, 0xa04e0304,
19491 +
            0x8d36148c, 0x961e19f4, 0xa5cb3ad3, 0xbee337ab, 0x939b2023, 0x88b32d5b, 0xc96b0f33,
19492 +
            0xd243024b, 0xff3b15c3, 0xe41318bb, 0x7c8b5113, 0x67a35c6b, 0x4adb4be3, 0x51f3469b,
19493 +
            0x102b64f3, 0x0b03698b, 0x267b7e03, 0x3d53737b, 0x138af0e4, 0x08a2fd9c, 0x25daea14,
19494 +
            0x3ef2e76c, 0x7f2ac504, 0x6402c87c, 0x497adff4, 0x5252d28c, 0xcaca9b24, 0xd1e2965c,
19495 +
            0xfc9a81d4, 0xe7b28cac, 0xa66aaec4, 0xbd42a3bc, 0x903ab434, 0x8b12b94c, 0xcd89b30a,
19496 +
            0xd6a1be72, 0xfbd9a9fa, 0xe0f1a482, 0xa12986ea, 0xba018b92, 0x97799c1a, 0x8c519162,
19497 +
            0x14c9d8ca, 0x0fe1d5b2, 0x2299c23a, 0x39b1cf42, 0x7869ed2a, 0x6341e052, 0x4e39f7da,
19498 +
            0x5511faa2, 0x7bc8793d, 0x60e07445, 0x4d9863cd, 0x56b06eb5, 0x17684cdd, 0x0c4041a5,
19499 +
            0x2138562d, 0x3a105b55, 0xa28812fd, 0xb9a01f85, 0x94d8080d, 0x8ff00575, 0xce28271d,
19500 +
            0xd5002a65, 0xf8783ded, 0xe3503095, 0x754e2961, 0x6e662419, 0x431e3391, 0x58363ee9,
19501 +
            0x19ee1c81, 0x02c611f9, 0x2fbe0671, 0x34960b09, 0xac0e42a1, 0xb7264fd9, 0x9a5e5851,
19502 +
            0x81765529, 0xc0ae7741, 0xdb867a39, 0xf6fe6db1, 0xedd660c9, 0xc30fe356, 0xd827ee2e,
19503 +
            0xf55ff9a6, 0xee77f4de, 0xafafd6b6, 0xb487dbce, 0x99ffcc46, 0x82d7c13e, 0x1a4f8896,
19504 +
            0x016785ee, 0x2c1f9266, 0x37379f1e, 0x76efbd76, 0x6dc7b00e, 0x40bfa786, 0x5b97aafe,
19505 +
            0x1d0ca0b8, 0x0624adc0, 0x2b5cba48, 0x3074b730, 0x71ac9558, 0x6a849820, 0x47fc8fa8,
19506 +
            0x5cd482d0, 0xc44ccb78, 0xdf64c600, 0xf21cd188, 0xe934dcf0, 0xa8ecfe98, 0xb3c4f3e0,
19507 +
            0x9ebce468, 0x8594e910, 0xab4d6a8f, 0xb06567f7, 0x9d1d707f, 0x86357d07, 0xc7ed5f6f,
19508 +
            0xdcc55217, 0xf1bd459f, 0xea9548e7, 0x720d014f, 0x69250c37, 0x445d1bbf, 0x5f7516c7,
19509 +
            0x1ead34af, 0x058539d7, 0x28fd2e5f, 0x33d52327,
19510 +
        ],
19511 +
        [
19512 +
            0x00000000, 0x4f576811, 0x9eaed022, 0xd1f9b833, 0x399cbdf3, 0x76cbd5e2, 0xa7326dd1,
19513 +
            0xe86505c0, 0x73397be6, 0x3c6e13f7, 0xed97abc4, 0xa2c0c3d5, 0x4aa5c615, 0x05f2ae04,
19514 +
            0xd40b1637, 0x9b5c7e26, 0xe672f7cc, 0xa9259fdd, 0x78dc27ee, 0x378b4fff, 0xdfee4a3f,
19515 +
            0x90b9222e, 0x41409a1d, 0x0e17f20c, 0x954b8c2a, 0xda1ce43b, 0x0be55c08, 0x44b23419,
19516 +
            0xacd731d9, 0xe38059c8, 0x3279e1fb, 0x7d2e89ea, 0xc824f22f, 0x87739a3e, 0x568a220d,
19517 +
            0x19dd4a1c, 0xf1b84fdc, 0xbeef27cd, 0x6f169ffe, 0x2041f7ef, 0xbb1d89c9, 0xf44ae1d8,
19518 +
            0x25b359eb, 0x6ae431fa, 0x8281343a, 0xcdd65c2b, 0x1c2fe418, 0x53788c09, 0x2e5605e3,
19519 +
            0x61016df2, 0xb0f8d5c1, 0xffafbdd0, 0x17cab810, 0x589dd001, 0x89646832, 0xc6330023,
19520 +
            0x5d6f7e05, 0x12381614, 0xc3c1ae27, 0x8c96c636, 0x64f3c3f6, 0x2ba4abe7, 0xfa5d13d4,
19521 +
            0xb50a7bc5, 0x9488f9e9, 0xdbdf91f8, 0x0a2629cb, 0x457141da, 0xad14441a, 0xe2432c0b,
19522 +
            0x33ba9438, 0x7cedfc29, 0xe7b1820f, 0xa8e6ea1e, 0x791f522d, 0x36483a3c, 0xde2d3ffc,
19523 +
            0x917a57ed, 0x4083efde, 0x0fd487cf, 0x72fa0e25, 0x3dad6634, 0xec54de07, 0xa303b616,
19524 +
            0x4b66b3d6, 0x0431dbc7, 0xd5c863f4, 0x9a9f0be5, 0x01c375c3, 0x4e941dd2, 0x9f6da5e1,
19525 +
            0xd03acdf0, 0x385fc830, 0x7708a021, 0xa6f11812, 0xe9a67003, 0x5cac0bc6, 0x13fb63d7,
19526 +
            0xc202dbe4, 0x8d55b3f5, 0x6530b635, 0x2a67de24, 0xfb9e6617, 0xb4c90e06, 0x2f957020,
19527 +
            0x60c21831, 0xb13ba002, 0xfe6cc813, 0x1609cdd3, 0x595ea5c2, 0x88a71df1, 0xc7f075e0,
19528 +
            0xbadefc0a, 0xf589941b, 0x24702c28, 0x6b274439, 0x834241f9, 0xcc1529e8, 0x1dec91db,
19529 +
            0x52bbf9ca, 0xc9e787ec, 0x86b0effd, 0x574957ce, 0x181e3fdf, 0xf07b3a1f, 0xbf2c520e,
19530 +
            0x6ed5ea3d, 0x2182822c, 0x2dd0ee65, 0x62878674, 0xb37e3e47, 0xfc295656, 0x144c5396,
19531 +
            0x5b1b3b87, 0x8ae283b4, 0xc5b5eba5, 0x5ee99583, 0x11befd92, 0xc04745a1, 0x8f102db0,
19532 +
            0x67752870, 0x28224061, 0xf9dbf852, 0xb68c9043, 0xcba219a9, 0x84f571b8, 0x550cc98b,
19533 +
            0x1a5ba19a, 0xf23ea45a, 0xbd69cc4b, 0x6c907478, 0x23c71c69, 0xb89b624f, 0xf7cc0a5e,
19534 +
            0x2635b26d, 0x6962da7c, 0x8107dfbc, 0xce50b7ad, 0x1fa90f9e, 0x50fe678f, 0xe5f41c4a,
19535 +
            0xaaa3745b, 0x7b5acc68, 0x340da479, 0xdc68a1b9, 0x933fc9a8, 0x42c6719b, 0x0d91198a,
19536 +
            0x96cd67ac, 0xd99a0fbd, 0x0863b78e, 0x4734df9f, 0xaf51da5f, 0xe006b24e, 0x31ff0a7d,
19537 +
            0x7ea8626c, 0x0386eb86, 0x4cd18397, 0x9d283ba4, 0xd27f53b5, 0x3a1a5675, 0x754d3e64,
19538 +
            0xa4b48657, 0xebe3ee46, 0x70bf9060, 0x3fe8f871, 0xee114042, 0xa1462853, 0x49232d93,
19539 +
            0x06744582, 0xd78dfdb1, 0x98da95a0, 0xb958178c, 0xf60f7f9d, 0x27f6c7ae, 0x68a1afbf,
19540 +
            0x80c4aa7f, 0xcf93c26e, 0x1e6a7a5d, 0x513d124c, 0xca616c6a, 0x8536047b, 0x54cfbc48,
19541 +
            0x1b98d459, 0xf3fdd199, 0xbcaab988, 0x6d5301bb, 0x220469aa, 0x5f2ae040, 0x107d8851,
19542 +
            0xc1843062, 0x8ed35873, 0x66b65db3, 0x29e135a2, 0xf8188d91, 0xb74fe580, 0x2c139ba6,
19543 +
            0x6344f3b7, 0xb2bd4b84, 0xfdea2395, 0x158f2655, 0x5ad84e44, 0x8b21f677, 0xc4769e66,
19544 +
            0x717ce5a3, 0x3e2b8db2, 0xefd23581, 0xa0855d90, 0x48e05850, 0x07b73041, 0xd64e8872,
19545 +
            0x9919e063, 0x02459e45, 0x4d12f654, 0x9ceb4e67, 0xd3bc2676, 0x3bd923b6, 0x748e4ba7,
19546 +
            0xa577f394, 0xea209b85, 0x970e126f, 0xd8597a7e, 0x09a0c24d, 0x46f7aa5c, 0xae92af9c,
19547 +
            0xe1c5c78d, 0x303c7fbe, 0x7f6b17af, 0xe4376989, 0xab600198, 0x7a99b9ab, 0x35ced1ba,
19548 +
            0xddabd47a, 0x92fcbc6b, 0x43050458, 0x0c526c49,
19549 +
        ],
19550 +
        [
19551 +
            0x00000000, 0x5ba1dcca, 0xb743b994, 0xece2655e, 0x6a466e9f, 0x31e7b255, 0xdd05d70b,
19552 +
            0x86a40bc1, 0xd48cdd3e, 0x8f2d01f4, 0x63cf64aa, 0x386eb860, 0xbecab3a1, 0xe56b6f6b,
19553 +
            0x09890a35, 0x5228d6ff, 0xadd8a7cb, 0xf6797b01, 0x1a9b1e5f, 0x413ac295, 0xc79ec954,
19554 +
            0x9c3f159e, 0x70dd70c0, 0x2b7cac0a, 0x79547af5, 0x22f5a63f, 0xce17c361, 0x95b61fab,
19555 +
            0x1312146a, 0x48b3c8a0, 0xa451adfe, 0xfff07134, 0x5f705221, 0x04d18eeb, 0xe833ebb5,
19556 +
            0xb392377f, 0x35363cbe, 0x6e97e074, 0x8275852a, 0xd9d459e0, 0x8bfc8f1f, 0xd05d53d5,
19557 +
            0x3cbf368b, 0x671eea41, 0xe1bae180, 0xba1b3d4a, 0x56f95814, 0x0d5884de, 0xf2a8f5ea,
19558 +
            0xa9092920, 0x45eb4c7e, 0x1e4a90b4, 0x98ee9b75, 0xc34f47bf, 0x2fad22e1, 0x740cfe2b,
19559 +
            0x262428d4, 0x7d85f41e, 0x91679140, 0xcac64d8a, 0x4c62464b, 0x17c39a81, 0xfb21ffdf,
19560 +
            0xa0802315, 0xbee0a442, 0xe5417888, 0x09a31dd6, 0x5202c11c, 0xd4a6cadd, 0x8f071617,
19561 +
            0x63e57349, 0x3844af83, 0x6a6c797c, 0x31cda5b6, 0xdd2fc0e8, 0x868e1c22, 0x002a17e3,
19562 +
            0x5b8bcb29, 0xb769ae77, 0xecc872bd, 0x13380389, 0x4899df43, 0xa47bba1d, 0xffda66d7,
19563 +
            0x797e6d16, 0x22dfb1dc, 0xce3dd482, 0x959c0848, 0xc7b4deb7, 0x9c15027d, 0x70f76723,
19564 +
            0x2b56bbe9, 0xadf2b028, 0xf6536ce2, 0x1ab109bc, 0x4110d576, 0xe190f663, 0xba312aa9,
19565 +
            0x56d34ff7, 0x0d72933d, 0x8bd698fc, 0xd0774436, 0x3c952168, 0x6734fda2, 0x351c2b5d,
19566 +
            0x6ebdf797, 0x825f92c9, 0xd9fe4e03, 0x5f5a45c2, 0x04fb9908, 0xe819fc56, 0xb3b8209c,
19567 +
            0x4c4851a8, 0x17e98d62, 0xfb0be83c, 0xa0aa34f6, 0x260e3f37, 0x7dafe3fd, 0x914d86a3,
19568 +
            0xcaec5a69, 0x98c48c96, 0xc365505c, 0x2f873502, 0x7426e9c8, 0xf282e209, 0xa9233ec3,
19569 +
            0x45c15b9d, 0x1e608757, 0x79005533, 0x22a189f9, 0xce43eca7, 0x95e2306d, 0x13463bac,
19570 +
            0x48e7e766, 0xa4058238, 0xffa45ef2, 0xad8c880d, 0xf62d54c7, 0x1acf3199, 0x416eed53,
19571 +
            0xc7cae692, 0x9c6b3a58, 0x70895f06, 0x2b2883cc, 0xd4d8f2f8, 0x8f792e32, 0x639b4b6c,
19572 +
            0x383a97a6, 0xbe9e9c67, 0xe53f40ad, 0x09dd25f3, 0x527cf939, 0x00542fc6, 0x5bf5f30c,
19573 +
            0xb7179652, 0xecb64a98, 0x6a124159, 0x31b39d93, 0xdd51f8cd, 0x86f02407, 0x26700712,
19574 +
            0x7dd1dbd8, 0x9133be86, 0xca92624c, 0x4c36698d, 0x1797b547, 0xfb75d019, 0xa0d40cd3,
19575 +
            0xf2fcda2c, 0xa95d06e6, 0x45bf63b8, 0x1e1ebf72, 0x98bab4b3, 0xc31b6879, 0x2ff90d27,
19576 +
            0x7458d1ed, 0x8ba8a0d9, 0xd0097c13, 0x3ceb194d, 0x674ac587, 0xe1eece46, 0xba4f128c,
19577 +
            0x56ad77d2, 0x0d0cab18, 0x5f247de7, 0x0485a12d, 0xe867c473, 0xb3c618b9, 0x35621378,
19578 +
            0x6ec3cfb2, 0x8221aaec, 0xd9807626, 0xc7e0f171, 0x9c412dbb, 0x70a348e5, 0x2b02942f,
19579 +
            0xada69fee, 0xf6074324, 0x1ae5267a, 0x4144fab0, 0x136c2c4f, 0x48cdf085, 0xa42f95db,
19580 +
            0xff8e4911, 0x792a42d0, 0x228b9e1a, 0xce69fb44, 0x95c8278e, 0x6a3856ba, 0x31998a70,
19581 +
            0xdd7bef2e, 0x86da33e4, 0x007e3825, 0x5bdfe4ef, 0xb73d81b1, 0xec9c5d7b, 0xbeb48b84,
19582 +
            0xe515574e, 0x09f73210, 0x5256eeda, 0xd4f2e51b, 0x8f5339d1, 0x63b15c8f, 0x38108045,
19583 +
            0x9890a350, 0xc3317f9a, 0x2fd31ac4, 0x7472c60e, 0xf2d6cdcf, 0xa9771105, 0x4595745b,
19584 +
            0x1e34a891, 0x4c1c7e6e, 0x17bda2a4, 0xfb5fc7fa, 0xa0fe1b30, 0x265a10f1, 0x7dfbcc3b,
19585 +
            0x9119a965, 0xcab875af, 0x3548049b, 0x6ee9d851, 0x820bbd0f, 0xd9aa61c5, 0x5f0e6a04,
19586 +
            0x04afb6ce, 0xe84dd390, 0xb3ec0f5a, 0xe1c4d9a5, 0xba65056f, 0x56876031, 0x0d26bcfb,
19587 +
            0x8b82b73a, 0xd0236bf0, 0x3cc10eae, 0x6760d264,
19588 +
        ],
19589 +
        [
19590 +
            0x00000000, 0xf200aa66, 0xe0c0497b, 0x12c0e31d, 0xc5418f41, 0x37412527, 0x2581c63a,
19591 +
            0xd7816c5c, 0x8e420335, 0x7c42a953, 0x6e824a4e, 0x9c82e028, 0x4b038c74, 0xb9032612,
19592 +
            0xabc3c50f, 0x59c36f69, 0x18451bdd, 0xea45b1bb, 0xf88552a6, 0x0a85f8c0, 0xdd04949c,
19593 +
            0x2f043efa, 0x3dc4dde7, 0xcfc47781, 0x960718e8, 0x6407b28e, 0x76c75193, 0x84c7fbf5,
19594 +
            0x534697a9, 0xa1463dcf, 0xb386ded2, 0x418674b4, 0x308a37ba, 0xc28a9ddc, 0xd04a7ec1,
19595 +
            0x224ad4a7, 0xf5cbb8fb, 0x07cb129d, 0x150bf180, 0xe70b5be6, 0xbec8348f, 0x4cc89ee9,
19596 +
            0x5e087df4, 0xac08d792, 0x7b89bbce, 0x898911a8, 0x9b49f2b5, 0x694958d3, 0x28cf2c67,
19597 +
            0xdacf8601, 0xc80f651c, 0x3a0fcf7a, 0xed8ea326, 0x1f8e0940, 0x0d4eea5d, 0xff4e403b,
19598 +
            0xa68d2f52, 0x548d8534, 0x464d6629, 0xb44dcc4f, 0x63cca013, 0x91cc0a75, 0x830ce968,
19599 +
            0x710c430e, 0x61146f74, 0x9314c512, 0x81d4260f, 0x73d48c69, 0xa455e035, 0x56554a53,
19600 +
            0x4495a94e, 0xb6950328, 0xef566c41, 0x1d56c627, 0x0f96253a, 0xfd968f5c, 0x2a17e300,
19601 +
            0xd8174966, 0xcad7aa7b, 0x38d7001d, 0x795174a9, 0x8b51decf, 0x99913dd2, 0x6b9197b4,
19602 +
            0xbc10fbe8, 0x4e10518e, 0x5cd0b293, 0xaed018f5, 0xf713779c, 0x0513ddfa, 0x17d33ee7,
19603 +
            0xe5d39481, 0x3252f8dd, 0xc05252bb, 0xd292b1a6, 0x20921bc0, 0x519e58ce, 0xa39ef2a8,
19604 +
            0xb15e11b5, 0x435ebbd3, 0x94dfd78f, 0x66df7de9, 0x741f9ef4, 0x861f3492, 0xdfdc5bfb,
19605 +
            0x2ddcf19d, 0x3f1c1280, 0xcd1cb8e6, 0x1a9dd4ba, 0xe89d7edc, 0xfa5d9dc1, 0x085d37a7,
19606 +
            0x49db4313, 0xbbdbe975, 0xa91b0a68, 0x5b1ba00e, 0x8c9acc52, 0x7e9a6634, 0x6c5a8529,
19607 +
            0x9e5a2f4f, 0xc7994026, 0x3599ea40, 0x2759095d, 0xd559a33b, 0x02d8cf67, 0xf0d86501,
19608 +
            0xe218861c, 0x10182c7a, 0xc228dee8, 0x3028748e, 0x22e89793, 0xd0e83df5, 0x076951a9,
19609 +
            0xf569fbcf, 0xe7a918d2, 0x15a9b2b4, 0x4c6adddd, 0xbe6a77bb, 0xacaa94a6, 0x5eaa3ec0,
19610 +
            0x892b529c, 0x7b2bf8fa, 0x69eb1be7, 0x9bebb181, 0xda6dc535, 0x286d6f53, 0x3aad8c4e,
19611 +
            0xc8ad2628, 0x1f2c4a74, 0xed2ce012, 0xffec030f, 0x0deca969, 0x542fc600, 0xa62f6c66,
19612 +
            0xb4ef8f7b, 0x46ef251d, 0x916e4941, 0x636ee327, 0x71ae003a, 0x83aeaa5c, 0xf2a2e952,
19613 +
            0x00a24334, 0x1262a029, 0xe0620a4f, 0x37e36613, 0xc5e3cc75, 0xd7232f68, 0x2523850e,
19614 +
            0x7ce0ea67, 0x8ee04001, 0x9c20a31c, 0x6e20097a, 0xb9a16526, 0x4ba1cf40, 0x59612c5d,
19615 +
            0xab61863b, 0xeae7f28f, 0x18e758e9, 0x0a27bbf4, 0xf8271192, 0x2fa67dce, 0xdda6d7a8,
19616 +
            0xcf6634b5, 0x3d669ed3, 0x64a5f1ba, 0x96a55bdc, 0x8465b8c1, 0x766512a7, 0xa1e47efb,
19617 +
            0x53e4d49d, 0x41243780, 0xb3249de6, 0xa33cb19c, 0x513c1bfa, 0x43fcf8e7, 0xb1fc5281,
19618 +
            0x667d3edd, 0x947d94bb, 0x86bd77a6, 0x74bdddc0, 0x2d7eb2a9, 0xdf7e18cf, 0xcdbefbd2,
19619 +
            0x3fbe51b4, 0xe83f3de8, 0x1a3f978e, 0x08ff7493, 0xfaffdef5, 0xbb79aa41, 0x49790027,
19620 +
            0x5bb9e33a, 0xa9b9495c, 0x7e382500, 0x8c388f66, 0x9ef86c7b, 0x6cf8c61d, 0x353ba974,
19621 +
            0xc73b0312, 0xd5fbe00f, 0x27fb4a69, 0xf07a2635, 0x027a8c53, 0x10ba6f4e, 0xe2bac528,
19622 +
            0x93b68626, 0x61b62c40, 0x7376cf5d, 0x8176653b, 0x56f70967, 0xa4f7a301, 0xb637401c,
19623 +
            0x4437ea7a, 0x1df48513, 0xeff42f75, 0xfd34cc68, 0x0f34660e, 0xd8b50a52, 0x2ab5a034,
19624 +
            0x38754329, 0xca75e94f, 0x8bf39dfb, 0x79f3379d, 0x6b33d480, 0x99337ee6, 0x4eb212ba,
19625 +
            0xbcb2b8dc, 0xae725bc1, 0x5c72f1a7, 0x05b19ece, 0xf7b134a8, 0xe571d7b5, 0x17717dd3,
19626 +
            0xc0f0118f, 0x32f0bbe9, 0x203058f4, 0xd230f292,
19627 +
        ],
19628 +
        [
19629 +
            0x00000000, 0x8090a067, 0x05e05d79, 0x8570fd1e, 0x0bc0baf2, 0x8b501a95, 0x0e20e78b,
19630 +
            0x8eb047ec, 0x178175e4, 0x9711d583, 0x1261289d, 0x92f188fa, 0x1c41cf16, 0x9cd16f71,
19631 +
            0x19a1926f, 0x99313208, 0x2f02ebc8, 0xaf924baf, 0x2ae2b6b1, 0xaa7216d6, 0x24c2513a,
19632 +
            0xa452f15d, 0x21220c43, 0xa1b2ac24, 0x38839e2c, 0xb8133e4b, 0x3d63c355, 0xbdf36332,
19633 +
            0x334324de, 0xb3d384b9, 0x36a379a7, 0xb633d9c0, 0x5e05d790, 0xde9577f7, 0x5be58ae9,
19634 +
            0xdb752a8e, 0x55c56d62, 0xd555cd05, 0x5025301b, 0xd0b5907c, 0x4984a274, 0xc9140213,
19635 +
            0x4c64ff0d, 0xccf45f6a, 0x42441886, 0xc2d4b8e1, 0x47a445ff, 0xc734e598, 0x71073c58,
19636 +
            0xf1979c3f, 0x74e76121, 0xf477c146, 0x7ac786aa, 0xfa5726cd, 0x7f27dbd3, 0xffb77bb4,
19637 +
            0x668649bc, 0xe616e9db, 0x636614c5, 0xe3f6b4a2, 0x6d46f34e, 0xedd65329, 0x68a6ae37,
19638 +
            0xe8360e50, 0xbc0baf20, 0x3c9b0f47, 0xb9ebf259, 0x397b523e, 0xb7cb15d2, 0x375bb5b5,
19639 +
            0xb22b48ab, 0x32bbe8cc, 0xab8adac4, 0x2b1a7aa3, 0xae6a87bd, 0x2efa27da, 0xa04a6036,
19640 +
            0x20dac051, 0xa5aa3d4f, 0x253a9d28, 0x930944e8, 0x1399e48f, 0x96e91991, 0x1679b9f6,
19641 +
            0x98c9fe1a, 0x18595e7d, 0x9d29a363, 0x1db90304, 0x8488310c, 0x0418916b, 0x81686c75,
19642 +
            0x01f8cc12, 0x8f488bfe, 0x0fd82b99, 0x8aa8d687, 0x0a3876e0, 0xe20e78b0, 0x629ed8d7,
19643 +
            0xe7ee25c9, 0x677e85ae, 0xe9cec242, 0x695e6225, 0xec2e9f3b, 0x6cbe3f5c, 0xf58f0d54,
19644 +
            0x751fad33, 0xf06f502d, 0x70fff04a, 0xfe4fb7a6, 0x7edf17c1, 0xfbafeadf, 0x7b3f4ab8,
19645 +
            0xcd0c9378, 0x4d9c331f, 0xc8ecce01, 0x487c6e66, 0xc6cc298a, 0x465c89ed, 0xc32c74f3,
19646 +
            0x43bcd494, 0xda8de69c, 0x5a1d46fb, 0xdf6dbbe5, 0x5ffd1b82, 0xd14d5c6e, 0x51ddfc09,
19647 +
            0xd4ad0117, 0x543da170, 0x7cd643f7, 0xfc46e390, 0x79361e8e, 0xf9a6bee9, 0x7716f905,
19648 +
            0xf7865962, 0x72f6a47c, 0xf266041b, 0x6b573613, 0xebc79674, 0x6eb76b6a, 0xee27cb0d,
19649 +
            0x60978ce1, 0xe0072c86, 0x6577d198, 0xe5e771ff, 0x53d4a83f, 0xd3440858, 0x5634f546,
19650 +
            0xd6a45521, 0x581412cd, 0xd884b2aa, 0x5df44fb4, 0xdd64efd3, 0x4455dddb, 0xc4c57dbc,
19651 +
            0x41b580a2, 0xc12520c5, 0x4f956729, 0xcf05c74e, 0x4a753a50, 0xcae59a37, 0x22d39467,
19652 +
            0xa2433400, 0x2733c91e, 0xa7a36979, 0x29132e95, 0xa9838ef2, 0x2cf373ec, 0xac63d38b,
19653 +
            0x3552e183, 0xb5c241e4, 0x30b2bcfa, 0xb0221c9d, 0x3e925b71, 0xbe02fb16, 0x3b720608,
19654 +
            0xbbe2a66f, 0x0dd17faf, 0x8d41dfc8, 0x083122d6, 0x88a182b1, 0x0611c55d, 0x8681653a,
19655 +
            0x03f19824, 0x83613843, 0x1a500a4b, 0x9ac0aa2c, 0x1fb05732, 0x9f20f755, 0x1190b0b9,
19656 +
            0x910010de, 0x1470edc0, 0x94e04da7, 0xc0ddecd7, 0x404d4cb0, 0xc53db1ae, 0x45ad11c9,
19657 +
            0xcb1d5625, 0x4b8df642, 0xcefd0b5c, 0x4e6dab3b, 0xd75c9933, 0x57cc3954, 0xd2bcc44a,
19658 +
            0x522c642d, 0xdc9c23c1, 0x5c0c83a6, 0xd97c7eb8, 0x59ecdedf, 0xefdf071f, 0x6f4fa778,
19659 +
            0xea3f5a66, 0x6aaffa01, 0xe41fbded, 0x648f1d8a, 0xe1ffe094, 0x616f40f3, 0xf85e72fb,
19660 +
            0x78ced29c, 0xfdbe2f82, 0x7d2e8fe5, 0xf39ec809, 0x730e686e, 0xf67e9570, 0x76ee3517,
19661 +
            0x9ed83b47, 0x1e489b20, 0x9b38663e, 0x1ba8c659, 0x951881b5, 0x158821d2, 0x90f8dccc,
19662 +
            0x10687cab, 0x89594ea3, 0x09c9eec4, 0x8cb913da, 0x0c29b3bd, 0x8299f451, 0x02095436,
19663 +
            0x8779a928, 0x07e9094f, 0xb1dad08f, 0x314a70e8, 0xb43a8df6, 0x34aa2d91, 0xba1a6a7d,
19664 +
            0x3a8aca1a, 0xbffa3704, 0x3f6a9763, 0xa65ba56b, 0x26cb050c, 0xa3bbf812, 0x232b5875,
19665 +
            0xad9b1f99, 0x2d0bbffe, 0xa87b42e0, 0x28ebe287,
19666 +
        ],
19667 +
        [
19668 +
            0x00000000, 0xf9ac87ee, 0xf798126b, 0x0e349585, 0xebf13961, 0x125dbe8f, 0x1c692b0a,
19669 +
            0xe5c5ace4, 0xd3236f75, 0x2a8fe89b, 0x24bb7d1e, 0xdd17faf0, 0x38d25614, 0xc17ed1fa,
19670 +
            0xcf4a447f, 0x36e6c391, 0xa287c35d, 0x5b2b44b3, 0x551fd136, 0xacb356d8, 0x4976fa3c,
19671 +
            0xb0da7dd2, 0xbeeee857, 0x47426fb9, 0x71a4ac28, 0x88082bc6, 0x863cbe43, 0x7f9039ad,
19672 +
            0x9a559549, 0x63f912a7, 0x6dcd8722, 0x946100cc, 0x41ce9b0d, 0xb8621ce3, 0xb6568966,
19673 +
            0x4ffa0e88, 0xaa3fa26c, 0x53932582, 0x5da7b007, 0xa40b37e9, 0x92edf478, 0x6b417396,
19674 +
            0x6575e613, 0x9cd961fd, 0x791ccd19, 0x80b04af7, 0x8e84df72, 0x7728589c, 0xe3495850,
19675 +
            0x1ae5dfbe, 0x14d14a3b, 0xed7dcdd5, 0x08b86131, 0xf114e6df, 0xff20735a, 0x068cf4b4,
19676 +
            0x306a3725, 0xc9c6b0cb, 0xc7f2254e, 0x3e5ea2a0, 0xdb9b0e44, 0x223789aa, 0x2c031c2f,
19677 +
            0xd5af9bc1, 0x839d361a, 0x7a31b1f4, 0x74052471, 0x8da9a39f, 0x686c0f7b, 0x91c08895,
19678 +
            0x9ff41d10, 0x66589afe, 0x50be596f, 0xa912de81, 0xa7264b04, 0x5e8accea, 0xbb4f600e,
19679 +
            0x42e3e7e0, 0x4cd77265, 0xb57bf58b, 0x211af547, 0xd8b672a9, 0xd682e72c, 0x2f2e60c2,
19680 +
            0xcaebcc26, 0x33474bc8, 0x3d73de4d, 0xc4df59a3, 0xf2399a32, 0x0b951ddc, 0x05a18859,
19681 +
            0xfc0d0fb7, 0x19c8a353, 0xe06424bd, 0xee50b138, 0x17fc36d6, 0xc253ad17, 0x3bff2af9,
19682 +
            0x35cbbf7c, 0xcc673892, 0x29a29476, 0xd00e1398, 0xde3a861d, 0x279601f3, 0x1170c262,
19683 +
            0xe8dc458c, 0xe6e8d009, 0x1f4457e7, 0xfa81fb03, 0x032d7ced, 0x0d19e968, 0xf4b56e86,
19684 +
            0x60d46e4a, 0x9978e9a4, 0x974c7c21, 0x6ee0fbcf, 0x8b25572b, 0x7289d0c5, 0x7cbd4540,
19685 +
            0x8511c2ae, 0xb3f7013f, 0x4a5b86d1, 0x446f1354, 0xbdc394ba, 0x5806385e, 0xa1aabfb0,
19686 +
            0xaf9e2a35, 0x5632addb, 0x03fb7183, 0xfa57f66d, 0xf46363e8, 0x0dcfe406, 0xe80a48e2,
19687 +
            0x11a6cf0c, 0x1f925a89, 0xe63edd67, 0xd0d81ef6, 0x29749918, 0x27400c9d, 0xdeec8b73,
19688 +
            0x3b292797, 0xc285a079, 0xccb135fc, 0x351db212, 0xa17cb2de, 0x58d03530, 0x56e4a0b5,
19689 +
            0xaf48275b, 0x4a8d8bbf, 0xb3210c51, 0xbd1599d4, 0x44b91e3a, 0x725fddab, 0x8bf35a45,
19690 +
            0x85c7cfc0, 0x7c6b482e, 0x99aee4ca, 0x60026324, 0x6e36f6a1, 0x979a714f, 0x4235ea8e,
19691 +
            0xbb996d60, 0xb5adf8e5, 0x4c017f0b, 0xa9c4d3ef, 0x50685401, 0x5e5cc184, 0xa7f0466a,
19692 +
            0x911685fb, 0x68ba0215, 0x668e9790, 0x9f22107e, 0x7ae7bc9a, 0x834b3b74, 0x8d7faef1,
19693 +
            0x74d3291f, 0xe0b229d3, 0x191eae3d, 0x172a3bb8, 0xee86bc56, 0x0b4310b2, 0xf2ef975c,
19694 +
            0xfcdb02d9, 0x05778537, 0x339146a6, 0xca3dc148, 0xc40954cd, 0x3da5d323, 0xd8607fc7,
19695 +
            0x21ccf829, 0x2ff86dac, 0xd654ea42, 0x80664799, 0x79cac077, 0x77fe55f2, 0x8e52d21c,
19696 +
            0x6b977ef8, 0x923bf916, 0x9c0f6c93, 0x65a3eb7d, 0x534528ec, 0xaae9af02, 0xa4dd3a87,
19697 +
            0x5d71bd69, 0xb8b4118d, 0x41189663, 0x4f2c03e6, 0xb6808408, 0x22e184c4, 0xdb4d032a,
19698 +
            0xd57996af, 0x2cd51141, 0xc910bda5, 0x30bc3a4b, 0x3e88afce, 0xc7242820, 0xf1c2ebb1,
19699 +
            0x086e6c5f, 0x065af9da, 0xfff67e34, 0x1a33d2d0, 0xe39f553e, 0xedabc0bb, 0x14074755,
19700 +
            0xc1a8dc94, 0x38045b7a, 0x3630ceff, 0xcf9c4911, 0x2a59e5f5, 0xd3f5621b, 0xddc1f79e,
19701 +
            0x246d7070, 0x128bb3e1, 0xeb27340f, 0xe513a18a, 0x1cbf2664, 0xf97a8a80, 0x00d60d6e,
19702 +
            0x0ee298eb, 0xf74e1f05, 0x632f1fc9, 0x9a839827, 0x94b70da2, 0x6d1b8a4c, 0x88de26a8,
19703 +
            0x7172a146, 0x7f4634c3, 0x86eab32d, 0xb00c70bc, 0x49a0f752, 0x479462d7, 0xbe38e539,
19704 +
            0x5bfd49dd, 0xa251ce33, 0xac655bb6, 0x55c9dc58,
19705 +
        ],
19706 +
        [
19707 +
            0x00000000, 0x07f6e306, 0x0fedc60c, 0x081b250a, 0x1fdb8c18, 0x182d6f1e, 0x10364a14,
19708 +
            0x17c0a912, 0x3fb71830, 0x3841fb36, 0x305ade3c, 0x37ac3d3a, 0x206c9428, 0x279a772e,
19709 +
            0x2f815224, 0x2877b122, 0x7f6e3060, 0x7898d366, 0x7083f66c, 0x7775156a, 0x60b5bc78,
19710 +
            0x67435f7e, 0x6f587a74, 0x68ae9972, 0x40d92850, 0x472fcb56, 0x4f34ee5c, 0x48c20d5a,
19711 +
            0x5f02a448, 0x58f4474e, 0x50ef6244, 0x57198142, 0xfedc60c0, 0xf92a83c6, 0xf131a6cc,
19712 +
            0xf6c745ca, 0xe107ecd8, 0xe6f10fde, 0xeeea2ad4, 0xe91cc9d2, 0xc16b78f0, 0xc69d9bf6,
19713 +
            0xce86befc, 0xc9705dfa, 0xdeb0f4e8, 0xd94617ee, 0xd15d32e4, 0xd6abd1e2, 0x81b250a0,
19714 +
            0x8644b3a6, 0x8e5f96ac, 0x89a975aa, 0x9e69dcb8, 0x999f3fbe, 0x91841ab4, 0x9672f9b2,
19715 +
            0xbe054890, 0xb9f3ab96, 0xb1e88e9c, 0xb61e6d9a, 0xa1dec488, 0xa628278e, 0xae330284,
19716 +
            0xa9c5e182, 0xf979dc37, 0xfe8f3f31, 0xf6941a3b, 0xf162f93d, 0xe6a2502f, 0xe154b329,
19717 +
            0xe94f9623, 0xeeb97525, 0xc6cec407, 0xc1382701, 0xc923020b, 0xced5e10d, 0xd915481f,
19718 +
            0xdee3ab19, 0xd6f88e13, 0xd10e6d15, 0x8617ec57, 0x81e10f51, 0x89fa2a5b, 0x8e0cc95d,
19719 +
            0x99cc604f, 0x9e3a8349, 0x9621a643, 0x91d74545, 0xb9a0f467, 0xbe561761, 0xb64d326b,
19720 +
            0xb1bbd16d, 0xa67b787f, 0xa18d9b79, 0xa996be73, 0xae605d75, 0x07a5bcf7, 0x00535ff1,
19721 +
            0x08487afb, 0x0fbe99fd, 0x187e30ef, 0x1f88d3e9, 0x1793f6e3, 0x106515e5, 0x3812a4c7,
19722 +
            0x3fe447c1, 0x37ff62cb, 0x300981cd, 0x27c928df, 0x203fcbd9, 0x2824eed3, 0x2fd20dd5,
19723 +
            0x78cb8c97, 0x7f3d6f91, 0x77264a9b, 0x70d0a99d, 0x6710008f, 0x60e6e389, 0x68fdc683,
19724 +
            0x6f0b2585, 0x477c94a7, 0x408a77a1, 0x489152ab, 0x4f67b1ad, 0x58a718bf, 0x5f51fbb9,
19725 +
            0x574adeb3, 0x50bc3db5, 0xf632a5d9, 0xf1c446df, 0xf9df63d5, 0xfe2980d3, 0xe9e929c1,
19726 +
            0xee1fcac7, 0xe604efcd, 0xe1f20ccb, 0xc985bde9, 0xce735eef, 0xc6687be5, 0xc19e98e3,
19727 +
            0xd65e31f1, 0xd1a8d2f7, 0xd9b3f7fd, 0xde4514fb, 0x895c95b9, 0x8eaa76bf, 0x86b153b5,
19728 +
            0x8147b0b3, 0x968719a1, 0x9171faa7, 0x996adfad, 0x9e9c3cab, 0xb6eb8d89, 0xb11d6e8f,
19729 +
            0xb9064b85, 0xbef0a883, 0xa9300191, 0xaec6e297, 0xa6ddc79d, 0xa12b249b, 0x08eec519,
19730 +
            0x0f18261f, 0x07030315, 0x00f5e013, 0x17354901, 0x10c3aa07, 0x18d88f0d, 0x1f2e6c0b,
19731 +
            0x3759dd29, 0x30af3e2f, 0x38b41b25, 0x3f42f823, 0x28825131, 0x2f74b237, 0x276f973d,
19732 +
            0x2099743b, 0x7780f579, 0x7076167f, 0x786d3375, 0x7f9bd073, 0x685b7961, 0x6fad9a67,
19733 +
            0x67b6bf6d, 0x60405c6b, 0x4837ed49, 0x4fc10e4f, 0x47da2b45, 0x402cc843, 0x57ec6151,
19734 +
            0x501a8257, 0x5801a75d, 0x5ff7445b, 0x0f4b79ee, 0x08bd9ae8, 0x00a6bfe2, 0x07505ce4,
19735 +
            0x1090f5f6, 0x176616f0, 0x1f7d33fa, 0x188bd0fc, 0x30fc61de, 0x370a82d8, 0x3f11a7d2,
19736 +
            0x38e744d4, 0x2f27edc6, 0x28d10ec0, 0x20ca2bca, 0x273cc8cc, 0x7025498e, 0x77d3aa88,
19737 +
            0x7fc88f82, 0x783e6c84, 0x6ffec596, 0x68082690, 0x6013039a, 0x67e5e09c, 0x4f9251be,
19738 +
            0x4864b2b8, 0x407f97b2, 0x478974b4, 0x5049dda6, 0x57bf3ea0, 0x5fa41baa, 0x5852f8ac,
19739 +
            0xf197192e, 0xf661fa28, 0xfe7adf22, 0xf98c3c24, 0xee4c9536, 0xe9ba7630, 0xe1a1533a,
19740 +
            0xe657b03c, 0xce20011e, 0xc9d6e218, 0xc1cdc712, 0xc63b2414, 0xd1fb8d06, 0xd60d6e00,
19741 +
            0xde164b0a, 0xd9e0a80c, 0x8ef9294e, 0x890fca48, 0x8114ef42, 0x86e20c44, 0x9122a556,
19742 +
            0x96d44650, 0x9ecf635a, 0x9939805c, 0xb14e317e, 0xb6b8d278, 0xbea3f772, 0xb9551474,
19743 +
            0xae95bd66, 0xa9635e60, 0xa1787b6a, 0xa68e986c,
19744 +
        ],
19745 +
        [
19746 +
            0x00000000, 0xe8a45605, 0xd589b1bd, 0x3d2de7b8, 0xafd27ecd, 0x477628c8, 0x7a5bcf70,
19747 +
            0x92ff9975, 0x5b65e02d, 0xb3c1b628, 0x8eec5190, 0x66480795, 0xf4b79ee0, 0x1c13c8e5,
19748 +
            0x213e2f5d, 0xc99a7958, 0xb6cbc05a, 0x5e6f965f, 0x634271e7, 0x8be627e2, 0x1919be97,
19749 +
            0xf1bde892, 0xcc900f2a, 0x2434592f, 0xedae2077, 0x050a7672, 0x382791ca, 0xd083c7cf,
19750 +
            0x427c5eba, 0xaad808bf, 0x97f5ef07, 0x7f51b902, 0x69569d03, 0x81f2cb06, 0xbcdf2cbe,
19751 +
            0x547b7abb, 0xc684e3ce, 0x2e20b5cb, 0x130d5273, 0xfba90476, 0x32337d2e, 0xda972b2b,
19752 +
            0xe7bacc93, 0x0f1e9a96, 0x9de103e3, 0x754555e6, 0x4868b25e, 0xa0cce45b, 0xdf9d5d59,
19753 +
            0x37390b5c, 0x0a14ece4, 0xe2b0bae1, 0x704f2394, 0x98eb7591, 0xa5c69229, 0x4d62c42c,
19754 +
            0x84f8bd74, 0x6c5ceb71, 0x51710cc9, 0xb9d55acc, 0x2b2ac3b9, 0xc38e95bc, 0xfea37204,
19755 +
            0x16072401, 0xd2ad3a06, 0x3a096c03, 0x07248bbb, 0xef80ddbe, 0x7d7f44cb, 0x95db12ce,
19756 +
            0xa8f6f576, 0x4052a373, 0x89c8da2b, 0x616c8c2e, 0x5c416b96, 0xb4e53d93, 0x261aa4e6,
19757 +
            0xcebef2e3, 0xf393155b, 0x1b37435e, 0x6466fa5c, 0x8cc2ac59, 0xb1ef4be1, 0x594b1de4,
19758 +
            0xcbb48491, 0x2310d294, 0x1e3d352c, 0xf6996329, 0x3f031a71, 0xd7a74c74, 0xea8aabcc,
19759 +
            0x022efdc9, 0x90d164bc, 0x787532b9, 0x4558d501, 0xadfc8304, 0xbbfba705, 0x535ff100,
19760 +
            0x6e7216b8, 0x86d640bd, 0x1429d9c8, 0xfc8d8fcd, 0xc1a06875, 0x29043e70, 0xe09e4728,
19761 +
            0x083a112d, 0x3517f695, 0xddb3a090, 0x4f4c39e5, 0xa7e86fe0, 0x9ac58858, 0x7261de5d,
19762 +
            0x0d30675f, 0xe594315a, 0xd8b9d6e2, 0x301d80e7, 0xa2e21992, 0x4a464f97, 0x776ba82f,
19763 +
            0x9fcffe2a, 0x56558772, 0xbef1d177, 0x83dc36cf, 0x6b7860ca, 0xf987f9bf, 0x1123afba,
19764 +
            0x2c0e4802, 0xc4aa1e07, 0xa19b69bb, 0x493f3fbe, 0x7412d806, 0x9cb68e03, 0x0e491776,
19765 +
            0xe6ed4173, 0xdbc0a6cb, 0x3364f0ce, 0xfafe8996, 0x125adf93, 0x2f77382b, 0xc7d36e2e,
19766 +
            0x552cf75b, 0xbd88a15e, 0x80a546e6, 0x680110e3, 0x1750a9e1, 0xfff4ffe4, 0xc2d9185c,
19767 +
            0x2a7d4e59, 0xb882d72c, 0x50268129, 0x6d0b6691, 0x85af3094, 0x4c3549cc, 0xa4911fc9,
19768 +
            0x99bcf871, 0x7118ae74, 0xe3e73701, 0x0b436104, 0x366e86bc, 0xdecad0b9, 0xc8cdf4b8,
19769 +
            0x2069a2bd, 0x1d444505, 0xf5e01300, 0x671f8a75, 0x8fbbdc70, 0xb2963bc8, 0x5a326dcd,
19770 +
            0x93a81495, 0x7b0c4290, 0x4621a528, 0xae85f32d, 0x3c7a6a58, 0xd4de3c5d, 0xe9f3dbe5,
19771 +
            0x01578de0, 0x7e0634e2, 0x96a262e7, 0xab8f855f, 0x432bd35a, 0xd1d44a2f, 0x39701c2a,
19772 +
            0x045dfb92, 0xecf9ad97, 0x2563d4cf, 0xcdc782ca, 0xf0ea6572, 0x184e3377, 0x8ab1aa02,
19773 +
            0x6215fc07, 0x5f381bbf, 0xb79c4dba, 0x733653bd, 0x9b9205b8, 0xa6bfe200, 0x4e1bb405,
19774 +
            0xdce42d70, 0x34407b75, 0x096d9ccd, 0xe1c9cac8, 0x2853b390, 0xc0f7e595, 0xfdda022d,
19775 +
            0x157e5428, 0x8781cd5d, 0x6f259b58, 0x52087ce0, 0xbaac2ae5, 0xc5fd93e7, 0x2d59c5e2,
19776 +
            0x1074225a, 0xf8d0745f, 0x6a2fed2a, 0x828bbb2f, 0xbfa65c97, 0x57020a92, 0x9e9873ca,
19777 +
            0x763c25cf, 0x4b11c277, 0xa3b59472, 0x314a0d07, 0xd9ee5b02, 0xe4c3bcba, 0x0c67eabf,
19778 +
            0x1a60cebe, 0xf2c498bb, 0xcfe97f03, 0x274d2906, 0xb5b2b073, 0x5d16e676, 0x603b01ce,
19779 +
            0x889f57cb, 0x41052e93, 0xa9a17896, 0x948c9f2e, 0x7c28c92b, 0xeed7505e, 0x0673065b,
19780 +
            0x3b5ee1e3, 0xd3fab7e6, 0xacab0ee4, 0x440f58e1, 0x7922bf59, 0x9186e95c, 0x03797029,
19781 +
            0xebdd262c, 0xd6f0c194, 0x3e549791, 0xf7ceeec9, 0x1f6ab8cc, 0x22475f74, 0xcae30971,
19782 +
            0x581c9004, 0xb0b8c601, 0x8d9521b9, 0x653177bc,
19783 +
        ],
19784 +
        [
19785 +
            0x00000000, 0x47f7cec1, 0x8fef9d82, 0xc8185343, 0x1b1e26b3, 0x5ce9e872, 0x94f1bb31,
19786 +
            0xd30675f0, 0x363c4d66, 0x71cb83a7, 0xb9d3d0e4, 0xfe241e25, 0x2d226bd5, 0x6ad5a514,
19787 +
            0xa2cdf657, 0xe53a3896, 0x6c789acc, 0x2b8f540d, 0xe397074e, 0xa460c98f, 0x7766bc7f,
19788 +
            0x309172be, 0xf88921fd, 0xbf7eef3c, 0x5a44d7aa, 0x1db3196b, 0xd5ab4a28, 0x925c84e9,
19789 +
            0x415af119, 0x06ad3fd8, 0xceb56c9b, 0x8942a25a, 0xd8f13598, 0x9f06fb59, 0x571ea81a,
19790 +
            0x10e966db, 0xc3ef132b, 0x8418ddea, 0x4c008ea9, 0x0bf74068, 0xeecd78fe, 0xa93ab63f,
19791 +
            0x6122e57c, 0x26d52bbd, 0xf5d35e4d, 0xb224908c, 0x7a3cc3cf, 0x3dcb0d0e, 0xb489af54,
19792 +
            0xf37e6195, 0x3b6632d6, 0x7c91fc17, 0xaf9789e7, 0xe8604726, 0x20781465, 0x678fdaa4,
19793 +
            0x82b5e232, 0xc5422cf3, 0x0d5a7fb0, 0x4aadb171, 0x99abc481, 0xde5c0a40, 0x16445903,
19794 +
            0x51b397c2, 0xb5237687, 0xf2d4b846, 0x3acceb05, 0x7d3b25c4, 0xae3d5034, 0xe9ca9ef5,
19795 +
            0x21d2cdb6, 0x66250377, 0x831f3be1, 0xc4e8f520, 0x0cf0a663, 0x4b0768a2, 0x98011d52,
19796 +
            0xdff6d393, 0x17ee80d0, 0x50194e11, 0xd95bec4b, 0x9eac228a, 0x56b471c9, 0x1143bf08,
19797 +
            0xc245caf8, 0x85b20439, 0x4daa577a, 0x0a5d99bb, 0xef67a12d, 0xa8906fec, 0x60883caf,
19798 +
            0x277ff26e, 0xf479879e, 0xb38e495f, 0x7b961a1c, 0x3c61d4dd, 0x6dd2431f, 0x2a258dde,
19799 +
            0xe23dde9d, 0xa5ca105c, 0x76cc65ac, 0x313bab6d, 0xf923f82e, 0xbed436ef, 0x5bee0e79,
19800 +
            0x1c19c0b8, 0xd40193fb, 0x93f65d3a, 0x40f028ca, 0x0707e60b, 0xcf1fb548, 0x88e87b89,
19801 +
            0x01aad9d3, 0x465d1712, 0x8e454451, 0xc9b28a90, 0x1ab4ff60, 0x5d4331a1, 0x955b62e2,
19802 +
            0xd2acac23, 0x379694b5, 0x70615a74, 0xb8790937, 0xff8ec7f6, 0x2c88b206, 0x6b7f7cc7,
19803 +
            0xa3672f84, 0xe490e145, 0x6e87f0b9, 0x29703e78, 0xe1686d3b, 0xa69fa3fa, 0x7599d60a,
19804 +
            0x326e18cb, 0xfa764b88, 0xbd818549, 0x58bbbddf, 0x1f4c731e, 0xd754205d, 0x90a3ee9c,
19805 +
            0x43a59b6c, 0x045255ad, 0xcc4a06ee, 0x8bbdc82f, 0x02ff6a75, 0x4508a4b4, 0x8d10f7f7,
19806 +
            0xcae73936, 0x19e14cc6, 0x5e168207, 0x960ed144, 0xd1f91f85, 0x34c32713, 0x7334e9d2,
19807 +
            0xbb2cba91, 0xfcdb7450, 0x2fdd01a0, 0x682acf61, 0xa0329c22, 0xe7c552e3, 0xb676c521,
19808 +
            0xf1810be0, 0x399958a3, 0x7e6e9662, 0xad68e392, 0xea9f2d53, 0x22877e10, 0x6570b0d1,
19809 +
            0x804a8847, 0xc7bd4686, 0x0fa515c5, 0x4852db04, 0x9b54aef4, 0xdca36035, 0x14bb3376,
19810 +
            0x534cfdb7, 0xda0e5fed, 0x9df9912c, 0x55e1c26f, 0x12160cae, 0xc110795e, 0x86e7b79f,
19811 +
            0x4effe4dc, 0x09082a1d, 0xec32128b, 0xabc5dc4a, 0x63dd8f09, 0x242a41c8, 0xf72c3438,
19812 +
            0xb0dbfaf9, 0x78c3a9ba, 0x3f34677b, 0xdba4863e, 0x9c5348ff, 0x544b1bbc, 0x13bcd57d,
19813 +
            0xc0baa08d, 0x874d6e4c, 0x4f553d0f, 0x08a2f3ce, 0xed98cb58, 0xaa6f0599, 0x627756da,
19814 +
            0x2580981b, 0xf686edeb, 0xb171232a, 0x79697069, 0x3e9ebea8, 0xb7dc1cf2, 0xf02bd233,
19815 +
            0x38338170, 0x7fc44fb1, 0xacc23a41, 0xeb35f480, 0x232da7c3, 0x64da6902, 0x81e05194,
19816 +
            0xc6179f55, 0x0e0fcc16, 0x49f802d7, 0x9afe7727, 0xdd09b9e6, 0x1511eaa5, 0x52e62464,
19817 +
            0x0355b3a6, 0x44a27d67, 0x8cba2e24, 0xcb4de0e5, 0x184b9515, 0x5fbc5bd4, 0x97a40897,
19818 +
            0xd053c656, 0x3569fec0, 0x729e3001, 0xba866342, 0xfd71ad83, 0x2e77d873, 0x698016b2,
19819 +
            0xa19845f1, 0xe66f8b30, 0x6f2d296a, 0x28dae7ab, 0xe0c2b4e8, 0xa7357a29, 0x74330fd9,
19820 +
            0x33c4c118, 0xfbdc925b, 0xbc2b5c9a, 0x5911640c, 0x1ee6aacd, 0xd6fef98e, 0x9109374f,
19821 +
            0x420f42bf, 0x05f88c7e, 0xcde0df3d, 0x8a1711fc,
19822 +
        ],
19823 +
        [
19824 +
            0x00000000, 0xdd0fe172, 0xbededf53, 0x63d13e21, 0x797ca311, 0xa4734263, 0xc7a27c42,
19825 +
            0x1aad9d30, 0xf2f94622, 0x2ff6a750, 0x4c279971, 0x91287803, 0x8b85e533, 0x568a0441,
19826 +
            0x355b3a60, 0xe854db12, 0xe13391f3, 0x3c3c7081, 0x5fed4ea0, 0x82e2afd2, 0x984f32e2,
19827 +
            0x4540d390, 0x2691edb1, 0xfb9e0cc3, 0x13cad7d1, 0xcec536a3, 0xad140882, 0x701be9f0,
19828 +
            0x6ab674c0, 0xb7b995b2, 0xd468ab93, 0x09674ae1, 0xc6a63e51, 0x1ba9df23, 0x7878e102,
19829 +
            0xa5770070, 0xbfda9d40, 0x62d57c32, 0x01044213, 0xdc0ba361, 0x345f7873, 0xe9509901,
19830 +
            0x8a81a720, 0x578e4652, 0x4d23db62, 0x902c3a10, 0xf3fd0431, 0x2ef2e543, 0x2795afa2,
19831 +
            0xfa9a4ed0, 0x994b70f1, 0x44449183, 0x5ee90cb3, 0x83e6edc1, 0xe037d3e0, 0x3d383292,
19832 +
            0xd56ce980, 0x086308f2, 0x6bb236d3, 0xb6bdd7a1, 0xac104a91, 0x711fabe3, 0x12ce95c2,
19833 +
            0xcfc174b0, 0x898d6115, 0x54828067, 0x3753be46, 0xea5c5f34, 0xf0f1c204, 0x2dfe2376,
19834 +
            0x4e2f1d57, 0x9320fc25, 0x7b742737, 0xa67bc645, 0xc5aaf864, 0x18a51916, 0x02088426,
19835 +
            0xdf076554, 0xbcd65b75, 0x61d9ba07, 0x68bef0e6, 0xb5b11194, 0xd6602fb5, 0x0b6fcec7,
19836 +
            0x11c253f7, 0xcccdb285, 0xaf1c8ca4, 0x72136dd6, 0x9a47b6c4, 0x474857b6, 0x24996997,
19837 +
            0xf99688e5, 0xe33b15d5, 0x3e34f4a7, 0x5de5ca86, 0x80ea2bf4, 0x4f2b5f44, 0x9224be36,
19838 +
            0xf1f58017, 0x2cfa6165, 0x3657fc55, 0xeb581d27, 0x88892306, 0x5586c274, 0xbdd21966,
19839 +
            0x60ddf814, 0x030cc635, 0xde032747, 0xc4aeba77, 0x19a15b05, 0x7a706524, 0xa77f8456,
19840 +
            0xae18ceb7, 0x73172fc5, 0x10c611e4, 0xcdc9f096, 0xd7646da6, 0x0a6b8cd4, 0x69bab2f5,
19841 +
            0xb4b55387, 0x5ce18895, 0x81ee69e7, 0xe23f57c6, 0x3f30b6b4, 0x259d2b84, 0xf892caf6,
19842 +
            0x9b43f4d7, 0x464c15a5, 0x17dbdf9d, 0xcad43eef, 0xa90500ce, 0x740ae1bc, 0x6ea77c8c,
19843 +
            0xb3a89dfe, 0xd079a3df, 0x0d7642ad, 0xe52299bf, 0x382d78cd, 0x5bfc46ec, 0x86f3a79e,
19844 +
            0x9c5e3aae, 0x4151dbdc, 0x2280e5fd, 0xff8f048f, 0xf6e84e6e, 0x2be7af1c, 0x4836913d,
19845 +
            0x9539704f, 0x8f94ed7f, 0x529b0c0d, 0x314a322c, 0xec45d35e, 0x0411084c, 0xd91ee93e,
19846 +
            0xbacfd71f, 0x67c0366d, 0x7d6dab5d, 0xa0624a2f, 0xc3b3740e, 0x1ebc957c, 0xd17de1cc,
19847 +
            0x0c7200be, 0x6fa33e9f, 0xb2acdfed, 0xa80142dd, 0x750ea3af, 0x16df9d8e, 0xcbd07cfc,
19848 +
            0x2384a7ee, 0xfe8b469c, 0x9d5a78bd, 0x405599cf, 0x5af804ff, 0x87f7e58d, 0xe426dbac,
19849 +
            0x39293ade, 0x304e703f, 0xed41914d, 0x8e90af6c, 0x539f4e1e, 0x4932d32e, 0x943d325c,
19850 +
            0xf7ec0c7d, 0x2ae3ed0f, 0xc2b7361d, 0x1fb8d76f, 0x7c69e94e, 0xa166083c, 0xbbcb950c,
19851 +
            0x66c4747e, 0x05154a5f, 0xd81aab2d, 0x9e56be88, 0x43595ffa, 0x208861db, 0xfd8780a9,
19852 +
            0xe72a1d99, 0x3a25fceb, 0x59f4c2ca, 0x84fb23b8, 0x6caff8aa, 0xb1a019d8, 0xd27127f9,
19853 +
            0x0f7ec68b, 0x15d35bbb, 0xc8dcbac9, 0xab0d84e8, 0x7602659a, 0x7f652f7b, 0xa26ace09,
19854 +
            0xc1bbf028, 0x1cb4115a, 0x06198c6a, 0xdb166d18, 0xb8c75339, 0x65c8b24b, 0x8d9c6959,
19855 +
            0x5093882b, 0x3342b60a, 0xee4d5778, 0xf4e0ca48, 0x29ef2b3a, 0x4a3e151b, 0x9731f469,
19856 +
            0x58f080d9, 0x85ff61ab, 0xe62e5f8a, 0x3b21bef8, 0x218c23c8, 0xfc83c2ba, 0x9f52fc9b,
19857 +
            0x425d1de9, 0xaa09c6fb, 0x77062789, 0x14d719a8, 0xc9d8f8da, 0xd37565ea, 0x0e7a8498,
19858 +
            0x6dabbab9, 0xb0a45bcb, 0xb9c3112a, 0x64ccf058, 0x071dce79, 0xda122f0b, 0xc0bfb23b,
19859 +
            0x1db05349, 0x7e616d68, 0xa36e8c1a, 0x4b3a5708, 0x9635b67a, 0xf5e4885b, 0x28eb6929,
19860 +
            0x3246f419, 0xef49156b, 0x8c982b4a, 0x5197ca38,
19861 +
        ],
19862 +
        [
19863 +
            0x00000000, 0x2fb7bf3a, 0x5f6f7e74, 0x70d8c14e, 0xbedefce8, 0x916943d2, 0xe1b1829c,
19864 +
            0xce063da6, 0x797ce467, 0x56cb5b5d, 0x26139a13, 0x09a42529, 0xc7a2188f, 0xe815a7b5,
19865 +
            0x98cd66fb, 0xb77ad9c1, 0xf2f9c8ce, 0xdd4e77f4, 0xad96b6ba, 0x82210980, 0x4c273426,
19866 +
            0x63908b1c, 0x13484a52, 0x3cfff568, 0x8b852ca9, 0xa4329393, 0xd4ea52dd, 0xfb5dede7,
19867 +
            0x355bd041, 0x1aec6f7b, 0x6a34ae35, 0x4583110f, 0xe1328c2b, 0xce853311, 0xbe5df25f,
19868 +
            0x91ea4d65, 0x5fec70c3, 0x705bcff9, 0x00830eb7, 0x2f34b18d, 0x984e684c, 0xb7f9d776,
19869 +
            0xc7211638, 0xe896a902, 0x269094a4, 0x09272b9e, 0x79ffead0, 0x564855ea, 0x13cb44e5,
19870 +
            0x3c7cfbdf, 0x4ca43a91, 0x631385ab, 0xad15b80d, 0x82a20737, 0xf27ac679, 0xddcd7943,
19871 +
            0x6ab7a082, 0x45001fb8, 0x35d8def6, 0x1a6f61cc, 0xd4695c6a, 0xfbdee350, 0x8b06221e,
19872 +
            0xa4b19d24, 0xc6a405e1, 0xe913badb, 0x99cb7b95, 0xb67cc4af, 0x787af909, 0x57cd4633,
19873 +
            0x2715877d, 0x08a23847, 0xbfd8e186, 0x906f5ebc, 0xe0b79ff2, 0xcf0020c8, 0x01061d6e,
19874 +
            0x2eb1a254, 0x5e69631a, 0x71dedc20, 0x345dcd2f, 0x1bea7215, 0x6b32b35b, 0x44850c61,
19875 +
            0x8a8331c7, 0xa5348efd, 0xd5ec4fb3, 0xfa5bf089, 0x4d212948, 0x62969672, 0x124e573c,
19876 +
            0x3df9e806, 0xf3ffd5a0, 0xdc486a9a, 0xac90abd4, 0x832714ee, 0x279689ca, 0x082136f0,
19877 +
            0x78f9f7be, 0x574e4884, 0x99487522, 0xb6ffca18, 0xc6270b56, 0xe990b46c, 0x5eea6dad,
19878 +
            0x715dd297, 0x018513d9, 0x2e32ace3, 0xe0349145, 0xcf832e7f, 0xbf5bef31, 0x90ec500b,
19879 +
            0xd56f4104, 0xfad8fe3e, 0x8a003f70, 0xa5b7804a, 0x6bb1bdec, 0x440602d6, 0x34dec398,
19880 +
            0x1b697ca2, 0xac13a563, 0x83a41a59, 0xf37cdb17, 0xdccb642d, 0x12cd598b, 0x3d7ae6b1,
19881 +
            0x4da227ff, 0x621598c5, 0x89891675, 0xa63ea94f, 0xd6e66801, 0xf951d73b, 0x3757ea9d,
19882 +
            0x18e055a7, 0x683894e9, 0x478f2bd3, 0xf0f5f212, 0xdf424d28, 0xaf9a8c66, 0x802d335c,
19883 +
            0x4e2b0efa, 0x619cb1c0, 0x1144708e, 0x3ef3cfb4, 0x7b70debb, 0x54c76181, 0x241fa0cf,
19884 +
            0x0ba81ff5, 0xc5ae2253, 0xea199d69, 0x9ac15c27, 0xb576e31d, 0x020c3adc, 0x2dbb85e6,
19885 +
            0x5d6344a8, 0x72d4fb92, 0xbcd2c634, 0x9365790e, 0xe3bdb840, 0xcc0a077a, 0x68bb9a5e,
19886 +
            0x470c2564, 0x37d4e42a, 0x18635b10, 0xd66566b6, 0xf9d2d98c, 0x890a18c2, 0xa6bda7f8,
19887 +
            0x11c77e39, 0x3e70c103, 0x4ea8004d, 0x611fbf77, 0xaf1982d1, 0x80ae3deb, 0xf076fca5,
19888 +
            0xdfc1439f, 0x9a425290, 0xb5f5edaa, 0xc52d2ce4, 0xea9a93de, 0x249cae78, 0x0b2b1142,
19889 +
            0x7bf3d00c, 0x54446f36, 0xe33eb6f7, 0xcc8909cd, 0xbc51c883, 0x93e677b9, 0x5de04a1f,
19890 +
            0x7257f525, 0x028f346b, 0x2d388b51, 0x4f2d1394, 0x609aacae, 0x10426de0, 0x3ff5d2da,
19891 +
            0xf1f3ef7c, 0xde445046, 0xae9c9108, 0x812b2e32, 0x3651f7f3, 0x19e648c9, 0x693e8987,
19892 +
            0x468936bd, 0x888f0b1b, 0xa738b421, 0xd7e0756f, 0xf857ca55, 0xbdd4db5a, 0x92636460,
19893 +
            0xe2bba52e, 0xcd0c1a14, 0x030a27b2, 0x2cbd9888, 0x5c6559c6, 0x73d2e6fc, 0xc4a83f3d,
19894 +
            0xeb1f8007, 0x9bc74149, 0xb470fe73, 0x7a76c3d5, 0x55c17cef, 0x2519bda1, 0x0aae029b,
19895 +
            0xae1f9fbf, 0x81a82085, 0xf170e1cb, 0xdec75ef1, 0x10c16357, 0x3f76dc6d, 0x4fae1d23,
19896 +
            0x6019a219, 0xd7637bd8, 0xf8d4c4e2, 0x880c05ac, 0xa7bbba96, 0x69bd8730, 0x460a380a,
19897 +
            0x36d2f944, 0x1965467e, 0x5ce65771, 0x7351e84b, 0x03892905, 0x2c3e963f, 0xe238ab99,
19898 +
            0xcd8f14a3, 0xbd57d5ed, 0x92e06ad7, 0x259ab316, 0x0a2d0c2c, 0x7af5cd62, 0x55427258,
19899 +
            0x9b444ffe, 0xb4f3f0c4, 0xc42b318a, 0xeb9c8eb0,
19900 +
        ],
19901 +
    ];
19902 +
19903 +
    pub static CRC32_XFER_TABLE: [[u32; 256]; 16] = [
19904 +
        [
19905 +
            0x00000000, 0x000000af, 0x0000015e, 0x000001f1, 0x000002bc, 0x00000213, 0x000003e2,
19906 +
            0x0000034d, 0x00000578, 0x000005d7, 0x00000426, 0x00000489, 0x000007c4, 0x0000076b,
19907 +
            0x0000069a, 0x00000635, 0x00000af0, 0x00000a5f, 0x00000bae, 0x00000b01, 0x0000084c,
19908 +
            0x000008e3, 0x00000912, 0x000009bd, 0x00000f88, 0x00000f27, 0x00000ed6, 0x00000e79,
19909 +
            0x00000d34, 0x00000d9b, 0x00000c6a, 0x00000cc5, 0x000015e0, 0x0000154f, 0x000014be,
19910 +
            0x00001411, 0x0000175c, 0x000017f3, 0x00001602, 0x000016ad, 0x00001098, 0x00001037,
19911 +
            0x000011c6, 0x00001169, 0x00001224, 0x0000128b, 0x0000137a, 0x000013d5, 0x00001f10,
19912 +
            0x00001fbf, 0x00001e4e, 0x00001ee1, 0x00001dac, 0x00001d03, 0x00001cf2, 0x00001c5d,
19913 +
            0x00001a68, 0x00001ac7, 0x00001b36, 0x00001b99, 0x000018d4, 0x0000187b, 0x0000198a,
19914 +
            0x00001925, 0x00002bc0, 0x00002b6f, 0x00002a9e, 0x00002a31, 0x0000297c, 0x000029d3,
19915 +
            0x00002822, 0x0000288d, 0x00002eb8, 0x00002e17, 0x00002fe6, 0x00002f49, 0x00002c04,
19916 +
            0x00002cab, 0x00002d5a, 0x00002df5, 0x00002130, 0x0000219f, 0x0000206e, 0x000020c1,
19917 +
            0x0000238c, 0x00002323, 0x000022d2, 0x0000227d, 0x00002448, 0x000024e7, 0x00002516,
19918 +
            0x000025b9, 0x000026f4, 0x0000265b, 0x000027aa, 0x00002705, 0x00003e20, 0x00003e8f,
19919 +
            0x00003f7e, 0x00003fd1, 0x00003c9c, 0x00003c33, 0x00003dc2, 0x00003d6d, 0x00003b58,
19920 +
            0x00003bf7, 0x00003a06, 0x00003aa9, 0x000039e4, 0x0000394b, 0x000038ba, 0x00003815,
19921 +
            0x000034d0, 0x0000347f, 0x0000358e, 0x00003521, 0x0000366c, 0x000036c3, 0x00003732,
19922 +
            0x0000379d, 0x000031a8, 0x00003107, 0x000030f6, 0x00003059, 0x00003314, 0x000033bb,
19923 +
            0x0000324a, 0x000032e5, 0x00005780, 0x0000572f, 0x000056de, 0x00005671, 0x0000553c,
19924 +
            0x00005593, 0x00005462, 0x000054cd, 0x000052f8, 0x00005257, 0x000053a6, 0x00005309,
19925 +
            0x00005044, 0x000050eb, 0x0000511a, 0x000051b5, 0x00005d70, 0x00005ddf, 0x00005c2e,
19926 +
            0x00005c81, 0x00005fcc, 0x00005f63, 0x00005e92, 0x00005e3d, 0x00005808, 0x000058a7,
19927 +
            0x00005956, 0x000059f9, 0x00005ab4, 0x00005a1b, 0x00005bea, 0x00005b45, 0x00004260,
19928 +
            0x000042cf, 0x0000433e, 0x00004391, 0x000040dc, 0x00004073, 0x00004182, 0x0000412d,
19929 +
            0x00004718, 0x000047b7, 0x00004646, 0x000046e9, 0x000045a4, 0x0000450b, 0x000044fa,
19930 +
            0x00004455, 0x00004890, 0x0000483f, 0x000049ce, 0x00004961, 0x00004a2c, 0x00004a83,
19931 +
            0x00004b72, 0x00004bdd, 0x00004de8, 0x00004d47, 0x00004cb6, 0x00004c19, 0x00004f54,
19932 +
            0x00004ffb, 0x00004e0a, 0x00004ea5, 0x00007c40, 0x00007cef, 0x00007d1e, 0x00007db1,
19933 +
            0x00007efc, 0x00007e53, 0x00007fa2, 0x00007f0d, 0x00007938, 0x00007997, 0x00007866,
19934 +
            0x000078c9, 0x00007b84, 0x00007b2b, 0x00007ada, 0x00007a75, 0x000076b0, 0x0000761f,
19935 +
            0x000077ee, 0x00007741, 0x0000740c, 0x000074a3, 0x00007552, 0x000075fd, 0x000073c8,
19936 +
            0x00007367, 0x00007296, 0x00007239, 0x00007174, 0x000071db, 0x0000702a, 0x00007085,
19937 +
            0x000069a0, 0x0000690f, 0x000068fe, 0x00006851, 0x00006b1c, 0x00006bb3, 0x00006a42,
19938 +
            0x00006aed, 0x00006cd8, 0x00006c77, 0x00006d86, 0x00006d29, 0x00006e64, 0x00006ecb,
19939 +
            0x00006f3a, 0x00006f95, 0x00006350, 0x000063ff, 0x0000620e, 0x000062a1, 0x000061ec,
19940 +
            0x00006143, 0x000060b2, 0x0000601d, 0x00006628, 0x00006687, 0x00006776, 0x000067d9,
19941 +
            0x00006494, 0x0000643b, 0x000065ca, 0x00006565,
19942 +
        ],
19943 +
        [
19944 +
            0x00000000, 0x0000af00, 0x00015e00, 0x0001f100, 0x0002bc00, 0x00021300, 0x0003e200,
19945 +
            0x00034d00, 0x00057800, 0x0005d700, 0x00042600, 0x00048900, 0x0007c400, 0x00076b00,
19946 +
            0x00069a00, 0x00063500, 0x000af000, 0x000a5f00, 0x000bae00, 0x000b0100, 0x00084c00,
19947 +
            0x0008e300, 0x00091200, 0x0009bd00, 0x000f8800, 0x000f2700, 0x000ed600, 0x000e7900,
19948 +
            0x000d3400, 0x000d9b00, 0x000c6a00, 0x000cc500, 0x0015e000, 0x00154f00, 0x0014be00,
19949 +
            0x00141100, 0x00175c00, 0x0017f300, 0x00160200, 0x0016ad00, 0x00109800, 0x00103700,
19950 +
            0x0011c600, 0x00116900, 0x00122400, 0x00128b00, 0x00137a00, 0x0013d500, 0x001f1000,
19951 +
            0x001fbf00, 0x001e4e00, 0x001ee100, 0x001dac00, 0x001d0300, 0x001cf200, 0x001c5d00,
19952 +
            0x001a6800, 0x001ac700, 0x001b3600, 0x001b9900, 0x0018d400, 0x00187b00, 0x00198a00,
19953 +
            0x00192500, 0x002bc000, 0x002b6f00, 0x002a9e00, 0x002a3100, 0x00297c00, 0x0029d300,
19954 +
            0x00282200, 0x00288d00, 0x002eb800, 0x002e1700, 0x002fe600, 0x002f4900, 0x002c0400,
19955 +
            0x002cab00, 0x002d5a00, 0x002df500, 0x00213000, 0x00219f00, 0x00206e00, 0x0020c100,
19956 +
            0x00238c00, 0x00232300, 0x0022d200, 0x00227d00, 0x00244800, 0x0024e700, 0x00251600,
19957 +
            0x0025b900, 0x0026f400, 0x00265b00, 0x0027aa00, 0x00270500, 0x003e2000, 0x003e8f00,
19958 +
            0x003f7e00, 0x003fd100, 0x003c9c00, 0x003c3300, 0x003dc200, 0x003d6d00, 0x003b5800,
19959 +
            0x003bf700, 0x003a0600, 0x003aa900, 0x0039e400, 0x00394b00, 0x0038ba00, 0x00381500,
19960 +
            0x0034d000, 0x00347f00, 0x00358e00, 0x00352100, 0x00366c00, 0x0036c300, 0x00373200,
19961 +
            0x00379d00, 0x0031a800, 0x00310700, 0x0030f600, 0x00305900, 0x00331400, 0x0033bb00,
19962 +
            0x00324a00, 0x0032e500, 0x00578000, 0x00572f00, 0x0056de00, 0x00567100, 0x00553c00,
19963 +
            0x00559300, 0x00546200, 0x0054cd00, 0x0052f800, 0x00525700, 0x0053a600, 0x00530900,
19964 +
            0x00504400, 0x0050eb00, 0x00511a00, 0x0051b500, 0x005d7000, 0x005ddf00, 0x005c2e00,
19965 +
            0x005c8100, 0x005fcc00, 0x005f6300, 0x005e9200, 0x005e3d00, 0x00580800, 0x0058a700,
19966 +
            0x00595600, 0x0059f900, 0x005ab400, 0x005a1b00, 0x005bea00, 0x005b4500, 0x00426000,
19967 +
            0x0042cf00, 0x00433e00, 0x00439100, 0x0040dc00, 0x00407300, 0x00418200, 0x00412d00,
19968 +
            0x00471800, 0x0047b700, 0x00464600, 0x0046e900, 0x0045a400, 0x00450b00, 0x0044fa00,
19969 +
            0x00445500, 0x00489000, 0x00483f00, 0x0049ce00, 0x00496100, 0x004a2c00, 0x004a8300,
19970 +
            0x004b7200, 0x004bdd00, 0x004de800, 0x004d4700, 0x004cb600, 0x004c1900, 0x004f5400,
19971 +
            0x004ffb00, 0x004e0a00, 0x004ea500, 0x007c4000, 0x007cef00, 0x007d1e00, 0x007db100,
19972 +
            0x007efc00, 0x007e5300, 0x007fa200, 0x007f0d00, 0x00793800, 0x00799700, 0x00786600,
19973 +
            0x0078c900, 0x007b8400, 0x007b2b00, 0x007ada00, 0x007a7500, 0x0076b000, 0x00761f00,
19974 +
            0x0077ee00, 0x00774100, 0x00740c00, 0x0074a300, 0x00755200, 0x0075fd00, 0x0073c800,
19975 +
            0x00736700, 0x00729600, 0x00723900, 0x00717400, 0x0071db00, 0x00702a00, 0x00708500,
19976 +
            0x0069a000, 0x00690f00, 0x0068fe00, 0x00685100, 0x006b1c00, 0x006bb300, 0x006a4200,
19977 +
            0x006aed00, 0x006cd800, 0x006c7700, 0x006d8600, 0x006d2900, 0x006e6400, 0x006ecb00,
19978 +
            0x006f3a00, 0x006f9500, 0x00635000, 0x0063ff00, 0x00620e00, 0x0062a100, 0x0061ec00,
19979 +
            0x00614300, 0x0060b200, 0x00601d00, 0x00662800, 0x00668700, 0x00677600, 0x0067d900,
19980 +
            0x00649400, 0x00643b00, 0x0065ca00, 0x00656500,
19981 +
        ],
19982 +
        [
19983 +
            0x00000000, 0x00af0000, 0x015e0000, 0x01f10000, 0x02bc0000, 0x02130000, 0x03e20000,
19984 +
            0x034d0000, 0x05780000, 0x05d70000, 0x04260000, 0x04890000, 0x07c40000, 0x076b0000,
19985 +
            0x069a0000, 0x06350000, 0x0af00000, 0x0a5f0000, 0x0bae0000, 0x0b010000, 0x084c0000,
19986 +
            0x08e30000, 0x09120000, 0x09bd0000, 0x0f880000, 0x0f270000, 0x0ed60000, 0x0e790000,
19987 +
            0x0d340000, 0x0d9b0000, 0x0c6a0000, 0x0cc50000, 0x15e00000, 0x154f0000, 0x14be0000,
19988 +
            0x14110000, 0x175c0000, 0x17f30000, 0x16020000, 0x16ad0000, 0x10980000, 0x10370000,
19989 +
            0x11c60000, 0x11690000, 0x12240000, 0x128b0000, 0x137a0000, 0x13d50000, 0x1f100000,
19990 +
            0x1fbf0000, 0x1e4e0000, 0x1ee10000, 0x1dac0000, 0x1d030000, 0x1cf20000, 0x1c5d0000,
19991 +
            0x1a680000, 0x1ac70000, 0x1b360000, 0x1b990000, 0x18d40000, 0x187b0000, 0x198a0000,
19992 +
            0x19250000, 0x2bc00000, 0x2b6f0000, 0x2a9e0000, 0x2a310000, 0x297c0000, 0x29d30000,
19993 +
            0x28220000, 0x288d0000, 0x2eb80000, 0x2e170000, 0x2fe60000, 0x2f490000, 0x2c040000,
19994 +
            0x2cab0000, 0x2d5a0000, 0x2df50000, 0x21300000, 0x219f0000, 0x206e0000, 0x20c10000,
19995 +
            0x238c0000, 0x23230000, 0x22d20000, 0x227d0000, 0x24480000, 0x24e70000, 0x25160000,
19996 +
            0x25b90000, 0x26f40000, 0x265b0000, 0x27aa0000, 0x27050000, 0x3e200000, 0x3e8f0000,
19997 +
            0x3f7e0000, 0x3fd10000, 0x3c9c0000, 0x3c330000, 0x3dc20000, 0x3d6d0000, 0x3b580000,
19998 +
            0x3bf70000, 0x3a060000, 0x3aa90000, 0x39e40000, 0x394b0000, 0x38ba0000, 0x38150000,
19999 +
            0x34d00000, 0x347f0000, 0x358e0000, 0x35210000, 0x366c0000, 0x36c30000, 0x37320000,
20000 +
            0x379d0000, 0x31a80000, 0x31070000, 0x30f60000, 0x30590000, 0x33140000, 0x33bb0000,
20001 +
            0x324a0000, 0x32e50000, 0x57800000, 0x572f0000, 0x56de0000, 0x56710000, 0x553c0000,
20002 +
            0x55930000, 0x54620000, 0x54cd0000, 0x52f80000, 0x52570000, 0x53a60000, 0x53090000,
20003 +
            0x50440000, 0x50eb0000, 0x511a0000, 0x51b50000, 0x5d700000, 0x5ddf0000, 0x5c2e0000,
20004 +
            0x5c810000, 0x5fcc0000, 0x5f630000, 0x5e920000, 0x5e3d0000, 0x58080000, 0x58a70000,
20005 +
            0x59560000, 0x59f90000, 0x5ab40000, 0x5a1b0000, 0x5bea0000, 0x5b450000, 0x42600000,
20006 +
            0x42cf0000, 0x433e0000, 0x43910000, 0x40dc0000, 0x40730000, 0x41820000, 0x412d0000,
20007 +
            0x47180000, 0x47b70000, 0x46460000, 0x46e90000, 0x45a40000, 0x450b0000, 0x44fa0000,
20008 +
            0x44550000, 0x48900000, 0x483f0000, 0x49ce0000, 0x49610000, 0x4a2c0000, 0x4a830000,
20009 +
            0x4b720000, 0x4bdd0000, 0x4de80000, 0x4d470000, 0x4cb60000, 0x4c190000, 0x4f540000,
20010 +
            0x4ffb0000, 0x4e0a0000, 0x4ea50000, 0x7c400000, 0x7cef0000, 0x7d1e0000, 0x7db10000,
20011 +
            0x7efc0000, 0x7e530000, 0x7fa20000, 0x7f0d0000, 0x79380000, 0x79970000, 0x78660000,
20012 +
            0x78c90000, 0x7b840000, 0x7b2b0000, 0x7ada0000, 0x7a750000, 0x76b00000, 0x761f0000,
20013 +
            0x77ee0000, 0x77410000, 0x740c0000, 0x74a30000, 0x75520000, 0x75fd0000, 0x73c80000,
20014 +
            0x73670000, 0x72960000, 0x72390000, 0x71740000, 0x71db0000, 0x702a0000, 0x70850000,
20015 +
            0x69a00000, 0x690f0000, 0x68fe0000, 0x68510000, 0x6b1c0000, 0x6bb30000, 0x6a420000,
20016 +
            0x6aed0000, 0x6cd80000, 0x6c770000, 0x6d860000, 0x6d290000, 0x6e640000, 0x6ecb0000,
20017 +
            0x6f3a0000, 0x6f950000, 0x63500000, 0x63ff0000, 0x620e0000, 0x62a10000, 0x61ec0000,
20018 +
            0x61430000, 0x60b20000, 0x601d0000, 0x66280000, 0x66870000, 0x67760000, 0x67d90000,
20019 +
            0x64940000, 0x643b0000, 0x65ca0000, 0x65650000,
20020 +
        ],
20021 +
        [
20022 +
            0x00000000, 0xaf000000, 0x5e0000af, 0xf10000af, 0xbc00015e, 0x1300015e, 0xe20001f1,
20023 +
            0x4d0001f1, 0x78000213, 0xd7000213, 0x260002bc, 0x890002bc, 0xc400034d, 0x6b00034d,
20024 +
            0x9a0003e2, 0x350003e2, 0xf0000426, 0x5f000426, 0xae000489, 0x01000489, 0x4c000578,
20025 +
            0xe3000578, 0x120005d7, 0xbd0005d7, 0x88000635, 0x27000635, 0xd600069a, 0x7900069a,
20026 +
            0x3400076b, 0x9b00076b, 0x6a0007c4, 0xc50007c4, 0xe00008e3, 0x4f0008e3, 0xbe00084c,
20027 +
            0x1100084c, 0x5c0009bd, 0xf30009bd, 0x02000912, 0xad000912, 0x98000af0, 0x37000af0,
20028 +
            0xc6000a5f, 0x69000a5f, 0x24000bae, 0x8b000bae, 0x7a000b01, 0xd5000b01, 0x10000cc5,
20029 +
            0xbf000cc5, 0x4e000c6a, 0xe1000c6a, 0xac000d9b, 0x03000d9b, 0xf2000d34, 0x5d000d34,
20030 +
            0x68000ed6, 0xc7000ed6, 0x36000e79, 0x99000e79, 0xd4000f88, 0x7b000f88, 0x8a000f27,
20031 +
            0x25000f27, 0xc0001169, 0x6f001169, 0x9e0011c6, 0x310011c6, 0x7c001037, 0xd3001037,
20032 +
            0x22001098, 0x8d001098, 0xb800137a, 0x1700137a, 0xe60013d5, 0x490013d5, 0x04001224,
20033 +
            0xab001224, 0x5a00128b, 0xf500128b, 0x3000154f, 0x9f00154f, 0x6e0015e0, 0xc10015e0,
20034 +
            0x8c001411, 0x23001411, 0xd20014be, 0x7d0014be, 0x4800175c, 0xe700175c, 0x160017f3,
20035 +
            0xb90017f3, 0xf4001602, 0x5b001602, 0xaa0016ad, 0x050016ad, 0x2000198a, 0x8f00198a,
20036 +
            0x7e001925, 0xd1001925, 0x9c0018d4, 0x330018d4, 0xc200187b, 0x6d00187b, 0x58001b99,
20037 +
            0xf7001b99, 0x06001b36, 0xa9001b36, 0xe4001ac7, 0x4b001ac7, 0xba001a68, 0x15001a68,
20038 +
            0xd0001dac, 0x7f001dac, 0x8e001d03, 0x21001d03, 0x6c001cf2, 0xc3001cf2, 0x32001c5d,
20039 +
            0x9d001c5d, 0xa8001fbf, 0x07001fbf, 0xf6001f10, 0x59001f10, 0x14001ee1, 0xbb001ee1,
20040 +
            0x4a001e4e, 0xe5001e4e, 0x8000227d, 0x2f00227d, 0xde0022d2, 0x710022d2, 0x3c002323,
20041 +
            0x93002323, 0x6200238c, 0xcd00238c, 0xf800206e, 0x5700206e, 0xa60020c1, 0x090020c1,
20042 +
            0x44002130, 0xeb002130, 0x1a00219f, 0xb500219f, 0x7000265b, 0xdf00265b, 0x2e0026f4,
20043 +
            0x810026f4, 0xcc002705, 0x63002705, 0x920027aa, 0x3d0027aa, 0x08002448, 0xa7002448,
20044 +
            0x560024e7, 0xf90024e7, 0xb4002516, 0x1b002516, 0xea0025b9, 0x450025b9, 0x60002a9e,
20045 +
            0xcf002a9e, 0x3e002a31, 0x91002a31, 0xdc002bc0, 0x73002bc0, 0x82002b6f, 0x2d002b6f,
20046 +
            0x1800288d, 0xb700288d, 0x46002822, 0xe9002822, 0xa40029d3, 0x0b0029d3, 0xfa00297c,
20047 +
            0x5500297c, 0x90002eb8, 0x3f002eb8, 0xce002e17, 0x61002e17, 0x2c002fe6, 0x83002fe6,
20048 +
            0x72002f49, 0xdd002f49, 0xe8002cab, 0x47002cab, 0xb6002c04, 0x19002c04, 0x54002df5,
20049 +
            0xfb002df5, 0x0a002d5a, 0xa5002d5a, 0x40003314, 0xef003314, 0x1e0033bb, 0xb10033bb,
20050 +
            0xfc00324a, 0x5300324a, 0xa20032e5, 0x0d0032e5, 0x38003107, 0x97003107, 0x660031a8,
20051 +
            0xc90031a8, 0x84003059, 0x2b003059, 0xda0030f6, 0x750030f6, 0xb0003732, 0x1f003732,
20052 +
            0xee00379d, 0x4100379d, 0x0c00366c, 0xa300366c, 0x520036c3, 0xfd0036c3, 0xc8003521,
20053 +
            0x67003521, 0x9600358e, 0x3900358e, 0x7400347f, 0xdb00347f, 0x2a0034d0, 0x850034d0,
20054 +
            0xa0003bf7, 0x0f003bf7, 0xfe003b58, 0x51003b58, 0x1c003aa9, 0xb3003aa9, 0x42003a06,
20055 +
            0xed003a06, 0xd80039e4, 0x770039e4, 0x8600394b, 0x2900394b, 0x640038ba, 0xcb0038ba,
20056 +
            0x3a003815, 0x95003815, 0x50003fd1, 0xff003fd1, 0x0e003f7e, 0xa1003f7e, 0xec003e8f,
20057 +
            0x43003e8f, 0xb2003e20, 0x1d003e20, 0x28003dc2, 0x87003dc2, 0x76003d6d, 0xd9003d6d,
20058 +
            0x94003c9c, 0x3b003c9c, 0xca003c33, 0x65003c33,
20059 +
        ],
20060 +
        [
20061 +
            0x00000000, 0x00004455, 0x000088aa, 0x0000ccff, 0x00011154, 0x00015501, 0x000199fe,
20062 +
            0x0001ddab, 0x000222a8, 0x000266fd, 0x0002aa02, 0x0002ee57, 0x000333fc, 0x000377a9,
20063 +
            0x0003bb56, 0x0003ff03, 0x00044550, 0x00040105, 0x0004cdfa, 0x000489af, 0x00055404,
20064 +
            0x00051051, 0x0005dcae, 0x000598fb, 0x000667f8, 0x000623ad, 0x0006ef52, 0x0006ab07,
20065 +
            0x000776ac, 0x000732f9, 0x0007fe06, 0x0007ba53, 0x00088aa0, 0x0008cef5, 0x0008020a,
20066 +
            0x0008465f, 0x00099bf4, 0x0009dfa1, 0x0009135e, 0x0009570b, 0x000aa808, 0x000aec5d,
20067 +
            0x000a20a2, 0x000a64f7, 0x000bb95c, 0x000bfd09, 0x000b31f6, 0x000b75a3, 0x000ccff0,
20068 +
            0x000c8ba5, 0x000c475a, 0x000c030f, 0x000ddea4, 0x000d9af1, 0x000d560e, 0x000d125b,
20069 +
            0x000eed58, 0x000ea90d, 0x000e65f2, 0x000e21a7, 0x000ffc0c, 0x000fb859, 0x000f74a6,
20070 +
            0x000f30f3, 0x00111540, 0x00115115, 0x00119dea, 0x0011d9bf, 0x00100414, 0x00104041,
20071 +
            0x00108cbe, 0x0010c8eb, 0x001337e8, 0x001373bd, 0x0013bf42, 0x0013fb17, 0x001226bc,
20072 +
            0x001262e9, 0x0012ae16, 0x0012ea43, 0x00155010, 0x00151445, 0x0015d8ba, 0x00159cef,
20073 +
            0x00144144, 0x00140511, 0x0014c9ee, 0x00148dbb, 0x001772b8, 0x001736ed, 0x0017fa12,
20074 +
            0x0017be47, 0x001663ec, 0x001627b9, 0x0016eb46, 0x0016af13, 0x00199fe0, 0x0019dbb5,
20075 +
            0x0019174a, 0x0019531f, 0x00188eb4, 0x0018cae1, 0x0018061e, 0x0018424b, 0x001bbd48,
20076 +
            0x001bf91d, 0x001b35e2, 0x001b71b7, 0x001aac1c, 0x001ae849, 0x001a24b6, 0x001a60e3,
20077 +
            0x001ddab0, 0x001d9ee5, 0x001d521a, 0x001d164f, 0x001ccbe4, 0x001c8fb1, 0x001c434e,
20078 +
            0x001c071b, 0x001ff818, 0x001fbc4d, 0x001f70b2, 0x001f34e7, 0x001ee94c, 0x001ead19,
20079 +
            0x001e61e6, 0x001e25b3, 0x00222a80, 0x00226ed5, 0x0022a22a, 0x0022e67f, 0x00233bd4,
20080 +
            0x00237f81, 0x0023b37e, 0x0023f72b, 0x00200828, 0x00204c7d, 0x00208082, 0x0020c4d7,
20081 +
            0x0021197c, 0x00215d29, 0x002191d6, 0x0021d583, 0x00266fd0, 0x00262b85, 0x0026e77a,
20082 +
            0x0026a32f, 0x00277e84, 0x00273ad1, 0x0027f62e, 0x0027b27b, 0x00244d78, 0x0024092d,
20083 +
            0x0024c5d2, 0x00248187, 0x00255c2c, 0x00251879, 0x0025d486, 0x002590d3, 0x002aa020,
20084 +
            0x002ae475, 0x002a288a, 0x002a6cdf, 0x002bb174, 0x002bf521, 0x002b39de, 0x002b7d8b,
20085 +
            0x00288288, 0x0028c6dd, 0x00280a22, 0x00284e77, 0x002993dc, 0x0029d789, 0x00291b76,
20086 +
            0x00295f23, 0x002ee570, 0x002ea125, 0x002e6dda, 0x002e298f, 0x002ff424, 0x002fb071,
20087 +
            0x002f7c8e, 0x002f38db, 0x002cc7d8, 0x002c838d, 0x002c4f72, 0x002c0b27, 0x002dd68c,
20088 +
            0x002d92d9, 0x002d5e26, 0x002d1a73, 0x00333fc0, 0x00337b95, 0x0033b76a, 0x0033f33f,
20089 +
            0x00322e94, 0x00326ac1, 0x0032a63e, 0x0032e26b, 0x00311d68, 0x0031593d, 0x003195c2,
20090 +
            0x0031d197, 0x00300c3c, 0x00304869, 0x00308496, 0x0030c0c3, 0x00377a90, 0x00373ec5,
20091 +
            0x0037f23a, 0x0037b66f, 0x00366bc4, 0x00362f91, 0x0036e36e, 0x0036a73b, 0x00355838,
20092 +
            0x00351c6d, 0x0035d092, 0x003594c7, 0x0034496c, 0x00340d39, 0x0034c1c6, 0x00348593,
20093 +
            0x003bb560, 0x003bf135, 0x003b3dca, 0x003b799f, 0x003aa434, 0x003ae061, 0x003a2c9e,
20094 +
            0x003a68cb, 0x003997c8, 0x0039d39d, 0x00391f62, 0x00395b37, 0x0038869c, 0x0038c2c9,
20095 +
            0x00380e36, 0x00384a63, 0x003ff030, 0x003fb465, 0x003f789a, 0x003f3ccf, 0x003ee164,
20096 +
            0x003ea531, 0x003e69ce, 0x003e2d9b, 0x003dd298, 0x003d96cd, 0x003d5a32, 0x003d1e67,
20097 +
            0x003cc3cc, 0x003c8799, 0x003c4b66, 0x003c0f33,
20098 +
        ],
20099 +
        [
20100 +
            0x00000000, 0x00445500, 0x0088aa00, 0x00ccff00, 0x01115400, 0x01550100, 0x0199fe00,
20101 +
            0x01ddab00, 0x0222a800, 0x0266fd00, 0x02aa0200, 0x02ee5700, 0x0333fc00, 0x0377a900,
20102 +
            0x03bb5600, 0x03ff0300, 0x04455000, 0x04010500, 0x04cdfa00, 0x0489af00, 0x05540400,
20103 +
            0x05105100, 0x05dcae00, 0x0598fb00, 0x0667f800, 0x0623ad00, 0x06ef5200, 0x06ab0700,
20104 +
            0x0776ac00, 0x0732f900, 0x07fe0600, 0x07ba5300, 0x088aa000, 0x08cef500, 0x08020a00,
20105 +
            0x08465f00, 0x099bf400, 0x09dfa100, 0x09135e00, 0x09570b00, 0x0aa80800, 0x0aec5d00,
20106 +
            0x0a20a200, 0x0a64f700, 0x0bb95c00, 0x0bfd0900, 0x0b31f600, 0x0b75a300, 0x0ccff000,
20107 +
            0x0c8ba500, 0x0c475a00, 0x0c030f00, 0x0ddea400, 0x0d9af100, 0x0d560e00, 0x0d125b00,
20108 +
            0x0eed5800, 0x0ea90d00, 0x0e65f200, 0x0e21a700, 0x0ffc0c00, 0x0fb85900, 0x0f74a600,
20109 +
            0x0f30f300, 0x11154000, 0x11511500, 0x119dea00, 0x11d9bf00, 0x10041400, 0x10404100,
20110 +
            0x108cbe00, 0x10c8eb00, 0x1337e800, 0x1373bd00, 0x13bf4200, 0x13fb1700, 0x1226bc00,
20111 +
            0x1262e900, 0x12ae1600, 0x12ea4300, 0x15501000, 0x15144500, 0x15d8ba00, 0x159cef00,
20112 +
            0x14414400, 0x14051100, 0x14c9ee00, 0x148dbb00, 0x1772b800, 0x1736ed00, 0x17fa1200,
20113 +
            0x17be4700, 0x1663ec00, 0x1627b900, 0x16eb4600, 0x16af1300, 0x199fe000, 0x19dbb500,
20114 +
            0x19174a00, 0x19531f00, 0x188eb400, 0x18cae100, 0x18061e00, 0x18424b00, 0x1bbd4800,
20115 +
            0x1bf91d00, 0x1b35e200, 0x1b71b700, 0x1aac1c00, 0x1ae84900, 0x1a24b600, 0x1a60e300,
20116 +
            0x1ddab000, 0x1d9ee500, 0x1d521a00, 0x1d164f00, 0x1ccbe400, 0x1c8fb100, 0x1c434e00,
20117 +
            0x1c071b00, 0x1ff81800, 0x1fbc4d00, 0x1f70b200, 0x1f34e700, 0x1ee94c00, 0x1ead1900,
20118 +
            0x1e61e600, 0x1e25b300, 0x222a8000, 0x226ed500, 0x22a22a00, 0x22e67f00, 0x233bd400,
20119 +
            0x237f8100, 0x23b37e00, 0x23f72b00, 0x20082800, 0x204c7d00, 0x20808200, 0x20c4d700,
20120 +
            0x21197c00, 0x215d2900, 0x2191d600, 0x21d58300, 0x266fd000, 0x262b8500, 0x26e77a00,
20121 +
            0x26a32f00, 0x277e8400, 0x273ad100, 0x27f62e00, 0x27b27b00, 0x244d7800, 0x24092d00,
20122 +
            0x24c5d200, 0x24818700, 0x255c2c00, 0x25187900, 0x25d48600, 0x2590d300, 0x2aa02000,
20123 +
            0x2ae47500, 0x2a288a00, 0x2a6cdf00, 0x2bb17400, 0x2bf52100, 0x2b39de00, 0x2b7d8b00,
20124 +
            0x28828800, 0x28c6dd00, 0x280a2200, 0x284e7700, 0x2993dc00, 0x29d78900, 0x291b7600,
20125 +
            0x295f2300, 0x2ee57000, 0x2ea12500, 0x2e6dda00, 0x2e298f00, 0x2ff42400, 0x2fb07100,
20126 +
            0x2f7c8e00, 0x2f38db00, 0x2cc7d800, 0x2c838d00, 0x2c4f7200, 0x2c0b2700, 0x2dd68c00,
20127 +
            0x2d92d900, 0x2d5e2600, 0x2d1a7300, 0x333fc000, 0x337b9500, 0x33b76a00, 0x33f33f00,
20128 +
            0x322e9400, 0x326ac100, 0x32a63e00, 0x32e26b00, 0x311d6800, 0x31593d00, 0x3195c200,
20129 +
            0x31d19700, 0x300c3c00, 0x30486900, 0x30849600, 0x30c0c300, 0x377a9000, 0x373ec500,
20130 +
            0x37f23a00, 0x37b66f00, 0x366bc400, 0x362f9100, 0x36e36e00, 0x36a73b00, 0x35583800,
20131 +
            0x351c6d00, 0x35d09200, 0x3594c700, 0x34496c00, 0x340d3900, 0x34c1c600, 0x34859300,
20132 +
            0x3bb56000, 0x3bf13500, 0x3b3dca00, 0x3b799f00, 0x3aa43400, 0x3ae06100, 0x3a2c9e00,
20133 +
            0x3a68cb00, 0x3997c800, 0x39d39d00, 0x391f6200, 0x395b3700, 0x38869c00, 0x38c2c900,
20134 +
            0x380e3600, 0x384a6300, 0x3ff03000, 0x3fb46500, 0x3f789a00, 0x3f3ccf00, 0x3ee16400,
20135 +
            0x3ea53100, 0x3e69ce00, 0x3e2d9b00, 0x3dd29800, 0x3d96cd00, 0x3d5a3200, 0x3d1e6700,
20136 +
            0x3cc3cc00, 0x3c879900, 0x3c4b6600, 0x3c0f3300,
20137 +
        ],
20138 +
        [
20139 +
            0x00000000, 0x44550000, 0x88aa0000, 0xccff0000, 0x115400af, 0x550100af, 0x99fe00af,
20140 +
            0xddab00af, 0x22a8015e, 0x66fd015e, 0xaa02015e, 0xee57015e, 0x33fc01f1, 0x77a901f1,
20141 +
            0xbb5601f1, 0xff0301f1, 0x455002bc, 0x010502bc, 0xcdfa02bc, 0x89af02bc, 0x54040213,
20142 +
            0x10510213, 0xdcae0213, 0x98fb0213, 0x67f803e2, 0x23ad03e2, 0xef5203e2, 0xab0703e2,
20143 +
            0x76ac034d, 0x32f9034d, 0xfe06034d, 0xba53034d, 0x8aa00578, 0xcef50578, 0x020a0578,
20144 +
            0x465f0578, 0x9bf405d7, 0xdfa105d7, 0x135e05d7, 0x570b05d7, 0xa8080426, 0xec5d0426,
20145 +
            0x20a20426, 0x64f70426, 0xb95c0489, 0xfd090489, 0x31f60489, 0x75a30489, 0xcff007c4,
20146 +
            0x8ba507c4, 0x475a07c4, 0x030f07c4, 0xdea4076b, 0x9af1076b, 0x560e076b, 0x125b076b,
20147 +
            0xed58069a, 0xa90d069a, 0x65f2069a, 0x21a7069a, 0xfc0c0635, 0xb8590635, 0x74a60635,
20148 +
            0x30f30635, 0x15400a5f, 0x51150a5f, 0x9dea0a5f, 0xd9bf0a5f, 0x04140af0, 0x40410af0,
20149 +
            0x8cbe0af0, 0xc8eb0af0, 0x37e80b01, 0x73bd0b01, 0xbf420b01, 0xfb170b01, 0x26bc0bae,
20150 +
            0x62e90bae, 0xae160bae, 0xea430bae, 0x501008e3, 0x144508e3, 0xd8ba08e3, 0x9cef08e3,
20151 +
            0x4144084c, 0x0511084c, 0xc9ee084c, 0x8dbb084c, 0x72b809bd, 0x36ed09bd, 0xfa1209bd,
20152 +
            0xbe4709bd, 0x63ec0912, 0x27b90912, 0xeb460912, 0xaf130912, 0x9fe00f27, 0xdbb50f27,
20153 +
            0x174a0f27, 0x531f0f27, 0x8eb40f88, 0xcae10f88, 0x061e0f88, 0x424b0f88, 0xbd480e79,
20154 +
            0xf91d0e79, 0x35e20e79, 0x71b70e79, 0xac1c0ed6, 0xe8490ed6, 0x24b60ed6, 0x60e30ed6,
20155 +
            0xdab00d9b, 0x9ee50d9b, 0x521a0d9b, 0x164f0d9b, 0xcbe40d34, 0x8fb10d34, 0x434e0d34,
20156 +
            0x071b0d34, 0xf8180cc5, 0xbc4d0cc5, 0x70b20cc5, 0x34e70cc5, 0xe94c0c6a, 0xad190c6a,
20157 +
            0x61e60c6a, 0x25b30c6a, 0x2a8014be, 0x6ed514be, 0xa22a14be, 0xe67f14be, 0x3bd41411,
20158 +
            0x7f811411, 0xb37e1411, 0xf72b1411, 0x082815e0, 0x4c7d15e0, 0x808215e0, 0xc4d715e0,
20159 +
            0x197c154f, 0x5d29154f, 0x91d6154f, 0xd583154f, 0x6fd01602, 0x2b851602, 0xe77a1602,
20160 +
            0xa32f1602, 0x7e8416ad, 0x3ad116ad, 0xf62e16ad, 0xb27b16ad, 0x4d78175c, 0x092d175c,
20161 +
            0xc5d2175c, 0x8187175c, 0x5c2c17f3, 0x187917f3, 0xd48617f3, 0x90d317f3, 0xa02011c6,
20162 +
            0xe47511c6, 0x288a11c6, 0x6cdf11c6, 0xb1741169, 0xf5211169, 0x39de1169, 0x7d8b1169,
20163 +
            0x82881098, 0xc6dd1098, 0x0a221098, 0x4e771098, 0x93dc1037, 0xd7891037, 0x1b761037,
20164 +
            0x5f231037, 0xe570137a, 0xa125137a, 0x6dda137a, 0x298f137a, 0xf42413d5, 0xb07113d5,
20165 +
            0x7c8e13d5, 0x38db13d5, 0xc7d81224, 0x838d1224, 0x4f721224, 0x0b271224, 0xd68c128b,
20166 +
            0x92d9128b, 0x5e26128b, 0x1a73128b, 0x3fc01ee1, 0x7b951ee1, 0xb76a1ee1, 0xf33f1ee1,
20167 +
            0x2e941e4e, 0x6ac11e4e, 0xa63e1e4e, 0xe26b1e4e, 0x1d681fbf, 0x593d1fbf, 0x95c21fbf,
20168 +
            0xd1971fbf, 0x0c3c1f10, 0x48691f10, 0x84961f10, 0xc0c31f10, 0x7a901c5d, 0x3ec51c5d,
20169 +
            0xf23a1c5d, 0xb66f1c5d, 0x6bc41cf2, 0x2f911cf2, 0xe36e1cf2, 0xa73b1cf2, 0x58381d03,
20170 +
            0x1c6d1d03, 0xd0921d03, 0x94c71d03, 0x496c1dac, 0x0d391dac, 0xc1c61dac, 0x85931dac,
20171 +
            0xb5601b99, 0xf1351b99, 0x3dca1b99, 0x799f1b99, 0xa4341b36, 0xe0611b36, 0x2c9e1b36,
20172 +
            0x68cb1b36, 0x97c81ac7, 0xd39d1ac7, 0x1f621ac7, 0x5b371ac7, 0x869c1a68, 0xc2c91a68,
20173 +
            0x0e361a68, 0x4a631a68, 0xf0301925, 0xb4651925, 0x789a1925, 0x3ccf1925, 0xe164198a,
20174 +
            0xa531198a, 0x69ce198a, 0x2d9b198a, 0xd298187b, 0x96cd187b, 0x5a32187b, 0x1e67187b,
20175 +
            0xc3cc18d4, 0x879918d4, 0x4b6618d4, 0x0f3318d4,
20176 +
        ],
20177 +
        [
20178 +
            0x00000000, 0x5500297c, 0xaa0052f8, 0xff007b84, 0x5400a55f, 0x01008c23, 0xfe00f7a7,
20179 +
            0xab00dedb, 0xa8014abe, 0xfd0163c2, 0x02011846, 0x5701313a, 0xfc01efe1, 0xa901c69d,
20180 +
            0x5601bd19, 0x03019465, 0x500295d3, 0x0502bcaf, 0xfa02c72b, 0xaf02ee57, 0x0402308c,
20181 +
            0x510219f0, 0xae026274, 0xfb024b08, 0xf803df6d, 0xad03f611, 0x52038d95, 0x0703a4e9,
20182 +
            0xac037a32, 0xf903534e, 0x060328ca, 0x530301b6, 0xa0052ba6, 0xf50502da, 0x0a05795e,
20183 +
            0x5f055022, 0xf4058ef9, 0xa105a785, 0x5e05dc01, 0x0b05f57d, 0x08046118, 0x5d044864,
20184 +
            0xa20433e0, 0xf7041a9c, 0x5c04c447, 0x0904ed3b, 0xf60496bf, 0xa304bfc3, 0xf007be75,
20185 +
            0xa5079709, 0x5a07ec8d, 0x0f07c5f1, 0xa4071b2a, 0xf1073256, 0x0e0749d2, 0x5b0760ae,
20186 +
            0x5806f4cb, 0x0d06ddb7, 0xf206a633, 0xa7068f4f, 0x0c065194, 0x590678e8, 0xa606036c,
20187 +
            0xf3062a10, 0x400a57e3, 0x150a7e9f, 0xea0a051b, 0xbf0a2c67, 0x140af2bc, 0x410adbc0,
20188 +
            0xbe0aa044, 0xeb0a8938, 0xe80b1d5d, 0xbd0b3421, 0x420b4fa5, 0x170b66d9, 0xbc0bb802,
20189 +
            0xe90b917e, 0x160beafa, 0x430bc386, 0x1008c230, 0x4508eb4c, 0xba0890c8, 0xef08b9b4,
20190 +
            0x4408676f, 0x11084e13, 0xee083597, 0xbb081ceb, 0xb809888e, 0xed09a1f2, 0x1209da76,
20191 +
            0x4709f30a, 0xec092dd1, 0xb90904ad, 0x46097f29, 0x13095655, 0xe00f7c45, 0xb50f5539,
20192 +
            0x4a0f2ebd, 0x1f0f07c1, 0xb40fd91a, 0xe10ff066, 0x1e0f8be2, 0x4b0fa29e, 0x480e36fb,
20193 +
            0x1d0e1f87, 0xe20e6403, 0xb70e4d7f, 0x1c0e93a4, 0x490ebad8, 0xb60ec15c, 0xe30ee820,
20194 +
            0xb00de996, 0xe50dc0ea, 0x1a0dbb6e, 0x4f0d9212, 0xe40d4cc9, 0xb10d65b5, 0x4e0d1e31,
20195 +
            0x1b0d374d, 0x180ca328, 0x4d0c8a54, 0xb20cf1d0, 0xe70cd8ac, 0x4c0c0677, 0x190c2f0b,
20196 +
            0xe60c548f, 0xb30c7df3, 0x8014afc6, 0xd51486ba, 0x2a14fd3e, 0x7f14d442, 0xd4140a99,
20197 +
            0x811423e5, 0x7e145861, 0x2b14711d, 0x2815e578, 0x7d15cc04, 0x8215b780, 0xd7159efc,
20198 +
            0x7c154027, 0x2915695b, 0xd61512df, 0x83153ba3, 0xd0163a15, 0x85161369, 0x7a1668ed,
20199 +
            0x2f164191, 0x84169f4a, 0xd116b636, 0x2e16cdb2, 0x7b16e4ce, 0x781770ab, 0x2d1759d7,
20200 +
            0xd2172253, 0x87170b2f, 0x2c17d5f4, 0x7917fc88, 0x8617870c, 0xd317ae70, 0x20118460,
20201 +
            0x7511ad1c, 0x8a11d698, 0xdf11ffe4, 0x7411213f, 0x21110843, 0xde1173c7, 0x8b115abb,
20202 +
            0x8810cede, 0xdd10e7a2, 0x22109c26, 0x7710b55a, 0xdc106b81, 0x891042fd, 0x76103979,
20203 +
            0x23101005, 0x701311b3, 0x251338cf, 0xda13434b, 0x8f136a37, 0x2413b4ec, 0x71139d90,
20204 +
            0x8e13e614, 0xdb13cf68, 0xd8125b0d, 0x8d127271, 0x721209f5, 0x27122089, 0x8c12fe52,
20205 +
            0xd912d72e, 0x2612acaa, 0x731285d6, 0xc01ef825, 0x951ed159, 0x6a1eaadd, 0x3f1e83a1,
20206 +
            0x941e5d7a, 0xc11e7406, 0x3e1e0f82, 0x6b1e26fe, 0x681fb29b, 0x3d1f9be7, 0xc21fe063,
20207 +
            0x971fc91f, 0x3c1f17c4, 0x691f3eb8, 0x961f453c, 0xc31f6c40, 0x901c6df6, 0xc51c448a,
20208 +
            0x3a1c3f0e, 0x6f1c1672, 0xc41cc8a9, 0x911ce1d5, 0x6e1c9a51, 0x3b1cb32d, 0x381d2748,
20209 +
            0x6d1d0e34, 0x921d75b0, 0xc71d5ccc, 0x6c1d8217, 0x391dab6b, 0xc61dd0ef, 0x931df993,
20210 +
            0x601bd383, 0x351bfaff, 0xca1b817b, 0x9f1ba807, 0x341b76dc, 0x611b5fa0, 0x9e1b2424,
20211 +
            0xcb1b0d58, 0xc81a993d, 0x9d1ab041, 0x621acbc5, 0x371ae2b9, 0x9c1a3c62, 0xc91a151e,
20212 +
            0x361a6e9a, 0x631a47e6, 0x30194650, 0x65196f2c, 0x9a1914a8, 0xcf193dd4, 0x6419e30f,
20213 +
            0x3119ca73, 0xce19b1f7, 0x9b19988b, 0x98180cee, 0xcd182592, 0x32185e16, 0x6718776a,
20214 +
            0xcc18a9b1, 0x991880cd, 0x6618fb49, 0x3318d235,
20215 +
        ],
20216 +
        [
20217 +
            0x00000000, 0x00295f23, 0x0052be46, 0x007be165, 0x00a57c8c, 0x008c23af, 0x00f7c2ca,
20218 +
            0x00de9de9, 0x014af918, 0x0163a63b, 0x0118475e, 0x0131187d, 0x01ef8594, 0x01c6dab7,
20219 +
            0x01bd3bd2, 0x019464f1, 0x0295f230, 0x02bcad13, 0x02c74c76, 0x02ee1355, 0x02308ebc,
20220 +
            0x0219d19f, 0x026230fa, 0x024b6fd9, 0x03df0b28, 0x03f6540b, 0x038db56e, 0x03a4ea4d,
20221 +
            0x037a77a4, 0x03532887, 0x0328c9e2, 0x030196c1, 0x052be460, 0x0502bb43, 0x05795a26,
20222 +
            0x05500505, 0x058e98ec, 0x05a7c7cf, 0x05dc26aa, 0x05f57989, 0x04611d78, 0x0448425b,
20223 +
            0x0433a33e, 0x041afc1d, 0x04c461f4, 0x04ed3ed7, 0x0496dfb2, 0x04bf8091, 0x07be1650,
20224 +
            0x07974973, 0x07eca816, 0x07c5f735, 0x071b6adc, 0x073235ff, 0x0749d49a, 0x07608bb9,
20225 +
            0x06f4ef48, 0x06ddb06b, 0x06a6510e, 0x068f0e2d, 0x065193c4, 0x0678cce7, 0x06032d82,
20226 +
            0x062a72a1, 0x0a57c8c0, 0x0a7e97e3, 0x0a057686, 0x0a2c29a5, 0x0af2b44c, 0x0adbeb6f,
20227 +
            0x0aa00a0a, 0x0a895529, 0x0b1d31d8, 0x0b346efb, 0x0b4f8f9e, 0x0b66d0bd, 0x0bb84d54,
20228 +
            0x0b911277, 0x0beaf312, 0x0bc3ac31, 0x08c23af0, 0x08eb65d3, 0x089084b6, 0x08b9db95,
20229 +
            0x0867467c, 0x084e195f, 0x0835f83a, 0x081ca719, 0x0988c3e8, 0x09a19ccb, 0x09da7dae,
20230 +
            0x09f3228d, 0x092dbf64, 0x0904e047, 0x097f0122, 0x09565e01, 0x0f7c2ca0, 0x0f557383,
20231 +
            0x0f2e92e6, 0x0f07cdc5, 0x0fd9502c, 0x0ff00f0f, 0x0f8bee6a, 0x0fa2b149, 0x0e36d5b8,
20232 +
            0x0e1f8a9b, 0x0e646bfe, 0x0e4d34dd, 0x0e93a934, 0x0ebaf617, 0x0ec11772, 0x0ee84851,
20233 +
            0x0de9de90, 0x0dc081b3, 0x0dbb60d6, 0x0d923ff5, 0x0d4ca21c, 0x0d65fd3f, 0x0d1e1c5a,
20234 +
            0x0d374379, 0x0ca32788, 0x0c8a78ab, 0x0cf199ce, 0x0cd8c6ed, 0x0c065b04, 0x0c2f0427,
20235 +
            0x0c54e542, 0x0c7dba61, 0x14af9180, 0x1486cea3, 0x14fd2fc6, 0x14d470e5, 0x140aed0c,
20236 +
            0x1423b22f, 0x1458534a, 0x14710c69, 0x15e56898, 0x15cc37bb, 0x15b7d6de, 0x159e89fd,
20237 +
            0x15401414, 0x15694b37, 0x1512aa52, 0x153bf571, 0x163a63b0, 0x16133c93, 0x1668ddf6,
20238 +
            0x164182d5, 0x169f1f3c, 0x16b6401f, 0x16cda17a, 0x16e4fe59, 0x17709aa8, 0x1759c58b,
20239 +
            0x172224ee, 0x170b7bcd, 0x17d5e624, 0x17fcb907, 0x17875862, 0x17ae0741, 0x118475e0,
20240 +
            0x11ad2ac3, 0x11d6cba6, 0x11ff9485, 0x1121096c, 0x1108564f, 0x1173b72a, 0x115ae809,
20241 +
            0x10ce8cf8, 0x10e7d3db, 0x109c32be, 0x10b56d9d, 0x106bf074, 0x1042af57, 0x10394e32,
20242 +
            0x10101111, 0x131187d0, 0x1338d8f3, 0x13433996, 0x136a66b5, 0x13b4fb5c, 0x139da47f,
20243 +
            0x13e6451a, 0x13cf1a39, 0x125b7ec8, 0x127221eb, 0x1209c08e, 0x12209fad, 0x12fe0244,
20244 +
            0x12d75d67, 0x12acbc02, 0x1285e321, 0x1ef85940, 0x1ed10663, 0x1eaae706, 0x1e83b825,
20245 +
            0x1e5d25cc, 0x1e747aef, 0x1e0f9b8a, 0x1e26c4a9, 0x1fb2a058, 0x1f9bff7b, 0x1fe01e1e,
20246 +
            0x1fc9413d, 0x1f17dcd4, 0x1f3e83f7, 0x1f456292, 0x1f6c3db1, 0x1c6dab70, 0x1c44f453,
20247 +
            0x1c3f1536, 0x1c164a15, 0x1cc8d7fc, 0x1ce188df, 0x1c9a69ba, 0x1cb33699, 0x1d275268,
20248 +
            0x1d0e0d4b, 0x1d75ec2e, 0x1d5cb30d, 0x1d822ee4, 0x1dab71c7, 0x1dd090a2, 0x1df9cf81,
20249 +
            0x1bd3bd20, 0x1bfae203, 0x1b810366, 0x1ba85c45, 0x1b76c1ac, 0x1b5f9e8f, 0x1b247fea,
20250 +
            0x1b0d20c9, 0x1a994438, 0x1ab01b1b, 0x1acbfa7e, 0x1ae2a55d, 0x1a3c38b4, 0x1a156797,
20251 +
            0x1a6e86f2, 0x1a47d9d1, 0x19464f10, 0x196f1033, 0x1914f156, 0x193dae75, 0x19e3339c,
20252 +
            0x19ca6cbf, 0x19b18dda, 0x1998d2f9, 0x180cb608, 0x1825e92b, 0x185e084e, 0x1877576d,
20253 +
            0x18a9ca84, 0x188095a7, 0x18fb74c2, 0x18d22be1,
20254 +
        ],
20255 +
        [
20256 +
            0x00000000, 0x295f2300, 0x52be4600, 0x7be16500, 0xa57c8c00, 0x8c23af00, 0xf7c2ca00,
20257 +
            0xde9de900, 0x4af918af, 0x63a63baf, 0x18475eaf, 0x31187daf, 0xef8594af, 0xc6dab7af,
20258 +
            0xbd3bd2af, 0x9464f1af, 0x95f2315e, 0xbcad125e, 0xc74c775e, 0xee13545e, 0x308ebd5e,
20259 +
            0x19d19e5e, 0x6230fb5e, 0x4b6fd85e, 0xdf0b29f1, 0xf6540af1, 0x8db56ff1, 0xa4ea4cf1,
20260 +
            0x7a77a5f1, 0x532886f1, 0x28c9e3f1, 0x0196c0f1, 0x2be46213, 0x02bb4113, 0x795a2413,
20261 +
            0x50050713, 0x8e98ee13, 0xa7c7cd13, 0xdc26a813, 0xf5798b13, 0x611d7abc, 0x484259bc,
20262 +
            0x33a33cbc, 0x1afc1fbc, 0xc461f6bc, 0xed3ed5bc, 0x96dfb0bc, 0xbf8093bc, 0xbe16534d,
20263 +
            0x9749704d, 0xeca8154d, 0xc5f7364d, 0x1b6adf4d, 0x3235fc4d, 0x49d4994d, 0x608bba4d,
20264 +
            0xf4ef4be2, 0xddb068e2, 0xa6510de2, 0x8f0e2ee2, 0x5193c7e2, 0x78cce4e2, 0x032d81e2,
20265 +
            0x2a72a2e2, 0x57c8c426, 0x7e97e726, 0x05768226, 0x2c29a126, 0xf2b44826, 0xdbeb6b26,
20266 +
            0xa00a0e26, 0x89552d26, 0x1d31dc89, 0x346eff89, 0x4f8f9a89, 0x66d0b989, 0xb84d5089,
20267 +
            0x91127389, 0xeaf31689, 0xc3ac3589, 0xc23af578, 0xeb65d678, 0x9084b378, 0xb9db9078,
20268 +
            0x67467978, 0x4e195a78, 0x35f83f78, 0x1ca71c78, 0x88c3edd7, 0xa19cced7, 0xda7dabd7,
20269 +
            0xf32288d7, 0x2dbf61d7, 0x04e042d7, 0x7f0127d7, 0x565e04d7, 0x7c2ca635, 0x55738535,
20270 +
            0x2e92e035, 0x07cdc335, 0xd9502a35, 0xf00f0935, 0x8bee6c35, 0xa2b14f35, 0x36d5be9a,
20271 +
            0x1f8a9d9a, 0x646bf89a, 0x4d34db9a, 0x93a9329a, 0xbaf6119a, 0xc117749a, 0xe848579a,
20272 +
            0xe9de976b, 0xc081b46b, 0xbb60d16b, 0x923ff26b, 0x4ca21b6b, 0x65fd386b, 0x1e1c5d6b,
20273 +
            0x37437e6b, 0xa3278fc4, 0x8a78acc4, 0xf199c9c4, 0xd8c6eac4, 0x065b03c4, 0x2f0420c4,
20274 +
            0x54e545c4, 0x7dba66c4, 0xaf91884c, 0x86ceab4c, 0xfd2fce4c, 0xd470ed4c, 0x0aed044c,
20275 +
            0x23b2274c, 0x5853424c, 0x710c614c, 0xe56890e3, 0xcc37b3e3, 0xb7d6d6e3, 0x9e89f5e3,
20276 +
            0x40141ce3, 0x694b3fe3, 0x12aa5ae3, 0x3bf579e3, 0x3a63b912, 0x133c9a12, 0x68ddff12,
20277 +
            0x4182dc12, 0x9f1f3512, 0xb6401612, 0xcda17312, 0xe4fe5012, 0x709aa1bd, 0x59c582bd,
20278 +
            0x2224e7bd, 0x0b7bc4bd, 0xd5e62dbd, 0xfcb90ebd, 0x87586bbd, 0xae0748bd, 0x8475ea5f,
20279 +
            0xad2ac95f, 0xd6cbac5f, 0xff948f5f, 0x2109665f, 0x0856455f, 0x73b7205f, 0x5ae8035f,
20280 +
            0xce8cf2f0, 0xe7d3d1f0, 0x9c32b4f0, 0xb56d97f0, 0x6bf07ef0, 0x42af5df0, 0x394e38f0,
20281 +
            0x10111bf0, 0x1187db01, 0x38d8f801, 0x43399d01, 0x6a66be01, 0xb4fb5701, 0x9da47401,
20282 +
            0xe6451101, 0xcf1a3201, 0x5b7ec3ae, 0x7221e0ae, 0x09c085ae, 0x209fa6ae, 0xfe024fae,
20283 +
            0xd75d6cae, 0xacbc09ae, 0x85e32aae, 0xf8594c6a, 0xd1066f6a, 0xaae70a6a, 0x83b8296a,
20284 +
            0x5d25c06a, 0x747ae36a, 0x0f9b866a, 0x26c4a56a, 0xb2a054c5, 0x9bff77c5, 0xe01e12c5,
20285 +
            0xc94131c5, 0x17dcd8c5, 0x3e83fbc5, 0x45629ec5, 0x6c3dbdc5, 0x6dab7d34, 0x44f45e34,
20286 +
            0x3f153b34, 0x164a1834, 0xc8d7f134, 0xe188d234, 0x9a69b734, 0xb3369434, 0x2752659b,
20287 +
            0x0e0d469b, 0x75ec239b, 0x5cb3009b, 0x822ee99b, 0xab71ca9b, 0xd090af9b, 0xf9cf8c9b,
20288 +
            0xd3bd2e79, 0xfae20d79, 0x81036879, 0xa85c4b79, 0x76c1a279, 0x5f9e8179, 0x247fe479,
20289 +
            0x0d20c779, 0x994436d6, 0xb01b15d6, 0xcbfa70d6, 0xe2a553d6, 0x3c38bad6, 0x156799d6,
20290 +
            0x6e86fcd6, 0x47d9dfd6, 0x464f1f27, 0x6f103c27, 0x14f15927, 0x3dae7a27, 0xe3339327,
20291 +
            0xca6cb027, 0xb18dd527, 0x98d2f627, 0x0cb60788, 0x25e92488, 0x5e084188, 0x77576288,
20292 +
            0xa9ca8b88, 0x8095a888, 0xfb74cd88, 0xd22bee88,
20293 +
        ],
20294 +
        [
20295 +
            0x00000000, 0x5f231037, 0xbe46206e, 0xe1653059, 0x7c8c4073, 0x23af5044, 0xc2ca601d,
20296 +
            0x9de9702a, 0xf91880e6, 0xa63b90d1, 0x475ea088, 0x187db0bf, 0x8594c095, 0xdab7d0a2,
20297 +
            0x3bd2e0fb, 0x64f1f0cc, 0xf2310163, 0xad121154, 0x4c77210d, 0x1354313a, 0x8ebd4110,
20298 +
            0xd19e5127, 0x30fb617e, 0x6fd87149, 0x0b298185, 0x540a91b2, 0xb56fa1eb, 0xea4cb1dc,
20299 +
            0x77a5c1f6, 0x2886d1c1, 0xc9e3e198, 0x96c0f1af, 0xe4620269, 0xbb41125e, 0x5a242207,
20300 +
            0x05073230, 0x98ee421a, 0xc7cd522d, 0x26a86274, 0x798b7243, 0x1d7a828f, 0x425992b8,
20301 +
            0xa33ca2e1, 0xfc1fb2d6, 0x61f6c2fc, 0x3ed5d2cb, 0xdfb0e292, 0x8093f2a5, 0x1653030a,
20302 +
            0x4970133d, 0xa8152364, 0xf7363353, 0x6adf4379, 0x35fc534e, 0xd4996317, 0x8bba7320,
20303 +
            0xef4b83ec, 0xb06893db, 0x510da382, 0x0e2eb3b5, 0x93c7c39f, 0xcce4d3a8, 0x2d81e3f1,
20304 +
            0x72a2f3c6, 0xc8c4047d, 0x97e7144a, 0x76822413, 0x29a13424, 0xb448440e, 0xeb6b5439,
20305 +
            0x0a0e6460, 0x552d7457, 0x31dc849b, 0x6eff94ac, 0x8f9aa4f5, 0xd0b9b4c2, 0x4d50c4e8,
20306 +
            0x1273d4df, 0xf316e486, 0xac35f4b1, 0x3af5051e, 0x65d61529, 0x84b32570, 0xdb903547,
20307 +
            0x4679456d, 0x195a555a, 0xf83f6503, 0xa71c7534, 0xc3ed85f8, 0x9cce95cf, 0x7daba596,
20308 +
            0x2288b5a1, 0xbf61c58b, 0xe042d5bc, 0x0127e5e5, 0x5e04f5d2, 0x2ca60614, 0x73851623,
20309 +
            0x92e0267a, 0xcdc3364d, 0x502a4667, 0x0f095650, 0xee6c6609, 0xb14f763e, 0xd5be86f2,
20310 +
            0x8a9d96c5, 0x6bf8a69c, 0x34dbb6ab, 0xa932c681, 0xf611d6b6, 0x1774e6ef, 0x4857f6d8,
20311 +
            0xde970777, 0x81b41740, 0x60d12719, 0x3ff2372e, 0xa21b4704, 0xfd385733, 0x1c5d676a,
20312 +
            0x437e775d, 0x278f8791, 0x78ac97a6, 0x99c9a7ff, 0xc6eab7c8, 0x5b03c7e2, 0x0420d7d5,
20313 +
            0xe545e78c, 0xba66f7bb, 0x91880855, 0xceab1862, 0x2fce283b, 0x70ed380c, 0xed044826,
20314 +
            0xb2275811, 0x53426848, 0x0c61787f, 0x689088b3, 0x37b39884, 0xd6d6a8dd, 0x89f5b8ea,
20315 +
            0x141cc8c0, 0x4b3fd8f7, 0xaa5ae8ae, 0xf579f899, 0x63b90936, 0x3c9a1901, 0xddff2958,
20316 +
            0x82dc396f, 0x1f354945, 0x40165972, 0xa173692b, 0xfe50791c, 0x9aa189d0, 0xc58299e7,
20317 +
            0x24e7a9be, 0x7bc4b989, 0xe62dc9a3, 0xb90ed994, 0x586be9cd, 0x0748f9fa, 0x75ea0a3c,
20318 +
            0x2ac91a0b, 0xcbac2a52, 0x948f3a65, 0x09664a4f, 0x56455a78, 0xb7206a21, 0xe8037a16,
20319 +
            0x8cf28ada, 0xd3d19aed, 0x32b4aab4, 0x6d97ba83, 0xf07ecaa9, 0xaf5dda9e, 0x4e38eac7,
20320 +
            0x111bfaf0, 0x87db0b5f, 0xd8f81b68, 0x399d2b31, 0x66be3b06, 0xfb574b2c, 0xa4745b1b,
20321 +
            0x45116b42, 0x1a327b75, 0x7ec38bb9, 0x21e09b8e, 0xc085abd7, 0x9fa6bbe0, 0x024fcbca,
20322 +
            0x5d6cdbfd, 0xbc09eba4, 0xe32afb93, 0x594c0c28, 0x066f1c1f, 0xe70a2c46, 0xb8293c71,
20323 +
            0x25c04c5b, 0x7ae35c6c, 0x9b866c35, 0xc4a57c02, 0xa0548cce, 0xff779cf9, 0x1e12aca0,
20324 +
            0x4131bc97, 0xdcd8ccbd, 0x83fbdc8a, 0x629eecd3, 0x3dbdfce4, 0xab7d0d4b, 0xf45e1d7c,
20325 +
            0x153b2d25, 0x4a183d12, 0xd7f14d38, 0x88d25d0f, 0x69b76d56, 0x36947d61, 0x52658dad,
20326 +
            0x0d469d9a, 0xec23adc3, 0xb300bdf4, 0x2ee9cdde, 0x71cadde9, 0x90afedb0, 0xcf8cfd87,
20327 +
            0xbd2e0e41, 0xe20d1e76, 0x03682e2f, 0x5c4b3e18, 0xc1a24e32, 0x9e815e05, 0x7fe46e5c,
20328 +
            0x20c77e6b, 0x44368ea7, 0x1b159e90, 0xfa70aec9, 0xa553befe, 0x38baced4, 0x6799dee3,
20329 +
            0x86fceeba, 0xd9dffe8d, 0x4f1f0f22, 0x103c1f15, 0xf1592f4c, 0xae7a3f7b, 0x33934f51,
20330 +
            0x6cb05f66, 0x8dd56f3f, 0xd2f67f08, 0xb6078fc4, 0xe9249ff3, 0x0841afaa, 0x5762bf9d,
20331 +
            0xca8bcfb7, 0x95a8df80, 0x74cdefd9, 0x2beeffee,
20332 +
        ],
20333 +
        [
20334 +
            0x00000000, 0x23101005, 0x4620200a, 0x6530300f, 0x8c404014, 0xaf505011, 0xca60601e,
20335 +
            0xe970701b, 0x18808087, 0x3b909082, 0x5ea0a08d, 0x7db0b088, 0x94c0c093, 0xb7d0d096,
20336 +
            0xd2e0e099, 0xf1f0f09c, 0x3101010e, 0x1211110b, 0x77212104, 0x54313101, 0xbd41411a,
20337 +
            0x9e51511f, 0xfb616110, 0xd8717115, 0x29818189, 0x0a91918c, 0x6fa1a183, 0x4cb1b186,
20338 +
            0xa5c1c19d, 0x86d1d198, 0xe3e1e197, 0xc0f1f192, 0x6202021c, 0x41121219, 0x24222216,
20339 +
            0x07323213, 0xee424208, 0xcd52520d, 0xa8626202, 0x8b727207, 0x7a82829b, 0x5992929e,
20340 +
            0x3ca2a291, 0x1fb2b294, 0xf6c2c28f, 0xd5d2d28a, 0xb0e2e285, 0x93f2f280, 0x53030312,
20341 +
            0x70131317, 0x15232318, 0x3633331d, 0xdf434306, 0xfc535303, 0x9963630c, 0xba737309,
20342 +
            0x4b838395, 0x68939390, 0x0da3a39f, 0x2eb3b39a, 0xc7c3c381, 0xe4d3d384, 0x81e3e38b,
20343 +
            0xa2f3f38e, 0xc4040438, 0xe714143d, 0x82242432, 0xa1343437, 0x4844442c, 0x6b545429,
20344 +
            0x0e646426, 0x2d747423, 0xdc8484bf, 0xff9494ba, 0x9aa4a4b5, 0xb9b4b4b0, 0x50c4c4ab,
20345 +
            0x73d4d4ae, 0x16e4e4a1, 0x35f4f4a4, 0xf5050536, 0xd6151533, 0xb325253c, 0x90353539,
20346 +
            0x79454522, 0x5a555527, 0x3f656528, 0x1c75752d, 0xed8585b1, 0xce9595b4, 0xaba5a5bb,
20347 +
            0x88b5b5be, 0x61c5c5a5, 0x42d5d5a0, 0x27e5e5af, 0x04f5f5aa, 0xa6060624, 0x85161621,
20348 +
            0xe026262e, 0xc336362b, 0x2a464630, 0x09565635, 0x6c66663a, 0x4f76763f, 0xbe8686a3,
20349 +
            0x9d9696a6, 0xf8a6a6a9, 0xdbb6b6ac, 0x32c6c6b7, 0x11d6d6b2, 0x74e6e6bd, 0x57f6f6b8,
20350 +
            0x9707072a, 0xb417172f, 0xd1272720, 0xf2373725, 0x1b47473e, 0x3857573b, 0x5d676734,
20351 +
            0x7e777731, 0x8f8787ad, 0xac9797a8, 0xc9a7a7a7, 0xeab7b7a2, 0x03c7c7b9, 0x20d7d7bc,
20352 +
            0x45e7e7b3, 0x66f7f7b6, 0x880808df, 0xab1818da, 0xce2828d5, 0xed3838d0, 0x044848cb,
20353 +
            0x275858ce, 0x426868c1, 0x617878c4, 0x90888858, 0xb398985d, 0xd6a8a852, 0xf5b8b857,
20354 +
            0x1cc8c84c, 0x3fd8d849, 0x5ae8e846, 0x79f8f843, 0xb90909d1, 0x9a1919d4, 0xff2929db,
20355 +
            0xdc3939de, 0x354949c5, 0x165959c0, 0x736969cf, 0x507979ca, 0xa1898956, 0x82999953,
20356 +
            0xe7a9a95c, 0xc4b9b959, 0x2dc9c942, 0x0ed9d947, 0x6be9e948, 0x48f9f94d, 0xea0a0ac3,
20357 +
            0xc91a1ac6, 0xac2a2ac9, 0x8f3a3acc, 0x664a4ad7, 0x455a5ad2, 0x206a6add, 0x037a7ad8,
20358 +
            0xf28a8a44, 0xd19a9a41, 0xb4aaaa4e, 0x97baba4b, 0x7ecaca50, 0x5ddada55, 0x38eaea5a,
20359 +
            0x1bfafa5f, 0xdb0b0bcd, 0xf81b1bc8, 0x9d2b2bc7, 0xbe3b3bc2, 0x574b4bd9, 0x745b5bdc,
20360 +
            0x116b6bd3, 0x327b7bd6, 0xc38b8b4a, 0xe09b9b4f, 0x85abab40, 0xa6bbbb45, 0x4fcbcb5e,
20361 +
            0x6cdbdb5b, 0x09ebeb54, 0x2afbfb51, 0x4c0c0ce7, 0x6f1c1ce2, 0x0a2c2ced, 0x293c3ce8,
20362 +
            0xc04c4cf3, 0xe35c5cf6, 0x866c6cf9, 0xa57c7cfc, 0x548c8c60, 0x779c9c65, 0x12acac6a,
20363 +
            0x31bcbc6f, 0xd8cccc74, 0xfbdcdc71, 0x9eecec7e, 0xbdfcfc7b, 0x7d0d0de9, 0x5e1d1dec,
20364 +
            0x3b2d2de3, 0x183d3de6, 0xf14d4dfd, 0xd25d5df8, 0xb76d6df7, 0x947d7df2, 0x658d8d6e,
20365 +
            0x469d9d6b, 0x23adad64, 0x00bdbd61, 0xe9cdcd7a, 0xcadddd7f, 0xafeded70, 0x8cfdfd75,
20366 +
            0x2e0e0efb, 0x0d1e1efe, 0x682e2ef1, 0x4b3e3ef4, 0xa24e4eef, 0x815e5eea, 0xe46e6ee5,
20367 +
            0xc77e7ee0, 0x368e8e7c, 0x159e9e79, 0x70aeae76, 0x53bebe73, 0xbacece68, 0x99dede6d,
20368 +
            0xfceeee62, 0xdffefe67, 0x1f0f0ff5, 0x3c1f1ff0, 0x592f2fff, 0x7a3f3ffa, 0x934f4fe1,
20369 +
            0xb05f5fe4, 0xd56f6feb, 0xf67f7fee, 0x078f8f72, 0x249f9f77, 0x41afaf78, 0x62bfbf7d,
20370 +
            0x8bcfcf66, 0xa8dfdf63, 0xcdefef6c, 0xeeffff69,
20371 +
        ],
20372 +
        [
20373 +
            0x00000000, 0x10101111, 0x20202222, 0x30303333, 0x40404444, 0x50505555, 0x60606666,
20374 +
            0x70707777, 0x80808888, 0x90909999, 0xa0a0aaaa, 0xb0b0bbbb, 0xc0c0cccc, 0xd0d0dddd,
20375 +
            0xe0e0eeee, 0xf0f0ffff, 0x010111bf, 0x111100ae, 0x2121339d, 0x3131228c, 0x414155fb,
20376 +
            0x515144ea, 0x616177d9, 0x717166c8, 0x81819937, 0x91918826, 0xa1a1bb15, 0xb1b1aa04,
20377 +
            0xc1c1dd73, 0xd1d1cc62, 0xe1e1ff51, 0xf1f1ee40, 0x0202237e, 0x1212326f, 0x2222015c,
20378 +
            0x3232104d, 0x4242673a, 0x5252762b, 0x62624518, 0x72725409, 0x8282abf6, 0x9292bae7,
20379 +
            0xa2a289d4, 0xb2b298c5, 0xc2c2efb2, 0xd2d2fea3, 0xe2e2cd90, 0xf2f2dc81, 0x030332c1,
20380 +
            0x131323d0, 0x232310e3, 0x333301f2, 0x43437685, 0x53536794, 0x636354a7, 0x737345b6,
20381 +
            0x8383ba49, 0x9393ab58, 0xa3a3986b, 0xb3b3897a, 0xc3c3fe0d, 0xd3d3ef1c, 0xe3e3dc2f,
20382 +
            0xf3f3cd3e, 0x040446fc, 0x141457ed, 0x242464de, 0x343475cf, 0x444402b8, 0x545413a9,
20383 +
            0x6464209a, 0x7474318b, 0x8484ce74, 0x9494df65, 0xa4a4ec56, 0xb4b4fd47, 0xc4c48a30,
20384 +
            0xd4d49b21, 0xe4e4a812, 0xf4f4b903, 0x05055743, 0x15154652, 0x25257561, 0x35356470,
20385 +
            0x45451307, 0x55550216, 0x65653125, 0x75752034, 0x8585dfcb, 0x9595ceda, 0xa5a5fde9,
20386 +
            0xb5b5ecf8, 0xc5c59b8f, 0xd5d58a9e, 0xe5e5b9ad, 0xf5f5a8bc, 0x06066582, 0x16167493,
20387 +
            0x262647a0, 0x363656b1, 0x464621c6, 0x565630d7, 0x666603e4, 0x767612f5, 0x8686ed0a,
20388 +
            0x9696fc1b, 0xa6a6cf28, 0xb6b6de39, 0xc6c6a94e, 0xd6d6b85f, 0xe6e68b6c, 0xf6f69a7d,
20389 +
            0x0707743d, 0x1717652c, 0x2727561f, 0x3737470e, 0x47473079, 0x57572168, 0x6767125b,
20390 +
            0x7777034a, 0x8787fcb5, 0x9797eda4, 0xa7a7de97, 0xb7b7cf86, 0xc7c7b8f1, 0xd7d7a9e0,
20391 +
            0xe7e79ad3, 0xf7f78bc2, 0x08088df8, 0x18189ce9, 0x2828afda, 0x3838becb, 0x4848c9bc,
20392 +
            0x5858d8ad, 0x6868eb9e, 0x7878fa8f, 0x88880570, 0x98981461, 0xa8a82752, 0xb8b83643,
20393 +
            0xc8c84134, 0xd8d85025, 0xe8e86316, 0xf8f87207, 0x09099c47, 0x19198d56, 0x2929be65,
20394 +
            0x3939af74, 0x4949d803, 0x5959c912, 0x6969fa21, 0x7979eb30, 0x898914cf, 0x999905de,
20395 +
            0xa9a936ed, 0xb9b927fc, 0xc9c9508b, 0xd9d9419a, 0xe9e972a9, 0xf9f963b8, 0x0a0aae86,
20396 +
            0x1a1abf97, 0x2a2a8ca4, 0x3a3a9db5, 0x4a4aeac2, 0x5a5afbd3, 0x6a6ac8e0, 0x7a7ad9f1,
20397 +
            0x8a8a260e, 0x9a9a371f, 0xaaaa042c, 0xbaba153d, 0xcaca624a, 0xdada735b, 0xeaea4068,
20398 +
            0xfafa5179, 0x0b0bbf39, 0x1b1bae28, 0x2b2b9d1b, 0x3b3b8c0a, 0x4b4bfb7d, 0x5b5bea6c,
20399 +
            0x6b6bd95f, 0x7b7bc84e, 0x8b8b37b1, 0x9b9b26a0, 0xabab1593, 0xbbbb0482, 0xcbcb73f5,
20400 +
            0xdbdb62e4, 0xebeb51d7, 0xfbfb40c6, 0x0c0ccb04, 0x1c1cda15, 0x2c2ce926, 0x3c3cf837,
20401 +
            0x4c4c8f40, 0x5c5c9e51, 0x6c6cad62, 0x7c7cbc73, 0x8c8c438c, 0x9c9c529d, 0xacac61ae,
20402 +
            0xbcbc70bf, 0xcccc07c8, 0xdcdc16d9, 0xecec25ea, 0xfcfc34fb, 0x0d0ddabb, 0x1d1dcbaa,
20403 +
            0x2d2df899, 0x3d3de988, 0x4d4d9eff, 0x5d5d8fee, 0x6d6dbcdd, 0x7d7dadcc, 0x8d8d5233,
20404 +
            0x9d9d4322, 0xadad7011, 0xbdbd6100, 0xcdcd1677, 0xdddd0766, 0xeded3455, 0xfdfd2544,
20405 +
            0x0e0ee87a, 0x1e1ef96b, 0x2e2eca58, 0x3e3edb49, 0x4e4eac3e, 0x5e5ebd2f, 0x6e6e8e1c,
20406 +
            0x7e7e9f0d, 0x8e8e60f2, 0x9e9e71e3, 0xaeae42d0, 0xbebe53c1, 0xcece24b6, 0xdede35a7,
20407 +
            0xeeee0694, 0xfefe1785, 0x0f0ff9c5, 0x1f1fe8d4, 0x2f2fdbe7, 0x3f3fcaf6, 0x4f4fbd81,
20408 +
            0x5f5fac90, 0x6f6f9fa3, 0x7f7f8eb2, 0x8f8f714d, 0x9f9f605c, 0xafaf536f, 0xbfbf427e,
20409 +
            0xcfcf3509, 0xdfdf2418, 0xefef172b, 0xffff063a,
20410 +
        ],
20411 +
        [
20412 +
            0x00000000, 0x10111bf0, 0x202237e0, 0x30332c10, 0x40446fc0, 0x50557430, 0x60665820,
20413 +
            0x707743d0, 0x8088df80, 0x9099c470, 0xa0aae860, 0xb0bbf390, 0xc0ccb040, 0xd0ddabb0,
20414 +
            0xe0ee87a0, 0xf0ff9c50, 0x0111bfaf, 0x1100a45f, 0x2133884f, 0x312293bf, 0x4155d06f,
20415 +
            0x5144cb9f, 0x6177e78f, 0x7166fc7f, 0x8199602f, 0x91887bdf, 0xa1bb57cf, 0xb1aa4c3f,
20416 +
            0xc1dd0fef, 0xd1cc141f, 0xe1ff380f, 0xf1ee23ff, 0x02237f5e, 0x123264ae, 0x220148be,
20417 +
            0x3210534e, 0x4267109e, 0x52760b6e, 0x6245277e, 0x72543c8e, 0x82aba0de, 0x92babb2e,
20418 +
            0xa289973e, 0xb2988cce, 0xc2efcf1e, 0xd2fed4ee, 0xe2cdf8fe, 0xf2dce30e, 0x0332c0f1,
20419 +
            0x1323db01, 0x2310f711, 0x3301ece1, 0x4376af31, 0x5367b4c1, 0x635498d1, 0x73458321,
20420 +
            0x83ba1f71, 0x93ab0481, 0xa3982891, 0xb3893361, 0xc3fe70b1, 0xd3ef6b41, 0xe3dc4751,
20421 +
            0xf3cd5ca1, 0x0446febc, 0x1457e54c, 0x2464c95c, 0x3475d2ac, 0x4402917c, 0x54138a8c,
20422 +
            0x6420a69c, 0x7431bd6c, 0x84ce213c, 0x94df3acc, 0xa4ec16dc, 0xb4fd0d2c, 0xc48a4efc,
20423 +
            0xd49b550c, 0xe4a8791c, 0xf4b962ec, 0x05574113, 0x15465ae3, 0x257576f3, 0x35646d03,
20424 +
            0x45132ed3, 0x55023523, 0x65311933, 0x752002c3, 0x85df9e93, 0x95ce8563, 0xa5fda973,
20425 +
            0xb5ecb283, 0xc59bf153, 0xd58aeaa3, 0xe5b9c6b3, 0xf5a8dd43, 0x066581e2, 0x16749a12,
20426 +
            0x2647b602, 0x3656adf2, 0x4621ee22, 0x5630f5d2, 0x6603d9c2, 0x7612c232, 0x86ed5e62,
20427 +
            0x96fc4592, 0xa6cf6982, 0xb6de7272, 0xc6a931a2, 0xd6b82a52, 0xe68b0642, 0xf69a1db2,
20428 +
            0x07743e4d, 0x176525bd, 0x275609ad, 0x3747125d, 0x4730518d, 0x57214a7d, 0x6712666d,
20429 +
            0x77037d9d, 0x87fce1cd, 0x97edfa3d, 0xa7ded62d, 0xb7cfcddd, 0xc7b88e0d, 0xd7a995fd,
20430 +
            0xe79ab9ed, 0xf78ba21d, 0x088dfd78, 0x189ce688, 0x28afca98, 0x38bed168, 0x48c992b8,
20431 +
            0x58d88948, 0x68eba558, 0x78fabea8, 0x880522f8, 0x98143908, 0xa8271518, 0xb8360ee8,
20432 +
            0xc8414d38, 0xd85056c8, 0xe8637ad8, 0xf8726128, 0x099c42d7, 0x198d5927, 0x29be7537,
20433 +
            0x39af6ec7, 0x49d82d17, 0x59c936e7, 0x69fa1af7, 0x79eb0107, 0x89149d57, 0x990586a7,
20434 +
            0xa936aab7, 0xb927b147, 0xc950f297, 0xd941e967, 0xe972c577, 0xf963de87, 0x0aae8226,
20435 +
            0x1abf99d6, 0x2a8cb5c6, 0x3a9dae36, 0x4aeaede6, 0x5afbf616, 0x6ac8da06, 0x7ad9c1f6,
20436 +
            0x8a265da6, 0x9a374656, 0xaa046a46, 0xba1571b6, 0xca623266, 0xda732996, 0xea400586,
20437 +
            0xfa511e76, 0x0bbf3d89, 0x1bae2679, 0x2b9d0a69, 0x3b8c1199, 0x4bfb5249, 0x5bea49b9,
20438 +
            0x6bd965a9, 0x7bc87e59, 0x8b37e209, 0x9b26f9f9, 0xab15d5e9, 0xbb04ce19, 0xcb738dc9,
20439 +
            0xdb629639, 0xeb51ba29, 0xfb40a1d9, 0x0ccb03c4, 0x1cda1834, 0x2ce93424, 0x3cf82fd4,
20440 +
            0x4c8f6c04, 0x5c9e77f4, 0x6cad5be4, 0x7cbc4014, 0x8c43dc44, 0x9c52c7b4, 0xac61eba4,
20441 +
            0xbc70f054, 0xcc07b384, 0xdc16a874, 0xec258464, 0xfc349f94, 0x0ddabc6b, 0x1dcba79b,
20442 +
            0x2df88b8b, 0x3de9907b, 0x4d9ed3ab, 0x5d8fc85b, 0x6dbce44b, 0x7dadffbb, 0x8d5263eb,
20443 +
            0x9d43781b, 0xad70540b, 0xbd614ffb, 0xcd160c2b, 0xdd0717db, 0xed343bcb, 0xfd25203b,
20444 +
            0x0ee87c9a, 0x1ef9676a, 0x2eca4b7a, 0x3edb508a, 0x4eac135a, 0x5ebd08aa, 0x6e8e24ba,
20445 +
            0x7e9f3f4a, 0x8e60a31a, 0x9e71b8ea, 0xae4294fa, 0xbe538f0a, 0xce24ccda, 0xde35d72a,
20446 +
            0xee06fb3a, 0xfe17e0ca, 0x0ff9c335, 0x1fe8d8c5, 0x2fdbf4d5, 0x3fcaef25, 0x4fbdacf5,
20447 +
            0x5facb705, 0x6f9f9b15, 0x7f8e80e5, 0x8f711cb5, 0x9f600745, 0xaf532b55, 0xbf4230a5,
20448 +
            0xcf357375, 0xdf246885, 0xef174495, 0xff065f65,
20449 +
        ],
20450 +
        [
20451 +
            0x00000000, 0x111bfaf0, 0x2237f5e0, 0x332c0f10, 0x446febc0, 0x55741130, 0x66581e20,
20452 +
            0x7743e4d0, 0x88dfd780, 0x99c42d70, 0xaae82260, 0xbbf3d890, 0xccb03c40, 0xddabc6b0,
20453 +
            0xee87c9a0, 0xff9c3350, 0x11bfafaf, 0x00a4555f, 0x33885a4f, 0x2293a0bf, 0x55d0446f,
20454 +
            0x44cbbe9f, 0x77e7b18f, 0x66fc4b7f, 0x9960782f, 0x887b82df, 0xbb578dcf, 0xaa4c773f,
20455 +
            0xdd0f93ef, 0xcc14691f, 0xff38660f, 0xee239cff, 0x237f5f5e, 0x3264a5ae, 0x0148aabe,
20456 +
            0x1053504e, 0x6710b49e, 0x760b4e6e, 0x4527417e, 0x543cbb8e, 0xaba088de, 0xbabb722e,
20457 +
            0x89977d3e, 0x988c87ce, 0xefcf631e, 0xfed499ee, 0xcdf896fe, 0xdce36c0e, 0x32c0f0f1,
20458 +
            0x23db0a01, 0x10f70511, 0x01ecffe1, 0x76af1b31, 0x67b4e1c1, 0x5498eed1, 0x45831421,
20459 +
            0xba1f2771, 0xab04dd81, 0x9828d291, 0x89332861, 0xfe70ccb1, 0xef6b3641, 0xdc473951,
20460 +
            0xcd5cc3a1, 0x46febebc, 0x57e5444c, 0x64c94b5c, 0x75d2b1ac, 0x0291557c, 0x138aaf8c,
20461 +
            0x20a6a09c, 0x31bd5a6c, 0xce21693c, 0xdf3a93cc, 0xec169cdc, 0xfd0d662c, 0x8a4e82fc,
20462 +
            0x9b55780c, 0xa879771c, 0xb9628dec, 0x57411113, 0x465aebe3, 0x7576e4f3, 0x646d1e03,
20463 +
            0x132efad3, 0x02350023, 0x31190f33, 0x2002f5c3, 0xdf9ec693, 0xce853c63, 0xfda93373,
20464 +
            0xecb2c983, 0x9bf12d53, 0x8aead7a3, 0xb9c6d8b3, 0xa8dd2243, 0x6581e1e2, 0x749a1b12,
20465 +
            0x47b61402, 0x56adeef2, 0x21ee0a22, 0x30f5f0d2, 0x03d9ffc2, 0x12c20532, 0xed5e3662,
20466 +
            0xfc45cc92, 0xcf69c382, 0xde723972, 0xa931dda2, 0xb82a2752, 0x8b062842, 0x9a1dd2b2,
20467 +
            0x743e4e4d, 0x6525b4bd, 0x5609bbad, 0x4712415d, 0x3051a58d, 0x214a5f7d, 0x1266506d,
20468 +
            0x037daa9d, 0xfce199cd, 0xedfa633d, 0xded66c2d, 0xcfcd96dd, 0xb88e720d, 0xa99588fd,
20469 +
            0x9ab987ed, 0x8ba27d1d, 0x8dfd7d78, 0x9ce68788, 0xafca8898, 0xbed17268, 0xc99296b8,
20470 +
            0xd8896c48, 0xeba56358, 0xfabe99a8, 0x0522aaf8, 0x14395008, 0x27155f18, 0x360ea5e8,
20471 +
            0x414d4138, 0x5056bbc8, 0x637ab4d8, 0x72614e28, 0x9c42d2d7, 0x8d592827, 0xbe752737,
20472 +
            0xaf6eddc7, 0xd82d3917, 0xc936c3e7, 0xfa1accf7, 0xeb013607, 0x149d0557, 0x0586ffa7,
20473 +
            0x36aaf0b7, 0x27b10a47, 0x50f2ee97, 0x41e91467, 0x72c51b77, 0x63dee187, 0xae822226,
20474 +
            0xbf99d8d6, 0x8cb5d7c6, 0x9dae2d36, 0xeaedc9e6, 0xfbf63316, 0xc8da3c06, 0xd9c1c6f6,
20475 +
            0x265df5a6, 0x37460f56, 0x046a0046, 0x1571fab6, 0x62321e66, 0x7329e496, 0x4005eb86,
20476 +
            0x511e1176, 0xbf3d8d89, 0xae267779, 0x9d0a7869, 0x8c118299, 0xfb526649, 0xea499cb9,
20477 +
            0xd96593a9, 0xc87e6959, 0x37e25a09, 0x26f9a0f9, 0x15d5afe9, 0x04ce5519, 0x738db1c9,
20478 +
            0x62964b39, 0x51ba4429, 0x40a1bed9, 0xcb03c3c4, 0xda183934, 0xe9343624, 0xf82fccd4,
20479 +
            0x8f6c2804, 0x9e77d2f4, 0xad5bdde4, 0xbc402714, 0x43dc1444, 0x52c7eeb4, 0x61ebe1a4,
20480 +
            0x70f01b54, 0x07b3ff84, 0x16a80574, 0x25840a64, 0x349ff094, 0xdabc6c6b, 0xcba7969b,
20481 +
            0xf88b998b, 0xe990637b, 0x9ed387ab, 0x8fc87d5b, 0xbce4724b, 0xadff88bb, 0x5263bbeb,
20482 +
            0x4378411b, 0x70544e0b, 0x614fb4fb, 0x160c502b, 0x0717aadb, 0x343ba5cb, 0x25205f3b,
20483 +
            0xe87c9c9a, 0xf967666a, 0xca4b697a, 0xdb50938a, 0xac13775a, 0xbd088daa, 0x8e2482ba,
20484 +
            0x9f3f784a, 0x60a34b1a, 0x71b8b1ea, 0x4294befa, 0x538f440a, 0x24cca0da, 0x35d75a2a,
20485 +
            0x06fb553a, 0x17e0afca, 0xf9c33335, 0xe8d8c9c5, 0xdbf4c6d5, 0xcaef3c25, 0xbdacd8f5,
20486 +
            0xacb72205, 0x9f9b2d15, 0x8e80d7e5, 0x711ce4b5, 0x60071e45, 0x532b1155, 0x4230eba5,
20487 +
            0x35730f75, 0x2468f585, 0x1744fa95, 0x065f0065,
20488 +
        ],
20489 +
        [
20490 +
            0x00000000, 0x1bfafa5f, 0x37f5f4be, 0x2c0f0ee1, 0x6febe97c, 0x74111323, 0x581e1dc2,
20491 +
            0x43e4e79d, 0xdfd7d2f8, 0xc42d28a7, 0xe8222646, 0xf3d8dc19, 0xb03c3b84, 0xabc6c1db,
20492 +
            0x87c9cf3a, 0x9c333565, 0xbfafa55f, 0xa4555f00, 0x885a51e1, 0x93a0abbe, 0xd0444c23,
20493 +
            0xcbbeb67c, 0xe7b1b89d, 0xfc4b42c2, 0x607877a7, 0x7b828df8, 0x578d8319, 0x4c777946,
20494 +
            0x0f939edb, 0x14696484, 0x38666a65, 0x239c903a, 0x7f5f4a11, 0x64a5b04e, 0x48aabeaf,
20495 +
            0x535044f0, 0x10b4a36d, 0x0b4e5932, 0x274157d3, 0x3cbbad8c, 0xa08898e9, 0xbb7262b6,
20496 +
            0x977d6c57, 0x8c879608, 0xcf637195, 0xd4998bca, 0xf896852b, 0xe36c7f74, 0xc0f0ef4e,
20497 +
            0xdb0a1511, 0xf7051bf0, 0xecffe1af, 0xaf1b0632, 0xb4e1fc6d, 0x98eef28c, 0x831408d3,
20498 +
            0x1f273db6, 0x04ddc7e9, 0x28d2c908, 0x33283357, 0x70ccd4ca, 0x6b362e95, 0x47392074,
20499 +
            0x5cc3da2b, 0xfebe9422, 0xe5446e7d, 0xc94b609c, 0xd2b19ac3, 0x91557d5e, 0x8aaf8701,
20500 +
            0xa6a089e0, 0xbd5a73bf, 0x216946da, 0x3a93bc85, 0x169cb264, 0x0d66483b, 0x4e82afa6,
20501 +
            0x557855f9, 0x79775b18, 0x628da147, 0x4111317d, 0x5aebcb22, 0x76e4c5c3, 0x6d1e3f9c,
20502 +
            0x2efad801, 0x3500225e, 0x190f2cbf, 0x02f5d6e0, 0x9ec6e385, 0x853c19da, 0xa933173b,
20503 +
            0xb2c9ed64, 0xf12d0af9, 0xead7f0a6, 0xc6d8fe47, 0xdd220418, 0x81e1de33, 0x9a1b246c,
20504 +
            0xb6142a8d, 0xadeed0d2, 0xee0a374f, 0xf5f0cd10, 0xd9ffc3f1, 0xc20539ae, 0x5e360ccb,
20505 +
            0x45ccf694, 0x69c3f875, 0x7239022a, 0x31dde5b7, 0x2a271fe8, 0x06281109, 0x1dd2eb56,
20506 +
            0x3e4e7b6c, 0x25b48133, 0x09bb8fd2, 0x1241758d, 0x51a59210, 0x4a5f684f, 0x665066ae,
20507 +
            0x7daa9cf1, 0xe199a994, 0xfa6353cb, 0xd66c5d2a, 0xcd96a775, 0x8e7240e8, 0x9588bab7,
20508 +
            0xb987b456, 0xa27d4e09, 0xfd7d28eb, 0xe687d2b4, 0xca88dc55, 0xd172260a, 0x9296c197,
20509 +
            0x896c3bc8, 0xa5633529, 0xbe99cf76, 0x22aafa13, 0x3950004c, 0x155f0ead, 0x0ea5f4f2,
20510 +
            0x4d41136f, 0x56bbe930, 0x7ab4e7d1, 0x614e1d8e, 0x42d28db4, 0x592877eb, 0x7527790a,
20511 +
            0x6edd8355, 0x2d3964c8, 0x36c39e97, 0x1acc9076, 0x01366a29, 0x9d055f4c, 0x86ffa513,
20512 +
            0xaaf0abf2, 0xb10a51ad, 0xf2eeb630, 0xe9144c6f, 0xc51b428e, 0xdee1b8d1, 0x822262fa,
20513 +
            0x99d898a5, 0xb5d79644, 0xae2d6c1b, 0xedc98b86, 0xf63371d9, 0xda3c7f38, 0xc1c68567,
20514 +
            0x5df5b002, 0x460f4a5d, 0x6a0044bc, 0x71fabee3, 0x321e597e, 0x29e4a321, 0x05ebadc0,
20515 +
            0x1e11579f, 0x3d8dc7a5, 0x26773dfa, 0x0a78331b, 0x1182c944, 0x52662ed9, 0x499cd486,
20516 +
            0x6593da67, 0x7e692038, 0xe25a155d, 0xf9a0ef02, 0xd5afe1e3, 0xce551bbc, 0x8db1fc21,
20517 +
            0x964b067e, 0xba44089f, 0xa1bef2c0, 0x03c3bcc9, 0x18394696, 0x34364877, 0x2fccb228,
20518 +
            0x6c2855b5, 0x77d2afea, 0x5bdda10b, 0x40275b54, 0xdc146e31, 0xc7ee946e, 0xebe19a8f,
20519 +
            0xf01b60d0, 0xb3ff874d, 0xa8057d12, 0x840a73f3, 0x9ff089ac, 0xbc6c1996, 0xa796e3c9,
20520 +
            0x8b99ed28, 0x90631777, 0xd387f0ea, 0xc87d0ab5, 0xe4720454, 0xff88fe0b, 0x63bbcb6e,
20521 +
            0x78413131, 0x544e3fd0, 0x4fb4c58f, 0x0c502212, 0x17aad84d, 0x3ba5d6ac, 0x205f2cf3,
20522 +
            0x7c9cf6d8, 0x67660c87, 0x4b690266, 0x5093f839, 0x13771fa4, 0x088de5fb, 0x2482eb1a,
20523 +
            0x3f781145, 0xa34b2420, 0xb8b1de7f, 0x94bed09e, 0x8f442ac1, 0xcca0cd5c, 0xd75a3703,
20524 +
            0xfb5539e2, 0xe0afc3bd, 0xc3335387, 0xd8c9a9d8, 0xf4c6a739, 0xef3c5d66, 0xacd8bafb,
20525 +
            0xb72240a4, 0x9b2d4e45, 0x80d7b41a, 0x1ce4817f, 0x071e7b20, 0x2b1175c1, 0x30eb8f9e,
20526 +
            0x730f6803, 0x68f5925c, 0x44fa9cbd, 0x5f0066e2,
20527 +
        ],
20528 +
    ];
20529 +
}
20530 +
20531 +
pub mod crc64 {
20532 +
    //! CRC-64 lookup tables
20533 +
20534 +
    pub static CRC64_ECMA_182_TABLE: [[u64; 256]; 16] = [
20535 +
        [
20536 +
            0x0000000000000000,
20537 +
            0x42f0e1eba9ea3693,
20538 +
            0x85e1c3d753d46d26,
20539 +
            0xc711223cfa3e5bb5,
20540 +
            0x493366450e42ecdf,
20541 +
            0x0bc387aea7a8da4c,
20542 +
            0xccd2a5925d9681f9,
20543 +
            0x8e224479f47cb76a,
20544 +
            0x9266cc8a1c85d9be,
20545 +
            0xd0962d61b56fef2d,
20546 +
            0x17870f5d4f51b498,
20547 +
            0x5577eeb6e6bb820b,
20548 +
            0xdb55aacf12c73561,
20549 +
            0x99a54b24bb2d03f2,
20550 +
            0x5eb4691841135847,
20551 +
            0x1c4488f3e8f96ed4,
20552 +
            0x663d78ff90e185ef,
20553 +
            0x24cd9914390bb37c,
20554 +
            0xe3dcbb28c335e8c9,
20555 +
            0xa12c5ac36adfde5a,
20556 +
            0x2f0e1eba9ea36930,
20557 +
            0x6dfeff5137495fa3,
20558 +
            0xaaefdd6dcd770416,
20559 +
            0xe81f3c86649d3285,
20560 +
            0xf45bb4758c645c51,
20561 +
            0xb6ab559e258e6ac2,
20562 +
            0x71ba77a2dfb03177,
20563 +
            0x334a9649765a07e4,
20564 +
            0xbd68d2308226b08e,
20565 +
            0xff9833db2bcc861d,
20566 +
            0x388911e7d1f2dda8,
20567 +
            0x7a79f00c7818eb3b,
20568 +
            0xcc7af1ff21c30bde,
20569 +
            0x8e8a101488293d4d,
20570 +
            0x499b3228721766f8,
20571 +
            0x0b6bd3c3dbfd506b,
20572 +
            0x854997ba2f81e701,
20573 +
            0xc7b97651866bd192,
20574 +
            0x00a8546d7c558a27,
20575 +
            0x4258b586d5bfbcb4,
20576 +
            0x5e1c3d753d46d260,
20577 +
            0x1cecdc9e94ace4f3,
20578 +
            0xdbfdfea26e92bf46,
20579 +
            0x990d1f49c77889d5,
20580 +
            0x172f5b3033043ebf,
20581 +
            0x55dfbadb9aee082c,
20582 +
            0x92ce98e760d05399,
20583 +
            0xd03e790cc93a650a,
20584 +
            0xaa478900b1228e31,
20585 +
            0xe8b768eb18c8b8a2,
20586 +
            0x2fa64ad7e2f6e317,
20587 +
            0x6d56ab3c4b1cd584,
20588 +
            0xe374ef45bf6062ee,
20589 +
            0xa1840eae168a547d,
20590 +
            0x66952c92ecb40fc8,
20591 +
            0x2465cd79455e395b,
20592 +
            0x3821458aada7578f,
20593 +
            0x7ad1a461044d611c,
20594 +
            0xbdc0865dfe733aa9,
20595 +
            0xff3067b657990c3a,
20596 +
            0x711223cfa3e5bb50,
20597 +
            0x33e2c2240a0f8dc3,
20598 +
            0xf4f3e018f031d676,
20599 +
            0xb60301f359dbe0e5,
20600 +
            0xda050215ea6c212f,
20601 +
            0x98f5e3fe438617bc,
20602 +
            0x5fe4c1c2b9b84c09,
20603 +
            0x1d14202910527a9a,
20604 +
            0x93366450e42ecdf0,
20605 +
            0xd1c685bb4dc4fb63,
20606 +
            0x16d7a787b7faa0d6,
20607 +
            0x5427466c1e109645,
20608 +
            0x4863ce9ff6e9f891,
20609 +
            0x0a932f745f03ce02,
20610 +
            0xcd820d48a53d95b7,
20611 +
            0x8f72eca30cd7a324,
20612 +
            0x0150a8daf8ab144e,
20613 +
            0x43a04931514122dd,
20614 +
            0x84b16b0dab7f7968,
20615 +
            0xc6418ae602954ffb,
20616 +
            0xbc387aea7a8da4c0,
20617 +
            0xfec89b01d3679253,
20618 +
            0x39d9b93d2959c9e6,
20619 +
            0x7b2958d680b3ff75,
20620 +
            0xf50b1caf74cf481f,
20621 +
            0xb7fbfd44dd257e8c,
20622 +
            0x70eadf78271b2539,
20623 +
            0x321a3e938ef113aa,
20624 +
            0x2e5eb66066087d7e,
20625 +
            0x6cae578bcfe24bed,
20626 +
            0xabbf75b735dc1058,
20627 +
            0xe94f945c9c3626cb,
20628 +
            0x676dd025684a91a1,
20629 +
            0x259d31cec1a0a732,
20630 +
            0xe28c13f23b9efc87,
20631 +
            0xa07cf2199274ca14,
20632 +
            0x167ff3eacbaf2af1,
20633 +
            0x548f120162451c62,
20634 +
            0x939e303d987b47d7,
20635 +
            0xd16ed1d631917144,
20636 +
            0x5f4c95afc5edc62e,
20637 +
            0x1dbc74446c07f0bd,
20638 +
            0xdaad56789639ab08,
20639 +
            0x985db7933fd39d9b,
20640 +
            0x84193f60d72af34f,
20641 +
            0xc6e9de8b7ec0c5dc,
20642 +
            0x01f8fcb784fe9e69,
20643 +
            0x43081d5c2d14a8fa,
20644 +
            0xcd2a5925d9681f90,
20645 +
            0x8fdab8ce70822903,
20646 +
            0x48cb9af28abc72b6,
20647 +
            0x0a3b7b1923564425,
20648 +
            0x70428b155b4eaf1e,
20649 +
            0x32b26afef2a4998d,
20650 +
            0xf5a348c2089ac238,
20651 +
            0xb753a929a170f4ab,
20652 +
            0x3971ed50550c43c1,
20653 +
            0x7b810cbbfce67552,
20654 +
            0xbc902e8706d82ee7,
20655 +
            0xfe60cf6caf321874,
20656 +
            0xe224479f47cb76a0,
20657 +
            0xa0d4a674ee214033,
20658 +
            0x67c58448141f1b86,
20659 +
            0x253565a3bdf52d15,
20660 +
            0xab1721da49899a7f,
20661 +
            0xe9e7c031e063acec,
20662 +
            0x2ef6e20d1a5df759,
20663 +
            0x6c0603e6b3b7c1ca,
20664 +
            0xf6fae5c07d3274cd,
20665 +
            0xb40a042bd4d8425e,
20666 +
            0x731b26172ee619eb,
20667 +
            0x31ebc7fc870c2f78,
20668 +
            0xbfc9838573709812,
20669 +
            0xfd39626eda9aae81,
20670 +
            0x3a28405220a4f534,
20671 +
            0x78d8a1b9894ec3a7,
20672 +
            0x649c294a61b7ad73,
20673 +
            0x266cc8a1c85d9be0,
20674 +
            0xe17dea9d3263c055,
20675 +
            0xa38d0b769b89f6c6,
20676 +
            0x2daf4f0f6ff541ac,
20677 +
            0x6f5faee4c61f773f,
20678 +
            0xa84e8cd83c212c8a,
20679 +
            0xeabe6d3395cb1a19,
20680 +
            0x90c79d3fedd3f122,
20681 +
            0xd2377cd44439c7b1,
20682 +
            0x15265ee8be079c04,
20683 +
            0x57d6bf0317edaa97,
20684 +
            0xd9f4fb7ae3911dfd,
20685 +
            0x9b041a914a7b2b6e,
20686 +
            0x5c1538adb04570db,
20687 +
            0x1ee5d94619af4648,
20688 +
            0x02a151b5f156289c,
20689 +
            0x4051b05e58bc1e0f,
20690 +
            0x87409262a28245ba,
20691 +
            0xc5b073890b687329,
20692 +
            0x4b9237f0ff14c443,
20693 +
            0x0962d61b56fef2d0,
20694 +
            0xce73f427acc0a965,
20695 +
            0x8c8315cc052a9ff6,
20696 +
            0x3a80143f5cf17f13,
20697 +
            0x7870f5d4f51b4980,
20698 +
            0xbf61d7e80f251235,
20699 +
            0xfd913603a6cf24a6,
20700 +
            0x73b3727a52b393cc,
20701 +
            0x31439391fb59a55f,
20702 +
            0xf652b1ad0167feea,
20703 +
            0xb4a25046a88dc879,
20704 +
            0xa8e6d8b54074a6ad,
20705 +
            0xea16395ee99e903e,
20706 +
            0x2d071b6213a0cb8b,
20707 +
            0x6ff7fa89ba4afd18,
20708 +
            0xe1d5bef04e364a72,
20709 +
            0xa3255f1be7dc7ce1,
20710 +
            0x64347d271de22754,
20711 +
            0x26c49cccb40811c7,
20712 +
            0x5cbd6cc0cc10fafc,
20713 +
            0x1e4d8d2b65facc6f,
20714 +
            0xd95caf179fc497da,
20715 +
            0x9bac4efc362ea149,
20716 +
            0x158e0a85c2521623,
20717 +
            0x577eeb6e6bb820b0,
20718 +
            0x906fc95291867b05,
20719 +
            0xd29f28b9386c4d96,
20720 +
            0xcedba04ad0952342,
20721 +
            0x8c2b41a1797f15d1,
20722 +
            0x4b3a639d83414e64,
20723 +
            0x09ca82762aab78f7,
20724 +
            0x87e8c60fded7cf9d,
20725 +
            0xc51827e4773df90e,
20726 +
            0x020905d88d03a2bb,
20727 +
            0x40f9e43324e99428,
20728 +
            0x2cffe7d5975e55e2,
20729 +
            0x6e0f063e3eb46371,
20730 +
            0xa91e2402c48a38c4,
20731 +
            0xebeec5e96d600e57,
20732 +
            0x65cc8190991cb93d,
20733 +
            0x273c607b30f68fae,
20734 +
            0xe02d4247cac8d41b,
20735 +
            0xa2dda3ac6322e288,
20736 +
            0xbe992b5f8bdb8c5c,
20737 +
            0xfc69cab42231bacf,
20738 +
            0x3b78e888d80fe17a,
20739 +
            0x7988096371e5d7e9,
20740 +
            0xf7aa4d1a85996083,
20741 +
            0xb55aacf12c735610,
20742 +
            0x724b8ecdd64d0da5,
20743 +
            0x30bb6f267fa73b36,
20744 +
            0x4ac29f2a07bfd00d,
20745 +
            0x08327ec1ae55e69e,
20746 +
            0xcf235cfd546bbd2b,
20747 +
            0x8dd3bd16fd818bb8,
20748 +
            0x03f1f96f09fd3cd2,
20749 +
            0x41011884a0170a41,
20750 +
            0x86103ab85a2951f4,
20751 +
            0xc4e0db53f3c36767,
20752 +
            0xd8a453a01b3a09b3,
20753 +
            0x9a54b24bb2d03f20,
20754 +
            0x5d45907748ee6495,
20755 +
            0x1fb5719ce1045206,
20756 +
            0x919735e51578e56c,
20757 +
            0xd367d40ebc92d3ff,
20758 +
            0x1476f63246ac884a,
20759 +
            0x568617d9ef46bed9,
20760 +
            0xe085162ab69d5e3c,
20761 +
            0xa275f7c11f7768af,
20762 +
            0x6564d5fde549331a,
20763 +
            0x279434164ca30589,
20764 +
            0xa9b6706fb8dfb2e3,
20765 +
            0xeb46918411358470,
20766 +
            0x2c57b3b8eb0bdfc5,
20767 +
            0x6ea7525342e1e956,
20768 +
            0x72e3daa0aa188782,
20769 +
            0x30133b4b03f2b111,
20770 +
            0xf7021977f9cceaa4,
20771 +
            0xb5f2f89c5026dc37,
20772 +
            0x3bd0bce5a45a6b5d,
20773 +
            0x79205d0e0db05dce,
20774 +
            0xbe317f32f78e067b,
20775 +
            0xfcc19ed95e6430e8,
20776 +
            0x86b86ed5267cdbd3,
20777 +
            0xc4488f3e8f96ed40,
20778 +
            0x0359ad0275a8b6f5,
20779 +
            0x41a94ce9dc428066,
20780 +
            0xcf8b0890283e370c,
20781 +
            0x8d7be97b81d4019f,
20782 +
            0x4a6acb477bea5a2a,
20783 +
            0x089a2aacd2006cb9,
20784 +
            0x14dea25f3af9026d,
20785 +
            0x562e43b4931334fe,
20786 +
            0x913f6188692d6f4b,
20787 +
            0xd3cf8063c0c759d8,
20788 +
            0x5dedc41a34bbeeb2,
20789 +
            0x1f1d25f19d51d821,
20790 +
            0xd80c07cd676f8394,
20791 +
            0x9afce626ce85b507,
20792 +
        ],
20793 +
        [
20794 +
            0x0000000000000000,
20795 +
            0xaf052a6b538edf09,
20796 +
            0x1cfab53d0ef78881,
20797 +
            0xb3ff9f565d795788,
20798 +
            0x39f56a7a1def1102,
20799 +
            0x96f040114e61ce0b,
20800 +
            0x250fdf4713189983,
20801 +
            0x8a0af52c4096468a,
20802 +
            0x73ead4f43bde2204,
20803 +
            0xdceffe9f6850fd0d,
20804 +
            0x6f1061c93529aa85,
20805 +
            0xc0154ba266a7758c,
20806 +
            0x4a1fbe8e26313306,
20807 +
            0xe51a94e575bfec0f,
20808 +
            0x56e50bb328c6bb87,
20809 +
            0xf9e021d87b48648e,
20810 +
            0xe7d5a9e877bc4408,
20811 +
            0x48d0838324329b01,
20812 +
            0xfb2f1cd5794bcc89,
20813 +
            0x542a36be2ac51380,
20814 +
            0xde20c3926a53550a,
20815 +
            0x7125e9f939dd8a03,
20816 +
            0xc2da76af64a4dd8b,
20817 +
            0x6ddf5cc4372a0282,
20818 +
            0x943f7d1c4c62660c,
20819 +
            0x3b3a57771fecb905,
20820 +
            0x88c5c8214295ee8d,
20821 +
            0x27c0e24a111b3184,
20822 +
            0xadca1766518d770e,
20823 +
            0x02cf3d0d0203a807,
20824 +
            0xb130a25b5f7aff8f,
20825 +
            0x1e3588300cf42086,
20826 +
            0x8d5bb23b4692be83,
20827 +
            0x225e9850151c618a,
20828 +
            0x91a1070648653602,
20829 +
            0x3ea42d6d1bebe90b,
20830 +
            0xb4aed8415b7daf81,
20831 +
            0x1babf22a08f37088,
20832 +
            0xa8546d7c558a2700,
20833 +
            0x075147170604f809,
20834 +
            0xfeb166cf7d4c9c87,
20835 +
            0x51b44ca42ec2438e,
20836 +
            0xe24bd3f273bb1406,
20837 +
            0x4d4ef9992035cb0f,
20838 +
            0xc7440cb560a38d85,
20839 +
            0x684126de332d528c,
20840 +
            0xdbbeb9886e540504,
20841 +
            0x74bb93e33ddada0d,
20842 +
            0x6a8e1bd3312efa8b,
20843 +
            0xc58b31b862a02582,
20844 +
            0x7674aeee3fd9720a,
20845 +
            0xd97184856c57ad03,
20846 +
            0x537b71a92cc1eb89,
20847 +
            0xfc7e5bc27f4f3480,
20848 +
            0x4f81c49422366308,
20849 +
            0xe084eeff71b8bc01,
20850 +
            0x1964cf270af0d88f,
20851 +
            0xb661e54c597e0786,
20852 +
            0x059e7a1a0407500e,
20853 +
            0xaa9b507157898f07,
20854 +
            0x2091a55d171fc98d,
20855 +
            0x8f948f3644911684,
20856 +
            0x3c6b106019e8410c,
20857 +
            0x936e3a0b4a669e05,
20858 +
            0x5847859d24cf4b95,
20859 +
            0xf742aff67741949c,
20860 +
            0x44bd30a02a38c314,
20861 +
            0xebb81acb79b61c1d,
20862 +
            0x61b2efe739205a97,
20863 +
            0xceb7c58c6aae859e,
20864 +
            0x7d485ada37d7d216,
20865 +
            0xd24d70b164590d1f,
20866 +
            0x2bad51691f116991,
20867 +
            0x84a87b024c9fb698,
20868 +
            0x3757e45411e6e110,
20869 +
            0x9852ce3f42683e19,
20870 +
            0x12583b1302fe7893,
20871 +
            0xbd5d11785170a79a,
20872 +
            0x0ea28e2e0c09f012,
20873 +
            0xa1a7a4455f872f1b,
20874 +
            0xbf922c7553730f9d,
20875 +
            0x1097061e00fdd094,
20876 +
            0xa36899485d84871c,
20877 +
            0x0c6db3230e0a5815,
20878 +
            0x8667460f4e9c1e9f,
20879 +
            0x29626c641d12c196,
20880 +
            0x9a9df332406b961e,
20881 +
            0x3598d95913e54917,
20882 +
            0xcc78f88168ad2d99,
20883 +
            0x637dd2ea3b23f290,
20884 +
            0xd0824dbc665aa518,
20885 +
            0x7f8767d735d47a11,
20886 +
            0xf58d92fb75423c9b,
20887 +
            0x5a88b89026cce392,
20888 +
            0xe97727c67bb5b41a,
20889 +
            0x46720dad283b6b13,
20890 +
            0xd51c37a6625df516,
20891 +
            0x7a191dcd31d32a1f,
20892 +
            0xc9e6829b6caa7d97,
20893 +
            0x66e3a8f03f24a29e,
20894 +
            0xece95ddc7fb2e414,
20895 +
            0x43ec77b72c3c3b1d,
20896 +
            0xf013e8e171456c95,
20897 +
            0x5f16c28a22cbb39c,
20898 +
            0xa6f6e3525983d712,
20899 +
            0x09f3c9390a0d081b,
20900 +
            0xba0c566f57745f93,
20901 +
            0x15097c0404fa809a,
20902 +
            0x9f038928446cc610,
20903 +
            0x3006a34317e21919,
20904 +
            0x83f93c154a9b4e91,
20905 +
            0x2cfc167e19159198,
20906 +
            0x32c99e4e15e1b11e,
20907 +
            0x9dccb425466f6e17,
20908 +
            0x2e332b731b16399f,
20909 +
            0x813601184898e696,
20910 +
            0x0b3cf434080ea01c,
20911 +
            0xa439de5f5b807f15,
20912 +
            0x17c6410906f9289d,
20913 +
            0xb8c36b625577f794,
20914 +
            0x41234aba2e3f931a,
20915 +
            0xee2660d17db14c13,
20916 +
            0x5dd9ff8720c81b9b,
20917 +
            0xf2dcd5ec7346c492,
20918 +
            0x78d620c033d08218,
20919 +
            0xd7d30aab605e5d11,
20920 +
            0x642c95fd3d270a99,
20921 +
            0xcb29bf966ea9d590,
20922 +
            0xb08f0b3a499e972a,
20923 +
            0x1f8a21511a104823,
20924 +
            0xac75be0747691fab,
20925 +
            0x0370946c14e7c0a2,
20926 +
            0x897a614054718628,
20927 +
            0x267f4b2b07ff5921,
20928 +
            0x9580d47d5a860ea9,
20929 +
            0x3a85fe160908d1a0,
20930 +
            0xc365dfce7240b52e,
20931 +
            0x6c60f5a521ce6a27,
20932 +
            0xdf9f6af37cb73daf,
20933 +
            0x709a40982f39e2a6,
20934 +
            0xfa90b5b46fafa42c,
20935 +
            0x55959fdf3c217b25,
20936 +
            0xe66a008961582cad,
20937 +
            0x496f2ae232d6f3a4,
20938 +
            0x575aa2d23e22d322,
20939 +
            0xf85f88b96dac0c2b,
20940 +
            0x4ba017ef30d55ba3,
20941 +
            0xe4a53d84635b84aa,
20942 +
            0x6eafc8a823cdc220,
20943 +
            0xc1aae2c370431d29,
20944 +
            0x72557d952d3a4aa1,
20945 +
            0xdd5057fe7eb495a8,
20946 +
            0x24b0762605fcf126,
20947 +
            0x8bb55c4d56722e2f,
20948 +
            0x384ac31b0b0b79a7,
20949 +
            0x974fe9705885a6ae,
20950 +
            0x1d451c5c1813e024,
20951 +
            0xb24036374b9d3f2d,
20952 +
            0x01bfa96116e468a5,
20953 +
            0xaeba830a456ab7ac,
20954 +
            0x3dd4b9010f0c29a9,
20955 +
            0x92d1936a5c82f6a0,
20956 +
            0x212e0c3c01fba128,
20957 +
            0x8e2b265752757e21,
20958 +
            0x0421d37b12e338ab,
20959 +
            0xab24f910416de7a2,
20960 +
            0x18db66461c14b02a,
20961 +
            0xb7de4c2d4f9a6f23,
20962 +
            0x4e3e6df534d20bad,
20963 +
            0xe13b479e675cd4a4,
20964 +
            0x52c4d8c83a25832c,
20965 +
            0xfdc1f2a369ab5c25,
20966 +
            0x77cb078f293d1aaf,
20967 +
            0xd8ce2de47ab3c5a6,
20968 +
            0x6b31b2b227ca922e,
20969 +
            0xc43498d974444d27,
20970 +
            0xda0110e978b06da1,
20971 +
            0x75043a822b3eb2a8,
20972 +
            0xc6fba5d47647e520,
20973 +
            0x69fe8fbf25c93a29,
20974 +
            0xe3f47a93655f7ca3,
20975 +
            0x4cf150f836d1a3aa,
20976 +
            0xff0ecfae6ba8f422,
20977 +
            0x500be5c538262b2b,
20978 +
            0xa9ebc41d436e4fa5,
20979 +
            0x06eeee7610e090ac,
20980 +
            0xb51171204d99c724,
20981 +
            0x1a145b4b1e17182d,
20982 +
            0x901eae675e815ea7,
20983 +
            0x3f1b840c0d0f81ae,
20984 +
            0x8ce41b5a5076d626,
20985 +
            0x23e1313103f8092f,
20986 +
            0xe8c88ea76d51dcbf,
20987 +
            0x47cda4cc3edf03b6,
20988 +
            0xf4323b9a63a6543e,
20989 +
            0x5b3711f130288b37,
20990 +
            0xd13de4dd70becdbd,
20991 +
            0x7e38ceb6233012b4,
20992 +
            0xcdc751e07e49453c,
20993 +
            0x62c27b8b2dc79a35,
20994 +
            0x9b225a53568ffebb,
20995 +
            0x34277038050121b2,
20996 +
            0x87d8ef6e5878763a,
20997 +
            0x28ddc5050bf6a933,
20998 +
            0xa2d730294b60efb9,
20999 +
            0x0dd21a4218ee30b0,
21000 +
            0xbe2d851445976738,
21001 +
            0x1128af7f1619b831,
21002 +
            0x0f1d274f1aed98b7,
21003 +
            0xa0180d24496347be,
21004 +
            0x13e79272141a1036,
21005 +
            0xbce2b8194794cf3f,
21006 +
            0x36e84d35070289b5,
21007 +
            0x99ed675e548c56bc,
21008 +
            0x2a12f80809f50134,
21009 +
            0x8517d2635a7bde3d,
21010 +
            0x7cf7f3bb2133bab3,
21011 +
            0xd3f2d9d072bd65ba,
21012 +
            0x600d46862fc43232,
21013 +
            0xcf086ced7c4aed3b,
21014 +
            0x450299c13cdcabb1,
21015 +
            0xea07b3aa6f5274b8,
21016 +
            0x59f82cfc322b2330,
21017 +
            0xf6fd069761a5fc39,
21018 +
            0x65933c9c2bc3623c,
21019 +
            0xca9616f7784dbd35,
21020 +
            0x796989a12534eabd,
21021 +
            0xd66ca3ca76ba35b4,
21022 +
            0x5c6656e6362c733e,
21023 +
            0xf3637c8d65a2ac37,
21024 +
            0x409ce3db38dbfbbf,
21025 +
            0xef99c9b06b5524b6,
21026 +
            0x1679e868101d4038,
21027 +
            0xb97cc20343939f31,
21028 +
            0x0a835d551eeac8b9,
21029 +
            0xa586773e4d6417b0,
21030 +
            0x2f8c82120df2513a,
21031 +
            0x8089a8795e7c8e33,
21032 +
            0x3376372f0305d9bb,
21033 +
            0x9c731d44508b06b2,
21034 +
            0x824695745c7f2634,
21035 +
            0x2d43bf1f0ff1f93d,
21036 +
            0x9ebc20495288aeb5,
21037 +
            0x31b90a22010671bc,
21038 +
            0xbbb3ff0e41903736,
21039 +
            0x14b6d565121ee83f,
21040 +
            0xa7494a334f67bfb7,
21041 +
            0x084c60581ce960be,
21042 +
            0xf1ac418067a10430,
21043 +
            0x5ea96beb342fdb39,
21044 +
            0xed56f4bd69568cb1,
21045 +
            0x4253ded63ad853b8,
21046 +
            0xc8592bfa7a4e1532,
21047 +
            0x675c019129c0ca3b,
21048 +
            0xd4a39ec774b99db3,
21049 +
            0x7ba6b4ac273742ba,
21050 +
        ],
21051 +
        [
21052 +
            0x0000000000000000,
21053 +
            0x23eef79f3ad718c7,
21054 +
            0x47ddef3e75ae318e,
21055 +
            0x643318a14f792949,
21056 +
            0x8fbbde7ceb5c631c,
21057 +
            0xac5529e3d18b7bdb,
21058 +
            0xc86631429ef25292,
21059 +
            0xeb88c6dda4254a55,
21060 +
            0x5d875d127f52f0ab,
21061 +
            0x7e69aa8d4585e86c,
21062 +
            0x1a5ab22c0afcc125,
21063 +
            0x39b445b3302bd9e2,
21064 +
            0xd23c836e940e93b7,
21065 +
            0xf1d274f1aed98b70,
21066 +
            0x95e16c50e1a0a239,
21067 +
            0xb60f9bcfdb77bafe,
21068 +
            0xbb0eba24fea5e156,
21069 +
            0x98e04dbbc472f991,
21070 +
            0xfcd3551a8b0bd0d8,
21071 +
            0xdf3da285b1dcc81f,
21072 +
            0x34b5645815f9824a,
21073 +
            0x175b93c72f2e9a8d,
21074 +
            0x73688b666057b3c4,
21075 +
            0x50867cf95a80ab03,
21076 +
            0xe689e73681f711fd,
21077 +
            0xc56710a9bb20093a,
21078 +
            0xa1540808f4592073,
21079 +
            0x82baff97ce8e38b4,
21080 +
            0x6932394a6aab72e1,
21081 +
            0x4adcced5507c6a26,
21082 +
            0x2eefd6741f05436f,
21083 +
            0x0d0121eb25d25ba8,
21084 +
            0x34ed95a254a1f43f,
21085 +
            0x1703623d6e76ecf8,
21086 +
            0x73307a9c210fc5b1,
21087 +
            0x50de8d031bd8dd76,
21088 +
            0xbb564bdebffd9723,
21089 +
            0x98b8bc41852a8fe4,
21090 +
            0xfc8ba4e0ca53a6ad,
21091 +
            0xdf65537ff084be6a,
21092 +
            0x696ac8b02bf30494,
21093 +
            0x4a843f2f11241c53,
21094 +
            0x2eb7278e5e5d351a,
21095 +
            0x0d59d011648a2ddd,
21096 +
            0xe6d116ccc0af6788,
21097 +
            0xc53fe153fa787f4f,
21098 +
            0xa10cf9f2b5015606,
21099 +
            0x82e20e6d8fd64ec1,
21100 +
            0x8fe32f86aa041569,
21101 +
            0xac0dd81990d30dae,
21102 +
            0xc83ec0b8dfaa24e7,
21103 +
            0xebd03727e57d3c20,
21104 +
            0x0058f1fa41587675,
21105 +
            0x23b606657b8f6eb2,
21106 +
            0x47851ec434f647fb,
21107 +
            0x646be95b0e215f3c,
21108 +
            0xd2647294d556e5c2,
21109 +
            0xf18a850bef81fd05,
21110 +
            0x95b99daaa0f8d44c,
21111 +
            0xb6576a359a2fcc8b,
21112 +
            0x5ddface83e0a86de,
21113 +
            0x7e315b7704dd9e19,
21114 +
            0x1a0243d64ba4b750,
21115 +
            0x39ecb4497173af97,
21116 +
            0x69db2b44a943e87e,
21117 +
            0x4a35dcdb9394f0b9,
21118 +
            0x2e06c47adcedd9f0,
21119 +
            0x0de833e5e63ac137,
21120 +
            0xe660f538421f8b62,
21121 +
            0xc58e02a778c893a5,
21122 +
            0xa1bd1a0637b1baec,
21123 +
            0x8253ed990d66a22b,
21124 +
            0x345c7656d61118d5,
21125 +
            0x17b281c9ecc60012,
21126 +
            0x73819968a3bf295b,
21127 +
            0x506f6ef79968319c,
21128 +
            0xbbe7a82a3d4d7bc9,
21129 +
            0x98095fb5079a630e,
21130 +
            0xfc3a471448e34a47,
21131 +
            0xdfd4b08b72345280,
21132 +
            0xd2d5916057e60928,
21133 +
            0xf13b66ff6d3111ef,
21134 +
            0x95087e5e224838a6,
21135 +
            0xb6e689c1189f2061,
21136 +
            0x5d6e4f1cbcba6a34,
21137 +
            0x7e80b883866d72f3,
21138 +
            0x1ab3a022c9145bba,
21139 +
            0x395d57bdf3c3437d,
21140 +
            0x8f52cc7228b4f983,
21141 +
            0xacbc3bed1263e144,
21142 +
            0xc88f234c5d1ac80d,
21143 +
            0xeb61d4d367cdd0ca,
21144 +
            0x00e9120ec3e89a9f,
21145 +
            0x2307e591f93f8258,
21146 +
            0x4734fd30b646ab11,
21147 +
            0x64da0aaf8c91b3d6,
21148 +
            0x5d36bee6fde21c41,
21149 +
            0x7ed84979c7350486,
21150 +
            0x1aeb51d8884c2dcf,
21151 +
            0x3905a647b29b3508,
21152 +
            0xd28d609a16be7f5d,
21153 +
            0xf16397052c69679a,
21154 +
            0x95508fa463104ed3,
21155 +
            0xb6be783b59c75614,
21156 +
            0x00b1e3f482b0ecea,
21157 +
            0x235f146bb867f42d,
21158 +
            0x476c0ccaf71edd64,
21159 +
            0x6482fb55cdc9c5a3,
21160 +
            0x8f0a3d8869ec8ff6,
21161 +
            0xace4ca17533b9731,
21162 +
            0xc8d7d2b61c42be78,
21163 +
            0xeb3925292695a6bf,
21164 +
            0xe63804c20347fd17,
21165 +
            0xc5d6f35d3990e5d0,
21166 +
            0xa1e5ebfc76e9cc99,
21167 +
            0x820b1c634c3ed45e,
21168 +
            0x6983dabee81b9e0b,
21169 +
            0x4a6d2d21d2cc86cc,
21170 +
            0x2e5e35809db5af85,
21171 +
            0x0db0c21fa762b742,
21172 +
            0xbbbf59d07c150dbc,
21173 +
            0x9851ae4f46c2157b,
21174 +
            0xfc62b6ee09bb3c32,
21175 +
            0xdf8c4171336c24f5,
21176 +
            0x340487ac97496ea0,
21177 +
            0x17ea7033ad9e7667,
21178 +
            0x73d96892e2e75f2e,
21179 +
            0x50379f0dd83047e9,
21180 +
            0xd3b656895287d0fc,
21181 +
            0xf058a1166850c83b,
21182 +
            0x946bb9b72729e172,
21183 +
            0xb7854e281dfef9b5,
21184 +
            0x5c0d88f5b9dbb3e0,
21185 +
            0x7fe37f6a830cab27,
21186 +
            0x1bd067cbcc75826e,
21187 +
            0x383e9054f6a29aa9,
21188 +
            0x8e310b9b2dd52057,
21189 +
            0xaddffc0417023890,
21190 +
            0xc9ece4a5587b11d9,
21191 +
            0xea02133a62ac091e,
21192 +
            0x018ad5e7c689434b,
21193 +
            0x22642278fc5e5b8c,
21194 +
            0x46573ad9b32772c5,
21195 +
            0x65b9cd4689f06a02,
21196 +
            0x68b8ecadac2231aa,
21197 +
            0x4b561b3296f5296d,
21198 +
            0x2f650393d98c0024,
21199 +
            0x0c8bf40ce35b18e3,
21200 +
            0xe70332d1477e52b6,
21201 +
            0xc4edc54e7da94a71,
21202 +
            0xa0deddef32d06338,
21203 +
            0x83302a7008077bff,
21204 +
            0x353fb1bfd370c101,
21205 +
            0x16d14620e9a7d9c6,
21206 +
            0x72e25e81a6def08f,
21207 +
            0x510ca91e9c09e848,
21208 +
            0xba846fc3382ca21d,
21209 +
            0x996a985c02fbbada,
21210 +
            0xfd5980fd4d829393,
21211 +
            0xdeb7776277558b54,
21212 +
            0xe75bc32b062624c3,
21213 +
            0xc4b534b43cf13c04,
21214 +
            0xa0862c157388154d,
21215 +
            0x8368db8a495f0d8a,
21216 +
            0x68e01d57ed7a47df,
21217 +
            0x4b0eeac8d7ad5f18,
21218 +
            0x2f3df26998d47651,
21219 +
            0x0cd305f6a2036e96,
21220 +
            0xbadc9e397974d468,
21221 +
            0x993269a643a3ccaf,
21222 +
            0xfd0171070cdae5e6,
21223 +
            0xdeef8698360dfd21,
21224 +
            0x356740459228b774,
21225 +
            0x1689b7daa8ffafb3,
21226 +
            0x72baaf7be78686fa,
21227 +
            0x515458e4dd519e3d,
21228 +
            0x5c55790ff883c595,
21229 +
            0x7fbb8e90c254dd52,
21230 +
            0x1b8896318d2df41b,
21231 +
            0x386661aeb7faecdc,
21232 +
            0xd3eea77313dfa689,
21233 +
            0xf00050ec2908be4e,
21234 +
            0x9433484d66719707,
21235 +
            0xb7ddbfd25ca68fc0,
21236 +
            0x01d2241d87d1353e,
21237 +
            0x223cd382bd062df9,
21238 +
            0x460fcb23f27f04b0,
21239 +
            0x65e13cbcc8a81c77,
21240 +
            0x8e69fa616c8d5622,
21241 +
            0xad870dfe565a4ee5,
21242 +
            0xc9b4155f192367ac,
21243 +
            0xea5ae2c023f47f6b,
21244 +
            0xba6d7dcdfbc43882,
21245 +
            0x99838a52c1132045,
21246 +
            0xfdb092f38e6a090c,
21247 +
            0xde5e656cb4bd11cb,
21248 +
            0x35d6a3b110985b9e,
21249 +
            0x1638542e2a4f4359,
21250 +
            0x720b4c8f65366a10,
21251 +
            0x51e5bb105fe172d7,
21252 +
            0xe7ea20df8496c829,
21253 +
            0xc404d740be41d0ee,
21254 +
            0xa037cfe1f138f9a7,
21255 +
            0x83d9387ecbefe160,
21256 +
            0x6851fea36fcaab35,
21257 +
            0x4bbf093c551db3f2,
21258 +
            0x2f8c119d1a649abb,
21259 +
            0x0c62e60220b3827c,
21260 +
            0x0163c7e90561d9d4,
21261 +
            0x228d30763fb6c113,
21262 +
            0x46be28d770cfe85a,
21263 +
            0x6550df484a18f09d,
21264 +
            0x8ed81995ee3dbac8,
21265 +
            0xad36ee0ad4eaa20f,
21266 +
            0xc905f6ab9b938b46,
21267 +
            0xeaeb0134a1449381,
21268 +
            0x5ce49afb7a33297f,
21269 +
            0x7f0a6d6440e431b8,
21270 +
            0x1b3975c50f9d18f1,
21271 +
            0x38d7825a354a0036,
21272 +
            0xd35f4487916f4a63,
21273 +
            0xf0b1b318abb852a4,
21274 +
            0x9482abb9e4c17bed,
21275 +
            0xb76c5c26de16632a,
21276 +
            0x8e80e86faf65ccbd,
21277 +
            0xad6e1ff095b2d47a,
21278 +
            0xc95d0751dacbfd33,
21279 +
            0xeab3f0cee01ce5f4,
21280 +
            0x013b36134439afa1,
21281 +
            0x22d5c18c7eeeb766,
21282 +
            0x46e6d92d31979e2f,
21283 +
            0x65082eb20b4086e8,
21284 +
            0xd307b57dd0373c16,
21285 +
            0xf0e942e2eae024d1,
21286 +
            0x94da5a43a5990d98,
21287 +
            0xb734addc9f4e155f,
21288 +
            0x5cbc6b013b6b5f0a,
21289 +
            0x7f529c9e01bc47cd,
21290 +
            0x1b61843f4ec56e84,
21291 +
            0x388f73a074127643,
21292 +
            0x358e524b51c02deb,
21293 +
            0x1660a5d46b17352c,
21294 +
            0x7253bd75246e1c65,
21295 +
            0x51bd4aea1eb904a2,
21296 +
            0xba358c37ba9c4ef7,
21297 +
            0x99db7ba8804b5630,
21298 +
            0xfde86309cf327f79,
21299 +
            0xde069496f5e567be,
21300 +
            0x68090f592e92dd40,
21301 +
            0x4be7f8c61445c587,
21302 +
            0x2fd4e0675b3cecce,
21303 +
            0x0c3a17f861ebf409,
21304 +
            0xe7b2d125c5cebe5c,
21305 +
            0xc45c26baff19a69b,
21306 +
            0xa06f3e1bb0608fd2,
21307 +
            0x8381c9848ab79715,
21308 +
        ],
21309 +
        [
21310 +
            0x0000000000000000,
21311 +
            0xe59c4cf90ce5976b,
21312 +
            0x89c87819b0211845,
21313 +
            0x6c5434e0bcc48f2e,
21314 +
            0x516011d8c9a80619,
21315 +
            0xb4fc5d21c54d9172,
21316 +
            0xd8a869c179891e5c,
21317 +
            0x3d342538756c8937,
21318 +
            0xa2c023b193500c32,
21319 +
            0x475c6f489fb59b59,
21320 +
            0x2b085ba823711477,
21321 +
            0xce9417512f94831c,
21322 +
            0xf3a032695af80a2b,
21323 +
            0x163c7e90561d9d40,
21324 +
            0x7a684a70ead9126e,
21325 +
            0x9ff40689e63c8505,
21326 +
            0x0770a6888f4a2ef7,
21327 +
            0xe2ecea7183afb99c,
21328 +
            0x8eb8de913f6b36b2,
21329 +
            0x6b249268338ea1d9,
21330 +
            0x5610b75046e228ee,
21331 +
            0xb38cfba94a07bf85,
21332 +
            0xdfd8cf49f6c330ab,
21333 +
            0x3a4483b0fa26a7c0,
21334 +
            0xa5b085391c1a22c5,
21335 +
            0x402cc9c010ffb5ae,
21336 +
            0x2c78fd20ac3b3a80,
21337 +
            0xc9e4b1d9a0deadeb,
21338 +
            0xf4d094e1d5b224dc,
21339 +
            0x114cd818d957b3b7,
21340 +
            0x7d18ecf865933c99,
21341 +
            0x9884a0016976abf2,
21342 +
            0x0ee14d111e945dee,
21343 +
            0xeb7d01e81271ca85,
21344 +
            0x87293508aeb545ab,
21345 +
            0x62b579f1a250d2c0,
21346 +
            0x5f815cc9d73c5bf7,
21347 +
            0xba1d1030dbd9cc9c,
21348 +
            0xd64924d0671d43b2,
21349 +
            0x33d568296bf8d4d9,
21350 +
            0xac216ea08dc451dc,
21351 +
            0x49bd22598121c6b7,
21352 +
            0x25e916b93de54999,
21353 +
            0xc0755a403100def2,
21354 +
            0xfd417f78446c57c5,
21355 +
            0x18dd33814889c0ae,
21356 +
            0x74890761f44d4f80,
21357 +
            0x91154b98f8a8d8eb,
21358 +
            0x0991eb9991de7319,
21359 +
            0xec0da7609d3be472,
21360 +
            0x8059938021ff6b5c,
21361 +
            0x65c5df792d1afc37,
21362 +
            0x58f1fa4158767500,
21363 +
            0xbd6db6b85493e26b,
21364 +
            0xd1398258e8576d45,
21365 +
            0x34a5cea1e4b2fa2e,
21366 +
            0xab51c828028e7f2b,
21367 +
            0x4ecd84d10e6be840,
21368 +
            0x2299b031b2af676e,
21369 +
            0xc705fcc8be4af005,
21370 +
            0xfa31d9f0cb267932,
21371 +
            0x1fad9509c7c3ee59,
21372 +
            0x73f9a1e97b076177,
21373 +
            0x9665ed1077e2f61c,
21374 +
            0x1dc29a223d28bbdc,
21375 +
            0xf85ed6db31cd2cb7,
21376 +
            0x940ae23b8d09a399,
21377 +
            0x7196aec281ec34f2,
21378 +
            0x4ca28bfaf480bdc5,
21379 +
            0xa93ec703f8652aae,
21380 +
            0xc56af3e344a1a580,
21381 +
            0x20f6bf1a484432eb,
21382 +
            0xbf02b993ae78b7ee,
21383 +
            0x5a9ef56aa29d2085,
21384 +
            0x36cac18a1e59afab,
21385 +
            0xd3568d7312bc38c0,
21386 +
            0xee62a84b67d0b1f7,
21387 +
            0x0bfee4b26b35269c,
21388 +
            0x67aad052d7f1a9b2,
21389 +
            0x82369cabdb143ed9,
21390 +
            0x1ab23caab262952b,
21391 +
            0xff2e7053be870240,
21392 +
            0x937a44b302438d6e,
21393 +
            0x76e6084a0ea61a05,
21394 +
            0x4bd22d727bca9332,
21395 +
            0xae4e618b772f0459,
21396 +
            0xc21a556bcbeb8b77,
21397 +
            0x27861992c70e1c1c,
21398 +
            0xb8721f1b21329919,
21399 +
            0x5dee53e22dd70e72,
21400 +
            0x31ba67029113815c,
21401 +
            0xd4262bfb9df61637,
21402 +
            0xe9120ec3e89a9f00,
21403 +
            0x0c8e423ae47f086b,
21404 +
            0x60da76da58bb8745,
21405 +
            0x85463a23545e102e,
21406 +
            0x1323d73323bce632,
21407 +
            0xf6bf9bca2f597159,
21408 +
            0x9aebaf2a939dfe77,
21409 +
            0x7f77e3d39f78691c,
21410 +
            0x4243c6ebea14e02b,
21411 +
            0xa7df8a12e6f17740,
21412 +
            0xcb8bbef25a35f86e,
21413 +
            0x2e17f20b56d06f05,
21414 +
            0xb1e3f482b0ecea00,
21415 +
            0x547fb87bbc097d6b,
21416 +
            0x382b8c9b00cdf245,
21417 +
            0xddb7c0620c28652e,
21418 +
            0xe083e55a7944ec19,
21419 +
            0x051fa9a375a17b72,
21420 +
            0x694b9d43c965f45c,
21421 +
            0x8cd7d1bac5806337,
21422 +
            0x145371bbacf6c8c5,
21423 +
            0xf1cf3d42a0135fae,
21424 +
            0x9d9b09a21cd7d080,
21425 +
            0x7807455b103247eb,
21426 +
            0x45336063655ecedc,
21427 +
            0xa0af2c9a69bb59b7,
21428 +
            0xccfb187ad57fd699,
21429 +
            0x29675483d99a41f2,
21430 +
            0xb693520a3fa6c4f7,
21431 +
            0x530f1ef33343539c,
21432 +
            0x3f5b2a138f87dcb2,
21433 +
            0xdac766ea83624bd9,
21434 +
            0xe7f343d2f60ec2ee,
21435 +
            0x026f0f2bfaeb5585,
21436 +
            0x6e3b3bcb462fdaab,
21437 +
            0x8ba777324aca4dc0,
21438 +
            0x3b8534447a5177b8,
21439 +
            0xde1978bd76b4e0d3,
21440 +
            0xb24d4c5dca706ffd,
21441 +
            0x57d100a4c695f896,
21442 +
            0x6ae5259cb3f971a1,
21443 +
            0x8f796965bf1ce6ca,
21444 +
            0xe32d5d8503d869e4,
21445 +
            0x06b1117c0f3dfe8f,
21446 +
            0x994517f5e9017b8a,
21447 +
            0x7cd95b0ce5e4ece1,
21448 +
            0x108d6fec592063cf,
21449 +
            0xf511231555c5f4a4,
21450 +
            0xc825062d20a97d93,
21451 +
            0x2db94ad42c4ceaf8,
21452 +
            0x41ed7e34908865d6,
21453 +
            0xa47132cd9c6df2bd,
21454 +
            0x3cf592ccf51b594f,
21455 +
            0xd969de35f9fece24,
21456 +
            0xb53dead5453a410a,
21457 +
            0x50a1a62c49dfd661,
21458 +
            0x6d9583143cb35f56,
21459 +
            0x8809cfed3056c83d,
21460 +
            0xe45dfb0d8c924713,
21461 +
            0x01c1b7f48077d078,
21462 +
            0x9e35b17d664b557d,
21463 +
            0x7ba9fd846aaec216,
21464 +
            0x17fdc964d66a4d38,
21465 +
            0xf261859dda8fda53,
21466 +
            0xcf55a0a5afe35364,
21467 +
            0x2ac9ec5ca306c40f,
21468 +
            0x469dd8bc1fc24b21,
21469 +
            0xa30194451327dc4a,
21470 +
            0x3564795564c52a56,
21471 +
            0xd0f835ac6820bd3d,
21472 +
            0xbcac014cd4e43213,
21473 +
            0x59304db5d801a578,
21474 +
            0x6404688dad6d2c4f,
21475 +
            0x81982474a188bb24,
21476 +
            0xedcc10941d4c340a,
21477 +
            0x08505c6d11a9a361,
21478 +
            0x97a45ae4f7952664,
21479 +
            0x7238161dfb70b10f,
21480 +
            0x1e6c22fd47b43e21,
21481 +
            0xfbf06e044b51a94a,
21482 +
            0xc6c44b3c3e3d207d,
21483 +
            0x235807c532d8b716,
21484 +
            0x4f0c33258e1c3838,
21485 +
            0xaa907fdc82f9af53,
21486 +
            0x3214dfddeb8f04a1,
21487 +
            0xd7889324e76a93ca,
21488 +
            0xbbdca7c45bae1ce4,
21489 +
            0x5e40eb3d574b8b8f,
21490 +
            0x6374ce05222702b8,
21491 +
            0x86e882fc2ec295d3,
21492 +
            0xeabcb61c92061afd,
21493 +
            0x0f20fae59ee38d96,
21494 +
            0x90d4fc6c78df0893,
21495 +
            0x7548b095743a9ff8,
21496 +
            0x191c8475c8fe10d6,
21497 +
            0xfc80c88cc41b87bd,
21498 +
            0xc1b4edb4b1770e8a,
21499 +
            0x2428a14dbd9299e1,
21500 +
            0x487c95ad015616cf,
21501 +
            0xade0d9540db381a4,
21502 +
            0x2647ae664779cc64,
21503 +
            0xc3dbe29f4b9c5b0f,
21504 +
            0xaf8fd67ff758d421,
21505 +
            0x4a139a86fbbd434a,
21506 +
            0x7727bfbe8ed1ca7d,
21507 +
            0x92bbf34782345d16,
21508 +
            0xfeefc7a73ef0d238,
21509 +
            0x1b738b5e32154553,
21510 +
            0x84878dd7d429c056,
21511 +
            0x611bc12ed8cc573d,
21512 +
            0x0d4ff5ce6408d813,
21513 +
            0xe8d3b93768ed4f78,
21514 +
            0xd5e79c0f1d81c64f,
21515 +
            0x307bd0f611645124,
21516 +
            0x5c2fe416ada0de0a,
21517 +
            0xb9b3a8efa1454961,
21518 +
            0x213708eec833e293,
21519 +
            0xc4ab4417c4d675f8,
21520 +
            0xa8ff70f77812fad6,
21521 +
            0x4d633c0e74f76dbd,
21522 +
            0x70571936019be48a,
21523 +
            0x95cb55cf0d7e73e1,
21524 +
            0xf99f612fb1bafccf,
21525 +
            0x1c032dd6bd5f6ba4,
21526 +
            0x83f72b5f5b63eea1,
21527 +
            0x666b67a6578679ca,
21528 +
            0x0a3f5346eb42f6e4,
21529 +
            0xefa31fbfe7a7618f,
21530 +
            0xd2973a8792cbe8b8,
21531 +
            0x370b767e9e2e7fd3,
21532 +
            0x5b5f429e22eaf0fd,
21533 +
            0xbec30e672e0f6796,
21534 +
            0x28a6e37759ed918a,
21535 +
            0xcd3aaf8e550806e1,
21536 +
            0xa16e9b6ee9cc89cf,
21537 +
            0x44f2d797e5291ea4,
21538 +
            0x79c6f2af90459793,
21539 +
            0x9c5abe569ca000f8,
21540 +
            0xf00e8ab620648fd6,
21541 +
            0x1592c64f2c8118bd,
21542 +
            0x8a66c0c6cabd9db8,
21543 +
            0x6ffa8c3fc6580ad3,
21544 +
            0x03aeb8df7a9c85fd,
21545 +
            0xe632f42676791296,
21546 +
            0xdb06d11e03159ba1,
21547 +
            0x3e9a9de70ff00cca,
21548 +
            0x52cea907b33483e4,
21549 +
            0xb752e5febfd1148f,
21550 +
            0x2fd645ffd6a7bf7d,
21551 +
            0xca4a0906da422816,
21552 +
            0xa61e3de66686a738,
21553 +
            0x4382711f6a633053,
21554 +
            0x7eb654271f0fb964,
21555 +
            0x9b2a18de13ea2e0f,
21556 +
            0xf77e2c3eaf2ea121,
21557 +
            0x12e260c7a3cb364a,
21558 +
            0x8d16664e45f7b34f,
21559 +
            0x688a2ab749122424,
21560 +
            0x04de1e57f5d6ab0a,
21561 +
            0xe14252aef9333c61,
21562 +
            0xdc7677968c5fb556,
21563 +
            0x39ea3b6f80ba223d,
21564 +
            0x55be0f8f3c7ead13,
21565 +
            0xb0224376309b3a78,
21566 +
        ],
21567 +
        [
21568 +
            0x0000000000000000,
21569 +
            0x770a6888f4a2ef70,
21570 +
            0xee14d111e945dee0,
21571 +
            0x991eb9991de73190,
21572 +
            0x9ed943c87b618b53,
21573 +
            0xe9d32b408fc36423,
21574 +
            0x70cd92d9922455b3,
21575 +
            0x07c7fa516686bac3,
21576 +
            0x7f42667b5f292035,
21577 +
            0x08480ef3ab8bcf45,
21578 +
            0x9156b76ab66cfed5,
21579 +
            0xe65cdfe242ce11a5,
21580 +
            0xe19b25b32448ab66,
21581 +
            0x96914d3bd0ea4416,
21582 +
            0x0f8ff4a2cd0d7586,
21583 +
            0x78859c2a39af9af6,
21584 +
            0xfe84ccf6be52406a,
21585 +
            0x898ea47e4af0af1a,
21586 +
            0x10901de757179e8a,
21587 +
            0x679a756fa3b571fa,
21588 +
            0x605d8f3ec533cb39,
21589 +
            0x1757e7b631912449,
21590 +
            0x8e495e2f2c7615d9,
21591 +
            0xf94336a7d8d4faa9,
21592 +
            0x81c6aa8de17b605f,
21593 +
            0xf6ccc20515d98f2f,
21594 +
            0x6fd27b9c083ebebf,
21595 +
            0x18d81314fc9c51cf,
21596 +
            0x1f1fe9459a1aeb0c,
21597 +
            0x681581cd6eb8047c,
21598 +
            0xf10b3854735f35ec,
21599 +
            0x860150dc87fdda9c,
21600 +
            0xbff97806d54eb647,
21601 +
            0xc8f3108e21ec5937,
21602 +
            0x51eda9173c0b68a7,
21603 +
            0x26e7c19fc8a987d7,
21604 +
            0x21203bceae2f3d14,
21605 +
            0x562a53465a8dd264,
21606 +
            0xcf34eadf476ae3f4,
21607 +
            0xb83e8257b3c80c84,
21608 +
            0xc0bb1e7d8a679672,
21609 +
            0xb7b176f57ec57902,
21610 +
            0x2eafcf6c63224892,
21611 +
            0x59a5a7e49780a7e2,
21612 +
            0x5e625db5f1061d21,
21613 +
            0x2968353d05a4f251,
21614 +
            0xb0768ca41843c3c1,
21615 +
            0xc77ce42cece12cb1,
21616 +
            0x417db4f06b1cf62d,
21617 +
            0x3677dc789fbe195d,
21618 +
            0xaf6965e1825928cd,
21619 +
            0xd8630d6976fbc7bd,
21620 +
            0xdfa4f738107d7d7e,
21621 +
            0xa8ae9fb0e4df920e,
21622 +
            0x31b02629f938a39e,
21623 +
            0x46ba4ea10d9a4cee,
21624 +
            0x3e3fd28b3435d618,
21625 +
            0x4935ba03c0973968,
21626 +
            0xd02b039add7008f8,
21627 +
            0xa7216b1229d2e788,
21628 +
            0xa0e691434f545d4b,
21629 +
            0xd7ecf9cbbbf6b23b,
21630 +
            0x4ef24052a61183ab,
21631 +
            0x39f828da52b36cdb,
21632 +
            0x3d0211e603775a1d,
21633 +
            0x4a08796ef7d5b56d,
21634 +
            0xd316c0f7ea3284fd,
21635 +
            0xa41ca87f1e906b8d,
21636 +
            0xa3db522e7816d14e,
21637 +
            0xd4d13aa68cb43e3e,
21638 +
            0x4dcf833f91530fae,
21639 +
            0x3ac5ebb765f1e0de,
21640 +
            0x4240779d5c5e7a28,
21641 +
            0x354a1f15a8fc9558,
21642 +
            0xac54a68cb51ba4c8,
21643 +
            0xdb5ece0441b94bb8,
21644 +
            0xdc993455273ff17b,
21645 +
            0xab935cddd39d1e0b,
21646 +
            0x328de544ce7a2f9b,
21647 +
            0x45878dcc3ad8c0eb,
21648 +
            0xc386dd10bd251a77,
21649 +
            0xb48cb5984987f507,
21650 +
            0x2d920c015460c497,
21651 +
            0x5a986489a0c22be7,
21652 +
            0x5d5f9ed8c6449124,
21653 +
            0x2a55f65032e67e54,
21654 +
            0xb34b4fc92f014fc4,
21655 +
            0xc4412741dba3a0b4,
21656 +
            0xbcc4bb6be20c3a42,
21657 +
            0xcbced3e316aed532,
21658 +
            0x52d06a7a0b49e4a2,
21659 +
            0x25da02f2ffeb0bd2,
21660 +
            0x221df8a3996db111,
21661 +
            0x5517902b6dcf5e61,
21662 +
            0xcc0929b270286ff1,
21663 +
            0xbb03413a848a8081,
21664 +
            0x82fb69e0d639ec5a,
21665 +
            0xf5f10168229b032a,
21666 +
            0x6cefb8f13f7c32ba,
21667 +
            0x1be5d079cbdeddca,
21668 +
            0x1c222a28ad586709,
21669 +
            0x6b2842a059fa8879,
21670 +
            0xf236fb39441db9e9,
21671 +
            0x853c93b1b0bf5699,
21672 +
            0xfdb90f9b8910cc6f,
21673 +
            0x8ab367137db2231f,
21674 +
            0x13adde8a6055128f,
21675 +
            0x64a7b60294f7fdff,
21676 +
            0x63604c53f271473c,
21677 +
            0x146a24db06d3a84c,
21678 +
            0x8d749d421b3499dc,
21679 +
            0xfa7ef5caef9676ac,
21680 +
            0x7c7fa516686bac30,
21681 +
            0x0b75cd9e9cc94340,
21682 +
            0x926b7407812e72d0,
21683 +
            0xe5611c8f758c9da0,
21684 +
            0xe2a6e6de130a2763,
21685 +
            0x95ac8e56e7a8c813,
21686 +
            0x0cb237cffa4ff983,
21687 +
            0x7bb85f470eed16f3,
21688 +
            0x033dc36d37428c05,
21689 +
            0x7437abe5c3e06375,
21690 +
            0xed29127cde0752e5,
21691 +
            0x9a237af42aa5bd95,
21692 +
            0x9de480a54c230756,
21693 +
            0xeaeee82db881e826,
21694 +
            0x73f051b4a566d9b6,
21695 +
            0x04fa393c51c436c6,
21696 +
            0x7a0423cc06eeb43a,
21697 +
            0x0d0e4b44f24c5b4a,
21698 +
            0x9410f2ddefab6ada,
21699 +
            0xe31a9a551b0985aa,
21700 +
            0xe4dd60047d8f3f69,
21701 +
            0x93d7088c892dd019,
21702 +
            0x0ac9b11594cae189,
21703 +
            0x7dc3d99d60680ef9,
21704 +
            0x054645b759c7940f,
21705 +
            0x724c2d3fad657b7f,
21706 +
            0xeb5294a6b0824aef,
21707 +
            0x9c58fc2e4420a59f,
21708 +
            0x9b9f067f22a61f5c,
21709 +
            0xec956ef7d604f02c,
21710 +
            0x758bd76ecbe3c1bc,
21711 +
            0x0281bfe63f412ecc,
21712 +
            0x8480ef3ab8bcf450,
21713 +
            0xf38a87b24c1e1b20,
21714 +
            0x6a943e2b51f92ab0,
21715 +
            0x1d9e56a3a55bc5c0,
21716 +
            0x1a59acf2c3dd7f03,
21717 +
            0x6d53c47a377f9073,
21718 +
            0xf44d7de32a98a1e3,
21719 +
            0x8347156bde3a4e93,
21720 +
            0xfbc28941e795d465,
21721 +
            0x8cc8e1c913373b15,
21722 +
            0x15d658500ed00a85,
21723 +
            0x62dc30d8fa72e5f5,
21724 +
            0x651bca899cf45f36,
21725 +
            0x1211a2016856b046,
21726 +
            0x8b0f1b9875b181d6,
21727 +
            0xfc05731081136ea6,
21728 +
            0xc5fd5bcad3a0027d,
21729 +
            0xb2f733422702ed0d,
21730 +
            0x2be98adb3ae5dc9d,
21731 +
            0x5ce3e253ce4733ed,
21732 +
            0x5b241802a8c1892e,
21733 +
            0x2c2e708a5c63665e,
21734 +
            0xb530c913418457ce,
21735 +
            0xc23aa19bb526b8be,
21736 +
            0xbabf3db18c892248,
21737 +
            0xcdb55539782bcd38,
21738 +
            0x54abeca065ccfca8,
21739 +
            0x23a18428916e13d8,
21740 +
            0x24667e79f7e8a91b,
21741 +
            0x536c16f1034a466b,
21742 +
            0xca72af681ead77fb,
21743 +
            0xbd78c7e0ea0f988b,
21744 +
            0x3b79973c6df24217,
21745 +
            0x4c73ffb49950ad67,
21746 +
            0xd56d462d84b79cf7,
21747 +
            0xa2672ea570157387,
21748 +
            0xa5a0d4f41693c944,
21749 +
            0xd2aabc7ce2312634,
21750 +
            0x4bb405e5ffd617a4,
21751 +
            0x3cbe6d6d0b74f8d4,
21752 +
            0x443bf14732db6222,
21753 +
            0x333199cfc6798d52,
21754 +
            0xaa2f2056db9ebcc2,
21755 +
            0xdd2548de2f3c53b2,
21756 +
            0xdae2b28f49bae971,
21757 +
            0xade8da07bd180601,
21758 +
            0x34f6639ea0ff3791,
21759 +
            0x43fc0b16545dd8e1,
21760 +
            0x4706322a0599ee27,
21761 +
            0x300c5aa2f13b0157,
21762 +
            0xa912e33becdc30c7,
21763 +
            0xde188bb3187edfb7,
21764 +
            0xd9df71e27ef86574,
21765 +
            0xaed5196a8a5a8a04,
21766 +
            0x37cba0f397bdbb94,
21767 +
            0x40c1c87b631f54e4,
21768 +
            0x384454515ab0ce12,
21769 +
            0x4f4e3cd9ae122162,
21770 +
            0xd6508540b3f510f2,
21771 +
            0xa15aedc84757ff82,
21772 +
            0xa69d179921d14541,
21773 +
            0xd1977f11d573aa31,
21774 +
            0x4889c688c8949ba1,
21775 +
            0x3f83ae003c3674d1,
21776 +
            0xb982fedcbbcbae4d,
21777 +
            0xce8896544f69413d,
21778 +
            0x57962fcd528e70ad,
21779 +
            0x209c4745a62c9fdd,
21780 +
            0x275bbd14c0aa251e,
21781 +
            0x5051d59c3408ca6e,
21782 +
            0xc94f6c0529effbfe,
21783 +
            0xbe45048ddd4d148e,
21784 +
            0xc6c098a7e4e28e78,
21785 +
            0xb1caf02f10406108,
21786 +
            0x28d449b60da75098,
21787 +
            0x5fde213ef905bfe8,
21788 +
            0x5819db6f9f83052b,
21789 +
            0x2f13b3e76b21ea5b,
21790 +
            0xb60d0a7e76c6dbcb,
21791 +
            0xc10762f6826434bb,
21792 +
            0xf8ff4a2cd0d75860,
21793 +
            0x8ff522a42475b710,
21794 +
            0x16eb9b3d39928680,
21795 +
            0x61e1f3b5cd3069f0,
21796 +
            0x662609e4abb6d333,
21797 +
            0x112c616c5f143c43,
21798 +
            0x8832d8f542f30dd3,
21799 +
            0xff38b07db651e2a3,
21800 +
            0x87bd2c578ffe7855,
21801 +
            0xf0b744df7b5c9725,
21802 +
            0x69a9fd4666bba6b5,
21803 +
            0x1ea395ce921949c5,
21804 +
            0x19646f9ff49ff306,
21805 +
            0x6e6e0717003d1c76,
21806 +
            0xf770be8e1dda2de6,
21807 +
            0x807ad606e978c296,
21808 +
            0x067b86da6e85180a,
21809 +
            0x7171ee529a27f77a,
21810 +
            0xe86f57cb87c0c6ea,
21811 +
            0x9f653f437362299a,
21812 +
            0x98a2c51215e49359,
21813 +
            0xefa8ad9ae1467c29,
21814 +
            0x76b61403fca14db9,
21815 +
            0x01bc7c8b0803a2c9,
21816 +
            0x7939e0a131ac383f,
21817 +
            0x0e338829c50ed74f,
21818 +
            0x972d31b0d8e9e6df,
21819 +
            0xe02759382c4b09af,
21820 +
            0xe7e0a3694acdb36c,
21821 +
            0x90eacbe1be6f5c1c,
21822 +
            0x09f47278a3886d8c,
21823 +
            0x7efe1af0572a82fc,
21824 +
        ],
21825 +
        [
21826 +
            0x0000000000000000,
21827 +
            0xf40847980ddd6874,
21828 +
            0xaae06edbb250e67b,
21829 +
            0x5ee82943bf8d8e0f,
21830 +
            0x17303c5ccd4bfa65,
21831 +
            0xe3387bc4c0969211,
21832 +
            0xbdd052877f1b1c1e,
21833 +
            0x49d8151f72c6746a,
21834 +
            0x2e6078b99a97f4ca,
21835 +
            0xda683f21974a9cbe,
21836 +
            0x8480166228c712b1,
21837 +
            0x708851fa251a7ac5,
21838 +
            0x395044e557dc0eaf,
21839 +
            0xcd58037d5a0166db,
21840 +
            0x93b02a3ee58ce8d4,
21841 +
            0x67b86da6e85180a0,
21842 +
            0x5cc0f173352fe994,
21843 +
            0xa8c8b6eb38f281e0,
21844 +
            0xf6209fa8877f0fef,
21845 +
            0x0228d8308aa2679b,
21846 +
            0x4bf0cd2ff86413f1,
21847 +
            0xbff88ab7f5b97b85,
21848 +
            0xe110a3f44a34f58a,
21849 +
            0x1518e46c47e99dfe,
21850 +
            0x72a089caafb81d5e,
21851 +
            0x86a8ce52a265752a,
21852 +
            0xd840e7111de8fb25,
21853 +
            0x2c48a08910359351,
21854 +
            0x6590b59662f3e73b,
21855 +
            0x9198f20e6f2e8f4f,
21856 +
            0xcf70db4dd0a30140,
21857 +
            0x3b789cd5dd7e6934,
21858 +
            0xb981e2e66a5fd328,
21859 +
            0x4d89a57e6782bb5c,
21860 +
            0x13618c3dd80f3553,
21861 +
            0xe769cba5d5d25d27,
21862 +
            0xaeb1debaa714294d,
21863 +
            0x5ab99922aac94139,
21864 +
            0x0451b0611544cf36,
21865 +
            0xf059f7f91899a742,
21866 +
            0x97e19a5ff0c827e2,
21867 +
            0x63e9ddc7fd154f96,
21868 +
            0x3d01f4844298c199,
21869 +
            0xc909b31c4f45a9ed,
21870 +
            0x80d1a6033d83dd87,
21871 +
            0x74d9e19b305eb5f3,
21872 +
            0x2a31c8d88fd33bfc,
21873 +
            0xde398f40820e5388,
21874 +
            0xe54113955f703abc,
21875 +
            0x1149540d52ad52c8,
21876 +
            0x4fa17d4eed20dcc7,
21877 +
            0xbba93ad6e0fdb4b3,
21878 +
            0xf2712fc9923bc0d9,
21879 +
            0x067968519fe6a8ad,
21880 +
            0x58914112206b26a2,
21881 +
            0xac99068a2db64ed6,
21882 +
            0xcb216b2cc5e7ce76,
21883 +
            0x3f292cb4c83aa602,
21884 +
            0x61c105f777b7280d,
21885 +
            0x95c9426f7a6a4079,
21886 +
            0xdc11577008ac3413,
21887 +
            0x281910e805715c67,
21888 +
            0x76f139abbafcd268,
21889 +
            0x82f97e33b721ba1c,
21890 +
            0x31f324277d5590c3,
21891 +
            0xc5fb63bf7088f8b7,
21892 +
            0x9b134afccf0576b8,
21893 +
            0x6f1b0d64c2d81ecc,
21894 +
            0x26c3187bb01e6aa6,
21895 +
            0xd2cb5fe3bdc302d2,
21896 +
            0x8c2376a0024e8cdd,
21897 +
            0x782b31380f93e4a9,
21898 +
            0x1f935c9ee7c26409,
21899 +
            0xeb9b1b06ea1f0c7d,
21900 +
            0xb573324555928272,
21901 +
            0x417b75dd584fea06,
21902 +
            0x08a360c22a899e6c,
21903 +
            0xfcab275a2754f618,
21904 +
            0xa2430e1998d97817,
21905 +
            0x564b498195041063,
21906 +
            0x6d33d554487a7957,
21907 +
            0x993b92cc45a71123,
21908 +
            0xc7d3bb8ffa2a9f2c,
21909 +
            0x33dbfc17f7f7f758,
21910 +
            0x7a03e90885318332,
21911 +
            0x8e0bae9088eceb46,
21912 +
            0xd0e387d337616549,
21913 +
            0x24ebc04b3abc0d3d,
21914 +
            0x4353adedd2ed8d9d,
21915 +
            0xb75bea75df30e5e9,
21916 +
            0xe9b3c33660bd6be6,
21917 +
            0x1dbb84ae6d600392,
21918 +
            0x546391b11fa677f8,
21919 +
            0xa06bd629127b1f8c,
21920 +
            0xfe83ff6aadf69183,
21921 +
            0x0a8bb8f2a02bf9f7,
21922 +
            0x8872c6c1170a43eb,
21923 +
            0x7c7a81591ad72b9f,
21924 +
            0x2292a81aa55aa590,
21925 +
            0xd69aef82a887cde4,
21926 +
            0x9f42fa9dda41b98e,
21927 +
            0x6b4abd05d79cd1fa,
21928 +
            0x35a2944668115ff5,
21929 +
            0xc1aad3de65cc3781,
21930 +
            0xa612be788d9db721,
21931 +
            0x521af9e08040df55,
21932 +
            0x0cf2d0a33fcd515a,
21933 +
            0xf8fa973b3210392e,
21934 +
            0xb122822440d64d44,
21935 +
            0x452ac5bc4d0b2530,
21936 +
            0x1bc2ecfff286ab3f,
21937 +
            0xefcaab67ff5bc34b,
21938 +
            0xd4b237b22225aa7f,
21939 +
            0x20ba702a2ff8c20b,
21940 +
            0x7e52596990754c04,
21941 +
            0x8a5a1ef19da82470,
21942 +
            0xc3820beeef6e501a,
21943 +
            0x378a4c76e2b3386e,
21944 +
            0x696265355d3eb661,
21945 +
            0x9d6a22ad50e3de15,
21946 +
            0xfad24f0bb8b25eb5,
21947 +
            0x0eda0893b56f36c1,
21948 +
            0x503221d00ae2b8ce,
21949 +
            0xa43a6648073fd0ba,
21950 +
            0xede2735775f9a4d0,
21951 +
            0x19ea34cf7824cca4,
21952 +
            0x47021d8cc7a942ab,
21953 +
            0xb30a5a14ca742adf,
21954 +
            0x63e6484efaab2186,
21955 +
            0x97ee0fd6f77649f2,
21956 +
            0xc906269548fbc7fd,
21957 +
            0x3d0e610d4526af89,
21958 +
            0x74d6741237e0dbe3,
21959 +
            0x80de338a3a3db397,
21960 +
            0xde361ac985b03d98,
21961 +
            0x2a3e5d51886d55ec,
21962 +
            0x4d8630f7603cd54c,
21963 +
            0xb98e776f6de1bd38,
21964 +
            0xe7665e2cd26c3337,
21965 +
            0x136e19b4dfb15b43,
21966 +
            0x5ab60cabad772f29,
21967 +
            0xaebe4b33a0aa475d,
21968 +
            0xf05662701f27c952,
21969 +
            0x045e25e812faa126,
21970 +
            0x3f26b93dcf84c812,
21971 +
            0xcb2efea5c259a066,
21972 +
            0x95c6d7e67dd42e69,
21973 +
            0x61ce907e7009461d,
21974 +
            0x2816856102cf3277,
21975 +
            0xdc1ec2f90f125a03,
21976 +
            0x82f6ebbab09fd40c,
21977 +
            0x76feac22bd42bc78,
21978 +
            0x1146c18455133cd8,
21979 +
            0xe54e861c58ce54ac,
21980 +
            0xbba6af5fe743daa3,
21981 +
            0x4faee8c7ea9eb2d7,
21982 +
            0x0676fdd89858c6bd,
21983 +
            0xf27eba409585aec9,
21984 +
            0xac9693032a0820c6,
21985 +
            0x589ed49b27d548b2,
21986 +
            0xda67aaa890f4f2ae,
21987 +
            0x2e6fed309d299ada,
21988 +
            0x7087c47322a414d5,
21989 +
            0x848f83eb2f797ca1,
21990 +
            0xcd5796f45dbf08cb,
21991 +
            0x395fd16c506260bf,
21992 +
            0x67b7f82fefefeeb0,
21993 +
            0x93bfbfb7e23286c4,
21994 +
            0xf407d2110a630664,
21995 +
            0x000f958907be6e10,
21996 +
            0x5ee7bccab833e01f,
21997 +
            0xaaeffb52b5ee886b,
21998 +
            0xe337ee4dc728fc01,
21999 +
            0x173fa9d5caf59475,
22000 +
            0x49d7809675781a7a,
22001 +
            0xbddfc70e78a5720e,
22002 +
            0x86a75bdba5db1b3a,
22003 +
            0x72af1c43a806734e,
22004 +
            0x2c473500178bfd41,
22005 +
            0xd84f72981a569535,
22006 +
            0x919767876890e15f,
22007 +
            0x659f201f654d892b,
22008 +
            0x3b77095cdac00724,
22009 +
            0xcf7f4ec4d71d6f50,
22010 +
            0xa8c723623f4ceff0,
22011 +
            0x5ccf64fa32918784,
22012 +
            0x02274db98d1c098b,
22013 +
            0xf62f0a2180c161ff,
22014 +
            0xbff71f3ef2071595,
22015 +
            0x4bff58a6ffda7de1,
22016 +
            0x151771e54057f3ee,
22017 +
            0xe11f367d4d8a9b9a,
22018 +
            0x52156c6987feb145,
22019 +
            0xa61d2bf18a23d931,
22020 +
            0xf8f502b235ae573e,
22021 +
            0x0cfd452a38733f4a,
22022 +
            0x452550354ab54b20,
22023 +
            0xb12d17ad47682354,
22024 +
            0xefc53eeef8e5ad5b,
22025 +
            0x1bcd7976f538c52f,
22026 +
            0x7c7514d01d69458f,
22027 +
            0x887d534810b42dfb,
22028 +
            0xd6957a0baf39a3f4,
22029 +
            0x229d3d93a2e4cb80,
22030 +
            0x6b45288cd022bfea,
22031 +
            0x9f4d6f14ddffd79e,
22032 +
            0xc1a5465762725991,
22033 +
            0x35ad01cf6faf31e5,
22034 +
            0x0ed59d1ab2d158d1,
22035 +
            0xfaddda82bf0c30a5,
22036 +
            0xa435f3c10081beaa,
22037 +
            0x503db4590d5cd6de,
22038 +
            0x19e5a1467f9aa2b4,
22039 +
            0xedede6de7247cac0,
22040 +
            0xb305cf9dcdca44cf,
22041 +
            0x470d8805c0172cbb,
22042 +
            0x20b5e5a32846ac1b,
22043 +
            0xd4bda23b259bc46f,
22044 +
            0x8a558b789a164a60,
22045 +
            0x7e5dcce097cb2214,
22046 +
            0x3785d9ffe50d567e,
22047 +
            0xc38d9e67e8d03e0a,
22048 +
            0x9d65b724575db005,
22049 +
            0x696df0bc5a80d871,
22050 +
            0xeb948e8feda1626d,
22051 +
            0x1f9cc917e07c0a19,
22052 +
            0x4174e0545ff18416,
22053 +
            0xb57ca7cc522cec62,
22054 +
            0xfca4b2d320ea9808,
22055 +
            0x08acf54b2d37f07c,
22056 +
            0x5644dc0892ba7e73,
22057 +
            0xa24c9b909f671607,
22058 +
            0xc5f4f636773696a7,
22059 +
            0x31fcb1ae7aebfed3,
22060 +
            0x6f1498edc56670dc,
22061 +
            0x9b1cdf75c8bb18a8,
22062 +
            0xd2c4ca6aba7d6cc2,
22063 +
            0x26cc8df2b7a004b6,
22064 +
            0x7824a4b1082d8ab9,
22065 +
            0x8c2ce32905f0e2cd,
22066 +
            0xb7547ffcd88e8bf9,
22067 +
            0x435c3864d553e38d,
22068 +
            0x1db411276ade6d82,
22069 +
            0xe9bc56bf670305f6,
22070 +
            0xa06443a015c5719c,
22071 +
            0x546c0438181819e8,
22072 +
            0x0a842d7ba79597e7,
22073 +
            0xfe8c6ae3aa48ff93,
22074 +
            0x9934074542197f33,
22075 +
            0x6d3c40dd4fc41747,
22076 +
            0x33d4699ef0499948,
22077 +
            0xc7dc2e06fd94f13c,
22078 +
            0x8e043b198f528556,
22079 +
            0x7a0c7c81828fed22,
22080 +
            0x24e455c23d02632d,
22081 +
            0xd0ec125a30df0b59,
22082 +
        ],
22083 +
        [
22084 +
            0x0000000000000000,
22085 +
            0xc7cc909df556430c,
22086 +
            0xcd69c0d04346b08b,
22087 +
            0x0aa5504db610f387,
22088 +
            0xd823604b2f675785,
22089 +
            0x1feff0d6da311489,
22090 +
            0x154aa09b6c21e70e,
22091 +
            0xd28630069977a402,
22092 +
            0xf2b6217df7249999,
22093 +
            0x357ab1e00272da95,
22094 +
            0x3fdfe1adb4622912,
22095 +
            0xf813713041346a1e,
22096 +
            0x2a954136d843ce1c,
22097 +
            0xed59d1ab2d158d10,
22098 +
            0xe7fc81e69b057e97,
22099 +
            0x2030117b6e533d9b,
22100 +
            0xa79ca31047a305a1,
22101 +
            0x6050338db2f546ad,
22102 +
            0x6af563c004e5b52a,
22103 +
            0xad39f35df1b3f626,
22104 +
            0x7fbfc35b68c45224,
22105 +
            0xb87353c69d921128,
22106 +
            0xb2d6038b2b82e2af,
22107 +
            0x751a9316ded4a1a3,
22108 +
            0x552a826db0879c38,
22109 +
            0x92e612f045d1df34,
22110 +
            0x984342bdf3c12cb3,
22111 +
            0x5f8fd22006976fbf,
22112 +
            0x8d09e2269fe0cbbd,
22113 +
            0x4ac572bb6ab688b1,
22114 +
            0x406022f6dca67b36,
22115 +
            0x87acb26b29f0383a,
22116 +
            0x0dc9a7cb26ac3dd1,
22117 +
            0xca053756d3fa7edd,
22118 +
            0xc0a0671b65ea8d5a,
22119 +
            0x076cf78690bcce56,
22120 +
            0xd5eac78009cb6a54,
22121 +
            0x1226571dfc9d2958,
22122 +
            0x188307504a8ddadf,
22123 +
            0xdf4f97cdbfdb99d3,
22124 +
            0xff7f86b6d188a448,
22125 +
            0x38b3162b24dee744,
22126 +
            0x3216466692ce14c3,
22127 +
            0xf5dad6fb679857cf,
22128 +
            0x275ce6fdfeeff3cd,
22129 +
            0xe09076600bb9b0c1,
22130 +
            0xea35262dbda94346,
22131 +
            0x2df9b6b048ff004a,
22132 +
            0xaa5504db610f3870,
22133 +
            0x6d99944694597b7c,
22134 +
            0x673cc40b224988fb,
22135 +
            0xa0f05496d71fcbf7,
22136 +
            0x727664904e686ff5,
22137 +
            0xb5baf40dbb3e2cf9,
22138 +
            0xbf1fa4400d2edf7e,
22139 +
            0x78d334ddf8789c72,
22140 +
            0x58e325a6962ba1e9,
22141 +
            0x9f2fb53b637de2e5,
22142 +
            0x958ae576d56d1162,
22143 +
            0x524675eb203b526e,
22144 +
            0x80c045edb94cf66c,
22145 +
            0x470cd5704c1ab560,
22146 +
            0x4da9853dfa0a46e7,
22147 +
            0x8a6515a00f5c05eb,
22148 +
            0x1b934f964d587ba2,
22149 +
            0xdc5fdf0bb80e38ae,
22150 +
            0xd6fa8f460e1ecb29,
22151 +
            0x11361fdbfb488825,
22152 +
            0xc3b02fdd623f2c27,
22153 +
            0x047cbf4097696f2b,
22154 +
            0x0ed9ef0d21799cac,
22155 +
            0xc9157f90d42fdfa0,
22156 +
            0xe9256eebba7ce23b,
22157 +
            0x2ee9fe764f2aa137,
22158 +
            0x244cae3bf93a52b0,
22159 +
            0xe3803ea60c6c11bc,
22160 +
            0x31060ea0951bb5be,
22161 +
            0xf6ca9e3d604df6b2,
22162 +
            0xfc6fce70d65d0535,
22163 +
            0x3ba35eed230b4639,
22164 +
            0xbc0fec860afb7e03,
22165 +
            0x7bc37c1bffad3d0f,
22166 +
            0x71662c5649bdce88,
22167 +
            0xb6aabccbbceb8d84,
22168 +
            0x642c8ccd259c2986,
22169 +
            0xa3e01c50d0ca6a8a,
22170 +
            0xa9454c1d66da990d,
22171 +
            0x6e89dc80938cda01,
22172 +
            0x4eb9cdfbfddfe79a,
22173 +
            0x89755d660889a496,
22174 +
            0x83d00d2bbe995711,
22175 +
            0x441c9db64bcf141d,
22176 +
            0x969aadb0d2b8b01f,
22177 +
            0x51563d2d27eef313,
22178 +
            0x5bf36d6091fe0094,
22179 +
            0x9c3ffdfd64a84398,
22180 +
            0x165ae85d6bf44673,
22181 +
            0xd19678c09ea2057f,
22182 +
            0xdb33288d28b2f6f8,
22183 +
            0x1cffb810dde4b5f4,
22184 +
            0xce798816449311f6,
22185 +
            0x09b5188bb1c552fa,
22186 +
            0x031048c607d5a17d,
22187 +
            0xc4dcd85bf283e271,
22188 +
            0xe4ecc9209cd0dfea,
22189 +
            0x232059bd69869ce6,
22190 +
            0x298509f0df966f61,
22191 +
            0xee49996d2ac02c6d,
22192 +
            0x3ccfa96bb3b7886f,
22193 +
            0xfb0339f646e1cb63,
22194 +
            0xf1a669bbf0f138e4,
22195 +
            0x366af92605a77be8,
22196 +
            0xb1c64b4d2c5743d2,
22197 +
            0x760adbd0d90100de,
22198 +
            0x7caf8b9d6f11f359,
22199 +
            0xbb631b009a47b055,
22200 +
            0x69e52b0603301457,
22201 +
            0xae29bb9bf666575b,
22202 +
            0xa48cebd64076a4dc,
22203 +
            0x63407b4bb520e7d0,
22204 +
            0x43706a30db73da4b,
22205 +
            0x84bcfaad2e259947,
22206 +
            0x8e19aae098356ac0,
22207 +
            0x49d53a7d6d6329cc,
22208 +
            0x9b530a7bf4148dce,
22209 +
            0x5c9f9ae60142cec2,
22210 +
            0x563acaabb7523d45,
22211 +
            0x91f65a3642047e49,
22212 +
            0x37269f2c9ab0f744,
22213 +
            0xf0ea0fb16fe6b448,
22214 +
            0xfa4f5ffcd9f647cf,
22215 +
            0x3d83cf612ca004c3,
22216 +
            0xef05ff67b5d7a0c1,
22217 +
            0x28c96ffa4081e3cd,
22218 +
            0x226c3fb7f691104a,
22219 +
            0xe5a0af2a03c75346,
22220 +
            0xc590be516d946edd,
22221 +
            0x025c2ecc98c22dd1,
22222 +
            0x08f97e812ed2de56,
22223 +
            0xcf35ee1cdb849d5a,
22224 +
            0x1db3de1a42f33958,
22225 +
            0xda7f4e87b7a57a54,
22226 +
            0xd0da1eca01b589d3,
22227 +
            0x17168e57f4e3cadf,
22228 +
            0x90ba3c3cdd13f2e5,
22229 +
            0x5776aca12845b1e9,
22230 +
            0x5dd3fcec9e55426e,
22231 +
            0x9a1f6c716b030162,
22232 +
            0x48995c77f274a560,
22233 +
            0x8f55ccea0722e66c,
22234 +
            0x85f09ca7b13215eb,
22235 +
            0x423c0c3a446456e7,
22236 +
            0x620c1d412a376b7c,
22237 +
            0xa5c08ddcdf612870,
22238 +
            0xaf65dd916971dbf7,
22239 +
            0x68a94d0c9c2798fb,
22240 +
            0xba2f7d0a05503cf9,
22241 +
            0x7de3ed97f0067ff5,
22242 +
            0x7746bdda46168c72,
22243 +
            0xb08a2d47b340cf7e,
22244 +
            0x3aef38e7bc1cca95,
22245 +
            0xfd23a87a494a8999,
22246 +
            0xf786f837ff5a7a1e,
22247 +
            0x304a68aa0a0c3912,
22248 +
            0xe2cc58ac937b9d10,
22249 +
            0x2500c831662dde1c,
22250 +
            0x2fa5987cd03d2d9b,
22251 +
            0xe86908e1256b6e97,
22252 +
            0xc859199a4b38530c,
22253 +
            0x0f958907be6e1000,
22254 +
            0x0530d94a087ee387,
22255 +
            0xc2fc49d7fd28a08b,
22256 +
            0x107a79d1645f0489,
22257 +
            0xd7b6e94c91094785,
22258 +
            0xdd13b9012719b402,
22259 +
            0x1adf299cd24ff70e,
22260 +
            0x9d739bf7fbbfcf34,
22261 +
            0x5abf0b6a0ee98c38,
22262 +
            0x501a5b27b8f97fbf,
22263 +
            0x97d6cbba4daf3cb3,
22264 +
            0x4550fbbcd4d898b1,
22265 +
            0x829c6b21218edbbd,
22266 +
            0x88393b6c979e283a,
22267 +
            0x4ff5abf162c86b36,
22268 +
            0x6fc5ba8a0c9b56ad,
22269 +
            0xa8092a17f9cd15a1,
22270 +
            0xa2ac7a5a4fdde626,
22271 +
            0x6560eac7ba8ba52a,
22272 +
            0xb7e6dac123fc0128,
22273 +
            0x702a4a5cd6aa4224,
22274 +
            0x7a8f1a1160bab1a3,
22275 +
            0xbd438a8c95ecf2af,
22276 +
            0x2cb5d0bad7e88ce6,
22277 +
            0xeb79402722becfea,
22278 +
            0xe1dc106a94ae3c6d,
22279 +
            0x261080f761f87f61,
22280 +
            0xf496b0f1f88fdb63,
22281 +
            0x335a206c0dd9986f,
22282 +
            0x39ff7021bbc96be8,
22283 +
            0xfe33e0bc4e9f28e4,
22284 +
            0xde03f1c720cc157f,
22285 +
            0x19cf615ad59a5673,
22286 +
            0x136a3117638aa5f4,
22287 +
            0xd4a6a18a96dce6f8,
22288 +
            0x0620918c0fab42fa,
22289 +
            0xc1ec0111fafd01f6,
22290 +
            0xcb49515c4cedf271,
22291 +
            0x0c85c1c1b9bbb17d,
22292 +
            0x8b2973aa904b8947,
22293 +
            0x4ce5e337651dca4b,
22294 +
            0x4640b37ad30d39cc,
22295 +
            0x818c23e7265b7ac0,
22296 +
            0x530a13e1bf2cdec2,
22297 +
            0x94c6837c4a7a9dce,
22298 +
            0x9e63d331fc6a6e49,
22299 +
            0x59af43ac093c2d45,
22300 +
            0x799f52d7676f10de,
22301 +
            0xbe53c24a923953d2,
22302 +
            0xb4f692072429a055,
22303 +
            0x733a029ad17fe359,
22304 +
            0xa1bc329c4808475b,
22305 +
            0x6670a201bd5e0457,
22306 +
            0x6cd5f24c0b4ef7d0,
22307 +
            0xab1962d1fe18b4dc,
22308 +
            0x217c7771f144b137,
22309 +
            0xe6b0e7ec0412f23b,
22310 +
            0xec15b7a1b20201bc,
22311 +
            0x2bd9273c475442b0,
22312 +
            0xf95f173ade23e6b2,
22313 +
            0x3e9387a72b75a5be,
22314 +
            0x3436d7ea9d655639,
22315 +
            0xf3fa477768331535,
22316 +
            0xd3ca560c066028ae,
22317 +
            0x1406c691f3366ba2,
22318 +
            0x1ea396dc45269825,
22319 +
            0xd96f0641b070db29,
22320 +
            0x0be9364729077f2b,
22321 +
            0xcc25a6dadc513c27,
22322 +
            0xc680f6976a41cfa0,
22323 +
            0x014c660a9f178cac,
22324 +
            0x86e0d461b6e7b496,
22325 +
            0x412c44fc43b1f79a,
22326 +
            0x4b8914b1f5a1041d,
22327 +
            0x8c45842c00f74711,
22328 +
            0x5ec3b42a9980e313,
22329 +
            0x990f24b76cd6a01f,
22330 +
            0x93aa74fadac65398,
22331 +
            0x5466e4672f901094,
22332 +
            0x7456f51c41c32d0f,
22333 +
            0xb39a6581b4956e03,
22334 +
            0xb93f35cc02859d84,
22335 +
            0x7ef3a551f7d3de88,
22336 +
            0xac7595576ea47a8a,
22337 +
            0x6bb905ca9bf23986,
22338 +
            0x611c55872de2ca01,
22339 +
            0xa6d0c51ad8b4890d,
22340 +
        ],
22341 +
        [
22342 +
            0x0000000000000000,
22343 +
            0x6e4d3e593561ee88,
22344 +
            0xdc9a7cb26ac3dd10,
22345 +
            0xb2d742eb5fa23398,
22346 +
            0xfbc4188f7c6d8cb3,
22347 +
            0x958926d6490c623b,
22348 +
            0x275e643d16ae51a3,
22349 +
            0x49135a6423cfbf2b,
22350 +
            0xb578d0f551312ff5,
22351 +
            0xdb35eeac6450c17d,
22352 +
            0x69e2ac473bf2f2e5,
22353 +
            0x07af921e0e931c6d,
22354 +
            0x4ebcc87a2d5ca346,
22355 +
            0x20f1f623183d4dce,
22356 +
            0x9226b4c8479f7e56,
22357 +
            0xfc6b8a9172fe90de,
22358 +
            0x280140010b886979,
22359 +
            0x464c7e583ee987f1,
22360 +
            0xf49b3cb3614bb469,
22361 +
            0x9ad602ea542a5ae1,
22362 +
            0xd3c5588e77e5e5ca,
22363 +
            0xbd8866d742840b42,
22364 +
            0x0f5f243c1d2638da,
22365 +
            0x61121a652847d652,
22366 +
            0x9d7990f45ab9468c,
22367 +
            0xf334aead6fd8a804,
22368 +
            0x41e3ec46307a9b9c,
22369 +
            0x2faed21f051b7514,
22370 +
            0x66bd887b26d4ca3f,
22371 +
            0x08f0b62213b524b7,
22372 +
            0xba27f4c94c17172f,
22373 +
            0xd46aca907976f9a7,
22374 +
            0x500280021710d2f2,
22375 +
            0x3e4fbe5b22713c7a,
22376 +
            0x8c98fcb07dd30fe2,
22377 +
            0xe2d5c2e948b2e16a,
22378 +
            0xabc6988d6b7d5e41,
22379 +
            0xc58ba6d45e1cb0c9,
22380 +
            0x775ce43f01be8351,
22381 +
            0x1911da6634df6dd9,
22382 +
            0xe57a50f74621fd07,
22383 +
            0x8b376eae7340138f,
22384 +
            0x39e02c452ce22017,
22385 +
            0x57ad121c1983ce9f,
22386 +
            0x1ebe48783a4c71b4,
22387 +
            0x70f376210f2d9f3c,
22388 +
            0xc22434ca508faca4,
22389 +
            0xac690a9365ee422c,
22390 +
            0x7803c0031c98bb8b,
22391 +
            0x164efe5a29f95503,
22392 +
            0xa499bcb1765b669b,
22393 +
            0xcad482e8433a8813,
22394 +
            0x83c7d88c60f53738,
22395 +
            0xed8ae6d55594d9b0,
22396 +
            0x5f5da43e0a36ea28,
22397 +
            0x31109a673f5704a0,
22398 +
            0xcd7b10f64da9947e,
22399 +
            0xa3362eaf78c87af6,
22400 +
            0x11e16c44276a496e,
22401 +
            0x7fac521d120ba7e6,
22402 +
            0x36bf087931c418cd,
22403 +
            0x58f2362004a5f645,
22404 +
            0xea2574cb5b07c5dd,
22405 +
            0x84684a926e662b55,
22406 +
            0xa00500042e21a5e4,
22407 +
            0xce483e5d1b404b6c,
22408 +
            0x7c9f7cb644e278f4,
22409 +
            0x12d242ef7183967c,
22410 +
            0x5bc1188b524c2957,
22411 +
            0x358c26d2672dc7df,
22412 +
            0x875b6439388ff447,
22413 +
            0xe9165a600dee1acf,
22414 +
            0x157dd0f17f108a11,
22415 +
            0x7b30eea84a716499,
22416 +
            0xc9e7ac4315d35701,
22417 +
            0xa7aa921a20b2b989,
22418 +
            0xeeb9c87e037d06a2,
22419 +
            0x80f4f627361ce82a,
22420 +
            0x3223b4cc69bedbb2,
22421 +
            0x5c6e8a955cdf353a,
22422 +
            0x8804400525a9cc9d,
22423 +
            0xe6497e5c10c82215,
22424 +
            0x549e3cb74f6a118d,
22425 +
            0x3ad302ee7a0bff05,
22426 +
            0x73c0588a59c4402e,
22427 +
            0x1d8d66d36ca5aea6,
22428 +
            0xaf5a243833079d3e,
22429 +
            0xc1171a61066673b6,
22430 +
            0x3d7c90f07498e368,
22431 +
            0x5331aea941f90de0,
22432 +
            0xe1e6ec421e5b3e78,
22433 +
            0x8fabd21b2b3ad0f0,
22434 +
            0xc6b8887f08f56fdb,
22435 +
            0xa8f5b6263d948153,
22436 +
            0x1a22f4cd6236b2cb,
22437 +
            0x746fca9457575c43,
22438 +
            0xf007800639317716,
22439 +
            0x9e4abe5f0c50999e,
22440 +
            0x2c9dfcb453f2aa06,
22441 +
            0x42d0c2ed6693448e,
22442 +
            0x0bc39889455cfba5,
22443 +
            0x658ea6d0703d152d,
22444 +
            0xd759e43b2f9f26b5,
22445 +
            0xb914da621afec83d,
22446 +
            0x457f50f3680058e3,
22447 +
            0x2b326eaa5d61b66b,
22448 +
            0x99e52c4102c385f3,
22449 +
            0xf7a8121837a26b7b,
22450 +
            0xbebb487c146dd450,
22451 +
            0xd0f67625210c3ad8,
22452 +
            0x622134ce7eae0940,
22453 +
            0x0c6c0a974bcfe7c8,
22454 +
            0xd806c00732b91e6f,
22455 +
            0xb64bfe5e07d8f0e7,
22456 +
            0x049cbcb5587ac37f,
22457 +
            0x6ad182ec6d1b2df7,
22458 +
            0x23c2d8884ed492dc,
22459 +
            0x4d8fe6d17bb57c54,
22460 +
            0xff58a43a24174fcc,
22461 +
            0x91159a631176a144,
22462 +
            0x6d7e10f26388319a,
22463 +
            0x03332eab56e9df12,
22464 +
            0xb1e46c40094bec8a,
22465 +
            0xdfa952193c2a0202,
22466 +
            0x96ba087d1fe5bd29,
22467 +
            0xf8f736242a8453a1,
22468 +
            0x4a2074cf75266039,
22469 +
            0x246d4a9640478eb1,
22470 +
            0x02fae1e3f5a97d5b,
22471 +
            0x6cb7dfbac0c893d3,
22472 +
            0xde609d519f6aa04b,
22473 +
            0xb02da308aa0b4ec3,
22474 +
            0xf93ef96c89c4f1e8,
22475 +
            0x9773c735bca51f60,
22476 +
            0x25a485dee3072cf8,
22477 +
            0x4be9bb87d666c270,
22478 +
            0xb7823116a49852ae,
22479 +
            0xd9cf0f4f91f9bc26,
22480 +
            0x6b184da4ce5b8fbe,
22481 +
            0x055573fdfb3a6136,
22482 +
            0x4c462999d8f5de1d,
22483 +
            0x220b17c0ed943095,
22484 +
            0x90dc552bb236030d,
22485 +
            0xfe916b728757ed85,
22486 +
            0x2afba1e2fe211422,
22487 +
            0x44b69fbbcb40faaa,
22488 +
            0xf661dd5094e2c932,
22489 +
            0x982ce309a18327ba,
22490 +
            0xd13fb96d824c9891,
22491 +
            0xbf728734b72d7619,
22492 +
            0x0da5c5dfe88f4581,
22493 +
            0x63e8fb86ddeeab09,
22494 +
            0x9f837117af103bd7,
22495 +
            0xf1ce4f4e9a71d55f,
22496 +
            0x43190da5c5d3e6c7,
22497 +
            0x2d5433fcf0b2084f,
22498 +
            0x64476998d37db764,
22499 +
            0x0a0a57c1e61c59ec,
22500 +
            0xb8dd152ab9be6a74,
22501 +
            0xd6902b738cdf84fc,
22502 +
            0x52f861e1e2b9afa9,
22503 +
            0x3cb55fb8d7d84121,
22504 +
            0x8e621d53887a72b9,
22505 +
            0xe02f230abd1b9c31,
22506 +
            0xa93c796e9ed4231a,
22507 +
            0xc7714737abb5cd92,
22508 +
            0x75a605dcf417fe0a,
22509 +
            0x1beb3b85c1761082,
22510 +
            0xe780b114b388805c,
22511 +
            0x89cd8f4d86e96ed4,
22512 +
            0x3b1acda6d94b5d4c,
22513 +
            0x5557f3ffec2ab3c4,
22514 +
            0x1c44a99bcfe50cef,
22515 +
            0x720997c2fa84e267,
22516 +
            0xc0ded529a526d1ff,
22517 +
            0xae93eb7090473f77,
22518 +
            0x7af921e0e931c6d0,
22519 +
            0x14b41fb9dc502858,
22520 +
            0xa6635d5283f21bc0,
22521 +
            0xc82e630bb693f548,
22522 +
            0x813d396f955c4a63,
22523 +
            0xef700736a03da4eb,
22524 +
            0x5da745ddff9f9773,
22525 +
            0x33ea7b84cafe79fb,
22526 +
            0xcf81f115b800e925,
22527 +
            0xa1cccf4c8d6107ad,
22528 +
            0x131b8da7d2c33435,
22529 +
            0x7d56b3fee7a2dabd,
22530 +
            0x3445e99ac46d6596,
22531 +
            0x5a08d7c3f10c8b1e,
22532 +
            0xe8df9528aeaeb886,
22533 +
            0x8692ab719bcf560e,
22534 +
            0xa2ffe1e7db88d8bf,
22535 +
            0xccb2dfbeeee93637,
22536 +
            0x7e659d55b14b05af,
22537 +
            0x1028a30c842aeb27,
22538 +
            0x593bf968a7e5540c,
22539 +
            0x3776c7319284ba84,
22540 +
            0x85a185dacd26891c,
22541 +
            0xebecbb83f8476794,
22542 +
            0x178731128ab9f74a,
22543 +
            0x79ca0f4bbfd819c2,
22544 +
            0xcb1d4da0e07a2a5a,
22545 +
            0xa55073f9d51bc4d2,
22546 +
            0xec43299df6d47bf9,
22547 +
            0x820e17c4c3b59571,
22548 +
            0x30d9552f9c17a6e9,
22549 +
            0x5e946b76a9764861,
22550 +
            0x8afea1e6d000b1c6,
22551 +
            0xe4b39fbfe5615f4e,
22552 +
            0x5664dd54bac36cd6,
22553 +
            0x3829e30d8fa2825e,
22554 +
            0x713ab969ac6d3d75,
22555 +
            0x1f778730990cd3fd,
22556 +
            0xada0c5dbc6aee065,
22557 +
            0xc3edfb82f3cf0eed,
22558 +
            0x3f86711381319e33,
22559 +
            0x51cb4f4ab45070bb,
22560 +
            0xe31c0da1ebf24323,
22561 +
            0x8d5133f8de93adab,
22562 +
            0xc442699cfd5c1280,
22563 +
            0xaa0f57c5c83dfc08,
22564 +
            0x18d8152e979fcf90,
22565 +
            0x76952b77a2fe2118,
22566 +
            0xf2fd61e5cc980a4d,
22567 +
            0x9cb05fbcf9f9e4c5,
22568 +
            0x2e671d57a65bd75d,
22569 +
            0x402a230e933a39d5,
22570 +
            0x0939796ab0f586fe,
22571 +
            0x6774473385946876,
22572 +
            0xd5a305d8da365bee,
22573 +
            0xbbee3b81ef57b566,
22574 +
            0x4785b1109da925b8,
22575 +
            0x29c88f49a8c8cb30,
22576 +
            0x9b1fcda2f76af8a8,
22577 +
            0xf552f3fbc20b1620,
22578 +
            0xbc41a99fe1c4a90b,
22579 +
            0xd20c97c6d4a54783,
22580 +
            0x60dbd52d8b07741b,
22581 +
            0x0e96eb74be669a93,
22582 +
            0xdafc21e4c7106334,
22583 +
            0xb4b11fbdf2718dbc,
22584 +
            0x06665d56add3be24,
22585 +
            0x682b630f98b250ac,
22586 +
            0x2138396bbb7def87,
22587 +
            0x4f7507328e1c010f,
22588 +
            0xfda245d9d1be3297,
22589 +
            0x93ef7b80e4dfdc1f,
22590 +
            0x6f84f11196214cc1,
22591 +
            0x01c9cf48a340a249,
22592 +
            0xb31e8da3fce291d1,
22593 +
            0xdd53b3fac9837f59,
22594 +
            0x9440e99eea4cc072,
22595 +
            0xfa0dd7c7df2d2efa,
22596 +
            0x48da952c808f1d62,
22597 +
            0x2697ab75b5eef3ea,
22598 +
        ],
22599 +
        [
22600 +
            0x0000000000000000,
22601 +
            0x05f5c3c7eb52fab6,
22602 +
            0x0beb878fd6a5f56c,
22603 +
            0x0e1e44483df70fda,
22604 +
            0x17d70f1fad4bead8,
22605 +
            0x1222ccd84619106e,
22606 +
            0x1c3c88907bee1fb4,
22607 +
            0x19c94b5790bce502,
22608 +
            0x2fae1e3f5a97d5b0,
22609 +
            0x2a5bddf8b1c52f06,
22610 +
            0x244599b08c3220dc,
22611 +
            0x21b05a776760da6a,
22612 +
            0x38791120f7dc3f68,
22613 +
            0x3d8cd2e71c8ec5de,
22614 +
            0x339296af2179ca04,
22615 +
            0x36675568ca2b30b2,
22616 +
            0x5f5c3c7eb52fab60,
22617 +
            0x5aa9ffb95e7d51d6,
22618 +
            0x54b7bbf1638a5e0c,
22619 +
            0x5142783688d8a4ba,
22620 +
            0x488b3361186441b8,
22621 +
            0x4d7ef0a6f336bb0e,
22622 +
            0x4360b4eecec1b4d4,
22623 +
            0x4695772925934e62,
22624 +
            0x70f22241efb87ed0,
22625 +
            0x7507e18604ea8466,
22626 +
            0x7b19a5ce391d8bbc,
22627 +
            0x7eec6609d24f710a,
22628 +
            0x67252d5e42f39408,
22629 +
            0x62d0ee99a9a16ebe,
22630 +
            0x6cceaad194566164,
22631 +
            0x693b69167f049bd2,
22632 +
            0xbeb878fd6a5f56c0,
22633 +
            0xbb4dbb3a810dac76,
22634 +
            0xb553ff72bcfaa3ac,
22635 +
            0xb0a63cb557a8591a,
22636 +
            0xa96f77e2c714bc18,
22637 +
            0xac9ab4252c4646ae,
22638 +
            0xa284f06d11b14974,
22639 +
            0xa77133aafae3b3c2,
22640 +
            0x911666c230c88370,
22641 +
            0x94e3a505db9a79c6,
22642 +
            0x9afde14de66d761c,
22643 +
            0x9f08228a0d3f8caa,
22644 +
            0x86c169dd9d8369a8,
22645 +
            0x8334aa1a76d1931e,
22646 +
            0x8d2aee524b269cc4,
22647 +
            0x88df2d95a0746672,
22648 +
            0xe1e44483df70fda0,
22649 +
            0xe411874434220716,
22650 +
            0xea0fc30c09d508cc,
22651 +
            0xeffa00cbe287f27a,
22652 +
            0xf6334b9c723b1778,
22653 +
            0xf3c6885b9969edce,
22654 +
            0xfdd8cc13a49ee214,
22655 +
            0xf82d0fd44fcc18a2,
22656 +
            0xce4a5abc85e72810,
22657 +
            0xcbbf997b6eb5d2a6,
22658 +
            0xc5a1dd335342dd7c,
22659 +
            0xc0541ef4b81027ca,
22660 +
            0xd99d55a328acc2c8,
22661 +
            0xdc689664c3fe387e,
22662 +
            0xd276d22cfe0937a4,
22663 +
            0xd78311eb155bcd12,
22664 +
            0x3f8010117d549b13,
22665 +
            0x3a75d3d6960661a5,
22666 +
            0x346b979eabf16e7f,
22667 +
            0x319e545940a394c9,
22668 +
            0x28571f0ed01f71cb,
22669 +
            0x2da2dcc93b4d8b7d,
22670 +
            0x23bc988106ba84a7,
22671 +
            0x26495b46ede87e11,
22672 +
            0x102e0e2e27c34ea3,
22673 +
            0x15dbcde9cc91b415,
22674 +
            0x1bc589a1f166bbcf,
22675 +
            0x1e304a661a344179,
22676 +
            0x07f901318a88a47b,
22677 +
            0x020cc2f661da5ecd,
22678 +
            0x0c1286be5c2d5117,
22679 +
            0x09e74579b77faba1,
22680 +
            0x60dc2c6fc87b3073,
22681 +
            0x6529efa82329cac5,
22682 +
            0x6b37abe01edec51f,
22683 +
            0x6ec26827f58c3fa9,
22684 +
            0x770b23706530daab,
22685 +
            0x72fee0b78e62201d,
22686 +
            0x7ce0a4ffb3952fc7,
22687 +
            0x7915673858c7d571,
22688 +
            0x4f72325092ece5c3,
22689 +
            0x4a87f19779be1f75,
22690 +
            0x4499b5df444910af,
22691 +
            0x416c7618af1bea19,
22692 +
            0x58a53d4f3fa70f1b,
22693 +
            0x5d50fe88d4f5f5ad,
22694 +
            0x534ebac0e902fa77,
22695 +
            0x56bb7907025000c1,
22696 +
            0x813868ec170bcdd3,
22697 +
            0x84cdab2bfc593765,
22698 +
            0x8ad3ef63c1ae38bf,
22699 +
            0x8f262ca42afcc209,
22700 +
            0x96ef67f3ba40270b,
22701 +
            0x931aa4345112ddbd,
22702 +
            0x9d04e07c6ce5d267,
22703 +
            0x98f123bb87b728d1,
22704 +
            0xae9676d34d9c1863,
22705 +
            0xab63b514a6cee2d5,
22706 +
            0xa57df15c9b39ed0f,
22707 +
            0xa088329b706b17b9,
22708 +
            0xb94179cce0d7f2bb,
22709 +
            0xbcb4ba0b0b85080d,
22710 +
            0xb2aafe43367207d7,
22711 +
            0xb75f3d84dd20fd61,
22712 +
            0xde645492a22466b3,
22713 +
            0xdb91975549769c05,
22714 +
            0xd58fd31d748193df,
22715 +
            0xd07a10da9fd36969,
22716 +
            0xc9b35b8d0f6f8c6b,
22717 +
            0xcc46984ae43d76dd,
22718 +
            0xc258dc02d9ca7907,
22719 +
            0xc7ad1fc5329883b1,
22720 +
            0xf1ca4aadf8b3b303,
22721 +
            0xf43f896a13e149b5,
22722 +
            0xfa21cd222e16466f,
22723 +
            0xffd40ee5c544bcd9,
22724 +
            0xe61d45b255f859db,
22725 +
            0xe3e88675beaaa36d,
22726 +
            0xedf6c23d835dacb7,
22727 +
            0xe80301fa680f5601,
22728 +
            0x7f002022faa93626,
22729 +
            0x7af5e3e511fbcc90,
22730 +
            0x74eba7ad2c0cc34a,
22731 +
            0x711e646ac75e39fc,
22732 +
            0x68d72f3d57e2dcfe,
22733 +
            0x6d22ecfabcb02648,
22734 +
            0x633ca8b281472992,
22735 +
            0x66c96b756a15d324,
22736 +
            0x50ae3e1da03ee396,
22737 +
            0x555bfdda4b6c1920,
22738 +
            0x5b45b992769b16fa,
22739 +
            0x5eb07a559dc9ec4c,
22740 +
            0x477931020d75094e,
22741 +
            0x428cf2c5e627f3f8,
22742 +
            0x4c92b68ddbd0fc22,
22743 +
            0x4967754a30820694,
22744 +
            0x205c1c5c4f869d46,
22745 +
            0x25a9df9ba4d467f0,
22746 +
            0x2bb79bd39923682a,
22747 +
            0x2e4258147271929c,
22748 +
            0x378b1343e2cd779e,
22749 +
            0x327ed084099f8d28,
22750 +
            0x3c6094cc346882f2,
22751 +
            0x3995570bdf3a7844,
22752 +
            0x0ff20263151148f6,
22753 +
            0x0a07c1a4fe43b240,
22754 +
            0x041985ecc3b4bd9a,
22755 +
            0x01ec462b28e6472c,
22756 +
            0x18250d7cb85aa22e,
22757 +
            0x1dd0cebb53085898,
22758 +
            0x13ce8af36eff5742,
22759 +
            0x163b493485adadf4,
22760 +
            0xc1b858df90f660e6,
22761 +
            0xc44d9b187ba49a50,
22762 +
            0xca53df504653958a,
22763 +
            0xcfa61c97ad016f3c,
22764 +
            0xd66f57c03dbd8a3e,
22765 +
            0xd39a9407d6ef7088,
22766 +
            0xdd84d04feb187f52,
22767 +
            0xd8711388004a85e4,
22768 +
            0xee1646e0ca61b556,
22769 +
            0xebe3852721334fe0,
22770 +
            0xe5fdc16f1cc4403a,
22771 +
            0xe00802a8f796ba8c,
22772 +
            0xf9c149ff672a5f8e,
22773 +
            0xfc348a388c78a538,
22774 +
            0xf22ace70b18faae2,
22775 +
            0xf7df0db75add5054,
22776 +
            0x9ee464a125d9cb86,
22777 +
            0x9b11a766ce8b3130,
22778 +
            0x950fe32ef37c3eea,
22779 +
            0x90fa20e9182ec45c,
22780 +
            0x89336bbe8892215e,
22781 +
            0x8cc6a87963c0dbe8,
22782 +
            0x82d8ec315e37d432,
22783 +
            0x872d2ff6b5652e84,
22784 +
            0xb14a7a9e7f4e1e36,
22785 +
            0xb4bfb959941ce480,
22786 +
            0xbaa1fd11a9ebeb5a,
22787 +
            0xbf543ed642b911ec,
22788 +
            0xa69d7581d205f4ee,
22789 +
            0xa368b64639570e58,
22790 +
            0xad76f20e04a00182,
22791 +
            0xa88331c9eff2fb34,
22792 +
            0x4080303387fdad35,
22793 +
            0x4575f3f46caf5783,
22794 +
            0x4b6bb7bc51585859,
22795 +
            0x4e9e747bba0aa2ef,
22796 +
            0x57573f2c2ab647ed,
22797 +
            0x52a2fcebc1e4bd5b,
22798 +
            0x5cbcb8a3fc13b281,
22799 +
            0x59497b6417414837,
22800 +
            0x6f2e2e0cdd6a7885,
22801 +
            0x6adbedcb36388233,
22802 +
            0x64c5a9830bcf8de9,
22803 +
            0x61306a44e09d775f,
22804 +
            0x78f921137021925d,
22805 +
            0x7d0ce2d49b7368eb,
22806 +
            0x7312a69ca6846731,
22807 +
            0x76e7655b4dd69d87,
22808 +
            0x1fdc0c4d32d20655,
22809 +
            0x1a29cf8ad980fce3,
22810 +
            0x14378bc2e477f339,
22811 +
            0x11c248050f25098f,
22812 +
            0x080b03529f99ec8d,
22813 +
            0x0dfec09574cb163b,
22814 +
            0x03e084dd493c19e1,
22815 +
            0x0615471aa26ee357,
22816 +
            0x307212726845d3e5,
22817 +
            0x3587d1b583172953,
22818 +
            0x3b9995fdbee02689,
22819 +
            0x3e6c563a55b2dc3f,
22820 +
            0x27a51d6dc50e393d,
22821 +
            0x2250deaa2e5cc38b,
22822 +
            0x2c4e9ae213abcc51,
22823 +
            0x29bb5925f8f936e7,
22824 +
            0xfe3848ceeda2fbf5,
22825 +
            0xfbcd8b0906f00143,
22826 +
            0xf5d3cf413b070e99,
22827 +
            0xf0260c86d055f42f,
22828 +
            0xe9ef47d140e9112d,
22829 +
            0xec1a8416abbbeb9b,
22830 +
            0xe204c05e964ce441,
22831 +
            0xe7f103997d1e1ef7,
22832 +
            0xd19656f1b7352e45,
22833 +
            0xd46395365c67d4f3,
22834 +
            0xda7dd17e6190db29,
22835 +
            0xdf8812b98ac2219f,
22836 +
            0xc64159ee1a7ec49d,
22837 +
            0xc3b49a29f12c3e2b,
22838 +
            0xcdaade61ccdb31f1,
22839 +
            0xc85f1da62789cb47,
22840 +
            0xa16474b0588d5095,
22841 +
            0xa491b777b3dfaa23,
22842 +
            0xaa8ff33f8e28a5f9,
22843 +
            0xaf7a30f8657a5f4f,
22844 +
            0xb6b37baff5c6ba4d,
22845 +
            0xb346b8681e9440fb,
22846 +
            0xbd58fc2023634f21,
22847 +
            0xb8ad3fe7c831b597,
22848 +
            0x8eca6a8f021a8525,
22849 +
            0x8b3fa948e9487f93,
22850 +
            0x8521ed00d4bf7049,
22851 +
            0x80d42ec73fed8aff,
22852 +
            0x991d6590af516ffd,
22853 +
            0x9ce8a6574403954b,
22854 +
            0x92f6e21f79f49a91,
22855 +
            0x970321d892a66027,
22856 +
        ],
22857 +
        [
22858 +
            0x0000000000000000,
22859 +
            0xfe004045f5526c4c,
22860 +
            0xbef06160434eee0b,
22861 +
            0x40f02125b61c8247,
22862 +
            0x3f10232b2f77ea85,
22863 +
            0xc110636eda2586c9,
22864 +
            0x81e0424b6c39048e,
22865 +
            0x7fe0020e996b68c2,
22866 +
            0x7e2046565eefd50a,
22867 +
            0x80200613abbdb946,
22868 +
            0xc0d027361da13b01,
22869 +
            0x3ed06773e8f3574d,
22870 +
            0x4130657d71983f8f,
22871 +
            0xbf30253884ca53c3,
22872 +
            0xffc0041d32d6d184,
22873 +
            0x01c04458c784bdc8,
22874 +
            0xfc408cacbddfaa14,
22875 +
            0x0240cce9488dc658,
22876 +
            0x42b0edccfe91441f,
22877 +
            0xbcb0ad890bc32853,
22878 +
            0xc350af8792a84091,
22879 +
            0x3d50efc267fa2cdd,
22880 +
            0x7da0cee7d1e6ae9a,
22881 +
            0x83a08ea224b4c2d6,
22882 +
            0x8260cafae3307f1e,
22883 +
            0x7c608abf16621352,
22884 +
            0x3c90ab9aa07e9115,
22885 +
            0xc290ebdf552cfd59,
22886 +
            0xbd70e9d1cc47959b,
22887 +
            0x4370a9943915f9d7,
22888 +
            0x038088b18f097b90,
22889 +
            0xfd80c8f47a5b17dc,
22890 +
            0xba71f8b2d25562bb,
22891 +
            0x4471b8f727070ef7,
22892 +
            0x048199d2911b8cb0,
22893 +
            0xfa81d9976449e0fc,
22894 +
            0x8561db99fd22883e,
22895 +
            0x7b619bdc0870e472,
22896 +
            0x3b91baf9be6c6635,
22897 +
            0xc591fabc4b3e0a79,
22898 +
            0xc451bee48cbab7b1,
22899 +
            0x3a51fea179e8dbfd,
22900 +
            0x7aa1df84cff459ba,
22901 +
            0x84a19fc13aa635f6,
22902 +
            0xfb419dcfa3cd5d34,
22903 +
            0x0541dd8a569f3178,
22904 +
            0x45b1fcafe083b33f,
22905 +
            0xbbb1bcea15d1df73,
22906 +
            0x4631741e6f8ac8af,
22907 +
            0xb831345b9ad8a4e3,
22908 +
            0xf8c1157e2cc426a4,
22909 +
            0x06c1553bd9964ae8,
22910 +
            0x7921573540fd222a,
22911 +
            0x87211770b5af4e66,
22912 +
            0xc7d1365503b3cc21,
22913 +
            0x39d17610f6e1a06d,
22914 +
            0x3811324831651da5,
22915 +
            0xc611720dc43771e9,
22916 +
            0x86e15328722bf3ae,
22917 +
            0x78e1136d87799fe2,
22918 +
            0x070111631e12f720,
22919 +
            0xf9015126eb409b6c,
22920 +
            0xb9f170035d5c192b,
22921 +
            0x47f13046a80e7567,
22922 +
            0x3613108e0d40f3e5,
22923 +
            0xc81350cbf8129fa9,
22924 +
            0x88e371ee4e0e1dee,
22925 +
            0x76e331abbb5c71a2,
22926 +
            0x090333a522371960,
22927 +
            0xf70373e0d765752c,
22928 +
            0xb7f352c56179f76b,
22929 +
            0x49f31280942b9b27,
22930 +
            0x483356d853af26ef,
22931 +
            0xb633169da6fd4aa3,
22932 +
            0xf6c337b810e1c8e4,
22933 +
            0x08c377fde5b3a4a8,
22934 +
            0x772375f37cd8cc6a,
22935 +
            0x892335b6898aa026,
22936 +
            0xc9d314933f962261,
22937 +
            0x37d354d6cac44e2d,
22938 +
            0xca539c22b09f59f1,
22939 +
            0x3453dc6745cd35bd,
22940 +
            0x74a3fd42f3d1b7fa,
22941 +
            0x8aa3bd070683dbb6,
22942 +
            0xf543bf099fe8b374,
22943 +
            0x0b43ff4c6abadf38,
22944 +
            0x4bb3de69dca65d7f,
22945 +
            0xb5b39e2c29f43133,
22946 +
            0xb473da74ee708cfb,
22947 +
            0x4a739a311b22e0b7,
22948 +
            0x0a83bb14ad3e62f0,
22949 +
            0xf483fb51586c0ebc,
22950 +
            0x8b63f95fc107667e,
22951 +
            0x7563b91a34550a32,
22952 +
            0x3593983f82498875,
22953 +
            0xcb93d87a771be439,
22954 +
            0x8c62e83cdf15915e,
22955 +
            0x7262a8792a47fd12,
22956 +
            0x3292895c9c5b7f55,
22957 +
            0xcc92c91969091319,
22958 +
            0xb372cb17f0627bdb,
22959 +
            0x4d728b5205301797,
22960 +
            0x0d82aa77b32c95d0,
22961 +
            0xf382ea32467ef99c,
22962 +
            0xf242ae6a81fa4454,
22963 +
            0x0c42ee2f74a82818,
22964 +
            0x4cb2cf0ac2b4aa5f,
22965 +
            0xb2b28f4f37e6c613,
22966 +
            0xcd528d41ae8daed1,
22967 +
            0x3352cd045bdfc29d,
22968 +
            0x73a2ec21edc340da,
22969 +
            0x8da2ac6418912c96,
22970 +
            0x7022649062ca3b4a,
22971 +
            0x8e2224d597985706,
22972 +
            0xced205f02184d541,
22973 +
            0x30d245b5d4d6b90d,
22974 +
            0x4f3247bb4dbdd1cf,
22975 +
            0xb13207feb8efbd83,
22976 +
            0xf1c226db0ef33fc4,
22977 +
            0x0fc2669efba15388,
22978 +
            0x0e0222c63c25ee40,
22979 +
            0xf0026283c977820c,
22980 +
            0xb0f243a67f6b004b,
22981 +
            0x4ef203e38a396c07,
22982 +
            0x311201ed135204c5,
22983 +
            0xcf1241a8e6006889,
22984 +
            0x8fe2608d501ceace,
22985 +
            0x71e220c8a54e8682,
22986 +
            0x6c26211c1a81e7ca,
22987 +
            0x92266159efd38b86,
22988 +
            0xd2d6407c59cf09c1,
22989 +
            0x2cd60039ac9d658d,
22990 +
            0x5336023735f60d4f,
22991 +
            0xad364272c0a46103,
22992 +
            0xedc6635776b8e344,
22993 +
            0x13c6231283ea8f08,
22994 +
            0x1206674a446e32c0,
22995 +
            0xec06270fb13c5e8c,
22996 +
            0xacf6062a0720dccb,
22997 +
            0x52f6466ff272b087,
22998 +
            0x2d1644616b19d845,
22999 +
            0xd31604249e4bb409,
23000 +
            0x93e625012857364e,
23001 +
            0x6de66544dd055a02,
23002 +
            0x9066adb0a75e4dde,
23003 +
            0x6e66edf5520c2192,
23004 +
            0x2e96ccd0e410a3d5,
23005 +
            0xd0968c951142cf99,
23006 +
            0xaf768e9b8829a75b,
23007 +
            0x5176cede7d7bcb17,
23008 +
            0x1186effbcb674950,
23009 +
            0xef86afbe3e35251c,
23010 +
            0xee46ebe6f9b198d4,
23011 +
            0x1046aba30ce3f498,
23012 +
            0x50b68a86baff76df,
23013 +
            0xaeb6cac34fad1a93,
23014 +
            0xd156c8cdd6c67251,
23015 +
            0x2f56888823941e1d,
23016 +
            0x6fa6a9ad95889c5a,
23017 +
            0x91a6e9e860daf016,
23018 +
            0xd657d9aec8d48571,
23019 +
            0x285799eb3d86e93d,
23020 +
            0x68a7b8ce8b9a6b7a,
23021 +
            0x96a7f88b7ec80736,
23022 +
            0xe947fa85e7a36ff4,
23023 +
            0x1747bac012f103b8,
23024 +
            0x57b79be5a4ed81ff,
23025 +
            0xa9b7dba051bfedb3,
23026 +
            0xa8779ff8963b507b,
23027 +
            0x5677dfbd63693c37,
23028 +
            0x1687fe98d575be70,
23029 +
            0xe887bedd2027d23c,
23030 +
            0x9767bcd3b94cbafe,
23031 +
            0x6967fc964c1ed6b2,
23032 +
            0x2997ddb3fa0254f5,
23033 +
            0xd7979df60f5038b9,
23034 +
            0x2a175502750b2f65,
23035 +
            0xd417154780594329,
23036 +
            0x94e734623645c16e,
23037 +
            0x6ae77427c317ad22,
23038 +
            0x150776295a7cc5e0,
23039 +
            0xeb07366caf2ea9ac,
23040 +
            0xabf7174919322beb,
23041 +
            0x55f7570cec6047a7,
23042 +
            0x543713542be4fa6f,
23043 +
            0xaa375311deb69623,
23044 +
            0xeac7723468aa1464,
23045 +
            0x14c732719df87828,
23046 +
            0x6b27307f049310ea,
23047 +
            0x9527703af1c17ca6,
23048 +
            0xd5d7511f47ddfee1,
23049 +
            0x2bd7115ab28f92ad,
23050 +
            0x5a35319217c1142f,
23051 +
            0xa43571d7e2937863,
23052 +
            0xe4c550f2548ffa24,
23053 +
            0x1ac510b7a1dd9668,
23054 +
            0x652512b938b6feaa,
23055 +
            0x9b2552fccde492e6,
23056 +
            0xdbd573d97bf810a1,
23057 +
            0x25d5339c8eaa7ced,
23058 +
            0x241577c4492ec125,
23059 +
            0xda153781bc7cad69,
23060 +
            0x9ae516a40a602f2e,
23061 +
            0x64e556e1ff324362,
23062 +
            0x1b0554ef66592ba0,
23063 +
            0xe50514aa930b47ec,
23064 +
            0xa5f5358f2517c5ab,
23065 +
            0x5bf575cad045a9e7,
23066 +
            0xa675bd3eaa1ebe3b,
23067 +
            0x5875fd7b5f4cd277,
23068 +
            0x1885dc5ee9505030,
23069 +
            0xe6859c1b1c023c7c,
23070 +
            0x99659e15856954be,
23071 +
            0x6765de50703b38f2,
23072 +
            0x2795ff75c627bab5,
23073 +
            0xd995bf303375d6f9,
23074 +
            0xd855fb68f4f16b31,
23075 +
            0x2655bb2d01a3077d,
23076 +
            0x66a59a08b7bf853a,
23077 +
            0x98a5da4d42ede976,
23078 +
            0xe745d843db8681b4,
23079 +
            0x194598062ed4edf8,
23080 +
            0x59b5b92398c86fbf,
23081 +
            0xa7b5f9666d9a03f3,
23082 +
            0xe044c920c5947694,
23083 +
            0x1e44896530c61ad8,
23084 +
            0x5eb4a84086da989f,
23085 +
            0xa0b4e8057388f4d3,
23086 +
            0xdf54ea0beae39c11,
23087 +
            0x2154aa4e1fb1f05d,
23088 +
            0x61a48b6ba9ad721a,
23089 +
            0x9fa4cb2e5cff1e56,
23090 +
            0x9e648f769b7ba39e,
23091 +
            0x6064cf336e29cfd2,
23092 +
            0x2094ee16d8354d95,
23093 +
            0xde94ae532d6721d9,
23094 +
            0xa174ac5db40c491b,
23095 +
            0x5f74ec18415e2557,
23096 +
            0x1f84cd3df742a710,
23097 +
            0xe1848d780210cb5c,
23098 +
            0x1c04458c784bdc80,
23099 +
            0xe20405c98d19b0cc,
23100 +
            0xa2f424ec3b05328b,
23101 +
            0x5cf464a9ce575ec7,
23102 +
            0x231466a7573c3605,
23103 +
            0xdd1426e2a26e5a49,
23104 +
            0x9de407c71472d80e,
23105 +
            0x63e44782e120b442,
23106 +
            0x622403da26a4098a,
23107 +
            0x9c24439fd3f665c6,
23108 +
            0xdcd462ba65eae781,
23109 +
            0x22d422ff90b88bcd,
23110 +
            0x5d3420f109d3e30f,
23111 +
            0xa33460b4fc818f43,
23112 +
            0xe3c441914a9d0d04,
23113 +
            0x1dc401d4bfcf6148,
23114 +
        ],
23115 +
        [
23116 +
            0x0000000000000000,
23117 +
            0xd84c42383503cf94,
23118 +
            0xf268659bc3eda9bb,
23119 +
            0x2a2427a3f6ee662f,
23120 +
            0xa6202adc2e3165e5,
23121 +
            0x7e6c68e41b32aa71,
23122 +
            0x54484f47eddccc5e,
23123 +
            0x8c040d7fd8df03ca,
23124 +
            0x0eb0b453f588fd59,
23125 +
            0xd6fcf66bc08b32cd,
23126 +
            0xfcd8d1c8366554e2,
23127 +
            0x249493f003669b76,
23128 +
            0xa8909e8fdbb998bc,
23129 +
            0x70dcdcb7eeba5728,
23130 +
            0x5af8fb1418543107,
23131 +
            0x82b4b92c2d57fe93,
23132 +
            0x1d6168a7eb11fab2,
23133 +
            0xc52d2a9fde123526,
23134 +
            0xef090d3c28fc5309,
23135 +
            0x37454f041dff9c9d,
23136 +
            0xbb41427bc5209f57,
23137 +
            0x630d0043f02350c3,
23138 +
            0x492927e006cd36ec,
23139 +
            0x916565d833cef978,
23140 +
            0x13d1dcf41e9907eb,
23141 +
            0xcb9d9ecc2b9ac87f,
23142 +
            0xe1b9b96fdd74ae50,
23143 +
            0x39f5fb57e87761c4,
23144 +
            0xb5f1f62830a8620e,
23145 +
            0x6dbdb41005abad9a,
23146 +
            0x479993b3f345cbb5,
23147 +
            0x9fd5d18bc6460421,
23148 +
            0x3ac2d14fd623f564,
23149 +
            0xe28e9377e3203af0,
23150 +
            0xc8aab4d415ce5cdf,
23151 +
            0x10e6f6ec20cd934b,
23152 +
            0x9ce2fb93f8129081,
23153 +
            0x44aeb9abcd115f15,
23154 +
            0x6e8a9e083bff393a,
23155 +
            0xb6c6dc300efcf6ae,
23156 +
            0x3472651c23ab083d,
23157 +
            0xec3e272416a8c7a9,
23158 +
            0xc61a0087e046a186,
23159 +
            0x1e5642bfd5456e12,
23160 +
            0x92524fc00d9a6dd8,
23161 +
            0x4a1e0df83899a24c,
23162 +
            0x603a2a5bce77c463,
23163 +
            0xb8766863fb740bf7,
23164 +
            0x27a3b9e83d320fd6,
23165 +
            0xffeffbd00831c042,
23166 +
            0xd5cbdc73fedfa66d,
23167 +
            0x0d879e4bcbdc69f9,
23168 +
            0x8183933413036a33,
23169 +
            0x59cfd10c2600a5a7,
23170 +
            0x73ebf6afd0eec388,
23171 +
            0xaba7b497e5ed0c1c,
23172 +
            0x29130dbbc8baf28f,
23173 +
            0xf15f4f83fdb93d1b,
23174 +
            0xdb7b68200b575b34,
23175 +
            0x03372a183e5494a0,
23176 +
            0x8f332767e68b976a,
23177 +
            0x577f655fd38858fe,
23178 +
            0x7d5b42fc25663ed1,
23179 +
            0xa51700c41065f145,
23180 +
            0x7585a29fac47eac8,
23181 +
            0xadc9e0a79944255c,
23182 +
            0x87edc7046faa4373,
23183 +
            0x5fa1853c5aa98ce7,
23184 +
            0xd3a5884382768f2d,
23185 +
            0x0be9ca7bb77540b9,
23186 +
            0x21cdedd8419b2696,
23187 +
            0xf981afe07498e902,
23188 +
            0x7b3516cc59cf1791,
23189 +
            0xa37954f46cccd805,
23190 +
            0x895d73579a22be2a,
23191 +
            0x5111316faf2171be,
23192 +
            0xdd153c1077fe7274,
23193 +
            0x05597e2842fdbde0,
23194 +
            0x2f7d598bb413dbcf,
23195 +
            0xf7311bb38110145b,
23196 +
            0x68e4ca384756107a,
23197 +
            0xb0a888007255dfee,
23198 +
            0x9a8cafa384bbb9c1,
23199 +
            0x42c0ed9bb1b87655,
23200 +
            0xcec4e0e46967759f,
23201 +
            0x1688a2dc5c64ba0b,
23202 +
            0x3cac857faa8adc24,
23203 +
            0xe4e0c7479f8913b0,
23204 +
            0x66547e6bb2deed23,
23205 +
            0xbe183c5387dd22b7,
23206 +
            0x943c1bf071334498,
23207 +
            0x4c7059c844308b0c,
23208 +
            0xc07454b79cef88c6,
23209 +
            0x1838168fa9ec4752,
23210 +
            0x321c312c5f02217d,
23211 +
            0xea5073146a01eee9,
23212 +
            0x4f4773d07a641fac,
23213 +
            0x970b31e84f67d038,
23214 +
            0xbd2f164bb989b617,
23215 +
            0x656354738c8a7983,
23216 +
            0xe967590c54557a49,
23217 +
            0x312b1b346156b5dd,
23218 +
            0x1b0f3c9797b8d3f2,
23219 +
            0xc3437eafa2bb1c66,
23220 +
            0x41f7c7838fece2f5,
23221 +
            0x99bb85bbbaef2d61,
23222 +
            0xb39fa2184c014b4e,
23223 +
            0x6bd3e020790284da,
23224 +
            0xe7d7ed5fa1dd8710,
23225 +
            0x3f9baf6794de4884,
23226 +
            0x15bf88c462302eab,
23227 +
            0xcdf3cafc5733e13f,
23228 +
            0x52261b779175e51e,
23229 +
            0x8a6a594fa4762a8a,
23230 +
            0xa04e7eec52984ca5,
23231 +
            0x78023cd4679b8331,
23232 +
            0xf40631abbf4480fb,
23233 +
            0x2c4a73938a474f6f,
23234 +
            0x066e54307ca92940,
23235 +
            0xde22160849aae6d4,
23236 +
            0x5c96af2464fd1847,
23237 +
            0x84daed1c51fed7d3,
23238 +
            0xaefecabfa710b1fc,
23239 +
            0x76b2888792137e68,
23240 +
            0xfab685f84acc7da2,
23241 +
            0x22fac7c07fcfb236,
23242 +
            0x08dee0638921d419,
23243 +
            0xd092a25bbc221b8d,
23244 +
            0xeb0b453f588fd590,
23245 +
            0x334707076d8c1a04,
23246 +
            0x196320a49b627c2b,
23247 +
            0xc12f629cae61b3bf,
23248 +
            0x4d2b6fe376beb075,
23249 +
            0x95672ddb43bd7fe1,
23250 +
            0xbf430a78b55319ce,
23251 +
            0x670f48408050d65a,
23252 +
            0xe5bbf16cad0728c9,
23253 +
            0x3df7b3549804e75d,
23254 +
            0x17d394f76eea8172,
23255 +
            0xcf9fd6cf5be94ee6,
23256 +
            0x439bdbb083364d2c,
23257 +
            0x9bd79988b63582b8,
23258 +
            0xb1f3be2b40dbe497,
23259 +
            0x69bffc1375d82b03,
23260 +
            0xf66a2d98b39e2f22,
23261 +
            0x2e266fa0869de0b6,
23262 +
            0x0402480370738699,
23263 +
            0xdc4e0a3b4570490d,
23264 +
            0x504a07449daf4ac7,
23265 +
            0x8806457ca8ac8553,
23266 +
            0xa22262df5e42e37c,
23267 +
            0x7a6e20e76b412ce8,
23268 +
            0xf8da99cb4616d27b,
23269 +
            0x2096dbf373151def,
23270 +
            0x0ab2fc5085fb7bc0,
23271 +
            0xd2febe68b0f8b454,
23272 +
            0x5efab3176827b79e,
23273 +
            0x86b6f12f5d24780a,
23274 +
            0xac92d68cabca1e25,
23275 +
            0x74de94b49ec9d1b1,
23276 +
            0xd1c994708eac20f4,
23277 +
            0x0985d648bbafef60,
23278 +
            0x23a1f1eb4d41894f,
23279 +
            0xfbedb3d3784246db,
23280 +
            0x77e9beaca09d4511,
23281 +
            0xafa5fc94959e8a85,
23282 +
            0x8581db376370ecaa,
23283 +
            0x5dcd990f5673233e,
23284 +
            0xdf7920237b24ddad,
23285 +
            0x0735621b4e271239,
23286 +
            0x2d1145b8b8c97416,
23287 +
            0xf55d07808dcabb82,
23288 +
            0x79590aff5515b848,
23289 +
            0xa11548c7601677dc,
23290 +
            0x8b316f6496f811f3,
23291 +
            0x537d2d5ca3fbde67,
23292 +
            0xcca8fcd765bdda46,
23293 +
            0x14e4beef50be15d2,
23294 +
            0x3ec0994ca65073fd,
23295 +
            0xe68cdb749353bc69,
23296 +
            0x6a88d60b4b8cbfa3,
23297 +
            0xb2c494337e8f7037,
23298 +
            0x98e0b39088611618,
23299 +
            0x40acf1a8bd62d98c,
23300 +
            0xc21848849035271f,
23301 +
            0x1a540abca536e88b,
23302 +
            0x30702d1f53d88ea4,
23303 +
            0xe83c6f2766db4130,
23304 +
            0x64386258be0442fa,
23305 +
            0xbc7420608b078d6e,
23306 +
            0x965007c37de9eb41,
23307 +
            0x4e1c45fb48ea24d5,
23308 +
            0x9e8ee7a0f4c83f58,
23309 +
            0x46c2a598c1cbf0cc,
23310 +
            0x6ce6823b372596e3,
23311 +
            0xb4aac00302265977,
23312 +
            0x38aecd7cdaf95abd,
23313 +
            0xe0e28f44effa9529,
23314 +
            0xcac6a8e71914f306,
23315 +
            0x128aeadf2c173c92,
23316 +
            0x903e53f30140c201,
23317 +
            0x487211cb34430d95,
23318 +
            0x62563668c2ad6bba,
23319 +
            0xba1a7450f7aea42e,
23320 +
            0x361e792f2f71a7e4,
23321 +
            0xee523b171a726870,
23322 +
            0xc4761cb4ec9c0e5f,
23323 +
            0x1c3a5e8cd99fc1cb,
23324 +
            0x83ef8f071fd9c5ea,
23325 +
            0x5ba3cd3f2ada0a7e,
23326 +
            0x7187ea9cdc346c51,
23327 +
            0xa9cba8a4e937a3c5,
23328 +
            0x25cfa5db31e8a00f,
23329 +
            0xfd83e7e304eb6f9b,
23330 +
            0xd7a7c040f20509b4,
23331 +
            0x0feb8278c706c620,
23332 +
            0x8d5f3b54ea5138b3,
23333 +
            0x5513796cdf52f727,
23334 +
            0x7f375ecf29bc9108,
23335 +
            0xa77b1cf71cbf5e9c,
23336 +
            0x2b7f1188c4605d56,
23337 +
            0xf33353b0f16392c2,
23338 +
            0xd9177413078df4ed,
23339 +
            0x015b362b328e3b79,
23340 +
            0xa44c36ef22ebca3c,
23341 +
            0x7c0074d717e805a8,
23342 +
            0x56245374e1066387,
23343 +
            0x8e68114cd405ac13,
23344 +
            0x026c1c330cdaafd9,
23345 +
            0xda205e0b39d9604d,
23346 +
            0xf00479a8cf370662,
23347 +
            0x28483b90fa34c9f6,
23348 +
            0xaafc82bcd7633765,
23349 +
            0x72b0c084e260f8f1,
23350 +
            0x5894e727148e9ede,
23351 +
            0x80d8a51f218d514a,
23352 +
            0x0cdca860f9525280,
23353 +
            0xd490ea58cc519d14,
23354 +
            0xfeb4cdfb3abffb3b,
23355 +
            0x26f88fc30fbc34af,
23356 +
            0xb92d5e48c9fa308e,
23357 +
            0x61611c70fcf9ff1a,
23358 +
            0x4b453bd30a179935,
23359 +
            0x930979eb3f1456a1,
23360 +
            0x1f0d7494e7cb556b,
23361 +
            0xc74136acd2c89aff,
23362 +
            0xed65110f2426fcd0,
23363 +
            0x3529533711253344,
23364 +
            0xb79dea1b3c72cdd7,
23365 +
            0x6fd1a82309710243,
23366 +
            0x45f58f80ff9f646c,
23367 +
            0x9db9cdb8ca9cabf8,
23368 +
            0x11bdc0c71243a832,
23369 +
            0xc9f182ff274067a6,
23370 +
            0xe3d5a55cd1ae0189,
23371 +
            0x3b99e764e4adce1d,
23372 +
        ],
23373 +
        [
23374 +
            0x0000000000000000,
23375 +
            0x94e66b9518f59db3,
23376 +
            0x6b3c36c198010df5,
23377 +
            0xffda5d5480f49046,
23378 +
            0xd6786d8330021bea,
23379 +
            0x429e061628f78659,
23380 +
            0xbd445b42a803161f,
23381 +
            0x29a230d7b0f68bac,
23382 +
            0xee003aedc9ee0147,
23383 +
            0x7ae65178d11b9cf4,
23384 +
            0x853c0c2c51ef0cb2,
23385 +
            0x11da67b9491a9101,
23386 +
            0x3878576ef9ec1aad,
23387 +
            0xac9e3cfbe119871e,
23388 +
            0x534461af61ed1758,
23389 +
            0xc7a20a3a79188aeb,
23390 +
            0x9ef094303a36341d,
23391 +
            0x0a16ffa522c3a9ae,
23392 +
            0xf5cca2f1a23739e8,
23393 +
            0x612ac964bac2a45b,
23394 +
            0x4888f9b30a342ff7,
23395 +
            0xdc6e922612c1b244,
23396 +
            0x23b4cf7292352202,
23397 +
            0xb752a4e78ac0bfb1,
23398 +
            0x70f0aeddf3d8355a,
23399 +
            0xe416c548eb2da8e9,
23400 +
            0x1bcc981c6bd938af,
23401 +
            0x8f2af389732ca51c,
23402 +
            0xa688c35ec3da2eb0,
23403 +
            0x326ea8cbdb2fb303,
23404 +
            0xcdb4f59f5bdb2345,
23405 +
            0x59529e0a432ebef6,
23406 +
            0x7f11c98bdd865ea9,
23407 +
            0xebf7a21ec573c31a,
23408 +
            0x142dff4a4587535c,
23409 +
            0x80cb94df5d72ceef,
23410 +
            0xa969a408ed844543,
23411 +
            0x3d8fcf9df571d8f0,
23412 +
            0xc25592c9758548b6,
23413 +
            0x56b3f95c6d70d505,
23414 +
            0x9111f36614685fee,
23415 +
            0x05f798f30c9dc25d,
23416 +
            0xfa2dc5a78c69521b,
23417 +
            0x6ecbae32949ccfa8,
23418 +
            0x47699ee5246a4404,
23419 +
            0xd38ff5703c9fd9b7,
23420 +
            0x2c55a824bc6b49f1,
23421 +
            0xb8b3c3b1a49ed442,
23422 +
            0xe1e15dbbe7b06ab4,
23423 +
            0x7507362eff45f707,
23424 +
            0x8add6b7a7fb16741,
23425 +
            0x1e3b00ef6744faf2,
23426 +
            0x37993038d7b2715e,
23427 +
            0xa37f5badcf47eced,
23428 +
            0x5ca506f94fb37cab,
23429 +
            0xc8436d6c5746e118,
23430 +
            0x0fe167562e5e6bf3,
23431 +
            0x9b070cc336abf640,
23432 +
            0x64dd5197b65f6606,
23433 +
            0xf03b3a02aeaafbb5,
23434 +
            0xd9990ad51e5c7019,
23435 +
            0x4d7f614006a9edaa,
23436 +
            0xb2a53c14865d7dec,
23437 +
            0x264357819ea8e05f,
23438 +
            0xfe239317bb0cbd52,
23439 +
            0x6ac5f882a3f920e1,
23440 +
            0x951fa5d6230db0a7,
23441 +
            0x01f9ce433bf82d14,
23442 +
            0x285bfe948b0ea6b8,
23443 +
            0xbcbd950193fb3b0b,
23444 +
            0x4367c855130fab4d,
23445 +
            0xd781a3c00bfa36fe,
23446 +
            0x1023a9fa72e2bc15,
23447 +
            0x84c5c26f6a1721a6,
23448 +
            0x7b1f9f3beae3b1e0,
23449 +
            0xeff9f4aef2162c53,
23450 +
            0xc65bc47942e0a7ff,
23451 +
            0x52bdafec5a153a4c,
23452 +
            0xad67f2b8dae1aa0a,
23453 +
            0x3981992dc21437b9,
23454 +
            0x60d30727813a894f,
23455 +
            0xf4356cb299cf14fc,
23456 +
            0x0bef31e6193b84ba,
23457 +
            0x9f095a7301ce1909,
23458 +
            0xb6ab6aa4b13892a5,
23459 +
            0x224d0131a9cd0f16,
23460 +
            0xdd975c6529399f50,
23461 +
            0x497137f031cc02e3,
23462 +
            0x8ed33dca48d48808,
23463 +
            0x1a35565f502115bb,
23464 +
            0xe5ef0b0bd0d585fd,
23465 +
            0x7109609ec820184e,
23466 +
            0x58ab504978d693e2,
23467 +
            0xcc4d3bdc60230e51,
23468 +
            0x33976688e0d79e17,
23469 +
            0xa7710d1df82203a4,
23470 +
            0x81325a9c668ae3fb,
23471 +
            0x15d431097e7f7e48,
23472 +
            0xea0e6c5dfe8bee0e,
23473 +
            0x7ee807c8e67e73bd,
23474 +
            0x574a371f5688f811,
23475 +
            0xc3ac5c8a4e7d65a2,
23476 +
            0x3c7601dece89f5e4,
23477 +
            0xa8906a4bd67c6857,
23478 +
            0x6f326071af64e2bc,
23479 +
            0xfbd40be4b7917f0f,
23480 +
            0x040e56b03765ef49,
23481 +
            0x90e83d252f9072fa,
23482 +
            0xb94a0df29f66f956,
23483 +
            0x2dac6667879364e5,
23484 +
            0xd2763b330767f4a3,
23485 +
            0x469050a61f926910,
23486 +
            0x1fc2ceac5cbcd7e6,
23487 +
            0x8b24a53944494a55,
23488 +
            0x74fef86dc4bdda13,
23489 +
            0xe01893f8dc4847a0,
23490 +
            0xc9baa32f6cbecc0c,
23491 +
            0x5d5cc8ba744b51bf,
23492 +
            0xa28695eef4bfc1f9,
23493 +
            0x3660fe7bec4a5c4a,
23494 +
            0xf1c2f4419552d6a1,
23495 +
            0x65249fd48da74b12,
23496 +
            0x9afec2800d53db54,
23497 +
            0x0e18a91515a646e7,
23498 +
            0x27ba99c2a550cd4b,
23499 +
            0xb35cf257bda550f8,
23500 +
            0x4c86af033d51c0be,
23501 +
            0xd860c49625a45d0d,
23502 +
            0xbeb7c7c4dff34c37,
23503 +
            0x2a51ac51c706d184,
23504 +
            0xd58bf10547f241c2,
23505 +
            0x416d9a905f07dc71,
23506 +
            0x68cfaa47eff157dd,
23507 +
            0xfc29c1d2f704ca6e,
23508 +
            0x03f39c8677f05a28,
23509 +
            0x9715f7136f05c79b,
23510 +
            0x50b7fd29161d4d70,
23511 +
            0xc45196bc0ee8d0c3,
23512 +
            0x3b8bcbe88e1c4085,
23513 +
            0xaf6da07d96e9dd36,
23514 +
            0x86cf90aa261f569a,
23515 +
            0x1229fb3f3eeacb29,
23516 +
            0xedf3a66bbe1e5b6f,
23517 +
            0x7915cdfea6ebc6dc,
23518 +
            0x204753f4e5c5782a,
23519 +
            0xb4a13861fd30e599,
23520 +
            0x4b7b65357dc475df,
23521 +
            0xdf9d0ea06531e86c,
23522 +
            0xf63f3e77d5c763c0,
23523 +
            0x62d955e2cd32fe73,
23524 +
            0x9d0308b64dc66e35,
23525 +
            0x09e563235533f386,
23526 +
            0xce4769192c2b796d,
23527 +
            0x5aa1028c34dee4de,
23528 +
            0xa57b5fd8b42a7498,
23529 +
            0x319d344dacdfe92b,
23530 +
            0x183f049a1c296287,
23531 +
            0x8cd96f0f04dcff34,
23532 +
            0x7303325b84286f72,
23533 +
            0xe7e559ce9cddf2c1,
23534 +
            0xc1a60e4f0275129e,
23535 +
            0x554065da1a808f2d,
23536 +
            0xaa9a388e9a741f6b,
23537 +
            0x3e7c531b828182d8,
23538 +
            0x17de63cc32770974,
23539 +
            0x833808592a8294c7,
23540 +
            0x7ce2550daa760481,
23541 +
            0xe8043e98b2839932,
23542 +
            0x2fa634a2cb9b13d9,
23543 +
            0xbb405f37d36e8e6a,
23544 +
            0x449a0263539a1e2c,
23545 +
            0xd07c69f64b6f839f,
23546 +
            0xf9de5921fb990833,
23547 +
            0x6d3832b4e36c9580,
23548 +
            0x92e26fe0639805c6,
23549 +
            0x060404757b6d9875,
23550 +
            0x5f569a7f38432683,
23551 +
            0xcbb0f1ea20b6bb30,
23552 +
            0x346aacbea0422b76,
23553 +
            0xa08cc72bb8b7b6c5,
23554 +
            0x892ef7fc08413d69,
23555 +
            0x1dc89c6910b4a0da,
23556 +
            0xe212c13d9040309c,
23557 +
            0x76f4aaa888b5ad2f,
23558 +
            0xb156a092f1ad27c4,
23559 +
            0x25b0cb07e958ba77,
23560 +
            0xda6a965369ac2a31,
23561 +
            0x4e8cfdc67159b782,
23562 +
            0x672ecd11c1af3c2e,
23563 +
            0xf3c8a684d95aa19d,
23564 +
            0x0c12fbd059ae31db,
23565 +
            0x98f49045415bac68,
23566 +
            0x409454d364fff165,
23567 +
            0xd4723f467c0a6cd6,
23568 +
            0x2ba86212fcfefc90,
23569 +
            0xbf4e0987e40b6123,
23570 +
            0x96ec395054fdea8f,
23571 +
            0x020a52c54c08773c,
23572 +
            0xfdd00f91ccfce77a,
23573 +
            0x69366404d4097ac9,
23574 +
            0xae946e3ead11f022,
23575 +
            0x3a7205abb5e46d91,
23576 +
            0xc5a858ff3510fdd7,
23577 +
            0x514e336a2de56064,
23578 +
            0x78ec03bd9d13ebc8,
23579 +
            0xec0a682885e6767b,
23580 +
            0x13d0357c0512e63d,
23581 +
            0x87365ee91de77b8e,
23582 +
            0xde64c0e35ec9c578,
23583 +
            0x4a82ab76463c58cb,
23584 +
            0xb558f622c6c8c88d,
23585 +
            0x21be9db7de3d553e,
23586 +
            0x081cad606ecbde92,
23587 +
            0x9cfac6f5763e4321,
23588 +
            0x63209ba1f6cad367,
23589 +
            0xf7c6f034ee3f4ed4,
23590 +
            0x3064fa0e9727c43f,
23591 +
            0xa482919b8fd2598c,
23592 +
            0x5b58cccf0f26c9ca,
23593 +
            0xcfbea75a17d35479,
23594 +
            0xe61c978da725dfd5,
23595 +
            0x72fafc18bfd04266,
23596 +
            0x8d20a14c3f24d220,
23597 +
            0x19c6cad927d14f93,
23598 +
            0x3f859d58b979afcc,
23599 +
            0xab63f6cda18c327f,
23600 +
            0x54b9ab992178a239,
23601 +
            0xc05fc00c398d3f8a,
23602 +
            0xe9fdf0db897bb426,
23603 +
            0x7d1b9b4e918e2995,
23604 +
            0x82c1c61a117ab9d3,
23605 +
            0x1627ad8f098f2460,
23606 +
            0xd185a7b57097ae8b,
23607 +
            0x4563cc2068623338,
23608 +
            0xbab99174e896a37e,
23609 +
            0x2e5ffae1f0633ecd,
23610 +
            0x07fdca364095b561,
23611 +
            0x931ba1a3586028d2,
23612 +
            0x6cc1fcf7d894b894,
23613 +
            0xf8279762c0612527,
23614 +
            0xa1750968834f9bd1,
23615 +
            0x359362fd9bba0662,
23616 +
            0xca493fa91b4e9624,
23617 +
            0x5eaf543c03bb0b97,
23618 +
            0x770d64ebb34d803b,
23619 +
            0xe3eb0f7eabb81d88,
23620 +
            0x1c31522a2b4c8dce,
23621 +
            0x88d739bf33b9107d,
23622 +
            0x4f7533854aa19a96,
23623 +
            0xdb93581052540725,
23624 +
            0x24490544d2a09763,
23625 +
            0xb0af6ed1ca550ad0,
23626 +
            0x990d5e067aa3817c,
23627 +
            0x0deb359362561ccf,
23628 +
            0xf23168c7e2a28c89,
23629 +
            0x66d70352fa57113a,
23630 +
        ],
23631 +
        [
23632 +
            0x0000000000000000,
23633 +
            0x3f9f6e62160caefd,
23634 +
            0x7f3edcc42c195dfa,
23635 +
            0x40a1b2a63a15f307,
23636 +
            0xfe7db9885832bbf4,
23637 +
            0xc1e2d7ea4e3e1509,
23638 +
            0x8143654c742be60e,
23639 +
            0xbedc0b2e622748f3,
23640 +
            0xbe0b92fb198f417b,
23641 +
            0x8194fc990f83ef86,
23642 +
            0xc1354e3f35961c81,
23643 +
            0xfeaa205d239ab27c,
23644 +
            0x40762b7341bdfa8f,
23645 +
            0x7fe9451157b15472,
23646 +
            0x3f48f7b76da4a775,
23647 +
            0x00d799d57ba80988,
23648 +
            0x3ee7c41d9af4b465,
23649 +
            0x0178aa7f8cf81a98,
23650 +
            0x41d918d9b6ede99f,
23651 +
            0x7e4676bba0e14762,
23652 +
            0xc09a7d95c2c60f91,
23653 +
            0xff0513f7d4caa16c,
23654 +
            0xbfa4a151eedf526b,
23655 +
            0x803bcf33f8d3fc96,
23656 +
            0x80ec56e6837bf51e,
23657 +
            0xbf73388495775be3,
23658 +
            0xffd28a22af62a8e4,
23659 +
            0xc04de440b96e0619,
23660 +
            0x7e91ef6edb494eea,
23661 +
            0x410e810ccd45e017,
23662 +
            0x01af33aaf7501310,
23663 +
            0x3e305dc8e15cbded,
23664 +
            0x7dcf883b35e968ca,
23665 +
            0x4250e65923e5c637,
23666 +
            0x02f154ff19f03530,
23667 +
            0x3d6e3a9d0ffc9bcd,
23668 +
            0x83b231b36ddbd33e,
23669 +
            0xbc2d5fd17bd77dc3,
23670 +
            0xfc8ced7741c28ec4,
23671 +
            0xc313831557ce2039,
23672 +
            0xc3c41ac02c6629b1,
23673 +
            0xfc5b74a23a6a874c,
23674 +
            0xbcfac604007f744b,
23675 +
            0x8365a8661673dab6,
23676 +
            0x3db9a34874549245,
23677 +
            0x0226cd2a62583cb8,
23678 +
            0x42877f8c584dcfbf,
23679 +
            0x7d1811ee4e416142,
23680 +
            0x43284c26af1ddcaf,
23681 +
            0x7cb72244b9117252,
23682 +
            0x3c1690e283048155,
23683 +
            0x0389fe8095082fa8,
23684 +
            0xbd55f5aef72f675b,
23685 +
            0x82ca9bcce123c9a6,
23686 +
            0xc26b296adb363aa1,
23687 +
            0xfdf44708cd3a945c,
23688 +
            0xfd23deddb6929dd4,
23689 +
            0xc2bcb0bfa09e3329,
23690 +
            0x821d02199a8bc02e,
23691 +
            0xbd826c7b8c876ed3,
23692 +
            0x035e6755eea02620,
23693 +
            0x3cc10937f8ac88dd,
23694 +
            0x7c60bb91c2b97bda,
23695 +
            0x43ffd5f3d4b5d527,
23696 +
            0xfb9f10766bd2d194,
23697 +
            0xc4007e147dde7f69,
23698 +
            0x84a1ccb247cb8c6e,
23699 +
            0xbb3ea2d051c72293,
23700 +
            0x05e2a9fe33e06a60,
23701 +
            0x3a7dc79c25ecc49d,
23702 +
            0x7adc753a1ff9379a,
23703 +
            0x45431b5809f59967,
23704 +
            0x4594828d725d90ef,
23705 +
            0x7a0becef64513e12,
23706 +
            0x3aaa5e495e44cd15,
23707 +
            0x0535302b484863e8,
23708 +
            0xbbe93b052a6f2b1b,
23709 +
            0x847655673c6385e6,
23710 +
            0xc4d7e7c1067676e1,
23711 +
            0xfb4889a3107ad81c,
23712 +
            0xc578d46bf12665f1,
23713 +
            0xfae7ba09e72acb0c,
23714 +
            0xba4608afdd3f380b,
23715 +
            0x85d966cdcb3396f6,
23716 +
            0x3b056de3a914de05,
23717 +
            0x049a0381bf1870f8,
23718 +
            0x443bb127850d83ff,
23719 +
            0x7ba4df4593012d02,
23720 +
            0x7b734690e8a9248a,
23721 +
            0x44ec28f2fea58a77,
23722 +
            0x044d9a54c4b07970,
23723 +
            0x3bd2f436d2bcd78d,
23724 +
            0x850eff18b09b9f7e,
23725 +
            0xba91917aa6973183,
23726 +
            0xfa3023dc9c82c284,
23727 +
            0xc5af4dbe8a8e6c79,
23728 +
            0x8650984d5e3bb95e,
23729 +
            0xb9cff62f483717a3,
23730 +
            0xf96e44897222e4a4,
23731 +
            0xc6f12aeb642e4a59,
23732 +
            0x782d21c5060902aa,
23733 +
            0x47b24fa71005ac57,
23734 +
            0x0713fd012a105f50,
23735 +
            0x388c93633c1cf1ad,
23736 +
            0x385b0ab647b4f825,
23737 +
            0x07c464d451b856d8,
23738 +
            0x4765d6726bada5df,
23739 +
            0x78fab8107da10b22,
23740 +
            0xc626b33e1f8643d1,
23741 +
            0xf9b9dd5c098aed2c,
23742 +
            0xb9186ffa339f1e2b,
23743 +
            0x868701982593b0d6,
23744 +
            0xb8b75c50c4cf0d3b,
23745 +
            0x87283232d2c3a3c6,
23746 +
            0xc7898094e8d650c1,
23747 +
            0xf816eef6fedafe3c,
23748 +
            0x46cae5d89cfdb6cf,
23749 +
            0x79558bba8af11832,
23750 +
            0x39f4391cb0e4eb35,
23751 +
            0x066b577ea6e845c8,
23752 +
            0x06bcceabdd404c40,
23753 +
            0x3923a0c9cb4ce2bd,
23754 +
            0x7982126ff15911ba,
23755 +
            0x461d7c0de755bf47,
23756 +
            0xf8c177238572f7b4,
23757 +
            0xc75e1941937e5949,
23758 +
            0x87ffabe7a96baa4e,
23759 +
            0xb860c585bf6704b3,
23760 +
            0xb5cec1077e4f95bb,
23761 +
            0x8a51af6568433b46,
23762 +
            0xcaf01dc35256c841,
23763 +
            0xf56f73a1445a66bc,
23764 +
            0x4bb3788f267d2e4f,
23765 +
            0x742c16ed307180b2,
23766 +
            0x348da44b0a6473b5,
23767 +
            0x0b12ca291c68dd48,
23768 +
            0x0bc553fc67c0d4c0,
23769 +
            0x345a3d9e71cc7a3d,
23770 +
            0x74fb8f384bd9893a,
23771 +
            0x4b64e15a5dd527c7,
23772 +
            0xf5b8ea743ff26f34,
23773 +
            0xca27841629fec1c9,
23774 +
            0x8a8636b013eb32ce,
23775 +
            0xb51958d205e79c33,
23776 +
            0x8b29051ae4bb21de,
23777 +
            0xb4b66b78f2b78f23,
23778 +
            0xf417d9dec8a27c24,
23779 +
            0xcb88b7bcdeaed2d9,
23780 +
            0x7554bc92bc899a2a,
23781 +
            0x4acbd2f0aa8534d7,
23782 +
            0x0a6a60569090c7d0,
23783 +
            0x35f50e34869c692d,
23784 +
            0x352297e1fd3460a5,
23785 +
            0x0abdf983eb38ce58,
23786 +
            0x4a1c4b25d12d3d5f,
23787 +
            0x75832547c72193a2,
23788 +
            0xcb5f2e69a506db51,
23789 +
            0xf4c0400bb30a75ac,
23790 +
            0xb461f2ad891f86ab,
23791 +
            0x8bfe9ccf9f132856,
23792 +
            0xc801493c4ba6fd71,
23793 +
            0xf79e275e5daa538c,
23794 +
            0xb73f95f867bfa08b,
23795 +
            0x88a0fb9a71b30e76,
23796 +
            0x367cf0b413944685,
23797 +
            0x09e39ed60598e878,
23798 +
            0x49422c703f8d1b7f,
23799 +
            0x76dd42122981b582,
23800 +
            0x760adbc75229bc0a,
23801 +
            0x4995b5a5442512f7,
23802 +
            0x093407037e30e1f0,
23803 +
            0x36ab6961683c4f0d,
23804 +
            0x8877624f0a1b07fe,
23805 +
            0xb7e80c2d1c17a903,
23806 +
            0xf749be8b26025a04,
23807 +
            0xc8d6d0e9300ef4f9,
23808 +
            0xf6e68d21d1524914,
23809 +
            0xc979e343c75ee7e9,
23810 +
            0x89d851e5fd4b14ee,
23811 +
            0xb6473f87eb47ba13,
23812 +
            0x089b34a98960f2e0,
23813 +
            0x37045acb9f6c5c1d,
23814 +
            0x77a5e86da579af1a,
23815 +
            0x483a860fb37501e7,
23816 +
            0x48ed1fdac8dd086f,
23817 +
            0x777271b8ded1a692,
23818 +
            0x37d3c31ee4c45595,
23819 +
            0x084cad7cf2c8fb68,
23820 +
            0xb690a65290efb39b,
23821 +
            0x890fc83086e31d66,
23822 +
            0xc9ae7a96bcf6ee61,
23823 +
            0xf63114f4aafa409c,
23824 +
            0x4e51d171159d442f,
23825 +
            0x71cebf130391ead2,
23826 +
            0x316f0db5398419d5,
23827 +
            0x0ef063d72f88b728,
23828 +
            0xb02c68f94dafffdb,
23829 +
            0x8fb3069b5ba35126,
23830 +
            0xcf12b43d61b6a221,
23831 +
            0xf08dda5f77ba0cdc,
23832 +
            0xf05a438a0c120554,
23833 +
            0xcfc52de81a1eaba9,
23834 +
            0x8f649f4e200b58ae,
23835 +
            0xb0fbf12c3607f653,
23836 +
            0x0e27fa025420bea0,
23837 +
            0x31b89460422c105d,
23838 +
            0x711926c67839e35a,
23839 +
            0x4e8648a46e354da7,
23840 +
            0x70b6156c8f69f04a,
23841 +
            0x4f297b0e99655eb7,
23842 +
            0x0f88c9a8a370adb0,
23843 +
            0x3017a7cab57c034d,
23844 +
            0x8ecbace4d75b4bbe,
23845 +
            0xb154c286c157e543,
23846 +
            0xf1f57020fb421644,
23847 +
            0xce6a1e42ed4eb8b9,
23848 +
            0xcebd879796e6b131,
23849 +
            0xf122e9f580ea1fcc,
23850 +
            0xb1835b53baffeccb,
23851 +
            0x8e1c3531acf34236,
23852 +
            0x30c03e1fced40ac5,
23853 +
            0x0f5f507dd8d8a438,
23854 +
            0x4ffee2dbe2cd573f,
23855 +
            0x70618cb9f4c1f9c2,
23856 +
            0x339e594a20742ce5,
23857 +
            0x0c01372836788218,
23858 +
            0x4ca0858e0c6d711f,
23859 +
            0x733febec1a61dfe2,
23860 +
            0xcde3e0c278469711,
23861 +
            0xf27c8ea06e4a39ec,
23862 +
            0xb2dd3c06545fcaeb,
23863 +
            0x8d42526442536416,
23864 +
            0x8d95cbb139fb6d9e,
23865 +
            0xb20aa5d32ff7c363,
23866 +
            0xf2ab177515e23064,
23867 +
            0xcd34791703ee9e99,
23868 +
            0x73e8723961c9d66a,
23869 +
            0x4c771c5b77c57897,
23870 +
            0x0cd6aefd4dd08b90,
23871 +
            0x3349c09f5bdc256d,
23872 +
            0x0d799d57ba809880,
23873 +
            0x32e6f335ac8c367d,
23874 +
            0x724741939699c57a,
23875 +
            0x4dd82ff180956b87,
23876 +
            0xf30424dfe2b22374,
23877 +
            0xcc9b4abdf4be8d89,
23878 +
            0x8c3af81bceab7e8e,
23879 +
            0xb3a59679d8a7d073,
23880 +
            0xb3720faca30fd9fb,
23881 +
            0x8ced61ceb5037706,
23882 +
            0xcc4cd3688f168401,
23883 +
            0xf3d3bd0a991a2afc,
23884 +
            0x4d0fb624fb3d620f,
23885 +
            0x7290d846ed31ccf2,
23886 +
            0x32316ae0d7243ff5,
23887 +
            0x0dae0482c1289108,
23888 +
        ],
23889 +
        [
23890 +
            0x0000000000000000,
23891 +
            0x296d63e555751de5,
23892 +
            0x52dac7caaaea3bca,
23893 +
            0x7bb7a42fff9f262f,
23894 +
            0xa5b58f9555d47794,
23895 +
            0x8cd8ec7000a16a71,
23896 +
            0xf76f485fff3e4c5e,
23897 +
            0xde022bbaaa4b51bb,
23898 +
            0x099bfec10242d9bb,
23899 +
            0x20f69d245737c45e,
23900 +
            0x5b41390ba8a8e271,
23901 +
            0x722c5aeefdddff94,
23902 +
            0xac2e71545796ae2f,
23903 +
            0x854312b102e3b3ca,
23904 +
            0xfef4b69efd7c95e5,
23905 +
            0xd799d57ba8098800,
23906 +
            0x1337fd820485b376,
23907 +
            0x3a5a9e6751f0ae93,
23908 +
            0x41ed3a48ae6f88bc,
23909 +
            0x688059adfb1a9559,
23910 +
            0xb68272175151c4e2,
23911 +
            0x9fef11f20424d907,
23912 +
            0xe458b5ddfbbbff28,
23913 +
            0xcd35d638aecee2cd,
23914 +
            0x1aac034306c76acd,
23915 +
            0x33c160a653b27728,
23916 +
            0x4876c489ac2d5107,
23917 +
            0x611ba76cf9584ce2,
23918 +
            0xbf198cd653131d59,
23919 +
            0x9674ef33066600bc,
23920 +
            0xedc34b1cf9f92693,
23921 +
            0xc4ae28f9ac8c3b76,
23922 +
            0x266ffb04090b66ec,
23923 +
            0x0f0298e15c7e7b09,
23924 +
            0x74b53ccea3e15d26,
23925 +
            0x5dd85f2bf69440c3,
23926 +
            0x83da74915cdf1178,
23927 +
            0xaab7177409aa0c9d,
23928 +
            0xd100b35bf6352ab2,
23929 +
            0xf86dd0bea3403757,
23930 +
            0x2ff405c50b49bf57,
23931 +
            0x069966205e3ca2b2,
23932 +
            0x7d2ec20fa1a3849d,
23933 +
            0x5443a1eaf4d69978,
23934 +
            0x8a418a505e9dc8c3,
23935 +
            0xa32ce9b50be8d526,
23936 +
            0xd89b4d9af477f309,
23937 +
            0xf1f62e7fa102eeec,
23938 +
            0x355806860d8ed59a,
23939 +
            0x1c35656358fbc87f,
23940 +
            0x6782c14ca764ee50,
23941 +
            0x4eefa2a9f211f3b5,
23942 +
            0x90ed8913585aa20e,
23943 +
            0xb980eaf60d2fbfeb,
23944 +
            0xc2374ed9f2b099c4,
23945 +
            0xeb5a2d3ca7c58421,
23946 +
            0x3cc3f8470fcc0c21,
23947 +
            0x15ae9ba25ab911c4,
23948 +
            0x6e193f8da52637eb,
23949 +
            0x47745c68f0532a0e,
23950 +
            0x997677d25a187bb5,
23951 +
            0xb01b14370f6d6650,
23952 +
            0xcbacb018f0f2407f,
23953 +
            0xe2c1d3fda5875d9a,
23954 +
            0x4cdff6081216cdd8,
23955 +
            0x65b295ed4763d03d,
23956 +
            0x1e0531c2b8fcf612,
23957 +
            0x37685227ed89ebf7,
23958 +
            0xe96a799d47c2ba4c,
23959 +
            0xc0071a7812b7a7a9,
23960 +
            0xbbb0be57ed288186,
23961 +
            0x92ddddb2b85d9c63,
23962 +
            0x454408c910541463,
23963 +
            0x6c296b2c45210986,
23964 +
            0x179ecf03babe2fa9,
23965 +
            0x3ef3ace6efcb324c,
23966 +
            0xe0f1875c458063f7,
23967 +
            0xc99ce4b910f57e12,
23968 +
            0xb22b4096ef6a583d,
23969 +
            0x9b462373ba1f45d8,
23970 +
            0x5fe80b8a16937eae,
23971 +
            0x7685686f43e6634b,
23972 +
            0x0d32cc40bc794564,
23973 +
            0x245fafa5e90c5881,
23974 +
            0xfa5d841f4347093a,
23975 +
            0xd330e7fa163214df,
23976 +
            0xa88743d5e9ad32f0,
23977 +
            0x81ea2030bcd82f15,
23978 +
            0x5673f54b14d1a715,
23979 +
            0x7f1e96ae41a4baf0,
23980 +
            0x04a93281be3b9cdf,
23981 +
            0x2dc45164eb4e813a,
23982 +
            0xf3c67ade4105d081,
23983 +
            0xdaab193b1470cd64,
23984 +
            0xa11cbd14ebefeb4b,
23985 +
            0x8871def1be9af6ae,
23986 +
            0x6ab00d0c1b1dab34,
23987 +
            0x43dd6ee94e68b6d1,
23988 +
            0x386acac6b1f790fe,
23989 +
            0x1107a923e4828d1b,
23990 +
            0xcf0582994ec9dca0,
23991 +
            0xe668e17c1bbcc145,
23992 +
            0x9ddf4553e423e76a,
23993 +
            0xb4b226b6b156fa8f,
23994 +
            0x632bf3cd195f728f,
23995 +
            0x4a4690284c2a6f6a,
23996 +
            0x31f13407b3b54945,
23997 +
            0x189c57e2e6c054a0,
23998 +
            0xc69e7c584c8b051b,
23999 +
            0xeff31fbd19fe18fe,
24000 +
            0x9444bb92e6613ed1,
24001 +
            0xbd29d877b3142334,
24002 +
            0x7987f08e1f981842,
24003 +
            0x50ea936b4aed05a7,
24004 +
            0x2b5d3744b5722388,
24005 +
            0x023054a1e0073e6d,
24006 +
            0xdc327f1b4a4c6fd6,
24007 +
            0xf55f1cfe1f397233,
24008 +
            0x8ee8b8d1e0a6541c,
24009 +
            0xa785db34b5d349f9,
24010 +
            0x701c0e4f1ddac1f9,
24011 +
            0x59716daa48afdc1c,
24012 +
            0x22c6c985b730fa33,
24013 +
            0x0babaa60e245e7d6,
24014 +
            0xd5a981da480eb66d,
24015 +
            0xfcc4e23f1d7bab88,
24016 +
            0x87734610e2e48da7,
24017 +
            0xae1e25f5b7919042,
24018 +
            0x99bfec10242d9bb0,
24019 +
            0xb0d28ff571588655,
24020 +
            0xcb652bda8ec7a07a,
24021 +
            0xe208483fdbb2bd9f,
24022 +
            0x3c0a638571f9ec24,
24023 +
            0x15670060248cf1c1,
24024 +
            0x6ed0a44fdb13d7ee,
24025 +
            0x47bdc7aa8e66ca0b,
24026 +
            0x902412d1266f420b,
24027 +
            0xb9497134731a5fee,
24028 +
            0xc2fed51b8c8579c1,
24029 +
            0xeb93b6fed9f06424,
24030 +
            0x35919d4473bb359f,
24031 +
            0x1cfcfea126ce287a,
24032 +
            0x674b5a8ed9510e55,
24033 +
            0x4e26396b8c2413b0,
24034 +
            0x8a88119220a828c6,
24035 +
            0xa3e5727775dd3523,
24036 +
            0xd852d6588a42130c,
24037 +
            0xf13fb5bddf370ee9,
24038 +
            0x2f3d9e07757c5f52,
24039 +
            0x0650fde2200942b7,
24040 +
            0x7de759cddf966498,
24041 +
            0x548a3a288ae3797d,
24042 +
            0x8313ef5322eaf17d,
24043 +
            0xaa7e8cb6779fec98,
24044 +
            0xd1c928998800cab7,
24045 +
            0xf8a44b7cdd75d752,
24046 +
            0x26a660c6773e86e9,
24047 +
            0x0fcb0323224b9b0c,
24048 +
            0x747ca70cddd4bd23,
24049 +
            0x5d11c4e988a1a0c6,
24050 +
            0xbfd017142d26fd5c,
24051 +
            0x96bd74f17853e0b9,
24052 +
            0xed0ad0de87ccc696,
24053 +
            0xc467b33bd2b9db73,
24054 +
            0x1a65988178f28ac8,
24055 +
            0x3308fb642d87972d,
24056 +
            0x48bf5f4bd218b102,
24057 +
            0x61d23cae876dace7,
24058 +
            0xb64be9d52f6424e7,
24059 +
            0x9f268a307a113902,
24060 +
            0xe4912e1f858e1f2d,
24061 +
            0xcdfc4dfad0fb02c8,
24062 +
            0x13fe66407ab05373,
24063 +
            0x3a9305a52fc54e96,
24064 +
            0x4124a18ad05a68b9,
24065 +
            0x6849c26f852f755c,
24066 +
            0xace7ea9629a34e2a,
24067 +
            0x858a89737cd653cf,
24068 +
            0xfe3d2d5c834975e0,
24069 +
            0xd7504eb9d63c6805,
24070 +
            0x095265037c7739be,
24071 +
            0x203f06e62902245b,
24072 +
            0x5b88a2c9d69d0274,
24073 +
            0x72e5c12c83e81f91,
24074 +
            0xa57c14572be19791,
24075 +
            0x8c1177b27e948a74,
24076 +
            0xf7a6d39d810bac5b,
24077 +
            0xdecbb078d47eb1be,
24078 +
            0x00c99bc27e35e005,
24079 +
            0x29a4f8272b40fde0,
24080 +
            0x52135c08d4dfdbcf,
24081 +
            0x7b7e3fed81aac62a,
24082 +
            0xd5601a18363b5668,
24083 +
            0xfc0d79fd634e4b8d,
24084 +
            0x87baddd29cd16da2,
24085 +
            0xaed7be37c9a47047,
24086 +
            0x70d5958d63ef21fc,
24087 +
            0x59b8f668369a3c19,
24088 +
            0x220f5247c9051a36,
24089 +
            0x0b6231a29c7007d3,
24090 +
            0xdcfbe4d934798fd3,
24091 +
            0xf596873c610c9236,
24092 +
            0x8e2123139e93b419,
24093 +
            0xa74c40f6cbe6a9fc,
24094 +
            0x794e6b4c61adf847,
24095 +
            0x502308a934d8e5a2,
24096 +
            0x2b94ac86cb47c38d,
24097 +
            0x02f9cf639e32de68,
24098 +
            0xc657e79a32bee51e,
24099 +
            0xef3a847f67cbf8fb,
24100 +
            0x948d20509854ded4,
24101 +
            0xbde043b5cd21c331,
24102 +
            0x63e2680f676a928a,
24103 +
            0x4a8f0bea321f8f6f,
24104 +
            0x3138afc5cd80a940,
24105 +
            0x1855cc2098f5b4a5,
24106 +
            0xcfcc195b30fc3ca5,
24107 +
            0xe6a17abe65892140,
24108 +
            0x9d16de919a16076f,
24109 +
            0xb47bbd74cf631a8a,
24110 +
            0x6a7996ce65284b31,
24111 +
            0x4314f52b305d56d4,
24112 +
            0x38a35104cfc270fb,
24113 +
            0x11ce32e19ab76d1e,
24114 +
            0xf30fe11c3f303084,
24115 +
            0xda6282f96a452d61,
24116 +
            0xa1d526d695da0b4e,
24117 +
            0x88b84533c0af16ab,
24118 +
            0x56ba6e896ae44710,
24119 +
            0x7fd70d6c3f915af5,
24120 +
            0x0460a943c00e7cda,
24121 +
            0x2d0dcaa6957b613f,
24122 +
            0xfa941fdd3d72e93f,
24123 +
            0xd3f97c386807f4da,
24124 +
            0xa84ed8179798d2f5,
24125 +
            0x8123bbf2c2edcf10,
24126 +
            0x5f21904868a69eab,
24127 +
            0x764cf3ad3dd3834e,
24128 +
            0x0dfb5782c24ca561,
24129 +
            0x249634679739b884,
24130 +
            0xe0381c9e3bb583f2,
24131 +
            0xc9557f7b6ec09e17,
24132 +
            0xb2e2db54915fb838,
24133 +
            0x9b8fb8b1c42aa5dd,
24134 +
            0x458d930b6e61f466,
24135 +
            0x6ce0f0ee3b14e983,
24136 +
            0x175754c1c48bcfac,
24137 +
            0x3e3a372491fed249,
24138 +
            0xe9a3e25f39f75a49,
24139 +
            0xc0ce81ba6c8247ac,
24140 +
            0xbb792595931d6183,
24141 +
            0x92144670c6687c66,
24142 +
            0x4c166dca6c232ddd,
24143 +
            0x657b0e2f39563038,
24144 +
            0x1eccaa00c6c91617,
24145 +
            0x37a1c9e593bc0bf2,
24146 +
        ],
24147 +
        [
24148 +
            0x0000000000000000,
24149 +
            0x718f39cbe1b101f3,
24150 +
            0xe31e7397c36203e6,
24151 +
            0x92914a5c22d30215,
24152 +
            0x84cc06c42f2e315f,
24153 +
            0xf5433f0fce9f30ac,
24154 +
            0x67d27553ec4c32b9,
24155 +
            0x165d4c980dfd334a,
24156 +
            0x4b68ec63f7b6542d,
24157 +
            0x3ae7d5a8160755de,
24158 +
            0xa8769ff434d457cb,
24159 +
            0xd9f9a63fd5655638,
24160 +
            0xcfa4eaa7d8986572,
24161 +
            0xbe2bd36c39296481,
24162 +
            0x2cba99301bfa6694,
24163 +
            0x5d35a0fbfa4b6767,
24164 +
            0x96d1d8c7ef6ca85a,
24165 +
            0xe75ee10c0edda9a9,
24166 +
            0x75cfab502c0eabbc,
24167 +
            0x0440929bcdbfaa4f,
24168 +
            0x121dde03c0429905,
24169 +
            0x6392e7c821f398f6,
24170 +
            0xf103ad9403209ae3,
24171 +
            0x808c945fe2919b10,
24172 +
            0xddb934a418dafc77,
24173 +
            0xac360d6ff96bfd84,
24174 +
            0x3ea74733dbb8ff91,
24175 +
            0x4f287ef83a09fe62,
24176 +
            0x5975326037f4cd28,
24177 +
            0x28fa0babd645ccdb,
24178 +
            0xba6b41f7f496cece,
24179 +
            0xcbe4783c1527cf3d,
24180 +
            0x6f53506477336627,
24181 +
            0x1edc69af968267d4,
24182 +
            0x8c4d23f3b45165c1,
24183 +
            0xfdc21a3855e06432,
24184 +
            0xeb9f56a0581d5778,
24185 +
            0x9a106f6bb9ac568b,
24186 +
            0x088125379b7f549e,
24187 +
            0x790e1cfc7ace556d,
24188 +
            0x243bbc078085320a,
24189 +
            0x55b485cc613433f9,
24190 +
            0xc725cf9043e731ec,
24191 +
            0xb6aaf65ba256301f,
24192 +
            0xa0f7bac3afab0355,
24193 +
            0xd17883084e1a02a6,
24194 +
            0x43e9c9546cc900b3,
24195 +
            0x3266f09f8d780140,
24196 +
            0xf98288a3985fce7d,
24197 +
            0x880db16879eecf8e,
24198 +
            0x1a9cfb345b3dcd9b,
24199 +
            0x6b13c2ffba8ccc68,
24200 +
            0x7d4e8e67b771ff22,
24201 +
            0x0cc1b7ac56c0fed1,
24202 +
            0x9e50fdf07413fcc4,
24203 +
            0xefdfc43b95a2fd37,
24204 +
            0xb2ea64c06fe99a50,
24205 +
            0xc3655d0b8e589ba3,
24206 +
            0x51f41757ac8b99b6,
24207 +
            0x207b2e9c4d3a9845,
24208 +
            0x3626620440c7ab0f,
24209 +
            0x47a95bcfa176aafc,
24210 +
            0xd538119383a5a8e9,
24211 +
            0xa4b728586214a91a,
24212 +
            0xdea6a0c8ee66cc4e,
24213 +
            0xaf2999030fd7cdbd,
24214 +
            0x3db8d35f2d04cfa8,
24215 +
            0x4c37ea94ccb5ce5b,
24216 +
            0x5a6aa60cc148fd11,
24217 +
            0x2be59fc720f9fce2,
24218 +
            0xb974d59b022afef7,
24219 +
            0xc8fbec50e39bff04,
24220 +
            0x95ce4cab19d09863,
24221 +
            0xe4417560f8619990,
24222 +
            0x76d03f3cdab29b85,
24223 +
            0x075f06f73b039a76,
24224 +
            0x11024a6f36fea93c,
24225 +
            0x608d73a4d74fa8cf,
24226 +
            0xf21c39f8f59caada,
24227 +
            0x83930033142dab29,
24228 +
            0x4877780f010a6414,
24229 +
            0x39f841c4e0bb65e7,
24230 +
            0xab690b98c26867f2,
24231 +
            0xdae6325323d96601,
24232 +
            0xccbb7ecb2e24554b,
24233 +
            0xbd344700cf9554b8,
24234 +
            0x2fa50d5ced4656ad,
24235 +
            0x5e2a34970cf7575e,
24236 +
            0x031f946cf6bc3039,
24237 +
            0x7290ada7170d31ca,
24238 +
            0xe001e7fb35de33df,
24239 +
            0x918ede30d46f322c,
24240 +
            0x87d392a8d9920166,
24241 +
            0xf65cab6338230095,
24242 +
            0x64cde13f1af00280,
24243 +
            0x1542d8f4fb410373,
24244 +
            0xb1f5f0ac9955aa69,
24245 +
            0xc07ac96778e4ab9a,
24246 +
            0x52eb833b5a37a98f,
24247 +
            0x2364baf0bb86a87c,
24248 +
            0x3539f668b67b9b36,
24249 +
            0x44b6cfa357ca9ac5,
24250 +
            0xd62785ff751998d0,
24251 +
            0xa7a8bc3494a89923,
24252 +
            0xfa9d1ccf6ee3fe44,
24253 +
            0x8b1225048f52ffb7,
24254 +
            0x19836f58ad81fda2,
24255 +
            0x680c56934c30fc51,
24256 +
            0x7e511a0b41cdcf1b,
24257 +
            0x0fde23c0a07ccee8,
24258 +
            0x9d4f699c82afccfd,
24259 +
            0xecc05057631ecd0e,
24260 +
            0x2724286b76390233,
24261 +
            0x56ab11a0978803c0,
24262 +
            0xc43a5bfcb55b01d5,
24263 +
            0xb5b5623754ea0026,
24264 +
            0xa3e82eaf5917336c,
24265 +
            0xd2671764b8a6329f,
24266 +
            0x40f65d389a75308a,
24267 +
            0x317964f37bc43179,
24268 +
            0x6c4cc408818f561e,
24269 +
            0x1dc3fdc3603e57ed,
24270 +
            0x8f52b79f42ed55f8,
24271 +
            0xfedd8e54a35c540b,
24272 +
            0xe880c2ccaea16741,
24273 +
            0x990ffb074f1066b2,
24274 +
            0x0b9eb15b6dc364a7,
24275 +
            0x7a1188908c726554,
24276 +
            0xffbda07a7527ae0f,
24277 +
            0x8e3299b19496affc,
24278 +
            0x1ca3d3edb645ade9,
24279 +
            0x6d2cea2657f4ac1a,
24280 +
            0x7b71a6be5a099f50,
24281 +
            0x0afe9f75bbb89ea3,
24282 +
            0x986fd529996b9cb6,
24283 +
            0xe9e0ece278da9d45,
24284 +
            0xb4d54c198291fa22,
24285 +
            0xc55a75d26320fbd1,
24286 +
            0x57cb3f8e41f3f9c4,
24287 +
            0x26440645a042f837,
24288 +
            0x30194addadbfcb7d,
24289 +
            0x419673164c0eca8e,
24290 +
            0xd307394a6eddc89b,
24291 +
            0xa28800818f6cc968,
24292 +
            0x696c78bd9a4b0655,
24293 +
            0x18e341767bfa07a6,
24294 +
            0x8a720b2a592905b3,
24295 +
            0xfbfd32e1b8980440,
24296 +
            0xeda07e79b565370a,
24297 +
            0x9c2f47b254d436f9,
24298 +
            0x0ebe0dee760734ec,
24299 +
            0x7f31342597b6351f,
24300 +
            0x220494de6dfd5278,
24301 +
            0x538bad158c4c538b,
24302 +
            0xc11ae749ae9f519e,
24303 +
            0xb095de824f2e506d,
24304 +
            0xa6c8921a42d36327,
24305 +
            0xd747abd1a36262d4,
24306 +
            0x45d6e18d81b160c1,
24307 +
            0x3459d84660006132,
24308 +
            0x90eef01e0214c828,
24309 +
            0xe161c9d5e3a5c9db,
24310 +
            0x73f08389c176cbce,
24311 +
            0x027fba4220c7ca3d,
24312 +
            0x1422f6da2d3af977,
24313 +
            0x65adcf11cc8bf884,
24314 +
            0xf73c854dee58fa91,
24315 +
            0x86b3bc860fe9fb62,
24316 +
            0xdb861c7df5a29c05,
24317 +
            0xaa0925b614139df6,
24318 +
            0x38986fea36c09fe3,
24319 +
            0x49175621d7719e10,
24320 +
            0x5f4a1ab9da8cad5a,
24321 +
            0x2ec523723b3daca9,
24322 +
            0xbc54692e19eeaebc,
24323 +
            0xcddb50e5f85faf4f,
24324 +
            0x063f28d9ed786072,
24325 +
            0x77b011120cc96181,
24326 +
            0xe5215b4e2e1a6394,
24327 +
            0x94ae6285cfab6267,
24328 +
            0x82f32e1dc256512d,
24329 +
            0xf37c17d623e750de,
24330 +
            0x61ed5d8a013452cb,
24331 +
            0x10626441e0855338,
24332 +
            0x4d57c4ba1ace345f,
24333 +
            0x3cd8fd71fb7f35ac,
24334 +
            0xae49b72dd9ac37b9,
24335 +
            0xdfc68ee6381d364a,
24336 +
            0xc99bc27e35e00500,
24337 +
            0xb814fbb5d45104f3,
24338 +
            0x2a85b1e9f68206e6,
24339 +
            0x5b0a882217330715,
24340 +
            0x211b00b29b416241,
24341 +
            0x509439797af063b2,
24342 +
            0xc2057325582361a7,
24343 +
            0xb38a4aeeb9926054,
24344 +
            0xa5d70676b46f531e,
24345 +
            0xd4583fbd55de52ed,
24346 +
            0x46c975e1770d50f8,
24347 +
            0x37464c2a96bc510b,
24348 +
            0x6a73ecd16cf7366c,
24349 +
            0x1bfcd51a8d46379f,
24350 +
            0x896d9f46af95358a,
24351 +
            0xf8e2a68d4e243479,
24352 +
            0xeebfea1543d90733,
24353 +
            0x9f30d3dea26806c0,
24354 +
            0x0da1998280bb04d5,
24355 +
            0x7c2ea049610a0526,
24356 +
            0xb7cad875742dca1b,
24357 +
            0xc645e1be959ccbe8,
24358 +
            0x54d4abe2b74fc9fd,
24359 +
            0x255b922956fec80e,
24360 +
            0x3306deb15b03fb44,
24361 +
            0x4289e77abab2fab7,
24362 +
            0xd018ad269861f8a2,
24363 +
            0xa19794ed79d0f951,
24364 +
            0xfca23416839b9e36,
24365 +
            0x8d2d0ddd622a9fc5,
24366 +
            0x1fbc478140f99dd0,
24367 +
            0x6e337e4aa1489c23,
24368 +
            0x786e32d2acb5af69,
24369 +
            0x09e10b194d04ae9a,
24370 +
            0x9b7041456fd7ac8f,
24371 +
            0xeaff788e8e66ad7c,
24372 +
            0x4e4850d6ec720466,
24373 +
            0x3fc7691d0dc30595,
24374 +
            0xad5623412f100780,
24375 +
            0xdcd91a8acea10673,
24376 +
            0xca845612c35c3539,
24377 +
            0xbb0b6fd922ed34ca,
24378 +
            0x299a2585003e36df,
24379 +
            0x58151c4ee18f372c,
24380 +
            0x0520bcb51bc4504b,
24381 +
            0x74af857efa7551b8,
24382 +
            0xe63ecf22d8a653ad,
24383 +
            0x97b1f6e93917525e,
24384 +
            0x81ecba7134ea6114,
24385 +
            0xf06383bad55b60e7,
24386 +
            0x62f2c9e6f78862f2,
24387 +
            0x137df02d16396301,
24388 +
            0xd8998811031eac3c,
24389 +
            0xa916b1dae2afadcf,
24390 +
            0x3b87fb86c07cafda,
24391 +
            0x4a08c24d21cdae29,
24392 +
            0x5c558ed52c309d63,
24393 +
            0x2ddab71ecd819c90,
24394 +
            0xbf4bfd42ef529e85,
24395 +
            0xcec4c4890ee39f76,
24396 +
            0x93f16472f4a8f811,
24397 +
            0xe27e5db91519f9e2,
24398 +
            0x70ef17e537cafbf7,
24399 +
            0x01602e2ed67bfa04,
24400 +
            0x173d62b6db86c94e,
24401 +
            0x66b25b7d3a37c8bd,
24402 +
            0xf423112118e4caa8,
24403 +
            0x85ac28eaf955cb5b,
24404 +
        ],
24405 +
        [
24406 +
            0x0000000000000000,
24407 +
            0xbd8ba11f43a56a8d,
24408 +
            0x39e7a3d52ea0e389,
24409 +
            0x846c02ca6d058904,
24410 +
            0x73cf47aa5d41c712,
24411 +
            0xce44e6b51ee4ad9f,
24412 +
            0x4a28e47f73e1249b,
24413 +
            0xf7a3456030444e16,
24414 +
            0xe79e8f54ba838e24,
24415 +
            0x5a152e4bf926e4a9,
24416 +
            0xde792c8194236dad,
24417 +
            0x63f28d9ed7860720,
24418 +
            0x9451c8fee7c24936,
24419 +
            0x29da69e1a46723bb,
24420 +
            0xadb66b2bc962aabf,
24421 +
            0x103dca348ac7c032,
24422 +
            0x8dcdff42dced2adb,
24423 +
            0x30465e5d9f484056,
24424 +
            0xb42a5c97f24dc952,
24425 +
            0x09a1fd88b1e8a3df,
24426 +
            0xfe02b8e881acedc9,
24427 +
            0x438919f7c2098744,
24428 +
            0xc7e51b3daf0c0e40,
24429 +
            0x7a6eba22eca964cd,
24430 +
            0x6a537016666ea4ff,
24431 +
            0xd7d8d10925cbce72,
24432 +
            0x53b4d3c348ce4776,
24433 +
            0xee3f72dc0b6b2dfb,
24434 +
            0x199c37bc3b2f63ed,
24435 +
            0xa41796a3788a0960,
24436 +
            0x207b9469158f8064,
24437 +
            0x9df03576562aeae9,
24438 +
            0x596b1f6e10306325,
24439 +
            0xe4e0be71539509a8,
24440 +
            0x608cbcbb3e9080ac,
24441 +
            0xdd071da47d35ea21,
24442 +
            0x2aa458c44d71a437,
24443 +
            0x972ff9db0ed4ceba,
24444 +
            0x1343fb1163d147be,
24445 +
            0xaec85a0e20742d33,
24446 +
            0xbef5903aaab3ed01,
24447 +
            0x037e3125e916878c,
24448 +
            0x871233ef84130e88,
24449 +
            0x3a9992f0c7b66405,
24450 +
            0xcd3ad790f7f22a13,
24451 +
            0x70b1768fb457409e,
24452 +
            0xf4dd7445d952c99a,
24453 +
            0x4956d55a9af7a317,
24454 +
            0xd4a6e02cccdd49fe,
24455 +
            0x692d41338f782373,
24456 +
            0xed4143f9e27daa77,
24457 +
            0x50cae2e6a1d8c0fa,
24458 +
            0xa769a786919c8eec,
24459 +
            0x1ae20699d239e461,
24460 +
            0x9e8e0453bf3c6d65,
24461 +
            0x2305a54cfc9907e8,
24462 +
            0x33386f78765ec7da,
24463 +
            0x8eb3ce6735fbad57,
24464 +
            0x0adfccad58fe2453,
24465 +
            0xb7546db21b5b4ede,
24466 +
            0x40f728d22b1f00c8,
24467 +
            0xfd7c89cd68ba6a45,
24468 +
            0x79108b0705bfe341,
24469 +
            0xc49b2a18461a89cc,
24470 +
            0xb2d63edc2060c64a,
24471 +
            0x0f5d9fc363c5acc7,
24472 +
            0x8b319d090ec025c3,
24473 +
            0x36ba3c164d654f4e,
24474 +
            0xc11979767d210158,
24475 +
            0x7c92d8693e846bd5,
24476 +
            0xf8fedaa35381e2d1,
24477 +
            0x45757bbc1024885c,
24478 +
            0x5548b1889ae3486e,
24479 +
            0xe8c31097d94622e3,
24480 +
            0x6caf125db443abe7,
24481 +
            0xd124b342f7e6c16a,
24482 +
            0x2687f622c7a28f7c,
24483 +
            0x9b0c573d8407e5f1,
24484 +
            0x1f6055f7e9026cf5,
24485 +
            0xa2ebf4e8aaa70678,
24486 +
            0x3f1bc19efc8dec91,
24487 +
            0x82906081bf28861c,
24488 +
            0x06fc624bd22d0f18,
24489 +
            0xbb77c35491886595,
24490 +
            0x4cd48634a1cc2b83,
24491 +
            0xf15f272be269410e,
24492 +
            0x753325e18f6cc80a,
24493 +
            0xc8b884feccc9a287,
24494 +
            0xd8854eca460e62b5,
24495 +
            0x650eefd505ab0838,
24496 +
            0xe162ed1f68ae813c,
24497 +
            0x5ce94c002b0bebb1,
24498 +
            0xab4a09601b4fa5a7,
24499 +
            0x16c1a87f58eacf2a,
24500 +
            0x92adaab535ef462e,
24501 +
            0x2f260baa764a2ca3,
24502 +
            0xebbd21b23050a56f,
24503 +
            0x563680ad73f5cfe2,
24504 +
            0xd25a82671ef046e6,
24505 +
            0x6fd123785d552c6b,
24506 +
            0x987266186d11627d,
24507 +
            0x25f9c7072eb408f0,
24508 +
            0xa195c5cd43b181f4,
24509 +
            0x1c1e64d20014eb79,
24510 +
            0x0c23aee68ad32b4b,
24511 +
            0xb1a80ff9c97641c6,
24512 +
            0x35c40d33a473c8c2,
24513 +
            0x884fac2ce7d6a24f,
24514 +
            0x7fece94cd792ec59,
24515 +
            0xc2674853943786d4,
24516 +
            0x460b4a99f9320fd0,
24517 +
            0xfb80eb86ba97655d,
24518 +
            0x6670def0ecbd8fb4,
24519 +
            0xdbfb7fefaf18e539,
24520 +
            0x5f977d25c21d6c3d,
24521 +
            0xe21cdc3a81b806b0,
24522 +
            0x15bf995ab1fc48a6,
24523 +
            0xa8343845f259222b,
24524 +
            0x2c583a8f9f5cab2f,
24525 +
            0x91d39b90dcf9c1a2,
24526 +
            0x81ee51a4563e0190,
24527 +
            0x3c65f0bb159b6b1d,
24528 +
            0xb809f271789ee219,
24529 +
            0x0582536e3b3b8894,
24530 +
            0xf221160e0b7fc682,
24531 +
            0x4faab71148daac0f,
24532 +
            0xcbc6b5db25df250b,
24533 +
            0x764d14c4667a4f86,
24534 +
            0x275c9c53e92bba07,
24535 +
            0x9ad73d4caa8ed08a,
24536 +
            0x1ebb3f86c78b598e,
24537 +
            0xa3309e99842e3303,
24538 +
            0x5493dbf9b46a7d15,
24539 +
            0xe9187ae6f7cf1798,
24540 +
            0x6d74782c9aca9e9c,
24541 +
            0xd0ffd933d96ff411,
24542 +
            0xc0c2130753a83423,
24543 +
            0x7d49b218100d5eae,
24544 +
            0xf925b0d27d08d7aa,
24545 +
            0x44ae11cd3eadbd27,
24546 +
            0xb30d54ad0ee9f331,
24547 +
            0x0e86f5b24d4c99bc,
24548 +
            0x8aeaf778204910b8,
24549 +
            0x3761566763ec7a35,
24550 +
            0xaa91631135c690dc,
24551 +
            0x171ac20e7663fa51,
24552 +
            0x9376c0c41b667355,
24553 +
            0x2efd61db58c319d8,
24554 +
            0xd95e24bb688757ce,
24555 +
            0x64d585a42b223d43,
24556 +
            0xe0b9876e4627b447,
24557 +
            0x5d3226710582deca,
24558 +
            0x4d0fec458f451ef8,
24559 +
            0xf0844d5acce07475,
24560 +
            0x74e84f90a1e5fd71,
24561 +
            0xc963ee8fe24097fc,
24562 +
            0x3ec0abefd204d9ea,
24563 +
            0x834b0af091a1b367,
24564 +
            0x0727083afca43a63,
24565 +
            0xbaaca925bf0150ee,
24566 +
            0x7e37833df91bd922,
24567 +
            0xc3bc2222babeb3af,
24568 +
            0x47d020e8d7bb3aab,
24569 +
            0xfa5b81f7941e5026,
24570 +
            0x0df8c497a45a1e30,
24571 +
            0xb0736588e7ff74bd,
24572 +
            0x341f67428afafdb9,
24573 +
            0x8994c65dc95f9734,
24574 +
            0x99a90c6943985706,
24575 +
            0x2422ad76003d3d8b,
24576 +
            0xa04eafbc6d38b48f,
24577 +
            0x1dc50ea32e9dde02,
24578 +
            0xea664bc31ed99014,
24579 +
            0x57edeadc5d7cfa99,
24580 +
            0xd381e8163079739d,
24581 +
            0x6e0a490973dc1910,
24582 +
            0xf3fa7c7f25f6f3f9,
24583 +
            0x4e71dd6066539974,
24584 +
            0xca1ddfaa0b561070,
24585 +
            0x77967eb548f37afd,
24586 +
            0x80353bd578b734eb,
24587 +
            0x3dbe9aca3b125e66,
24588 +
            0xb9d298005617d762,
24589 +
            0x0459391f15b2bdef,
24590 +
            0x1464f32b9f757ddd,
24591 +
            0xa9ef5234dcd01750,
24592 +
            0x2d8350feb1d59e54,
24593 +
            0x9008f1e1f270f4d9,
24594 +
            0x67abb481c234bacf,
24595 +
            0xda20159e8191d042,
24596 +
            0x5e4c1754ec945946,
24597 +
            0xe3c7b64baf3133cb,
24598 +
            0x958aa28fc94b7c4d,
24599 +
            0x280103908aee16c0,
24600 +
            0xac6d015ae7eb9fc4,
24601 +
            0x11e6a045a44ef549,
24602 +
            0xe645e525940abb5f,
24603 +
            0x5bce443ad7afd1d2,
24604 +
            0xdfa246f0baaa58d6,
24605 +
            0x6229e7eff90f325b,
24606 +
            0x72142ddb73c8f269,
24607 +
            0xcf9f8cc4306d98e4,
24608 +
            0x4bf38e0e5d6811e0,
24609 +
            0xf6782f111ecd7b6d,
24610 +
            0x01db6a712e89357b,
24611 +
            0xbc50cb6e6d2c5ff6,
24612 +
            0x383cc9a40029d6f2,
24613 +
            0x85b768bb438cbc7f,
24614 +
            0x18475dcd15a65696,
24615 +
            0xa5ccfcd256033c1b,
24616 +
            0x21a0fe183b06b51f,
24617 +
            0x9c2b5f0778a3df92,
24618 +
            0x6b881a6748e79184,
24619 +
            0xd603bb780b42fb09,
24620 +
            0x526fb9b26647720d,
24621 +
            0xefe418ad25e21880,
24622 +
            0xffd9d299af25d8b2,
24623 +
            0x42527386ec80b23f,
24624 +
            0xc63e714c81853b3b,
24625 +
            0x7bb5d053c22051b6,
24626 +
            0x8c169533f2641fa0,
24627 +
            0x319d342cb1c1752d,
24628 +
            0xb5f136e6dcc4fc29,
24629 +
            0x087a97f99f6196a4,
24630 +
            0xcce1bde1d97b1f68,
24631 +
            0x716a1cfe9ade75e5,
24632 +
            0xf5061e34f7dbfce1,
24633 +
            0x488dbf2bb47e966c,
24634 +
            0xbf2efa4b843ad87a,
24635 +
            0x02a55b54c79fb2f7,
24636 +
            0x86c9599eaa9a3bf3,
24637 +
            0x3b42f881e93f517e,
24638 +
            0x2b7f32b563f8914c,
24639 +
            0x96f493aa205dfbc1,
24640 +
            0x129891604d5872c5,
24641 +
            0xaf13307f0efd1848,
24642 +
            0x58b0751f3eb9565e,
24643 +
            0xe53bd4007d1c3cd3,
24644 +
            0x6157d6ca1019b5d7,
24645 +
            0xdcdc77d553bcdf5a,
24646 +
            0x412c42a3059635b3,
24647 +
            0xfca7e3bc46335f3e,
24648 +
            0x78cbe1762b36d63a,
24649 +
            0xc54040696893bcb7,
24650 +
            0x32e3050958d7f2a1,
24651 +
            0x8f68a4161b72982c,
24652 +
            0x0b04a6dc76771128,
24653 +
            0xb68f07c335d27ba5,
24654 +
            0xa6b2cdf7bf15bb97,
24655 +
            0x1b396ce8fcb0d11a,
24656 +
            0x9f556e2291b5581e,
24657 +
            0x22decf3dd2103293,
24658 +
            0xd57d8a5de2547c85,
24659 +
            0x68f62b42a1f11608,
24660 +
            0xec9a2988ccf49f0c,
24661 +
            0x511188978f51f581,
24662 +
        ],
24663 +
    ];
24664 +
24665 +
    pub static CRC64_GO_ISO_TABLE: [[u64; 256]; 16] = [
24666 +
        [
24667 +
            0x0000000000000000,
24668 +
            0x01b0000000000000,
24669 +
            0x0360000000000000,
24670 +
            0x02d0000000000000,
24671 +
            0x06c0000000000000,
24672 +
            0x0770000000000000,
24673 +
            0x05a0000000000000,
24674 +
            0x0410000000000000,
24675 +
            0x0d80000000000000,
24676 +
            0x0c30000000000000,
24677 +
            0x0ee0000000000000,
24678 +
            0x0f50000000000000,
24679 +
            0x0b40000000000000,
24680 +
            0x0af0000000000000,
24681 +
            0x0820000000000000,
24682 +
            0x0990000000000000,
24683 +
            0x1b00000000000000,
24684 +
            0x1ab0000000000000,
24685 +
            0x1860000000000000,
24686 +
            0x19d0000000000000,
24687 +
            0x1dc0000000000000,
24688 +
            0x1c70000000000000,
24689 +
            0x1ea0000000000000,
24690 +
            0x1f10000000000000,
24691 +
            0x1680000000000000,
24692 +
            0x1730000000000000,
24693 +
            0x15e0000000000000,
24694 +
            0x1450000000000000,
24695 +
            0x1040000000000000,
24696 +
            0x11f0000000000000,
24697 +
            0x1320000000000000,
24698 +
            0x1290000000000000,
24699 +
            0x3600000000000000,
24700 +
            0x37b0000000000000,
24701 +
            0x3560000000000000,
24702 +
            0x34d0000000000000,
24703 +
            0x30c0000000000000,
24704 +
            0x3170000000000000,
24705 +
            0x33a0000000000000,
24706 +
            0x3210000000000000,
24707 +
            0x3b80000000000000,
24708 +
            0x3a30000000000000,
24709 +
            0x38e0000000000000,
24710 +
            0x3950000000000000,
24711 +
            0x3d40000000000000,
24712 +
            0x3cf0000000000000,
24713 +
            0x3e20000000000000,
24714 +
            0x3f90000000000000,
24715 +
            0x2d00000000000000,
24716 +
            0x2cb0000000000000,
24717 +
            0x2e60000000000000,
24718 +
            0x2fd0000000000000,
24719 +
            0x2bc0000000000000,
24720 +
            0x2a70000000000000,
24721 +
            0x28a0000000000000,
24722 +
            0x2910000000000000,
24723 +
            0x2080000000000000,
24724 +
            0x2130000000000000,
24725 +
            0x23e0000000000000,
24726 +
            0x2250000000000000,
24727 +
            0x2640000000000000,
24728 +
            0x27f0000000000000,
24729 +
            0x2520000000000000,
24730 +
            0x2490000000000000,
24731 +
            0x6c00000000000000,
24732 +
            0x6db0000000000000,
24733 +
            0x6f60000000000000,
24734 +
            0x6ed0000000000000,
24735 +
            0x6ac0000000000000,
24736 +
            0x6b70000000000000,
24737 +
            0x69a0000000000000,
24738 +
            0x6810000000000000,
24739 +
            0x6180000000000000,
24740 +
            0x6030000000000000,
24741 +
            0x62e0000000000000,
24742 +
            0x6350000000000000,
24743 +
            0x6740000000000000,
24744 +
            0x66f0000000000000,
24745 +
            0x6420000000000000,
24746 +
            0x6590000000000000,
24747 +
            0x7700000000000000,
24748 +
            0x76b0000000000000,
24749 +
            0x7460000000000000,
24750 +
            0x75d0000000000000,
24751 +
            0x71c0000000000000,
24752 +
            0x7070000000000000,
24753 +
            0x72a0000000000000,
24754 +
            0x7310000000000000,
24755 +
            0x7a80000000000000,
24756 +
            0x7b30000000000000,
24757 +
            0x79e0000000000000,
24758 +
            0x7850000000000000,
24759 +
            0x7c40000000000000,
24760 +
            0x7df0000000000000,
24761 +
            0x7f20000000000000,
24762 +
            0x7e90000000000000,
24763 +
            0x5a00000000000000,
24764 +
            0x5bb0000000000000,
24765 +
            0x5960000000000000,
24766 +
            0x58d0000000000000,
24767 +
            0x5cc0000000000000,
24768 +
            0x5d70000000000000,
24769 +
            0x5fa0000000000000,
24770 +
            0x5e10000000000000,
24771 +
            0x5780000000000000,
24772 +
            0x5630000000000000,
24773 +
            0x54e0000000000000,
24774 +
            0x5550000000000000,
24775 +
            0x5140000000000000,
24776 +
            0x50f0000000000000,
24777 +
            0x5220000000000000,
24778 +
            0x5390000000000000,
24779 +
            0x4100000000000000,
24780 +
            0x40b0000000000000,
24781 +
            0x4260000000000000,
24782 +
            0x43d0000000000000,
24783 +
            0x47c0000000000000,
24784 +
            0x4670000000000000,
24785 +
            0x44a0000000000000,
24786 +
            0x4510000000000000,
24787 +
            0x4c80000000000000,
24788 +
            0x4d30000000000000,
24789 +
            0x4fe0000000000000,
24790 +
            0x4e50000000000000,
24791 +
            0x4a40000000000000,
24792 +
            0x4bf0000000000000,
24793 +
            0x4920000000000000,
24794 +
            0x4890000000000000,
24795 +
            0xd800000000000000,
24796 +
            0xd9b0000000000000,
24797 +
            0xdb60000000000000,
24798 +
            0xdad0000000000000,
24799 +
            0xdec0000000000000,
24800 +
            0xdf70000000000000,
24801 +
            0xdda0000000000000,
24802 +
            0xdc10000000000000,
24803 +
            0xd580000000000000,
24804 +
            0xd430000000000000,
24805 +
            0xd6e0000000000000,
24806 +
            0xd750000000000000,
24807 +
            0xd340000000000000,
24808 +
            0xd2f0000000000000,
24809 +
            0xd020000000000000,
24810 +
            0xd190000000000000,
24811 +
            0xc300000000000000,
24812 +
            0xc2b0000000000000,
24813 +
            0xc060000000000000,
24814 +
            0xc1d0000000000000,
24815 +
            0xc5c0000000000000,
24816 +
            0xc470000000000000,
24817 +
            0xc6a0000000000000,
24818 +
            0xc710000000000000,
24819 +
            0xce80000000000000,
24820 +
            0xcf30000000000000,
24821 +
            0xcde0000000000000,
24822 +
            0xcc50000000000000,
24823 +
            0xc840000000000000,
24824 +
            0xc9f0000000000000,
24825 +
            0xcb20000000000000,
24826 +
            0xca90000000000000,
24827 +
            0xee00000000000000,
24828 +
            0xefb0000000000000,
24829 +
            0xed60000000000000,
24830 +
            0xecd0000000000000,
24831 +
            0xe8c0000000000000,
24832 +
            0xe970000000000000,
24833 +
            0xeba0000000000000,
24834 +
            0xea10000000000000,
24835 +
            0xe380000000000000,
24836 +
            0xe230000000000000,
24837 +
            0xe0e0000000000000,
24838 +
            0xe150000000000000,
24839 +
            0xe540000000000000,
24840 +
            0xe4f0000000000000,
24841 +
            0xe620000000000000,
24842 +
            0xe790000000000000,
24843 +
            0xf500000000000000,
24844 +
            0xf4b0000000000000,
24845 +
            0xf660000000000000,
24846 +
            0xf7d0000000000000,
24847 +
            0xf3c0000000000000,
24848 +
            0xf270000000000000,
24849 +
            0xf0a0000000000000,
24850 +
            0xf110000000000000,
24851 +
            0xf880000000000000,
24852 +
            0xf930000000000000,
24853 +
            0xfbe0000000000000,
24854 +
            0xfa50000000000000,
24855 +
            0xfe40000000000000,
24856 +
            0xfff0000000000000,
24857 +
            0xfd20000000000000,
24858 +
            0xfc90000000000000,
24859 +
            0xb400000000000000,
24860 +
            0xb5b0000000000000,
24861 +
            0xb760000000000000,
24862 +
            0xb6d0000000000000,
24863 +
            0xb2c0000000000000,
24864 +
            0xb370000000000000,
24865 +
            0xb1a0000000000000,
24866 +
            0xb010000000000000,
24867 +
            0xb980000000000000,
24868 +
            0xb830000000000000,
24869 +
            0xbae0000000000000,
24870 +
            0xbb50000000000000,
24871 +
            0xbf40000000000000,
24872 +
            0xbef0000000000000,
24873 +
            0xbc20000000000000,
24874 +
            0xbd90000000000000,
24875 +
            0xaf00000000000000,
24876 +
            0xaeb0000000000000,
24877 +
            0xac60000000000000,
24878 +
            0xadd0000000000000,
24879 +
            0xa9c0000000000000,
24880 +
            0xa870000000000000,
24881 +
            0xaaa0000000000000,
24882 +
            0xab10000000000000,
24883 +
            0xa280000000000000,
24884 +
            0xa330000000000000,
24885 +
            0xa1e0000000000000,
24886 +
            0xa050000000000000,
24887 +
            0xa440000000000000,
24888 +
            0xa5f0000000000000,
24889 +
            0xa720000000000000,
24890 +
            0xa690000000000000,
24891 +
            0x8200000000000000,
24892 +
            0x83b0000000000000,
24893 +
            0x8160000000000000,
24894 +
            0x80d0000000000000,
24895 +
            0x84c0000000000000,
24896 +
            0x8570000000000000,
24897 +
            0x87a0000000000000,
24898 +
            0x8610000000000000,
24899 +
            0x8f80000000000000,
24900 +
            0x8e30000000000000,
24901 +
            0x8ce0000000000000,
24902 +
            0x8d50000000000000,
24903 +
            0x8940000000000000,
24904 +
            0x88f0000000000000,
24905 +
            0x8a20000000000000,
24906 +
            0x8b90000000000000,
24907 +
            0x9900000000000000,
24908 +
            0x98b0000000000000,
24909 +
            0x9a60000000000000,
24910 +
            0x9bd0000000000000,
24911 +
            0x9fc0000000000000,
24912 +
            0x9e70000000000000,
24913 +
            0x9ca0000000000000,
24914 +
            0x9d10000000000000,
24915 +
            0x9480000000000000,
24916 +
            0x9530000000000000,
24917 +
            0x97e0000000000000,
24918 +
            0x9650000000000000,
24919 +
            0x9240000000000000,
24920 +
            0x93f0000000000000,
24921 +
            0x9120000000000000,
24922 +
            0x9090000000000000,
24923 +
        ],
24924 +
        [
24925 +
            0x0000000000000000,
24926 +
            0x0001b00000000000,
24927 +
            0x0003600000000000,
24928 +
            0x0002d00000000000,
24929 +
            0x0006c00000000000,
24930 +
            0x0007700000000000,
24931 +
            0x0005a00000000000,
24932 +
            0x0004100000000000,
24933 +
            0x000d800000000000,
24934 +
            0x000c300000000000,
24935 +
            0x000ee00000000000,
24936 +
            0x000f500000000000,
24937 +
            0x000b400000000000,
24938 +
            0x000af00000000000,
24939 +
            0x0008200000000000,
24940 +
            0x0009900000000000,
24941 +
            0x001b000000000000,
24942 +
            0x001ab00000000000,
24943 +
            0x0018600000000000,
24944 +
            0x0019d00000000000,
24945 +
            0x001dc00000000000,
24946 +
            0x001c700000000000,
24947 +
            0x001ea00000000000,
24948 +
            0x001f100000000000,
24949 +
            0x0016800000000000,
24950 +
            0x0017300000000000,
24951 +
            0x0015e00000000000,
24952 +
            0x0014500000000000,
24953 +
            0x0010400000000000,
24954 +
            0x0011f00000000000,
24955 +
            0x0013200000000000,
24956 +
            0x0012900000000000,
24957 +
            0x0036000000000000,
24958 +
            0x0037b00000000000,
24959 +
            0x0035600000000000,
24960 +
            0x0034d00000000000,
24961 +
            0x0030c00000000000,
24962 +
            0x0031700000000000,
24963 +
            0x0033a00000000000,
24964 +
            0x0032100000000000,
24965 +
            0x003b800000000000,
24966 +
            0x003a300000000000,
24967 +
            0x0038e00000000000,
24968 +
            0x0039500000000000,
24969 +
            0x003d400000000000,
24970 +
            0x003cf00000000000,
24971 +
            0x003e200000000000,
24972 +
            0x003f900000000000,
24973 +
            0x002d000000000000,
24974 +
            0x002cb00000000000,
24975 +
            0x002e600000000000,
24976 +
            0x002fd00000000000,
24977 +
            0x002bc00000000000,
24978 +
            0x002a700000000000,
24979 +
            0x0028a00000000000,
24980 +
            0x0029100000000000,
24981 +
            0x0020800000000000,
24982 +
            0x0021300000000000,
24983 +
            0x0023e00000000000,
24984 +
            0x0022500000000000,
24985 +
            0x0026400000000000,
24986 +
            0x0027f00000000000,
24987 +
            0x0025200000000000,
24988 +
            0x0024900000000000,
24989 +
            0x006c000000000000,
24990 +
            0x006db00000000000,
24991 +
            0x006f600000000000,
24992 +
            0x006ed00000000000,
24993 +
            0x006ac00000000000,
24994 +
            0x006b700000000000,
24995 +
            0x0069a00000000000,
24996 +
            0x0068100000000000,
24997 +
            0x0061800000000000,
24998 +
            0x0060300000000000,
24999 +
            0x0062e00000000000,
25000 +
            0x0063500000000000,
25001 +
            0x0067400000000000,
25002 +
            0x0066f00000000000,
25003 +
            0x0064200000000000,
25004 +
            0x0065900000000000,
25005 +
            0x0077000000000000,
25006 +
            0x0076b00000000000,
25007 +
            0x0074600000000000,
25008 +
            0x0075d00000000000,
25009 +
            0x0071c00000000000,
25010 +
            0x0070700000000000,
25011 +
            0x0072a00000000000,
25012 +
            0x0073100000000000,
25013 +
            0x007a800000000000,
25014 +
            0x007b300000000000,
25015 +
            0x0079e00000000000,
25016 +
            0x0078500000000000,
25017 +
            0x007c400000000000,
25018 +
            0x007df00000000000,
25019 +
            0x007f200000000000,
25020 +
            0x007e900000000000,
25021 +
            0x005a000000000000,
25022 +
            0x005bb00000000000,
25023 +
            0x0059600000000000,
25024 +
            0x0058d00000000000,
25025 +
            0x005cc00000000000,
25026 +
            0x005d700000000000,
25027 +
            0x005fa00000000000,
25028 +
            0x005e100000000000,
25029 +
            0x0057800000000000,
25030 +
            0x0056300000000000,
25031 +
            0x0054e00000000000,
25032 +
            0x0055500000000000,
25033 +
            0x0051400000000000,
25034 +
            0x0050f00000000000,
25035 +
            0x0052200000000000,
25036 +
            0x0053900000000000,
25037 +
            0x0041000000000000,
25038 +
            0x0040b00000000000,
25039 +
            0x0042600000000000,
25040 +
            0x0043d00000000000,
25041 +
            0x0047c00000000000,
25042 +
            0x0046700000000000,
25043 +
            0x0044a00000000000,
25044 +
            0x0045100000000000,
25045 +
            0x004c800000000000,
25046 +
            0x004d300000000000,
25047 +
            0x004fe00000000000,
25048 +
            0x004e500000000000,
25049 +
            0x004a400000000000,
25050 +
            0x004bf00000000000,
25051 +
            0x0049200000000000,
25052 +
            0x0048900000000000,
25053 +
            0x00d8000000000000,
25054 +
            0x00d9b00000000000,
25055 +
            0x00db600000000000,
25056 +
            0x00dad00000000000,
25057 +
            0x00dec00000000000,
25058 +
            0x00df700000000000,
25059 +
            0x00dda00000000000,
25060 +
            0x00dc100000000000,
25061 +
            0x00d5800000000000,
25062 +
            0x00d4300000000000,
25063 +
            0x00d6e00000000000,
25064 +
            0x00d7500000000000,
25065 +
            0x00d3400000000000,
25066 +
            0x00d2f00000000000,
25067 +
            0x00d0200000000000,
25068 +
            0x00d1900000000000,
25069 +
            0x00c3000000000000,
25070 +
            0x00c2b00000000000,
25071 +
            0x00c0600000000000,
25072 +
            0x00c1d00000000000,
25073 +
            0x00c5c00000000000,
25074 +
            0x00c4700000000000,
25075 +
            0x00c6a00000000000,
25076 +
            0x00c7100000000000,
25077 +
            0x00ce800000000000,
25078 +
            0x00cf300000000000,
25079 +
            0x00cde00000000000,
25080 +
            0x00cc500000000000,
25081 +
            0x00c8400000000000,
25082 +
            0x00c9f00000000000,
25083 +
            0x00cb200000000000,
25084 +
            0x00ca900000000000,
25085 +
            0x00ee000000000000,
25086 +
            0x00efb00000000000,
25087 +
            0x00ed600000000000,
25088 +
            0x00ecd00000000000,
25089 +
            0x00e8c00000000000,
25090 +
            0x00e9700000000000,
25091 +
            0x00eba00000000000,
25092 +
            0x00ea100000000000,
25093 +
            0x00e3800000000000,
25094 +
            0x00e2300000000000,
25095 +
            0x00e0e00000000000,
25096 +
            0x00e1500000000000,
25097 +
            0x00e5400000000000,
25098 +
            0x00e4f00000000000,
25099 +
            0x00e6200000000000,
25100 +
            0x00e7900000000000,
25101 +
            0x00f5000000000000,
25102 +
            0x00f4b00000000000,
25103 +
            0x00f6600000000000,
25104 +
            0x00f7d00000000000,
25105 +
            0x00f3c00000000000,
25106 +
            0x00f2700000000000,
25107 +
            0x00f0a00000000000,
25108 +
            0x00f1100000000000,
25109 +
            0x00f8800000000000,
25110 +
            0x00f9300000000000,
25111 +
            0x00fbe00000000000,
25112 +
            0x00fa500000000000,
25113 +
            0x00fe400000000000,
25114 +
            0x00fff00000000000,
25115 +
            0x00fd200000000000,
25116 +
            0x00fc900000000000,
25117 +
            0x00b4000000000000,
25118 +
            0x00b5b00000000000,
25119 +
            0x00b7600000000000,
25120 +
            0x00b6d00000000000,
25121 +
            0x00b2c00000000000,
25122 +
            0x00b3700000000000,
25123 +
            0x00b1a00000000000,
25124 +
            0x00b0100000000000,
25125 +
            0x00b9800000000000,
25126 +
            0x00b8300000000000,
25127 +
            0x00bae00000000000,
25128 +
            0x00bb500000000000,
25129 +
            0x00bf400000000000,
25130 +
            0x00bef00000000000,
25131 +
            0x00bc200000000000,
25132 +
            0x00bd900000000000,
25133 +
            0x00af000000000000,
25134 +
            0x00aeb00000000000,
25135 +
            0x00ac600000000000,
25136 +
            0x00add00000000000,
25137 +
            0x00a9c00000000000,
25138 +
            0x00a8700000000000,
25139 +
            0x00aaa00000000000,
25140 +
            0x00ab100000000000,
25141 +
            0x00a2800000000000,
25142 +
            0x00a3300000000000,
25143 +
            0x00a1e00000000000,
25144 +
            0x00a0500000000000,
25145 +
            0x00a4400000000000,
25146 +
            0x00a5f00000000000,
25147 +
            0x00a7200000000000,
25148 +
            0x00a6900000000000,
25149 +
            0x0082000000000000,
25150 +
            0x0083b00000000000,
25151 +
            0x0081600000000000,
25152 +
            0x0080d00000000000,
25153 +
            0x0084c00000000000,
25154 +
            0x0085700000000000,
25155 +
            0x0087a00000000000,
25156 +
            0x0086100000000000,
25157 +
            0x008f800000000000,
25158 +
            0x008e300000000000,
25159 +
            0x008ce00000000000,
25160 +
            0x008d500000000000,
25161 +
            0x0089400000000000,
25162 +
            0x0088f00000000000,
25163 +
            0x008a200000000000,
25164 +
            0x008b900000000000,
25165 +
            0x0099000000000000,
25166 +
            0x0098b00000000000,
25167 +
            0x009a600000000000,
25168 +
            0x009bd00000000000,
25169 +
            0x009fc00000000000,
25170 +
            0x009e700000000000,
25171 +
            0x009ca00000000000,
25172 +
            0x009d100000000000,
25173 +
            0x0094800000000000,
25174 +
            0x0095300000000000,
25175 +
            0x0097e00000000000,
25176 +
            0x0096500000000000,
25177 +
            0x0092400000000000,
25178 +
            0x0093f00000000000,
25179 +
            0x0091200000000000,
25180 +
            0x0090900000000000,
25181 +
        ],
25182 +
        [
25183 +
            0x0000000000000000,
25184 +
            0x000001b000000000,
25185 +
            0x0000036000000000,
25186 +
            0x000002d000000000,
25187 +
            0x000006c000000000,
25188 +
            0x0000077000000000,
25189 +
            0x000005a000000000,
25190 +
            0x0000041000000000,
25191 +
            0x00000d8000000000,
25192 +
            0x00000c3000000000,
25193 +
            0x00000ee000000000,
25194 +
            0x00000f5000000000,
25195 +
            0x00000b4000000000,
25196 +
            0x00000af000000000,
25197 +
            0x0000082000000000,
25198 +
            0x0000099000000000,
25199 +
            0x00001b0000000000,
25200 +
            0x00001ab000000000,
25201 +
            0x0000186000000000,
25202 +
            0x000019d000000000,
25203 +
            0x00001dc000000000,
25204 +
            0x00001c7000000000,
25205 +
            0x00001ea000000000,
25206 +
            0x00001f1000000000,
25207 +
            0x0000168000000000,
25208 +
            0x0000173000000000,
25209 +
            0x000015e000000000,
25210 +
            0x0000145000000000,
25211 +
            0x0000104000000000,
25212 +
            0x000011f000000000,
25213 +
            0x0000132000000000,
25214 +
            0x0000129000000000,
25215 +
            0x0000360000000000,
25216 +
            0x000037b000000000,
25217 +
            0x0000356000000000,
25218 +
            0x000034d000000000,
25219 +
            0x000030c000000000,
25220 +
            0x0000317000000000,
25221 +
            0x000033a000000000,
25222 +
            0x0000321000000000,
25223 +
            0x00003b8000000000,
25224 +
            0x00003a3000000000,
25225 +
            0x000038e000000000,
25226 +
            0x0000395000000000,
25227 +
            0x00003d4000000000,
25228 +
            0x00003cf000000000,
25229 +
            0x00003e2000000000,
25230 +
            0x00003f9000000000,
25231 +
            0x00002d0000000000,
25232 +
            0x00002cb000000000,
25233 +
            0x00002e6000000000,
25234 +
            0x00002fd000000000,
25235 +
            0x00002bc000000000,
25236 +
            0x00002a7000000000,
25237 +
            0x000028a000000000,
25238 +
            0x0000291000000000,
25239 +
            0x0000208000000000,
25240 +
            0x0000213000000000,
25241 +
            0x000023e000000000,
25242 +
            0x0000225000000000,
25243 +
            0x0000264000000000,
25244 +
            0x000027f000000000,
25245 +
            0x0000252000000000,
25246 +
            0x0000249000000000,
25247 +
            0x00006c0000000000,
25248 +
            0x00006db000000000,
25249 +
            0x00006f6000000000,
25250 +
            0x00006ed000000000,
25251 +
            0x00006ac000000000,
25252 +
            0x00006b7000000000,
25253 +
            0x000069a000000000,
25254 +
            0x0000681000000000,
25255 +
            0x0000618000000000,
25256 +
            0x0000603000000000,
25257 +
            0x000062e000000000,
25258 +
            0x0000635000000000,
25259 +
            0x0000674000000000,
25260 +
            0x000066f000000000,
25261 +
            0x0000642000000000,
25262 +
            0x0000659000000000,
25263 +
            0x0000770000000000,
25264 +
            0x000076b000000000,
25265 +
            0x0000746000000000,
25266 +
            0x000075d000000000,
25267 +
            0x000071c000000000,
25268 +
            0x0000707000000000,
25269 +
            0x000072a000000000,
25270 +
            0x0000731000000000,
25271 +
            0x00007a8000000000,
25272 +
            0x00007b3000000000,
25273 +
            0x000079e000000000,
25274 +
            0x0000785000000000,
25275 +
            0x00007c4000000000,
25276 +
            0x00007df000000000,
25277 +
            0x00007f2000000000,
25278 +
            0x00007e9000000000,
25279 +
            0x00005a0000000000,
25280 +
            0x00005bb000000000,
25281 +
            0x0000596000000000,
25282 +
            0x000058d000000000,
25283 +
            0x00005cc000000000,
25284 +
            0x00005d7000000000,
25285 +
            0x00005fa000000000,
25286 +
            0x00005e1000000000,
25287 +
            0x0000578000000000,
25288 +
            0x0000563000000000,
25289 +
            0x000054e000000000,
25290 +
            0x0000555000000000,
25291 +
            0x0000514000000000,
25292 +
            0x000050f000000000,
25293 +
            0x0000522000000000,
25294 +
            0x0000539000000000,
25295 +
            0x0000410000000000,
25296 +
            0x000040b000000000,
25297 +
            0x0000426000000000,
25298 +
            0x000043d000000000,
25299 +
            0x000047c000000000,
25300 +
            0x0000467000000000,
25301 +
            0x000044a000000000,
25302 +
            0x0000451000000000,
25303 +
            0x00004c8000000000,
25304 +
            0x00004d3000000000,
25305 +
            0x00004fe000000000,
25306 +
            0x00004e5000000000,
25307 +
            0x00004a4000000000,
25308 +
            0x00004bf000000000,
25309 +
            0x0000492000000000,
25310 +
            0x0000489000000000,
25311 +
            0x0000d80000000000,
25312 +
            0x0000d9b000000000,
25313 +
            0x0000db6000000000,
25314 +
            0x0000dad000000000,
25315 +
            0x0000dec000000000,
25316 +
            0x0000df7000000000,
25317 +
            0x0000dda000000000,
25318 +
            0x0000dc1000000000,
25319 +
            0x0000d58000000000,
25320 +
            0x0000d43000000000,
25321 +
            0x0000d6e000000000,
25322 +
            0x0000d75000000000,
25323 +
            0x0000d34000000000,
25324 +
            0x0000d2f000000000,
25325 +
            0x0000d02000000000,
25326 +
            0x0000d19000000000,
25327 +
            0x0000c30000000000,
25328 +
            0x0000c2b000000000,
25329 +
            0x0000c06000000000,
25330 +
            0x0000c1d000000000,
25331 +
            0x0000c5c000000000,
25332 +
            0x0000c47000000000,
25333 +
            0x0000c6a000000000,
25334 +
            0x0000c71000000000,
25335 +
            0x0000ce8000000000,
25336 +
            0x0000cf3000000000,
25337 +
            0x0000cde000000000,
25338 +
            0x0000cc5000000000,
25339 +
            0x0000c84000000000,
25340 +
            0x0000c9f000000000,
25341 +
            0x0000cb2000000000,
25342 +
            0x0000ca9000000000,
25343 +
            0x0000ee0000000000,
25344 +
            0x0000efb000000000,
25345 +
            0x0000ed6000000000,
25346 +
            0x0000ecd000000000,
25347 +
            0x0000e8c000000000,
25348 +
            0x0000e97000000000,
25349 +
            0x0000eba000000000,
25350 +
            0x0000ea1000000000,
25351 +
            0x0000e38000000000,
25352 +
            0x0000e23000000000,
25353 +
            0x0000e0e000000000,
25354 +
            0x0000e15000000000,
25355 +
            0x0000e54000000000,
25356 +
            0x0000e4f000000000,
25357 +
            0x0000e62000000000,
25358 +
            0x0000e79000000000,
25359 +
            0x0000f50000000000,
25360 +
            0x0000f4b000000000,
25361 +
            0x0000f66000000000,
25362 +
            0x0000f7d000000000,
25363 +
            0x0000f3c000000000,
25364 +
            0x0000f27000000000,
25365 +
            0x0000f0a000000000,
25366 +
            0x0000f11000000000,
25367 +
            0x0000f88000000000,
25368 +
            0x0000f93000000000,
25369 +
            0x0000fbe000000000,
25370 +
            0x0000fa5000000000,
25371 +
            0x0000fe4000000000,
25372 +
            0x0000fff000000000,
25373 +
            0x0000fd2000000000,
25374 +
            0x0000fc9000000000,
25375 +
            0x0000b40000000000,
25376 +
            0x0000b5b000000000,
25377 +
            0x0000b76000000000,
25378 +
            0x0000b6d000000000,
25379 +
            0x0000b2c000000000,
25380 +
            0x0000b37000000000,
25381 +
            0x0000b1a000000000,
25382 +
            0x0000b01000000000,
25383 +
            0x0000b98000000000,
25384 +
            0x0000b83000000000,
25385 +
            0x0000bae000000000,
25386 +
            0x0000bb5000000000,
25387 +
            0x0000bf4000000000,
25388 +
            0x0000bef000000000,
25389 +
            0x0000bc2000000000,
25390 +
            0x0000bd9000000000,
25391 +
            0x0000af0000000000,
25392 +
            0x0000aeb000000000,
25393 +
            0x0000ac6000000000,
25394 +
            0x0000add000000000,
25395 +
            0x0000a9c000000000,
25396 +
            0x0000a87000000000,
25397 +
            0x0000aaa000000000,
25398 +
            0x0000ab1000000000,
25399 +
            0x0000a28000000000,
25400 +
            0x0000a33000000000,
25401 +
            0x0000a1e000000000,
25402 +
            0x0000a05000000000,
25403 +
            0x0000a44000000000,
25404 +
            0x0000a5f000000000,
25405 +
            0x0000a72000000000,
25406 +
            0x0000a69000000000,
25407 +
            0x0000820000000000,
25408 +
            0x000083b000000000,
25409 +
            0x0000816000000000,
25410 +
            0x000080d000000000,
25411 +
            0x000084c000000000,
25412 +
            0x0000857000000000,
25413 +
            0x000087a000000000,
25414 +
            0x0000861000000000,
25415 +
            0x00008f8000000000,
25416 +
            0x00008e3000000000,
25417 +
            0x00008ce000000000,
25418 +
            0x00008d5000000000,
25419 +
            0x0000894000000000,
25420 +
            0x000088f000000000,
25421 +
            0x00008a2000000000,
25422 +
            0x00008b9000000000,
25423 +
            0x0000990000000000,
25424 +
            0x000098b000000000,
25425 +
            0x00009a6000000000,
25426 +
            0x00009bd000000000,
25427 +
            0x00009fc000000000,
25428 +
            0x00009e7000000000,
25429 +
            0x00009ca000000000,
25430 +
            0x00009d1000000000,
25431 +
            0x0000948000000000,
25432 +
            0x0000953000000000,
25433 +
            0x000097e000000000,
25434 +
            0x0000965000000000,
25435 +
            0x0000924000000000,
25436 +
            0x000093f000000000,
25437 +
            0x0000912000000000,
25438 +
            0x0000909000000000,
25439 +
        ],
25440 +
        [
25441 +
            0x0000000000000000,
25442 +
            0x00000001b0000000,
25443 +
            0x0000000360000000,
25444 +
            0x00000002d0000000,
25445 +
            0x00000006c0000000,
25446 +
            0x0000000770000000,
25447 +
            0x00000005a0000000,
25448 +
            0x0000000410000000,
25449 +
            0x0000000d80000000,
25450 +
            0x0000000c30000000,
25451 +
            0x0000000ee0000000,
25452 +
            0x0000000f50000000,
25453 +
            0x0000000b40000000,
25454 +
            0x0000000af0000000,
25455 +
            0x0000000820000000,
25456 +
            0x0000000990000000,
25457 +
            0x0000001b00000000,
25458 +
            0x0000001ab0000000,
25459 +
            0x0000001860000000,
25460 +
            0x00000019d0000000,
25461 +
            0x0000001dc0000000,
25462 +
            0x0000001c70000000,
25463 +
            0x0000001ea0000000,
25464 +
            0x0000001f10000000,
25465 +
            0x0000001680000000,
25466 +
            0x0000001730000000,
25467 +
            0x00000015e0000000,
25468 +
            0x0000001450000000,
25469 +
            0x0000001040000000,
25470 +
            0x00000011f0000000,
25471 +
            0x0000001320000000,
25472 +
            0x0000001290000000,
25473 +
            0x0000003600000000,
25474 +
            0x00000037b0000000,
25475 +
            0x0000003560000000,
25476 +
            0x00000034d0000000,
25477 +
            0x00000030c0000000,
25478 +
            0x0000003170000000,
25479 +
            0x00000033a0000000,
25480 +
            0x0000003210000000,
25481 +
            0x0000003b80000000,
25482 +
            0x0000003a30000000,
25483 +
            0x00000038e0000000,
25484 +
            0x0000003950000000,
25485 +
            0x0000003d40000000,
25486 +
            0x0000003cf0000000,
25487 +
            0x0000003e20000000,
25488 +
            0x0000003f90000000,
25489 +
            0x0000002d00000000,
25490 +
            0x0000002cb0000000,
25491 +
            0x0000002e60000000,
25492 +
            0x0000002fd0000000,
25493 +
            0x0000002bc0000000,
25494 +
            0x0000002a70000000,
25495 +
            0x00000028a0000000,
25496 +
            0x0000002910000000,
25497 +
            0x0000002080000000,
25498 +
            0x0000002130000000,
25499 +
            0x00000023e0000000,
25500 +
            0x0000002250000000,
25501 +
            0x0000002640000000,
25502 +
            0x00000027f0000000,
25503 +
            0x0000002520000000,
25504 +
            0x0000002490000000,
25505 +
            0x0000006c00000000,
25506 +
            0x0000006db0000000,
25507 +
            0x0000006f60000000,
25508 +
            0x0000006ed0000000,
25509 +
            0x0000006ac0000000,
25510 +
            0x0000006b70000000,
25511 +
            0x00000069a0000000,
25512 +
            0x0000006810000000,
25513 +
            0x0000006180000000,
25514 +
            0x0000006030000000,
25515 +
            0x00000062e0000000,
25516 +
            0x0000006350000000,
25517 +
            0x0000006740000000,
25518 +
            0x00000066f0000000,
25519 +
            0x0000006420000000,
25520 +
            0x0000006590000000,
25521 +
            0x0000007700000000,
25522 +
            0x00000076b0000000,
25523 +
            0x0000007460000000,
25524 +
            0x00000075d0000000,
25525 +
            0x00000071c0000000,
25526 +
            0x0000007070000000,
25527 +
            0x00000072a0000000,
25528 +
            0x0000007310000000,
25529 +
            0x0000007a80000000,
25530 +
            0x0000007b30000000,
25531 +
            0x00000079e0000000,
25532 +
            0x0000007850000000,
25533 +
            0x0000007c40000000,
25534 +
            0x0000007df0000000,
25535 +
            0x0000007f20000000,
25536 +
            0x0000007e90000000,
25537 +
            0x0000005a00000000,
25538 +
            0x0000005bb0000000,
25539 +
            0x0000005960000000,
25540 +
            0x00000058d0000000,
25541 +
            0x0000005cc0000000,
25542 +
            0x0000005d70000000,
25543 +
            0x0000005fa0000000,
25544 +
            0x0000005e10000000,
25545 +
            0x0000005780000000,
25546 +
            0x0000005630000000,
25547 +
            0x00000054e0000000,
25548 +
            0x0000005550000000,
25549 +
            0x0000005140000000,
25550 +
            0x00000050f0000000,
25551 +
            0x0000005220000000,
25552 +
            0x0000005390000000,
25553 +
            0x0000004100000000,
25554 +
            0x00000040b0000000,
25555 +
            0x0000004260000000,
25556 +
            0x00000043d0000000,
25557 +
            0x00000047c0000000,
25558 +
            0x0000004670000000,
25559 +
            0x00000044a0000000,
25560 +
            0x0000004510000000,
25561 +
            0x0000004c80000000,
25562 +
            0x0000004d30000000,
25563 +
            0x0000004fe0000000,
25564 +
            0x0000004e50000000,
25565 +
            0x0000004a40000000,
25566 +
            0x0000004bf0000000,
25567 +
            0x0000004920000000,
25568 +
            0x0000004890000000,
25569 +
            0x000000d800000000,
25570 +
            0x000000d9b0000000,
25571 +
            0x000000db60000000,
25572 +
            0x000000dad0000000,
25573 +
            0x000000dec0000000,
25574 +
            0x000000df70000000,
25575 +
            0x000000dda0000000,
25576 +
            0x000000dc10000000,
25577 +
            0x000000d580000000,
25578 +
            0x000000d430000000,
25579 +
            0x000000d6e0000000,
25580 +
            0x000000d750000000,
25581 +
            0x000000d340000000,
25582 +
            0x000000d2f0000000,
25583 +
            0x000000d020000000,
25584 +
            0x000000d190000000,
25585 +
            0x000000c300000000,
25586 +
            0x000000c2b0000000,
25587 +
            0x000000c060000000,
25588 +
            0x000000c1d0000000,
25589 +
            0x000000c5c0000000,
25590 +
            0x000000c470000000,
25591 +
            0x000000c6a0000000,
25592 +
            0x000000c710000000,
25593 +
            0x000000ce80000000,
25594 +
            0x000000cf30000000,
25595 +
            0x000000cde0000000,
25596 +
            0x000000cc50000000,
25597 +
            0x000000c840000000,
25598 +
            0x000000c9f0000000,
25599 +
            0x000000cb20000000,
25600 +
            0x000000ca90000000,
25601 +
            0x000000ee00000000,
25602 +
            0x000000efb0000000,
25603 +
            0x000000ed60000000,
25604 +
            0x000000ecd0000000,
25605 +
            0x000000e8c0000000,
25606 +
            0x000000e970000000,
25607 +
            0x000000eba0000000,
25608 +
            0x000000ea10000000,
25609 +
            0x000000e380000000,
25610 +
            0x000000e230000000,
25611 +
            0x000000e0e0000000,
25612 +
            0x000000e150000000,
25613 +
            0x000000e540000000,
25614 +
            0x000000e4f0000000,
25615 +
            0x000000e620000000,
25616 +
            0x000000e790000000,
25617 +
            0x000000f500000000,
25618 +
            0x000000f4b0000000,
25619 +
            0x000000f660000000,
25620 +
            0x000000f7d0000000,
25621 +
            0x000000f3c0000000,
25622 +
            0x000000f270000000,
25623 +
            0x000000f0a0000000,
25624 +
            0x000000f110000000,
25625 +
            0x000000f880000000,
25626 +
            0x000000f930000000,
25627 +
            0x000000fbe0000000,
25628 +
            0x000000fa50000000,
25629 +
            0x000000fe40000000,
25630 +
            0x000000fff0000000,
25631 +
            0x000000fd20000000,
25632 +
            0x000000fc90000000,
25633 +
            0x000000b400000000,
25634 +
            0x000000b5b0000000,
25635 +
            0x000000b760000000,
25636 +
            0x000000b6d0000000,
25637 +
            0x000000b2c0000000,
25638 +
            0x000000b370000000,
25639 +
            0x000000b1a0000000,
25640 +
            0x000000b010000000,
25641 +
            0x000000b980000000,
25642 +
            0x000000b830000000,
25643 +
            0x000000bae0000000,
25644 +
            0x000000bb50000000,
25645 +
            0x000000bf40000000,
25646 +
            0x000000bef0000000,
25647 +
            0x000000bc20000000,
25648 +
            0x000000bd90000000,
25649 +
            0x000000af00000000,
25650 +
            0x000000aeb0000000,
25651 +
            0x000000ac60000000,
25652 +
            0x000000add0000000,
25653 +
            0x000000a9c0000000,
25654 +
            0x000000a870000000,
25655 +
            0x000000aaa0000000,
25656 +
            0x000000ab10000000,
25657 +
            0x000000a280000000,
25658 +
            0x000000a330000000,
25659 +
            0x000000a1e0000000,
25660 +
            0x000000a050000000,
25661 +
            0x000000a440000000,
25662 +
            0x000000a5f0000000,
25663 +
            0x000000a720000000,
25664 +
            0x000000a690000000,
25665 +
            0x0000008200000000,
25666 +
            0x00000083b0000000,
25667 +
            0x0000008160000000,
25668 +
            0x00000080d0000000,
25669 +
            0x00000084c0000000,
25670 +
            0x0000008570000000,
25671 +
            0x00000087a0000000,
25672 +
            0x0000008610000000,
25673 +
            0x0000008f80000000,
25674 +
            0x0000008e30000000,
25675 +
            0x0000008ce0000000,
25676 +
            0x0000008d50000000,
25677 +
            0x0000008940000000,
25678 +
            0x00000088f0000000,
25679 +
            0x0000008a20000000,
25680 +
            0x0000008b90000000,
25681 +
            0x0000009900000000,
25682 +
            0x00000098b0000000,
25683 +
            0x0000009a60000000,
25684 +
            0x0000009bd0000000,
25685 +
            0x0000009fc0000000,
25686 +
            0x0000009e70000000,
25687 +
            0x0000009ca0000000,
25688 +
            0x0000009d10000000,
25689 +
            0x0000009480000000,
25690 +
            0x0000009530000000,
25691 +
            0x00000097e0000000,
25692 +
            0x0000009650000000,
25693 +
            0x0000009240000000,
25694 +
            0x00000093f0000000,
25695 +
            0x0000009120000000,
25696 +
            0x0000009090000000,
25697 +
        ],
25698 +
        [
25699 +
            0x0000000000000000,
25700 +
            0x0000000001b00000,
25701 +
            0x0000000003600000,
25702 +
            0x0000000002d00000,
25703 +
            0x0000000006c00000,
25704 +
            0x0000000007700000,
25705 +
            0x0000000005a00000,
25706 +
            0x0000000004100000,
25707 +
            0x000000000d800000,
25708 +
            0x000000000c300000,
25709 +
            0x000000000ee00000,
25710 +
            0x000000000f500000,
25711 +
            0x000000000b400000,
25712 +
            0x000000000af00000,
25713 +
            0x0000000008200000,
25714 +
            0x0000000009900000,
25715 +
            0x000000001b000000,
25716 +
            0x000000001ab00000,
25717 +
            0x0000000018600000,
25718 +
            0x0000000019d00000,
25719 +
            0x000000001dc00000,
25720 +
            0x000000001c700000,
25721 +
            0x000000001ea00000,
25722 +
            0x000000001f100000,
25723 +
            0x0000000016800000,
25724 +
            0x0000000017300000,
25725 +
            0x0000000015e00000,
25726 +
            0x0000000014500000,
25727 +
            0x0000000010400000,
25728 +
            0x0000000011f00000,
25729 +
            0x0000000013200000,
25730 +
            0x0000000012900000,
25731 +
            0x0000000036000000,
25732 +
            0x0000000037b00000,
25733 +
            0x0000000035600000,
25734 +
            0x0000000034d00000,
25735 +
            0x0000000030c00000,
25736 +
            0x0000000031700000,
25737 +
            0x0000000033a00000,
25738 +
            0x0000000032100000,
25739 +
            0x000000003b800000,
25740 +
            0x000000003a300000,
25741 +
            0x0000000038e00000,
25742 +
            0x0000000039500000,
25743 +
            0x000000003d400000,
25744 +
            0x000000003cf00000,
25745 +
            0x000000003e200000,
25746 +
            0x000000003f900000,
25747 +
            0x000000002d000000,
25748 +
            0x000000002cb00000,
25749 +
            0x000000002e600000,
25750 +
            0x000000002fd00000,
25751 +
            0x000000002bc00000,
25752 +
            0x000000002a700000,
25753 +
            0x0000000028a00000,
25754 +
            0x0000000029100000,
25755 +
            0x0000000020800000,
25756 +
            0x0000000021300000,
25757 +
            0x0000000023e00000,
25758 +
            0x0000000022500000,
25759 +
            0x0000000026400000,
25760 +
            0x0000000027f00000,
25761 +
            0x0000000025200000,
25762 +
            0x0000000024900000,
25763 +
            0x000000006c000000,
25764 +
            0x000000006db00000,
25765 +
            0x000000006f600000,
25766 +
            0x000000006ed00000,
25767 +
            0x000000006ac00000,
25768 +
            0x000000006b700000,
25769 +
            0x0000000069a00000,
25770 +
            0x0000000068100000,
25771 +
            0x0000000061800000,
25772 +
            0x0000000060300000,
25773 +
            0x0000000062e00000,
25774 +
            0x0000000063500000,
25775 +
            0x0000000067400000,
25776 +
            0x0000000066f00000,
25777 +
            0x0000000064200000,
25778 +
            0x0000000065900000,
25779 +
            0x0000000077000000,
25780 +
            0x0000000076b00000,
25781 +
            0x0000000074600000,
25782 +
            0x0000000075d00000,
25783 +
            0x0000000071c00000,
25784 +
            0x0000000070700000,
25785 +
            0x0000000072a00000,
25786 +
            0x0000000073100000,
25787 +
            0x000000007a800000,
25788 +
            0x000000007b300000,
25789 +
            0x0000000079e00000,
25790 +
            0x0000000078500000,
25791 +
            0x000000007c400000,
25792 +
            0x000000007df00000,
25793 +
            0x000000007f200000,
25794 +
            0x000000007e900000,
25795 +
            0x000000005a000000,
25796 +
            0x000000005bb00000,
25797 +
            0x0000000059600000,
25798 +
            0x0000000058d00000,
25799 +
            0x000000005cc00000,
25800 +
            0x000000005d700000,
25801 +
            0x000000005fa00000,
25802 +
            0x000000005e100000,
25803 +
            0x0000000057800000,
25804 +
            0x0000000056300000,
25805 +
            0x0000000054e00000,
25806 +
            0x0000000055500000,
25807 +
            0x0000000051400000,
25808 +
            0x0000000050f00000,
25809 +
            0x0000000052200000,
25810 +
            0x0000000053900000,
25811 +
            0x0000000041000000,
25812 +
            0x0000000040b00000,
25813 +
            0x0000000042600000,
25814 +
            0x0000000043d00000,
25815 +
            0x0000000047c00000,
25816 +
            0x0000000046700000,
25817 +
            0x0000000044a00000,
25818 +
            0x0000000045100000,
25819 +
            0x000000004c800000,
25820 +
            0x000000004d300000,
25821 +
            0x000000004fe00000,
25822 +
            0x000000004e500000,
25823 +
            0x000000004a400000,
25824 +
            0x000000004bf00000,
25825 +
            0x0000000049200000,
25826 +
            0x0000000048900000,
25827 +
            0x00000000d8000000,
25828 +
            0x00000000d9b00000,
25829 +
            0x00000000db600000,
25830 +
            0x00000000dad00000,
25831 +
            0x00000000dec00000,
25832 +
            0x00000000df700000,
25833 +
            0x00000000dda00000,
25834 +
            0x00000000dc100000,
25835 +
            0x00000000d5800000,
25836 +
            0x00000000d4300000,
25837 +
            0x00000000d6e00000,
25838 +
            0x00000000d7500000,
25839 +
            0x00000000d3400000,
25840 +
            0x00000000d2f00000,
25841 +
            0x00000000d0200000,
25842 +
            0x00000000d1900000,
25843 +
            0x00000000c3000000,
25844 +
            0x00000000c2b00000,
25845 +
            0x00000000c0600000,
25846 +
            0x00000000c1d00000,
25847 +
            0x00000000c5c00000,
25848 +
            0x00000000c4700000,
25849 +
            0x00000000c6a00000,
25850 +
            0x00000000c7100000,
25851 +
            0x00000000ce800000,
25852 +
            0x00000000cf300000,
25853 +
            0x00000000cde00000,
25854 +
            0x00000000cc500000,
25855 +
            0x00000000c8400000,
25856 +
            0x00000000c9f00000,
25857 +
            0x00000000cb200000,
25858 +
            0x00000000ca900000,
25859 +
            0x00000000ee000000,
25860 +
            0x00000000efb00000,
25861 +
            0x00000000ed600000,
25862 +
            0x00000000ecd00000,
25863 +
            0x00000000e8c00000,
25864 +
            0x00000000e9700000,
25865 +
            0x00000000eba00000,
25866 +
            0x00000000ea100000,
25867 +
            0x00000000e3800000,
25868 +
            0x00000000e2300000,
25869 +
            0x00000000e0e00000,
25870 +
            0x00000000e1500000,
25871 +
            0x00000000e5400000,
25872 +
            0x00000000e4f00000,
25873 +
            0x00000000e6200000,
25874 +
            0x00000000e7900000,
25875 +
            0x00000000f5000000,
25876 +
            0x00000000f4b00000,
25877 +
            0x00000000f6600000,
25878 +
            0x00000000f7d00000,
25879 +
            0x00000000f3c00000,
25880 +
            0x00000000f2700000,
25881 +
            0x00000000f0a00000,
25882 +
            0x00000000f1100000,
25883 +
            0x00000000f8800000,
25884 +
            0x00000000f9300000,
25885 +
            0x00000000fbe00000,
25886 +
            0x00000000fa500000,
25887 +
            0x00000000fe400000,
25888 +
            0x00000000fff00000,
25889 +
            0x00000000fd200000,
25890 +
            0x00000000fc900000,
25891 +
            0x00000000b4000000,
25892 +
            0x00000000b5b00000,
25893 +
            0x00000000b7600000,
25894 +
            0x00000000b6d00000,
25895 +
            0x00000000b2c00000,
25896 +
            0x00000000b3700000,
25897 +
            0x00000000b1a00000,
25898 +
            0x00000000b0100000,
25899 +
            0x00000000b9800000,
25900 +
            0x00000000b8300000,
25901 +
            0x00000000bae00000,
25902 +
            0x00000000bb500000,
25903 +
            0x00000000bf400000,
25904 +
            0x00000000bef00000,
25905 +
            0x00000000bc200000,
25906 +
            0x00000000bd900000,
25907 +
            0x00000000af000000,
25908 +
            0x00000000aeb00000,
25909 +
            0x00000000ac600000,
25910 +
            0x00000000add00000,
25911 +
            0x00000000a9c00000,
25912 +
            0x00000000a8700000,
25913 +
            0x00000000aaa00000,
25914 +
            0x00000000ab100000,
25915 +
            0x00000000a2800000,
25916 +
            0x00000000a3300000,
25917 +
            0x00000000a1e00000,
25918 +
            0x00000000a0500000,
25919 +
            0x00000000a4400000,
25920 +
            0x00000000a5f00000,
25921 +
            0x00000000a7200000,
25922 +
            0x00000000a6900000,
25923 +
            0x0000000082000000,
25924 +
            0x0000000083b00000,
25925 +
            0x0000000081600000,
25926 +
            0x0000000080d00000,
25927 +
            0x0000000084c00000,
25928 +
            0x0000000085700000,
25929 +
            0x0000000087a00000,
25930 +
            0x0000000086100000,
25931 +
            0x000000008f800000,
25932 +
            0x000000008e300000,
25933 +
            0x000000008ce00000,
25934 +
            0x000000008d500000,
25935 +
            0x0000000089400000,
25936 +
            0x0000000088f00000,
25937 +
            0x000000008a200000,
25938 +
            0x000000008b900000,
25939 +
            0x0000000099000000,
25940 +
            0x0000000098b00000,
25941 +
            0x000000009a600000,
25942 +
            0x000000009bd00000,
25943 +
            0x000000009fc00000,
25944 +
            0x000000009e700000,
25945 +
            0x000000009ca00000,
25946 +
            0x000000009d100000,
25947 +
            0x0000000094800000,
25948 +
            0x0000000095300000,
25949 +
            0x0000000097e00000,
25950 +
            0x0000000096500000,
25951 +
            0x0000000092400000,
25952 +
            0x0000000093f00000,
25953 +
            0x0000000091200000,
25954 +
            0x0000000090900000,
25955 +
        ],
25956 +
        [
25957 +
            0x0000000000000000,
25958 +
            0x000000000001b000,
25959 +
            0x0000000000036000,
25960 +
            0x000000000002d000,
25961 +
            0x000000000006c000,
25962 +
            0x0000000000077000,
25963 +
            0x000000000005a000,
25964 +
            0x0000000000041000,
25965 +
            0x00000000000d8000,
25966 +
            0x00000000000c3000,
25967 +
            0x00000000000ee000,
25968 +
            0x00000000000f5000,
25969 +
            0x00000000000b4000,
25970 +
            0x00000000000af000,
25971 +
            0x0000000000082000,
25972 +
            0x0000000000099000,
25973 +
            0x00000000001b0000,
25974 +
            0x00000000001ab000,
25975 +
            0x0000000000186000,
25976 +
            0x000000000019d000,
25977 +
            0x00000000001dc000,
25978 +
            0x00000000001c7000,
25979 +
            0x00000000001ea000,
25980 +
            0x00000000001f1000,
25981 +
            0x0000000000168000,
25982 +
            0x0000000000173000,
25983 +
            0x000000000015e000,
25984 +
            0x0000000000145000,
25985 +
            0x0000000000104000,
25986 +
            0x000000000011f000,
25987 +
            0x0000000000132000,
25988 +
            0x0000000000129000,
25989 +
            0x0000000000360000,
25990 +
            0x000000000037b000,
25991 +
            0x0000000000356000,
25992 +
            0x000000000034d000,
25993 +
            0x000000000030c000,
25994 +
            0x0000000000317000,
25995 +
            0x000000000033a000,
25996 +
            0x0000000000321000,
25997 +
            0x00000000003b8000,
25998 +
            0x00000000003a3000,
25999 +
            0x000000000038e000,
26000 +
            0x0000000000395000,
26001 +
            0x00000000003d4000,
26002 +
            0x00000000003cf000,
26003 +
            0x00000000003e2000,
26004 +
            0x00000000003f9000,
26005 +
            0x00000000002d0000,
26006 +
            0x00000000002cb000,
26007 +
            0x00000000002e6000,
26008 +
            0x00000000002fd000,
26009 +
            0x00000000002bc000,
26010 +
            0x00000000002a7000,
26011 +
            0x000000000028a000,
26012 +
            0x0000000000291000,
26013 +
            0x0000000000208000,
26014 +
            0x0000000000213000,
26015 +
            0x000000000023e000,
26016 +
            0x0000000000225000,
26017 +
            0x0000000000264000,
26018 +
            0x000000000027f000,
26019 +
            0x0000000000252000,
26020 +
            0x0000000000249000,
26021 +
            0x00000000006c0000,
26022 +
            0x00000000006db000,
26023 +
            0x00000000006f6000,
26024 +
            0x00000000006ed000,
26025 +
            0x00000000006ac000,
26026 +
            0x00000000006b7000,
26027 +
            0x000000000069a000,
26028 +
            0x0000000000681000,
26029 +
            0x0000000000618000,
26030 +
            0x0000000000603000,
26031 +
            0x000000000062e000,
26032 +
            0x0000000000635000,
26033 +
            0x0000000000674000,
26034 +
            0x000000000066f000,
26035 +
            0x0000000000642000,
26036 +
            0x0000000000659000,
26037 +
            0x0000000000770000,
26038 +
            0x000000000076b000,
26039 +
            0x0000000000746000,
26040 +
            0x000000000075d000,
26041 +
            0x000000000071c000,
26042 +
            0x0000000000707000,
26043 +
            0x000000000072a000,
26044 +
            0x0000000000731000,
26045 +
            0x00000000007a8000,
26046 +
            0x00000000007b3000,
26047 +
            0x000000000079e000,
26048 +
            0x0000000000785000,
26049 +
            0x00000000007c4000,
26050 +
            0x00000000007df000,
26051 +
            0x00000000007f2000,
26052 +
            0x00000000007e9000,
26053 +
            0x00000000005a0000,
26054 +
            0x00000000005bb000,
26055 +
            0x0000000000596000,
26056 +
            0x000000000058d000,
26057 +
            0x00000000005cc000,
26058 +
            0x00000000005d7000,
26059 +
            0x00000000005fa000,
26060 +
            0x00000000005e1000,
26061 +
            0x0000000000578000,
26062 +
            0x0000000000563000,
26063 +
            0x000000000054e000,
26064 +
            0x0000000000555000,
26065 +
            0x0000000000514000,
26066 +
            0x000000000050f000,
26067 +
            0x0000000000522000,
26068 +
            0x0000000000539000,
26069 +
            0x0000000000410000,
26070 +
            0x000000000040b000,
26071 +
            0x0000000000426000,
26072 +
            0x000000000043d000,
26073 +
            0x000000000047c000,
26074 +
            0x0000000000467000,
26075 +
            0x000000000044a000,
26076 +
            0x0000000000451000,
26077 +
            0x00000000004c8000,
26078 +
            0x00000000004d3000,
26079 +
            0x00000000004fe000,
26080 +
            0x00000000004e5000,
26081 +
            0x00000000004a4000,
26082 +
            0x00000000004bf000,
26083 +
            0x0000000000492000,
26084 +
            0x0000000000489000,
26085 +
            0x0000000000d80000,
26086 +
            0x0000000000d9b000,
26087 +
            0x0000000000db6000,
26088 +
            0x0000000000dad000,
26089 +
            0x0000000000dec000,
26090 +
            0x0000000000df7000,
26091 +
            0x0000000000dda000,
26092 +
            0x0000000000dc1000,
26093 +
            0x0000000000d58000,
26094 +
            0x0000000000d43000,
26095 +
            0x0000000000d6e000,
26096 +
            0x0000000000d75000,
26097 +
            0x0000000000d34000,
26098 +
            0x0000000000d2f000,
26099 +
            0x0000000000d02000,
26100 +
            0x0000000000d19000,
26101 +
            0x0000000000c30000,
26102 +
            0x0000000000c2b000,
26103 +
            0x0000000000c06000,
26104 +
            0x0000000000c1d000,
26105 +
            0x0000000000c5c000,
26106 +
            0x0000000000c47000,
26107 +
            0x0000000000c6a000,
26108 +
            0x0000000000c71000,
26109 +
            0x0000000000ce8000,
26110 +
            0x0000000000cf3000,
26111 +
            0x0000000000cde000,
26112 +
            0x0000000000cc5000,
26113 +
            0x0000000000c84000,
26114 +
            0x0000000000c9f000,
26115 +
            0x0000000000cb2000,
26116 +
            0x0000000000ca9000,
26117 +
            0x0000000000ee0000,
26118 +
            0x0000000000efb000,
26119 +
            0x0000000000ed6000,
26120 +
            0x0000000000ecd000,
26121 +
            0x0000000000e8c000,
26122 +
            0x0000000000e97000,
26123 +
            0x0000000000eba000,
26124 +
            0x0000000000ea1000,
26125 +
            0x0000000000e38000,
26126 +
            0x0000000000e23000,
26127 +
            0x0000000000e0e000,
26128 +
            0x0000000000e15000,
26129 +
            0x0000000000e54000,
26130 +
            0x0000000000e4f000,
26131 +
            0x0000000000e62000,
26132 +
            0x0000000000e79000,
26133 +
            0x0000000000f50000,
26134 +
            0x0000000000f4b000,
26135 +
            0x0000000000f66000,
26136 +
            0x0000000000f7d000,
26137 +
            0x0000000000f3c000,
26138 +
            0x0000000000f27000,
26139 +
            0x0000000000f0a000,
26140 +
            0x0000000000f11000,
26141 +
            0x0000000000f88000,
26142 +
            0x0000000000f93000,
26143 +
            0x0000000000fbe000,
26144 +
            0x0000000000fa5000,
26145 +
            0x0000000000fe4000,
26146 +
            0x0000000000fff000,
26147 +
            0x0000000000fd2000,
26148 +
            0x0000000000fc9000,
26149 +
            0x0000000000b40000,
26150 +
            0x0000000000b5b000,
26151 +
            0x0000000000b76000,
26152 +
            0x0000000000b6d000,
26153 +
            0x0000000000b2c000,
26154 +
            0x0000000000b37000,
26155 +
            0x0000000000b1a000,
26156 +
            0x0000000000b01000,
26157 +
            0x0000000000b98000,
26158 +
            0x0000000000b83000,
26159 +
            0x0000000000bae000,
26160 +
            0x0000000000bb5000,
26161 +
            0x0000000000bf4000,
26162 +
            0x0000000000bef000,
26163 +
            0x0000000000bc2000,
26164 +
            0x0000000000bd9000,
26165 +
            0x0000000000af0000,
26166 +
            0x0000000000aeb000,
26167 +
            0x0000000000ac6000,
26168 +
            0x0000000000add000,
26169 +
            0x0000000000a9c000,
26170 +
            0x0000000000a87000,
26171 +
            0x0000000000aaa000,
26172 +
            0x0000000000ab1000,
26173 +
            0x0000000000a28000,
26174 +
            0x0000000000a33000,
26175 +
            0x0000000000a1e000,
26176 +
            0x0000000000a05000,
26177 +
            0x0000000000a44000,
26178 +
            0x0000000000a5f000,
26179 +
            0x0000000000a72000,
26180 +
            0x0000000000a69000,
26181 +
            0x0000000000820000,
26182 +
            0x000000000083b000,
26183 +
            0x0000000000816000,
26184 +
            0x000000000080d000,
26185 +
            0x000000000084c000,
26186 +
            0x0000000000857000,
26187 +
            0x000000000087a000,
26188 +
            0x0000000000861000,
26189 +
            0x00000000008f8000,
26190 +
            0x00000000008e3000,
26191 +
            0x00000000008ce000,
26192 +
            0x00000000008d5000,
26193 +
            0x0000000000894000,
26194 +
            0x000000000088f000,
26195 +
            0x00000000008a2000,
26196 +
            0x00000000008b9000,
26197 +
            0x0000000000990000,
26198 +
            0x000000000098b000,
26199 +
            0x00000000009a6000,
26200 +
            0x00000000009bd000,
26201 +
            0x00000000009fc000,
26202 +
            0x00000000009e7000,
26203 +
            0x00000000009ca000,
26204 +
            0x00000000009d1000,
26205 +
            0x0000000000948000,
26206 +
            0x0000000000953000,
26207 +
            0x000000000097e000,
26208 +
            0x0000000000965000,
26209 +
            0x0000000000924000,
26210 +
            0x000000000093f000,
26211 +
            0x0000000000912000,
26212 +
            0x0000000000909000,
26213 +
        ],
26214 +
        [
26215 +
            0x0000000000000000,
26216 +
            0x00000000000001b0,
26217 +
            0x0000000000000360,
26218 +
            0x00000000000002d0,
26219 +
            0x00000000000006c0,
26220 +
            0x0000000000000770,
26221 +
            0x00000000000005a0,
26222 +
            0x0000000000000410,
26223 +
            0x0000000000000d80,
26224 +
            0x0000000000000c30,
26225 +
            0x0000000000000ee0,
26226 +
            0x0000000000000f50,
26227 +
            0x0000000000000b40,
26228 +
            0x0000000000000af0,
26229 +
            0x0000000000000820,
26230 +
            0x0000000000000990,
26231 +
            0x0000000000001b00,
26232 +
            0x0000000000001ab0,
26233 +
            0x0000000000001860,
26234 +
            0x00000000000019d0,
26235 +
            0x0000000000001dc0,
26236 +
            0x0000000000001c70,
26237 +
            0x0000000000001ea0,
26238 +
            0x0000000000001f10,
26239 +
            0x0000000000001680,
26240 +
            0x0000000000001730,
26241 +
            0x00000000000015e0,
26242 +
            0x0000000000001450,
26243 +
            0x0000000000001040,
26244 +
            0x00000000000011f0,
26245 +
            0x0000000000001320,
26246 +
            0x0000000000001290,
26247 +
            0x0000000000003600,
26248 +
            0x00000000000037b0,
26249 +
            0x0000000000003560,
26250 +
            0x00000000000034d0,
26251 +
            0x00000000000030c0,
26252 +
            0x0000000000003170,
26253 +
            0x00000000000033a0,
26254 +
            0x0000000000003210,
26255 +
            0x0000000000003b80,
26256 +
            0x0000000000003a30,
26257 +
            0x00000000000038e0,
26258 +
            0x0000000000003950,
26259 +
            0x0000000000003d40,
26260 +
            0x0000000000003cf0,
26261 +
            0x0000000000003e20,
26262 +
            0x0000000000003f90,
26263 +
            0x0000000000002d00,
26264 +
            0x0000000000002cb0,
26265 +
            0x0000000000002e60,
26266 +
            0x0000000000002fd0,
26267 +
            0x0000000000002bc0,
26268 +
            0x0000000000002a70,
26269 +
            0x00000000000028a0,
26270 +
            0x0000000000002910,
26271 +
            0x0000000000002080,
26272 +
            0x0000000000002130,
26273 +
            0x00000000000023e0,
26274 +
            0x0000000000002250,
26275 +
            0x0000000000002640,
26276 +
            0x00000000000027f0,
26277 +
            0x0000000000002520,
26278 +
            0x0000000000002490,
26279 +
            0x0000000000006c00,
26280 +
            0x0000000000006db0,
26281 +
            0x0000000000006f60,
26282 +
            0x0000000000006ed0,
26283 +
            0x0000000000006ac0,
26284 +
            0x0000000000006b70,
26285 +
            0x00000000000069a0,
26286 +
            0x0000000000006810,
26287 +
            0x0000000000006180,
26288 +
            0x0000000000006030,
26289 +
            0x00000000000062e0,
26290 +
            0x0000000000006350,
26291 +
            0x0000000000006740,
26292 +
            0x00000000000066f0,
26293 +
            0x0000000000006420,
26294 +
            0x0000000000006590,
26295 +
            0x0000000000007700,
26296 +
            0x00000000000076b0,
26297 +
            0x0000000000007460,
26298 +
            0x00000000000075d0,
26299 +
            0x00000000000071c0,
26300 +
            0x0000000000007070,
26301 +
            0x00000000000072a0,
26302 +
            0x0000000000007310,
26303 +
            0x0000000000007a80,
26304 +
            0x0000000000007b30,
26305 +
            0x00000000000079e0,
26306 +
            0x0000000000007850,
26307 +
            0x0000000000007c40,
26308 +
            0x0000000000007df0,
26309 +
            0x0000000000007f20,
26310 +
            0x0000000000007e90,
26311 +
            0x0000000000005a00,
26312 +
            0x0000000000005bb0,
26313 +
            0x0000000000005960,
26314 +
            0x00000000000058d0,
26315 +
            0x0000000000005cc0,
26316 +
            0x0000000000005d70,
26317 +
            0x0000000000005fa0,
26318 +
            0x0000000000005e10,
26319 +
            0x0000000000005780,
26320 +
            0x0000000000005630,
26321 +
            0x00000000000054e0,
26322 +
            0x0000000000005550,
26323 +
            0x0000000000005140,
26324 +
            0x00000000000050f0,
26325 +
            0x0000000000005220,
26326 +
            0x0000000000005390,
26327 +
            0x0000000000004100,
26328 +
            0x00000000000040b0,
26329 +
            0x0000000000004260,
26330 +
            0x00000000000043d0,
26331 +
            0x00000000000047c0,
26332 +
            0x0000000000004670,
26333 +
            0x00000000000044a0,
26334 +
            0x0000000000004510,
26335 +
            0x0000000000004c80,
26336 +
            0x0000000000004d30,
26337 +
            0x0000000000004fe0,
26338 +
            0x0000000000004e50,
26339 +
            0x0000000000004a40,
26340 +
            0x0000000000004bf0,
26341 +
            0x0000000000004920,
26342 +
            0x0000000000004890,
26343 +
            0x000000000000d800,
26344 +
            0x000000000000d9b0,
26345 +
            0x000000000000db60,
26346 +
            0x000000000000dad0,
26347 +
            0x000000000000dec0,
26348 +
            0x000000000000df70,
26349 +
            0x000000000000dda0,
26350 +
            0x000000000000dc10,
26351 +
            0x000000000000d580,
26352 +
            0x000000000000d430,
26353 +
            0x000000000000d6e0,
26354 +
            0x000000000000d750,
26355 +
            0x000000000000d340,
26356 +
            0x000000000000d2f0,
26357 +
            0x000000000000d020,
26358 +
            0x000000000000d190,
26359 +
            0x000000000000c300,
26360 +
            0x000000000000c2b0,
26361 +
            0x000000000000c060,
26362 +
            0x000000000000c1d0,
26363 +
            0x000000000000c5c0,
26364 +
            0x000000000000c470,
26365 +
            0x000000000000c6a0,
26366 +
            0x000000000000c710,
26367 +
            0x000000000000ce80,
26368 +
            0x000000000000cf30,
26369 +
            0x000000000000cde0,
26370 +
            0x000000000000cc50,
26371 +
            0x000000000000c840,
26372 +
            0x000000000000c9f0,
26373 +
            0x000000000000cb20,
26374 +
            0x000000000000ca90,
26375 +
            0x000000000000ee00,
26376 +
            0x000000000000efb0,
26377 +
            0x000000000000ed60,
26378 +
            0x000000000000ecd0,
26379 +
            0x000000000000e8c0,
26380 +
            0x000000000000e970,
26381 +
            0x000000000000eba0,
26382 +
            0x000000000000ea10,
26383 +
            0x000000000000e380,
26384 +
            0x000000000000e230,
26385 +
            0x000000000000e0e0,
26386 +
            0x000000000000e150,
26387 +
            0x000000000000e540,
26388 +
            0x000000000000e4f0,
26389 +
            0x000000000000e620,
26390 +
            0x000000000000e790,
26391 +
            0x000000000000f500,
26392 +
            0x000000000000f4b0,
26393 +
            0x000000000000f660,
26394 +
            0x000000000000f7d0,
26395 +
            0x000000000000f3c0,
26396 +
            0x000000000000f270,
26397 +
            0x000000000000f0a0,
26398 +
            0x000000000000f110,
26399 +
            0x000000000000f880,
26400 +
            0x000000000000f930,
26401 +
            0x000000000000fbe0,
26402 +
            0x000000000000fa50,
26403 +
            0x000000000000fe40,
26404 +
            0x000000000000fff0,
26405 +
            0x000000000000fd20,
26406 +
            0x000000000000fc90,
26407 +
            0x000000000000b400,
26408 +
            0x000000000000b5b0,
26409 +
            0x000000000000b760,
26410 +
            0x000000000000b6d0,
26411 +
            0x000000000000b2c0,
26412 +
            0x000000000000b370,
26413 +
            0x000000000000b1a0,
26414 +
            0x000000000000b010,
26415 +
            0x000000000000b980,
26416 +
            0x000000000000b830,
26417 +
            0x000000000000bae0,
26418 +
            0x000000000000bb50,
26419 +
            0x000000000000bf40,
26420 +
            0x000000000000bef0,
26421 +
            0x000000000000bc20,
26422 +
            0x000000000000bd90,
26423 +
            0x000000000000af00,
26424 +
            0x000000000000aeb0,
26425 +
            0x000000000000ac60,
26426 +
            0x000000000000add0,
26427 +
            0x000000000000a9c0,
26428 +
            0x000000000000a870,
26429 +
            0x000000000000aaa0,
26430 +
            0x000000000000ab10,
26431 +
            0x000000000000a280,
26432 +
            0x000000000000a330,
26433 +
            0x000000000000a1e0,
26434 +
            0x000000000000a050,
26435 +
            0x000000000000a440,
26436 +
            0x000000000000a5f0,
26437 +
            0x000000000000a720,
26438 +
            0x000000000000a690,
26439 +
            0x0000000000008200,
26440 +
            0x00000000000083b0,
26441 +
            0x0000000000008160,
26442 +
            0x00000000000080d0,
26443 +
            0x00000000000084c0,
26444 +
            0x0000000000008570,
26445 +
            0x00000000000087a0,
26446 +
            0x0000000000008610,
26447 +
            0x0000000000008f80,
26448 +
            0x0000000000008e30,
26449 +
            0x0000000000008ce0,
26450 +
            0x0000000000008d50,
26451 +
            0x0000000000008940,
26452 +
            0x00000000000088f0,
26453 +
            0x0000000000008a20,
26454 +
            0x0000000000008b90,
26455 +
            0x0000000000009900,
26456 +
            0x00000000000098b0,
26457 +
            0x0000000000009a60,
26458 +
            0x0000000000009bd0,
26459 +
            0x0000000000009fc0,
26460 +
            0x0000000000009e70,
26461 +
            0x0000000000009ca0,
26462 +
            0x0000000000009d10,
26463 +
            0x0000000000009480,
26464 +
            0x0000000000009530,
26465 +
            0x00000000000097e0,
26466 +
            0x0000000000009650,
26467 +
            0x0000000000009240,
26468 +
            0x00000000000093f0,
26469 +
            0x0000000000009120,
26470 +
            0x0000000000009090,
26471 +
        ],
26472 +
        [
26473 +
            0x0000000000000000,
26474 +
            0xf500000000000001,
26475 +
            0x5a00000000000003,
26476 +
            0xaf00000000000002,
26477 +
            0xb400000000000006,
26478 +
            0x4100000000000007,
26479 +
            0xee00000000000005,
26480 +
            0x1b00000000000004,
26481 +
            0xd80000000000000d,
26482 +
            0x2d0000000000000c,
26483 +
            0x820000000000000e,
26484 +
            0x770000000000000f,
26485 +
            0x6c0000000000000b,
26486 +
            0x990000000000000a,
26487 +
            0x3600000000000008,
26488 +
            0xc300000000000009,
26489 +
            0x000000000000001b,
26490 +
            0xf50000000000001a,
26491 +
            0x5a00000000000018,
26492 +
            0xaf00000000000019,
26493 +
            0xb40000000000001d,
26494 +
            0x410000000000001c,
26495 +
            0xee0000000000001e,
26496 +
            0x1b0000000000001f,
26497 +
            0xd800000000000016,
26498 +
            0x2d00000000000017,
26499 +
            0x8200000000000015,
26500 +
            0x7700000000000014,
26501 +
            0x6c00000000000010,
26502 +
            0x9900000000000011,
26503 +
            0x3600000000000013,
26504 +
            0xc300000000000012,
26505 +
            0x0000000000000036,
26506 +
            0xf500000000000037,
26507 +
            0x5a00000000000035,
26508 +
            0xaf00000000000034,
26509 +
            0xb400000000000030,
26510 +
            0x4100000000000031,
26511 +
            0xee00000000000033,
26512 +
            0x1b00000000000032,
26513 +
            0xd80000000000003b,
26514 +
            0x2d0000000000003a,
26515 +
            0x8200000000000038,
26516 +
            0x7700000000000039,
26517 +
            0x6c0000000000003d,
26518 +
            0x990000000000003c,
26519 +
            0x360000000000003e,
26520 +
            0xc30000000000003f,
26521 +
            0x000000000000002d,
26522 +
            0xf50000000000002c,
26523 +
            0x5a0000000000002e,
26524 +
            0xaf0000000000002f,
26525 +
            0xb40000000000002b,
26526 +
            0x410000000000002a,
26527 +
            0xee00000000000028,
26528 +
            0x1b00000000000029,
26529 +
            0xd800000000000020,
26530 +
            0x2d00000000000021,
26531 +
            0x8200000000000023,
26532 +
            0x7700000000000022,
26533 +
            0x6c00000000000026,
26534 +
            0x9900000000000027,
26535 +
            0x3600000000000025,
26536 +
            0xc300000000000024,
26537 +
            0x000000000000006c,
26538 +
            0xf50000000000006d,
26539 +
            0x5a0000000000006f,
26540 +
            0xaf0000000000006e,
26541 +
            0xb40000000000006a,
26542 +
            0x410000000000006b,
26543 +
            0xee00000000000069,
26544 +
            0x1b00000000000068,
26545 +
            0xd800000000000061,
26546 +
            0x2d00000000000060,
26547 +
            0x8200000000000062,
26548 +
            0x7700000000000063,
26549 +
            0x6c00000000000067,
26550 +
            0x9900000000000066,
26551 +
            0x3600000000000064,
26552 +
            0xc300000000000065,
26553 +
            0x0000000000000077,
26554 +
            0xf500000000000076,
26555 +
            0x5a00000000000074,
26556 +
            0xaf00000000000075,
26557 +
            0xb400000000000071,
26558 +
            0x4100000000000070,
26559 +
            0xee00000000000072,
26560 +
            0x1b00000000000073,
26561 +
            0xd80000000000007a,
26562 +
            0x2d0000000000007b,
26563 +
            0x8200000000000079,
26564 +
            0x7700000000000078,
26565 +
            0x6c0000000000007c,
26566 +
            0x990000000000007d,
26567 +
            0x360000000000007f,
26568 +
            0xc30000000000007e,
26569 +
            0x000000000000005a,
26570 +
            0xf50000000000005b,
26571 +
            0x5a00000000000059,
26572 +
            0xaf00000000000058,
26573 +
            0xb40000000000005c,
26574 +
            0x410000000000005d,
26575 +
            0xee0000000000005f,
26576 +
            0x1b0000000000005e,
26577 +
            0xd800000000000057,
26578 +
            0x2d00000000000056,
26579 +
            0x8200000000000054,
26580 +
            0x7700000000000055,
26581 +
            0x6c00000000000051,
26582 +
            0x9900000000000050,
26583 +
            0x3600000000000052,
26584 +
            0xc300000000000053,
26585 +
            0x0000000000000041,
26586 +
            0xf500000000000040,
26587 +
            0x5a00000000000042,
26588 +
            0xaf00000000000043,
26589 +
            0xb400000000000047,
26590 +
            0x4100000000000046,
26591 +
            0xee00000000000044,
26592 +
            0x1b00000000000045,
26593 +
            0xd80000000000004c,
26594 +
            0x2d0000000000004d,
26595 +
            0x820000000000004f,
26596 +
            0x770000000000004e,
26597 +
            0x6c0000000000004a,
26598 +
            0x990000000000004b,
26599 +
            0x3600000000000049,
26600 +
            0xc300000000000048,
26601 +
            0x00000000000000d8,
26602 +
            0xf5000000000000d9,
26603 +
            0x5a000000000000db,
26604 +
            0xaf000000000000da,
26605 +
            0xb4000000000000de,
26606 +
            0x41000000000000df,
26607 +
            0xee000000000000dd,
26608 +
            0x1b000000000000dc,
26609 +
            0xd8000000000000d5,
26610 +
            0x2d000000000000d4,
26611 +
            0x82000000000000d6,
26612 +
            0x77000000000000d7,
26613 +
            0x6c000000000000d3,
26614 +
            0x99000000000000d2,
26615 +
            0x36000000000000d0,
26616 +
            0xc3000000000000d1,
26617 +
            0x00000000000000c3,
26618 +
            0xf5000000000000c2,
26619 +
            0x5a000000000000c0,
26620 +
            0xaf000000000000c1,
26621 +
            0xb4000000000000c5,
26622 +
            0x41000000000000c4,
26623 +
            0xee000000000000c6,
26624 +
            0x1b000000000000c7,
26625 +
            0xd8000000000000ce,
26626 +
            0x2d000000000000cf,
26627 +
            0x82000000000000cd,
26628 +
            0x77000000000000cc,
26629 +
            0x6c000000000000c8,
26630 +
            0x99000000000000c9,
26631 +
            0x36000000000000cb,
26632 +
            0xc3000000000000ca,
26633 +
            0x00000000000000ee,
26634 +
            0xf5000000000000ef,
26635 +
            0x5a000000000000ed,
26636 +
            0xaf000000000000ec,
26637 +
            0xb4000000000000e8,
26638 +
            0x41000000000000e9,
26639 +
            0xee000000000000eb,
26640 +
            0x1b000000000000ea,
26641 +
            0xd8000000000000e3,
26642 +
            0x2d000000000000e2,
26643 +
            0x82000000000000e0,
26644 +
            0x77000000000000e1,
26645 +
            0x6c000000000000e5,
26646 +
            0x99000000000000e4,
26647 +
            0x36000000000000e6,
26648 +
            0xc3000000000000e7,
26649 +
            0x00000000000000f5,
26650 +
            0xf5000000000000f4,
26651 +
            0x5a000000000000f6,
26652 +
            0xaf000000000000f7,
26653 +
            0xb4000000000000f3,
26654 +
            0x41000000000000f2,
26655 +
            0xee000000000000f0,
26656 +
            0x1b000000000000f1,
26657 +
            0xd8000000000000f8,
26658 +
            0x2d000000000000f9,
26659 +
            0x82000000000000fb,
26660 +
            0x77000000000000fa,
26661 +
            0x6c000000000000fe,
26662 +
            0x99000000000000ff,
26663 +
            0x36000000000000fd,
26664 +
            0xc3000000000000fc,
26665 +
            0x00000000000000b4,
26666 +
            0xf5000000000000b5,
26667 +
            0x5a000000000000b7,
26668 +
            0xaf000000000000b6,
26669 +
            0xb4000000000000b2,
26670 +
            0x41000000000000b3,
26671 +
            0xee000000000000b1,
26672 +
            0x1b000000000000b0,
26673 +
            0xd8000000000000b9,
26674 +
            0x2d000000000000b8,
26675 +
            0x82000000000000ba,
26676 +
            0x77000000000000bb,
26677 +
            0x6c000000000000bf,
26678 +
            0x99000000000000be,
26679 +
            0x36000000000000bc,
26680 +
            0xc3000000000000bd,
26681 +
            0x00000000000000af,
26682 +
            0xf5000000000000ae,
26683 +
            0x5a000000000000ac,
26684 +
            0xaf000000000000ad,
26685 +
            0xb4000000000000a9,
26686 +
            0x41000000000000a8,
26687 +
            0xee000000000000aa,
26688 +
            0x1b000000000000ab,
26689 +
            0xd8000000000000a2,
26690 +
            0x2d000000000000a3,
26691 +
            0x82000000000000a1,
26692 +
            0x77000000000000a0,
26693 +
            0x6c000000000000a4,
26694 +
            0x99000000000000a5,
26695 +
            0x36000000000000a7,
26696 +
            0xc3000000000000a6,
26697 +
            0x0000000000000082,
26698 +
            0xf500000000000083,
26699 +
            0x5a00000000000081,
26700 +
            0xaf00000000000080,
26701 +
            0xb400000000000084,
26702 +
            0x4100000000000085,
26703 +
            0xee00000000000087,
26704 +
            0x1b00000000000086,
26705 +
            0xd80000000000008f,
26706 +
            0x2d0000000000008e,
26707 +
            0x820000000000008c,
26708 +
            0x770000000000008d,
26709 +
            0x6c00000000000089,
26710 +
            0x9900000000000088,
26711 +
            0x360000000000008a,
26712 +
            0xc30000000000008b,
26713 +
            0x0000000000000099,
26714 +
            0xf500000000000098,
26715 +
            0x5a0000000000009a,
26716 +
            0xaf0000000000009b,
26717 +
            0xb40000000000009f,
26718 +
            0x410000000000009e,
26719 +
            0xee0000000000009c,
26720 +
            0x1b0000000000009d,
26721 +
            0xd800000000000094,
26722 +
            0x2d00000000000095,
26723 +
            0x8200000000000097,
26724 +
            0x7700000000000096,
26725 +
            0x6c00000000000092,
26726 +
            0x9900000000000093,
26727 +
            0x3600000000000091,
26728 +
            0xc300000000000090,
26729 +
        ],
26730 +
        [
26731 +
            0x0000000000000000,
26732 +
            0x0145000000000000,
26733 +
            0x028a000000000000,
26734 +
            0x03cf000000000000,
26735 +
            0x0514000000000000,
26736 +
            0x0451000000000000,
26737 +
            0x079e000000000000,
26738 +
            0x06db000000000000,
26739 +
            0x0a28000000000000,
26740 +
            0x0b6d000000000000,
26741 +
            0x08a2000000000000,
26742 +
            0x09e7000000000000,
26743 +
            0x0f3c000000000000,
26744 +
            0x0e79000000000000,
26745 +
            0x0db6000000000000,
26746 +
            0x0cf3000000000000,
26747 +
            0x1450000000000000,
26748 +
            0x1515000000000000,
26749 +
            0x16da000000000000,
26750 +
            0x179f000000000000,
26751 +
            0x1144000000000000,
26752 +
            0x1001000000000000,
26753 +
            0x13ce000000000000,
26754 +
            0x128b000000000000,
26755 +
            0x1e78000000000000,
26756 +
            0x1f3d000000000000,
26757 +
            0x1cf2000000000000,
26758 +
            0x1db7000000000000,
26759 +
            0x1b6c000000000000,
26760 +
            0x1a29000000000000,
26761 +
            0x19e6000000000000,
26762 +
            0x18a3000000000000,
26763 +
            0x28a0000000000000,
26764 +
            0x29e5000000000000,
26765 +
            0x2a2a000000000000,
26766 +
            0x2b6f000000000000,
26767 +
            0x2db4000000000000,
26768 +
            0x2cf1000000000000,
26769 +
            0x2f3e000000000000,
26770 +
            0x2e7b000000000000,
26771 +
            0x2288000000000000,
26772 +
            0x23cd000000000000,
26773 +
            0x2002000000000000,
26774 +
            0x2147000000000000,
26775 +
            0x279c000000000000,
26776 +
            0x26d9000000000000,
26777 +
            0x2516000000000000,
26778 +
            0x2453000000000000,
26779 +
            0x3cf0000000000000,
26780 +
            0x3db5000000000000,
26781 +
            0x3e7a000000000000,
26782 +
            0x3f3f000000000000,
26783 +
            0x39e4000000000000,
26784 +
            0x38a1000000000000,
26785 +
            0x3b6e000000000000,
26786 +
            0x3a2b000000000000,
26787 +
            0x36d8000000000000,
26788 +
            0x379d000000000000,
26789 +
            0x3452000000000000,
26790 +
            0x3517000000000000,
26791 +
            0x33cc000000000000,
26792 +
            0x3289000000000000,
26793 +
            0x3146000000000000,
26794 +
            0x3003000000000000,
26795 +
            0x5140000000000000,
26796 +
            0x5005000000000000,
26797 +
            0x53ca000000000000,
26798 +
            0x528f000000000000,
26799 +
            0x5454000000000000,
26800 +
            0x5511000000000000,
26801 +
            0x56de000000000000,
26802 +
            0x579b000000000000,
26803 +
            0x5b68000000000000,
26804 +
            0x5a2d000000000000,
26805 +
            0x59e2000000000000,
26806 +
            0x58a7000000000000,
26807 +
            0x5e7c000000000000,
26808 +
            0x5f39000000000000,
26809 +
            0x5cf6000000000000,
26810 +
            0x5db3000000000000,
26811 +
            0x4510000000000000,
26812 +
            0x4455000000000000,
26813 +
            0x479a000000000000,
26814 +
            0x46df000000000000,
26815 +
            0x4004000000000000,
26816 +
            0x4141000000000000,
26817 +
            0x428e000000000000,
26818 +
            0x43cb000000000000,
26819 +
            0x4f38000000000000,
26820 +
            0x4e7d000000000000,
26821 +
            0x4db2000000000000,
26822 +
            0x4cf7000000000000,
26823 +
            0x4a2c000000000000,
26824 +
            0x4b69000000000000,
26825 +
            0x48a6000000000000,
26826 +
            0x49e3000000000000,
26827 +
            0x79e0000000000000,
26828 +
            0x78a5000000000000,
26829 +
            0x7b6a000000000000,
26830 +
            0x7a2f000000000000,
26831 +
            0x7cf4000000000000,
26832 +
            0x7db1000000000000,
26833 +
            0x7e7e000000000000,
26834 +
            0x7f3b000000000000,
26835 +
            0x73c8000000000000,
26836 +
            0x728d000000000000,
26837 +
            0x7142000000000000,
26838 +
            0x7007000000000000,
26839 +
            0x76dc000000000000,
26840 +
            0x7799000000000000,
26841 +
            0x7456000000000000,
26842 +
            0x7513000000000000,
26843 +
            0x6db0000000000000,
26844 +
            0x6cf5000000000000,
26845 +
            0x6f3a000000000000,
26846 +
            0x6e7f000000000000,
26847 +
            0x68a4000000000000,
26848 +
            0x69e1000000000000,
26849 +
            0x6a2e000000000000,
26850 +
            0x6b6b000000000000,
26851 +
            0x6798000000000000,
26852 +
            0x66dd000000000000,
26853 +
            0x6512000000000000,
26854 +
            0x6457000000000000,
26855 +
            0x628c000000000000,
26856 +
            0x63c9000000000000,
26857 +
            0x6006000000000000,
26858 +
            0x6143000000000000,
26859 +
            0xa280000000000000,
26860 +
            0xa3c5000000000000,
26861 +
            0xa00a000000000000,
26862 +
            0xa14f000000000000,
26863 +
            0xa794000000000000,
26864 +
            0xa6d1000000000000,
26865 +
            0xa51e000000000000,
26866 +
            0xa45b000000000000,
26867 +
            0xa8a8000000000000,
26868 +
            0xa9ed000000000000,
26869 +
            0xaa22000000000000,
26870 +
            0xab67000000000000,
26871 +
            0xadbc000000000000,
26872 +
            0xacf9000000000000,
26873 +
            0xaf36000000000000,
26874 +
            0xae73000000000000,
26875 +
            0xb6d0000000000000,
26876 +
            0xb795000000000000,
26877 +
            0xb45a000000000000,
26878 +
            0xb51f000000000000,
26879 +
            0xb3c4000000000000,
26880 +
            0xb281000000000000,
26881 +
            0xb14e000000000000,
26882 +
            0xb00b000000000000,
26883 +
            0xbcf8000000000000,
26884 +
            0xbdbd000000000000,
26885 +
            0xbe72000000000000,
26886 +
            0xbf37000000000000,
26887 +
            0xb9ec000000000000,
26888 +
            0xb8a9000000000000,
26889 +
            0xbb66000000000000,
26890 +
            0xba23000000000000,
26891 +
            0x8a20000000000000,
26892 +
            0x8b65000000000000,
26893 +
            0x88aa000000000000,
26894 +
            0x89ef000000000000,
26895 +
            0x8f34000000000000,
26896 +
            0x8e71000000000000,
26897 +
            0x8dbe000000000000,
26898 +
            0x8cfb000000000000,
26899 +
            0x8008000000000000,
26900 +
            0x814d000000000000,
26901 +
            0x8282000000000000,
26902 +
            0x83c7000000000000,
26903 +
            0x851c000000000000,
26904 +
            0x8459000000000000,
26905 +
            0x8796000000000000,
26906 +
            0x86d3000000000000,
26907 +
            0x9e70000000000000,
26908 +
            0x9f35000000000000,
26909 +
            0x9cfa000000000000,
26910 +
            0x9dbf000000000000,
26911 +
            0x9b64000000000000,
26912 +
            0x9a21000000000000,
26913 +
            0x99ee000000000000,
26914 +
            0x98ab000000000000,
26915 +
            0x9458000000000000,
26916 +
            0x951d000000000000,
26917 +
            0x96d2000000000000,
26918 +
            0x9797000000000000,
26919 +
            0x914c000000000000,
26920 +
            0x9009000000000000,
26921 +
            0x93c6000000000000,
26922 +
            0x9283000000000000,
26923 +
            0xf3c0000000000000,
26924 +
            0xf285000000000000,
26925 +
            0xf14a000000000000,
26926 +
            0xf00f000000000000,
26927 +
            0xf6d4000000000000,
26928 +
            0xf791000000000000,
26929 +
            0xf45e000000000000,
26930 +
            0xf51b000000000000,
26931 +
            0xf9e8000000000000,
26932 +
            0xf8ad000000000000,
26933 +
            0xfb62000000000000,
26934 +
            0xfa27000000000000,
26935 +
            0xfcfc000000000000,
26936 +
            0xfdb9000000000000,
26937 +
            0xfe76000000000000,
26938 +
            0xff33000000000000,
26939 +
            0xe790000000000000,
26940 +
            0xe6d5000000000000,
26941 +
            0xe51a000000000000,
26942 +
            0xe45f000000000000,
26943 +
            0xe284000000000000,
26944 +
            0xe3c1000000000000,
26945 +
            0xe00e000000000000,
26946 +
            0xe14b000000000000,
26947 +
            0xedb8000000000000,
26948 +
            0xecfd000000000000,
26949 +
            0xef32000000000000,
26950 +
            0xee77000000000000,
26951 +
            0xe8ac000000000000,
26952 +
            0xe9e9000000000000,
26953 +
            0xea26000000000000,
26954 +
            0xeb63000000000000,
26955 +
            0xdb60000000000000,
26956 +
            0xda25000000000000,
26957 +
            0xd9ea000000000000,
26958 +
            0xd8af000000000000,
26959 +
            0xde74000000000000,
26960 +
            0xdf31000000000000,
26961 +
            0xdcfe000000000000,
26962 +
            0xddbb000000000000,
26963 +
            0xd148000000000000,
26964 +
            0xd00d000000000000,
26965 +
            0xd3c2000000000000,
26966 +
            0xd287000000000000,
26967 +
            0xd45c000000000000,
26968 +
            0xd519000000000000,
26969 +
            0xd6d6000000000000,
26970 +
            0xd793000000000000,
26971 +
            0xcf30000000000000,
26972 +
            0xce75000000000000,
26973 +
            0xcdba000000000000,
26974 +
            0xccff000000000000,
26975 +
            0xca24000000000000,
26976 +
            0xcb61000000000000,
26977 +
            0xc8ae000000000000,
26978 +
            0xc9eb000000000000,
26979 +
            0xc518000000000000,
26980 +
            0xc45d000000000000,
26981 +
            0xc792000000000000,
26982 +
            0xc6d7000000000000,
26983 +
            0xc00c000000000000,
26984 +
            0xc149000000000000,
26985 +
            0xc286000000000000,
26986 +
            0xc3c3000000000000,
26987 +
        ],
26988 +
        [
26989 +
            0x0000000000000000,
26990 +
            0x0001450000000000,
26991 +
            0x00028a0000000000,
26992 +
            0x0003cf0000000000,
26993 +
            0x0005140000000000,
26994 +
            0x0004510000000000,
26995 +
            0x00079e0000000000,
26996 +
            0x0006db0000000000,
26997 +
            0x000a280000000000,
26998 +
            0x000b6d0000000000,
26999 +
            0x0008a20000000000,
27000 +
            0x0009e70000000000,
27001 +
            0x000f3c0000000000,
27002 +
            0x000e790000000000,
27003 +
            0x000db60000000000,
27004 +
            0x000cf30000000000,
27005 +
            0x0014500000000000,
27006 +
            0x0015150000000000,
27007 +
            0x0016da0000000000,
27008 +
            0x00179f0000000000,
27009 +
            0x0011440000000000,
27010 +
            0x0010010000000000,
27011 +
            0x0013ce0000000000,
27012 +
            0x00128b0000000000,
27013 +
            0x001e780000000000,
27014 +
            0x001f3d0000000000,
27015 +
            0x001cf20000000000,
27016 +
            0x001db70000000000,
27017 +
            0x001b6c0000000000,
27018 +
            0x001a290000000000,
27019 +
            0x0019e60000000000,
27020 +
            0x0018a30000000000,
27021 +
            0x0028a00000000000,
27022 +
            0x0029e50000000000,
27023 +
            0x002a2a0000000000,
27024 +
            0x002b6f0000000000,
27025 +
            0x002db40000000000,
27026 +
            0x002cf10000000000,
27027 +
            0x002f3e0000000000,
27028 +
            0x002e7b0000000000,
27029 +
            0x0022880000000000,
27030 +
            0x0023cd0000000000,
27031 +
            0x0020020000000000,
27032 +
            0x0021470000000000,
27033 +
            0x00279c0000000000,
27034 +
            0x0026d90000000000,
27035 +
            0x0025160000000000,
27036 +
            0x0024530000000000,
27037 +
            0x003cf00000000000,
27038 +
            0x003db50000000000,
27039 +
            0x003e7a0000000000,
27040 +
            0x003f3f0000000000,
27041 +
            0x0039e40000000000,
27042 +
            0x0038a10000000000,
27043 +
            0x003b6e0000000000,
27044 +
            0x003a2b0000000000,
27045 +
            0x0036d80000000000,
27046 +
            0x00379d0000000000,
27047 +
            0x0034520000000000,
27048 +
            0x0035170000000000,
27049 +
            0x0033cc0000000000,
27050 +
            0x0032890000000000,
27051 +
            0x0031460000000000,
27052 +
            0x0030030000000000,
27053 +
            0x0051400000000000,
27054 +
            0x0050050000000000,
27055 +
            0x0053ca0000000000,
27056 +
            0x00528f0000000000,
27057 +
            0x0054540000000000,
27058 +
            0x0055110000000000,
27059 +
            0x0056de0000000000,
27060 +
            0x00579b0000000000,
27061 +
            0x005b680000000000,
27062 +
            0x005a2d0000000000,
27063 +
            0x0059e20000000000,
27064 +
            0x0058a70000000000,
27065 +
            0x005e7c0000000000,
27066 +
            0x005f390000000000,
27067 +
            0x005cf60000000000,
27068 +
            0x005db30000000000,
27069 +
            0x0045100000000000,
27070 +
            0x0044550000000000,
27071 +
            0x00479a0000000000,
27072 +
            0x0046df0000000000,
27073 +
            0x0040040000000000,
27074 +
            0x0041410000000000,
27075 +
            0x00428e0000000000,
27076 +
            0x0043cb0000000000,
27077 +
            0x004f380000000000,
27078 +
            0x004e7d0000000000,
27079 +
            0x004db20000000000,
27080 +
            0x004cf70000000000,
27081 +
            0x004a2c0000000000,
27082 +
            0x004b690000000000,
27083 +
            0x0048a60000000000,
27084 +
            0x0049e30000000000,
27085 +
            0x0079e00000000000,
27086 +
            0x0078a50000000000,
27087 +
            0x007b6a0000000000,
27088 +
            0x007a2f0000000000,
27089 +
            0x007cf40000000000,
27090 +
            0x007db10000000000,
27091 +
            0x007e7e0000000000,
27092 +
            0x007f3b0000000000,
27093 +
            0x0073c80000000000,
27094 +
            0x00728d0000000000,
27095 +
            0x0071420000000000,
27096 +
            0x0070070000000000,
27097 +
            0x0076dc0000000000,
27098 +
            0x0077990000000000,
27099 +
            0x0074560000000000,
27100 +
            0x0075130000000000,
27101 +
            0x006db00000000000,
27102 +
            0x006cf50000000000,
27103 +
            0x006f3a0000000000,
27104 +
            0x006e7f0000000000,
27105 +
            0x0068a40000000000,
27106 +
            0x0069e10000000000,
27107 +
            0x006a2e0000000000,
27108 +
            0x006b6b0000000000,
27109 +
            0x0067980000000000,
27110 +
            0x0066dd0000000000,
27111 +
            0x0065120000000000,
27112 +
            0x0064570000000000,
27113 +
            0x00628c0000000000,
27114 +
            0x0063c90000000000,
27115 +
            0x0060060000000000,
27116 +
            0x0061430000000000,
27117 +
            0x00a2800000000000,
27118 +
            0x00a3c50000000000,
27119 +
            0x00a00a0000000000,
27120 +
            0x00a14f0000000000,
27121 +
            0x00a7940000000000,
27122 +
            0x00a6d10000000000,
27123 +
            0x00a51e0000000000,
27124 +
            0x00a45b0000000000,
27125 +
            0x00a8a80000000000,
27126 +
            0x00a9ed0000000000,
27127 +
            0x00aa220000000000,
27128 +
            0x00ab670000000000,
27129 +
            0x00adbc0000000000,
27130 +
            0x00acf90000000000,
27131 +
            0x00af360000000000,
27132 +
            0x00ae730000000000,
27133 +
            0x00b6d00000000000,
27134 +
            0x00b7950000000000,
27135 +
            0x00b45a0000000000,
27136 +
            0x00b51f0000000000,
27137 +
            0x00b3c40000000000,
27138 +
            0x00b2810000000000,
27139 +
            0x00b14e0000000000,
27140 +
            0x00b00b0000000000,
27141 +
            0x00bcf80000000000,
27142 +
            0x00bdbd0000000000,
27143 +
            0x00be720000000000,
27144 +
            0x00bf370000000000,
27145 +
            0x00b9ec0000000000,
27146 +
            0x00b8a90000000000,
27147 +
            0x00bb660000000000,
27148 +
            0x00ba230000000000,
27149 +
            0x008a200000000000,
27150 +
            0x008b650000000000,
27151 +
            0x0088aa0000000000,
27152 +
            0x0089ef0000000000,
27153 +
            0x008f340000000000,
27154 +
            0x008e710000000000,
27155 +
            0x008dbe0000000000,
27156 +
            0x008cfb0000000000,
27157 +
            0x0080080000000000,
27158 +
            0x00814d0000000000,
27159 +
            0x0082820000000000,
27160 +
            0x0083c70000000000,
27161 +
            0x00851c0000000000,
27162 +
            0x0084590000000000,
27163 +
            0x0087960000000000,
27164 +
            0x0086d30000000000,
27165 +
            0x009e700000000000,
27166 +
            0x009f350000000000,
27167 +
            0x009cfa0000000000,
27168 +
            0x009dbf0000000000,
27169 +
            0x009b640000000000,
27170 +
            0x009a210000000000,
27171 +
            0x0099ee0000000000,
27172 +
            0x0098ab0000000000,
27173 +
            0x0094580000000000,
27174 +
            0x00951d0000000000,
27175 +
            0x0096d20000000000,
27176 +
            0x0097970000000000,
27177 +
            0x00914c0000000000,
27178 +
            0x0090090000000000,
27179 +
            0x0093c60000000000,
27180 +
            0x0092830000000000,
27181 +
            0x00f3c00000000000,
27182 +
            0x00f2850000000000,
27183 +
            0x00f14a0000000000,
27184 +
            0x00f00f0000000000,
27185 +
            0x00f6d40000000000,
27186 +
            0x00f7910000000000,
27187 +
            0x00f45e0000000000,
27188 +
            0x00f51b0000000000,
27189 +
            0x00f9e80000000000,
27190 +
            0x00f8ad0000000000,
27191 +
            0x00fb620000000000,
27192 +
            0x00fa270000000000,
27193 +
            0x00fcfc0000000000,
27194 +
            0x00fdb90000000000,
27195 +
            0x00fe760000000000,
27196 +
            0x00ff330000000000,
27197 +
            0x00e7900000000000,
27198 +
            0x00e6d50000000000,
27199 +
            0x00e51a0000000000,
27200 +
            0x00e45f0000000000,
27201 +
            0x00e2840000000000,
27202 +
            0x00e3c10000000000,
27203 +
            0x00e00e0000000000,
27204 +
            0x00e14b0000000000,
27205 +
            0x00edb80000000000,
27206 +
            0x00ecfd0000000000,
27207 +
            0x00ef320000000000,
27208 +
            0x00ee770000000000,
27209 +
            0x00e8ac0000000000,
27210 +
            0x00e9e90000000000,
27211 +
            0x00ea260000000000,
27212 +
            0x00eb630000000000,
27213 +
            0x00db600000000000,
27214 +
            0x00da250000000000,
27215 +
            0x00d9ea0000000000,
27216 +
            0x00d8af0000000000,
27217 +
            0x00de740000000000,
27218 +
            0x00df310000000000,
27219 +
            0x00dcfe0000000000,
27220 +
            0x00ddbb0000000000,
27221 +
            0x00d1480000000000,
27222 +
            0x00d00d0000000000,
27223 +
            0x00d3c20000000000,
27224 +
            0x00d2870000000000,
27225 +
            0x00d45c0000000000,
27226 +
            0x00d5190000000000,
27227 +
            0x00d6d60000000000,
27228 +
            0x00d7930000000000,
27229 +
            0x00cf300000000000,
27230 +
            0x00ce750000000000,
27231 +
            0x00cdba0000000000,
27232 +
            0x00ccff0000000000,
27233 +
            0x00ca240000000000,
27234 +
            0x00cb610000000000,
27235 +
            0x00c8ae0000000000,
27236 +
            0x00c9eb0000000000,
27237 +
            0x00c5180000000000,
27238 +
            0x00c45d0000000000,
27239 +
            0x00c7920000000000,
27240 +
            0x00c6d70000000000,
27241 +
            0x00c00c0000000000,
27242 +
            0x00c1490000000000,
27243 +
            0x00c2860000000000,
27244 +
            0x00c3c30000000000,
27245 +
        ],
27246 +
        [
27247 +
            0x0000000000000000,
27248 +
            0x0000014500000000,
27249 +
            0x0000028a00000000,
27250 +
            0x000003cf00000000,
27251 +
            0x0000051400000000,
27252 +
            0x0000045100000000,
27253 +
            0x0000079e00000000,
27254 +
            0x000006db00000000,
27255 +
            0x00000a2800000000,
27256 +
            0x00000b6d00000000,
27257 +
            0x000008a200000000,
27258 +
            0x000009e700000000,
27259 +
            0x00000f3c00000000,
27260 +
            0x00000e7900000000,
27261 +
            0x00000db600000000,
27262 +
            0x00000cf300000000,
27263 +
            0x0000145000000000,
27264 +
            0x0000151500000000,
27265 +
            0x000016da00000000,
27266 +
            0x0000179f00000000,
27267 +
            0x0000114400000000,
27268 +
            0x0000100100000000,
27269 +
            0x000013ce00000000,
27270 +
            0x0000128b00000000,
27271 +
            0x00001e7800000000,
27272 +
            0x00001f3d00000000,
27273 +
            0x00001cf200000000,
27274 +
            0x00001db700000000,
27275 +
            0x00001b6c00000000,
27276 +
            0x00001a2900000000,
27277 +
            0x000019e600000000,
27278 +
            0x000018a300000000,
27279 +
            0x000028a000000000,
27280 +
            0x000029e500000000,
27281 +
            0x00002a2a00000000,
27282 +
            0x00002b6f00000000,
27283 +
            0x00002db400000000,
27284 +
            0x00002cf100000000,
27285 +
            0x00002f3e00000000,
27286 +
            0x00002e7b00000000,
27287 +
            0x0000228800000000,
27288 +
            0x000023cd00000000,
27289 +
            0x0000200200000000,
27290 +
            0x0000214700000000,
27291 +
            0x0000279c00000000,
27292 +
            0x000026d900000000,
27293 +
            0x0000251600000000,
27294 +
            0x0000245300000000,
27295 +
            0x00003cf000000000,
27296 +
            0x00003db500000000,
27297 +
            0x00003e7a00000000,
27298 +
            0x00003f3f00000000,
27299 +
            0x000039e400000000,
27300 +
            0x000038a100000000,
27301 +
            0x00003b6e00000000,
27302 +
            0x00003a2b00000000,
27303 +
            0x000036d800000000,
27304 +
            0x0000379d00000000,
27305 +
            0x0000345200000000,
27306 +
            0x0000351700000000,
27307 +
            0x000033cc00000000,
27308 +
            0x0000328900000000,
27309 +
            0x0000314600000000,
27310 +
            0x0000300300000000,
27311 +
            0x0000514000000000,
27312 +
            0x0000500500000000,
27313 +
            0x000053ca00000000,
27314 +
            0x0000528f00000000,
27315 +
            0x0000545400000000,
27316 +
            0x0000551100000000,
27317 +
            0x000056de00000000,
27318 +
            0x0000579b00000000,
27319 +
            0x00005b6800000000,
27320 +
            0x00005a2d00000000,
27321 +
            0x000059e200000000,
27322 +
            0x000058a700000000,
27323 +
            0x00005e7c00000000,
27324 +
            0x00005f3900000000,
27325 +
            0x00005cf600000000,
27326 +
            0x00005db300000000,
27327 +
            0x0000451000000000,
27328 +
            0x0000445500000000,
27329 +
            0x0000479a00000000,
27330 +
            0x000046df00000000,
27331 +
            0x0000400400000000,
27332 +
            0x0000414100000000,
27333 +
            0x0000428e00000000,
27334 +
            0x000043cb00000000,
27335 +
            0x00004f3800000000,
27336 +
            0x00004e7d00000000,
27337 +
            0x00004db200000000,
27338 +
            0x00004cf700000000,
27339 +
            0x00004a2c00000000,
27340 +
            0x00004b6900000000,
27341 +
            0x000048a600000000,
27342 +
            0x000049e300000000,
27343 +
            0x000079e000000000,
27344 +
            0x000078a500000000,
27345 +
            0x00007b6a00000000,
27346 +
            0x00007a2f00000000,
27347 +
            0x00007cf400000000,
27348 +
            0x00007db100000000,
27349 +
            0x00007e7e00000000,
27350 +
            0x00007f3b00000000,
27351 +
            0x000073c800000000,
27352 +
            0x0000728d00000000,
27353 +
            0x0000714200000000,
27354 +
            0x0000700700000000,
27355 +
            0x000076dc00000000,
27356 +
            0x0000779900000000,
27357 +
            0x0000745600000000,
27358 +
            0x0000751300000000,
27359 +
            0x00006db000000000,
27360 +
            0x00006cf500000000,
27361 +
            0x00006f3a00000000,
27362 +
            0x00006e7f00000000,
27363 +
            0x000068a400000000,
27364 +
            0x000069e100000000,
27365 +
            0x00006a2e00000000,
27366 +
            0x00006b6b00000000,
27367 +
            0x0000679800000000,
27368 +
            0x000066dd00000000,
27369 +
            0x0000651200000000,
27370 +
            0x0000645700000000,
27371 +
            0x0000628c00000000,
27372 +
            0x000063c900000000,
27373 +
            0x0000600600000000,
27374 +
            0x0000614300000000,
27375 +
            0x0000a28000000000,
27376 +
            0x0000a3c500000000,
27377 +
            0x0000a00a00000000,
27378 +
            0x0000a14f00000000,
27379 +
            0x0000a79400000000,
27380 +
            0x0000a6d100000000,
27381 +
            0x0000a51e00000000,
27382 +
            0x0000a45b00000000,
27383 +
            0x0000a8a800000000,
27384 +
            0x0000a9ed00000000,
27385 +
            0x0000aa2200000000,
27386 +
            0x0000ab6700000000,
27387 +
            0x0000adbc00000000,
27388 +
            0x0000acf900000000,
27389 +
            0x0000af3600000000,
27390 +
            0x0000ae7300000000,
27391 +
            0x0000b6d000000000,
27392 +
            0x0000b79500000000,
27393 +
            0x0000b45a00000000,
27394 +
            0x0000b51f00000000,
27395 +
            0x0000b3c400000000,
27396 +
            0x0000b28100000000,
27397 +
            0x0000b14e00000000,
27398 +
            0x0000b00b00000000,
27399 +
            0x0000bcf800000000,
27400 +
            0x0000bdbd00000000,
27401 +
            0x0000be7200000000,
27402 +
            0x0000bf3700000000,
27403 +
            0x0000b9ec00000000,
27404 +
            0x0000b8a900000000,
27405 +
            0x0000bb6600000000,
27406 +
            0x0000ba2300000000,
27407 +
            0x00008a2000000000,
27408 +
            0x00008b6500000000,
27409 +
            0x000088aa00000000,
27410 +
            0x000089ef00000000,
27411 +
            0x00008f3400000000,
27412 +
            0x00008e7100000000,
27413 +
            0x00008dbe00000000,
27414 +
            0x00008cfb00000000,
27415 +
            0x0000800800000000,
27416 +
            0x0000814d00000000,
27417 +
            0x0000828200000000,
27418 +
            0x000083c700000000,
27419 +
            0x0000851c00000000,
27420 +
            0x0000845900000000,
27421 +
            0x0000879600000000,
27422 +
            0x000086d300000000,
27423 +
            0x00009e7000000000,
27424 +
            0x00009f3500000000,
27425 +
            0x00009cfa00000000,
27426 +
            0x00009dbf00000000,
27427 +
            0x00009b6400000000,
27428 +
            0x00009a2100000000,
27429 +
            0x000099ee00000000,
27430 +
            0x000098ab00000000,
27431 +
            0x0000945800000000,
27432 +
            0x0000951d00000000,
27433 +
            0x000096d200000000,
27434 +
            0x0000979700000000,
27435 +
            0x0000914c00000000,
27436 +
            0x0000900900000000,
27437 +
            0x000093c600000000,
27438 +
            0x0000928300000000,
27439 +
            0x0000f3c000000000,
27440 +
            0x0000f28500000000,
27441 +
            0x0000f14a00000000,
27442 +
            0x0000f00f00000000,
27443 +
            0x0000f6d400000000,
27444 +
            0x0000f79100000000,
27445 +
            0x0000f45e00000000,
27446 +
            0x0000f51b00000000,
27447 +
            0x0000f9e800000000,
27448 +
            0x0000f8ad00000000,
27449 +
            0x0000fb6200000000,
27450 +
            0x0000fa2700000000,
27451 +
            0x0000fcfc00000000,
27452 +
            0x0000fdb900000000,
27453 +
            0x0000fe7600000000,
27454 +
            0x0000ff3300000000,
27455 +
            0x0000e79000000000,
27456 +
            0x0000e6d500000000,
27457 +
            0x0000e51a00000000,
27458 +
            0x0000e45f00000000,
27459 +
            0x0000e28400000000,
27460 +
            0x0000e3c100000000,
27461 +
            0x0000e00e00000000,
27462 +
            0x0000e14b00000000,
27463 +
            0x0000edb800000000,
27464 +
            0x0000ecfd00000000,
27465 +
            0x0000ef3200000000,
27466 +
            0x0000ee7700000000,
27467 +
            0x0000e8ac00000000,
27468 +
            0x0000e9e900000000,
27469 +
            0x0000ea2600000000,
27470 +
            0x0000eb6300000000,
27471 +
            0x0000db6000000000,
27472 +
            0x0000da2500000000,
27473 +
            0x0000d9ea00000000,
27474 +
            0x0000d8af00000000,
27475 +
            0x0000de7400000000,
27476 +
            0x0000df3100000000,
27477 +
            0x0000dcfe00000000,
27478 +
            0x0000ddbb00000000,
27479 +
            0x0000d14800000000,
27480 +
            0x0000d00d00000000,
27481 +
            0x0000d3c200000000,
27482 +
            0x0000d28700000000,
27483 +
            0x0000d45c00000000,
27484 +
            0x0000d51900000000,
27485 +
            0x0000d6d600000000,
27486 +
            0x0000d79300000000,
27487 +
            0x0000cf3000000000,
27488 +
            0x0000ce7500000000,
27489 +
            0x0000cdba00000000,
27490 +
            0x0000ccff00000000,
27491 +
            0x0000ca2400000000,
27492 +
            0x0000cb6100000000,
27493 +
            0x0000c8ae00000000,
27494 +
            0x0000c9eb00000000,
27495 +
            0x0000c51800000000,
27496 +
            0x0000c45d00000000,
27497 +
            0x0000c79200000000,
27498 +
            0x0000c6d700000000,
27499 +
            0x0000c00c00000000,
27500 +
            0x0000c14900000000,
27501 +
            0x0000c28600000000,
27502 +
            0x0000c3c300000000,
27503 +
        ],
27504 +
        [
27505 +
            0x0000000000000000,
27506 +
            0x0000000145000000,
27507 +
            0x000000028a000000,
27508 +
            0x00000003cf000000,
27509 +
            0x0000000514000000,
27510 +
            0x0000000451000000,
27511 +
            0x000000079e000000,
27512 +
            0x00000006db000000,
27513 +
            0x0000000a28000000,
27514 +
            0x0000000b6d000000,
27515 +
            0x00000008a2000000,
27516 +
            0x00000009e7000000,
27517 +
            0x0000000f3c000000,
27518 +
            0x0000000e79000000,
27519 +
            0x0000000db6000000,
27520 +
            0x0000000cf3000000,
27521 +
            0x0000001450000000,
27522 +
            0x0000001515000000,
27523 +
            0x00000016da000000,
27524 +
            0x000000179f000000,
27525 +
            0x0000001144000000,
27526 +
            0x0000001001000000,
27527 +
            0x00000013ce000000,
27528 +
            0x000000128b000000,
27529 +
            0x0000001e78000000,
27530 +
            0x0000001f3d000000,
27531 +
            0x0000001cf2000000,
27532 +
            0x0000001db7000000,
27533 +
            0x0000001b6c000000,
27534 +
            0x0000001a29000000,
27535 +
            0x00000019e6000000,
27536 +
            0x00000018a3000000,
27537 +
            0x00000028a0000000,
27538 +
            0x00000029e5000000,
27539 +
            0x0000002a2a000000,
27540 +
            0x0000002b6f000000,
27541 +
            0x0000002db4000000,
27542 +
            0x0000002cf1000000,
27543 +
            0x0000002f3e000000,
27544 +
            0x0000002e7b000000,
27545 +
            0x0000002288000000,
27546 +
            0x00000023cd000000,
27547 +
            0x0000002002000000,
27548 +
            0x0000002147000000,
27549 +
            0x000000279c000000,
27550 +
            0x00000026d9000000,
27551 +
            0x0000002516000000,
27552 +
            0x0000002453000000,
27553 +
            0x0000003cf0000000,
27554 +
            0x0000003db5000000,
27555 +
            0x0000003e7a000000,
27556 +
            0x0000003f3f000000,
27557 +
            0x00000039e4000000,
27558 +
            0x00000038a1000000,
27559 +
            0x0000003b6e000000,
27560 +
            0x0000003a2b000000,
27561 +
            0x00000036d8000000,
27562 +
            0x000000379d000000,
27563 +
            0x0000003452000000,
27564 +
            0x0000003517000000,
27565 +
            0x00000033cc000000,
27566 +
            0x0000003289000000,
27567 +
            0x0000003146000000,
27568 +
            0x0000003003000000,
27569 +
            0x0000005140000000,
27570 +
            0x0000005005000000,
27571 +
            0x00000053ca000000,
27572 +
            0x000000528f000000,
27573 +
            0x0000005454000000,
27574 +
            0x0000005511000000,
27575 +
            0x00000056de000000,
27576 +
            0x000000579b000000,
27577 +
            0x0000005b68000000,
27578 +
            0x0000005a2d000000,
27579 +
            0x00000059e2000000,
27580 +
            0x00000058a7000000,
27581 +
            0x0000005e7c000000,
27582 +
            0x0000005f39000000,
27583 +
            0x0000005cf6000000,
27584 +
            0x0000005db3000000,
27585 +
            0x0000004510000000,
27586 +
            0x0000004455000000,
27587 +
            0x000000479a000000,
27588 +
            0x00000046df000000,
27589 +
            0x0000004004000000,
27590 +
            0x0000004141000000,
27591 +
            0x000000428e000000,
27592 +
            0x00000043cb000000,
27593 +
            0x0000004f38000000,
27594 +
            0x0000004e7d000000,
27595 +
            0x0000004db2000000,
27596 +
            0x0000004cf7000000,
27597 +
            0x0000004a2c000000,
27598 +
            0x0000004b69000000,
27599 +
            0x00000048a6000000,
27600 +
            0x00000049e3000000,
27601 +
            0x00000079e0000000,
27602 +
            0x00000078a5000000,
27603 +
            0x0000007b6a000000,
27604 +
            0x0000007a2f000000,
27605 +
            0x0000007cf4000000,
27606 +
            0x0000007db1000000,
27607 +
            0x0000007e7e000000,
27608 +
            0x0000007f3b000000,
27609 +
            0x00000073c8000000,
27610 +
            0x000000728d000000,
27611 +
            0x0000007142000000,
27612 +
            0x0000007007000000,
27613 +
            0x00000076dc000000,
27614 +
            0x0000007799000000,
27615 +
            0x0000007456000000,
27616 +
            0x0000007513000000,
27617 +
            0x0000006db0000000,
27618 +
            0x0000006cf5000000,
27619 +
            0x0000006f3a000000,
27620 +
            0x0000006e7f000000,
27621 +
            0x00000068a4000000,
27622 +
            0x00000069e1000000,
27623 +
            0x0000006a2e000000,
27624 +
            0x0000006b6b000000,
27625 +
            0x0000006798000000,
27626 +
            0x00000066dd000000,
27627 +
            0x0000006512000000,
27628 +
            0x0000006457000000,
27629 +
            0x000000628c000000,
27630 +
            0x00000063c9000000,
27631 +
            0x0000006006000000,
27632 +
            0x0000006143000000,
27633 +
            0x000000a280000000,
27634 +
            0x000000a3c5000000,
27635 +
            0x000000a00a000000,
27636 +
            0x000000a14f000000,
27637 +
            0x000000a794000000,
27638 +
            0x000000a6d1000000,
27639 +
            0x000000a51e000000,
27640 +
            0x000000a45b000000,
27641 +
            0x000000a8a8000000,
27642 +
            0x000000a9ed000000,
27643 +
            0x000000aa22000000,
27644 +
            0x000000ab67000000,
27645 +
            0x000000adbc000000,
27646 +
            0x000000acf9000000,
27647 +
            0x000000af36000000,
27648 +
            0x000000ae73000000,
27649 +
            0x000000b6d0000000,
27650 +
            0x000000b795000000,
27651 +
            0x000000b45a000000,
27652 +
            0x000000b51f000000,
27653 +
            0x000000b3c4000000,
27654 +
            0x000000b281000000,
27655 +
            0x000000b14e000000,
27656 +
            0x000000b00b000000,
27657 +
            0x000000bcf8000000,
27658 +
            0x000000bdbd000000,
27659 +
            0x000000be72000000,
27660 +
            0x000000bf37000000,
27661 +
            0x000000b9ec000000,
27662 +
            0x000000b8a9000000,
27663 +
            0x000000bb66000000,
27664 +
            0x000000ba23000000,
27665 +
            0x0000008a20000000,
27666 +
            0x0000008b65000000,
27667 +
            0x00000088aa000000,
27668 +
            0x00000089ef000000,
27669 +
            0x0000008f34000000,
27670 +
            0x0000008e71000000,
27671 +
            0x0000008dbe000000,
27672 +
            0x0000008cfb000000,
27673 +
            0x0000008008000000,
27674 +
            0x000000814d000000,
27675 +
            0x0000008282000000,
27676 +
            0x00000083c7000000,
27677 +
            0x000000851c000000,
27678 +
            0x0000008459000000,
27679 +
            0x0000008796000000,
27680 +
            0x00000086d3000000,
27681 +
            0x0000009e70000000,
27682 +
            0x0000009f35000000,
27683 +
            0x0000009cfa000000,
27684 +
            0x0000009dbf000000,
27685 +
            0x0000009b64000000,
27686 +
            0x0000009a21000000,
27687 +
            0x00000099ee000000,
27688 +
            0x00000098ab000000,
27689 +
            0x0000009458000000,
27690 +
            0x000000951d000000,
27691 +
            0x00000096d2000000,
27692 +
            0x0000009797000000,
27693 +
            0x000000914c000000,
27694 +
            0x0000009009000000,
27695 +
            0x00000093c6000000,
27696 +
            0x0000009283000000,
27697 +
            0x000000f3c0000000,
27698 +
            0x000000f285000000,
27699 +
            0x000000f14a000000,
27700 +
            0x000000f00f000000,
27701 +
            0x000000f6d4000000,
27702 +
            0x000000f791000000,
27703 +
            0x000000f45e000000,
27704 +
            0x000000f51b000000,
27705 +
            0x000000f9e8000000,
27706 +
            0x000000f8ad000000,
27707 +
            0x000000fb62000000,
27708 +
            0x000000fa27000000,
27709 +
            0x000000fcfc000000,
27710 +
            0x000000fdb9000000,
27711 +
            0x000000fe76000000,
27712 +
            0x000000ff33000000,
27713 +
            0x000000e790000000,
27714 +
            0x000000e6d5000000,
27715 +
            0x000000e51a000000,
27716 +
            0x000000e45f000000,
27717 +
            0x000000e284000000,
27718 +
            0x000000e3c1000000,
27719 +
            0x000000e00e000000,
27720 +
            0x000000e14b000000,
27721 +
            0x000000edb8000000,
27722 +
            0x000000ecfd000000,
27723 +
            0x000000ef32000000,
27724 +
            0x000000ee77000000,
27725 +
            0x000000e8ac000000,
27726 +
            0x000000e9e9000000,
27727 +
            0x000000ea26000000,
27728 +
            0x000000eb63000000,
27729 +
            0x000000db60000000,
27730 +
            0x000000da25000000,
27731 +
            0x000000d9ea000000,
27732 +
            0x000000d8af000000,
27733 +
            0x000000de74000000,
27734 +
            0x000000df31000000,
27735 +
            0x000000dcfe000000,
27736 +
            0x000000ddbb000000,
27737 +
            0x000000d148000000,
27738 +
            0x000000d00d000000,
27739 +
            0x000000d3c2000000,
27740 +
            0x000000d287000000,
27741 +
            0x000000d45c000000,
27742 +
            0x000000d519000000,
27743 +
            0x000000d6d6000000,
27744 +
            0x000000d793000000,
27745 +
            0x000000cf30000000,
27746 +
            0x000000ce75000000,
27747 +
            0x000000cdba000000,
27748 +
            0x000000ccff000000,
27749 +
            0x000000ca24000000,
27750 +
            0x000000cb61000000,
27751 +
            0x000000c8ae000000,
27752 +
            0x000000c9eb000000,
27753 +
            0x000000c518000000,
27754 +
            0x000000c45d000000,
27755 +
            0x000000c792000000,
27756 +
            0x000000c6d7000000,
27757 +
            0x000000c00c000000,
27758 +
            0x000000c149000000,
27759 +
            0x000000c286000000,
27760 +
            0x000000c3c3000000,
27761 +
        ],
27762 +
        [
27763 +
            0x0000000000000000,
27764 +
            0x0000000001450000,
27765 +
            0x00000000028a0000,
27766 +
            0x0000000003cf0000,
27767 +
            0x0000000005140000,
27768 +
            0x0000000004510000,
27769 +
            0x00000000079e0000,
27770 +
            0x0000000006db0000,
27771 +
            0x000000000a280000,
27772 +
            0x000000000b6d0000,
27773 +
            0x0000000008a20000,
27774 +
            0x0000000009e70000,
27775 +
            0x000000000f3c0000,
27776 +
            0x000000000e790000,
27777 +
            0x000000000db60000,
27778 +
            0x000000000cf30000,
27779 +
            0x0000000014500000,
27780 +
            0x0000000015150000,
27781 +
            0x0000000016da0000,
27782 +
            0x00000000179f0000,
27783 +
            0x0000000011440000,
27784 +
            0x0000000010010000,
27785 +
            0x0000000013ce0000,
27786 +
            0x00000000128b0000,
27787 +
            0x000000001e780000,
27788 +
            0x000000001f3d0000,
27789 +
            0x000000001cf20000,
27790 +
            0x000000001db70000,
27791 +
            0x000000001b6c0000,
27792 +
            0x000000001a290000,
27793 +
            0x0000000019e60000,
27794 +
            0x0000000018a30000,
27795 +
            0x0000000028a00000,
27796 +
            0x0000000029e50000,
27797 +
            0x000000002a2a0000,
27798 +
            0x000000002b6f0000,
27799 +
            0x000000002db40000,
27800 +
            0x000000002cf10000,
27801 +
            0x000000002f3e0000,
27802 +
            0x000000002e7b0000,
27803 +
            0x0000000022880000,
27804 +
            0x0000000023cd0000,
27805 +
            0x0000000020020000,
27806 +
            0x0000000021470000,
27807 +
            0x00000000279c0000,
27808 +
            0x0000000026d90000,
27809 +
            0x0000000025160000,
27810 +
            0x0000000024530000,
27811 +
            0x000000003cf00000,
27812 +
            0x000000003db50000,
27813 +
            0x000000003e7a0000,
27814 +
            0x000000003f3f0000,
27815 +
            0x0000000039e40000,
27816 +
            0x0000000038a10000,
27817 +
            0x000000003b6e0000,
27818 +
            0x000000003a2b0000,
27819 +
            0x0000000036d80000,
27820 +
            0x00000000379d0000,
27821 +
            0x0000000034520000,
27822 +
            0x0000000035170000,
27823 +
            0x0000000033cc0000,
27824 +
            0x0000000032890000,
27825 +
            0x0000000031460000,
27826 +
            0x0000000030030000,
27827 +
            0x0000000051400000,
27828 +
            0x0000000050050000,
27829 +
            0x0000000053ca0000,
27830 +
            0x00000000528f0000,
27831 +
            0x0000000054540000,
27832 +
            0x0000000055110000,
27833 +
            0x0000000056de0000,
27834 +
            0x00000000579b0000,
27835 +
            0x000000005b680000,
27836 +
            0x000000005a2d0000,
27837 +
            0x0000000059e20000,
27838 +
            0x0000000058a70000,
27839 +
            0x000000005e7c0000,
27840 +
            0x000000005f390000,
27841 +
            0x000000005cf60000,
27842 +
            0x000000005db30000,
27843 +
            0x0000000045100000,
27844 +
            0x0000000044550000,
27845 +
            0x00000000479a0000,
27846 +
            0x0000000046df0000,
27847 +
            0x0000000040040000,
27848 +
            0x0000000041410000,
27849 +
            0x00000000428e0000,
27850 +
            0x0000000043cb0000,
27851 +
            0x000000004f380000,
27852 +
            0x000000004e7d0000,
27853 +
            0x000000004db20000,
27854 +
            0x000000004cf70000,
27855 +
            0x000000004a2c0000,
27856 +
            0x000000004b690000,
27857 +
            0x0000000048a60000,
27858 +
            0x0000000049e30000,
27859 +
            0x0000000079e00000,
27860 +
            0x0000000078a50000,
27861 +
            0x000000007b6a0000,
27862 +
            0x000000007a2f0000,
27863 +
            0x000000007cf40000,
27864 +
            0x000000007db10000,
27865 +
            0x000000007e7e0000,
27866 +
            0x000000007f3b0000,
27867 +
            0x0000000073c80000,
27868 +
            0x00000000728d0000,
27869 +
            0x0000000071420000,
27870 +
            0x0000000070070000,
27871 +
            0x0000000076dc0000,
27872 +
            0x0000000077990000,
27873 +
            0x0000000074560000,
27874 +
            0x0000000075130000,
27875 +
            0x000000006db00000,
27876 +
            0x000000006cf50000,
27877 +
            0x000000006f3a0000,
27878 +
            0x000000006e7f0000,
27879 +
            0x0000000068a40000,
27880 +
            0x0000000069e10000,
27881 +
            0x000000006a2e0000,
27882 +
            0x000000006b6b0000,
27883 +
            0x0000000067980000,
27884 +
            0x0000000066dd0000,
27885 +
            0x0000000065120000,
27886 +
            0x0000000064570000,
27887 +
            0x00000000628c0000,
27888 +
            0x0000000063c90000,
27889 +
            0x0000000060060000,
27890 +
            0x0000000061430000,
27891 +
            0x00000000a2800000,
27892 +
            0x00000000a3c50000,
27893 +
            0x00000000a00a0000,
27894 +
            0x00000000a14f0000,
27895 +
            0x00000000a7940000,
27896 +
            0x00000000a6d10000,
27897 +
            0x00000000a51e0000,
27898 +
            0x00000000a45b0000,
27899 +
            0x00000000a8a80000,
27900 +
            0x00000000a9ed0000,
27901 +
            0x00000000aa220000,
27902 +
            0x00000000ab670000,
27903 +
            0x00000000adbc0000,
27904 +
            0x00000000acf90000,
27905 +
            0x00000000af360000,
27906 +
            0x00000000ae730000,
27907 +
            0x00000000b6d00000,
27908 +
            0x00000000b7950000,
27909 +
            0x00000000b45a0000,
27910 +
            0x00000000b51f0000,
27911 +
            0x00000000b3c40000,
27912 +
            0x00000000b2810000,
27913 +
            0x00000000b14e0000,
27914 +
            0x00000000b00b0000,
27915 +
            0x00000000bcf80000,
27916 +
            0x00000000bdbd0000,
27917 +
            0x00000000be720000,
27918 +
            0x00000000bf370000,
27919 +
            0x00000000b9ec0000,
27920 +
            0x00000000b8a90000,
27921 +
            0x00000000bb660000,
27922 +
            0x00000000ba230000,
27923 +
            0x000000008a200000,
27924 +
            0x000000008b650000,
27925 +
            0x0000000088aa0000,
27926 +
            0x0000000089ef0000,
27927 +
            0x000000008f340000,
27928 +
            0x000000008e710000,
27929 +
            0x000000008dbe0000,
27930 +
            0x000000008cfb0000,
27931 +
            0x0000000080080000,
27932 +
            0x00000000814d0000,
27933 +
            0x0000000082820000,
27934 +
            0x0000000083c70000,
27935 +
            0x00000000851c0000,
27936 +
            0x0000000084590000,
27937 +
            0x0000000087960000,
27938 +
            0x0000000086d30000,
27939 +
            0x000000009e700000,
27940 +
            0x000000009f350000,
27941 +
            0x000000009cfa0000,
27942 +
            0x000000009dbf0000,
27943 +
            0x000000009b640000,
27944 +
            0x000000009a210000,
27945 +
            0x0000000099ee0000,
27946 +
            0x0000000098ab0000,
27947 +
            0x0000000094580000,
27948 +
            0x00000000951d0000,
27949 +
            0x0000000096d20000,
27950 +
            0x0000000097970000,
27951 +
            0x00000000914c0000,
27952 +
            0x0000000090090000,
27953 +
            0x0000000093c60000,
27954 +
            0x0000000092830000,
27955 +
            0x00000000f3c00000,
27956 +
            0x00000000f2850000,
27957 +
            0x00000000f14a0000,
27958 +
            0x00000000f00f0000,
27959 +
            0x00000000f6d40000,
27960 +
            0x00000000f7910000,
27961 +
            0x00000000f45e0000,
27962 +
            0x00000000f51b0000,
27963 +
            0x00000000f9e80000,
27964 +
            0x00000000f8ad0000,
27965 +
            0x00000000fb620000,
27966 +
            0x00000000fa270000,
27967 +
            0x00000000fcfc0000,
27968 +
            0x00000000fdb90000,
27969 +
            0x00000000fe760000,
27970 +
            0x00000000ff330000,
27971 +
            0x00000000e7900000,
27972 +
            0x00000000e6d50000,
27973 +
            0x00000000e51a0000,
27974 +
            0x00000000e45f0000,
27975 +
            0x00000000e2840000,
27976 +
            0x00000000e3c10000,
27977 +
            0x00000000e00e0000,
27978 +
            0x00000000e14b0000,
27979 +
            0x00000000edb80000,
27980 +
            0x00000000ecfd0000,
27981 +
            0x00000000ef320000,
27982 +
            0x00000000ee770000,
27983 +
            0x00000000e8ac0000,
27984 +
            0x00000000e9e90000,
27985 +
            0x00000000ea260000,
27986 +
            0x00000000eb630000,
27987 +
            0x00000000db600000,
27988 +
            0x00000000da250000,
27989 +
            0x00000000d9ea0000,
27990 +
            0x00000000d8af0000,
27991 +
            0x00000000de740000,
27992 +
            0x00000000df310000,
27993 +
            0x00000000dcfe0000,
27994 +
            0x00000000ddbb0000,
27995 +
            0x00000000d1480000,
27996 +
            0x00000000d00d0000,
27997 +
            0x00000000d3c20000,
27998 +
            0x00000000d2870000,
27999 +
            0x00000000d45c0000,
28000 +
            0x00000000d5190000,
28001 +
            0x00000000d6d60000,
28002 +
            0x00000000d7930000,
28003 +
            0x00000000cf300000,
28004 +
            0x00000000ce750000,
28005 +
            0x00000000cdba0000,
28006 +
            0x00000000ccff0000,
28007 +
            0x00000000ca240000,
28008 +
            0x00000000cb610000,
28009 +
            0x00000000c8ae0000,
28010 +
            0x00000000c9eb0000,
28011 +
            0x00000000c5180000,
28012 +
            0x00000000c45d0000,
28013 +
            0x00000000c7920000,
28014 +
            0x00000000c6d70000,
28015 +
            0x00000000c00c0000,
28016 +
            0x00000000c1490000,
28017 +
            0x00000000c2860000,
28018 +
            0x00000000c3c30000,
28019 +
        ],
28020 +
        [
28021 +
            0x0000000000000000,
28022 +
            0x0000000000014500,
28023 +
            0x0000000000028a00,
28024 +
            0x000000000003cf00,
28025 +
            0x0000000000051400,
28026 +
            0x0000000000045100,
28027 +
            0x0000000000079e00,
28028 +
            0x000000000006db00,
28029 +
            0x00000000000a2800,
28030 +
            0x00000000000b6d00,
28031 +
            0x000000000008a200,
28032 +
            0x000000000009e700,
28033 +
            0x00000000000f3c00,
28034 +
            0x00000000000e7900,
28035 +
            0x00000000000db600,
28036 +
            0x00000000000cf300,
28037 +
            0x0000000000145000,
28038 +
            0x0000000000151500,
28039 +
            0x000000000016da00,
28040 +
            0x0000000000179f00,
28041 +
            0x0000000000114400,
28042 +
            0x0000000000100100,
28043 +
            0x000000000013ce00,
28044 +
            0x0000000000128b00,
28045 +
            0x00000000001e7800,
28046 +
            0x00000000001f3d00,
28047 +
            0x00000000001cf200,
28048 +
            0x00000000001db700,
28049 +
            0x00000000001b6c00,
28050 +
            0x00000000001a2900,
28051 +
            0x000000000019e600,
28052 +
            0x000000000018a300,
28053 +
            0x000000000028a000,
28054 +
            0x000000000029e500,
28055 +
            0x00000000002a2a00,
28056 +
            0x00000000002b6f00,
28057 +
            0x00000000002db400,
28058 +
            0x00000000002cf100,
28059 +
            0x00000000002f3e00,
28060 +
            0x00000000002e7b00,
28061 +
            0x0000000000228800,
28062 +
            0x000000000023cd00,
28063 +
            0x0000000000200200,
28064 +
            0x0000000000214700,
28065 +
            0x0000000000279c00,
28066 +
            0x000000000026d900,
28067 +
            0x0000000000251600,
28068 +
            0x0000000000245300,
28069 +
            0x00000000003cf000,
28070 +
            0x00000000003db500,
28071 +
            0x00000000003e7a00,
28072 +
            0x00000000003f3f00,
28073 +
            0x000000000039e400,
28074 +
            0x000000000038a100,
28075 +
            0x00000000003b6e00,
28076 +
            0x00000000003a2b00,
28077 +
            0x000000000036d800,
28078 +
            0x0000000000379d00,
28079 +
            0x0000000000345200,
28080 +
            0x0000000000351700,
28081 +
            0x000000000033cc00,
28082 +
            0x0000000000328900,
28083 +
            0x0000000000314600,
28084 +
            0x0000000000300300,
28085 +
            0x0000000000514000,
28086 +
            0x0000000000500500,
28087 +
            0x000000000053ca00,
28088 +
            0x0000000000528f00,
28089 +
            0x0000000000545400,
28090 +
            0x0000000000551100,
28091 +
            0x000000000056de00,
28092 +
            0x0000000000579b00,
28093 +
            0x00000000005b6800,
28094 +
            0x00000000005a2d00,
28095 +
            0x000000000059e200,
28096 +
            0x000000000058a700,
28097 +
            0x00000000005e7c00,
28098 +
            0x00000000005f3900,
28099 +
            0x00000000005cf600,
28100 +
            0x00000000005db300,
28101 +
            0x0000000000451000,
28102 +
            0x0000000000445500,
28103 +
            0x0000000000479a00,
28104 +
            0x000000000046df00,
28105 +
            0x0000000000400400,
28106 +
            0x0000000000414100,
28107 +
            0x0000000000428e00,
28108 +
            0x000000000043cb00,
28109 +
            0x00000000004f3800,
28110 +
            0x00000000004e7d00,
28111 +
            0x00000000004db200,
28112 +
            0x00000000004cf700,
28113 +
            0x00000000004a2c00,
28114 +
            0x00000000004b6900,
28115 +
            0x000000000048a600,
28116 +
            0x000000000049e300,
28117 +
            0x000000000079e000,
28118 +
            0x000000000078a500,
28119 +
            0x00000000007b6a00,
28120 +
            0x00000000007a2f00,
28121 +
            0x00000000007cf400,
28122 +
            0x00000000007db100,
28123 +
            0x00000000007e7e00,
28124 +
            0x00000000007f3b00,
28125 +
            0x000000000073c800,
28126 +
            0x0000000000728d00,
28127 +
            0x0000000000714200,
28128 +
            0x0000000000700700,
28129 +
            0x000000000076dc00,
28130 +
            0x0000000000779900,
28131 +
            0x0000000000745600,
28132 +
            0x0000000000751300,
28133 +
            0x00000000006db000,
28134 +
            0x00000000006cf500,
28135 +
            0x00000000006f3a00,
28136 +
            0x00000000006e7f00,
28137 +
            0x000000000068a400,
28138 +
            0x000000000069e100,
28139 +
            0x00000000006a2e00,
28140 +
            0x00000000006b6b00,
28141 +
            0x0000000000679800,
28142 +
            0x000000000066dd00,
28143 +
            0x0000000000651200,
28144 +
            0x0000000000645700,
28145 +
            0x0000000000628c00,
28146 +
            0x000000000063c900,
28147 +
            0x0000000000600600,
28148 +
            0x0000000000614300,
28149 +
            0x0000000000a28000,
28150 +
            0x0000000000a3c500,
28151 +
            0x0000000000a00a00,
28152 +
            0x0000000000a14f00,
28153 +
            0x0000000000a79400,
28154 +
            0x0000000000a6d100,
28155 +
            0x0000000000a51e00,
28156 +
            0x0000000000a45b00,
28157 +
            0x0000000000a8a800,
28158 +
            0x0000000000a9ed00,
28159 +
            0x0000000000aa2200,
28160 +
            0x0000000000ab6700,
28161 +
            0x0000000000adbc00,
28162 +
            0x0000000000acf900,
28163 +
            0x0000000000af3600,
28164 +
            0x0000000000ae7300,
28165 +
            0x0000000000b6d000,
28166 +
            0x0000000000b79500,
28167 +
            0x0000000000b45a00,
28168 +
            0x0000000000b51f00,
28169 +
            0x0000000000b3c400,
28170 +
            0x0000000000b28100,
28171 +
            0x0000000000b14e00,
28172 +
            0x0000000000b00b00,
28173 +
            0x0000000000bcf800,
28174 +
            0x0000000000bdbd00,
28175 +
            0x0000000000be7200,
28176 +
            0x0000000000bf3700,
28177 +
            0x0000000000b9ec00,
28178 +
            0x0000000000b8a900,
28179 +
            0x0000000000bb6600,
28180 +
            0x0000000000ba2300,
28181 +
            0x00000000008a2000,
28182 +
            0x00000000008b6500,
28183 +
            0x000000000088aa00,
28184 +
            0x000000000089ef00,
28185 +
            0x00000000008f3400,
28186 +
            0x00000000008e7100,
28187 +
            0x00000000008dbe00,
28188 +
            0x00000000008cfb00,
28189 +
            0x0000000000800800,
28190 +
            0x0000000000814d00,
28191 +
            0x0000000000828200,
28192 +
            0x000000000083c700,
28193 +
            0x0000000000851c00,
28194 +
            0x0000000000845900,
28195 +
            0x0000000000879600,
28196 +
            0x000000000086d300,
28197 +
            0x00000000009e7000,
28198 +
            0x00000000009f3500,
28199 +
            0x00000000009cfa00,
28200 +
            0x00000000009dbf00,
28201 +
            0x00000000009b6400,
28202 +
            0x00000000009a2100,
28203 +
            0x000000000099ee00,
28204 +
            0x000000000098ab00,
28205 +
            0x0000000000945800,
28206 +
            0x0000000000951d00,
28207 +
            0x000000000096d200,
28208 +
            0x0000000000979700,
28209 +
            0x0000000000914c00,
28210 +
            0x0000000000900900,
28211 +
            0x000000000093c600,
28212 +
            0x0000000000928300,
28213 +
            0x0000000000f3c000,
28214 +
            0x0000000000f28500,
28215 +
            0x0000000000f14a00,
28216 +
            0x0000000000f00f00,
28217 +
            0x0000000000f6d400,
28218 +
            0x0000000000f79100,
28219 +
            0x0000000000f45e00,
28220 +
            0x0000000000f51b00,
28221 +
            0x0000000000f9e800,
28222 +
            0x0000000000f8ad00,
28223 +
            0x0000000000fb6200,
28224 +
            0x0000000000fa2700,
28225 +
            0x0000000000fcfc00,
28226 +
            0x0000000000fdb900,
28227 +
            0x0000000000fe7600,
28228 +
            0x0000000000ff3300,
28229 +
            0x0000000000e79000,
28230 +
            0x0000000000e6d500,
28231 +
            0x0000000000e51a00,
28232 +
            0x0000000000e45f00,
28233 +
            0x0000000000e28400,
28234 +
            0x0000000000e3c100,
28235 +
            0x0000000000e00e00,
28236 +
            0x0000000000e14b00,
28237 +
            0x0000000000edb800,
28238 +
            0x0000000000ecfd00,
28239 +
            0x0000000000ef3200,
28240 +
            0x0000000000ee7700,
28241 +
            0x0000000000e8ac00,
28242 +
            0x0000000000e9e900,
28243 +
            0x0000000000ea2600,
28244 +
            0x0000000000eb6300,
28245 +
            0x0000000000db6000,
28246 +
            0x0000000000da2500,
28247 +
            0x0000000000d9ea00,
28248 +
            0x0000000000d8af00,
28249 +
            0x0000000000de7400,
28250 +
            0x0000000000df3100,
28251 +
            0x0000000000dcfe00,
28252 +
            0x0000000000ddbb00,
28253 +
            0x0000000000d14800,
28254 +
            0x0000000000d00d00,
28255 +
            0x0000000000d3c200,
28256 +
            0x0000000000d28700,
28257 +
            0x0000000000d45c00,
28258 +
            0x0000000000d51900,
28259 +
            0x0000000000d6d600,
28260 +
            0x0000000000d79300,
28261 +
            0x0000000000cf3000,
28262 +
            0x0000000000ce7500,
28263 +
            0x0000000000cdba00,
28264 +
            0x0000000000ccff00,
28265 +
            0x0000000000ca2400,
28266 +
            0x0000000000cb6100,
28267 +
            0x0000000000c8ae00,
28268 +
            0x0000000000c9eb00,
28269 +
            0x0000000000c51800,
28270 +
            0x0000000000c45d00,
28271 +
            0x0000000000c79200,
28272 +
            0x0000000000c6d700,
28273 +
            0x0000000000c00c00,
28274 +
            0x0000000000c14900,
28275 +
            0x0000000000c28600,
28276 +
            0x0000000000c3c300,
28277 +
        ],
28278 +
        [
28279 +
            0x0000000000000000,
28280 +
            0x0000000000000145,
28281 +
            0x000000000000028a,
28282 +
            0x00000000000003cf,
28283 +
            0x0000000000000514,
28284 +
            0x0000000000000451,
28285 +
            0x000000000000079e,
28286 +
            0x00000000000006db,
28287 +
            0x0000000000000a28,
28288 +
            0x0000000000000b6d,
28289 +
            0x00000000000008a2,
28290 +
            0x00000000000009e7,
28291 +
            0x0000000000000f3c,
28292 +
            0x0000000000000e79,
28293 +
            0x0000000000000db6,
28294 +
            0x0000000000000cf3,
28295 +
            0x0000000000001450,
28296 +
            0x0000000000001515,
28297 +
            0x00000000000016da,
28298 +
            0x000000000000179f,
28299 +
            0x0000000000001144,
28300 +
            0x0000000000001001,
28301 +
            0x00000000000013ce,
28302 +
            0x000000000000128b,
28303 +
            0x0000000000001e78,
28304 +
            0x0000000000001f3d,
28305 +
            0x0000000000001cf2,
28306 +
            0x0000000000001db7,
28307 +
            0x0000000000001b6c,
28308 +
            0x0000000000001a29,
28309 +
            0x00000000000019e6,
28310 +
            0x00000000000018a3,
28311 +
            0x00000000000028a0,
28312 +
            0x00000000000029e5,
28313 +
            0x0000000000002a2a,
28314 +
            0x0000000000002b6f,
28315 +
            0x0000000000002db4,
28316 +
            0x0000000000002cf1,
28317 +
            0x0000000000002f3e,
28318 +
            0x0000000000002e7b,
28319 +
            0x0000000000002288,
28320 +
            0x00000000000023cd,
28321 +
            0x0000000000002002,
28322 +
            0x0000000000002147,
28323 +
            0x000000000000279c,
28324 +
            0x00000000000026d9,
28325 +
            0x0000000000002516,
28326 +
            0x0000000000002453,
28327 +
            0x0000000000003cf0,
28328 +
            0x0000000000003db5,
28329 +
            0x0000000000003e7a,
28330 +
            0x0000000000003f3f,
28331 +
            0x00000000000039e4,
28332 +
            0x00000000000038a1,
28333 +
            0x0000000000003b6e,
28334 +
            0x0000000000003a2b,
28335 +
            0x00000000000036d8,
28336 +
            0x000000000000379d,
28337 +
            0x0000000000003452,
28338 +
            0x0000000000003517,
28339 +
            0x00000000000033cc,
28340 +
            0x0000000000003289,
28341 +
            0x0000000000003146,
28342 +
            0x0000000000003003,
28343 +
            0x0000000000005140,
28344 +
            0x0000000000005005,
28345 +
            0x00000000000053ca,
28346 +
            0x000000000000528f,
28347 +
            0x0000000000005454,
28348 +
            0x0000000000005511,
28349 +
            0x00000000000056de,
28350 +
            0x000000000000579b,
28351 +
            0x0000000000005b68,
28352 +
            0x0000000000005a2d,
28353 +
            0x00000000000059e2,
28354 +
            0x00000000000058a7,
28355 +
            0x0000000000005e7c,
28356 +
            0x0000000000005f39,
28357 +
            0x0000000000005cf6,
28358 +
            0x0000000000005db3,
28359 +
            0x0000000000004510,
28360 +
            0x0000000000004455,
28361 +
            0x000000000000479a,
28362 +
            0x00000000000046df,
28363 +
            0x0000000000004004,
28364 +
            0x0000000000004141,
28365 +
            0x000000000000428e,
28366 +
            0x00000000000043cb,
28367 +
            0x0000000000004f38,
28368 +
            0x0000000000004e7d,
28369 +
            0x0000000000004db2,
28370 +
            0x0000000000004cf7,
28371 +
            0x0000000000004a2c,
28372 +
            0x0000000000004b69,
28373 +
            0x00000000000048a6,
28374 +
            0x00000000000049e3,
28375 +
            0x00000000000079e0,
28376 +
            0x00000000000078a5,
28377 +
            0x0000000000007b6a,
28378 +
            0x0000000000007a2f,
28379 +
            0x0000000000007cf4,
28380 +
            0x0000000000007db1,
28381 +
            0x0000000000007e7e,
28382 +
            0x0000000000007f3b,
28383 +
            0x00000000000073c8,
28384 +
            0x000000000000728d,
28385 +
            0x0000000000007142,
28386 +
            0x0000000000007007,
28387 +
            0x00000000000076dc,
28388 +
            0x0000000000007799,
28389 +
            0x0000000000007456,
28390 +
            0x0000000000007513,
28391 +
            0x0000000000006db0,
28392 +
            0x0000000000006cf5,
28393 +
            0x0000000000006f3a,
28394 +
            0x0000000000006e7f,
28395 +
            0x00000000000068a4,
28396 +
            0x00000000000069e1,
28397 +
            0x0000000000006a2e,
28398 +
            0x0000000000006b6b,
28399 +
            0x0000000000006798,
28400 +
            0x00000000000066dd,
28401 +
            0x0000000000006512,
28402 +
            0x0000000000006457,
28403 +
            0x000000000000628c,
28404 +
            0x00000000000063c9,
28405 +
            0x0000000000006006,
28406 +
            0x0000000000006143,
28407 +
            0x000000000000a280,
28408 +
            0x000000000000a3c5,
28409 +
            0x000000000000a00a,
28410 +
            0x000000000000a14f,
28411 +
            0x000000000000a794,
28412 +
            0x000000000000a6d1,
28413 +
            0x000000000000a51e,
28414 +
            0x000000000000a45b,
28415 +
            0x000000000000a8a8,
28416 +
            0x000000000000a9ed,
28417 +
            0x000000000000aa22,
28418 +
            0x000000000000ab67,
28419 +
            0x000000000000adbc,
28420 +
            0x000000000000acf9,
28421 +
            0x000000000000af36,
28422 +
            0x000000000000ae73,
28423 +
            0x000000000000b6d0,
28424 +
            0x000000000000b795,
28425 +
            0x000000000000b45a,
28426 +
            0x000000000000b51f,
28427 +
            0x000000000000b3c4,
28428 +
            0x000000000000b281,
28429 +
            0x000000000000b14e,
28430 +
            0x000000000000b00b,
28431 +
            0x000000000000bcf8,
28432 +
            0x000000000000bdbd,
28433 +
            0x000000000000be72,
28434 +
            0x000000000000bf37,
28435 +
            0x000000000000b9ec,
28436 +
            0x000000000000b8a9,
28437 +
            0x000000000000bb66,
28438 +
            0x000000000000ba23,
28439 +
            0x0000000000008a20,
28440 +
            0x0000000000008b65,
28441 +
            0x00000000000088aa,
28442 +
            0x00000000000089ef,
28443 +
            0x0000000000008f34,
28444 +
            0x0000000000008e71,
28445 +
            0x0000000000008dbe,
28446 +
            0x0000000000008cfb,
28447 +
            0x0000000000008008,
28448 +
            0x000000000000814d,
28449 +
            0x0000000000008282,
28450 +
            0x00000000000083c7,
28451 +
            0x000000000000851c,
28452 +
            0x0000000000008459,
28453 +
            0x0000000000008796,
28454 +
            0x00000000000086d3,
28455 +
            0x0000000000009e70,
28456 +
            0x0000000000009f35,
28457 +
            0x0000000000009cfa,
28458 +
            0x0000000000009dbf,
28459 +
            0x0000000000009b64,
28460 +
            0x0000000000009a21,
28461 +
            0x00000000000099ee,
28462 +
            0x00000000000098ab,
28463 +
            0x0000000000009458,
28464 +
            0x000000000000951d,
28465 +
            0x00000000000096d2,
28466 +
            0x0000000000009797,
28467 +
            0x000000000000914c,
28468 +
            0x0000000000009009,
28469 +
            0x00000000000093c6,
28470 +
            0x0000000000009283,
28471 +
            0x000000000000f3c0,
28472 +
            0x000000000000f285,
28473 +
            0x000000000000f14a,
28474 +
            0x000000000000f00f,
28475 +
            0x000000000000f6d4,
28476 +
            0x000000000000f791,
28477 +
            0x000000000000f45e,
28478 +
            0x000000000000f51b,
28479 +
            0x000000000000f9e8,
28480 +
            0x000000000000f8ad,
28481 +
            0x000000000000fb62,
28482 +
            0x000000000000fa27,
28483 +
            0x000000000000fcfc,
28484 +
            0x000000000000fdb9,
28485 +
            0x000000000000fe76,
28486 +
            0x000000000000ff33,
28487 +
            0x000000000000e790,
28488 +
            0x000000000000e6d5,
28489 +
            0x000000000000e51a,
28490 +
            0x000000000000e45f,
28491 +
            0x000000000000e284,
28492 +
            0x000000000000e3c1,
28493 +
            0x000000000000e00e,
28494 +
            0x000000000000e14b,
28495 +
            0x000000000000edb8,
28496 +
            0x000000000000ecfd,
28497 +
            0x000000000000ef32,
28498 +
            0x000000000000ee77,
28499 +
            0x000000000000e8ac,
28500 +
            0x000000000000e9e9,
28501 +
            0x000000000000ea26,
28502 +
            0x000000000000eb63,
28503 +
            0x000000000000db60,
28504 +
            0x000000000000da25,
28505 +
            0x000000000000d9ea,
28506 +
            0x000000000000d8af,
28507 +
            0x000000000000de74,
28508 +
            0x000000000000df31,
28509 +
            0x000000000000dcfe,
28510 +
            0x000000000000ddbb,
28511 +
            0x000000000000d148,
28512 +
            0x000000000000d00d,
28513 +
            0x000000000000d3c2,
28514 +
            0x000000000000d287,
28515 +
            0x000000000000d45c,
28516 +
            0x000000000000d519,
28517 +
            0x000000000000d6d6,
28518 +
            0x000000000000d793,
28519 +
            0x000000000000cf30,
28520 +
            0x000000000000ce75,
28521 +
            0x000000000000cdba,
28522 +
            0x000000000000ccff,
28523 +
            0x000000000000ca24,
28524 +
            0x000000000000cb61,
28525 +
            0x000000000000c8ae,
28526 +
            0x000000000000c9eb,
28527 +
            0x000000000000c518,
28528 +
            0x000000000000c45d,
28529 +
            0x000000000000c792,
28530 +
            0x000000000000c6d7,
28531 +
            0x000000000000c00c,
28532 +
            0x000000000000c149,
28533 +
            0x000000000000c286,
28534 +
            0x000000000000c3c3,
28535 +
        ],
28536 +
        [
28537 +
            0x0000000000000000,
28538 +
            0x6b70000000000001,
28539 +
            0xd6e0000000000002,
28540 +
            0xbd90000000000003,
28541 +
            0x1dc0000000000005,
28542 +
            0x76b0000000000004,
28543 +
            0xcb20000000000007,
28544 +
            0xa050000000000006,
28545 +
            0x3b8000000000000a,
28546 +
            0x50f000000000000b,
28547 +
            0xed60000000000008,
28548 +
            0x8610000000000009,
28549 +
            0x264000000000000f,
28550 +
            0x4d3000000000000e,
28551 +
            0xf0a000000000000d,
28552 +
            0x9bd000000000000c,
28553 +
            0x7700000000000014,
28554 +
            0x1c70000000000015,
28555 +
            0xa1e0000000000016,
28556 +
            0xca90000000000017,
28557 +
            0x6ac0000000000011,
28558 +
            0x01b0000000000010,
28559 +
            0xbc20000000000013,
28560 +
            0xd750000000000012,
28561 +
            0x4c8000000000001e,
28562 +
            0x27f000000000001f,
28563 +
            0x9a6000000000001c,
28564 +
            0xf11000000000001d,
28565 +
            0x514000000000001b,
28566 +
            0x3a3000000000001a,
28567 +
            0x87a0000000000019,
28568 +
            0xecd0000000000018,
28569 +
            0xee00000000000028,
28570 +
            0x8570000000000029,
28571 +
            0x38e000000000002a,
28572 +
            0x539000000000002b,
28573 +
            0xf3c000000000002d,
28574 +
            0x98b000000000002c,
28575 +
            0x252000000000002f,
28576 +
            0x4e5000000000002e,
28577 +
            0xd580000000000022,
28578 +
            0xbef0000000000023,
28579 +
            0x0360000000000020,
28580 +
            0x6810000000000021,
28581 +
            0xc840000000000027,
28582 +
            0xa330000000000026,
28583 +
            0x1ea0000000000025,
28584 +
            0x75d0000000000024,
28585 +
            0x990000000000003c,
28586 +
            0xf27000000000003d,
28587 +
            0x4fe000000000003e,
28588 +
            0x249000000000003f,
28589 +
            0x84c0000000000039,
28590 +
            0xefb0000000000038,
28591 +
            0x522000000000003b,
28592 +
            0x395000000000003a,
28593 +
            0xa280000000000036,
28594 +
            0xc9f0000000000037,
28595 +
            0x7460000000000034,
28596 +
            0x1f10000000000035,
28597 +
            0xbf40000000000033,
28598 +
            0xd430000000000032,
28599 +
            0x69a0000000000031,
28600 +
            0x02d0000000000030,
28601 +
            0x6c00000000000051,
28602 +
            0x0770000000000050,
28603 +
            0xbae0000000000053,
28604 +
            0xd190000000000052,
28605 +
            0x71c0000000000054,
28606 +
            0x1ab0000000000055,
28607 +
            0xa720000000000056,
28608 +
            0xcc50000000000057,
28609 +
            0x578000000000005b,
28610 +
            0x3cf000000000005a,
28611 +
            0x8160000000000059,
28612 +
            0xea10000000000058,
28613 +
            0x4a4000000000005e,
28614 +
            0x213000000000005f,
28615 +
            0x9ca000000000005c,
28616 +
            0xf7d000000000005d,
28617 +
            0x1b00000000000045,
28618 +
            0x7070000000000044,
28619 +
            0xcde0000000000047,
28620 +
            0xa690000000000046,
28621 +
            0x06c0000000000040,
28622 +
            0x6db0000000000041,
28623 +
            0xd020000000000042,
28624 +
            0xbb50000000000043,
28625 +
            0x208000000000004f,
28626 +
            0x4bf000000000004e,
28627 +
            0xf66000000000004d,
28628 +
            0x9d1000000000004c,
28629 +
            0x3d4000000000004a,
28630 +
            0x563000000000004b,
28631 +
            0xeba0000000000048,
28632 +
            0x80d0000000000049,
28633 +
            0x8200000000000079,
28634 +
            0xe970000000000078,
28635 +
            0x54e000000000007b,
28636 +
            0x3f9000000000007a,
28637 +
            0x9fc000000000007c,
28638 +
            0xf4b000000000007d,
28639 +
            0x492000000000007e,
28640 +
            0x225000000000007f,
28641 +
            0xb980000000000073,
28642 +
            0xd2f0000000000072,
28643 +
            0x6f60000000000071,
28644 +
            0x0410000000000070,
28645 +
            0xa440000000000076,
28646 +
            0xcf30000000000077,
28647 +
            0x72a0000000000074,
28648 +
            0x19d0000000000075,
28649 +
            0xf50000000000006d,
28650 +
            0x9e7000000000006c,
28651 +
            0x23e000000000006f,
28652 +
            0x489000000000006e,
28653 +
            0xe8c0000000000068,
28654 +
            0x83b0000000000069,
28655 +
            0x3e2000000000006a,
28656 +
            0x555000000000006b,
28657 +
            0xce80000000000067,
28658 +
            0xa5f0000000000066,
28659 +
            0x1860000000000065,
28660 +
            0x7310000000000064,
28661 +
            0xd340000000000062,
28662 +
            0xb830000000000063,
28663 +
            0x05a0000000000060,
28664 +
            0x6ed0000000000061,
28665 +
            0xd8000000000000a2,
28666 +
            0xb3700000000000a3,
28667 +
            0x0ee00000000000a0,
28668 +
            0x65900000000000a1,
28669 +
            0xc5c00000000000a7,
28670 +
            0xaeb00000000000a6,
28671 +
            0x13200000000000a5,
28672 +
            0x78500000000000a4,
28673 +
            0xe3800000000000a8,
28674 +
            0x88f00000000000a9,
28675 +
            0x35600000000000aa,
28676 +
            0x5e100000000000ab,
28677 +
            0xfe400000000000ad,
28678 +
            0x95300000000000ac,
28679 +
            0x28a00000000000af,
28680 +
            0x43d00000000000ae,
28681 +
            0xaf000000000000b6,
28682 +
            0xc4700000000000b7,
28683 +
            0x79e00000000000b4,
28684 +
            0x12900000000000b5,
28685 +
            0xb2c00000000000b3,
28686 +
            0xd9b00000000000b2,
28687 +
            0x64200000000000b1,
28688 +
            0x0f500000000000b0,
28689 +
            0x94800000000000bc,
28690 +
            0xfff00000000000bd,
28691 +
            0x42600000000000be,
28692 +
            0x29100000000000bf,
28693 +
            0x89400000000000b9,
28694 +
            0xe2300000000000b8,
28695 +
            0x5fa00000000000bb,
28696 +
            0x34d00000000000ba,
28697 +
            0x360000000000008a,
28698 +
            0x5d7000000000008b,
28699 +
            0xe0e0000000000088,
28700 +
            0x8b90000000000089,
28701 +
            0x2bc000000000008f,
28702 +
            0x40b000000000008e,
28703 +
            0xfd2000000000008d,
28704 +
            0x965000000000008c,
28705 +
            0x0d80000000000080,
28706 +
            0x66f0000000000081,
28707 +
            0xdb60000000000082,
28708 +
            0xb010000000000083,
28709 +
            0x1040000000000085,
28710 +
            0x7b30000000000084,
28711 +
            0xc6a0000000000087,
28712 +
            0xadd0000000000086,
28713 +
            0x410000000000009e,
28714 +
            0x2a7000000000009f,
28715 +
            0x97e000000000009c,
28716 +
            0xfc9000000000009d,
28717 +
            0x5cc000000000009b,
28718 +
            0x37b000000000009a,
28719 +
            0x8a20000000000099,
28720 +
            0xe150000000000098,
28721 +
            0x7a80000000000094,
28722 +
            0x11f0000000000095,
28723 +
            0xac60000000000096,
28724 +
            0xc710000000000097,
28725 +
            0x6740000000000091,
28726 +
            0x0c30000000000090,
28727 +
            0xb1a0000000000093,
28728 +
            0xdad0000000000092,
28729 +
            0xb4000000000000f3,
28730 +
            0xdf700000000000f2,
28731 +
            0x62e00000000000f1,
28732 +
            0x09900000000000f0,
28733 +
            0xa9c00000000000f6,
28734 +
            0xc2b00000000000f7,
28735 +
            0x7f200000000000f4,
28736 +
            0x14500000000000f5,
28737 +
            0x8f800000000000f9,
28738 +
            0xe4f00000000000f8,
28739 +
            0x59600000000000fb,
28740 +
            0x32100000000000fa,
28741 +
            0x92400000000000fc,
28742 +
            0xf9300000000000fd,
28743 +
            0x44a00000000000fe,
28744 +
            0x2fd00000000000ff,
28745 +
            0xc3000000000000e7,
28746 +
            0xa8700000000000e6,
28747 +
            0x15e00000000000e5,
28748 +
            0x7e900000000000e4,
28749 +
            0xdec00000000000e2,
28750 +
            0xb5b00000000000e3,
28751 +
            0x08200000000000e0,
28752 +
            0x63500000000000e1,
28753 +
            0xf8800000000000ed,
28754 +
            0x93f00000000000ec,
28755 +
            0x2e600000000000ef,
28756 +
            0x45100000000000ee,
28757 +
            0xe5400000000000e8,
28758 +
            0x8e300000000000e9,
28759 +
            0x33a00000000000ea,
28760 +
            0x58d00000000000eb,
28761 +
            0x5a000000000000db,
28762 +
            0x31700000000000da,
28763 +
            0x8ce00000000000d9,
28764 +
            0xe7900000000000d8,
28765 +
            0x47c00000000000de,
28766 +
            0x2cb00000000000df,
28767 +
            0x91200000000000dc,
28768 +
            0xfa500000000000dd,
28769 +
            0x61800000000000d1,
28770 +
            0x0af00000000000d0,
28771 +
            0xb7600000000000d3,
28772 +
            0xdc100000000000d2,
28773 +
            0x7c400000000000d4,
28774 +
            0x17300000000000d5,
28775 +
            0xaaa00000000000d6,
28776 +
            0xc1d00000000000d7,
28777 +
            0x2d000000000000cf,
28778 +
            0x46700000000000ce,
28779 +
            0xfbe00000000000cd,
28780 +
            0x90900000000000cc,
28781 +
            0x30c00000000000ca,
28782 +
            0x5bb00000000000cb,
28783 +
            0xe6200000000000c8,
28784 +
            0x8d500000000000c9,
28785 +
            0x16800000000000c5,
28786 +
            0x7df00000000000c4,
28787 +
            0xc0600000000000c7,
28788 +
            0xab100000000000c6,
28789 +
            0x0b400000000000c0,
28790 +
            0x60300000000000c1,
28791 +
            0xdda00000000000c2,
28792 +
            0xb6d00000000000c3,
28793 +
        ],
28794 +
    ];
28795 +
28796 +
    pub static CRC64_MS_TABLE: [[u64; 256]; 16] = [
28797 +
        [
28798 +
            0x0000000000000000,
28799 +
            0x0809e8a2969451e9,
28800 +
            0x1013d1452d28a3d2,
28801 +
            0x181a39e7bbbcf23b,
28802 +
            0x2027a28a5a5147a4,
28803 +
            0x282e4a28ccc5164d,
28804 +
            0x303473cf7779e476,
28805 +
            0x383d9b6de1edb59f,
28806 +
            0x404f4514b4a28f48,
28807 +
            0x4846adb62236dea1,
28808 +
            0x505c9451998a2c9a,
28809 +
            0x58557cf30f1e7d73,
28810 +
            0x6068e79eeef3c8ec,
28811 +
            0x68610f3c78679905,
28812 +
            0x707b36dbc3db6b3e,
28813 +
            0x7872de79554f3ad7,
28814 +
            0x809e8a2969451e90,
28815 +
            0x8897628bffd14f79,
28816 +
            0x908d5b6c446dbd42,
28817 +
            0x9884b3ced2f9ecab,
28818 +
            0xa0b928a333145934,
28819 +
            0xa8b0c001a58008dd,
28820 +
            0xb0aaf9e61e3cfae6,
28821 +
            0xb8a3114488a8ab0f,
28822 +
            0xc0d1cf3ddde791d8,
28823 +
            0xc8d8279f4b73c031,
28824 +
            0xd0c21e78f0cf320a,
28825 +
            0xd8cbf6da665b63e3,
28826 +
            0xe0f66db787b6d67c,
28827 +
            0xe8ff851511228795,
28828 +
            0xf0e5bcf2aa9e75ae,
28829 +
            0xf8ec54503c0a2447,
28830 +
            0x24b1909974c84e69,
28831 +
            0x2cb8783be25c1f80,
28832 +
            0x34a241dc59e0edbb,
28833 +
            0x3caba97ecf74bc52,
28834 +
            0x049632132e9909cd,
28835 +
            0x0c9fdab1b80d5824,
28836 +
            0x1485e35603b1aa1f,
28837 +
            0x1c8c0bf49525fbf6,
28838 +
            0x64fed58dc06ac121,
28839 +
            0x6cf73d2f56fe90c8,
28840 +
            0x74ed04c8ed4262f3,
28841 +
            0x7ce4ec6a7bd6331a,
28842 +
            0x44d977079a3b8685,
28843 +
            0x4cd09fa50cafd76c,
28844 +
            0x54caa642b7132557,
28845 +
            0x5cc34ee0218774be,
28846 +
            0xa42f1ab01d8d50f9,
28847 +
            0xac26f2128b190110,
28848 +
            0xb43ccbf530a5f32b,
28849 +
            0xbc352357a631a2c2,
28850 +
            0x8408b83a47dc175d,
28851 +
            0x8c015098d14846b4,
28852 +
            0x941b697f6af4b48f,
28853 +
            0x9c1281ddfc60e566,
28854 +
            0xe4605fa4a92fdfb1,
28855 +
            0xec69b7063fbb8e58,
28856 +
            0xf4738ee184077c63,
28857 +
            0xfc7a664312932d8a,
28858 +
            0xc447fd2ef37e9815,
28859 +
            0xcc4e158c65eac9fc,
28860 +
            0xd4542c6bde563bc7,
28861 +
            0xdc5dc4c948c26a2e,
28862 +
            0x49632132e9909cd2,
28863 +
            0x416ac9907f04cd3b,
28864 +
            0x5970f077c4b83f00,
28865 +
            0x517918d5522c6ee9,
28866 +
            0x694483b8b3c1db76,
28867 +
            0x614d6b1a25558a9f,
28868 +
            0x795752fd9ee978a4,
28869 +
            0x715eba5f087d294d,
28870 +
            0x092c64265d32139a,
28871 +
            0x01258c84cba64273,
28872 +
            0x193fb563701ab048,
28873 +
            0x11365dc1e68ee1a1,
28874 +
            0x290bc6ac0763543e,
28875 +
            0x21022e0e91f705d7,
28876 +
            0x391817e92a4bf7ec,
28877 +
            0x3111ff4bbcdfa605,
28878 +
            0xc9fdab1b80d58242,
28879 +
            0xc1f443b91641d3ab,
28880 +
            0xd9ee7a5eadfd2190,
28881 +
            0xd1e792fc3b697079,
28882 +
            0xe9da0991da84c5e6,
28883 +
            0xe1d3e1334c10940f,
28884 +
            0xf9c9d8d4f7ac6634,
28885 +
            0xf1c03076613837dd,
28886 +
            0x89b2ee0f34770d0a,
28887 +
            0x81bb06ada2e35ce3,
28888 +
            0x99a13f4a195faed8,
28889 +
            0x91a8d7e88fcbff31,
28890 +
            0xa9954c856e264aae,
28891 +
            0xa19ca427f8b21b47,
28892 +
            0xb9869dc0430ee97c,
28893 +
            0xb18f7562d59ab895,
28894 +
            0x6dd2b1ab9d58d2bb,
28895 +
            0x65db59090bcc8352,
28896 +
            0x7dc160eeb0707169,
28897 +
            0x75c8884c26e42080,
28898 +
            0x4df51321c709951f,
28899 +
            0x45fcfb83519dc4f6,
28900 +
            0x5de6c264ea2136cd,
28901 +
            0x55ef2ac67cb56724,
28902 +
            0x2d9df4bf29fa5df3,
28903 +
            0x25941c1dbf6e0c1a,
28904 +
            0x3d8e25fa04d2fe21,
28905 +
            0x3587cd589246afc8,
28906 +
            0x0dba563573ab1a57,
28907 +
            0x05b3be97e53f4bbe,
28908 +
            0x1da987705e83b985,
28909 +
            0x15a06fd2c817e86c,
28910 +
            0xed4c3b82f41dcc2b,
28911 +
            0xe545d32062899dc2,
28912 +
            0xfd5feac7d9356ff9,
28913 +
            0xf55602654fa13e10,
28914 +
            0xcd6b9908ae4c8b8f,
28915 +
            0xc56271aa38d8da66,
28916 +
            0xdd78484d8364285d,
28917 +
            0xd571a0ef15f079b4,
28918 +
            0xad037e9640bf4363,
28919 +
            0xa50a9634d62b128a,
28920 +
            0xbd10afd36d97e0b1,
28921 +
            0xb5194771fb03b158,
28922 +
            0x8d24dc1c1aee04c7,
28923 +
            0x852d34be8c7a552e,
28924 +
            0x9d370d5937c6a715,
28925 +
            0x953ee5fba152f6fc,
28926 +
            0x92c64265d32139a4,
28927 +
            0x9acfaac745b5684d,
28928 +
            0x82d59320fe099a76,
28929 +
            0x8adc7b82689dcb9f,
28930 +
            0xb2e1e0ef89707e00,
28931 +
            0xbae8084d1fe42fe9,
28932 +
            0xa2f231aaa458ddd2,
28933 +
            0xaafbd90832cc8c3b,
28934 +
            0xd28907716783b6ec,
28935 +
            0xda80efd3f117e705,
28936 +
            0xc29ad6344aab153e,
28937 +
            0xca933e96dc3f44d7,
28938 +
            0xf2aea5fb3dd2f148,
28939 +
            0xfaa74d59ab46a0a1,
28940 +
            0xe2bd74be10fa529a,
28941 +
            0xeab49c1c866e0373,
28942 +
            0x1258c84cba642734,
28943 +
            0x1a5120ee2cf076dd,
28944 +
            0x024b1909974c84e6,
28945 +
            0x0a42f1ab01d8d50f,
28946 +
            0x327f6ac6e0356090,
28947 +
            0x3a76826476a13179,
28948 +
            0x226cbb83cd1dc342,
28949 +
            0x2a6553215b8992ab,
28950 +
            0x52178d580ec6a87c,
28951 +
            0x5a1e65fa9852f995,
28952 +
            0x42045c1d23ee0bae,
28953 +
            0x4a0db4bfb57a5a47,
28954 +
            0x72302fd25497efd8,
28955 +
            0x7a39c770c203be31,
28956 +
            0x6223fe9779bf4c0a,
28957 +
            0x6a2a1635ef2b1de3,
28958 +
            0xb677d2fca7e977cd,
28959 +
            0xbe7e3a5e317d2624,
28960 +
            0xa66403b98ac1d41f,
28961 +
            0xae6deb1b1c5585f6,
28962 +
            0x96507076fdb83069,
28963 +
            0x9e5998d46b2c6180,
28964 +
            0x8643a133d09093bb,
28965 +
            0x8e4a49914604c252,
28966 +
            0xf63897e8134bf885,
28967 +
            0xfe317f4a85dfa96c,
28968 +
            0xe62b46ad3e635b57,
28969 +
            0xee22ae0fa8f70abe,
28970 +
            0xd61f3562491abf21,
28971 +
            0xde16ddc0df8eeec8,
28972 +
            0xc60ce42764321cf3,
28973 +
            0xce050c85f2a64d1a,
28974 +
            0x36e958d5ceac695d,
28975 +
            0x3ee0b077583838b4,
28976 +
            0x26fa8990e384ca8f,
28977 +
            0x2ef3613275109b66,
28978 +
            0x16cefa5f94fd2ef9,
28979 +
            0x1ec712fd02697f10,
28980 +
            0x06dd2b1ab9d58d2b,
28981 +
            0x0ed4c3b82f41dcc2,
28982 +
            0x76a61dc17a0ee615,
28983 +
            0x7eaff563ec9ab7fc,
28984 +
            0x66b5cc84572645c7,
28985 +
            0x6ebc2426c1b2142e,
28986 +
            0x5681bf4b205fa1b1,
28987 +
            0x5e8857e9b6cbf058,
28988 +
            0x46926e0e0d770263,
28989 +
            0x4e9b86ac9be3538a,
28990 +
            0xdba563573ab1a576,
28991 +
            0xd3ac8bf5ac25f49f,
28992 +
            0xcbb6b212179906a4,
28993 +
            0xc3bf5ab0810d574d,
28994 +
            0xfb82c1dd60e0e2d2,
28995 +
            0xf38b297ff674b33b,
28996 +
            0xeb9110984dc84100,
28997 +
            0xe398f83adb5c10e9,
28998 +
            0x9bea26438e132a3e,
28999 +
            0x93e3cee118877bd7,
29000 +
            0x8bf9f706a33b89ec,
29001 +
            0x83f01fa435afd805,
29002 +
            0xbbcd84c9d4426d9a,
29003 +
            0xb3c46c6b42d63c73,
29004 +
            0xabde558cf96ace48,
29005 +
            0xa3d7bd2e6ffe9fa1,
29006 +
            0x5b3be97e53f4bbe6,
29007 +
            0x533201dcc560ea0f,
29008 +
            0x4b28383b7edc1834,
29009 +
            0x4321d099e84849dd,
29010 +
            0x7b1c4bf409a5fc42,
29011 +
            0x7315a3569f31adab,
29012 +
            0x6b0f9ab1248d5f90,
29013 +
            0x63067213b2190e79,
29014 +
            0x1b74ac6ae75634ae,
29015 +
            0x137d44c871c26547,
29016 +
            0x0b677d2fca7e977c,
29017 +
            0x036e958d5ceac695,
29018 +
            0x3b530ee0bd07730a,
29019 +
            0x335ae6422b9322e3,
29020 +
            0x2b40dfa5902fd0d8,
29021 +
            0x2349370706bb8131,
29022 +
            0xff14f3ce4e79eb1f,
29023 +
            0xf71d1b6cd8edbaf6,
29024 +
            0xef07228b635148cd,
29025 +
            0xe70eca29f5c51924,
29026 +
            0xdf3351441428acbb,
29027 +
            0xd73ab9e682bcfd52,
29028 +
            0xcf20800139000f69,
29029 +
            0xc72968a3af945e80,
29030 +
            0xbf5bb6dafadb6457,
29031 +
            0xb7525e786c4f35be,
29032 +
            0xaf48679fd7f3c785,
29033 +
            0xa7418f3d4167966c,
29034 +
            0x9f7c1450a08a23f3,
29035 +
            0x9775fcf2361e721a,
29036 +
            0x8f6fc5158da28021,
29037 +
            0x87662db71b36d1c8,
29038 +
            0x7f8a79e7273cf58f,
29039 +
            0x77839145b1a8a466,
29040 +
            0x6f99a8a20a14565d,
29041 +
            0x679040009c8007b4,
29042 +
            0x5faddb6d7d6db22b,
29043 +
            0x57a433cfebf9e3c2,
29044 +
            0x4fbe0a28504511f9,
29045 +
            0x47b7e28ac6d14010,
29046 +
            0x3fc53cf3939e7ac7,
29047 +
            0x37ccd451050a2b2e,
29048 +
            0x2fd6edb6beb6d915,
29049 +
            0x27df0514282288fc,
29050 +
            0x1fe29e79c9cf3d63,
29051 +
            0x17eb76db5f5b6c8a,
29052 +
            0x0ff14f3ce4e79eb1,
29053 +
            0x07f8a79e7273cf58,
29054 +
        ],
29055 +
        [
29056 +
            0x0000000000000000,
29057 +
            0xb75a5790ced9a1ef,
29058 +
            0x4b382bea3bf13097,
29059 +
            0xfc627c7af5289178,
29060 +
            0x967057d477e2612e,
29061 +
            0x212a0044b93bc0c1,
29062 +
            0xdd487c3e4c1351b9,
29063 +
            0x6a122bae82caf056,
29064 +
            0x096c2b634986b115,
29065 +
            0xbe367cf3875f10fa,
29066 +
            0x4254008972778182,
29067 +
            0xf50e5719bcae206d,
29068 +
            0x9f1c7cb73e64d03b,
29069 +
            0x28462b27f0bd71d4,
29070 +
            0xd424575d0595e0ac,
29071 +
            0x637e00cdcb4c4143,
29072 +
            0x12d856c6930d622a,
29073 +
            0xa58201565dd4c3c5,
29074 +
            0x59e07d2ca8fc52bd,
29075 +
            0xeeba2abc6625f352,
29076 +
            0x84a80112e4ef0304,
29077 +
            0x33f256822a36a2eb,
29078 +
            0xcf902af8df1e3393,
29079 +
            0x78ca7d6811c7927c,
29080 +
            0x1bb47da5da8bd33f,
29081 +
            0xacee2a35145272d0,
29082 +
            0x508c564fe17ae3a8,
29083 +
            0xe7d601df2fa34247,
29084 +
            0x8dc42a71ad69b211,
29085 +
            0x3a9e7de163b013fe,
29086 +
            0xc6fc019b96988286,
29087 +
            0x71a6560b58412369,
29088 +
            0x25b0ad8d261ac454,
29089 +
            0x92eafa1de8c365bb,
29090 +
            0x6e8886671debf4c3,
29091 +
            0xd9d2d1f7d332552c,
29092 +
            0xb3c0fa5951f8a57a,
29093 +
            0x049aadc99f210495,
29094 +
            0xf8f8d1b36a0995ed,
29095 +
            0x4fa28623a4d03402,
29096 +
            0x2cdc86ee6f9c7541,
29097 +
            0x9b86d17ea145d4ae,
29098 +
            0x67e4ad04546d45d6,
29099 +
            0xd0befa949ab4e439,
29100 +
            0xbaacd13a187e146f,
29101 +
            0x0df686aad6a7b580,
29102 +
            0xf194fad0238f24f8,
29103 +
            0x46cead40ed568517,
29104 +
            0x3768fb4bb517a67e,
29105 +
            0x8032acdb7bce0791,
29106 +
            0x7c50d0a18ee696e9,
29107 +
            0xcb0a8731403f3706,
29108 +
            0xa118ac9fc2f5c750,
29109 +
            0x1642fb0f0c2c66bf,
29110 +
            0xea208775f904f7c7,
29111 +
            0x5d7ad0e537dd5628,
29112 +
            0x3e04d028fc91176b,
29113 +
            0x895e87b83248b684,
29114 +
            0x753cfbc2c76027fc,
29115 +
            0xc266ac5209b98613,
29116 +
            0xa87487fc8b737645,
29117 +
            0x1f2ed06c45aad7aa,
29118 +
            0xe34cac16b08246d2,
29119 +
            0x5416fb867e5be73d,
29120 +
            0x4b615b1a4c3588a8,
29121 +
            0xfc3b0c8a82ec2947,
29122 +
            0x005970f077c4b83f,
29123 +
            0xb7032760b91d19d0,
29124 +
            0xdd110cce3bd7e986,
29125 +
            0x6a4b5b5ef50e4869,
29126 +
            0x962927240026d911,
29127 +
            0x217370b4ceff78fe,
29128 +
            0x420d707905b339bd,
29129 +
            0xf55727e9cb6a9852,
29130 +
            0x09355b933e42092a,
29131 +
            0xbe6f0c03f09ba8c5,
29132 +
            0xd47d27ad72515893,
29133 +
            0x6327703dbc88f97c,
29134 +
            0x9f450c4749a06804,
29135 +
            0x281f5bd78779c9eb,
29136 +
            0x59b90ddcdf38ea82,
29137 +
            0xeee35a4c11e14b6d,
29138 +
            0x12812636e4c9da15,
29139 +
            0xa5db71a62a107bfa,
29140 +
            0xcfc95a08a8da8bac,
29141 +
            0x78930d9866032a43,
29142 +
            0x84f171e2932bbb3b,
29143 +
            0x33ab26725df21ad4,
29144 +
            0x50d526bf96be5b97,
29145 +
            0xe78f712f5867fa78,
29146 +
            0x1bed0d55ad4f6b00,
29147 +
            0xacb75ac56396caef,
29148 +
            0xc6a5716be15c3ab9,
29149 +
            0x71ff26fb2f859b56,
29150 +
            0x8d9d5a81daad0a2e,
29151 +
            0x3ac70d111474abc1,
29152 +
            0x6ed1f6976a2f4cfc,
29153 +
            0xd98ba107a4f6ed13,
29154 +
            0x25e9dd7d51de7c6b,
29155 +
            0x92b38aed9f07dd84,
29156 +
            0xf8a1a1431dcd2dd2,
29157 +
            0x4ffbf6d3d3148c3d,
29158 +
            0xb3998aa9263c1d45,
29159 +
            0x04c3dd39e8e5bcaa,
29160 +
            0x67bdddf423a9fde9,
29161 +
            0xd0e78a64ed705c06,
29162 +
            0x2c85f61e1858cd7e,
29163 +
            0x9bdfa18ed6816c91,
29164 +
            0xf1cd8a20544b9cc7,
29165 +
            0x4697ddb09a923d28,
29166 +
            0xbaf5a1ca6fbaac50,
29167 +
            0x0daff65aa1630dbf,
29168 +
            0x7c09a051f9222ed6,
29169 +
            0xcb53f7c137fb8f39,
29170 +
            0x37318bbbc2d31e41,
29171 +
            0x806bdc2b0c0abfae,
29172 +
            0xea79f7858ec04ff8,
29173 +
            0x5d23a0154019ee17,
29174 +
            0xa141dc6fb5317f6f,
29175 +
            0x161b8bff7be8de80,
29176 +
            0x75658b32b0a49fc3,
29177 +
            0xc23fdca27e7d3e2c,
29178 +
            0x3e5da0d88b55af54,
29179 +
            0x8907f748458c0ebb,
29180 +
            0xe315dce6c746feed,
29181 +
            0x544f8b76099f5f02,
29182 +
            0xa82df70cfcb7ce7a,
29183 +
            0x1f77a09c326e6f95,
29184 +
            0x96c2b634986b1150,
29185 +
            0x2198e1a456b2b0bf,
29186 +
            0xddfa9ddea39a21c7,
29187 +
            0x6aa0ca4e6d438028,
29188 +
            0x00b2e1e0ef89707e,
29189 +
            0xb7e8b6702150d191,
29190 +
            0x4b8aca0ad47840e9,
29191 +
            0xfcd09d9a1aa1e106,
29192 +
            0x9fae9d57d1eda045,
29193 +
            0x28f4cac71f3401aa,
29194 +
            0xd496b6bdea1c90d2,
29195 +
            0x63cce12d24c5313d,
29196 +
            0x09deca83a60fc16b,
29197 +
            0xbe849d1368d66084,
29198 +
            0x42e6e1699dfef1fc,
29199 +
            0xf5bcb6f953275013,
29200 +
            0x841ae0f20b66737a,
29201 +
            0x3340b762c5bfd295,
29202 +
            0xcf22cb18309743ed,
29203 +
            0x78789c88fe4ee202,
29204 +
            0x126ab7267c841254,
29205 +
            0xa530e0b6b25db3bb,
29206 +
            0x59529ccc477522c3,
29207 +
            0xee08cb5c89ac832c,
29208 +
            0x8d76cb9142e0c26f,
29209 +
            0x3a2c9c018c396380,
29210 +
            0xc64ee07b7911f2f8,
29211 +
            0x7114b7ebb7c85317,
29212 +
            0x1b069c453502a341,
29213 +
            0xac5ccbd5fbdb02ae,
29214 +
            0x503eb7af0ef393d6,
29215 +
            0xe764e03fc02a3239,
29216 +
            0xb3721bb9be71d504,
29217 +
            0x04284c2970a874eb,
29218 +
            0xf84a30538580e593,
29219 +
            0x4f1067c34b59447c,
29220 +
            0x25024c6dc993b42a,
29221 +
            0x92581bfd074a15c5,
29222 +
            0x6e3a6787f26284bd,
29223 +
            0xd96030173cbb2552,
29224 +
            0xba1e30daf7f76411,
29225 +
            0x0d44674a392ec5fe,
29226 +
            0xf1261b30cc065486,
29227 +
            0x467c4ca002dff569,
29228 +
            0x2c6e670e8015053f,
29229 +
            0x9b34309e4ecca4d0,
29230 +
            0x67564ce4bbe435a8,
29231 +
            0xd00c1b74753d9447,
29232 +
            0xa1aa4d7f2d7cb72e,
29233 +
            0x16f01aefe3a516c1,
29234 +
            0xea926695168d87b9,
29235 +
            0x5dc83105d8542656,
29236 +
            0x37da1aab5a9ed600,
29237 +
            0x80804d3b944777ef,
29238 +
            0x7ce23141616fe697,
29239 +
            0xcbb866d1afb64778,
29240 +
            0xa8c6661c64fa063b,
29241 +
            0x1f9c318caa23a7d4,
29242 +
            0xe3fe4df65f0b36ac,
29243 +
            0x54a41a6691d29743,
29244 +
            0x3eb631c813186715,
29245 +
            0x89ec6658ddc1c6fa,
29246 +
            0x758e1a2228e95782,
29247 +
            0xc2d44db2e630f66d,
29248 +
            0xdda3ed2ed45e99f8,
29249 +
            0x6af9babe1a873817,
29250 +
            0x969bc6c4efafa96f,
29251 +
            0x21c1915421760880,
29252 +
            0x4bd3bafaa3bcf8d6,
29253 +
            0xfc89ed6a6d655939,
29254 +
            0x00eb9110984dc841,
29255 +
            0xb7b1c680569469ae,
29256 +
            0xd4cfc64d9dd828ed,
29257 +
            0x639591dd53018902,
29258 +
            0x9ff7eda7a629187a,
29259 +
            0x28adba3768f0b995,
29260 +
            0x42bf9199ea3a49c3,
29261 +
            0xf5e5c60924e3e82c,
29262 +
            0x0987ba73d1cb7954,
29263 +
            0xbeddede31f12d8bb,
29264 +
            0xcf7bbbe84753fbd2,
29265 +
            0x7821ec78898a5a3d,
29266 +
            0x844390027ca2cb45,
29267 +
            0x3319c792b27b6aaa,
29268 +
            0x590bec3c30b19afc,
29269 +
            0xee51bbacfe683b13,
29270 +
            0x1233c7d60b40aa6b,
29271 +
            0xa5699046c5990b84,
29272 +
            0xc617908b0ed54ac7,
29273 +
            0x714dc71bc00ceb28,
29274 +
            0x8d2fbb6135247a50,
29275 +
            0x3a75ecf1fbfddbbf,
29276 +
            0x5067c75f79372be9,
29277 +
            0xe73d90cfb7ee8a06,
29278 +
            0x1b5fecb542c61b7e,
29279 +
            0xac05bb258c1fba91,
29280 +
            0xf81340a3f2445dac,
29281 +
            0x4f4917333c9dfc43,
29282 +
            0xb32b6b49c9b56d3b,
29283 +
            0x04713cd9076cccd4,
29284 +
            0x6e63177785a63c82,
29285 +
            0xd93940e74b7f9d6d,
29286 +
            0x255b3c9dbe570c15,
29287 +
            0x92016b0d708eadfa,
29288 +
            0xf17f6bc0bbc2ecb9,
29289 +
            0x46253c50751b4d56,
29290 +
            0xba47402a8033dc2e,
29291 +
            0x0d1d17ba4eea7dc1,
29292 +
            0x670f3c14cc208d97,
29293 +
            0xd0556b8402f92c78,
29294 +
            0x2c3717fef7d1bd00,
29295 +
            0x9b6d406e39081cef,
29296 +
            0xeacb166561493f86,
29297 +
            0x5d9141f5af909e69,
29298 +
            0xa1f33d8f5ab80f11,
29299 +
            0x16a96a1f9461aefe,
29300 +
            0x7cbb41b116ab5ea8,
29301 +
            0xcbe11621d872ff47,
29302 +
            0x37836a5b2d5a6e3f,
29303 +
            0x80d93dcbe383cfd0,
29304 +
            0xe3a73d0628cf8e93,
29305 +
            0x54fd6a96e6162f7c,
29306 +
            0xa89f16ec133ebe04,
29307 +
            0x1fc5417cdde71feb,
29308 +
            0x75d76ad25f2defbd,
29309 +
            0xc28d3d4291f44e52,
29310 +
            0x3eef413864dcdf2a,
29311 +
            0x89b516a8aa057ec5,
29312 +
        ],
29313 +
        [
29314 +
            0x0000000000000000,
29315 +
            0x87d177e08bf80869,
29316 +
            0x2a2e6b0ab1b2639b,
29317 +
            0xadff1cea3a4a6bf2,
29318 +
            0x545cd6156364c736,
29319 +
            0xd38da1f5e89ccf5f,
29320 +
            0x7e72bd1fd2d6a4ad,
29321 +
            0xf9a3caff592eacc4,
29322 +
            0xa8b9ac2ac6c98e6c,
29323 +
            0x2f68dbca4d318605,
29324 +
            0x8297c720777bedf7,
29325 +
            0x0546b0c0fc83e59e,
29326 +
            0xfce57a3fa5ad495a,
29327 +
            0x7b340ddf2e554133,
29328 +
            0xd6cb1135141f2ac1,
29329 +
            0x511a66d59fe722a8,
29330 +
            0x74ffdc9e2bd16f91,
29331 +
            0xf32eab7ea02967f8,
29332 +
            0x5ed1b7949a630c0a,
29333 +
            0xd900c074119b0463,
29334 +
            0x20a30a8b48b5a8a7,
29335 +
            0xa7727d6bc34da0ce,
29336 +
            0x0a8d6181f907cb3c,
29337 +
            0x8d5c166172ffc355,
29338 +
            0xdc4670b4ed18e1fd,
29339 +
            0x5b97075466e0e994,
29340 +
            0xf6681bbe5caa8266,
29341 +
            0x71b96c5ed7528a0f,
29342 +
            0x881aa6a18e7c26cb,
29343 +
            0x0fcbd14105842ea2,
29344 +
            0xa234cdab3fce4550,
29345 +
            0x25e5ba4bb4364d39,
29346 +
            0xe9ffb93c57a2df22,
29347 +
            0x6e2ecedcdc5ad74b,
29348 +
            0xc3d1d236e610bcb9,
29349 +
            0x4400a5d66de8b4d0,
29350 +
            0xbda36f2934c61814,
29351 +
            0x3a7218c9bf3e107d,
29352 +
            0x978d042385747b8f,
29353 +
            0x105c73c30e8c73e6,
29354 +
            0x41461516916b514e,
29355 +
            0xc69762f61a935927,
29356 +
            0x6b687e1c20d932d5,
29357 +
            0xecb909fcab213abc,
29358 +
            0x151ac303f20f9678,
29359 +
            0x92cbb4e379f79e11,
29360 +
            0x3f34a80943bdf5e3,
29361 +
            0xb8e5dfe9c845fd8a,
29362 +
            0x9d0065a27c73b0b3,
29363 +
            0x1ad11242f78bb8da,
29364 +
            0xb72e0ea8cdc1d328,
29365 +
            0x30ff79484639db41,
29366 +
            0xc95cb3b71f177785,
29367 +
            0x4e8dc45794ef7fec,
29368 +
            0xe372d8bdaea5141e,
29369 +
            0x64a3af5d255d1c77,
29370 +
            0x35b9c988baba3edf,
29371 +
            0xb268be68314236b6,
29372 +
            0x1f97a2820b085d44,
29373 +
            0x9846d56280f0552d,
29374 +
            0x61e51f9dd9def9e9,
29375 +
            0xe634687d5226f180,
29376 +
            0x4bcb7497686c9a72,
29377 +
            0xcc1a0377e394921b,
29378 +
            0xf673f6b30907cd0d,
29379 +
            0x71a2815382ffc564,
29380 +
            0xdc5d9db9b8b5ae96,
29381 +
            0x5b8cea59334da6ff,
29382 +
            0xa22f20a66a630a3b,
29383 +
            0x25fe5746e19b0252,
29384 +
            0x88014bacdbd169a0,
29385 +
            0x0fd03c4c502961c9,
29386 +
            0x5eca5a99cfce4361,
29387 +
            0xd91b2d7944364b08,
29388 +
            0x74e431937e7c20fa,
29389 +
            0xf3354673f5842893,
29390 +
            0x0a968c8cacaa8457,
29391 +
            0x8d47fb6c27528c3e,
29392 +
            0x20b8e7861d18e7cc,
29393 +
            0xa769906696e0efa5,
29394 +
            0x828c2a2d22d6a29c,
29395 +
            0x055d5dcda92eaaf5,
29396 +
            0xa8a241279364c107,
29397 +
            0x2f7336c7189cc96e,
29398 +
            0xd6d0fc3841b265aa,
29399 +
            0x51018bd8ca4a6dc3,
29400 +
            0xfcfe9732f0000631,
29401 +
            0x7b2fe0d27bf80e58,
29402 +
            0x2a358607e41f2cf0,
29403 +
            0xade4f1e76fe72499,
29404 +
            0x001bed0d55ad4f6b,
29405 +
            0x87ca9aedde554702,
29406 +
            0x7e695012877bebc6,
29407 +
            0xf9b827f20c83e3af,
29408 +
            0x54473b1836c9885d,
29409 +
            0xd3964cf8bd318034,
29410 +
            0x1f8c4f8f5ea5122f,
29411 +
            0x985d386fd55d1a46,
29412 +
            0x35a22485ef1771b4,
29413 +
            0xb273536564ef79dd,
29414 +
            0x4bd0999a3dc1d519,
29415 +
            0xcc01ee7ab639dd70,
29416 +
            0x61fef2908c73b682,
29417 +
            0xe62f8570078bbeeb,
29418 +
            0xb735e3a5986c9c43,
29419 +
            0x30e494451394942a,
29420 +
            0x9d1b88af29deffd8,
29421 +
            0x1acaff4fa226f7b1,
29422 +
            0xe36935b0fb085b75,
29423 +
            0x64b8425070f0531c,
29424 +
            0xc9475eba4aba38ee,
29425 +
            0x4e96295ac1423087,
29426 +
            0x6b73931175747dbe,
29427 +
            0xeca2e4f1fe8c75d7,
29428 +
            0x415df81bc4c61e25,
29429 +
            0xc68c8ffb4f3e164c,
29430 +
            0x3f2f45041610ba88,
29431 +
            0xb8fe32e49de8b2e1,
29432 +
            0x15012e0ea7a2d913,
29433 +
            0x92d059ee2c5ad17a,
29434 +
            0xc3ca3f3bb3bdf3d2,
29435 +
            0x441b48db3845fbbb,
29436 +
            0xe9e45431020f9049,
29437 +
            0x6e3523d189f79820,
29438 +
            0x9796e92ed0d934e4,
29439 +
            0x10479ece5b213c8d,
29440 +
            0xbdb88224616b577f,
29441 +
            0x3a69f5c4ea935f16,
29442 +
            0xc96b69adb44de953,
29443 +
            0x4eba1e4d3fb5e13a,
29444 +
            0xe34502a705ff8ac8,
29445 +
            0x649475478e0782a1,
29446 +
            0x9d37bfb8d7292e65,
29447 +
            0x1ae6c8585cd1260c,
29448 +
            0xb719d4b2669b4dfe,
29449 +
            0x30c8a352ed634597,
29450 +
            0x61d2c5877284673f,
29451 +
            0xe603b267f97c6f56,
29452 +
            0x4bfcae8dc33604a4,
29453 +
            0xcc2dd96d48ce0ccd,
29454 +
            0x358e139211e0a009,
29455 +
            0xb25f64729a18a860,
29456 +
            0x1fa07898a052c392,
29457 +
            0x98710f782baacbfb,
29458 +
            0xbd94b5339f9c86c2,
29459 +
            0x3a45c2d314648eab,
29460 +
            0x97bade392e2ee559,
29461 +
            0x106ba9d9a5d6ed30,
29462 +
            0xe9c86326fcf841f4,
29463 +
            0x6e1914c67700499d,
29464 +
            0xc3e6082c4d4a226f,
29465 +
            0x44377fccc6b22a06,
29466 +
            0x152d1919595508ae,
29467 +
            0x92fc6ef9d2ad00c7,
29468 +
            0x3f037213e8e76b35,
29469 +
            0xb8d205f3631f635c,
29470 +
            0x4171cf0c3a31cf98,
29471 +
            0xc6a0b8ecb1c9c7f1,
29472 +
            0x6b5fa4068b83ac03,
29473 +
            0xec8ed3e6007ba46a,
29474 +
            0x2094d091e3ef3671,
29475 +
            0xa745a77168173e18,
29476 +
            0x0ababb9b525d55ea,
29477 +
            0x8d6bcc7bd9a55d83,
29478 +
            0x74c80684808bf147,
29479 +
            0xf31971640b73f92e,
29480 +
            0x5ee66d8e313992dc,
29481 +
            0xd9371a6ebac19ab5,
29482 +
            0x882d7cbb2526b81d,
29483 +
            0x0ffc0b5baedeb074,
29484 +
            0xa20317b19494db86,
29485 +
            0x25d260511f6cd3ef,
29486 +
            0xdc71aaae46427f2b,
29487 +
            0x5ba0dd4ecdba7742,
29488 +
            0xf65fc1a4f7f01cb0,
29489 +
            0x718eb6447c0814d9,
29490 +
            0x546b0c0fc83e59e0,
29491 +
            0xd3ba7bef43c65189,
29492 +
            0x7e456705798c3a7b,
29493 +
            0xf99410e5f2743212,
29494 +
            0x0037da1aab5a9ed6,
29495 +
            0x87e6adfa20a296bf,
29496 +
            0x2a19b1101ae8fd4d,
29497 +
            0xadc8c6f09110f524,
29498 +
            0xfcd2a0250ef7d78c,
29499 +
            0x7b03d7c5850fdfe5,
29500 +
            0xd6fccb2fbf45b417,
29501 +
            0x512dbccf34bdbc7e,
29502 +
            0xa88e76306d9310ba,
29503 +
            0x2f5f01d0e66b18d3,
29504 +
            0x82a01d3adc217321,
29505 +
            0x05716ada57d97b48,
29506 +
            0x3f189f1ebd4a245e,
29507 +
            0xb8c9e8fe36b22c37,
29508 +
            0x1536f4140cf847c5,
29509 +
            0x92e783f487004fac,
29510 +
            0x6b44490bde2ee368,
29511 +
            0xec953eeb55d6eb01,
29512 +
            0x416a22016f9c80f3,
29513 +
            0xc6bb55e1e464889a,
29514 +
            0x97a133347b83aa32,
29515 +
            0x107044d4f07ba25b,
29516 +
            0xbd8f583eca31c9a9,
29517 +
            0x3a5e2fde41c9c1c0,
29518 +
            0xc3fde52118e76d04,
29519 +
            0x442c92c1931f656d,
29520 +
            0xe9d38e2ba9550e9f,
29521 +
            0x6e02f9cb22ad06f6,
29522 +
            0x4be74380969b4bcf,
29523 +
            0xcc3634601d6343a6,
29524 +
            0x61c9288a27292854,
29525 +
            0xe6185f6aacd1203d,
29526 +
            0x1fbb9595f5ff8cf9,
29527 +
            0x986ae2757e078490,
29528 +
            0x3595fe9f444def62,
29529 +
            0xb244897fcfb5e70b,
29530 +
            0xe35eefaa5052c5a3,
29531 +
            0x648f984adbaacdca,
29532 +
            0xc97084a0e1e0a638,
29533 +
            0x4ea1f3406a18ae51,
29534 +
            0xb70239bf33360295,
29535 +
            0x30d34e5fb8ce0afc,
29536 +
            0x9d2c52b58284610e,
29537 +
            0x1afd2555097c6967,
29538 +
            0xd6e72622eae8fb7c,
29539 +
            0x513651c26110f315,
29540 +
            0xfcc94d285b5a98e7,
29541 +
            0x7b183ac8d0a2908e,
29542 +
            0x82bbf037898c3c4a,
29543 +
            0x056a87d702743423,
29544 +
            0xa8959b3d383e5fd1,
29545 +
            0x2f44ecddb3c657b8,
29546 +
            0x7e5e8a082c217510,
29547 +
            0xf98ffde8a7d97d79,
29548 +
            0x5470e1029d93168b,
29549 +
            0xd3a196e2166b1ee2,
29550 +
            0x2a025c1d4f45b226,
29551 +
            0xadd32bfdc4bdba4f,
29552 +
            0x002c3717fef7d1bd,
29553 +
            0x87fd40f7750fd9d4,
29554 +
            0xa218fabcc13994ed,
29555 +
            0x25c98d5c4ac19c84,
29556 +
            0x883691b6708bf776,
29557 +
            0x0fe7e656fb73ff1f,
29558 +
            0xf6442ca9a25d53db,
29559 +
            0x71955b4929a55bb2,
29560 +
            0xdc6a47a313ef3040,
29561 +
            0x5bbb304398173829,
29562 +
            0x0aa1569607f01a81,
29563 +
            0x8d7021768c0812e8,
29564 +
            0x208f3d9cb642791a,
29565 +
            0xa75e4a7c3dba7173,
29566 +
            0x5efd80836494ddb7,
29567 +
            0xd92cf763ef6cd5de,
29568 +
            0x74d3eb89d526be2c,
29569 +
            0xf3029c695edeb645,
29570 +
        ],
29571 +
        [
29572 +
            0x0000000000000000,
29573 +
            0x2513cd6a5fe5f412,
29574 +
            0x4a279ad4bfcbe824,
29575 +
            0x6f3457bee02e1c36,
29576 +
            0x944f35a97f97d048,
29577 +
            0xb15cf8c32072245a,
29578 +
            0xde68af7dc05c386c,
29579 +
            0xfb7b62179fb9cc7e,
29580 +
            0x0d12ef99596dd3d9,
29581 +
            0x280122f3068827cb,
29582 +
            0x4735754de6a63bfd,
29583 +
            0x6226b827b943cfef,
29584 +
            0x995dda3026fa0391,
29585 +
            0xbc4e175a791ff783,
29586 +
            0xd37a40e49931ebb5,
29587 +
            0xf6698d8ec6d41fa7,
29588 +
            0x1a25df32b2dba7b2,
29589 +
            0x3f361258ed3e53a0,
29590 +
            0x500245e60d104f96,
29591 +
            0x7511888c52f5bb84,
29592 +
            0x8e6aea9bcd4c77fa,
29593 +
            0xab7927f192a983e8,
29594 +
            0xc44d704f72879fde,
29595 +
            0xe15ebd252d626bcc,
29596 +
            0x173730abebb6746b,
29597 +
            0x3224fdc1b4538079,
29598 +
            0x5d10aa7f547d9c4f,
29599 +
            0x780367150b98685d,
29600 +
            0x837805029421a423,
29601 +
            0xa66bc868cbc45031,
29602 +
            0xc95f9fd62bea4c07,
29603 +
            0xec4c52bc740fb815,
29604 +
            0x344bbe6565b74f64,
29605 +
            0x1158730f3a52bb76,
29606 +
            0x7e6c24b1da7ca740,
29607 +
            0x5b7fe9db85995352,
29608 +
            0xa0048bcc1a209f2c,
29609 +
            0x851746a645c56b3e,
29610 +
            0xea231118a5eb7708,
29611 +
            0xcf30dc72fa0e831a,
29612 +
            0x395951fc3cda9cbd,
29613 +
            0x1c4a9c96633f68af,
29614 +
            0x737ecb2883117499,
29615 +
            0x566d0642dcf4808b,
29616 +
            0xad166455434d4cf5,
29617 +
            0x8805a93f1ca8b8e7,
29618 +
            0xe731fe81fc86a4d1,
29619 +
            0xc22233eba36350c3,
29620 +
            0x2e6e6157d76ce8d6,
29621 +
            0x0b7dac3d88891cc4,
29622 +
            0x6449fb8368a700f2,
29623 +
            0x415a36e93742f4e0,
29624 +
            0xba2154fea8fb389e,
29625 +
            0x9f329994f71ecc8c,
29626 +
            0xf006ce2a1730d0ba,
29627 +
            0xd515034048d524a8,
29628 +
            0x237c8ece8e013b0f,
29629 +
            0x066f43a4d1e4cf1d,
29630 +
            0x695b141a31cad32b,
29631 +
            0x4c48d9706e2f2739,
29632 +
            0xb733bb67f196eb47,
29633 +
            0x9220760dae731f55,
29634 +
            0xfd1421b34e5d0363,
29635 +
            0xd807ecd911b8f771,
29636 +
            0x68977ccacb6e9ec8,
29637 +
            0x4d84b1a0948b6ada,
29638 +
            0x22b0e61e74a576ec,
29639 +
            0x07a32b742b4082fe,
29640 +
            0xfcd84963b4f94e80,
29641 +
            0xd9cb8409eb1cba92,
29642 +
            0xb6ffd3b70b32a6a4,
29643 +
            0x93ec1edd54d752b6,
29644 +
            0x6585935392034d11,
29645 +
            0x40965e39cde6b903,
29646 +
            0x2fa209872dc8a535,
29647 +
            0x0ab1c4ed722d5127,
29648 +
            0xf1caa6faed949d59,
29649 +
            0xd4d96b90b271694b,
29650 +
            0xbbed3c2e525f757d,
29651 +
            0x9efef1440dba816f,
29652 +
            0x72b2a3f879b5397a,
29653 +
            0x57a16e922650cd68,
29654 +
            0x3895392cc67ed15e,
29655 +
            0x1d86f446999b254c,
29656 +
            0xe6fd96510622e932,
29657 +
            0xc3ee5b3b59c71d20,
29658 +
            0xacda0c85b9e90116,
29659 +
            0x89c9c1efe60cf504,
29660 +
            0x7fa04c6120d8eaa3,
29661 +
            0x5ab3810b7f3d1eb1,
29662 +
            0x3587d6b59f130287,
29663 +
            0x10941bdfc0f6f695,
29664 +
            0xebef79c85f4f3aeb,
29665 +
            0xcefcb4a200aacef9,
29666 +
            0xa1c8e31ce084d2cf,
29667 +
            0x84db2e76bf6126dd,
29668 +
            0x5cdcc2afaed9d1ac,
29669 +
            0x79cf0fc5f13c25be,
29670 +
            0x16fb587b11123988,
29671 +
            0x33e895114ef7cd9a,
29672 +
            0xc893f706d14e01e4,
29673 +
            0xed803a6c8eabf5f6,
29674 +
            0x82b46dd26e85e9c0,
29675 +
            0xa7a7a0b831601dd2,
29676 +
            0x51ce2d36f7b40275,
29677 +
            0x74dde05ca851f667,
29678 +
            0x1be9b7e2487fea51,
29679 +
            0x3efa7a88179a1e43,
29680 +
            0xc581189f8823d23d,
29681 +
            0xe092d5f5d7c6262f,
29682 +
            0x8fa6824b37e83a19,
29683 +
            0xaab54f21680dce0b,
29684 +
            0x46f91d9d1c02761e,
29685 +
            0x63ead0f743e7820c,
29686 +
            0x0cde8749a3c99e3a,
29687 +
            0x29cd4a23fc2c6a28,
29688 +
            0xd2b628346395a656,
29689 +
            0xf7a5e55e3c705244,
29690 +
            0x9891b2e0dc5e4e72,
29691 +
            0xbd827f8a83bbba60,
29692 +
            0x4bebf204456fa5c7,
29693 +
            0x6ef83f6e1a8a51d5,
29694 +
            0x01cc68d0faa44de3,
29695 +
            0x24dfa5baa541b9f1,
29696 +
            0xdfa4c7ad3af8758f,
29697 +
            0xfab70ac7651d819d,
29698 +
            0x95835d7985339dab,
29699 +
            0xb0909013dad669b9,
29700 +
            0xd12ef99596dd3d90,
29701 +
            0xf43d34ffc938c982,
29702 +
            0x9b0963412916d5b4,
29703 +
            0xbe1aae2b76f321a6,
29704 +
            0x4561cc3ce94aedd8,
29705 +
            0x60720156b6af19ca,
29706 +
            0x0f4656e8568105fc,
29707 +
            0x2a559b820964f1ee,
29708 +
            0xdc3c160ccfb0ee49,
29709 +
            0xf92fdb6690551a5b,
29710 +
            0x961b8cd8707b066d,
29711 +
            0xb30841b22f9ef27f,
29712 +
            0x487323a5b0273e01,
29713 +
            0x6d60eecfefc2ca13,
29714 +
            0x0254b9710fecd625,
29715 +
            0x2747741b50092237,
29716 +
            0xcb0b26a724069a22,
29717 +
            0xee18ebcd7be36e30,
29718 +
            0x812cbc739bcd7206,
29719 +
            0xa43f7119c4288614,
29720 +
            0x5f44130e5b914a6a,
29721 +
            0x7a57de640474be78,
29722 +
            0x156389dae45aa24e,
29723 +
            0x307044b0bbbf565c,
29724 +
            0xc619c93e7d6b49fb,
29725 +
            0xe30a0454228ebde9,
29726 +
            0x8c3e53eac2a0a1df,
29727 +
            0xa92d9e809d4555cd,
29728 +
            0x5256fc9702fc99b3,
29729 +
            0x774531fd5d196da1,
29730 +
            0x18716643bd377197,
29731 +
            0x3d62ab29e2d28585,
29732 +
            0xe56547f0f36a72f4,
29733 +
            0xc0768a9aac8f86e6,
29734 +
            0xaf42dd244ca19ad0,
29735 +
            0x8a51104e13446ec2,
29736 +
            0x712a72598cfda2bc,
29737 +
            0x5439bf33d31856ae,
29738 +
            0x3b0de88d33364a98,
29739 +
            0x1e1e25e76cd3be8a,
29740 +
            0xe877a869aa07a12d,
29741 +
            0xcd646503f5e2553f,
29742 +
            0xa25032bd15cc4909,
29743 +
            0x8743ffd74a29bd1b,
29744 +
            0x7c389dc0d5907165,
29745 +
            0x592b50aa8a758577,
29746 +
            0x361f07146a5b9941,
29747 +
            0x130cca7e35be6d53,
29748 +
            0xff4098c241b1d546,
29749 +
            0xda5355a81e542154,
29750 +
            0xb5670216fe7a3d62,
29751 +
            0x9074cf7ca19fc970,
29752 +
            0x6b0fad6b3e26050e,
29753 +
            0x4e1c600161c3f11c,
29754 +
            0x212837bf81eded2a,
29755 +
            0x043bfad5de081938,
29756 +
            0xf252775b18dc069f,
29757 +
            0xd741ba314739f28d,
29758 +
            0xb875ed8fa717eebb,
29759 +
            0x9d6620e5f8f21aa9,
29760 +
            0x661d42f2674bd6d7,
29761 +
            0x430e8f9838ae22c5,
29762 +
            0x2c3ad826d8803ef3,
29763 +
            0x0929154c8765cae1,
29764 +
            0xb9b9855f5db3a358,
29765 +
            0x9caa48350256574a,
29766 +
            0xf39e1f8be2784b7c,
29767 +
            0xd68dd2e1bd9dbf6e,
29768 +
            0x2df6b0f622247310,
29769 +
            0x08e57d9c7dc18702,
29770 +
            0x67d12a229def9b34,
29771 +
            0x42c2e748c20a6f26,
29772 +
            0xb4ab6ac604de7081,
29773 +
            0x91b8a7ac5b3b8493,
29774 +
            0xfe8cf012bb1598a5,
29775 +
            0xdb9f3d78e4f06cb7,
29776 +
            0x20e45f6f7b49a0c9,
29777 +
            0x05f7920524ac54db,
29778 +
            0x6ac3c5bbc48248ed,
29779 +
            0x4fd008d19b67bcff,
29780 +
            0xa39c5a6def6804ea,
29781 +
            0x868f9707b08df0f8,
29782 +
            0xe9bbc0b950a3ecce,
29783 +
            0xcca80dd30f4618dc,
29784 +
            0x37d36fc490ffd4a2,
29785 +
            0x12c0a2aecf1a20b0,
29786 +
            0x7df4f5102f343c86,
29787 +
            0x58e7387a70d1c894,
29788 +
            0xae8eb5f4b605d733,
29789 +
            0x8b9d789ee9e02321,
29790 +
            0xe4a92f2009ce3f17,
29791 +
            0xc1bae24a562bcb05,
29792 +
            0x3ac1805dc992077b,
29793 +
            0x1fd24d379677f369,
29794 +
            0x70e61a897659ef5f,
29795 +
            0x55f5d7e329bc1b4d,
29796 +
            0x8df23b3a3804ec3c,
29797 +
            0xa8e1f65067e1182e,
29798 +
            0xc7d5a1ee87cf0418,
29799 +
            0xe2c66c84d82af00a,
29800 +
            0x19bd0e9347933c74,
29801 +
            0x3caec3f91876c866,
29802 +
            0x539a9447f858d450,
29803 +
            0x7689592da7bd2042,
29804 +
            0x80e0d4a361693fe5,
29805 +
            0xa5f319c93e8ccbf7,
29806 +
            0xcac74e77dea2d7c1,
29807 +
            0xefd4831d814723d3,
29808 +
            0x14afe10a1efeefad,
29809 +
            0x31bc2c60411b1bbf,
29810 +
            0x5e887bdea1350789,
29811 +
            0x7b9bb6b4fed0f39b,
29812 +
            0x97d7e4088adf4b8e,
29813 +
            0xb2c42962d53abf9c,
29814 +
            0xddf07edc3514a3aa,
29815 +
            0xf8e3b3b66af157b8,
29816 +
            0x0398d1a1f5489bc6,
29817 +
            0x268b1ccbaaad6fd4,
29818 +
            0x49bf4b754a8373e2,
29819 +
            0x6cac861f156687f0,
29820 +
            0x9ac50b91d3b29857,
29821 +
            0xbfd6c6fb8c576c45,
29822 +
            0xd0e291456c797073,
29823 +
            0xf5f15c2f339c8461,
29824 +
            0x0e8a3e38ac25481f,
29825 +
            0x2b99f352f3c0bc0d,
29826 +
            0x44ada4ec13eea03b,
29827 +
            0x61be69864c0b5429,
29828 +
        ],
29829 +
        [
29830 +
            0x0000000000000000,
29831 +
            0x90a848a12e3258b6,
29832 +
            0x04dc1589fa26c225,
29833 +
            0x94745d28d4149a93,
29834 +
            0x09b82b13f44d844a,
29835 +
            0x991063b2da7fdcfc,
29836 +
            0x0d643e9a0e6b466f,
29837 +
            0x9dcc763b20591ed9,
29838 +
            0x13705627e89b0894,
29839 +
            0x83d81e86c6a95022,
29840 +
            0x17ac43ae12bdcab1,
29841 +
            0x87040b0f3c8f9207,
29842 +
            0x1ac87d341cd68cde,
29843 +
            0x8a60359532e4d468,
29844 +
            0x1e1468bde6f04efb,
29845 +
            0x8ebc201cc8c2164d,
29846 +
            0x26e0ac4fd1361128,
29847 +
            0xb648e4eeff04499e,
29848 +
            0x223cb9c62b10d30d,
29849 +
            0xb294f16705228bbb,
29850 +
            0x2f58875c257b9562,
29851 +
            0xbff0cffd0b49cdd4,
29852 +
            0x2b8492d5df5d5747,
29853 +
            0xbb2cda74f16f0ff1,
29854 +
            0x3590fa6839ad19bc,
29855 +
            0xa538b2c9179f410a,
29856 +
            0x314cefe1c38bdb99,
29857 +
            0xa1e4a740edb9832f,
29858 +
            0x3c28d17bcde09df6,
29859 +
            0xac8099dae3d2c540,
29860 +
            0x38f4c4f237c65fd3,
29861 +
            0xa85c8c5319f40765,
29862 +
            0x4dc1589fa26c2250,
29863 +
            0xdd69103e8c5e7ae6,
29864 +
            0x491d4d16584ae075,
29865 +
            0xd9b505b77678b8c3,
29866 +
            0x4479738c5621a61a,
29867 +
            0xd4d13b2d7813feac,
29868 +
            0x40a56605ac07643f,
29869 +
            0xd00d2ea482353c89,
29870 +
            0x5eb10eb84af72ac4,
29871 +
            0xce19461964c57272,
29872 +
            0x5a6d1b31b0d1e8e1,
29873 +
            0xcac553909ee3b057,
29874 +
            0x570925abbebaae8e,
29875 +
            0xc7a16d0a9088f638,
29876 +
            0x53d53022449c6cab,
29877 +
            0xc37d78836aae341d,
29878 +
            0x6b21f4d0735a3378,
29879 +
            0xfb89bc715d686bce,
29880 +
            0x6ffde159897cf15d,
29881 +
            0xff55a9f8a74ea9eb,
29882 +
            0x6299dfc38717b732,
29883 +
            0xf2319762a925ef84,
29884 +
            0x6645ca4a7d317517,
29885 +
            0xf6ed82eb53032da1,
29886 +
            0x7851a2f79bc13bec,
29887 +
            0xe8f9ea56b5f3635a,
29888 +
            0x7c8db77e61e7f9c9,
29889 +
            0xec25ffdf4fd5a17f,
29890 +
            0x71e989e46f8cbfa6,
29891 +
            0xe141c14541bee710,
29892 +
            0x75359c6d95aa7d83,
29893 +
            0xe59dd4ccbb982535,
29894 +
            0x9b82b13f44d844a0,
29895 +
            0x0b2af99e6aea1c16,
29896 +
            0x9f5ea4b6befe8685,
29897 +
            0x0ff6ec1790ccde33,
29898 +
            0x923a9a2cb095c0ea,
29899 +
            0x0292d28d9ea7985c,
29900 +
            0x96e68fa54ab302cf,
29901 +
            0x064ec70464815a79,
29902 +
            0x88f2e718ac434c34,
29903 +
            0x185aafb982711482,
29904 +
            0x8c2ef29156658e11,
29905 +
            0x1c86ba307857d6a7,
29906 +
            0x814acc0b580ec87e,
29907 +
            0x11e284aa763c90c8,
29908 +
            0x8596d982a2280a5b,
29909 +
            0x153e91238c1a52ed,
29910 +
            0xbd621d7095ee5588,
29911 +
            0x2dca55d1bbdc0d3e,
29912 +
            0xb9be08f96fc897ad,
29913 +
            0x2916405841facf1b,
29914 +
            0xb4da366361a3d1c2,
29915 +
            0x24727ec24f918974,
29916 +
            0xb00623ea9b8513e7,
29917 +
            0x20ae6b4bb5b74b51,
29918 +
            0xae124b577d755d1c,
29919 +
            0x3eba03f6534705aa,
29920 +
            0xaace5ede87539f39,
29921 +
            0x3a66167fa961c78f,
29922 +
            0xa7aa60448938d956,
29923 +
            0x370228e5a70a81e0,
29924 +
            0xa37675cd731e1b73,
29925 +
            0x33de3d6c5d2c43c5,
29926 +
            0xd643e9a0e6b466f0,
29927 +
            0x46eba101c8863e46,
29928 +
            0xd29ffc291c92a4d5,
29929 +
            0x4237b48832a0fc63,
29930 +
            0xdffbc2b312f9e2ba,
29931 +
            0x4f538a123ccbba0c,
29932 +
            0xdb27d73ae8df209f,
29933 +
            0x4b8f9f9bc6ed7829,
29934 +
            0xc533bf870e2f6e64,
29935 +
            0x559bf726201d36d2,
29936 +
            0xc1efaa0ef409ac41,
29937 +
            0x5147e2afda3bf4f7,
29938 +
            0xcc8b9494fa62ea2e,
29939 +
            0x5c23dc35d450b298,
29940 +
            0xc857811d0044280b,
29941 +
            0x58ffc9bc2e7670bd,
29942 +
            0xf0a345ef378277d8,
29943 +
            0x600b0d4e19b02f6e,
29944 +
            0xf47f5066cda4b5fd,
29945 +
            0x64d718c7e396ed4b,
29946 +
            0xf91b6efcc3cff392,
29947 +
            0x69b3265dedfdab24,
29948 +
            0xfdc77b7539e931b7,
29949 +
            0x6d6f33d417db6901,
29950 +
            0xe3d313c8df197f4c,
29951 +
            0x737b5b69f12b27fa,
29952 +
            0xe70f0641253fbd69,
29953 +
            0x77a74ee00b0de5df,
29954 +
            0xea6b38db2b54fb06,
29955 +
            0x7ac3707a0566a3b0,
29956 +
            0xeeb72d52d1723923,
29957 +
            0x7e1f65f3ff406195,
29958 +
            0x1289e6b52ff2fa09,
29959 +
            0x8221ae1401c0a2bf,
29960 +
            0x1655f33cd5d4382c,
29961 +
            0x86fdbb9dfbe6609a,
29962 +
            0x1b31cda6dbbf7e43,
29963 +
            0x8b998507f58d26f5,
29964 +
            0x1fedd82f2199bc66,
29965 +
            0x8f45908e0fabe4d0,
29966 +
            0x01f9b092c769f29d,
29967 +
            0x9151f833e95baa2b,
29968 +
            0x0525a51b3d4f30b8,
29969 +
            0x958dedba137d680e,
29970 +
            0x08419b81332476d7,
29971 +
            0x98e9d3201d162e61,
29972 +
            0x0c9d8e08c902b4f2,
29973 +
            0x9c35c6a9e730ec44,
29974 +
            0x34694afafec4eb21,
29975 +
            0xa4c1025bd0f6b397,
29976 +
            0x30b55f7304e22904,
29977 +
            0xa01d17d22ad071b2,
29978 +
            0x3dd161e90a896f6b,
29979 +
            0xad79294824bb37dd,
29980 +
            0x390d7460f0afad4e,
29981 +
            0xa9a53cc1de9df5f8,
29982 +
            0x27191cdd165fe3b5,
29983 +
            0xb7b1547c386dbb03,
29984 +
            0x23c50954ec792190,
29985 +
            0xb36d41f5c24b7926,
29986 +
            0x2ea137cee21267ff,
29987 +
            0xbe097f6fcc203f49,
29988 +
            0x2a7d22471834a5da,
29989 +
            0xbad56ae63606fd6c,
29990 +
            0x5f48be2a8d9ed859,
29991 +
            0xcfe0f68ba3ac80ef,
29992 +
            0x5b94aba377b81a7c,
29993 +
            0xcb3ce302598a42ca,
29994 +
            0x56f0953979d35c13,
29995 +
            0xc658dd9857e104a5,
29996 +
            0x522c80b083f59e36,
29997 +
            0xc284c811adc7c680,
29998 +
            0x4c38e80d6505d0cd,
29999 +
            0xdc90a0ac4b37887b,
30000 +
            0x48e4fd849f2312e8,
30001 +
            0xd84cb525b1114a5e,
30002 +
            0x4580c31e91485487,
30003 +
            0xd5288bbfbf7a0c31,
30004 +
            0x415cd6976b6e96a2,
30005 +
            0xd1f49e36455cce14,
30006 +
            0x79a812655ca8c971,
30007 +
            0xe9005ac4729a91c7,
30008 +
            0x7d7407eca68e0b54,
30009 +
            0xeddc4f4d88bc53e2,
30010 +
            0x70103976a8e54d3b,
30011 +
            0xe0b871d786d7158d,
30012 +
            0x74cc2cff52c38f1e,
30013 +
            0xe464645e7cf1d7a8,
30014 +
            0x6ad84442b433c1e5,
30015 +
            0xfa700ce39a019953,
30016 +
            0x6e0451cb4e1503c0,
30017 +
            0xfeac196a60275b76,
30018 +
            0x63606f51407e45af,
30019 +
            0xf3c827f06e4c1d19,
30020 +
            0x67bc7ad8ba58878a,
30021 +
            0xf7143279946adf3c,
30022 +
            0x890b578a6b2abea9,
30023 +
            0x19a31f2b4518e61f,
30024 +
            0x8dd74203910c7c8c,
30025 +
            0x1d7f0aa2bf3e243a,
30026 +
            0x80b37c999f673ae3,
30027 +
            0x101b3438b1556255,
30028 +
            0x846f69106541f8c6,
30029 +
            0x14c721b14b73a070,
30030 +
            0x9a7b01ad83b1b63d,
30031 +
            0x0ad3490cad83ee8b,
30032 +
            0x9ea7142479977418,
30033 +
            0x0e0f5c8557a52cae,
30034 +
            0x93c32abe77fc3277,
30035 +
            0x036b621f59ce6ac1,
30036 +
            0x971f3f378ddaf052,
30037 +
            0x07b77796a3e8a8e4,
30038 +
            0xafebfbc5ba1caf81,
30039 +
            0x3f43b364942ef737,
30040 +
            0xab37ee4c403a6da4,
30041 +
            0x3b9fa6ed6e083512,
30042 +
            0xa653d0d64e512bcb,
30043 +
            0x36fb98776063737d,
30044 +
            0xa28fc55fb477e9ee,
30045 +
            0x32278dfe9a45b158,
30046 +
            0xbc9bade25287a715,
30047 +
            0x2c33e5437cb5ffa3,
30048 +
            0xb847b86ba8a16530,
30049 +
            0x28eff0ca86933d86,
30050 +
            0xb52386f1a6ca235f,
30051 +
            0x258bce5088f87be9,
30052 +
            0xb1ff93785cece17a,
30053 +
            0x2157dbd972deb9cc,
30054 +
            0xc4ca0f15c9469cf9,
30055 +
            0x546247b4e774c44f,
30056 +
            0xc0161a9c33605edc,
30057 +
            0x50be523d1d52066a,
30058 +
            0xcd7224063d0b18b3,
30059 +
            0x5dda6ca713394005,
30060 +
            0xc9ae318fc72dda96,
30061 +
            0x5906792ee91f8220,
30062 +
            0xd7ba593221dd946d,
30063 +
            0x471211930fefccdb,
30064 +
            0xd3664cbbdbfb5648,
30065 +
            0x43ce041af5c90efe,
30066 +
            0xde027221d5901027,
30067 +
            0x4eaa3a80fba24891,
30068 +
            0xdade67a82fb6d202,
30069 +
            0x4a762f0901848ab4,
30070 +
            0xe22aa35a18708dd1,
30071 +
            0x7282ebfb3642d567,
30072 +
            0xe6f6b6d3e2564ff4,
30073 +
            0x765efe72cc641742,
30074 +
            0xeb928849ec3d099b,
30075 +
            0x7b3ac0e8c20f512d,
30076 +
            0xef4e9dc0161bcbbe,
30077 +
            0x7fe6d56138299308,
30078 +
            0xf15af57df0eb8545,
30079 +
            0x61f2bddcded9ddf3,
30080 +
            0xf586e0f40acd4760,
30081 +
            0x652ea85524ff1fd6,
30082 +
            0xf8e2de6e04a6010f,
30083 +
            0x684a96cf2a9459b9,
30084 +
            0xfc3ecbe7fe80c32a,
30085 +
            0x6c968346d0b29b9c,
30086 +
        ],
30087 +
        [
30088 +
            0x0000000000000000,
30089 +
            0x064d835218fbbf73,
30090 +
            0x0c9b06a431f77ee6,
30091 +
            0x0ad685f6290cc195,
30092 +
            0x19360d4863eefdcc,
30093 +
            0x1f7b8e1a7b1542bf,
30094 +
            0x15ad0bec5219832a,
30095 +
            0x13e088be4ae23c59,
30096 +
            0x326c1a90c7ddfb98,
30097 +
            0x342199c2df2644eb,
30098 +
            0x3ef71c34f62a857e,
30099 +
            0x38ba9f66eed13a0d,
30100 +
            0x2b5a17d8a4330654,
30101 +
            0x2d17948abcc8b927,
30102 +
            0x27c1117c95c478b2,
30103 +
            0x218c922e8d3fc7c1,
30104 +
            0x64d835218fbbf730,
30105 +
            0x6295b67397404843,
30106 +
            0x68433385be4c89d6,
30107 +
            0x6e0eb0d7a6b736a5,
30108 +
            0x7dee3869ec550afc,
30109 +
            0x7ba3bb3bf4aeb58f,
30110 +
            0x71753ecddda2741a,
30111 +
            0x7738bd9fc559cb69,
30112 +
            0x56b42fb148660ca8,
30113 +
            0x50f9ace3509db3db,
30114 +
            0x5a2f29157991724e,
30115 +
            0x5c62aa47616acd3d,
30116 +
            0x4f8222f92b88f164,
30117 +
            0x49cfa1ab33734e17,
30118 +
            0x4319245d1a7f8f82,
30119 +
            0x4554a70f028430f1,
30120 +
            0xc9b06a431f77ee60,
30121 +
            0xcffde911078c5113,
30122 +
            0xc52b6ce72e809086,
30123 +
            0xc366efb5367b2ff5,
30124 +
            0xd086670b7c9913ac,
30125 +
            0xd6cbe4596462acdf,
30126 +
            0xdc1d61af4d6e6d4a,
30127 +
            0xda50e2fd5595d239,
30128 +
            0xfbdc70d3d8aa15f8,
30129 +
            0xfd91f381c051aa8b,
30130 +
            0xf7477677e95d6b1e,
30131 +
            0xf10af525f1a6d46d,
30132 +
            0xe2ea7d9bbb44e834,
30133 +
            0xe4a7fec9a3bf5747,
30134 +
            0xee717b3f8ab396d2,
30135 +
            0xe83cf86d924829a1,
30136 +
            0xad685f6290cc1950,
30137 +
            0xab25dc308837a623,
30138 +
            0xa1f359c6a13b67b6,
30139 +
            0xa7beda94b9c0d8c5,
30140 +
            0xb45e522af322e49c,
30141 +
            0xb213d178ebd95bef,
30142 +
            0xb8c5548ec2d59a7a,
30143 +
            0xbe88d7dcda2e2509,
30144 +
            0x9f0445f25711e2c8,
30145 +
            0x9949c6a04fea5dbb,
30146 +
            0x939f435666e69c2e,
30147 +
            0x95d2c0047e1d235d,
30148 +
            0x863248ba34ff1f04,
30149 +
            0x807fcbe82c04a077,
30150 +
            0x8aa94e1e050861e2,
30151 +
            0x8ce4cd4c1df3de91,
30152 +
            0xb6ec504d98adaf89,
30153 +
            0xb0a1d31f805610fa,
30154 +
            0xba7756e9a95ad16f,
30155 +
            0xbc3ad5bbb1a16e1c,
30156 +
            0xafda5d05fb435245,
30157 +
            0xa997de57e3b8ed36,
30158 +
            0xa3415ba1cab42ca3,
30159 +
            0xa50cd8f3d24f93d0,
30160 +
            0x84804add5f705411,
30161 +
            0x82cdc98f478beb62,
30162 +
            0x881b4c796e872af7,
30163 +
            0x8e56cf2b767c9584,
30164 +
            0x9db647953c9ea9dd,
30165 +
            0x9bfbc4c7246516ae,
30166 +
            0x912d41310d69d73b,
30167 +
            0x9760c26315926848,
30168 +
            0xd234656c171658b9,
30169 +
            0xd479e63e0fede7ca,
30170 +
            0xdeaf63c826e1265f,
30171 +
            0xd8e2e09a3e1a992c,
30172 +
            0xcb02682474f8a575,
30173 +
            0xcd4feb766c031a06,
30174 +
            0xc7996e80450fdb93,
30175 +
            0xc1d4edd25df464e0,
30176 +
            0xe0587ffcd0cba321,
30177 +
            0xe615fcaec8301c52,
30178 +
            0xecc37958e13cddc7,
30179 +
            0xea8efa0af9c762b4,
30180 +
            0xf96e72b4b3255eed,
30181 +
            0xff23f1e6abdee19e,
30182 +
            0xf5f5741082d2200b,
30183 +
            0xf3b8f7429a299f78,
30184 +
            0x7f5c3a0e87da41e9,
30185 +
            0x7911b95c9f21fe9a,
30186 +
            0x73c73caab62d3f0f,
30187 +
            0x758abff8aed6807c,
30188 +
            0x666a3746e434bc25,
30189 +
            0x6027b414fccf0356,
30190 +
            0x6af131e2d5c3c2c3,
30191 +
            0x6cbcb2b0cd387db0,
30192 +
            0x4d30209e4007ba71,
30193 +
            0x4b7da3cc58fc0502,
30194 +
            0x41ab263a71f0c497,
30195 +
            0x47e6a568690b7be4,
30196 +
            0x54062dd623e947bd,
30197 +
            0x524bae843b12f8ce,
30198 +
            0x589d2b72121e395b,
30199 +
            0x5ed0a8200ae58628,
30200 +
            0x1b840f2f0861b6d9,
30201 +
            0x1dc98c7d109a09aa,
30202 +
            0x171f098b3996c83f,
30203 +
            0x11528ad9216d774c,
30204 +
            0x02b202676b8f4b15,
30205 +
            0x04ff81357374f466,
30206 +
            0x0e2904c35a7835f3,
30207 +
            0x0864879142838a80,
30208 +
            0x29e815bfcfbc4d41,
30209 +
            0x2fa596edd747f232,
30210 +
            0x2573131bfe4b33a7,
30211 +
            0x233e9049e6b08cd4,
30212 +
            0x30de18f7ac52b08d,
30213 +
            0x36939ba5b4a90ffe,
30214 +
            0x3c451e539da5ce6b,
30215 +
            0x3a089d01855e7118,
30216 +
            0x4854245097192c5b,
30217 +
            0x4e19a7028fe29328,
30218 +
            0x44cf22f4a6ee52bd,
30219 +
            0x4282a1a6be15edce,
30220 +
            0x51622918f4f7d197,
30221 +
            0x572faa4aec0c6ee4,
30222 +
            0x5df92fbcc500af71,
30223 +
            0x5bb4aceeddfb1002,
30224 +
            0x7a383ec050c4d7c3,
30225 +
            0x7c75bd92483f68b0,
30226 +
            0x76a338646133a925,
30227 +
            0x70eebb3679c81656,
30228 +
            0x630e3388332a2a0f,
30229 +
            0x6543b0da2bd1957c,
30230 +
            0x6f95352c02dd54e9,
30231 +
            0x69d8b67e1a26eb9a,
30232 +
            0x2c8c117118a2db6b,
30233 +
            0x2ac1922300596418,
30234 +
            0x201717d52955a58d,
30235 +
            0x265a948731ae1afe,
30236 +
            0x35ba1c397b4c26a7,
30237 +
            0x33f79f6b63b799d4,
30238 +
            0x39211a9d4abb5841,
30239 +
            0x3f6c99cf5240e732,
30240 +
            0x1ee00be1df7f20f3,
30241 +
            0x18ad88b3c7849f80,
30242 +
            0x127b0d45ee885e15,
30243 +
            0x14368e17f673e166,
30244 +
            0x07d606a9bc91dd3f,
30245 +
            0x019b85fba46a624c,
30246 +
            0x0b4d000d8d66a3d9,
30247 +
            0x0d00835f959d1caa,
30248 +
            0x81e44e13886ec23b,
30249 +
            0x87a9cd4190957d48,
30250 +
            0x8d7f48b7b999bcdd,
30251 +
            0x8b32cbe5a16203ae,
30252 +
            0x98d2435beb803ff7,
30253 +
            0x9e9fc009f37b8084,
30254 +
            0x944945ffda774111,
30255 +
            0x9204c6adc28cfe62,
30256 +
            0xb38854834fb339a3,
30257 +
            0xb5c5d7d1574886d0,
30258 +
            0xbf1352277e444745,
30259 +
            0xb95ed17566bff836,
30260 +
            0xaabe59cb2c5dc46f,
30261 +
            0xacf3da9934a67b1c,
30262 +
            0xa6255f6f1daaba89,
30263 +
            0xa068dc3d055105fa,
30264 +
            0xe53c7b3207d5350b,
30265 +
            0xe371f8601f2e8a78,
30266 +
            0xe9a77d9636224bed,
30267 +
            0xefeafec42ed9f49e,
30268 +
            0xfc0a767a643bc8c7,
30269 +
            0xfa47f5287cc077b4,
30270 +
            0xf09170de55ccb621,
30271 +
            0xf6dcf38c4d370952,
30272 +
            0xd75061a2c008ce93,
30273 +
            0xd11de2f0d8f371e0,
30274 +
            0xdbcb6706f1ffb075,
30275 +
            0xdd86e454e9040f06,
30276 +
            0xce666ceaa3e6335f,
30277 +
            0xc82befb8bb1d8c2c,
30278 +
            0xc2fd6a4e92114db9,
30279 +
            0xc4b0e91c8aeaf2ca,
30280 +
            0xfeb8741d0fb483d2,
30281 +
            0xf8f5f74f174f3ca1,
30282 +
            0xf22372b93e43fd34,
30283 +
            0xf46ef1eb26b84247,
30284 +
            0xe78e79556c5a7e1e,
30285 +
            0xe1c3fa0774a1c16d,
30286 +
            0xeb157ff15dad00f8,
30287 +
            0xed58fca34556bf8b,
30288 +
            0xccd46e8dc869784a,
30289 +
            0xca99eddfd092c739,
30290 +
            0xc04f6829f99e06ac,
30291 +
            0xc602eb7be165b9df,
30292 +
            0xd5e263c5ab878586,
30293 +
            0xd3afe097b37c3af5,
30294 +
            0xd97965619a70fb60,
30295 +
            0xdf34e633828b4413,
30296 +
            0x9a60413c800f74e2,
30297 +
            0x9c2dc26e98f4cb91,
30298 +
            0x96fb4798b1f80a04,
30299 +
            0x90b6c4caa903b577,
30300 +
            0x83564c74e3e1892e,
30301 +
            0x851bcf26fb1a365d,
30302 +
            0x8fcd4ad0d216f7c8,
30303 +
            0x8980c982caed48bb,
30304 +
            0xa80c5bac47d28f7a,
30305 +
            0xae41d8fe5f293009,
30306 +
            0xa4975d087625f19c,
30307 +
            0xa2dade5a6ede4eef,
30308 +
            0xb13a56e4243c72b6,
30309 +
            0xb777d5b63cc7cdc5,
30310 +
            0xbda1504015cb0c50,
30311 +
            0xbbecd3120d30b323,
30312 +
            0x37081e5e10c36db2,
30313 +
            0x31459d0c0838d2c1,
30314 +
            0x3b9318fa21341354,
30315 +
            0x3dde9ba839cfac27,
30316 +
            0x2e3e1316732d907e,
30317 +
            0x287390446bd62f0d,
30318 +
            0x22a515b242daee98,
30319 +
            0x24e896e05a2151eb,
30320 +
            0x056404ced71e962a,
30321 +
            0x0329879ccfe52959,
30322 +
            0x09ff026ae6e9e8cc,
30323 +
            0x0fb28138fe1257bf,
30324 +
            0x1c520986b4f06be6,
30325 +
            0x1a1f8ad4ac0bd495,
30326 +
            0x10c90f2285071500,
30327 +
            0x16848c709dfcaa73,
30328 +
            0x53d02b7f9f789a82,
30329 +
            0x559da82d878325f1,
30330 +
            0x5f4b2ddbae8fe464,
30331 +
            0x5906ae89b6745b17,
30332 +
            0x4ae62637fc96674e,
30333 +
            0x4caba565e46dd83d,
30334 +
            0x467d2093cd6119a8,
30335 +
            0x4030a3c1d59aa6db,
30336 +
            0x61bc31ef58a5611a,
30337 +
            0x67f1b2bd405ede69,
30338 +
            0x6d27374b69521ffc,
30339 +
            0x6b6ab41971a9a08f,
30340 +
            0x788a3ca73b4b9cd6,
30341 +
            0x7ec7bff523b023a5,
30342 +
            0x74113a030abce230,
30343 +
            0x725cb95112475d43,
30344 +
        ],
30345 +
        [
30346 +
            0x0000000000000000,
30347 +
            0xf5504fe61db9c5af,
30348 +
            0xcf2c1b079d31f817,
30349 +
            0x3a7c54e180883db8,
30350 +
            0xbbd4b2c49c218367,
30351 +
            0x4e84fd22819846c8,
30352 +
            0x74f8a9c301107b70,
30353 +
            0x81a8e6251ca9bedf,
30354 +
            0x5225e1429e017587,
30355 +
            0xa775aea483b8b028,
30356 +
            0x9d09fa4503308d90,
30357 +
            0x6859b5a31e89483f,
30358 +
            0xe9f153860220f6e0,
30359 +
            0x1ca11c601f99334f,
30360 +
            0x26dd48819f110ef7,
30361 +
            0xd38d076782a8cb58,
30362 +
            0xa44bc2853c02eb0e,
30363 +
            0x511b8d6321bb2ea1,
30364 +
            0x6b67d982a1331319,
30365 +
            0x9e379664bc8ad6b6,
30366 +
            0x1f9f7041a0236869,
30367 +
            0xeacf3fa7bd9aadc6,
30368 +
            0xd0b36b463d12907e,
30369 +
            0x25e324a020ab55d1,
30370 +
            0xf66e23c7a2039e89,
30371 +
            0x033e6c21bfba5b26,
30372 +
            0x394238c03f32669e,
30373 +
            0xcc127726228ba331,
30374 +
            0x4dba91033e221dee,
30375 +
            0xb8eadee5239bd841,
30376 +
            0x82968a04a313e5f9,
30377 +
            0x77c6c5e2beaa2056,
30378 +
            0x6d1b01c1de47a555,
30379 +
            0x984b4e27c3fe60fa,
30380 +
            0xa2371ac643765d42,
30381 +
            0x576755205ecf98ed,
30382 +
            0xd6cfb30542662632,
30383 +
            0x239ffce35fdfe39d,
30384 +
            0x19e3a802df57de25,
30385 +
            0xecb3e7e4c2ee1b8a,
30386 +
            0x3f3ee0834046d0d2,
30387 +
            0xca6eaf655dff157d,
30388 +
            0xf012fb84dd7728c5,
30389 +
            0x0542b462c0ceed6a,
30390 +
            0x84ea5247dc6753b5,
30391 +
            0x71ba1da1c1de961a,
30392 +
            0x4bc649404156aba2,
30393 +
            0xbe9606a65cef6e0d,
30394 +
            0xc950c344e2454e5b,
30395 +
            0x3c008ca2fffc8bf4,
30396 +
            0x067cd8437f74b64c,
30397 +
            0xf32c97a562cd73e3,
30398 +
            0x728471807e64cd3c,
30399 +
            0x87d43e6663dd0893,
30400 +
            0xbda86a87e355352b,
30401 +
            0x48f82561feecf084,
30402 +
            0x9b7522067c443bdc,
30403 +
            0x6e256de061fdfe73,
30404 +
            0x54593901e175c3cb,
30405 +
            0xa10976e7fccc0664,
30406 +
            0x20a190c2e065b8bb,
30407 +
            0xd5f1df24fddc7d14,
30408 +
            0xef8d8bc57d5440ac,
30409 +
            0x1addc42360ed8503,
30410 +
            0xda360383bc8f4aaa,
30411 +
            0x2f664c65a1368f05,
30412 +
            0x151a188421beb2bd,
30413 +
            0xe04a57623c077712,
30414 +
            0x61e2b14720aec9cd,
30415 +
            0x94b2fea13d170c62,
30416 +
            0xaeceaa40bd9f31da,
30417 +
            0x5b9ee5a6a026f475,
30418 +
            0x8813e2c1228e3f2d,
30419 +
            0x7d43ad273f37fa82,
30420 +
            0x473ff9c6bfbfc73a,
30421 +
            0xb26fb620a2060295,
30422 +
            0x33c75005beafbc4a,
30423 +
            0xc6971fe3a31679e5,
30424 +
            0xfceb4b02239e445d,
30425 +
            0x09bb04e43e2781f2,
30426 +
            0x7e7dc106808da1a4,
30427 +
            0x8b2d8ee09d34640b,
30428 +
            0xb151da011dbc59b3,
30429 +
            0x440195e700059c1c,
30430 +
            0xc5a973c21cac22c3,
30431 +
            0x30f93c240115e76c,
30432 +
            0x0a8568c5819ddad4,
30433 +
            0xffd527239c241f7b,
30434 +
            0x2c5820441e8cd423,
30435 +
            0xd9086fa20335118c,
30436 +
            0xe3743b4383bd2c34,
30437 +
            0x162474a59e04e99b,
30438 +
            0x978c928082ad5744,
30439 +
            0x62dcdd669f1492eb,
30440 +
            0x58a089871f9caf53,
30441 +
            0xadf0c66102256afc,
30442 +
            0xb72d024262c8efff,
30443 +
            0x427d4da47f712a50,
30444 +
            0x78011945fff917e8,
30445 +
            0x8d5156a3e240d247,
30446 +
            0x0cf9b086fee96c98,
30447 +
            0xf9a9ff60e350a937,
30448 +
            0xc3d5ab8163d8948f,
30449 +
            0x3685e4677e615120,
30450 +
            0xe508e300fcc99a78,
30451 +
            0x1058ace6e1705fd7,
30452 +
            0x2a24f80761f8626f,
30453 +
            0xdf74b7e17c41a7c0,
30454 +
            0x5edc51c460e8191f,
30455 +
            0xab8c1e227d51dcb0,
30456 +
            0x91f04ac3fdd9e108,
30457 +
            0x64a00525e06024a7,
30458 +
            0x1366c0c75eca04f1,
30459 +
            0xe6368f214373c15e,
30460 +
            0xdc4adbc0c3fbfce6,
30461 +
            0x291a9426de423949,
30462 +
            0xa8b27203c2eb8796,
30463 +
            0x5de23de5df524239,
30464 +
            0x679e69045fda7f81,
30465 +
            0x92ce26e24263ba2e,
30466 +
            0x41432185c0cb7176,
30467 +
            0xb4136e63dd72b4d9,
30468 +
            0x8e6f3a825dfa8961,
30469 +
            0x7b3f756440434cce,
30470 +
            0xfa9793415ceaf211,
30471 +
            0x0fc7dca7415337be,
30472 +
            0x35bb8846c1db0a06,
30473 +
            0xc0ebc7a0dc62cfa9,
30474 +
            0x91e083ccdf5ce61d,
30475 +
            0x64b0cc2ac2e523b2,
30476 +
            0x5ecc98cb426d1e0a,
30477 +
            0xab9cd72d5fd4dba5,
30478 +
            0x2a343108437d657a,
30479 +
            0xdf647eee5ec4a0d5,
30480 +
            0xe5182a0fde4c9d6d,
30481 +
            0x104865e9c3f558c2,
30482 +
            0xc3c5628e415d939a,
30483 +
            0x36952d685ce45635,
30484 +
            0x0ce97989dc6c6b8d,
30485 +
            0xf9b9366fc1d5ae22,
30486 +
            0x7811d04add7c10fd,
30487 +
            0x8d419facc0c5d552,
30488 +
            0xb73dcb4d404de8ea,
30489 +
            0x426d84ab5df42d45,
30490 +
            0x35ab4149e35e0d13,
30491 +
            0xc0fb0eaffee7c8bc,
30492 +
            0xfa875a4e7e6ff504,
30493 +
            0x0fd715a863d630ab,
30494 +
            0x8e7ff38d7f7f8e74,
30495 +
            0x7b2fbc6b62c64bdb,
30496 +
            0x4153e88ae24e7663,
30497 +
            0xb403a76cfff7b3cc,
30498 +
            0x678ea00b7d5f7894,
30499 +
            0x92deefed60e6bd3b,
30500 +
            0xa8a2bb0ce06e8083,
30501 +
            0x5df2f4eafdd7452c,
30502 +
            0xdc5a12cfe17efbf3,
30503 +
            0x290a5d29fcc73e5c,
30504 +
            0x137609c87c4f03e4,
30505 +
            0xe626462e61f6c64b,
30506 +
            0xfcfb820d011b4348,
30507 +
            0x09abcdeb1ca286e7,
30508 +
            0x33d7990a9c2abb5f,
30509 +
            0xc687d6ec81937ef0,
30510 +
            0x472f30c99d3ac02f,
30511 +
            0xb27f7f2f80830580,
30512 +
            0x88032bce000b3838,
30513 +
            0x7d5364281db2fd97,
30514 +
            0xaede634f9f1a36cf,
30515 +
            0x5b8e2ca982a3f360,
30516 +
            0x61f27848022bced8,
30517 +
            0x94a237ae1f920b77,
30518 +
            0x150ad18b033bb5a8,
30519 +
            0xe05a9e6d1e827007,
30520 +
            0xda26ca8c9e0a4dbf,
30521 +
            0x2f76856a83b38810,
30522 +
            0x58b040883d19a846,
30523 +
            0xade00f6e20a06de9,
30524 +
            0x979c5b8fa0285051,
30525 +
            0x62cc1469bd9195fe,
30526 +
            0xe364f24ca1382b21,
30527 +
            0x1634bdaabc81ee8e,
30528 +
            0x2c48e94b3c09d336,
30529 +
            0xd918a6ad21b01699,
30530 +
            0x0a95a1caa318ddc1,
30531 +
            0xffc5ee2cbea1186e,
30532 +
            0xc5b9bacd3e2925d6,
30533 +
            0x30e9f52b2390e079,
30534 +
            0xb141130e3f395ea6,
30535 +
            0x44115ce822809b09,
30536 +
            0x7e6d0809a208a6b1,
30537 +
            0x8b3d47efbfb1631e,
30538 +
            0x4bd6804f63d3acb7,
30539 +
            0xbe86cfa97e6a6918,
30540 +
            0x84fa9b48fee254a0,
30541 +
            0x71aad4aee35b910f,
30542 +
            0xf002328bfff22fd0,
30543 +
            0x05527d6de24bea7f,
30544 +
            0x3f2e298c62c3d7c7,
30545 +
            0xca7e666a7f7a1268,
30546 +
            0x19f3610dfdd2d930,
30547 +
            0xeca32eebe06b1c9f,
30548 +
            0xd6df7a0a60e32127,
30549 +
            0x238f35ec7d5ae488,
30550 +
            0xa227d3c961f35a57,
30551 +
            0x57779c2f7c4a9ff8,
30552 +
            0x6d0bc8cefcc2a240,
30553 +
            0x985b8728e17b67ef,
30554 +
            0xef9d42ca5fd147b9,
30555 +
            0x1acd0d2c42688216,
30556 +
            0x20b159cdc2e0bfae,
30557 +
            0xd5e1162bdf597a01,
30558 +
            0x5449f00ec3f0c4de,
30559 +
            0xa119bfe8de490171,
30560 +
            0x9b65eb095ec13cc9,
30561 +
            0x6e35a4ef4378f966,
30562 +
            0xbdb8a388c1d0323e,
30563 +
            0x48e8ec6edc69f791,
30564 +
            0x7294b88f5ce1ca29,
30565 +
            0x87c4f76941580f86,
30566 +
            0x066c114c5df1b159,
30567 +
            0xf33c5eaa404874f6,
30568 +
            0xc9400a4bc0c0494e,
30569 +
            0x3c1045addd798ce1,
30570 +
            0x26cd818ebd9409e2,
30571 +
            0xd39dce68a02dcc4d,
30572 +
            0xe9e19a8920a5f1f5,
30573 +
            0x1cb1d56f3d1c345a,
30574 +
            0x9d19334a21b58a85,
30575 +
            0x68497cac3c0c4f2a,
30576 +
            0x5235284dbc847292,
30577 +
            0xa76567aba13db73d,
30578 +
            0x74e860cc23957c65,
30579 +
            0x81b82f2a3e2cb9ca,
30580 +
            0xbbc47bcbbea48472,
30581 +
            0x4e94342da31d41dd,
30582 +
            0xcf3cd208bfb4ff02,
30583 +
            0x3a6c9deea20d3aad,
30584 +
            0x0010c90f22850715,
30585 +
            0xf54086e93f3cc2ba,
30586 +
            0x8286430b8196e2ec,
30587 +
            0x77d60ced9c2f2743,
30588 +
            0x4daa580c1ca71afb,
30589 +
            0xb8fa17ea011edf54,
30590 +
            0x3952f1cf1db7618b,
30591 +
            0xcc02be29000ea424,
30592 +
            0xf67eeac88086999c,
30593 +
            0x032ea52e9d3f5c33,
30594 +
            0xd0a3a2491f97976b,
30595 +
            0x25f3edaf022e52c4,
30596 +
            0x1f8fb94e82a66f7c,
30597 +
            0xeadff6a89f1faad3,
30598 +
            0x6b77108d83b6140c,
30599 +
            0x9e275f6b9e0fd1a3,
30600 +
            0xa45b0b8a1e87ec1b,
30601 +
            0x510b446c033e29b4,
30602 +
        ],
30603 +
        [
30604 +
            0x0000000000000000,
30605 +
            0xcef05cca14bbf4df,
30606 +
            0xb86c3d5f8f359af7,
30607 +
            0x769c61959b8e6e28,
30608 +
            0x5554fe74b82946a7,
30609 +
            0x9ba4a2beac92b278,
30610 +
            0xed38c32b371cdc50,
30611 +
            0x23c89fe123a7288f,
30612 +
            0xaaa9fce970528d4e,
30613 +
            0x6459a02364e97991,
30614 +
            0x12c5c1b6ff6717b9,
30615 +
            0xdc359d7cebdce366,
30616 +
            0xfffd029dc87bcbe9,
30617 +
            0x310d5e57dcc03f36,
30618 +
            0x47913fc2474e511e,
30619 +
            0x8961630853f5a5c1,
30620 +
            0x70df7d1946e769d5,
30621 +
            0xbe2f21d3525c9d0a,
30622 +
            0xc8b34046c9d2f322,
30623 +
            0x06431c8cdd6907fd,
30624 +
            0x258b836dfece2f72,
30625 +
            0xeb7bdfa7ea75dbad,
30626 +
            0x9de7be3271fbb585,
30627 +
            0x5317e2f86540415a,
30628 +
            0xda7681f036b5e49b,
30629 +
            0x1486dd3a220e1044,
30630 +
            0x621abcafb9807e6c,
30631 +
            0xaceae065ad3b8ab3,
30632 +
            0x8f227f848e9ca23c,
30633 +
            0x41d2234e9a2756e3,
30634 +
            0x374e42db01a938cb,
30635 +
            0xf9be1e111512cc14,
30636 +
            0xe1befa328dced3aa,
30637 +
            0x2f4ea6f899752775,
30638 +
            0x59d2c76d02fb495d,
30639 +
            0x97229ba71640bd82,
30640 +
            0xb4ea044635e7950d,
30641 +
            0x7a1a588c215c61d2,
30642 +
            0x0c863919bad20ffa,
30643 +
            0xc27665d3ae69fb25,
30644 +
            0x4b1706dbfd9c5ee4,
30645 +
            0x85e75a11e927aa3b,
30646 +
            0xf37b3b8472a9c413,
30647 +
            0x3d8b674e661230cc,
30648 +
            0x1e43f8af45b51843,
30649 +
            0xd0b3a465510eec9c,
30650 +
            0xa62fc5f0ca8082b4,
30651 +
            0x68df993ade3b766b,
30652 +
            0x9161872bcb29ba7f,
30653 +
            0x5f91dbe1df924ea0,
30654 +
            0x290dba74441c2088,
30655 +
            0xe7fde6be50a7d457,
30656 +
            0xc435795f7300fcd8,
30657 +
            0x0ac5259567bb0807,
30658 +
            0x7c594400fc35662f,
30659 +
            0xb2a918cae88e92f0,
30660 +
            0x3bc87bc2bb7b3731,
30661 +
            0xf5382708afc0c3ee,
30662 +
            0x83a4469d344eadc6,
30663 +
            0x4d541a5720f55919,
30664 +
            0x6e9c85b603527196,
30665 +
            0xa06cd97c17e98549,
30666 +
            0xd6f0b8e98c67eb61,
30667 +
            0x1800e42398dc1fbe,
30668 +
            0xe6f170aebddfd41d,
30669 +
            0x28012c64a96420c2,
30670 +
            0x5e9d4df132ea4eea,
30671 +
            0x906d113b2651ba35,
30672 +
            0xb3a58eda05f692ba,
30673 +
            0x7d55d210114d6665,
30674 +
            0x0bc9b3858ac3084d,
30675 +
            0xc539ef4f9e78fc92,
30676 +
            0x4c588c47cd8d5953,
30677 +
            0x82a8d08dd936ad8c,
30678 +
            0xf434b11842b8c3a4,
30679 +
            0x3ac4edd25603377b,
30680 +
            0x190c723375a41ff4,
30681 +
            0xd7fc2ef9611feb2b,
30682 +
            0xa1604f6cfa918503,
30683 +
            0x6f9013a6ee2a71dc,
30684 +
            0x962e0db7fb38bdc8,
30685 +
            0x58de517def834917,
30686 +
            0x2e4230e8740d273f,
30687 +
            0xe0b26c2260b6d3e0,
30688 +
            0xc37af3c34311fb6f,
30689 +
            0x0d8aaf0957aa0fb0,
30690 +
            0x7b16ce9ccc246198,
30691 +
            0xb5e69256d89f9547,
30692 +
            0x3c87f15e8b6a3086,
30693 +
            0xf277ad949fd1c459,
30694 +
            0x84ebcc01045faa71,
30695 +
            0x4a1b90cb10e45eae,
30696 +
            0x69d30f2a33437621,
30697 +
            0xa72353e027f882fe,
30698 +
            0xd1bf3275bc76ecd6,
30699 +
            0x1f4f6ebfa8cd1809,
30700 +
            0x074f8a9c301107b7,
30701 +
            0xc9bfd65624aaf368,
30702 +
            0xbf23b7c3bf249d40,
30703 +
            0x71d3eb09ab9f699f,
30704 +
            0x521b74e888384110,
30705 +
            0x9ceb28229c83b5cf,
30706 +
            0xea7749b7070ddbe7,
30707 +
            0x2487157d13b62f38,
30708 +
            0xade6767540438af9,
30709 +
            0x63162abf54f87e26,
30710 +
            0x158a4b2acf76100e,
30711 +
            0xdb7a17e0dbcde4d1,
30712 +
            0xf8b28801f86acc5e,
30713 +
            0x3642d4cbecd13881,
30714 +
            0x40deb55e775f56a9,
30715 +
            0x8e2ee99463e4a276,
30716 +
            0x7790f78576f66e62,
30717 +
            0xb960ab4f624d9abd,
30718 +
            0xcffccadaf9c3f495,
30719 +
            0x010c9610ed78004a,
30720 +
            0x22c409f1cedf28c5,
30721 +
            0xec34553bda64dc1a,
30722 +
            0x9aa834ae41eab232,
30723 +
            0x54586864555146ed,
30724 +
            0xdd390b6c06a4e32c,
30725 +
            0x13c957a6121f17f3,
30726 +
            0x65553633899179db,
30727 +
            0xaba56af99d2a8d04,
30728 +
            0x886df518be8da58b,
30729 +
            0x469da9d2aa365154,
30730 +
            0x3001c84731b83f7c,
30731 +
            0xfef1948d2503cba3,
30732 +
            0xe86e6596ddfddb73,
30733 +
            0x269e395cc9462fac,
30734 +
            0x500258c952c84184,
30735 +
            0x9ef204034673b55b,
30736 +
            0xbd3a9be265d49dd4,
30737 +
            0x73cac728716f690b,
30738 +
            0x0556a6bdeae10723,
30739 +
            0xcba6fa77fe5af3fc,
30740 +
            0x42c7997fadaf563d,
30741 +
            0x8c37c5b5b914a2e2,
30742 +
            0xfaaba420229accca,
30743 +
            0x345bf8ea36213815,
30744 +
            0x1793670b1586109a,
30745 +
            0xd9633bc1013de445,
30746 +
            0xafff5a549ab38a6d,
30747 +
            0x610f069e8e087eb2,
30748 +
            0x98b1188f9b1ab2a6,
30749 +
            0x564144458fa14679,
30750 +
            0x20dd25d0142f2851,
30751 +
            0xee2d791a0094dc8e,
30752 +
            0xcde5e6fb2333f401,
30753 +
            0x0315ba31378800de,
30754 +
            0x7589dba4ac066ef6,
30755 +
            0xbb79876eb8bd9a29,
30756 +
            0x3218e466eb483fe8,
30757 +
            0xfce8b8acfff3cb37,
30758 +
            0x8a74d939647da51f,
30759 +
            0x448485f370c651c0,
30760 +
            0x674c1a125361794f,
30761 +
            0xa9bc46d847da8d90,
30762 +
            0xdf20274ddc54e3b8,
30763 +
            0x11d07b87c8ef1767,
30764 +
            0x09d09fa4503308d9,
30765 +
            0xc720c36e4488fc06,
30766 +
            0xb1bca2fbdf06922e,
30767 +
            0x7f4cfe31cbbd66f1,
30768 +
            0x5c8461d0e81a4e7e,
30769 +
            0x92743d1afca1baa1,
30770 +
            0xe4e85c8f672fd489,
30771 +
            0x2a18004573942056,
30772 +
            0xa379634d20618597,
30773 +
            0x6d893f8734da7148,
30774 +
            0x1b155e12af541f60,
30775 +
            0xd5e502d8bbefebbf,
30776 +
            0xf62d9d399848c330,
30777 +
            0x38ddc1f38cf337ef,
30778 +
            0x4e41a066177d59c7,
30779 +
            0x80b1fcac03c6ad18,
30780 +
            0x790fe2bd16d4610c,
30781 +
            0xb7ffbe77026f95d3,
30782 +
            0xc163dfe299e1fbfb,
30783 +
            0x0f9383288d5a0f24,
30784 +
            0x2c5b1cc9aefd27ab,
30785 +
            0xe2ab4003ba46d374,
30786 +
            0x9437219621c8bd5c,
30787 +
            0x5ac77d5c35734983,
30788 +
            0xd3a61e546686ec42,
30789 +
            0x1d56429e723d189d,
30790 +
            0x6bca230be9b376b5,
30791 +
            0xa53a7fc1fd08826a,
30792 +
            0x86f2e020deafaae5,
30793 +
            0x4802bceaca145e3a,
30794 +
            0x3e9edd7f519a3012,
30795 +
            0xf06e81b54521c4cd,
30796 +
            0x0e9f153860220f6e,
30797 +
            0xc06f49f27499fbb1,
30798 +
            0xb6f32867ef179599,
30799 +
            0x780374adfbac6146,
30800 +
            0x5bcbeb4cd80b49c9,
30801 +
            0x953bb786ccb0bd16,
30802 +
            0xe3a7d613573ed33e,
30803 +
            0x2d578ad9438527e1,
30804 +
            0xa436e9d110708220,
30805 +
            0x6ac6b51b04cb76ff,
30806 +
            0x1c5ad48e9f4518d7,
30807 +
            0xd2aa88448bfeec08,
30808 +
            0xf16217a5a859c487,
30809 +
            0x3f924b6fbce23058,
30810 +
            0x490e2afa276c5e70,
30811 +
            0x87fe763033d7aaaf,
30812 +
            0x7e40682126c566bb,
30813 +
            0xb0b034eb327e9264,
30814 +
            0xc62c557ea9f0fc4c,
30815 +
            0x08dc09b4bd4b0893,
30816 +
            0x2b1496559eec201c,
30817 +
            0xe5e4ca9f8a57d4c3,
30818 +
            0x9378ab0a11d9baeb,
30819 +
            0x5d88f7c005624e34,
30820 +
            0xd4e994c85697ebf5,
30821 +
            0x1a19c802422c1f2a,
30822 +
            0x6c85a997d9a27102,
30823 +
            0xa275f55dcd1985dd,
30824 +
            0x81bd6abceebead52,
30825 +
            0x4f4d3676fa05598d,
30826 +
            0x39d157e3618b37a5,
30827 +
            0xf7210b297530c37a,
30828 +
            0xef21ef0aedecdcc4,
30829 +
            0x21d1b3c0f957281b,
30830 +
            0x574dd25562d94633,
30831 +
            0x99bd8e9f7662b2ec,
30832 +
            0xba75117e55c59a63,
30833 +
            0x74854db4417e6ebc,
30834 +
            0x02192c21daf00094,
30835 +
            0xcce970ebce4bf44b,
30836 +
            0x458813e39dbe518a,
30837 +
            0x8b784f298905a555,
30838 +
            0xfde42ebc128bcb7d,
30839 +
            0x3314727606303fa2,
30840 +
            0x10dced972597172d,
30841 +
            0xde2cb15d312ce3f2,
30842 +
            0xa8b0d0c8aaa28dda,
30843 +
            0x66408c02be197905,
30844 +
            0x9ffe9213ab0bb511,
30845 +
            0x510eced9bfb041ce,
30846 +
            0x2792af4c243e2fe6,
30847 +
            0xe962f3863085db39,
30848 +
            0xcaaa6c671322f3b6,
30849 +
            0x045a30ad07990769,
30850 +
            0x72c651389c176941,
30851 +
            0xbc360df288ac9d9e,
30852 +
            0x35576efadb59385f,
30853 +
            0xfba73230cfe2cc80,
30854 +
            0x8d3b53a5546ca2a8,
30855 +
            0x43cb0f6f40d75677,
30856 +
            0x6003908e63707ef8,
30857 +
            0xaef3cc4477cb8a27,
30858 +
            0xd86fadd1ec45e40f,
30859 +
            0x169ff11bf8fe10d0,
30860 +
        ],
30861 +
        [
30862 +
            0x0000000000000000,
30863 +
            0x2387c75bccaf3ac5,
30864 +
            0x470f8eb7995e758a,
30865 +
            0x648849ec55f14f4f,
30866 +
            0x8e1f1d6f32bceb14,
30867 +
            0xad98da34fe13d1d1,
30868 +
            0xc91093d8abe29e9e,
30869 +
            0xea975483674da45b,
30870 +
            0x39b2be15c33ba561,
30871 +
            0x1a35794e0f949fa4,
30872 +
            0x7ebd30a25a65d0eb,
30873 +
            0x5d3af7f996caea2e,
30874 +
            0xb7ada37af1874e75,
30875 +
            0x942a64213d2874b0,
30876 +
            0xf0a22dcd68d93bff,
30877 +
            0xd325ea96a476013a,
30878 +
            0x73657c2b86774ac2,
30879 +
            0x50e2bb704ad87007,
30880 +
            0x346af29c1f293f48,
30881 +
            0x17ed35c7d386058d,
30882 +
            0xfd7a6144b4cba1d6,
30883 +
            0xdefda61f78649b13,
30884 +
            0xba75eff32d95d45c,
30885 +
            0x99f228a8e13aee99,
30886 +
            0x4ad7c23e454cefa3,
30887 +
            0x6950056589e3d566,
30888 +
            0x0dd84c89dc129a29,
30889 +
            0x2e5f8bd210bda0ec,
30890 +
            0xc4c8df5177f004b7,
30891 +
            0xe74f180abb5f3e72,
30892 +
            0x83c751e6eeae713d,
30893 +
            0xa04096bd22014bf8,
30894 +
            0xe6caf8570cee9584,
30895 +
            0xc54d3f0cc041af41,
30896 +
            0xa1c576e095b0e00e,
30897 +
            0x8242b1bb591fdacb,
30898 +
            0x68d5e5383e527e90,
30899 +
            0x4b522263f2fd4455,
30900 +
            0x2fda6b8fa70c0b1a,
30901 +
            0x0c5dacd46ba331df,
30902 +
            0xdf784642cfd530e5,
30903 +
            0xfcff8119037a0a20,
30904 +
            0x9877c8f5568b456f,
30905 +
            0xbbf00fae9a247faa,
30906 +
            0x51675b2dfd69dbf1,
30907 +
            0x72e09c7631c6e134,
30908 +
            0x1668d59a6437ae7b,
30909 +
            0x35ef12c1a89894be,
30910 +
            0x95af847c8a99df46,
30911 +
            0xb62843274636e583,
30912 +
            0xd2a00acb13c7aacc,
30913 +
            0xf127cd90df689009,
30914 +
            0x1bb09913b8253452,
30915 +
            0x38375e48748a0e97,
30916 +
            0x5cbf17a4217b41d8,
30917 +
            0x7f38d0ffedd47b1d,
30918 +
            0xac1d3a6949a27a27,
30919 +
            0x8f9afd32850d40e2,
30920 +
            0xeb12b4ded0fc0fad,
30921 +
            0xc89573851c533568,
30922 +
            0x220227067b1e9133,
30923 +
            0x0185e05db7b1abf6,
30924 +
            0x650da9b1e240e4b9,
30925 +
            0x468a6eea2eefde7c,
30926 +
            0xe8197465bf9f5841,
30927 +
            0xcb9eb33e73306284,
30928 +
            0xaf16fad226c12dcb,
30929 +
            0x8c913d89ea6e170e,
30930 +
            0x6606690a8d23b355,
30931 +
            0x4581ae51418c8990,
30932 +
            0x2109e7bd147dc6df,
30933 +
            0x028e20e6d8d2fc1a,
30934 +
            0xd1abca707ca4fd20,
30935 +
            0xf22c0d2bb00bc7e5,
30936 +
            0x96a444c7e5fa88aa,
30937 +
            0xb523839c2955b26f,
30938 +
            0x5fb4d71f4e181634,
30939 +
            0x7c33104482b72cf1,
30940 +
            0x18bb59a8d74663be,
30941 +
            0x3b3c9ef31be9597b,
30942 +
            0x9b7c084e39e81283,
30943 +
            0xb8fbcf15f5472846,
30944 +
            0xdc7386f9a0b66709,
30945 +
            0xfff441a26c195dcc,
30946 +
            0x156315210b54f997,
30947 +
            0x36e4d27ac7fbc352,
30948 +
            0x526c9b96920a8c1d,
30949 +
            0x71eb5ccd5ea5b6d8,
30950 +
            0xa2ceb65bfad3b7e2,
30951 +
            0x81497100367c8d27,
30952 +
            0xe5c138ec638dc268,
30953 +
            0xc646ffb7af22f8ad,
30954 +
            0x2cd1ab34c86f5cf6,
30955 +
            0x0f566c6f04c06633,
30956 +
            0x6bde25835131297c,
30957 +
            0x4859e2d89d9e13b9,
30958 +
            0x0ed38c32b371cdc5,
30959 +
            0x2d544b697fdef700,
30960 +
            0x49dc02852a2fb84f,
30961 +
            0x6a5bc5dee680828a,
30962 +
            0x80cc915d81cd26d1,
30963 +
            0xa34b56064d621c14,
30964 +
            0xc7c31fea1893535b,
30965 +
            0xe444d8b1d43c699e,
30966 +
            0x37613227704a68a4,
30967 +
            0x14e6f57cbce55261,
30968 +
            0x706ebc90e9141d2e,
30969 +
            0x53e97bcb25bb27eb,
30970 +
            0xb97e2f4842f683b0,
30971 +
            0x9af9e8138e59b975,
30972 +
            0xfe71a1ffdba8f63a,
30973 +
            0xddf666a41707ccff,
30974 +
            0x7db6f01935068707,
30975 +
            0x5e313742f9a9bdc2,
30976 +
            0x3ab97eaeac58f28d,
30977 +
            0x193eb9f560f7c848,
30978 +
            0xf3a9ed7607ba6c13,
30979 +
            0xd02e2a2dcb1556d6,
30980 +
            0xb4a663c19ee41999,
30981 +
            0x9721a49a524b235c,
30982 +
            0x44044e0cf63d2266,
30983 +
            0x678389573a9218a3,
30984 +
            0x030bc0bb6f6357ec,
30985 +
            0x208c07e0a3cc6d29,
30986 +
            0xca1b5363c481c972,
30987 +
            0xe99c9438082ef3b7,
30988 +
            0x8d14ddd45ddfbcf8,
30989 +
            0xae931a8f9170863d,
30990 +
            0xf5be6c00d97cc3cb,
30991 +
            0xd639ab5b15d3f90e,
30992 +
            0xb2b1e2b74022b641,
30993 +
            0x913625ec8c8d8c84,
30994 +
            0x7ba1716febc028df,
30995 +
            0x5826b634276f121a,
30996 +
            0x3caeffd8729e5d55,
30997 +
            0x1f293883be316790,
30998 +
            0xcc0cd2151a4766aa,
30999 +
            0xef8b154ed6e85c6f,
31000 +
            0x8b035ca283191320,
31001 +
            0xa8849bf94fb629e5,
31002 +
            0x4213cf7a28fb8dbe,
31003 +
            0x61940821e454b77b,
31004 +
            0x051c41cdb1a5f834,
31005 +
            0x269b86967d0ac2f1,
31006 +
            0x86db102b5f0b8909,
31007 +
            0xa55cd77093a4b3cc,
31008 +
            0xc1d49e9cc655fc83,
31009 +
            0xe25359c70afac646,
31010 +
            0x08c40d446db7621d,
31011 +
            0x2b43ca1fa11858d8,
31012 +
            0x4fcb83f3f4e91797,
31013 +
            0x6c4c44a838462d52,
31014 +
            0xbf69ae3e9c302c68,
31015 +
            0x9cee6965509f16ad,
31016 +
            0xf8662089056e59e2,
31017 +
            0xdbe1e7d2c9c16327,
31018 +
            0x3176b351ae8cc77c,
31019 +
            0x12f1740a6223fdb9,
31020 +
            0x76793de637d2b2f6,
31021 +
            0x55fefabdfb7d8833,
31022 +
            0x13749457d592564f,
31023 +
            0x30f3530c193d6c8a,
31024 +
            0x547b1ae04ccc23c5,
31025 +
            0x77fcddbb80631900,
31026 +
            0x9d6b8938e72ebd5b,
31027 +
            0xbeec4e632b81879e,
31028 +
            0xda64078f7e70c8d1,
31029 +
            0xf9e3c0d4b2dff214,
31030 +
            0x2ac62a4216a9f32e,
31031 +
            0x0941ed19da06c9eb,
31032 +
            0x6dc9a4f58ff786a4,
31033 +
            0x4e4e63ae4358bc61,
31034 +
            0xa4d9372d2415183a,
31035 +
            0x875ef076e8ba22ff,
31036 +
            0xe3d6b99abd4b6db0,
31037 +
            0xc0517ec171e45775,
31038 +
            0x6011e87c53e51c8d,
31039 +
            0x43962f279f4a2648,
31040 +
            0x271e66cbcabb6907,
31041 +
            0x0499a190061453c2,
31042 +
            0xee0ef5136159f799,
31043 +
            0xcd893248adf6cd5c,
31044 +
            0xa9017ba4f8078213,
31045 +
            0x8a86bcff34a8b8d6,
31046 +
            0x59a3566990deb9ec,
31047 +
            0x7a2491325c718329,
31048 +
            0x1eacd8de0980cc66,
31049 +
            0x3d2b1f85c52ff6a3,
31050 +
            0xd7bc4b06a26252f8,
31051 +
            0xf43b8c5d6ecd683d,
31052 +
            0x90b3c5b13b3c2772,
31053 +
            0xb33402eaf7931db7,
31054 +
            0x1da7186566e39b8a,
31055 +
            0x3e20df3eaa4ca14f,
31056 +
            0x5aa896d2ffbdee00,
31057 +
            0x792f51893312d4c5,
31058 +
            0x93b8050a545f709e,
31059 +
            0xb03fc25198f04a5b,
31060 +
            0xd4b78bbdcd010514,
31061 +
            0xf7304ce601ae3fd1,
31062 +
            0x2415a670a5d83eeb,
31063 +
            0x0792612b6977042e,
31064 +
            0x631a28c73c864b61,
31065 +
            0x409def9cf02971a4,
31066 +
            0xaa0abb1f9764d5ff,
31067 +
            0x898d7c445bcbef3a,
31068 +
            0xed0535a80e3aa075,
31069 +
            0xce82f2f3c2959ab0,
31070 +
            0x6ec2644ee094d148,
31071 +
            0x4d45a3152c3beb8d,
31072 +
            0x29cdeaf979caa4c2,
31073 +
            0x0a4a2da2b5659e07,
31074 +
            0xe0dd7921d2283a5c,
31075 +
            0xc35abe7a1e870099,
31076 +
            0xa7d2f7964b764fd6,
31077 +
            0x845530cd87d97513,
31078 +
            0x5770da5b23af7429,
31079 +
            0x74f71d00ef004eec,
31080 +
            0x107f54ecbaf101a3,
31081 +
            0x33f893b7765e3b66,
31082 +
            0xd96fc73411139f3d,
31083 +
            0xfae8006fddbca5f8,
31084 +
            0x9e604983884deab7,
31085 +
            0xbde78ed844e2d072,
31086 +
            0xfb6de0326a0d0e0e,
31087 +
            0xd8ea2769a6a234cb,
31088 +
            0xbc626e85f3537b84,
31089 +
            0x9fe5a9de3ffc4141,
31090 +
            0x7572fd5d58b1e51a,
31091 +
            0x56f53a06941edfdf,
31092 +
            0x327d73eac1ef9090,
31093 +
            0x11fab4b10d40aa55,
31094 +
            0xc2df5e27a936ab6f,
31095 +
            0xe158997c659991aa,
31096 +
            0x85d0d0903068dee5,
31097 +
            0xa65717cbfcc7e420,
31098 +
            0x4cc043489b8a407b,
31099 +
            0x6f47841357257abe,
31100 +
            0x0bcfcdff02d435f1,
31101 +
            0x28480aa4ce7b0f34,
31102 +
            0x88089c19ec7a44cc,
31103 +
            0xab8f5b4220d57e09,
31104 +
            0xcf0712ae75243146,
31105 +
            0xec80d5f5b98b0b83,
31106 +
            0x06178176dec6afd8,
31107 +
            0x2590462d1269951d,
31108 +
            0x41180fc14798da52,
31109 +
            0x629fc89a8b37e097,
31110 +
            0xb1ba220c2f41e1ad,
31111 +
            0x923de557e3eedb68,
31112 +
            0xf6b5acbbb61f9427,
31113 +
            0xd5326be07ab0aee2,
31114 +
            0x3fa53f631dfd0ab9,
31115 +
            0x1c22f838d152307c,
31116 +
            0x78aab1d484a37f33,
31117 +
            0x5b2d768f480c45f6,
31118 +
        ],
31119 +
        [
31120 +
            0x0000000000000000,
31121 +
            0xf3a8aeb8adb81c01,
31122 +
            0xc2ddd9bafd324b4b,
31123 +
            0x31757702508a574a,
31124 +
            0xa03737be5c26e5df,
31125 +
            0x539f9906f19ef9de,
31126 +
            0x62eaee04a114ae94,
31127 +
            0x914240bc0cacb295,
31128 +
            0x65e2ebb71e0fb8f7,
31129 +
            0x964a450fb3b7a4f6,
31130 +
            0xa73f320de33df3bc,
31131 +
            0x54979cb54e85efbd,
31132 +
            0xc5d5dc0942295d28,
31133 +
            0x367d72b1ef914129,
31134 +
            0x070805b3bf1b1663,
31135 +
            0xf4a0ab0b12a30a62,
31136 +
            0xcbc5d76e3c1f71ee,
31137 +
            0x386d79d691a76def,
31138 +
            0x09180ed4c12d3aa5,
31139 +
            0xfab0a06c6c9526a4,
31140 +
            0x6bf2e0d060399431,
31141 +
            0x985a4e68cd818830,
31142 +
            0xa92f396a9d0bdf7a,
31143 +
            0x5a8797d230b3c37b,
31144 +
            0xae273cd92210c919,
31145 +
            0x5d8f92618fa8d518,
31146 +
            0x6cfae563df228252,
31147 +
            0x9f524bdb729a9e53,
31148 +
            0x0e100b677e362cc6,
31149 +
            0xfdb8a5dfd38e30c7,
31150 +
            0xcccdd2dd8304678d,
31151 +
            0x3f657c652ebc7b8c,
31152 +
            0xb2072a17de7c9095,
31153 +
            0x41af84af73c48c94,
31154 +
            0x70daf3ad234edbde,
31155 +
            0x83725d158ef6c7df,
31156 +
            0x12301da9825a754a,
31157 +
            0xe198b3112fe2694b,
31158 +
            0xd0edc4137f683e01,
31159 +
            0x23456aabd2d02200,
31160 +
            0xd7e5c1a0c0732862,
31161 +
            0x244d6f186dcb3463,
31162 +
            0x1538181a3d416329,
31163 +
            0xe690b6a290f97f28,
31164 +
            0x77d2f61e9c55cdbd,
31165 +
            0x847a58a631edd1bc,
31166 +
            0xb50f2fa4616786f6,
31167 +
            0x46a7811cccdf9af7,
31168 +
            0x79c2fd79e263e17b,
31169 +
            0x8a6a53c14fdbfd7a,
31170 +
            0xbb1f24c31f51aa30,
31171 +
            0x48b78a7bb2e9b631,
31172 +
            0xd9f5cac7be4504a4,
31173 +
            0x2a5d647f13fd18a5,
31174 +
            0x1b28137d43774fef,
31175 +
            0xe880bdc5eecf53ee,
31176 +
            0x1c2016cefc6c598c,
31177 +
            0xef88b87651d4458d,
31178 +
            0xdefdcf74015e12c7,
31179 +
            0x2d5561ccace60ec6,
31180 +
            0xbc172170a04abc53,
31181 +
            0x4fbf8fc80df2a052,
31182 +
            0x7ecaf8ca5d78f718,
31183 +
            0x8d625672f0c0eb19,
31184 +
            0x4182d0e41abb5263,
31185 +
            0xb22a7e5cb7034e62,
31186 +
            0x835f095ee7891928,
31187 +
            0x70f7a7e64a310529,
31188 +
            0xe1b5e75a469db7bc,
31189 +
            0x121d49e2eb25abbd,
31190 +
            0x23683ee0bbaffcf7,
31191 +
            0xd0c090581617e0f6,
31192 +
            0x24603b5304b4ea94,
31193 +
            0xd7c895eba90cf695,
31194 +
            0xe6bde2e9f986a1df,
31195 +
            0x15154c51543ebdde,
31196 +
            0x84570ced58920f4b,
31197 +
            0x77ffa255f52a134a,
31198 +
            0x468ad557a5a04400,
31199 +
            0xb5227bef08185801,
31200 +
            0x8a47078a26a4238d,
31201 +
            0x79efa9328b1c3f8c,
31202 +
            0x489ade30db9668c6,
31203 +
            0xbb327088762e74c7,
31204 +
            0x2a7030347a82c652,
31205 +
            0xd9d89e8cd73ada53,
31206 +
            0xe8ade98e87b08d19,
31207 +
            0x1b0547362a089118,
31208 +
            0xefa5ec3d38ab9b7a,
31209 +
            0x1c0d42859513877b,
31210 +
            0x2d783587c599d031,
31211 +
            0xded09b3f6821cc30,
31212 +
            0x4f92db83648d7ea5,
31213 +
            0xbc3a753bc93562a4,
31214 +
            0x8d4f023999bf35ee,
31215 +
            0x7ee7ac81340729ef,
31216 +
            0xf385faf3c4c7c2f6,
31217 +
            0x002d544b697fdef7,
31218 +
            0x3158234939f589bd,
31219 +
            0xc2f08df1944d95bc,
31220 +
            0x53b2cd4d98e12729,
31221 +
            0xa01a63f535593b28,
31222 +
            0x916f14f765d36c62,
31223 +
            0x62c7ba4fc86b7063,
31224 +
            0x96671144dac87a01,
31225 +
            0x65cfbffc77706600,
31226 +
            0x54bac8fe27fa314a,
31227 +
            0xa71266468a422d4b,
31228 +
            0x365026fa86ee9fde,
31229 +
            0xc5f888422b5683df,
31230 +
            0xf48dff407bdcd495,
31231 +
            0x072551f8d664c894,
31232 +
            0x38402d9df8d8b318,
31233 +
            0xcbe883255560af19,
31234 +
            0xfa9df42705eaf853,
31235 +
            0x09355a9fa852e452,
31236 +
            0x98771a23a4fe56c7,
31237 +
            0x6bdfb49b09464ac6,
31238 +
            0x5aaac39959cc1d8c,
31239 +
            0xa9026d21f474018d,
31240 +
            0x5da2c62ae6d70bef,
31241 +
            0xae0a68924b6f17ee,
31242 +
            0x9f7f1f901be540a4,
31243 +
            0x6cd7b128b65d5ca5,
31244 +
            0xfd95f194baf1ee30,
31245 +
            0x0e3d5f2c1749f231,
31246 +
            0x3f48282e47c3a57b,
31247 +
            0xcce08696ea7bb97a,
31248 +
            0x8305a1c83576a4c6,
31249 +
            0x70ad0f7098ceb8c7,
31250 +
            0x41d87872c844ef8d,
31251 +
            0xb270d6ca65fcf38c,
31252 +
            0x2332967669504119,
31253 +
            0xd09a38cec4e85d18,
31254 +
            0xe1ef4fcc94620a52,
31255 +
            0x1247e17439da1653,
31256 +
            0xe6e74a7f2b791c31,
31257 +
            0x154fe4c786c10030,
31258 +
            0x243a93c5d64b577a,
31259 +
            0xd7923d7d7bf34b7b,
31260 +
            0x46d07dc1775ff9ee,
31261 +
            0xb578d379dae7e5ef,
31262 +
            0x840da47b8a6db2a5,
31263 +
            0x77a50ac327d5aea4,
31264 +
            0x48c076a60969d528,
31265 +
            0xbb68d81ea4d1c929,
31266 +
            0x8a1daf1cf45b9e63,
31267 +
            0x79b501a459e38262,
31268 +
            0xe8f74118554f30f7,
31269 +
            0x1b5fefa0f8f72cf6,
31270 +
            0x2a2a98a2a87d7bbc,
31271 +
            0xd982361a05c567bd,
31272 +
            0x2d229d1117666ddf,
31273 +
            0xde8a33a9bade71de,
31274 +
            0xefff44abea542694,
31275 +
            0x1c57ea1347ec3a95,
31276 +
            0x8d15aaaf4b408800,
31277 +
            0x7ebd0417e6f89401,
31278 +
            0x4fc87315b672c34b,
31279 +
            0xbc60ddad1bcadf4a,
31280 +
            0x31028bdfeb0a3453,
31281 +
            0xc2aa256746b22852,
31282 +
            0xf3df526516387f18,
31283 +
            0x0077fcddbb806319,
31284 +
            0x9135bc61b72cd18c,
31285 +
            0x629d12d91a94cd8d,
31286 +
            0x53e865db4a1e9ac7,
31287 +
            0xa040cb63e7a686c6,
31288 +
            0x54e06068f5058ca4,
31289 +
            0xa748ced058bd90a5,
31290 +
            0x963db9d20837c7ef,
31291 +
            0x6595176aa58fdbee,
31292 +
            0xf4d757d6a923697b,
31293 +
            0x077ff96e049b757a,
31294 +
            0x360a8e6c54112230,
31295 +
            0xc5a220d4f9a93e31,
31296 +
            0xfac75cb1d71545bd,
31297 +
            0x096ff2097aad59bc,
31298 +
            0x381a850b2a270ef6,
31299 +
            0xcbb22bb3879f12f7,
31300 +
            0x5af06b0f8b33a062,
31301 +
            0xa958c5b7268bbc63,
31302 +
            0x982db2b57601eb29,
31303 +
            0x6b851c0ddbb9f728,
31304 +
            0x9f25b706c91afd4a,
31305 +
            0x6c8d19be64a2e14b,
31306 +
            0x5df86ebc3428b601,
31307 +
            0xae50c0049990aa00,
31308 +
            0x3f1280b8953c1895,
31309 +
            0xccba2e0038840494,
31310 +
            0xfdcf5902680e53de,
31311 +
            0x0e67f7bac5b64fdf,
31312 +
            0xc287712c2fcdf6a5,
31313 +
            0x312fdf948275eaa4,
31314 +
            0x005aa896d2ffbdee,
31315 +
            0xf3f2062e7f47a1ef,
31316 +
            0x62b0469273eb137a,
31317 +
            0x9118e82ade530f7b,
31318 +
            0xa06d9f288ed95831,
31319 +
            0x53c5319023614430,
31320 +
            0xa7659a9b31c24e52,
31321 +
            0x54cd34239c7a5253,
31322 +
            0x65b84321ccf00519,
31323 +
            0x9610ed9961481918,
31324 +
            0x0752ad256de4ab8d,
31325 +
            0xf4fa039dc05cb78c,
31326 +
            0xc58f749f90d6e0c6,
31327 +
            0x3627da273d6efcc7,
31328 +
            0x0942a64213d2874b,
31329 +
            0xfaea08fabe6a9b4a,
31330 +
            0xcb9f7ff8eee0cc00,
31331 +
            0x3837d1404358d001,
31332 +
            0xa97591fc4ff46294,
31333 +
            0x5add3f44e24c7e95,
31334 +
            0x6ba84846b2c629df,
31335 +
            0x9800e6fe1f7e35de,
31336 +
            0x6ca04df50ddd3fbc,
31337 +
            0x9f08e34da06523bd,
31338 +
            0xae7d944ff0ef74f7,
31339 +
            0x5dd53af75d5768f6,
31340 +
            0xcc977a4b51fbda63,
31341 +
            0x3f3fd4f3fc43c662,
31342 +
            0x0e4aa3f1acc99128,
31343 +
            0xfde20d4901718d29,
31344 +
            0x70805b3bf1b16630,
31345 +
            0x8328f5835c097a31,
31346 +
            0xb25d82810c832d7b,
31347 +
            0x41f52c39a13b317a,
31348 +
            0xd0b76c85ad9783ef,
31349 +
            0x231fc23d002f9fee,
31350 +
            0x126ab53f50a5c8a4,
31351 +
            0xe1c21b87fd1dd4a5,
31352 +
            0x1562b08cefbedec7,
31353 +
            0xe6ca1e344206c2c6,
31354 +
            0xd7bf6936128c958c,
31355 +
            0x2417c78ebf34898d,
31356 +
            0xb5558732b3983b18,
31357 +
            0x46fd298a1e202719,
31358 +
            0x77885e884eaa7053,
31359 +
            0x8420f030e3126c52,
31360 +
            0xbb458c55cdae17de,
31361 +
            0x48ed22ed60160bdf,
31362 +
            0x799855ef309c5c95,
31363 +
            0x8a30fb579d244094,
31364 +
            0x1b72bbeb9188f201,
31365 +
            0xe8da15533c30ee00,
31366 +
            0xd9af62516cbab94a,
31367 +
            0x2a07cce9c102a54b,
31368 +
            0xdea767e2d3a1af29,
31369 +
            0x2d0fc95a7e19b328,
31370 +
            0x1c7abe582e93e462,
31371 +
            0xefd210e0832bf863,
31372 +
            0x7e90505c8f874af6,
31373 +
            0x8d38fee4223f56f7,
31374 +
            0xbc4d89e672b501bd,
31375 +
            0x4fe5275edf0d1dbc,
31376 +
        ],
31377 +
        [
31378 +
            0x0000000000000000,
31379 +
            0x08fa400c2e39e9f5,
31380 +
            0x11f480185c73d3ea,
31381 +
            0x190ec014724a3a1f,
31382 +
            0x23e90030b8e7a7d4,
31383 +
            0x2b13403c96de4e21,
31384 +
            0x321d8028e494743e,
31385 +
            0x3ae7c024caad9dcb,
31386 +
            0x47d2006171cf4fa8,
31387 +
            0x4f28406d5ff6a65d,
31388 +
            0x562680792dbc9c42,
31389 +
            0x5edcc075038575b7,
31390 +
            0x643b0051c928e87c,
31391 +
            0x6cc1405de7110189,
31392 +
            0x75cf8049955b3b96,
31393 +
            0x7d35c045bb62d263,
31394 +
            0x8fa400c2e39e9f50,
31395 +
            0x875e40cecda776a5,
31396 +
            0x9e5080dabfed4cba,
31397 +
            0x96aac0d691d4a54f,
31398 +
            0xac4d00f25b793884,
31399 +
            0xa4b740fe7540d171,
31400 +
            0xbdb980ea070aeb6e,
31401 +
            0xb543c0e62933029b,
31402 +
            0xc87600a39251d0f8,
31403 +
            0xc08c40afbc68390d,
31404 +
            0xd98280bbce220312,
31405 +
            0xd178c0b7e01beae7,
31406 +
            0xeb9f00932ab6772c,
31407 +
            0xe365409f048f9ed9,
31408 +
            0xfa6b808b76c5a4c6,
31409 +
            0xf291c08758fc4d33,
31410 +
            0x3ac4854e617f4de9,
31411 +
            0x323ec5424f46a41c,
31412 +
            0x2b3005563d0c9e03,
31413 +
            0x23ca455a133577f6,
31414 +
            0x192d857ed998ea3d,
31415 +
            0x11d7c572f7a103c8,
31416 +
            0x08d9056685eb39d7,
31417 +
            0x0023456aabd2d022,
31418 +
            0x7d16852f10b00241,
31419 +
            0x75ecc5233e89ebb4,
31420 +
            0x6ce205374cc3d1ab,
31421 +
            0x6418453b62fa385e,
31422 +
            0x5eff851fa857a595,
31423 +
            0x5605c513866e4c60,
31424 +
            0x4f0b0507f424767f,
31425 +
            0x47f1450bda1d9f8a,
31426 +
            0xb560858c82e1d2b9,
31427 +
            0xbd9ac580acd83b4c,
31428 +
            0xa4940594de920153,
31429 +
            0xac6e4598f0abe8a6,
31430 +
            0x968985bc3a06756d,
31431 +
            0x9e73c5b0143f9c98,
31432 +
            0x877d05a46675a687,
31433 +
            0x8f8745a8484c4f72,
31434 +
            0xf2b285edf32e9d11,
31435 +
            0xfa48c5e1dd1774e4,
31436 +
            0xe34605f5af5d4efb,
31437 +
            0xebbc45f98164a70e,
31438 +
            0xd15b85dd4bc93ac5,
31439 +
            0xd9a1c5d165f0d330,
31440 +
            0xc0af05c517bae92f,
31441 +
            0xc85545c9398300da,
31442 +
            0x75890a9cc2fe9bd2,
31443 +
            0x7d734a90ecc77227,
31444 +
            0x647d8a849e8d4838,
31445 +
            0x6c87ca88b0b4a1cd,
31446 +
            0x56600aac7a193c06,
31447 +
            0x5e9a4aa05420d5f3,
31448 +
            0x47948ab4266aefec,
31449 +
            0x4f6ecab808530619,
31450 +
            0x325b0afdb331d47a,
31451 +
            0x3aa14af19d083d8f,
31452 +
            0x23af8ae5ef420790,
31453 +
            0x2b55cae9c17bee65,
31454 +
            0x11b20acd0bd673ae,
31455 +
            0x19484ac125ef9a5b,
31456 +
            0x00468ad557a5a044,
31457 +
            0x08bccad9799c49b1,
31458 +
            0xfa2d0a5e21600482,
31459 +
            0xf2d74a520f59ed77,
31460 +
            0xebd98a467d13d768,
31461 +
            0xe323ca4a532a3e9d,
31462 +
            0xd9c40a6e9987a356,
31463 +
            0xd13e4a62b7be4aa3,
31464 +
            0xc8308a76c5f470bc,
31465 +
            0xc0caca7aebcd9949,
31466 +
            0xbdff0a3f50af4b2a,
31467 +
            0xb5054a337e96a2df,
31468 +
            0xac0b8a270cdc98c0,
31469 +
            0xa4f1ca2b22e57135,
31470 +
            0x9e160a0fe848ecfe,
31471 +
            0x96ec4a03c671050b,
31472 +
            0x8fe28a17b43b3f14,
31473 +
            0x8718ca1b9a02d6e1,
31474 +
            0x4f4d8fd2a381d63b,
31475 +
            0x47b7cfde8db83fce,
31476 +
            0x5eb90fcafff205d1,
31477 +
            0x56434fc6d1cbec24,
31478 +
            0x6ca48fe21b6671ef,
31479 +
            0x645ecfee355f981a,
31480 +
            0x7d500ffa4715a205,
31481 +
            0x75aa4ff6692c4bf0,
31482 +
            0x089f8fb3d24e9993,
31483 +
            0x0065cfbffc777066,
31484 +
            0x196b0fab8e3d4a79,
31485 +
            0x11914fa7a004a38c,
31486 +
            0x2b768f836aa93e47,
31487 +
            0x238ccf8f4490d7b2,
31488 +
            0x3a820f9b36daedad,
31489 +
            0x32784f9718e30458,
31490 +
            0xc0e98f10401f496b,
31491 +
            0xc813cf1c6e26a09e,
31492 +
            0xd11d0f081c6c9a81,
31493 +
            0xd9e74f0432557374,
31494 +
            0xe3008f20f8f8eebf,
31495 +
            0xebfacf2cd6c1074a,
31496 +
            0xf2f40f38a48b3d55,
31497 +
            0xfa0e4f348ab2d4a0,
31498 +
            0x873b8f7131d006c3,
31499 +
            0x8fc1cf7d1fe9ef36,
31500 +
            0x96cf0f696da3d529,
31501 +
            0x9e354f65439a3cdc,
31502 +
            0xa4d28f418937a117,
31503 +
            0xac28cf4da70e48e2,
31504 +
            0xb5260f59d54472fd,
31505 +
            0xbddc4f55fb7d9b08,
31506 +
            0xeb12153985fd37a4,
31507 +
            0xe3e85535abc4de51,
31508 +
            0xfae69521d98ee44e,
31509 +
            0xf21cd52df7b70dbb,
31510 +
            0xc8fb15093d1a9070,
31511 +
            0xc001550513237985,
31512 +
            0xd90f95116169439a,
31513 +
            0xd1f5d51d4f50aa6f,
31514 +
            0xacc01558f432780c,
31515 +
            0xa43a5554da0b91f9,
31516 +
            0xbd349540a841abe6,
31517 +
            0xb5ced54c86784213,
31518 +
            0x8f2915684cd5dfd8,
31519 +
            0x87d3556462ec362d,
31520 +
            0x9edd957010a60c32,
31521 +
            0x9627d57c3e9fe5c7,
31522 +
            0x64b615fb6663a8f4,
31523 +
            0x6c4c55f7485a4101,
31524 +
            0x754295e33a107b1e,
31525 +
            0x7db8d5ef142992eb,
31526 +
            0x475f15cbde840f20,
31527 +
            0x4fa555c7f0bde6d5,
31528 +
            0x56ab95d382f7dcca,
31529 +
            0x5e51d5dfacce353f,
31530 +
            0x2364159a17ace75c,
31531 +
            0x2b9e559639950ea9,
31532 +
            0x329095824bdf34b6,
31533 +
            0x3a6ad58e65e6dd43,
31534 +
            0x008d15aaaf4b4088,
31535 +
            0x087755a68172a97d,
31536 +
            0x117995b2f3389362,
31537 +
            0x1983d5bedd017a97,
31538 +
            0xd1d69077e4827a4d,
31539 +
            0xd92cd07bcabb93b8,
31540 +
            0xc022106fb8f1a9a7,
31541 +
            0xc8d8506396c84052,
31542 +
            0xf23f90475c65dd99,
31543 +
            0xfac5d04b725c346c,
31544 +
            0xe3cb105f00160e73,
31545 +
            0xeb3150532e2fe786,
31546 +
            0x96049016954d35e5,
31547 +
            0x9efed01abb74dc10,
31548 +
            0x87f0100ec93ee60f,
31549 +
            0x8f0a5002e7070ffa,
31550 +
            0xb5ed90262daa9231,
31551 +
            0xbd17d02a03937bc4,
31552 +
            0xa419103e71d941db,
31553 +
            0xace350325fe0a82e,
31554 +
            0x5e7290b5071ce51d,
31555 +
            0x5688d0b929250ce8,
31556 +
            0x4f8610ad5b6f36f7,
31557 +
            0x477c50a17556df02,
31558 +
            0x7d9b9085bffb42c9,
31559 +
            0x7561d08991c2ab3c,
31560 +
            0x6c6f109de3889123,
31561 +
            0x64955091cdb178d6,
31562 +
            0x19a090d476d3aab5,
31563 +
            0x115ad0d858ea4340,
31564 +
            0x085410cc2aa0795f,
31565 +
            0x00ae50c0049990aa,
31566 +
            0x3a4990e4ce340d61,
31567 +
            0x32b3d0e8e00de494,
31568 +
            0x2bbd10fc9247de8b,
31569 +
            0x234750f0bc7e377e,
31570 +
            0x9e9b1fa54703ac76,
31571 +
            0x96615fa9693a4583,
31572 +
            0x8f6f9fbd1b707f9c,
31573 +
            0x8795dfb135499669,
31574 +
            0xbd721f95ffe40ba2,
31575 +
            0xb5885f99d1dde257,
31576 +
            0xac869f8da397d848,
31577 +
            0xa47cdf818dae31bd,
31578 +
            0xd9491fc436cce3de,
31579 +
            0xd1b35fc818f50a2b,
31580 +
            0xc8bd9fdc6abf3034,
31581 +
            0xc047dfd04486d9c1,
31582 +
            0xfaa01ff48e2b440a,
31583 +
            0xf25a5ff8a012adff,
31584 +
            0xeb549fecd25897e0,
31585 +
            0xe3aedfe0fc617e15,
31586 +
            0x113f1f67a49d3326,
31587 +
            0x19c55f6b8aa4dad3,
31588 +
            0x00cb9f7ff8eee0cc,
31589 +
            0x0831df73d6d70939,
31590 +
            0x32d61f571c7a94f2,
31591 +
            0x3a2c5f5b32437d07,
31592 +
            0x23229f4f40094718,
31593 +
            0x2bd8df436e30aeed,
31594 +
            0x56ed1f06d5527c8e,
31595 +
            0x5e175f0afb6b957b,
31596 +
            0x47199f1e8921af64,
31597 +
            0x4fe3df12a7184691,
31598 +
            0x75041f366db5db5a,
31599 +
            0x7dfe5f3a438c32af,
31600 +
            0x64f09f2e31c608b0,
31601 +
            0x6c0adf221fffe145,
31602 +
            0xa45f9aeb267ce19f,
31603 +
            0xaca5dae70845086a,
31604 +
            0xb5ab1af37a0f3275,
31605 +
            0xbd515aff5436db80,
31606 +
            0x87b69adb9e9b464b,
31607 +
            0x8f4cdad7b0a2afbe,
31608 +
            0x96421ac3c2e895a1,
31609 +
            0x9eb85acfecd17c54,
31610 +
            0xe38d9a8a57b3ae37,
31611 +
            0xeb77da86798a47c2,
31612 +
            0xf2791a920bc07ddd,
31613 +
            0xfa835a9e25f99428,
31614 +
            0xc0649abaef5409e3,
31615 +
            0xc89edab6c16de016,
31616 +
            0xd1901aa2b327da09,
31617 +
            0xd96a5aae9d1e33fc,
31618 +
            0x2bfb9a29c5e27ecf,
31619 +
            0x2301da25ebdb973a,
31620 +
            0x3a0f1a319991ad25,
31621 +
            0x32f55a3db7a844d0,
31622 +
            0x08129a197d05d91b,
31623 +
            0x00e8da15533c30ee,
31624 +
            0x19e61a0121760af1,
31625 +
            0x111c5a0d0f4fe304,
31626 +
            0x6c299a48b42d3167,
31627 +
            0x64d3da449a14d892,
31628 +
            0x7ddd1a50e85ee28d,
31629 +
            0x75275a5cc6670b78,
31630 +
            0x4fc09a780cca96b3,
31631 +
            0x473ada7422f37f46,
31632 +
            0x5e341a6050b94559,
31633 +
            0x56ce5a6c7e80acac,
31634 +
        ],
31635 +
        [
31636 +
            0x0000000000000000,
31637 +
            0x57acc98fe7d7da2b,
31638 +
            0xaf59931fcfafb456,
31639 +
            0xf8f55a9028786e7d,
31640 +
            0x7b3fa2f4391d1be5,
31641 +
            0x2c936b7bdecac1ce,
31642 +
            0xd46631ebf6b2afb3,
31643 +
            0x83caf86411657598,
31644 +
            0xf67f45e8723a37ca,
31645 +
            0xa1d38c6795edede1,
31646 +
            0x5926d6f7bd95839c,
31647 +
            0x0e8a1f785a4259b7,
31648 +
            0x8d40e71c4b272c2f,
31649 +
            0xdaec2e93acf0f604,
31650 +
            0x2219740384889879,
31651 +
            0x75b5bd8c635f4252,
31652 +
            0xc9720f1b42361cdd,
31653 +
            0x9edec694a5e1c6f6,
31654 +
            0x662b9c048d99a88b,
31655 +
            0x3187558b6a4e72a0,
31656 +
            0xb24dadef7b2b0738,
31657 +
            0xe5e164609cfcdd13,
31658 +
            0x1d143ef0b484b36e,
31659 +
            0x4ab8f77f53536945,
31660 +
            0x3f0d4af3300c2b17,
31661 +
            0x68a1837cd7dbf13c,
31662 +
            0x9054d9ecffa39f41,
31663 +
            0xc7f810631874456a,
31664 +
            0x4432e807091130f2,
31665 +
            0x139e2188eec6ead9,
31666 +
            0xeb6b7b18c6be84a4,
31667 +
            0xbcc7b29721695e8f,
31668 +
            0xb7689afd222e4af3,
31669 +
            0xe0c45372c5f990d8,
31670 +
            0x183109e2ed81fea5,
31671 +
            0x4f9dc06d0a56248e,
31672 +
            0xcc5738091b335116,
31673 +
            0x9bfbf186fce48b3d,
31674 +
            0x630eab16d49ce540,
31675 +
            0x34a26299334b3f6b,
31676 +
            0x4117df1550147d39,
31677 +
            0x16bb169ab7c3a712,
31678 +
            0xee4e4c0a9fbbc96f,
31679 +
            0xb9e28585786c1344,
31680 +
            0x3a287de1690966dc,
31681 +
            0x6d84b46e8edebcf7,
31682 +
            0x9571eefea6a6d28a,
31683 +
            0xc2dd2771417108a1,
31684 +
            0x7e1a95e66018562e,
31685 +
            0x29b65c6987cf8c05,
31686 +
            0xd14306f9afb7e278,
31687 +
            0x86efcf7648603853,
31688 +
            0x0525371259054dcb,
31689 +
            0x5289fe9dbed297e0,
31690 +
            0xaa7ca40d96aaf99d,
31691 +
            0xfdd06d82717d23b6,
31692 +
            0x8865d00e122261e4,
31693 +
            0xdfc91981f5f5bbcf,
31694 +
            0x273c4311dd8dd5b2,
31695 +
            0x70908a9e3a5a0f99,
31696 +
            0xf35a72fa2b3f7a01,
31697 +
            0xa4f6bb75cce8a02a,
31698 +
            0x5c03e1e5e490ce57,
31699 +
            0x0baf286a0347147c,
31700 +
            0x4b5db131e21ee6af,
31701 +
            0x1cf178be05c93c84,
31702 +
            0xe404222e2db152f9,
31703 +
            0xb3a8eba1ca6688d2,
31704 +
            0x306213c5db03fd4a,
31705 +
            0x67ceda4a3cd42761,
31706 +
            0x9f3b80da14ac491c,
31707 +
            0xc8974955f37b9337,
31708 +
            0xbd22f4d99024d165,
31709 +
            0xea8e3d5677f30b4e,
31710 +
            0x127b67c65f8b6533,
31711 +
            0x45d7ae49b85cbf18,
31712 +
            0xc61d562da939ca80,
31713 +
            0x91b19fa24eee10ab,
31714 +
            0x6944c53266967ed6,
31715 +
            0x3ee80cbd8141a4fd,
31716 +
            0x822fbe2aa028fa72,
31717 +
            0xd58377a547ff2059,
31718 +
            0x2d762d356f874e24,
31719 +
            0x7adae4ba8850940f,
31720 +
            0xf9101cde9935e197,
31721 +
            0xaebcd5517ee23bbc,
31722 +
            0x56498fc1569a55c1,
31723 +
            0x01e5464eb14d8fea,
31724 +
            0x7450fbc2d212cdb8,
31725 +
            0x23fc324d35c51793,
31726 +
            0xdb0968dd1dbd79ee,
31727 +
            0x8ca5a152fa6aa3c5,
31728 +
            0x0f6f5936eb0fd65d,
31729 +
            0x58c390b90cd80c76,
31730 +
            0xa036ca2924a0620b,
31731 +
            0xf79a03a6c377b820,
31732 +
            0xfc352bccc030ac5c,
31733 +
            0xab99e24327e77677,
31734 +
            0x536cb8d30f9f180a,
31735 +
            0x04c0715ce848c221,
31736 +
            0x870a8938f92db7b9,
31737 +
            0xd0a640b71efa6d92,
31738 +
            0x28531a27368203ef,
31739 +
            0x7fffd3a8d155d9c4,
31740 +
            0x0a4a6e24b20a9b96,
31741 +
            0x5de6a7ab55dd41bd,
31742 +
            0xa513fd3b7da52fc0,
31743 +
            0xf2bf34b49a72f5eb,
31744 +
            0x7175ccd08b178073,
31745 +
            0x26d9055f6cc05a58,
31746 +
            0xde2c5fcf44b83425,
31747 +
            0x89809640a36fee0e,
31748 +
            0x354724d78206b081,
31749 +
            0x62ebed5865d16aaa,
31750 +
            0x9a1eb7c84da904d7,
31751 +
            0xcdb27e47aa7edefc,
31752 +
            0x4e788623bb1bab64,
31753 +
            0x19d44fac5ccc714f,
31754 +
            0xe121153c74b41f32,
31755 +
            0xb68ddcb39363c519,
31756 +
            0xc338613ff03c874b,
31757 +
            0x9494a8b017eb5d60,
31758 +
            0x6c61f2203f93331d,
31759 +
            0x3bcd3bafd844e936,
31760 +
            0xb807c3cbc9219cae,
31761 +
            0xefab0a442ef64685,
31762 +
            0x175e50d4068e28f8,
31763 +
            0x40f2995be159f2d3,
31764 +
            0x96bb6263c43dcd5e,
31765 +
            0xc117abec23ea1775,
31766 +
            0x39e2f17c0b927908,
31767 +
            0x6e4e38f3ec45a323,
31768 +
            0xed84c097fd20d6bb,
31769 +
            0xba2809181af70c90,
31770 +
            0x42dd5388328f62ed,
31771 +
            0x15719a07d558b8c6,
31772 +
            0x60c4278bb607fa94,
31773 +
            0x3768ee0451d020bf,
31774 +
            0xcf9db49479a84ec2,
31775 +
            0x98317d1b9e7f94e9,
31776 +
            0x1bfb857f8f1ae171,
31777 +
            0x4c574cf068cd3b5a,
31778 +
            0xb4a2166040b55527,
31779 +
            0xe30edfefa7628f0c,
31780 +
            0x5fc96d78860bd183,
31781 +
            0x0865a4f761dc0ba8,
31782 +
            0xf090fe6749a465d5,
31783 +
            0xa73c37e8ae73bffe,
31784 +
            0x24f6cf8cbf16ca66,
31785 +
            0x735a060358c1104d,
31786 +
            0x8baf5c9370b97e30,
31787 +
            0xdc03951c976ea41b,
31788 +
            0xa9b62890f431e649,
31789 +
            0xfe1ae11f13e63c62,
31790 +
            0x06efbb8f3b9e521f,
31791 +
            0x51437200dc498834,
31792 +
            0xd2898a64cd2cfdac,
31793 +
            0x852543eb2afb2787,
31794 +
            0x7dd0197b028349fa,
31795 +
            0x2a7cd0f4e55493d1,
31796 +
            0x21d3f89ee61387ad,
31797 +
            0x767f311101c45d86,
31798 +
            0x8e8a6b8129bc33fb,
31799 +
            0xd926a20ece6be9d0,
31800 +
            0x5aec5a6adf0e9c48,
31801 +
            0x0d4093e538d94663,
31802 +
            0xf5b5c97510a1281e,
31803 +
            0xa21900faf776f235,
31804 +
            0xd7acbd769429b067,
31805 +
            0x800074f973fe6a4c,
31806 +
            0x78f52e695b860431,
31807 +
            0x2f59e7e6bc51de1a,
31808 +
            0xac931f82ad34ab82,
31809 +
            0xfb3fd60d4ae371a9,
31810 +
            0x03ca8c9d629b1fd4,
31811 +
            0x54664512854cc5ff,
31812 +
            0xe8a1f785a4259b70,
31813 +
            0xbf0d3e0a43f2415b,
31814 +
            0x47f8649a6b8a2f26,
31815 +
            0x1054ad158c5df50d,
31816 +
            0x939e55719d388095,
31817 +
            0xc4329cfe7aef5abe,
31818 +
            0x3cc7c66e529734c3,
31819 +
            0x6b6b0fe1b540eee8,
31820 +
            0x1edeb26dd61facba,
31821 +
            0x49727be231c87691,
31822 +
            0xb187217219b018ec,
31823 +
            0xe62be8fdfe67c2c7,
31824 +
            0x65e11099ef02b75f,
31825 +
            0x324dd91608d56d74,
31826 +
            0xcab8838620ad0309,
31827 +
            0x9d144a09c77ad922,
31828 +
            0xdde6d35226232bf1,
31829 +
            0x8a4a1addc1f4f1da,
31830 +
            0x72bf404de98c9fa7,
31831 +
            0x251389c20e5b458c,
31832 +
            0xa6d971a61f3e3014,
31833 +
            0xf175b829f8e9ea3f,
31834 +
            0x0980e2b9d0918442,
31835 +
            0x5e2c2b3637465e69,
31836 +
            0x2b9996ba54191c3b,
31837 +
            0x7c355f35b3cec610,
31838 +
            0x84c005a59bb6a86d,
31839 +
            0xd36ccc2a7c617246,
31840 +
            0x50a6344e6d0407de,
31841 +
            0x070afdc18ad3ddf5,
31842 +
            0xffffa751a2abb388,
31843 +
            0xa8536ede457c69a3,
31844 +
            0x1494dc496415372c,
31845 +
            0x433815c683c2ed07,
31846 +
            0xbbcd4f56abba837a,
31847 +
            0xec6186d94c6d5951,
31848 +
            0x6fab7ebd5d082cc9,
31849 +
            0x3807b732badff6e2,
31850 +
            0xc0f2eda292a7989f,
31851 +
            0x975e242d757042b4,
31852 +
            0xe2eb99a1162f00e6,
31853 +
            0xb547502ef1f8dacd,
31854 +
            0x4db20abed980b4b0,
31855 +
            0x1a1ec3313e576e9b,
31856 +
            0x99d43b552f321b03,
31857 +
            0xce78f2dac8e5c128,
31858 +
            0x368da84ae09daf55,
31859 +
            0x612161c5074a757e,
31860 +
            0x6a8e49af040d6102,
31861 +
            0x3d228020e3dabb29,
31862 +
            0xc5d7dab0cba2d554,
31863 +
            0x927b133f2c750f7f,
31864 +
            0x11b1eb5b3d107ae7,
31865 +
            0x461d22d4dac7a0cc,
31866 +
            0xbee87844f2bfceb1,
31867 +
            0xe944b1cb1568149a,
31868 +
            0x9cf10c47763756c8,
31869 +
            0xcb5dc5c891e08ce3,
31870 +
            0x33a89f58b998e29e,
31871 +
            0x640456d75e4f38b5,
31872 +
            0xe7ceaeb34f2a4d2d,
31873 +
            0xb062673ca8fd9706,
31874 +
            0x48973dac8085f97b,
31875 +
            0x1f3bf42367522350,
31876 +
            0xa3fc46b4463b7ddf,
31877 +
            0xf4508f3ba1eca7f4,
31878 +
            0x0ca5d5ab8994c989,
31879 +
            0x5b091c246e4313a2,
31880 +
            0xd8c3e4407f26663a,
31881 +
            0x8f6f2dcf98f1bc11,
31882 +
            0x779a775fb089d26c,
31883 +
            0x2036bed0575e0847,
31884 +
            0x5583035c34014a15,
31885 +
            0x022fcad3d3d6903e,
31886 +
            0xfada9043fbaefe43,
31887 +
            0xad7659cc1c792468,
31888 +
            0x2ebca1a80d1c51f0,
31889 +
            0x79106827eacb8bdb,
31890 +
            0x81e532b7c2b3e5a6,
31891 +
            0xd649fb3825643f8d,
31892 +
        ],
31893 +
        [
31894 +
            0x0000000000000000,
31895 +
            0x7cb340a3f431e4c0,
31896 +
            0xf9668147e863c980,
31897 +
            0x85d5c1e41c522d40,
31898 +
            0xd74186447685e049,
31899 +
            0xabf2c6e782b40489,
31900 +
            0x2e2707039ee629c9,
31901 +
            0x529447a06ad7cd09,
31902 +
            0x8b0f88434b49b3db,
31903 +
            0xf7bcc8e0bf78571b,
31904 +
            0x72690904a32a7a5b,
31905 +
            0x0eda49a7571b9e9b,
31906 +
            0x5c4e0e073dcc5392,
31907 +
            0x20fd4ea4c9fdb752,
31908 +
            0xa5288f40d5af9a12,
31909 +
            0xd99bcfe3219e7ed2,
31910 +
            0x3393944d30d114ff,
31911 +
            0x4f20d4eec4e0f03f,
31912 +
            0xcaf5150ad8b2dd7f,
31913 +
            0xb64655a92c8339bf,
31914 +
            0xe4d212094654f4b6,
31915 +
            0x986152aab2651076,
31916 +
            0x1db4934eae373d36,
31917 +
            0x6107d3ed5a06d9f6,
31918 +
            0xb89c1c0e7b98a724,
31919 +
            0xc42f5cad8fa943e4,
31920 +
            0x41fa9d4993fb6ea4,
31921 +
            0x3d49ddea67ca8a64,
31922 +
            0x6fdd9a4a0d1d476d,
31923 +
            0x136edae9f92ca3ad,
31924 +
            0x96bb1b0de57e8eed,
31925 +
            0xea085bae114f6a2d,
31926 +
            0x6727289a61a229fe,
31927 +
            0x1b9468399593cd3e,
31928 +
            0x9e41a9dd89c1e07e,
31929 +
            0xe2f2e97e7df004be,
31930 +
            0xb066aede1727c9b7,
31931 +
            0xccd5ee7de3162d77,
31932 +
            0x49002f99ff440037,
31933 +
            0x35b36f3a0b75e4f7,
31934 +
            0xec28a0d92aeb9a25,
31935 +
            0x909be07adeda7ee5,
31936 +
            0x154e219ec28853a5,
31937 +
            0x69fd613d36b9b765,
31938 +
            0x3b69269d5c6e7a6c,
31939 +
            0x47da663ea85f9eac,
31940 +
            0xc20fa7dab40db3ec,
31941 +
            0xbebce779403c572c,
31942 +
            0x54b4bcd751733d01,
31943 +
            0x2807fc74a542d9c1,
31944 +
            0xadd23d90b910f481,
31945 +
            0xd1617d334d211041,
31946 +
            0x83f53a9327f6dd48,
31947 +
            0xff467a30d3c73988,
31948 +
            0x7a93bbd4cf9514c8,
31949 +
            0x0620fb773ba4f008,
31950 +
            0xdfbb34941a3a8eda,
31951 +
            0xa3087437ee0b6a1a,
31952 +
            0x26ddb5d3f259475a,
31953 +
            0x5a6ef5700668a39a,
31954 +
            0x08fab2d06cbf6e93,
31955 +
            0x7449f273988e8a53,
31956 +
            0xf19c339784dca713,
31957 +
            0x8d2f733470ed43d3,
31958 +
            0xce4e5134c34453fc,
31959 +
            0xb2fd11973775b73c,
31960 +
            0x3728d0732b279a7c,
31961 +
            0x4b9b90d0df167ebc,
31962 +
            0x190fd770b5c1b3b5,
31963 +
            0x65bc97d341f05775,
31964 +
            0xe06956375da27a35,
31965 +
            0x9cda1694a9939ef5,
31966 +
            0x4541d977880de027,
31967 +
            0x39f299d47c3c04e7,
31968 +
            0xbc275830606e29a7,
31969 +
            0xc0941893945fcd67,
31970 +
            0x92005f33fe88006e,
31971 +
            0xeeb31f900ab9e4ae,
31972 +
            0x6b66de7416ebc9ee,
31973 +
            0x17d59ed7e2da2d2e,
31974 +
            0xfdddc579f3954703,
31975 +
            0x816e85da07a4a3c3,
31976 +
            0x04bb443e1bf68e83,
31977 +
            0x7808049defc76a43,
31978 +
            0x2a9c433d8510a74a,
31979 +
            0x562f039e7121438a,
31980 +
            0xd3fac27a6d736eca,
31981 +
            0xaf4982d999428a0a,
31982 +
            0x76d24d3ab8dcf4d8,
31983 +
            0x0a610d994ced1018,
31984 +
            0x8fb4cc7d50bf3d58,
31985 +
            0xf3078cdea48ed998,
31986 +
            0xa193cb7ece591491,
31987 +
            0xdd208bdd3a68f051,
31988 +
            0x58f54a39263add11,
31989 +
            0x24460a9ad20b39d1,
31990 +
            0xa96979aea2e67a02,
31991 +
            0xd5da390d56d79ec2,
31992 +
            0x500ff8e94a85b382,
31993 +
            0x2cbcb84abeb45742,
31994 +
            0x7e28ffead4639a4b,
31995 +
            0x029bbf4920527e8b,
31996 +
            0x874e7ead3c0053cb,
31997 +
            0xfbfd3e0ec831b70b,
31998 +
            0x2266f1ede9afc9d9,
31999 +
            0x5ed5b14e1d9e2d19,
32000 +
            0xdb0070aa01cc0059,
32001 +
            0xa7b33009f5fde499,
32002 +
            0xf52777a99f2a2990,
32003 +
            0x8994370a6b1bcd50,
32004 +
            0x0c41f6ee7749e010,
32005 +
            0x70f2b64d837804d0,
32006 +
            0x9afaede392376efd,
32007 +
            0xe649ad4066068a3d,
32008 +
            0x639c6ca47a54a77d,
32009 +
            0x1f2f2c078e6543bd,
32010 +
            0x4dbb6ba7e4b28eb4,
32011 +
            0x31082b0410836a74,
32012 +
            0xb4ddeae00cd14734,
32013 +
            0xc86eaa43f8e0a3f4,
32014 +
            0x11f565a0d97edd26,
32015 +
            0x6d4625032d4f39e6,
32016 +
            0xe893e4e7311d14a6,
32017 +
            0x9420a444c52cf066,
32018 +
            0xc6b4e3e4affb3d6f,
32019 +
            0xba07a3475bcad9af,
32020 +
            0x3fd262a34798f4ef,
32021 +
            0x43612200b3a9102f,
32022 +
            0xb91026a220cad4b1,
32023 +
            0xc5a36601d4fb3071,
32024 +
            0x4076a7e5c8a91d31,
32025 +
            0x3cc5e7463c98f9f1,
32026 +
            0x6e51a0e6564f34f8,
32027 +
            0x12e2e045a27ed038,
32028 +
            0x973721a1be2cfd78,
32029 +
            0xeb8461024a1d19b8,
32030 +
            0x321faee16b83676a,
32031 +
            0x4eacee429fb283aa,
32032 +
            0xcb792fa683e0aeea,
32033 +
            0xb7ca6f0577d14a2a,
32034 +
            0xe55e28a51d068723,
32035 +
            0x99ed6806e93763e3,
32036 +
            0x1c38a9e2f5654ea3,
32037 +
            0x608be9410154aa63,
32038 +
            0x8a83b2ef101bc04e,
32039 +
            0xf630f24ce42a248e,
32040 +
            0x73e533a8f87809ce,
32041 +
            0x0f56730b0c49ed0e,
32042 +
            0x5dc234ab669e2007,
32043 +
            0x2171740892afc4c7,
32044 +
            0xa4a4b5ec8efde987,
32045 +
            0xd817f54f7acc0d47,
32046 +
            0x018c3aac5b527395,
32047 +
            0x7d3f7a0faf639755,
32048 +
            0xf8eabbebb331ba15,
32049 +
            0x8459fb4847005ed5,
32050 +
            0xd6cdbce82dd793dc,
32051 +
            0xaa7efc4bd9e6771c,
32052 +
            0x2fab3dafc5b45a5c,
32053 +
            0x53187d0c3185be9c,
32054 +
            0xde370e384168fd4f,
32055 +
            0xa2844e9bb559198f,
32056 +
            0x27518f7fa90b34cf,
32057 +
            0x5be2cfdc5d3ad00f,
32058 +
            0x0976887c37ed1d06,
32059 +
            0x75c5c8dfc3dcf9c6,
32060 +
            0xf010093bdf8ed486,
32061 +
            0x8ca349982bbf3046,
32062 +
            0x5538867b0a214e94,
32063 +
            0x298bc6d8fe10aa54,
32064 +
            0xac5e073ce2428714,
32065 +
            0xd0ed479f167363d4,
32066 +
            0x8279003f7ca4aedd,
32067 +
            0xfeca409c88954a1d,
32068 +
            0x7b1f817894c7675d,
32069 +
            0x07acc1db60f6839d,
32070 +
            0xeda49a7571b9e9b0,
32071 +
            0x9117dad685880d70,
32072 +
            0x14c21b3299da2030,
32073 +
            0x68715b916debc4f0,
32074 +
            0x3ae51c31073c09f9,
32075 +
            0x46565c92f30ded39,
32076 +
            0xc3839d76ef5fc079,
32077 +
            0xbf30ddd51b6e24b9,
32078 +
            0x66ab12363af05a6b,
32079 +
            0x1a185295cec1beab,
32080 +
            0x9fcd9371d29393eb,
32081 +
            0xe37ed3d226a2772b,
32082 +
            0xb1ea94724c75ba22,
32083 +
            0xcd59d4d1b8445ee2,
32084 +
            0x488c1535a41673a2,
32085 +
            0x343f559650279762,
32086 +
            0x775e7796e38e874d,
32087 +
            0x0bed373517bf638d,
32088 +
            0x8e38f6d10bed4ecd,
32089 +
            0xf28bb672ffdcaa0d,
32090 +
            0xa01ff1d2950b6704,
32091 +
            0xdcacb171613a83c4,
32092 +
            0x597970957d68ae84,
32093 +
            0x25ca303689594a44,
32094 +
            0xfc51ffd5a8c73496,
32095 +
            0x80e2bf765cf6d056,
32096 +
            0x05377e9240a4fd16,
32097 +
            0x79843e31b49519d6,
32098 +
            0x2b107991de42d4df,
32099 +
            0x57a339322a73301f,
32100 +
            0xd276f8d636211d5f,
32101 +
            0xaec5b875c210f99f,
32102 +
            0x44cde3dbd35f93b2,
32103 +
            0x387ea378276e7772,
32104 +
            0xbdab629c3b3c5a32,
32105 +
            0xc118223fcf0dbef2,
32106 +
            0x938c659fa5da73fb,
32107 +
            0xef3f253c51eb973b,
32108 +
            0x6aeae4d84db9ba7b,
32109 +
            0x1659a47bb9885ebb,
32110 +
            0xcfc26b9898162069,
32111 +
            0xb3712b3b6c27c4a9,
32112 +
            0x36a4eadf7075e9e9,
32113 +
            0x4a17aa7c84440d29,
32114 +
            0x1883eddcee93c020,
32115 +
            0x6430ad7f1aa224e0,
32116 +
            0xe1e56c9b06f009a0,
32117 +
            0x9d562c38f2c1ed60,
32118 +
            0x10795f0c822caeb3,
32119 +
            0x6cca1faf761d4a73,
32120 +
            0xe91fde4b6a4f6733,
32121 +
            0x95ac9ee89e7e83f3,
32122 +
            0xc738d948f4a94efa,
32123 +
            0xbb8b99eb0098aa3a,
32124 +
            0x3e5e580f1cca877a,
32125 +
            0x42ed18ace8fb63ba,
32126 +
            0x9b76d74fc9651d68,
32127 +
            0xe7c597ec3d54f9a8,
32128 +
            0x621056082106d4e8,
32129 +
            0x1ea316abd5373028,
32130 +
            0x4c37510bbfe0fd21,
32131 +
            0x308411a84bd119e1,
32132 +
            0xb551d04c578334a1,
32133 +
            0xc9e290efa3b2d061,
32134 +
            0x23eacb41b2fdba4c,
32135 +
            0x5f598be246cc5e8c,
32136 +
            0xda8c4a065a9e73cc,
32137 +
            0xa63f0aa5aeaf970c,
32138 +
            0xf4ab4d05c4785a05,
32139 +
            0x88180da63049bec5,
32140 +
            0x0dcdcc422c1b9385,
32141 +
            0x717e8ce1d82a7745,
32142 +
            0xa8e54302f9b40997,
32143 +
            0xd45603a10d85ed57,
32144 +
            0x5183c24511d7c017,
32145 +
            0x2d3082e6e5e624d7,
32146 +
            0x7fa4c5468f31e9de,
32147 +
            0x031785e57b000d1e,
32148 +
            0x86c244016752205e,
32149 +
            0xfa7104a29363c49e,
32150 +
        ],
32151 +
        [
32152 +
            0x0000000000000000,
32153 +
            0xdbd9d01799459492,
32154 +
            0x923f24e494c95a6d,
32155 +
            0x49e6f4f30d8cceff,
32156 +
            0x01f2cd028fd0c793,
32157 +
            0xda2b1d1516955301,
32158 +
            0x93cde9e61b199dfe,
32159 +
            0x481439f1825c096c,
32160 +
            0x03e59a051fa18f26,
32161 +
            0xd83c4a1286e41bb4,
32162 +
            0x91dabee18b68d54b,
32163 +
            0x4a036ef6122d41d9,
32164 +
            0x02175707907148b5,
32165 +
            0xd9ce87100934dc27,
32166 +
            0x902873e304b812d8,
32167 +
            0x4bf1a3f49dfd864a,
32168 +
            0x07cb340a3f431e4c,
32169 +
            0xdc12e41da6068ade,
32170 +
            0x95f410eeab8a4421,
32171 +
            0x4e2dc0f932cfd0b3,
32172 +
            0x0639f908b093d9df,
32173 +
            0xdde0291f29d64d4d,
32174 +
            0x9406ddec245a83b2,
32175 +
            0x4fdf0dfbbd1f1720,
32176 +
            0x042eae0f20e2916a,
32177 +
            0xdff77e18b9a705f8,
32178 +
            0x96118aebb42bcb07,
32179 +
            0x4dc85afc2d6e5f95,
32180 +
            0x05dc630daf3256f9,
32181 +
            0xde05b31a3677c26b,
32182 +
            0x97e347e93bfb0c94,
32183 +
            0x4c3a97fea2be9806,
32184 +
            0x0f9668147e863c98,
32185 +
            0xd44fb803e7c3a80a,
32186 +
            0x9da94cf0ea4f66f5,
32187 +
            0x46709ce7730af267,
32188 +
            0x0e64a516f156fb0b,
32189 +
            0xd5bd750168136f99,
32190 +
            0x9c5b81f2659fa166,
32191 +
            0x478251e5fcda35f4,
32192 +
            0x0c73f2116127b3be,
32193 +
            0xd7aa2206f862272c,
32194 +
            0x9e4cd6f5f5eee9d3,
32195 +
            0x459506e26cab7d41,
32196 +
            0x0d813f13eef7742d,
32197 +
            0xd658ef0477b2e0bf,
32198 +
            0x9fbe1bf77a3e2e40,
32199 +
            0x4467cbe0e37bbad2,
32200 +
            0x085d5c1e41c522d4,
32201 +
            0xd3848c09d880b646,
32202 +
            0x9a6278fad50c78b9,
32203 +
            0x41bba8ed4c49ec2b,
32204 +
            0x09af911cce15e547,
32205 +
            0xd276410b575071d5,
32206 +
            0x9b90b5f85adcbf2a,
32207 +
            0x404965efc3992bb8,
32208 +
            0x0bb8c61b5e64adf2,
32209 +
            0xd061160cc7213960,
32210 +
            0x9987e2ffcaadf79f,
32211 +
            0x425e32e853e8630d,
32212 +
            0x0a4a0b19d1b46a61,
32213 +
            0xd193db0e48f1fef3,
32214 +
            0x98752ffd457d300c,
32215 +
            0x43acffeadc38a49e,
32216 +
            0x1f2cd028fd0c7930,
32217 +
            0xc4f5003f6449eda2,
32218 +
            0x8d13f4cc69c5235d,
32219 +
            0x56ca24dbf080b7cf,
32220 +
            0x1ede1d2a72dcbea3,
32221 +
            0xc507cd3deb992a31,
32222 +
            0x8ce139cee615e4ce,
32223 +
            0x5738e9d97f50705c,
32224 +
            0x1cc94a2de2adf616,
32225 +
            0xc7109a3a7be86284,
32226 +
            0x8ef66ec97664ac7b,
32227 +
            0x552fbedeef2138e9,
32228 +
            0x1d3b872f6d7d3185,
32229 +
            0xc6e25738f438a517,
32230 +
            0x8f04a3cbf9b46be8,
32231 +
            0x54dd73dc60f1ff7a,
32232 +
            0x18e7e422c24f677c,
32233 +
            0xc33e34355b0af3ee,
32234 +
            0x8ad8c0c656863d11,
32235 +
            0x510110d1cfc3a983,
32236 +
            0x191529204d9fa0ef,
32237 +
            0xc2ccf937d4da347d,
32238 +
            0x8b2a0dc4d956fa82,
32239 +
            0x50f3ddd340136e10,
32240 +
            0x1b027e27ddeee85a,
32241 +
            0xc0dbae3044ab7cc8,
32242 +
            0x893d5ac34927b237,
32243 +
            0x52e48ad4d06226a5,
32244 +
            0x1af0b325523e2fc9,
32245 +
            0xc1296332cb7bbb5b,
32246 +
            0x88cf97c1c6f775a4,
32247 +
            0x531647d65fb2e136,
32248 +
            0x10bab83c838a45a8,
32249 +
            0xcb63682b1acfd13a,
32250 +
            0x82859cd817431fc5,
32251 +
            0x595c4ccf8e068b57,
32252 +
            0x1148753e0c5a823b,
32253 +
            0xca91a529951f16a9,
32254 +
            0x837751da9893d856,
32255 +
            0x58ae81cd01d64cc4,
32256 +
            0x135f22399c2bca8e,
32257 +
            0xc886f22e056e5e1c,
32258 +
            0x816006dd08e290e3,
32259 +
            0x5ab9d6ca91a70471,
32260 +
            0x12adef3b13fb0d1d,
32261 +
            0xc9743f2c8abe998f,
32262 +
            0x8092cbdf87325770,
32263 +
            0x5b4b1bc81e77c3e2,
32264 +
            0x17718c36bcc95be4,
32265 +
            0xcca85c21258ccf76,
32266 +
            0x854ea8d228000189,
32267 +
            0x5e9778c5b145951b,
32268 +
            0x1683413433199c77,
32269 +
            0xcd5a9123aa5c08e5,
32270 +
            0x84bc65d0a7d0c61a,
32271 +
            0x5f65b5c73e955288,
32272 +
            0x14941633a368d4c2,
32273 +
            0xcf4dc6243a2d4050,
32274 +
            0x86ab32d737a18eaf,
32275 +
            0x5d72e2c0aee41a3d,
32276 +
            0x1566db312cb81351,
32277 +
            0xcebf0b26b5fd87c3,
32278 +
            0x8759ffd5b871493c,
32279 +
            0x5c802fc22134ddae,
32280 +
            0x3e59a051fa18f260,
32281 +
            0xe5807046635d66f2,
32282 +
            0xac6684b56ed1a80d,
32283 +
            0x77bf54a2f7943c9f,
32284 +
            0x3fab6d5375c835f3,
32285 +
            0xe472bd44ec8da161,
32286 +
            0xad9449b7e1016f9e,
32287 +
            0x764d99a07844fb0c,
32288 +
            0x3dbc3a54e5b97d46,
32289 +
            0xe665ea437cfce9d4,
32290 +
            0xaf831eb07170272b,
32291 +
            0x745acea7e835b3b9,
32292 +
            0x3c4ef7566a69bad5,
32293 +
            0xe7972741f32c2e47,
32294 +
            0xae71d3b2fea0e0b8,
32295 +
            0x75a803a567e5742a,
32296 +
            0x3992945bc55bec2c,
32297 +
            0xe24b444c5c1e78be,
32298 +
            0xabadb0bf5192b641,
32299 +
            0x707460a8c8d722d3,
32300 +
            0x386059594a8b2bbf,
32301 +
            0xe3b9894ed3cebf2d,
32302 +
            0xaa5f7dbdde4271d2,
32303 +
            0x7186adaa4707e540,
32304 +
            0x3a770e5edafa630a,
32305 +
            0xe1aede4943bff798,
32306 +
            0xa8482aba4e333967,
32307 +
            0x7391faadd776adf5,
32308 +
            0x3b85c35c552aa499,
32309 +
            0xe05c134bcc6f300b,
32310 +
            0xa9bae7b8c1e3fef4,
32311 +
            0x726337af58a66a66,
32312 +
            0x31cfc845849ecef8,
32313 +
            0xea1618521ddb5a6a,
32314 +
            0xa3f0eca110579495,
32315 +
            0x78293cb689120007,
32316 +
            0x303d05470b4e096b,
32317 +
            0xebe4d550920b9df9,
32318 +
            0xa20221a39f875306,
32319 +
            0x79dbf1b406c2c794,
32320 +
            0x322a52409b3f41de,
32321 +
            0xe9f38257027ad54c,
32322 +
            0xa01576a40ff61bb3,
32323 +
            0x7bcca6b396b38f21,
32324 +
            0x33d89f4214ef864d,
32325 +
            0xe8014f558daa12df,
32326 +
            0xa1e7bba68026dc20,
32327 +
            0x7a3e6bb1196348b2,
32328 +
            0x3604fc4fbbddd0b4,
32329 +
            0xeddd2c5822984426,
32330 +
            0xa43bd8ab2f148ad9,
32331 +
            0x7fe208bcb6511e4b,
32332 +
            0x37f6314d340d1727,
32333 +
            0xec2fe15aad4883b5,
32334 +
            0xa5c915a9a0c44d4a,
32335 +
            0x7e10c5be3981d9d8,
32336 +
            0x35e1664aa47c5f92,
32337 +
            0xee38b65d3d39cb00,
32338 +
            0xa7de42ae30b505ff,
32339 +
            0x7c0792b9a9f0916d,
32340 +
            0x3413ab482bac9801,
32341 +
            0xefca7b5fb2e90c93,
32342 +
            0xa62c8facbf65c26c,
32343 +
            0x7df55fbb262056fe,
32344 +
            0x2175707907148b50,
32345 +
            0xfaaca06e9e511fc2,
32346 +
            0xb34a549d93ddd13d,
32347 +
            0x6893848a0a9845af,
32348 +
            0x2087bd7b88c44cc3,
32349 +
            0xfb5e6d6c1181d851,
32350 +
            0xb2b8999f1c0d16ae,
32351 +
            0x696149888548823c,
32352 +
            0x2290ea7c18b50476,
32353 +
            0xf9493a6b81f090e4,
32354 +
            0xb0afce988c7c5e1b,
32355 +
            0x6b761e8f1539ca89,
32356 +
            0x2362277e9765c3e5,
32357 +
            0xf8bbf7690e205777,
32358 +
            0xb15d039a03ac9988,
32359 +
            0x6a84d38d9ae90d1a,
32360 +
            0x26be44733857951c,
32361 +
            0xfd679464a112018e,
32362 +
            0xb4816097ac9ecf71,
32363 +
            0x6f58b08035db5be3,
32364 +
            0x274c8971b787528f,
32365 +
            0xfc9559662ec2c61d,
32366 +
            0xb573ad95234e08e2,
32367 +
            0x6eaa7d82ba0b9c70,
32368 +
            0x255bde7627f61a3a,
32369 +
            0xfe820e61beb38ea8,
32370 +
            0xb764fa92b33f4057,
32371 +
            0x6cbd2a852a7ad4c5,
32372 +
            0x24a91374a826dda9,
32373 +
            0xff70c3633163493b,
32374 +
            0xb69637903cef87c4,
32375 +
            0x6d4fe787a5aa1356,
32376 +
            0x2ee3186d7992b7c8,
32377 +
            0xf53ac87ae0d7235a,
32378 +
            0xbcdc3c89ed5beda5,
32379 +
            0x6705ec9e741e7937,
32380 +
            0x2f11d56ff642705b,
32381 +
            0xf4c805786f07e4c9,
32382 +
            0xbd2ef18b628b2a36,
32383 +
            0x66f7219cfbcebea4,
32384 +
            0x2d068268663338ee,
32385 +
            0xf6df527fff76ac7c,
32386 +
            0xbf39a68cf2fa6283,
32387 +
            0x64e0769b6bbff611,
32388 +
            0x2cf44f6ae9e3ff7d,
32389 +
            0xf72d9f7d70a66bef,
32390 +
            0xbecb6b8e7d2aa510,
32391 +
            0x6512bb99e46f3182,
32392 +
            0x29282c6746d1a984,
32393 +
            0xf2f1fc70df943d16,
32394 +
            0xbb170883d218f3e9,
32395 +
            0x60ced8944b5d677b,
32396 +
            0x28dae165c9016e17,
32397 +
            0xf30331725044fa85,
32398 +
            0xbae5c5815dc8347a,
32399 +
            0x613c1596c48da0e8,
32400 +
            0x2acdb662597026a2,
32401 +
            0xf1146675c035b230,
32402 +
            0xb8f29286cdb97ccf,
32403 +
            0x632b429154fce85d,
32404 +
            0x2b3f7b60d6a0e131,
32405 +
            0xf0e6ab774fe575a3,
32406 +
            0xb9005f844269bb5c,
32407 +
            0x62d98f93db2c2fce,
32408 +
        ],
32409 +
        [
32410 +
            0x0000000000000000,
32411 +
            0x0290c0d980d5c172,
32412 +
            0x052181b301ab82e4,
32413 +
            0x07b1416a817e4396,
32414 +
            0x0a430366035705c8,
32415 +
            0x08d3c3bf8382c4ba,
32416 +
            0x0f6282d502fc872c,
32417 +
            0x0df2420c8229465e,
32418 +
            0x148606cc06ae0b90,
32419 +
            0x1616c615867bcae2,
32420 +
            0x11a7877f07058974,
32421 +
            0x133747a687d04806,
32422 +
            0x1ec505aa05f90e58,
32423 +
            0x1c55c573852ccf2a,
32424 +
            0x1be4841904528cbc,
32425 +
            0x197444c084874dce,
32426 +
            0x290c0d980d5c1720,
32427 +
            0x2b9ccd418d89d652,
32428 +
            0x2c2d8c2b0cf795c4,
32429 +
            0x2ebd4cf28c2254b6,
32430 +
            0x234f0efe0e0b12e8,
32431 +
            0x21dfce278eded39a,
32432 +
            0x266e8f4d0fa0900c,
32433 +
            0x24fe4f948f75517e,
32434 +
            0x3d8a0b540bf21cb0,
32435 +
            0x3f1acb8d8b27ddc2,
32436 +
            0x38ab8ae70a599e54,
32437 +
            0x3a3b4a3e8a8c5f26,
32438 +
            0x37c9083208a51978,
32439 +
            0x3559c8eb8870d80a,
32440 +
            0x32e88981090e9b9c,
32441 +
            0x3078495889db5aee,
32442 +
            0x52181b301ab82e40,
32443 +
            0x5088dbe99a6def32,
32444 +
            0x57399a831b13aca4,
32445 +
            0x55a95a5a9bc66dd6,
32446 +
            0x585b185619ef2b88,
32447 +
            0x5acbd88f993aeafa,
32448 +
            0x5d7a99e51844a96c,
32449 +
            0x5fea593c9891681e,
32450 +
            0x469e1dfc1c1625d0,
32451 +
            0x440edd259cc3e4a2,
32452 +
            0x43bf9c4f1dbda734,
32453 +
            0x412f5c969d686646,
32454 +
            0x4cdd1e9a1f412018,
32455 +
            0x4e4dde439f94e16a,
32456 +
            0x49fc9f291eeaa2fc,
32457 +
            0x4b6c5ff09e3f638e,
32458 +
            0x7b1416a817e43960,
32459 +
            0x7984d6719731f812,
32460 +
            0x7e35971b164fbb84,
32461 +
            0x7ca557c2969a7af6,
32462 +
            0x715715ce14b33ca8,
32463 +
            0x73c7d5179466fdda,
32464 +
            0x7476947d1518be4c,
32465 +
            0x76e654a495cd7f3e,
32466 +
            0x6f921064114a32f0,
32467 +
            0x6d02d0bd919ff382,
32468 +
            0x6ab391d710e1b014,
32469 +
            0x6823510e90347166,
32470 +
            0x65d11302121d3738,
32471 +
            0x6741d3db92c8f64a,
32472 +
            0x60f092b113b6b5dc,
32473 +
            0x62605268936374ae,
32474 +
            0xa430366035705c80,
32475 +
            0xa6a0f6b9b5a59df2,
32476 +
            0xa111b7d334dbde64,
32477 +
            0xa381770ab40e1f16,
32478 +
            0xae73350636275948,
32479 +
            0xace3f5dfb6f2983a,
32480 +
            0xab52b4b5378cdbac,
32481 +
            0xa9c2746cb7591ade,
32482 +
            0xb0b630ac33de5710,
32483 +
            0xb226f075b30b9662,
32484 +
            0xb597b11f3275d5f4,
32485 +
            0xb70771c6b2a01486,
32486 +
            0xbaf533ca308952d8,
32487 +
            0xb865f313b05c93aa,
32488 +
            0xbfd4b2793122d03c,
32489 +
            0xbd4472a0b1f7114e,
32490 +
            0x8d3c3bf8382c4ba0,
32491 +
            0x8facfb21b8f98ad2,
32492 +
            0x881dba4b3987c944,
32493 +
            0x8a8d7a92b9520836,
32494 +
            0x877f389e3b7b4e68,
32495 +
            0x85eff847bbae8f1a,
32496 +
            0x825eb92d3ad0cc8c,
32497 +
            0x80ce79f4ba050dfe,
32498 +
            0x99ba3d343e824030,
32499 +
            0x9b2afdedbe578142,
32500 +
            0x9c9bbc873f29c2d4,
32501 +
            0x9e0b7c5ebffc03a6,
32502 +
            0x93f93e523dd545f8,
32503 +
            0x9169fe8bbd00848a,
32504 +
            0x96d8bfe13c7ec71c,
32505 +
            0x94487f38bcab066e,
32506 +
            0xf6282d502fc872c0,
32507 +
            0xf4b8ed89af1db3b2,
32508 +
            0xf309ace32e63f024,
32509 +
            0xf1996c3aaeb63156,
32510 +
            0xfc6b2e362c9f7708,
32511 +
            0xfefbeeefac4ab67a,
32512 +
            0xf94aaf852d34f5ec,
32513 +
            0xfbda6f5cade1349e,
32514 +
            0xe2ae2b9c29667950,
32515 +
            0xe03eeb45a9b3b822,
32516 +
            0xe78faa2f28cdfbb4,
32517 +
            0xe51f6af6a8183ac6,
32518 +
            0xe8ed28fa2a317c98,
32519 +
            0xea7de823aae4bdea,
32520 +
            0xedcca9492b9afe7c,
32521 +
            0xef5c6990ab4f3f0e,
32522 +
            0xdf2420c8229465e0,
32523 +
            0xddb4e011a241a492,
32524 +
            0xda05a17b233fe704,
32525 +
            0xd89561a2a3ea2676,
32526 +
            0xd56723ae21c36028,
32527 +
            0xd7f7e377a116a15a,
32528 +
            0xd046a21d2068e2cc,
32529 +
            0xd2d662c4a0bd23be,
32530 +
            0xcba22604243a6e70,
32531 +
            0xc932e6dda4efaf02,
32532 +
            0xce83a7b72591ec94,
32533 +
            0xcc13676ea5442de6,
32534 +
            0xc1e12562276d6bb8,
32535 +
            0xc371e5bba7b8aaca,
32536 +
            0xc4c0a4d126c6e95c,
32537 +
            0xc6506408a613282e,
32538 +
            0x6dece80bcca2ca49,
32539 +
            0x6f7c28d24c770b3b,
32540 +
            0x68cd69b8cd0948ad,
32541 +
            0x6a5da9614ddc89df,
32542 +
            0x67afeb6dcff5cf81,
32543 +
            0x653f2bb44f200ef3,
32544 +
            0x628e6adece5e4d65,
32545 +
            0x601eaa074e8b8c17,
32546 +
            0x796aeec7ca0cc1d9,
32547 +
            0x7bfa2e1e4ad900ab,
32548 +
            0x7c4b6f74cba7433d,
32549 +
            0x7edbafad4b72824f,
32550 +
            0x7329eda1c95bc411,
32551 +
            0x71b92d78498e0563,
32552 +
            0x76086c12c8f046f5,
32553 +
            0x7498accb48258787,
32554 +
            0x44e0e593c1fedd69,
32555 +
            0x4670254a412b1c1b,
32556 +
            0x41c16420c0555f8d,
32557 +
            0x4351a4f940809eff,
32558 +
            0x4ea3e6f5c2a9d8a1,
32559 +
            0x4c33262c427c19d3,
32560 +
            0x4b826746c3025a45,
32561 +
            0x4912a79f43d79b37,
32562 +
            0x5066e35fc750d6f9,
32563 +
            0x52f623864785178b,
32564 +
            0x554762ecc6fb541d,
32565 +
            0x57d7a235462e956f,
32566 +
            0x5a25e039c407d331,
32567 +
            0x58b520e044d21243,
32568 +
            0x5f04618ac5ac51d5,
32569 +
            0x5d94a153457990a7,
32570 +
            0x3ff4f33bd61ae409,
32571 +
            0x3d6433e256cf257b,
32572 +
            0x3ad57288d7b166ed,
32573 +
            0x3845b2515764a79f,
32574 +
            0x35b7f05dd54de1c1,
32575 +
            0x37273084559820b3,
32576 +
            0x309671eed4e66325,
32577 +
            0x3206b1375433a257,
32578 +
            0x2b72f5f7d0b4ef99,
32579 +
            0x29e2352e50612eeb,
32580 +
            0x2e537444d11f6d7d,
32581 +
            0x2cc3b49d51caac0f,
32582 +
            0x2131f691d3e3ea51,
32583 +
            0x23a1364853362b23,
32584 +
            0x24107722d24868b5,
32585 +
            0x2680b7fb529da9c7,
32586 +
            0x16f8fea3db46f329,
32587 +
            0x14683e7a5b93325b,
32588 +
            0x13d97f10daed71cd,
32589 +
            0x1149bfc95a38b0bf,
32590 +
            0x1cbbfdc5d811f6e1,
32591 +
            0x1e2b3d1c58c43793,
32592 +
            0x199a7c76d9ba7405,
32593 +
            0x1b0abcaf596fb577,
32594 +
            0x027ef86fdde8f8b9,
32595 +
            0x00ee38b65d3d39cb,
32596 +
            0x075f79dcdc437a5d,
32597 +
            0x05cfb9055c96bb2f,
32598 +
            0x083dfb09debffd71,
32599 +
            0x0aad3bd05e6a3c03,
32600 +
            0x0d1c7abadf147f95,
32601 +
            0x0f8cba635fc1bee7,
32602 +
            0xc9dcde6bf9d296c9,
32603 +
            0xcb4c1eb2790757bb,
32604 +
            0xccfd5fd8f879142d,
32605 +
            0xce6d9f0178acd55f,
32606 +
            0xc39fdd0dfa859301,
32607 +
            0xc10f1dd47a505273,
32608 +
            0xc6be5cbefb2e11e5,
32609 +
            0xc42e9c677bfbd097,
32610 +
            0xdd5ad8a7ff7c9d59,
32611 +
            0xdfca187e7fa95c2b,
32612 +
            0xd87b5914fed71fbd,
32613 +
            0xdaeb99cd7e02decf,
32614 +
            0xd719dbc1fc2b9891,
32615 +
            0xd5891b187cfe59e3,
32616 +
            0xd2385a72fd801a75,
32617 +
            0xd0a89aab7d55db07,
32618 +
            0xe0d0d3f3f48e81e9,
32619 +
            0xe240132a745b409b,
32620 +
            0xe5f15240f525030d,
32621 +
            0xe761929975f0c27f,
32622 +
            0xea93d095f7d98421,
32623 +
            0xe803104c770c4553,
32624 +
            0xefb25126f67206c5,
32625 +
            0xed2291ff76a7c7b7,
32626 +
            0xf456d53ff2208a79,
32627 +
            0xf6c615e672f54b0b,
32628 +
            0xf177548cf38b089d,
32629 +
            0xf3e79455735ec9ef,
32630 +
            0xfe15d659f1778fb1,
32631 +
            0xfc85168071a24ec3,
32632 +
            0xfb3457eaf0dc0d55,
32633 +
            0xf9a497337009cc27,
32634 +
            0x9bc4c55be36ab889,
32635 +
            0x9954058263bf79fb,
32636 +
            0x9ee544e8e2c13a6d,
32637 +
            0x9c7584316214fb1f,
32638 +
            0x9187c63de03dbd41,
32639 +
            0x931706e460e87c33,
32640 +
            0x94a6478ee1963fa5,
32641 +
            0x963687576143fed7,
32642 +
            0x8f42c397e5c4b319,
32643 +
            0x8dd2034e6511726b,
32644 +
            0x8a634224e46f31fd,
32645 +
            0x88f382fd64baf08f,
32646 +
            0x8501c0f1e693b6d1,
32647 +
            0x87910028664677a3,
32648 +
            0x80204142e7383435,
32649 +
            0x82b0819b67edf547,
32650 +
            0xb2c8c8c3ee36afa9,
32651 +
            0xb058081a6ee36edb,
32652 +
            0xb7e94970ef9d2d4d,
32653 +
            0xb57989a96f48ec3f,
32654 +
            0xb88bcba5ed61aa61,
32655 +
            0xba1b0b7c6db46b13,
32656 +
            0xbdaa4a16ecca2885,
32657 +
            0xbf3a8acf6c1fe9f7,
32658 +
            0xa64ece0fe898a439,
32659 +
            0xa4de0ed6684d654b,
32660 +
            0xa36f4fbce93326dd,
32661 +
            0xa1ff8f6569e6e7af,
32662 +
            0xac0dcd69ebcfa1f1,
32663 +
            0xae9d0db06b1a6083,
32664 +
            0xa92c4cdaea642315,
32665 +
            0xabbc8c036ab1e267,
32666 +
        ],
32667 +
        [
32668 +
            0x0000000000000000,
32669 +
            0xfd5d7a0700b5ba38,
32670 +
            0xdf3670c5a7290739,
32671 +
            0x226b0ac2a79cbd01,
32672 +
            0x9be06540e8107d3b,
32673 +
            0x66bd1f47e8a5c703,
32674 +
            0x44d615854f397a02,
32675 +
            0xb98b6f824f8cc03a,
32676 +
            0x124c4e4a7662893f,
32677 +
            0xef11344d76d73307,
32678 +
            0xcd7a3e8fd14b8e06,
32679 +
            0x30274488d1fe343e,
32680 +
            0x89ac2b0a9e72f404,
32681 +
            0x74f1510d9ec74e3c,
32682 +
            0x569a5bcf395bf33d,
32683 +
            0xabc721c839ee4905,
32684 +
            0x24989c94ecc5127e,
32685 +
            0xd9c5e693ec70a846,
32686 +
            0xfbaeec514bec1547,
32687 +
            0x06f396564b59af7f,
32688 +
            0xbf78f9d404d56f45,
32689 +
            0x422583d30460d57d,
32690 +
            0x604e8911a3fc687c,
32691 +
            0x9d13f316a349d244,
32692 +
            0x36d4d2de9aa79b41,
32693 +
            0xcb89a8d99a122179,
32694 +
            0xe9e2a21b3d8e9c78,
32695 +
            0x14bfd81c3d3b2640,
32696 +
            0xad34b79e72b7e67a,
32697 +
            0x5069cd9972025c42,
32698 +
            0x7202c75bd59ee143,
32699 +
            0x8f5fbd5cd52b5b7b,
32700 +
            0x49313929d98a24fc,
32701 +
            0xb46c432ed93f9ec4,
32702 +
            0x960749ec7ea323c5,
32703 +
            0x6b5a33eb7e1699fd,
32704 +
            0xd2d15c69319a59c7,
32705 +
            0x2f8c266e312fe3ff,
32706 +
            0x0de72cac96b35efe,
32707 +
            0xf0ba56ab9606e4c6,
32708 +
            0x5b7d7763afe8adc3,
32709 +
            0xa6200d64af5d17fb,
32710 +
            0x844b07a608c1aafa,
32711 +
            0x79167da1087410c2,
32712 +
            0xc09d122347f8d0f8,
32713 +
            0x3dc06824474d6ac0,
32714 +
            0x1fab62e6e0d1d7c1,
32715 +
            0xe2f618e1e0646df9,
32716 +
            0x6da9a5bd354f3682,
32717 +
            0x90f4dfba35fa8cba,
32718 +
            0xb29fd578926631bb,
32719 +
            0x4fc2af7f92d38b83,
32720 +
            0xf649c0fddd5f4bb9,
32721 +
            0x0b14bafaddeaf181,
32722 +
            0x297fb0387a764c80,
32723 +
            0xd422ca3f7ac3f6b8,
32724 +
            0x7fe5ebf7432dbfbd,
32725 +
            0x82b891f043980585,
32726 +
            0xa0d39b32e404b884,
32727 +
            0x5d8ee135e4b102bc,
32728 +
            0xe4058eb7ab3dc286,
32729 +
            0x1958f4b0ab8878be,
32730 +
            0x3b33fe720c14c5bf,
32731 +
            0xc66e84750ca17f87,
32732 +
            0x92627253b31449f8,
32733 +
            0x6f3f0854b3a1f3c0,
32734 +
            0x4d540296143d4ec1,
32735 +
            0xb00978911488f4f9,
32736 +
            0x098217135b0434c3,
32737 +
            0xf4df6d145bb18efb,
32738 +
            0xd6b467d6fc2d33fa,
32739 +
            0x2be91dd1fc9889c2,
32740 +
            0x802e3c19c576c0c7,
32741 +
            0x7d73461ec5c37aff,
32742 +
            0x5f184cdc625fc7fe,
32743 +
            0xa24536db62ea7dc6,
32744 +
            0x1bce59592d66bdfc,
32745 +
            0xe693235e2dd307c4,
32746 +
            0xc4f8299c8a4fbac5,
32747 +
            0x39a5539b8afa00fd,
32748 +
            0xb6faeec75fd15b86,
32749 +
            0x4ba794c05f64e1be,
32750 +
            0x69cc9e02f8f85cbf,
32751 +
            0x9491e405f84de687,
32752 +
            0x2d1a8b87b7c126bd,
32753 +
            0xd047f180b7749c85,
32754 +
            0xf22cfb4210e82184,
32755 +
            0x0f718145105d9bbc,
32756 +
            0xa4b6a08d29b3d2b9,
32757 +
            0x59ebda8a29066881,
32758 +
            0x7b80d0488e9ad580,
32759 +
            0x86ddaa4f8e2f6fb8,
32760 +
            0x3f56c5cdc1a3af82,
32761 +
            0xc20bbfcac11615ba,
32762 +
            0xe060b508668aa8bb,
32763 +
            0x1d3dcf0f663f1283,
32764 +
            0xdb534b7a6a9e6d04,
32765 +
            0x260e317d6a2bd73c,
32766 +
            0x04653bbfcdb76a3d,
32767 +
            0xf93841b8cd02d005,
32768 +
            0x40b32e3a828e103f,
32769 +
            0xbdee543d823baa07,
32770 +
            0x9f855eff25a71706,
32771 +
            0x62d824f82512ad3e,
32772 +
            0xc91f05301cfce43b,
32773 +
            0x34427f371c495e03,
32774 +
            0x162975f5bbd5e302,
32775 +
            0xeb740ff2bb60593a,
32776 +
            0x52ff6070f4ec9900,
32777 +
            0xafa21a77f4592338,
32778 +
            0x8dc910b553c59e39,
32779 +
            0x70946ab253702401,
32780 +
            0xffcbd7ee865b7f7a,
32781 +
            0x0296ade986eec542,
32782 +
            0x20fda72b21727843,
32783 +
            0xdda0dd2c21c7c27b,
32784 +
            0x642bb2ae6e4b0241,
32785 +
            0x9976c8a96efeb879,
32786 +
            0xbb1dc26bc9620578,
32787 +
            0x4640b86cc9d7bf40,
32788 +
            0xed8799a4f039f645,
32789 +
            0x10dae3a3f08c4c7d,
32790 +
            0x32b1e9615710f17c,
32791 +
            0xcfec936657a54b44,
32792 +
            0x7667fce418298b7e,
32793 +
            0x8b3a86e3189c3146,
32794 +
            0xa9518c21bf008c47,
32795 +
            0x540cf626bfb5367f,
32796 +
            0x0148606cc06ae0b9,
32797 +
            0xfc151a6bc0df5a81,
32798 +
            0xde7e10a96743e780,
32799 +
            0x23236aae67f65db8,
32800 +
            0x9aa8052c287a9d82,
32801 +
            0x67f57f2b28cf27ba,
32802 +
            0x459e75e98f539abb,
32803 +
            0xb8c30fee8fe62083,
32804 +
            0x13042e26b6086986,
32805 +
            0xee595421b6bdd3be,
32806 +
            0xcc325ee311216ebf,
32807 +
            0x316f24e41194d487,
32808 +
            0x88e44b665e1814bd,
32809 +
            0x75b931615eadae85,
32810 +
            0x57d23ba3f9311384,
32811 +
            0xaa8f41a4f984a9bc,
32812 +
            0x25d0fcf82caff2c7,
32813 +
            0xd88d86ff2c1a48ff,
32814 +
            0xfae68c3d8b86f5fe,
32815 +
            0x07bbf63a8b334fc6,
32816 +
            0xbe3099b8c4bf8ffc,
32817 +
            0x436de3bfc40a35c4,
32818 +
            0x6106e97d639688c5,
32819 +
            0x9c5b937a632332fd,
32820 +
            0x379cb2b25acd7bf8,
32821 +
            0xcac1c8b55a78c1c0,
32822 +
            0xe8aac277fde47cc1,
32823 +
            0x15f7b870fd51c6f9,
32824 +
            0xac7cd7f2b2dd06c3,
32825 +
            0x5121adf5b268bcfb,
32826 +
            0x734aa73715f401fa,
32827 +
            0x8e17dd301541bbc2,
32828 +
            0x4879594519e0c445,
32829 +
            0xb524234219557e7d,
32830 +
            0x974f2980bec9c37c,
32831 +
            0x6a125387be7c7944,
32832 +
            0xd3993c05f1f0b97e,
32833 +
            0x2ec44602f1450346,
32834 +
            0x0caf4cc056d9be47,
32835 +
            0xf1f236c7566c047f,
32836 +
            0x5a35170f6f824d7a,
32837 +
            0xa7686d086f37f742,
32838 +
            0x850367cac8ab4a43,
32839 +
            0x785e1dcdc81ef07b,
32840 +
            0xc1d5724f87923041,
32841 +
            0x3c88084887278a79,
32842 +
            0x1ee3028a20bb3778,
32843 +
            0xe3be788d200e8d40,
32844 +
            0x6ce1c5d1f525d63b,
32845 +
            0x91bcbfd6f5906c03,
32846 +
            0xb3d7b514520cd102,
32847 +
            0x4e8acf1352b96b3a,
32848 +
            0xf701a0911d35ab00,
32849 +
            0x0a5cda961d801138,
32850 +
            0x2837d054ba1cac39,
32851 +
            0xd56aaa53baa91601,
32852 +
            0x7ead8b9b83475f04,
32853 +
            0x83f0f19c83f2e53c,
32854 +
            0xa19bfb5e246e583d,
32855 +
            0x5cc6815924dbe205,
32856 +
            0xe54deedb6b57223f,
32857 +
            0x181094dc6be29807,
32858 +
            0x3a7b9e1ecc7e2506,
32859 +
            0xc726e419cccb9f3e,
32860 +
            0x932a123f737ea941,
32861 +
            0x6e77683873cb1379,
32862 +
            0x4c1c62fad457ae78,
32863 +
            0xb14118fdd4e21440,
32864 +
            0x08ca777f9b6ed47a,
32865 +
            0xf5970d789bdb6e42,
32866 +
            0xd7fc07ba3c47d343,
32867 +
            0x2aa17dbd3cf2697b,
32868 +
            0x81665c75051c207e,
32869 +
            0x7c3b267205a99a46,
32870 +
            0x5e502cb0a2352747,
32871 +
            0xa30d56b7a2809d7f,
32872 +
            0x1a863935ed0c5d45,
32873 +
            0xe7db4332edb9e77d,
32874 +
            0xc5b049f04a255a7c,
32875 +
            0x38ed33f74a90e044,
32876 +
            0xb7b28eab9fbbbb3f,
32877 +
            0x4aeff4ac9f0e0107,
32878 +
            0x6884fe6e3892bc06,
32879 +
            0x95d984693827063e,
32880 +
            0x2c52ebeb77abc604,
32881 +
            0xd10f91ec771e7c3c,
32882 +
            0xf3649b2ed082c13d,
32883 +
            0x0e39e129d0377b05,
32884 +
            0xa5fec0e1e9d93200,
32885 +
            0x58a3bae6e96c8838,
32886 +
            0x7ac8b0244ef03539,
32887 +
            0x8795ca234e458f01,
32888 +
            0x3e1ea5a101c94f3b,
32889 +
            0xc343dfa6017cf503,
32890 +
            0xe128d564a6e04802,
32891 +
            0x1c75af63a655f23a,
32892 +
            0xda1b2b16aaf48dbd,
32893 +
            0x27465111aa413785,
32894 +
            0x052d5bd30ddd8a84,
32895 +
            0xf87021d40d6830bc,
32896 +
            0x41fb4e5642e4f086,
32897 +
            0xbca6345142514abe,
32898 +
            0x9ecd3e93e5cdf7bf,
32899 +
            0x63904494e5784d87,
32900 +
            0xc857655cdc960482,
32901 +
            0x350a1f5bdc23beba,
32902 +
            0x176115997bbf03bb,
32903 +
            0xea3c6f9e7b0ab983,
32904 +
            0x53b7001c348679b9,
32905 +
            0xaeea7a1b3433c381,
32906 +
            0x8c8170d993af7e80,
32907 +
            0x71dc0ade931ac4b8,
32908 +
            0xfe83b78246319fc3,
32909 +
            0x03decd85468425fb,
32910 +
            0x21b5c747e11898fa,
32911 +
            0xdce8bd40e1ad22c2,
32912 +
            0x6563d2c2ae21e2f8,
32913 +
            0x983ea8c5ae9458c0,
32914 +
            0xba55a2070908e5c1,
32915 +
            0x4708d80009bd5ff9,
32916 +
            0xeccff9c8305316fc,
32917 +
            0x119283cf30e6acc4,
32918 +
            0x33f9890d977a11c5,
32919 +
            0xcea4f30a97cfabfd,
32920 +
            0x772f9c88d8436bc7,
32921 +
            0x8a72e68fd8f6d1ff,
32922 +
            0xa819ec4d7f6a6cfe,
32923 +
            0x5544964a7fdfd6c6,
32924 +
        ],
32925 +
    ];
32926 +
32927 +
    pub static CRC64_NVME_TABLE: [[u64; 256]; 16] = [
32928 +
        [
32929 +
            0x0000000000000000,
32930 +
            0x7f6ef0c830358979,
32931 +
            0xfedde190606b12f2,
32932 +
            0x81b31158505e9b8b,
32933 +
            0xc962e5739841b68f,
32934 +
            0xb60c15bba8743ff6,
32935 +
            0x37bf04e3f82aa47d,
32936 +
            0x48d1f42bc81f2d04,
32937 +
            0xa61cecb46814fe75,
32938 +
            0xd9721c7c5821770c,
32939 +
            0x58c10d24087fec87,
32940 +
            0x27affdec384a65fe,
32941 +
            0x6f7e09c7f05548fa,
32942 +
            0x1010f90fc060c183,
32943 +
            0x91a3e857903e5a08,
32944 +
            0xeecd189fa00bd371,
32945 +
            0x78e0ff3b88be6f81,
32946 +
            0x078e0ff3b88be6f8,
32947 +
            0x863d1eabe8d57d73,
32948 +
            0xf953ee63d8e0f40a,
32949 +
            0xb1821a4810ffd90e,
32950 +
            0xceecea8020ca5077,
32951 +
            0x4f5ffbd87094cbfc,
32952 +
            0x30310b1040a14285,
32953 +
            0xdefc138fe0aa91f4,
32954 +
            0xa192e347d09f188d,
32955 +
            0x2021f21f80c18306,
32956 +
            0x5f4f02d7b0f40a7f,
32957 +
            0x179ef6fc78eb277b,
32958 +
            0x68f0063448deae02,
32959 +
            0xe943176c18803589,
32960 +
            0x962de7a428b5bcf0,
32961 +
            0xf1c1fe77117cdf02,
32962 +
            0x8eaf0ebf2149567b,
32963 +
            0x0f1c1fe77117cdf0,
32964 +
            0x7072ef2f41224489,
32965 +
            0x38a31b04893d698d,
32966 +
            0x47cdebccb908e0f4,
32967 +
            0xc67efa94e9567b7f,
32968 +
            0xb9100a5cd963f206,
32969 +
            0x57dd12c379682177,
32970 +
            0x28b3e20b495da80e,
32971 +
            0xa900f35319033385,
32972 +
            0xd66e039b2936bafc,
32973 +
            0x9ebff7b0e12997f8,
32974 +
            0xe1d10778d11c1e81,
32975 +
            0x606216208142850a,
32976 +
            0x1f0ce6e8b1770c73,
32977 +
            0x8921014c99c2b083,
32978 +
            0xf64ff184a9f739fa,
32979 +
            0x77fce0dcf9a9a271,
32980 +
            0x08921014c99c2b08,
32981 +
            0x4043e43f0183060c,
32982 +
            0x3f2d14f731b68f75,
32983 +
            0xbe9e05af61e814fe,
32984 +
            0xc1f0f56751dd9d87,
32985 +
            0x2f3dedf8f1d64ef6,
32986 +
            0x50531d30c1e3c78f,
32987 +
            0xd1e00c6891bd5c04,
32988 +
            0xae8efca0a188d57d,
32989 +
            0xe65f088b6997f879,
32990 +
            0x9931f84359a27100,
32991 +
            0x1882e91b09fcea8b,
32992 +
            0x67ec19d339c963f2,
32993 +
            0xd75adabd7a6e2d6f,
32994 +
            0xa8342a754a5ba416,
32995 +
            0x29873b2d1a053f9d,
32996 +
            0x56e9cbe52a30b6e4,
32997 +
            0x1e383fcee22f9be0,
32998 +
            0x6156cf06d21a1299,
32999 +
            0xe0e5de5e82448912,
33000 +
            0x9f8b2e96b271006b,
33001 +
            0x71463609127ad31a,
33002 +
            0x0e28c6c1224f5a63,
33003 +
            0x8f9bd7997211c1e8,
33004 +
            0xf0f5275142244891,
33005 +
            0xb824d37a8a3b6595,
33006 +
            0xc74a23b2ba0eecec,
33007 +
            0x46f932eaea507767,
33008 +
            0x3997c222da65fe1e,
33009 +
            0xafba2586f2d042ee,
33010 +
            0xd0d4d54ec2e5cb97,
33011 +
            0x5167c41692bb501c,
33012 +
            0x2e0934dea28ed965,
33013 +
            0x66d8c0f56a91f461,
33014 +
            0x19b6303d5aa47d18,
33015 +
            0x980521650afae693,
33016 +
            0xe76bd1ad3acf6fea,
33017 +
            0x09a6c9329ac4bc9b,
33018 +
            0x76c839faaaf135e2,
33019 +
            0xf77b28a2faafae69,
33020 +
            0x8815d86aca9a2710,
33021 +
            0xc0c42c4102850a14,
33022 +
            0xbfaadc8932b0836d,
33023 +
            0x3e19cdd162ee18e6,
33024 +
            0x41773d1952db919f,
33025 +
            0x269b24ca6b12f26d,
33026 +
            0x59f5d4025b277b14,
33027 +
            0xd846c55a0b79e09f,
33028 +
            0xa72835923b4c69e6,
33029 +
            0xeff9c1b9f35344e2,
33030 +
            0x90973171c366cd9b,
33031 +
            0x1124202993385610,
33032 +
            0x6e4ad0e1a30ddf69,
33033 +
            0x8087c87e03060c18,
33034 +
            0xffe938b633338561,
33035 +
            0x7e5a29ee636d1eea,
33036 +
            0x0134d92653589793,
33037 +
            0x49e52d0d9b47ba97,
33038 +
            0x368bddc5ab7233ee,
33039 +
            0xb738cc9dfb2ca865,
33040 +
            0xc8563c55cb19211c,
33041 +
            0x5e7bdbf1e3ac9dec,
33042 +
            0x21152b39d3991495,
33043 +
            0xa0a63a6183c78f1e,
33044 +
            0xdfc8caa9b3f20667,
33045 +
            0x97193e827bed2b63,
33046 +
            0xe877ce4a4bd8a21a,
33047 +
            0x69c4df121b863991,
33048 +
            0x16aa2fda2bb3b0e8,
33049 +
            0xf86737458bb86399,
33050 +
            0x8709c78dbb8deae0,
33051 +
            0x06bad6d5ebd3716b,
33052 +
            0x79d4261ddbe6f812,
33053 +
            0x3105d23613f9d516,
33054 +
            0x4e6b22fe23cc5c6f,
33055 +
            0xcfd833a67392c7e4,
33056 +
            0xb0b6c36e43a74e9d,
33057 +
            0x9a6c9329ac4bc9b5,
33058 +
            0xe50263e19c7e40cc,
33059 +
            0x64b172b9cc20db47,
33060 +
            0x1bdf8271fc15523e,
33061 +
            0x530e765a340a7f3a,
33062 +
            0x2c608692043ff643,
33063 +
            0xadd397ca54616dc8,
33064 +
            0xd2bd67026454e4b1,
33065 +
            0x3c707f9dc45f37c0,
33066 +
            0x431e8f55f46abeb9,
33067 +
            0xc2ad9e0da4342532,
33068 +
            0xbdc36ec59401ac4b,
33069 +
            0xf5129aee5c1e814f,
33070 +
            0x8a7c6a266c2b0836,
33071 +
            0x0bcf7b7e3c7593bd,
33072 +
            0x74a18bb60c401ac4,
33073 +
            0xe28c6c1224f5a634,
33074 +
            0x9de29cda14c02f4d,
33075 +
            0x1c518d82449eb4c6,
33076 +
            0x633f7d4a74ab3dbf,
33077 +
            0x2bee8961bcb410bb,
33078 +
            0x548079a98c8199c2,
33079 +
            0xd53368f1dcdf0249,
33080 +
            0xaa5d9839ecea8b30,
33081 +
            0x449080a64ce15841,
33082 +
            0x3bfe706e7cd4d138,
33083 +
            0xba4d61362c8a4ab3,
33084 +
            0xc52391fe1cbfc3ca,
33085 +
            0x8df265d5d4a0eece,
33086 +
            0xf29c951de49567b7,
33087 +
            0x732f8445b4cbfc3c,
33088 +
            0x0c41748d84fe7545,
33089 +
            0x6bad6d5ebd3716b7,
33090 +
            0x14c39d968d029fce,
33091 +
            0x95708ccedd5c0445,
33092 +
            0xea1e7c06ed698d3c,
33093 +
            0xa2cf882d2576a038,
33094 +
            0xdda178e515432941,
33095 +
            0x5c1269bd451db2ca,
33096 +
            0x237c997575283bb3,
33097 +
            0xcdb181ead523e8c2,
33098 +
            0xb2df7122e51661bb,
33099 +
            0x336c607ab548fa30,
33100 +
            0x4c0290b2857d7349,
33101 +
            0x04d364994d625e4d,
33102 +
            0x7bbd94517d57d734,
33103 +
            0xfa0e85092d094cbf,
33104 +
            0x856075c11d3cc5c6,
33105 +
            0x134d926535897936,
33106 +
            0x6c2362ad05bcf04f,
33107 +
            0xed9073f555e26bc4,
33108 +
            0x92fe833d65d7e2bd,
33109 +
            0xda2f7716adc8cfb9,
33110 +
            0xa54187de9dfd46c0,
33111 +
            0x24f29686cda3dd4b,
33112 +
            0x5b9c664efd965432,
33113 +
            0xb5517ed15d9d8743,
33114 +
            0xca3f8e196da80e3a,
33115 +
            0x4b8c9f413df695b1,
33116 +
            0x34e26f890dc31cc8,
33117 +
            0x7c339ba2c5dc31cc,
33118 +
            0x035d6b6af5e9b8b5,
33119 +
            0x82ee7a32a5b7233e,
33120 +
            0xfd808afa9582aa47,
33121 +
            0x4d364994d625e4da,
33122 +
            0x3258b95ce6106da3,
33123 +
            0xb3eba804b64ef628,
33124 +
            0xcc8558cc867b7f51,
33125 +
            0x8454ace74e645255,
33126 +
            0xfb3a5c2f7e51db2c,
33127 +
            0x7a894d772e0f40a7,
33128 +
            0x05e7bdbf1e3ac9de,
33129 +
            0xeb2aa520be311aaf,
33130 +
            0x944455e88e0493d6,
33131 +
            0x15f744b0de5a085d,
33132 +
            0x6a99b478ee6f8124,
33133 +
            0x224840532670ac20,
33134 +
            0x5d26b09b16452559,
33135 +
            0xdc95a1c3461bbed2,
33136 +
            0xa3fb510b762e37ab,
33137 +
            0x35d6b6af5e9b8b5b,
33138 +
            0x4ab846676eae0222,
33139 +
            0xcb0b573f3ef099a9,
33140 +
            0xb465a7f70ec510d0,
33141 +
            0xfcb453dcc6da3dd4,
33142 +
            0x83daa314f6efb4ad,
33143 +
            0x0269b24ca6b12f26,
33144 +
            0x7d0742849684a65f,
33145 +
            0x93ca5a1b368f752e,
33146 +
            0xeca4aad306bafc57,
33147 +
            0x6d17bb8b56e467dc,
33148 +
            0x12794b4366d1eea5,
33149 +
            0x5aa8bf68aecec3a1,
33150 +
            0x25c64fa09efb4ad8,
33151 +
            0xa4755ef8cea5d153,
33152 +
            0xdb1bae30fe90582a,
33153 +
            0xbcf7b7e3c7593bd8,
33154 +
            0xc399472bf76cb2a1,
33155 +
            0x422a5673a732292a,
33156 +
            0x3d44a6bb9707a053,
33157 +
            0x759552905f188d57,
33158 +
            0x0afba2586f2d042e,
33159 +
            0x8b48b3003f739fa5,
33160 +
            0xf42643c80f4616dc,
33161 +
            0x1aeb5b57af4dc5ad,
33162 +
            0x6585ab9f9f784cd4,
33163 +
            0xe436bac7cf26d75f,
33164 +
            0x9b584a0fff135e26,
33165 +
            0xd389be24370c7322,
33166 +
            0xace74eec0739fa5b,
33167 +
            0x2d545fb4576761d0,
33168 +
            0x523aaf7c6752e8a9,
33169 +
            0xc41748d84fe75459,
33170 +
            0xbb79b8107fd2dd20,
33171 +
            0x3acaa9482f8c46ab,
33172 +
            0x45a459801fb9cfd2,
33173 +
            0x0d75adabd7a6e2d6,
33174 +
            0x721b5d63e7936baf,
33175 +
            0xf3a84c3bb7cdf024,
33176 +
            0x8cc6bcf387f8795d,
33177 +
            0x620ba46c27f3aa2c,
33178 +
            0x1d6554a417c62355,
33179 +
            0x9cd645fc4798b8de,
33180 +
            0xe3b8b53477ad31a7,
33181 +
            0xab69411fbfb21ca3,
33182 +
            0xd407b1d78f8795da,
33183 +
            0x55b4a08fdfd90e51,
33184 +
            0x2ada5047efec8728,
33185 +
        ],
33186 +
        [
33187 +
            0x0000000000000000,
33188 +
            0x8776a97d73bddf69,
33189 +
            0x3a3474a9bfec2db9,
33190 +
            0xbd42ddd4cc51f2d0,
33191 +
            0x7468e9537fd85b72,
33192 +
            0xf31e402e0c65841b,
33193 +
            0x4e5c9dfac03476cb,
33194 +
            0xc92a3487b389a9a2,
33195 +
            0xe8d1d2a6ffb0b6e4,
33196 +
            0x6fa77bdb8c0d698d,
33197 +
            0xd2e5a60f405c9b5d,
33198 +
            0x55930f7233e14434,
33199 +
            0x9cb93bf58068ed96,
33200 +
            0x1bcf9288f3d532ff,
33201 +
            0xa68d4f5c3f84c02f,
33202 +
            0x21fbe6214c391f46,
33203 +
            0xe57a831ea7f6fea3,
33204 +
            0x620c2a63d44b21ca,
33205 +
            0xdf4ef7b7181ad31a,
33206 +
            0x58385eca6ba70c73,
33207 +
            0x91126a4dd82ea5d1,
33208 +
            0x1664c330ab937ab8,
33209 +
            0xab261ee467c28868,
33210 +
            0x2c50b799147f5701,
33211 +
            0x0dab51b858464847,
33212 +
            0x8addf8c52bfb972e,
33213 +
            0x379f2511e7aa65fe,
33214 +
            0xb0e98c6c9417ba97,
33215 +
            0x79c3b8eb279e1335,
33216 +
            0xfeb511965423cc5c,
33217 +
            0x43f7cc4298723e8c,
33218 +
            0xc481653febcfe1e5,
33219 +
            0xfe2c206e177a6e2d,
33220 +
            0x795a891364c7b144,
33221 +
            0xc41854c7a8964394,
33222 +
            0x436efdbadb2b9cfd,
33223 +
            0x8a44c93d68a2355f,
33224 +
            0x0d3260401b1fea36,
33225 +
            0xb070bd94d74e18e6,
33226 +
            0x370614e9a4f3c78f,
33227 +
            0x16fdf2c8e8cad8c9,
33228 +
            0x918b5bb59b7707a0,
33229 +
            0x2cc986615726f570,
33230 +
            0xabbf2f1c249b2a19,
33231 +
            0x62951b9b971283bb,
33232 +
            0xe5e3b2e6e4af5cd2,
33233 +
            0x58a16f3228feae02,
33234 +
            0xdfd7c64f5b43716b,
33235 +
            0x1b56a370b08c908e,
33236 +
            0x9c200a0dc3314fe7,
33237 +
            0x2162d7d90f60bd37,
33238 +
            0xa6147ea47cdd625e,
33239 +
            0x6f3e4a23cf54cbfc,
33240 +
            0xe848e35ebce91495,
33241 +
            0x550a3e8a70b8e645,
33242 +
            0xd27c97f70305392c,
33243 +
            0xf38771d64f3c266a,
33244 +
            0x74f1d8ab3c81f903,
33245 +
            0xc9b3057ff0d00bd3,
33246 +
            0x4ec5ac02836dd4ba,
33247 +
            0x87ef988530e47d18,
33248 +
            0x009931f84359a271,
33249 +
            0xbddbec2c8f0850a1,
33250 +
            0x3aad4551fcb58fc8,
33251 +
            0xc881668f76634f31,
33252 +
            0x4ff7cff205de9058,
33253 +
            0xf2b51226c98f6288,
33254 +
            0x75c3bb5bba32bde1,
33255 +
            0xbce98fdc09bb1443,
33256 +
            0x3b9f26a17a06cb2a,
33257 +
            0x86ddfb75b65739fa,
33258 +
            0x01ab5208c5eae693,
33259 +
            0x2050b42989d3f9d5,
33260 +
            0xa7261d54fa6e26bc,
33261 +
            0x1a64c080363fd46c,
33262 +
            0x9d1269fd45820b05,
33263 +
            0x54385d7af60ba2a7,
33264 +
            0xd34ef40785b67dce,
33265 +
            0x6e0c29d349e78f1e,
33266 +
            0xe97a80ae3a5a5077,
33267 +
            0x2dfbe591d195b192,
33268 +
            0xaa8d4ceca2286efb,
33269 +
            0x17cf91386e799c2b,
33270 +
            0x90b938451dc44342,
33271 +
            0x59930cc2ae4deae0,
33272 +
            0xdee5a5bfddf03589,
33273 +
            0x63a7786b11a1c759,
33274 +
            0xe4d1d116621c1830,
33275 +
            0xc52a37372e250776,
33276 +
            0x425c9e4a5d98d81f,
33277 +
            0xff1e439e91c92acf,
33278 +
            0x7868eae3e274f5a6,
33279 +
            0xb142de6451fd5c04,
33280 +
            0x363477192240836d,
33281 +
            0x8b76aacdee1171bd,
33282 +
            0x0c0003b09dacaed4,
33283 +
            0x36ad46e16119211c,
33284 +
            0xb1dbef9c12a4fe75,
33285 +
            0x0c993248def50ca5,
33286 +
            0x8bef9b35ad48d3cc,
33287 +
            0x42c5afb21ec17a6e,
33288 +
            0xc5b306cf6d7ca507,
33289 +
            0x78f1db1ba12d57d7,
33290 +
            0xff877266d29088be,
33291 +
            0xde7c94479ea997f8,
33292 +
            0x590a3d3aed144891,
33293 +
            0xe448e0ee2145ba41,
33294 +
            0x633e499352f86528,
33295 +
            0xaa147d14e171cc8a,
33296 +
            0x2d62d46992cc13e3,
33297 +
            0x902009bd5e9de133,
33298 +
            0x1756a0c02d203e5a,
33299 +
            0xd3d7c5ffc6efdfbf,
33300 +
            0x54a16c82b55200d6,
33301 +
            0xe9e3b1567903f206,
33302 +
            0x6e95182b0abe2d6f,
33303 +
            0xa7bf2cacb93784cd,
33304 +
            0x20c985d1ca8a5ba4,
33305 +
            0x9d8b580506dba974,
33306 +
            0x1afdf1787566761d,
33307 +
            0x3b061759395f695b,
33308 +
            0xbc70be244ae2b632,
33309 +
            0x013263f086b344e2,
33310 +
            0x8644ca8df50e9b8b,
33311 +
            0x4f6efe0a46873229,
33312 +
            0xc8185777353aed40,
33313 +
            0x755a8aa3f96b1f90,
33314 +
            0xf22c23de8ad6c0f9,
33315 +
            0xa5dbeb4db4510d09,
33316 +
            0x22ad4230c7ecd260,
33317 +
            0x9fef9fe40bbd20b0,
33318 +
            0x189936997800ffd9,
33319 +
            0xd1b3021ecb89567b,
33320 +
            0x56c5ab63b8348912,
33321 +
            0xeb8776b774657bc2,
33322 +
            0x6cf1dfca07d8a4ab,
33323 +
            0x4d0a39eb4be1bbed,
33324 +
            0xca7c9096385c6484,
33325 +
            0x773e4d42f40d9654,
33326 +
            0xf048e43f87b0493d,
33327 +
            0x3962d0b83439e09f,
33328 +
            0xbe1479c547843ff6,
33329 +
            0x0356a4118bd5cd26,
33330 +
            0x84200d6cf868124f,
33331 +
            0x40a1685313a7f3aa,
33332 +
            0xc7d7c12e601a2cc3,
33333 +
            0x7a951cfaac4bde13,
33334 +
            0xfde3b587dff6017a,
33335 +
            0x34c981006c7fa8d8,
33336 +
            0xb3bf287d1fc277b1,
33337 +
            0x0efdf5a9d3938561,
33338 +
            0x898b5cd4a02e5a08,
33339 +
            0xa870baf5ec17454e,
33340 +
            0x2f0613889faa9a27,
33341 +
            0x9244ce5c53fb68f7,
33342 +
            0x153267212046b79e,
33343 +
            0xdc1853a693cf1e3c,
33344 +
            0x5b6efadbe072c155,
33345 +
            0xe62c270f2c233385,
33346 +
            0x615a8e725f9eecec,
33347 +
            0x5bf7cb23a32b6324,
33348 +
            0xdc81625ed096bc4d,
33349 +
            0x61c3bf8a1cc74e9d,
33350 +
            0xe6b516f76f7a91f4,
33351 +
            0x2f9f2270dcf33856,
33352 +
            0xa8e98b0daf4ee73f,
33353 +
            0x15ab56d9631f15ef,
33354 +
            0x92ddffa410a2ca86,
33355 +
            0xb32619855c9bd5c0,
33356 +
            0x3450b0f82f260aa9,
33357 +
            0x89126d2ce377f879,
33358 +
            0x0e64c45190ca2710,
33359 +
            0xc74ef0d623438eb2,
33360 +
            0x403859ab50fe51db,
33361 +
            0xfd7a847f9cafa30b,
33362 +
            0x7a0c2d02ef127c62,
33363 +
            0xbe8d483d04dd9d87,
33364 +
            0x39fbe140776042ee,
33365 +
            0x84b93c94bb31b03e,
33366 +
            0x03cf95e9c88c6f57,
33367 +
            0xcae5a16e7b05c6f5,
33368 +
            0x4d93081308b8199c,
33369 +
            0xf0d1d5c7c4e9eb4c,
33370 +
            0x77a77cbab7543425,
33371 +
            0x565c9a9bfb6d2b63,
33372 +
            0xd12a33e688d0f40a,
33373 +
            0x6c68ee32448106da,
33374 +
            0xeb1e474f373cd9b3,
33375 +
            0x223473c884b57011,
33376 +
            0xa542dab5f708af78,
33377 +
            0x180007613b595da8,
33378 +
            0x9f76ae1c48e482c1,
33379 +
            0x6d5a8dc2c2324238,
33380 +
            0xea2c24bfb18f9d51,
33381 +
            0x576ef96b7dde6f81,
33382 +
            0xd01850160e63b0e8,
33383 +
            0x19326491bdea194a,
33384 +
            0x9e44cdecce57c623,
33385 +
            0x23061038020634f3,
33386 +
            0xa470b94571bbeb9a,
33387 +
            0x858b5f643d82f4dc,
33388 +
            0x02fdf6194e3f2bb5,
33389 +
            0xbfbf2bcd826ed965,
33390 +
            0x38c982b0f1d3060c,
33391 +
            0xf1e3b637425aafae,
33392 +
            0x76951f4a31e770c7,
33393 +
            0xcbd7c29efdb68217,
33394 +
            0x4ca16be38e0b5d7e,
33395 +
            0x88200edc65c4bc9b,
33396 +
            0x0f56a7a1167963f2,
33397 +
            0xb2147a75da289122,
33398 +
            0x3562d308a9954e4b,
33399 +
            0xfc48e78f1a1ce7e9,
33400 +
            0x7b3e4ef269a13880,
33401 +
            0xc67c9326a5f0ca50,
33402 +
            0x410a3a5bd64d1539,
33403 +
            0x60f1dc7a9a740a7f,
33404 +
            0xe7877507e9c9d516,
33405 +
            0x5ac5a8d3259827c6,
33406 +
            0xddb301ae5625f8af,
33407 +
            0x14993529e5ac510d,
33408 +
            0x93ef9c5496118e64,
33409 +
            0x2ead41805a407cb4,
33410 +
            0xa9dbe8fd29fda3dd,
33411 +
            0x9376adacd5482c15,
33412 +
            0x140004d1a6f5f37c,
33413 +
            0xa942d9056aa401ac,
33414 +
            0x2e3470781919dec5,
33415 +
            0xe71e44ffaa907767,
33416 +
            0x6068ed82d92da80e,
33417 +
            0xdd2a3056157c5ade,
33418 +
            0x5a5c992b66c185b7,
33419 +
            0x7ba77f0a2af89af1,
33420 +
            0xfcd1d67759454598,
33421 +
            0x41930ba39514b748,
33422 +
            0xc6e5a2dee6a96821,
33423 +
            0x0fcf96595520c183,
33424 +
            0x88b93f24269d1eea,
33425 +
            0x35fbe2f0eaccec3a,
33426 +
            0xb28d4b8d99713353,
33427 +
            0x760c2eb272bed2b6,
33428 +
            0xf17a87cf01030ddf,
33429 +
            0x4c385a1bcd52ff0f,
33430 +
            0xcb4ef366beef2066,
33431 +
            0x0264c7e10d6689c4,
33432 +
            0x85126e9c7edb56ad,
33433 +
            0x3850b348b28aa47d,
33434 +
            0xbf261a35c1377b14,
33435 +
            0x9eddfc148d0e6452,
33436 +
            0x19ab5569feb3bb3b,
33437 +
            0xa4e988bd32e249eb,
33438 +
            0x239f21c0415f9682,
33439 +
            0xeab51547f2d63f20,
33440 +
            0x6dc3bc3a816be049,
33441 +
            0xd08161ee4d3a1299,
33442 +
            0x57f7c8933e87cdf0,
33443 +
        ],
33444 +
        [
33445 +
            0x0000000000000000,
33446 +
            0xff6e4e1f4e4038be,
33447 +
            0xca05ba6dc417e217,
33448 +
            0x356bf4728a57daa9,
33449 +
            0xa0d25288d0b85745,
33450 +
            0x5fbc1c979ef86ffb,
33451 +
            0x6ad7e8e514afb552,
33452 +
            0x95b9a6fa5aef8dec,
33453 +
            0x757d8342f9e73de1,
33454 +
            0x8a13cd5db7a7055f,
33455 +
            0xbf78392f3df0dff6,
33456 +
            0x4016773073b0e748,
33457 +
            0xd5afd1ca295f6aa4,
33458 +
            0x2ac19fd5671f521a,
33459 +
            0x1faa6ba7ed4888b3,
33460 +
            0xe0c425b8a308b00d,
33461 +
            0xeafb0685f3ce7bc2,
33462 +
            0x1595489abd8e437c,
33463 +
            0x20febce837d999d5,
33464 +
            0xdf90f2f77999a16b,
33465 +
            0x4a29540d23762c87,
33466 +
            0xb5471a126d361439,
33467 +
            0x802cee60e761ce90,
33468 +
            0x7f42a07fa921f62e,
33469 +
            0x9f8685c70a294623,
33470 +
            0x60e8cbd844697e9d,
33471 +
            0x55833faace3ea434,
33472 +
            0xaaed71b5807e9c8a,
33473 +
            0x3f54d74fda911166,
33474 +
            0xc03a995094d129d8,
33475 +
            0xf5516d221e86f371,
33476 +
            0x0a3f233d50c6cbcf,
33477 +
            0xe12f2b58bf0b64ef,
33478 +
            0x1e416547f14b5c51,
33479 +
            0x2b2a91357b1c86f8,
33480 +
            0xd444df2a355cbe46,
33481 +
            0x41fd79d06fb333aa,
33482 +
            0xbe9337cf21f30b14,
33483 +
            0x8bf8c3bdaba4d1bd,
33484 +
            0x74968da2e5e4e903,
33485 +
            0x9452a81a46ec590e,
33486 +
            0x6b3ce60508ac61b0,
33487 +
            0x5e57127782fbbb19,
33488 +
            0xa1395c68ccbb83a7,
33489 +
            0x3480fa9296540e4b,
33490 +
            0xcbeeb48dd81436f5,
33491 +
            0xfe8540ff5243ec5c,
33492 +
            0x01eb0ee01c03d4e2,
33493 +
            0x0bd42ddd4cc51f2d,
33494 +
            0xf4ba63c202852793,
33495 +
            0xc1d197b088d2fd3a,
33496 +
            0x3ebfd9afc692c584,
33497 +
            0xab067f559c7d4868,
33498 +
            0x5468314ad23d70d6,
33499 +
            0x6103c538586aaa7f,
33500 +
            0x9e6d8b27162a92c1,
33501 +
            0x7ea9ae9fb52222cc,
33502 +
            0x81c7e080fb621a72,
33503 +
            0xb4ac14f27135c0db,
33504 +
            0x4bc25aed3f75f865,
33505 +
            0xde7bfc17659a7589,
33506 +
            0x2115b2082bda4d37,
33507 +
            0x147e467aa18d979e,
33508 +
            0xeb100865efcdaf20,
33509 +
            0xf68770e226815ab5,
33510 +
            0x09e93efd68c1620b,
33511 +
            0x3c82ca8fe296b8a2,
33512 +
            0xc3ec8490acd6801c,
33513 +
            0x5655226af6390df0,
33514 +
            0xa93b6c75b879354e,
33515 +
            0x9c509807322eefe7,
33516 +
            0x633ed6187c6ed759,
33517 +
            0x83faf3a0df666754,
33518 +
            0x7c94bdbf91265fea,
33519 +
            0x49ff49cd1b718543,
33520 +
            0xb69107d25531bdfd,
33521 +
            0x2328a1280fde3011,
33522 +
            0xdc46ef37419e08af,
33523 +
            0xe92d1b45cbc9d206,
33524 +
            0x1643555a8589eab8,
33525 +
            0x1c7c7667d54f2177,
33526 +
            0xe31238789b0f19c9,
33527 +
            0xd679cc0a1158c360,
33528 +
            0x291782155f18fbde,
33529 +
            0xbcae24ef05f77632,
33530 +
            0x43c06af04bb74e8c,
33531 +
            0x76ab9e82c1e09425,
33532 +
            0x89c5d09d8fa0ac9b,
33533 +
            0x6901f5252ca81c96,
33534 +
            0x966fbb3a62e82428,
33535 +
            0xa3044f48e8bffe81,
33536 +
            0x5c6a0157a6ffc63f,
33537 +
            0xc9d3a7adfc104bd3,
33538 +
            0x36bde9b2b250736d,
33539 +
            0x03d61dc03807a9c4,
33540 +
            0xfcb853df7647917a,
33541 +
            0x17a85bba998a3e5a,
33542 +
            0xe8c615a5d7ca06e4,
33543 +
            0xddade1d75d9ddc4d,
33544 +
            0x22c3afc813dde4f3,
33545 +
            0xb77a09324932691f,
33546 +
            0x4814472d077251a1,
33547 +
            0x7d7fb35f8d258b08,
33548 +
            0x8211fd40c365b3b6,
33549 +
            0x62d5d8f8606d03bb,
33550 +
            0x9dbb96e72e2d3b05,
33551 +
            0xa8d06295a47ae1ac,
33552 +
            0x57be2c8aea3ad912,
33553 +
            0xc2078a70b0d554fe,
33554 +
            0x3d69c46ffe956c40,
33555 +
            0x0802301d74c2b6e9,
33556 +
            0xf76c7e023a828e57,
33557 +
            0xfd535d3f6a444598,
33558 +
            0x023d132024047d26,
33559 +
            0x3756e752ae53a78f,
33560 +
            0xc838a94de0139f31,
33561 +
            0x5d810fb7bafc12dd,
33562 +
            0xa2ef41a8f4bc2a63,
33563 +
            0x9784b5da7eebf0ca,
33564 +
            0x68eafbc530abc874,
33565 +
            0x882ede7d93a37879,
33566 +
            0x77409062dde340c7,
33567 +
            0x422b641057b49a6e,
33568 +
            0xbd452a0f19f4a2d0,
33569 +
            0x28fc8cf5431b2f3c,
33570 +
            0xd792c2ea0d5b1782,
33571 +
            0xe2f93698870ccd2b,
33572 +
            0x1d977887c94cf595,
33573 +
            0xd9d7c79715952601,
33574 +
            0x26b989885bd51ebf,
33575 +
            0x13d27dfad182c416,
33576 +
            0xecbc33e59fc2fca8,
33577 +
            0x7905951fc52d7144,
33578 +
            0x866bdb008b6d49fa,
33579 +
            0xb3002f72013a9353,
33580 +
            0x4c6e616d4f7aabed,
33581 +
            0xacaa44d5ec721be0,
33582 +
            0x53c40acaa232235e,
33583 +
            0x66affeb82865f9f7,
33584 +
            0x99c1b0a76625c149,
33585 +
            0x0c78165d3cca4ca5,
33586 +
            0xf3165842728a741b,
33587 +
            0xc67dac30f8ddaeb2,
33588 +
            0x3913e22fb69d960c,
33589 +
            0x332cc112e65b5dc3,
33590 +
            0xcc428f0da81b657d,
33591 +
            0xf9297b7f224cbfd4,
33592 +
            0x064735606c0c876a,
33593 +
            0x93fe939a36e30a86,
33594 +
            0x6c90dd8578a33238,
33595 +
            0x59fb29f7f2f4e891,
33596 +
            0xa69567e8bcb4d02f,
33597 +
            0x465142501fbc6022,
33598 +
            0xb93f0c4f51fc589c,
33599 +
            0x8c54f83ddbab8235,
33600 +
            0x733ab62295ebba8b,
33601 +
            0xe68310d8cf043767,
33602 +
            0x19ed5ec781440fd9,
33603 +
            0x2c86aab50b13d570,
33604 +
            0xd3e8e4aa4553edce,
33605 +
            0x38f8eccfaa9e42ee,
33606 +
            0xc796a2d0e4de7a50,
33607 +
            0xf2fd56a26e89a0f9,
33608 +
            0x0d9318bd20c99847,
33609 +
            0x982abe477a2615ab,
33610 +
            0x6744f05834662d15,
33611 +
            0x522f042abe31f7bc,
33612 +
            0xad414a35f071cf02,
33613 +
            0x4d856f8d53797f0f,
33614 +
            0xb2eb21921d3947b1,
33615 +
            0x8780d5e0976e9d18,
33616 +
            0x78ee9bffd92ea5a6,
33617 +
            0xed573d0583c1284a,
33618 +
            0x1239731acd8110f4,
33619 +
            0x2752876847d6ca5d,
33620 +
            0xd83cc9770996f2e3,
33621 +
            0xd203ea4a5950392c,
33622 +
            0x2d6da45517100192,
33623 +
            0x180650279d47db3b,
33624 +
            0xe7681e38d307e385,
33625 +
            0x72d1b8c289e86e69,
33626 +
            0x8dbff6ddc7a856d7,
33627 +
            0xb8d402af4dff8c7e,
33628 +
            0x47ba4cb003bfb4c0,
33629 +
            0xa77e6908a0b704cd,
33630 +
            0x58102717eef73c73,
33631 +
            0x6d7bd36564a0e6da,
33632 +
            0x92159d7a2ae0de64,
33633 +
            0x07ac3b80700f5388,
33634 +
            0xf8c2759f3e4f6b36,
33635 +
            0xcda981edb418b19f,
33636 +
            0x32c7cff2fa588921,
33637 +
            0x2f50b77533147cb4,
33638 +
            0xd03ef96a7d54440a,
33639 +
            0xe5550d18f7039ea3,
33640 +
            0x1a3b4307b943a61d,
33641 +
            0x8f82e5fde3ac2bf1,
33642 +
            0x70ecabe2adec134f,
33643 +
            0x45875f9027bbc9e6,
33644 +
            0xbae9118f69fbf158,
33645 +
            0x5a2d3437caf34155,
33646 +
            0xa5437a2884b379eb,
33647 +
            0x90288e5a0ee4a342,
33648 +
            0x6f46c04540a49bfc,
33649 +
            0xfaff66bf1a4b1610,
33650 +
            0x059128a0540b2eae,
33651 +
            0x30fadcd2de5cf407,
33652 +
            0xcf9492cd901cccb9,
33653 +
            0xc5abb1f0c0da0776,
33654 +
            0x3ac5ffef8e9a3fc8,
33655 +
            0x0fae0b9d04cde561,
33656 +
            0xf0c045824a8ddddf,
33657 +
            0x6579e37810625033,
33658 +
            0x9a17ad675e22688d,
33659 +
            0xaf7c5915d475b224,
33660 +
            0x5012170a9a358a9a,
33661 +
            0xb0d632b2393d3a97,
33662 +
            0x4fb87cad777d0229,
33663 +
            0x7ad388dffd2ad880,
33664 +
            0x85bdc6c0b36ae03e,
33665 +
            0x1004603ae9856dd2,
33666 +
            0xef6a2e25a7c5556c,
33667 +
            0xda01da572d928fc5,
33668 +
            0x256f944863d2b77b,
33669 +
            0xce7f9c2d8c1f185b,
33670 +
            0x3111d232c25f20e5,
33671 +
            0x047a26404808fa4c,
33672 +
            0xfb14685f0648c2f2,
33673 +
            0x6eadcea55ca74f1e,
33674 +
            0x91c380ba12e777a0,
33675 +
            0xa4a874c898b0ad09,
33676 +
            0x5bc63ad7d6f095b7,
33677 +
            0xbb021f6f75f825ba,
33678 +
            0x446c51703bb81d04,
33679 +
            0x7107a502b1efc7ad,
33680 +
            0x8e69eb1dffafff13,
33681 +
            0x1bd04de7a54072ff,
33682 +
            0xe4be03f8eb004a41,
33683 +
            0xd1d5f78a615790e8,
33684 +
            0x2ebbb9952f17a856,
33685 +
            0x24849aa87fd16399,
33686 +
            0xdbead4b731915b27,
33687 +
            0xee8120c5bbc6818e,
33688 +
            0x11ef6edaf586b930,
33689 +
            0x8456c820af6934dc,
33690 +
            0x7b38863fe1290c62,
33691 +
            0x4e53724d6b7ed6cb,
33692 +
            0xb13d3c52253eee75,
33693 +
            0x51f919ea86365e78,
33694 +
            0xae9757f5c87666c6,
33695 +
            0x9bfca3874221bc6f,
33696 +
            0x6492ed980c6184d1,
33697 +
            0xf12b4b62568e093d,
33698 +
            0x0e45057d18ce3183,
33699 +
            0x3b2ef10f9299eb2a,
33700 +
            0xc440bf10dcd9d394,
33701 +
        ],
33702 +
        [
33703 +
            0x0000000000000000,
33704 +
            0x8211147cbaf96306,
33705 +
            0x30fb0eaa2d655567,
33706 +
            0xb2ea1ad6979c3661,
33707 +
            0x61f61d545acaaace,
33708 +
            0xe3e70928e033c9c8,
33709 +
            0x510d13fe77afffa9,
33710 +
            0xd31c0782cd569caf,
33711 +
            0xc3ec3aa8b595559c,
33712 +
            0x41fd2ed40f6c369a,
33713 +
            0xf317340298f000fb,
33714 +
            0x7106207e220963fd,
33715 +
            0xa21a27fcef5fff52,
33716 +
            0x200b338055a69c54,
33717 +
            0x92e12956c23aaa35,
33718 +
            0x10f03d2a78c3c933,
33719 +
            0xb301530233bd3853,
33720 +
            0x3110477e89445b55,
33721 +
            0x83fa5da81ed86d34,
33722 +
            0x01eb49d4a4210e32,
33723 +
            0xd2f74e566977929d,
33724 +
            0x50e65a2ad38ef19b,
33725 +
            0xe20c40fc4412c7fa,
33726 +
            0x601d5480feeba4fc,
33727 +
            0x70ed69aa86286dcf,
33728 +
            0xf2fc7dd63cd10ec9,
33729 +
            0x40166700ab4d38a8,
33730 +
            0xc207737c11b45bae,
33731 +
            0x111b74fedce2c701,
33732 +
            0x930a6082661ba407,
33733 +
            0x21e07a54f1879266,
33734 +
            0xa3f16e284b7ef160,
33735 +
            0x52db80573fede3cd,
33736 +
            0xd0ca942b851480cb,
33737 +
            0x62208efd1288b6aa,
33738 +
            0xe0319a81a871d5ac,
33739 +
            0x332d9d0365274903,
33740 +
            0xb13c897fdfde2a05,
33741 +
            0x03d693a948421c64,
33742 +
            0x81c787d5f2bb7f62,
33743 +
            0x9137baff8a78b651,
33744 +
            0x1326ae833081d557,
33745 +
            0xa1ccb455a71de336,
33746 +
            0x23dda0291de48030,
33747 +
            0xf0c1a7abd0b21c9f,
33748 +
            0x72d0b3d76a4b7f99,
33749 +
            0xc03aa901fdd749f8,
33750 +
            0x422bbd7d472e2afe,
33751 +
            0xe1dad3550c50db9e,
33752 +
            0x63cbc729b6a9b898,
33753 +
            0xd121ddff21358ef9,
33754 +
            0x5330c9839bccedff,
33755 +
            0x802cce01569a7150,
33756 +
            0x023dda7dec631256,
33757 +
            0xb0d7c0ab7bff2437,
33758 +
            0x32c6d4d7c1064731,
33759 +
            0x2236e9fdb9c58e02,
33760 +
            0xa027fd81033ced04,
33761 +
            0x12cde75794a0db65,
33762 +
            0x90dcf32b2e59b863,
33763 +
            0x43c0f4a9e30f24cc,
33764 +
            0xc1d1e0d559f647ca,
33765 +
            0x733bfa03ce6a71ab,
33766 +
            0xf12aee7f749312ad,
33767 +
            0xa5b700ae7fdbc79a,
33768 +
            0x27a614d2c522a49c,
33769 +
            0x954c0e0452be92fd,
33770 +
            0x175d1a78e847f1fb,
33771 +
            0xc4411dfa25116d54,
33772 +
            0x465009869fe80e52,
33773 +
            0xf4ba135008743833,
33774 +
            0x76ab072cb28d5b35,
33775 +
            0x665b3a06ca4e9206,
33776 +
            0xe44a2e7a70b7f100,
33777 +
            0x56a034ace72bc761,
33778 +
            0xd4b120d05dd2a467,
33779 +
            0x07ad2752908438c8,
33780 +
            0x85bc332e2a7d5bce,
33781 +
            0x375629f8bde16daf,
33782 +
            0xb5473d8407180ea9,
33783 +
            0x16b653ac4c66ffc9,
33784 +
            0x94a747d0f69f9ccf,
33785 +
            0x264d5d066103aaae,
33786 +
            0xa45c497adbfac9a8,
33787 +
            0x77404ef816ac5507,
33788 +
            0xf5515a84ac553601,
33789 +
            0x47bb40523bc90060,
33790 +
            0xc5aa542e81306366,
33791 +
            0xd55a6904f9f3aa55,
33792 +
            0x574b7d78430ac953,
33793 +
            0xe5a167aed496ff32,
33794 +
            0x67b073d26e6f9c34,
33795 +
            0xb4ac7450a339009b,
33796 +
            0x36bd602c19c0639d,
33797 +
            0x84577afa8e5c55fc,
33798 +
            0x06466e8634a536fa,
33799 +
            0xf76c80f940362457,
33800 +
            0x757d9485facf4751,
33801 +
            0xc7978e536d537130,
33802 +
            0x45869a2fd7aa1236,
33803 +
            0x969a9dad1afc8e99,
33804 +
            0x148b89d1a005ed9f,
33805 +
            0xa66193073799dbfe,
33806 +
            0x2470877b8d60b8f8,
33807 +
            0x3480ba51f5a371cb,
33808 +
            0xb691ae2d4f5a12cd,
33809 +
            0x047bb4fbd8c624ac,
33810 +
            0x866aa087623f47aa,
33811 +
            0x5576a705af69db05,
33812 +
            0xd767b3791590b803,
33813 +
            0x658da9af820c8e62,
33814 +
            0xe79cbdd338f5ed64,
33815 +
            0x446dd3fb738b1c04,
33816 +
            0xc67cc787c9727f02,
33817 +
            0x7496dd515eee4963,
33818 +
            0xf687c92de4172a65,
33819 +
            0x259bceaf2941b6ca,
33820 +
            0xa78adad393b8d5cc,
33821 +
            0x1560c0050424e3ad,
33822 +
            0x9771d479bedd80ab,
33823 +
            0x8781e953c61e4998,
33824 +
            0x0590fd2f7ce72a9e,
33825 +
            0xb77ae7f9eb7b1cff,
33826 +
            0x356bf38551827ff9,
33827 +
            0xe677f4079cd4e356,
33828 +
            0x6466e07b262d8050,
33829 +
            0xd68cfaadb1b1b631,
33830 +
            0x549deed10b48d537,
33831 +
            0x7fb7270fa7201c5f,
33832 +
            0xfda633731dd97f59,
33833 +
            0x4f4c29a58a454938,
33834 +
            0xcd5d3dd930bc2a3e,
33835 +
            0x1e413a5bfdeab691,
33836 +
            0x9c502e274713d597,
33837 +
            0x2eba34f1d08fe3f6,
33838 +
            0xacab208d6a7680f0,
33839 +
            0xbc5b1da712b549c3,
33840 +
            0x3e4a09dba84c2ac5,
33841 +
            0x8ca0130d3fd01ca4,
33842 +
            0x0eb1077185297fa2,
33843 +
            0xddad00f3487fe30d,
33844 +
            0x5fbc148ff286800b,
33845 +
            0xed560e59651ab66a,
33846 +
            0x6f471a25dfe3d56c,
33847 +
            0xccb6740d949d240c,
33848 +
            0x4ea760712e64470a,
33849 +
            0xfc4d7aa7b9f8716b,
33850 +
            0x7e5c6edb0301126d,
33851 +
            0xad406959ce578ec2,
33852 +
            0x2f517d2574aeedc4,
33853 +
            0x9dbb67f3e332dba5,
33854 +
            0x1faa738f59cbb8a3,
33855 +
            0x0f5a4ea521087190,
33856 +
            0x8d4b5ad99bf11296,
33857 +
            0x3fa1400f0c6d24f7,
33858 +
            0xbdb05473b69447f1,
33859 +
            0x6eac53f17bc2db5e,
33860 +
            0xecbd478dc13bb858,
33861 +
            0x5e575d5b56a78e39,
33862 +
            0xdc464927ec5eed3f,
33863 +
            0x2d6ca75898cdff92,
33864 +
            0xaf7db32422349c94,
33865 +
            0x1d97a9f2b5a8aaf5,
33866 +
            0x9f86bd8e0f51c9f3,
33867 +
            0x4c9aba0cc207555c,
33868 +
            0xce8bae7078fe365a,
33869 +
            0x7c61b4a6ef62003b,
33870 +
            0xfe70a0da559b633d,
33871 +
            0xee809df02d58aa0e,
33872 +
            0x6c91898c97a1c908,
33873 +
            0xde7b935a003dff69,
33874 +
            0x5c6a8726bac49c6f,
33875 +
            0x8f7680a4779200c0,
33876 +
            0x0d6794d8cd6b63c6,
33877 +
            0xbf8d8e0e5af755a7,
33878 +
            0x3d9c9a72e00e36a1,
33879 +
            0x9e6df45aab70c7c1,
33880 +
            0x1c7ce0261189a4c7,
33881 +
            0xae96faf0861592a6,
33882 +
            0x2c87ee8c3cecf1a0,
33883 +
            0xff9be90ef1ba6d0f,
33884 +
            0x7d8afd724b430e09,
33885 +
            0xcf60e7a4dcdf3868,
33886 +
            0x4d71f3d866265b6e,
33887 +
            0x5d81cef21ee5925d,
33888 +
            0xdf90da8ea41cf15b,
33889 +
            0x6d7ac0583380c73a,
33890 +
            0xef6bd4248979a43c,
33891 +
            0x3c77d3a6442f3893,
33892 +
            0xbe66c7dafed65b95,
33893 +
            0x0c8cdd0c694a6df4,
33894 +
            0x8e9dc970d3b30ef2,
33895 +
            0xda0027a1d8fbdbc5,
33896 +
            0x581133dd6202b8c3,
33897 +
            0xeafb290bf59e8ea2,
33898 +
            0x68ea3d774f67eda4,
33899 +
            0xbbf63af58231710b,
33900 +
            0x39e72e8938c8120d,
33901 +
            0x8b0d345faf54246c,
33902 +
            0x091c202315ad476a,
33903 +
            0x19ec1d096d6e8e59,
33904 +
            0x9bfd0975d797ed5f,
33905 +
            0x291713a3400bdb3e,
33906 +
            0xab0607dffaf2b838,
33907 +
            0x781a005d37a42497,
33908 +
            0xfa0b14218d5d4791,
33909 +
            0x48e10ef71ac171f0,
33910 +
            0xcaf01a8ba03812f6,
33911 +
            0x690174a3eb46e396,
33912 +
            0xeb1060df51bf8090,
33913 +
            0x59fa7a09c623b6f1,
33914 +
            0xdbeb6e757cdad5f7,
33915 +
            0x08f769f7b18c4958,
33916 +
            0x8ae67d8b0b752a5e,
33917 +
            0x380c675d9ce91c3f,
33918 +
            0xba1d732126107f39,
33919 +
            0xaaed4e0b5ed3b60a,
33920 +
            0x28fc5a77e42ad50c,
33921 +
            0x9a1640a173b6e36d,
33922 +
            0x180754ddc94f806b,
33923 +
            0xcb1b535f04191cc4,
33924 +
            0x490a4723bee07fc2,
33925 +
            0xfbe05df5297c49a3,
33926 +
            0x79f1498993852aa5,
33927 +
            0x88dba7f6e7163808,
33928 +
            0x0acab38a5def5b0e,
33929 +
            0xb820a95cca736d6f,
33930 +
            0x3a31bd20708a0e69,
33931 +
            0xe92dbaa2bddc92c6,
33932 +
            0x6b3caede0725f1c0,
33933 +
            0xd9d6b40890b9c7a1,
33934 +
            0x5bc7a0742a40a4a7,
33935 +
            0x4b379d5e52836d94,
33936 +
            0xc9268922e87a0e92,
33937 +
            0x7bcc93f47fe638f3,
33938 +
            0xf9dd8788c51f5bf5,
33939 +
            0x2ac1800a0849c75a,
33940 +
            0xa8d09476b2b0a45c,
33941 +
            0x1a3a8ea0252c923d,
33942 +
            0x982b9adc9fd5f13b,
33943 +
            0x3bdaf4f4d4ab005b,
33944 +
            0xb9cbe0886e52635d,
33945 +
            0x0b21fa5ef9ce553c,
33946 +
            0x8930ee224337363a,
33947 +
            0x5a2ce9a08e61aa95,
33948 +
            0xd83dfddc3498c993,
33949 +
            0x6ad7e70aa304fff2,
33950 +
            0xe8c6f37619fd9cf4,
33951 +
            0xf836ce5c613e55c7,
33952 +
            0x7a27da20dbc736c1,
33953 +
            0xc8cdc0f64c5b00a0,
33954 +
            0x4adcd48af6a263a6,
33955 +
            0x99c0d3083bf4ff09,
33956 +
            0x1bd1c774810d9c0f,
33957 +
            0xa93bdda21691aa6e,
33958 +
            0x2b2ac9deac68c968,
33959 +
        ],
33960 +
        [
33961 +
            0x0000000000000000,
33962 +
            0x373d15f784905d1e,
33963 +
            0x6e7a2bef0920ba3c,
33964 +
            0x59473e188db0e722,
33965 +
            0xdcf457de12417478,
33966 +
            0xebc9422996d12966,
33967 +
            0xb28e7c311b61ce44,
33968 +
            0x85b369c69ff1935a,
33969 +
            0x8d3189ef7c157b9b,
33970 +
            0xba0c9c18f8852685,
33971 +
            0xe34ba2007535c1a7,
33972 +
            0xd476b7f7f1a59cb9,
33973 +
            0x51c5de316e540fe3,
33974 +
            0x66f8cbc6eac452fd,
33975 +
            0x3fbff5de6774b5df,
33976 +
            0x0882e029e3e4e8c1,
33977 +
            0x2eba358da0bd645d,
33978 +
            0x1987207a242d3943,
33979 +
            0x40c01e62a99dde61,
33980 +
            0x77fd0b952d0d837f,
33981 +
            0xf24e6253b2fc1025,
33982 +
            0xc57377a4366c4d3b,
33983 +
            0x9c3449bcbbdcaa19,
33984 +
            0xab095c4b3f4cf707,
33985 +
            0xa38bbc62dca81fc6,
33986 +
            0x94b6a995583842d8,
33987 +
            0xcdf1978dd588a5fa,
33988 +
            0xfacc827a5118f8e4,
33989 +
            0x7f7febbccee96bbe,
33990 +
            0x4842fe4b4a7936a0,
33991 +
            0x1105c053c7c9d182,
33992 +
            0x2638d5a443598c9c,
33993 +
            0x5d746b1b417ac8ba,
33994 +
            0x6a497eecc5ea95a4,
33995 +
            0x330e40f4485a7286,
33996 +
            0x04335503ccca2f98,
33997 +
            0x81803cc5533bbcc2,
33998 +
            0xb6bd2932d7abe1dc,
33999 +
            0xeffa172a5a1b06fe,
34000 +
            0xd8c702ddde8b5be0,
34001 +
            0xd045e2f43d6fb321,
34002 +
            0xe778f703b9ffee3f,
34003 +
            0xbe3fc91b344f091d,
34004 +
            0x8902dcecb0df5403,
34005 +
            0x0cb1b52a2f2ec759,
34006 +
            0x3b8ca0ddabbe9a47,
34007 +
            0x62cb9ec5260e7d65,
34008 +
            0x55f68b32a29e207b,
34009 +
            0x73ce5e96e1c7ace7,
34010 +
            0x44f34b616557f1f9,
34011 +
            0x1db47579e8e716db,
34012 +
            0x2a89608e6c774bc5,
34013 +
            0xaf3a0948f386d89f,
34014 +
            0x98071cbf77168581,
34015 +
            0xc14022a7faa662a3,
34016 +
            0xf67d37507e363fbd,
34017 +
            0xfeffd7799dd2d77c,
34018 +
            0xc9c2c28e19428a62,
34019 +
            0x9085fc9694f26d40,
34020 +
            0xa7b8e9611062305e,
34021 +
            0x220b80a78f93a304,
34022 +
            0x153695500b03fe1a,
34023 +
            0x4c71ab4886b31938,
34024 +
            0x7b4cbebf02234426,
34025 +
            0xbae8d63682f59174,
34026 +
            0x8dd5c3c10665cc6a,
34027 +
            0xd492fdd98bd52b48,
34028 +
            0xe3afe82e0f457656,
34029 +
            0x661c81e890b4e50c,
34030 +
            0x5121941f1424b812,
34031 +
            0x0866aa0799945f30,
34032 +
            0x3f5bbff01d04022e,
34033 +
            0x37d95fd9fee0eaef,
34034 +
            0x00e44a2e7a70b7f1,
34035 +
            0x59a37436f7c050d3,
34036 +
            0x6e9e61c173500dcd,
34037 +
            0xeb2d0807eca19e97,
34038 +
            0xdc101df06831c389,
34039 +
            0x855723e8e58124ab,
34040 +
            0xb26a361f611179b5,
34041 +
            0x9452e3bb2248f529,
34042 +
            0xa36ff64ca6d8a837,
34043 +
            0xfa28c8542b684f15,
34044 +
            0xcd15dda3aff8120b,
34045 +
            0x48a6b46530098151,
34046 +
            0x7f9ba192b499dc4f,
34047 +
            0x26dc9f8a39293b6d,
34048 +
            0x11e18a7dbdb96673,
34049 +
            0x19636a545e5d8eb2,
34050 +
            0x2e5e7fa3dacdd3ac,
34051 +
            0x771941bb577d348e,
34052 +
            0x4024544cd3ed6990,
34053 +
            0xc5973d8a4c1cfaca,
34054 +
            0xf2aa287dc88ca7d4,
34055 +
            0xabed1665453c40f6,
34056 +
            0x9cd00392c1ac1de8,
34057 +
            0xe79cbd2dc38f59ce,
34058 +
            0xd0a1a8da471f04d0,
34059 +
            0x89e696c2caafe3f2,
34060 +
            0xbedb83354e3fbeec,
34061 +
            0x3b68eaf3d1ce2db6,
34062 +
            0x0c55ff04555e70a8,
34063 +
            0x5512c11cd8ee978a,
34064 +
            0x622fd4eb5c7eca94,
34065 +
            0x6aad34c2bf9a2255,
34066 +
            0x5d9021353b0a7f4b,
34067 +
            0x04d71f2db6ba9869,
34068 +
            0x33ea0ada322ac577,
34069 +
            0xb659631caddb562d,
34070 +
            0x816476eb294b0b33,
34071 +
            0xd82348f3a4fbec11,
34072 +
            0xef1e5d04206bb10f,
34073 +
            0xc92688a063323d93,
34074 +
            0xfe1b9d57e7a2608d,
34075 +
            0xa75ca34f6a1287af,
34076 +
            0x9061b6b8ee82dab1,
34077 +
            0x15d2df7e717349eb,
34078 +
            0x22efca89f5e314f5,
34079 +
            0x7ba8f4917853f3d7,
34080 +
            0x4c95e166fcc3aec9,
34081 +
            0x4417014f1f274608,
34082 +
            0x732a14b89bb71b16,
34083 +
            0x2a6d2aa01607fc34,
34084 +
            0x1d503f579297a12a,
34085 +
            0x98e356910d663270,
34086 +
            0xafde436689f66f6e,
34087 +
            0xf6997d7e0446884c,
34088 +
            0xc1a4688980d6d552,
34089 +
            0x41088a3e5d7cb183,
34090 +
            0x76359fc9d9ecec9d,
34091 +
            0x2f72a1d1545c0bbf,
34092 +
            0x184fb426d0cc56a1,
34093 +
            0x9dfcdde04f3dc5fb,
34094 +
            0xaac1c817cbad98e5,
34095 +
            0xf386f60f461d7fc7,
34096 +
            0xc4bbe3f8c28d22d9,
34097 +
            0xcc3903d12169ca18,
34098 +
            0xfb041626a5f99706,
34099 +
            0xa243283e28497024,
34100 +
            0x957e3dc9acd92d3a,
34101 +
            0x10cd540f3328be60,
34102 +
            0x27f041f8b7b8e37e,
34103 +
            0x7eb77fe03a08045c,
34104 +
            0x498a6a17be985942,
34105 +
            0x6fb2bfb3fdc1d5de,
34106 +
            0x588faa44795188c0,
34107 +
            0x01c8945cf4e16fe2,
34108 +
            0x36f581ab707132fc,
34109 +
            0xb346e86def80a1a6,
34110 +
            0x847bfd9a6b10fcb8,
34111 +
            0xdd3cc382e6a01b9a,
34112 +
            0xea01d67562304684,
34113 +
            0xe283365c81d4ae45,
34114 +
            0xd5be23ab0544f35b,
34115 +
            0x8cf91db388f41479,
34116 +
            0xbbc408440c644967,
34117 +
            0x3e7761829395da3d,
34118 +
            0x094a747517058723,
34119 +
            0x500d4a6d9ab56001,
34120 +
            0x67305f9a1e253d1f,
34121 +
            0x1c7ce1251c067939,
34122 +
            0x2b41f4d298962427,
34123 +
            0x7206caca1526c305,
34124 +
            0x453bdf3d91b69e1b,
34125 +
            0xc088b6fb0e470d41,
34126 +
            0xf7b5a30c8ad7505f,
34127 +
            0xaef29d140767b77d,
34128 +
            0x99cf88e383f7ea63,
34129 +
            0x914d68ca601302a2,
34130 +
            0xa6707d3de4835fbc,
34131 +
            0xff3743256933b89e,
34132 +
            0xc80a56d2eda3e580,
34133 +
            0x4db93f14725276da,
34134 +
            0x7a842ae3f6c22bc4,
34135 +
            0x23c314fb7b72cce6,
34136 +
            0x14fe010cffe291f8,
34137 +
            0x32c6d4a8bcbb1d64,
34138 +
            0x05fbc15f382b407a,
34139 +
            0x5cbcff47b59ba758,
34140 +
            0x6b81eab0310bfa46,
34141 +
            0xee328376aefa691c,
34142 +
            0xd90f96812a6a3402,
34143 +
            0x8048a899a7dad320,
34144 +
            0xb775bd6e234a8e3e,
34145 +
            0xbff75d47c0ae66ff,
34146 +
            0x88ca48b0443e3be1,
34147 +
            0xd18d76a8c98edcc3,
34148 +
            0xe6b0635f4d1e81dd,
34149 +
            0x63030a99d2ef1287,
34150 +
            0x543e1f6e567f4f99,
34151 +
            0x0d792176dbcfa8bb,
34152 +
            0x3a4434815f5ff5a5,
34153 +
            0xfbe05c08df8920f7,
34154 +
            0xccdd49ff5b197de9,
34155 +
            0x959a77e7d6a99acb,
34156 +
            0xa2a762105239c7d5,
34157 +
            0x27140bd6cdc8548f,
34158 +
            0x10291e2149580991,
34159 +
            0x496e2039c4e8eeb3,
34160 +
            0x7e5335ce4078b3ad,
34161 +
            0x76d1d5e7a39c5b6c,
34162 +
            0x41ecc010270c0672,
34163 +
            0x18abfe08aabce150,
34164 +
            0x2f96ebff2e2cbc4e,
34165 +
            0xaa258239b1dd2f14,
34166 +
            0x9d1897ce354d720a,
34167 +
            0xc45fa9d6b8fd9528,
34168 +
            0xf362bc213c6dc836,
34169 +
            0xd55a69857f3444aa,
34170 +
            0xe2677c72fba419b4,
34171 +
            0xbb20426a7614fe96,
34172 +
            0x8c1d579df284a388,
34173 +
            0x09ae3e5b6d7530d2,
34174 +
            0x3e932bace9e56dcc,
34175 +
            0x67d415b464558aee,
34176 +
            0x50e90043e0c5d7f0,
34177 +
            0x586be06a03213f31,
34178 +
            0x6f56f59d87b1622f,
34179 +
            0x3611cb850a01850d,
34180 +
            0x012cde728e91d813,
34181 +
            0x849fb7b411604b49,
34182 +
            0xb3a2a24395f01657,
34183 +
            0xeae59c5b1840f175,
34184 +
            0xddd889ac9cd0ac6b,
34185 +
            0xa69437139ef3e84d,
34186 +
            0x91a922e41a63b553,
34187 +
            0xc8ee1cfc97d35271,
34188 +
            0xffd3090b13430f6f,
34189 +
            0x7a6060cd8cb29c35,
34190 +
            0x4d5d753a0822c12b,
34191 +
            0x141a4b2285922609,
34192 +
            0x23275ed501027b17,
34193 +
            0x2ba5befce2e693d6,
34194 +
            0x1c98ab0b6676cec8,
34195 +
            0x45df9513ebc629ea,
34196 +
            0x72e280e46f5674f4,
34197 +
            0xf751e922f0a7e7ae,
34198 +
            0xc06cfcd57437bab0,
34199 +
            0x992bc2cdf9875d92,
34200 +
            0xae16d73a7d17008c,
34201 +
            0x882e029e3e4e8c10,
34202 +
            0xbf131769baded10e,
34203 +
            0xe6542971376e362c,
34204 +
            0xd1693c86b3fe6b32,
34205 +
            0x54da55402c0ff868,
34206 +
            0x63e740b7a89fa576,
34207 +
            0x3aa07eaf252f4254,
34208 +
            0x0d9d6b58a1bf1f4a,
34209 +
            0x051f8b71425bf78b,
34210 +
            0x32229e86c6cbaa95,
34211 +
            0x6b65a09e4b7b4db7,
34212 +
            0x5c58b569cfeb10a9,
34213 +
            0xd9ebdcaf501a83f3,
34214 +
            0xeed6c958d48adeed,
34215 +
            0xb791f740593a39cf,
34216 +
            0x80ace2b7ddaa64d1,
34217 +
        ],
34218 +
        [
34219 +
            0x0000000000000000,
34220 +
            0xe9742a79ef04a5d4,
34221 +
            0xe63172a0869ed8c3,
34222 +
            0x0f4558d9699a7d17,
34223 +
            0xf8bbc31255aa22ed,
34224 +
            0x11cfe96bbaae8739,
34225 +
            0x1e8ab1b2d334fa2e,
34226 +
            0xf7fe9bcb3c305ffa,
34227 +
            0xc5aea077f3c3d6b1,
34228 +
            0x2cda8a0e1cc77365,
34229 +
            0x239fd2d7755d0e72,
34230 +
            0xcaebf8ae9a59aba6,
34231 +
            0x3d156365a669f45c,
34232 +
            0xd461491c496d5188,
34233 +
            0xdb2411c520f72c9f,
34234 +
            0x32503bbccff3894b,
34235 +
            0xbf8466bcbf103e09,
34236 +
            0x56f04cc550149bdd,
34237 +
            0x59b5141c398ee6ca,
34238 +
            0xb0c13e65d68a431e,
34239 +
            0x473fa5aeeaba1ce4,
34240 +
            0xae4b8fd705beb930,
34241 +
            0xa10ed70e6c24c427,
34242 +
            0x487afd77832061f3,
34243 +
            0x7a2ac6cb4cd3e8b8,
34244 +
            0x935eecb2a3d74d6c,
34245 +
            0x9c1bb46bca4d307b,
34246 +
            0x756f9e12254995af,
34247 +
            0x829105d91979ca55,
34248 +
            0x6be52fa0f67d6f81,
34249 +
            0x64a077799fe71296,
34250 +
            0x8dd45d0070e3b742,
34251 +
            0x4bd1eb2a26b7ef79,
34252 +
            0xa2a5c153c9b34aad,
34253 +
            0xade0998aa02937ba,
34254 +
            0x4494b3f34f2d926e,
34255 +
            0xb36a2838731dcd94,
34256 +
            0x5a1e02419c196840,
34257 +
            0x555b5a98f5831557,
34258 +
            0xbc2f70e11a87b083,
34259 +
            0x8e7f4b5dd57439c8,
34260 +
            0x670b61243a709c1c,
34261 +
            0x684e39fd53eae10b,
34262 +
            0x813a1384bcee44df,
34263 +
            0x76c4884f80de1b25,
34264 +
            0x9fb0a2366fdabef1,
34265 +
            0x90f5faef0640c3e6,
34266 +
            0x7981d096e9446632,
34267 +
            0xf4558d9699a7d170,
34268 +
            0x1d21a7ef76a374a4,
34269 +
            0x1264ff361f3909b3,
34270 +
            0xfb10d54ff03dac67,
34271 +
            0x0cee4e84cc0df39d,
34272 +
            0xe59a64fd23095649,
34273 +
            0xeadf3c244a932b5e,
34274 +
            0x03ab165da5978e8a,
34275 +
            0x31fb2de16a6407c1,
34276 +
            0xd88f07988560a215,
34277 +
            0xd7ca5f41ecfadf02,
34278 +
            0x3ebe753803fe7ad6,
34279 +
            0xc940eef33fce252c,
34280 +
            0x2034c48ad0ca80f8,
34281 +
            0x2f719c53b950fdef,
34282 +
            0xc605b62a5654583b,
34283 +
            0x97a3d6544d6fdef2,
34284 +
            0x7ed7fc2da26b7b26,
34285 +
            0x7192a4f4cbf10631,
34286 +
            0x98e68e8d24f5a3e5,
34287 +
            0x6f18154618c5fc1f,
34288 +
            0x866c3f3ff7c159cb,
34289 +
            0x892967e69e5b24dc,
34290 +
            0x605d4d9f715f8108,
34291 +
            0x520d7623beac0843,
34292 +
            0xbb795c5a51a8ad97,
34293 +
            0xb43c04833832d080,
34294 +
            0x5d482efad7367554,
34295 +
            0xaab6b531eb062aae,
34296 +
            0x43c29f4804028f7a,
34297 +
            0x4c87c7916d98f26d,
34298 +
            0xa5f3ede8829c57b9,
34299 +
            0x2827b0e8f27fe0fb,
34300 +
            0xc1539a911d7b452f,
34301 +
            0xce16c24874e13838,
34302 +
            0x2762e8319be59dec,
34303 +
            0xd09c73faa7d5c216,
34304 +
            0x39e8598348d167c2,
34305 +
            0x36ad015a214b1ad5,
34306 +
            0xdfd92b23ce4fbf01,
34307 +
            0xed89109f01bc364a,
34308 +
            0x04fd3ae6eeb8939e,
34309 +
            0x0bb8623f8722ee89,
34310 +
            0xe2cc484668264b5d,
34311 +
            0x1532d38d541614a7,
34312 +
            0xfc46f9f4bb12b173,
34313 +
            0xf303a12dd288cc64,
34314 +
            0x1a778b543d8c69b0,
34315 +
            0xdc723d7e6bd8318b,
34316 +
            0x3506170784dc945f,
34317 +
            0x3a434fdeed46e948,
34318 +
            0xd33765a702424c9c,
34319 +
            0x24c9fe6c3e721366,
34320 +
            0xcdbdd415d176b6b2,
34321 +
            0xc2f88cccb8eccba5,
34322 +
            0x2b8ca6b557e86e71,
34323 +
            0x19dc9d09981be73a,
34324 +
            0xf0a8b770771f42ee,
34325 +
            0xffedefa91e853ff9,
34326 +
            0x1699c5d0f1819a2d,
34327 +
            0xe1675e1bcdb1c5d7,
34328 +
            0x0813746222b56003,
34329 +
            0x07562cbb4b2f1d14,
34330 +
            0xee2206c2a42bb8c0,
34331 +
            0x63f65bc2d4c80f82,
34332 +
            0x8a8271bb3bccaa56,
34333 +
            0x85c729625256d741,
34334 +
            0x6cb3031bbd527295,
34335 +
            0x9b4d98d081622d6f,
34336 +
            0x7239b2a96e6688bb,
34337 +
            0x7d7cea7007fcf5ac,
34338 +
            0x9408c009e8f85078,
34339 +
            0xa658fbb5270bd933,
34340 +
            0x4f2cd1ccc80f7ce7,
34341 +
            0x40698915a19501f0,
34342 +
            0xa91da36c4e91a424,
34343 +
            0x5ee338a772a1fbde,
34344 +
            0xb79712de9da55e0a,
34345 +
            0xb8d24a07f43f231d,
34346 +
            0x51a6607e1b3b86c9,
34347 +
            0x1b9e8afbc2482e8f,
34348 +
            0xf2eaa0822d4c8b5b,
34349 +
            0xfdaff85b44d6f64c,
34350 +
            0x14dbd222abd25398,
34351 +
            0xe32549e997e20c62,
34352 +
            0x0a51639078e6a9b6,
34353 +
            0x05143b49117cd4a1,
34354 +
            0xec601130fe787175,
34355 +
            0xde302a8c318bf83e,
34356 +
            0x374400f5de8f5dea,
34357 +
            0x3801582cb71520fd,
34358 +
            0xd175725558118529,
34359 +
            0x268be99e6421dad3,
34360 +
            0xcfffc3e78b257f07,
34361 +
            0xc0ba9b3ee2bf0210,
34362 +
            0x29ceb1470dbba7c4,
34363 +
            0xa41aec477d581086,
34364 +
            0x4d6ec63e925cb552,
34365 +
            0x422b9ee7fbc6c845,
34366 +
            0xab5fb49e14c26d91,
34367 +
            0x5ca12f5528f2326b,
34368 +
            0xb5d5052cc7f697bf,
34369 +
            0xba905df5ae6ceaa8,
34370 +
            0x53e4778c41684f7c,
34371 +
            0x61b44c308e9bc637,
34372 +
            0x88c06649619f63e3,
34373 +
            0x87853e9008051ef4,
34374 +
            0x6ef114e9e701bb20,
34375 +
            0x990f8f22db31e4da,
34376 +
            0x707ba55b3435410e,
34377 +
            0x7f3efd825daf3c19,
34378 +
            0x964ad7fbb2ab99cd,
34379 +
            0x504f61d1e4ffc1f6,
34380 +
            0xb93b4ba80bfb6422,
34381 +
            0xb67e137162611935,
34382 +
            0x5f0a39088d65bce1,
34383 +
            0xa8f4a2c3b155e31b,
34384 +
            0x418088ba5e5146cf,
34385 +
            0x4ec5d06337cb3bd8,
34386 +
            0xa7b1fa1ad8cf9e0c,
34387 +
            0x95e1c1a6173c1747,
34388 +
            0x7c95ebdff838b293,
34389 +
            0x73d0b30691a2cf84,
34390 +
            0x9aa4997f7ea66a50,
34391 +
            0x6d5a02b4429635aa,
34392 +
            0x842e28cdad92907e,
34393 +
            0x8b6b7014c408ed69,
34394 +
            0x621f5a6d2b0c48bd,
34395 +
            0xefcb076d5befffff,
34396 +
            0x06bf2d14b4eb5a2b,
34397 +
            0x09fa75cddd71273c,
34398 +
            0xe08e5fb4327582e8,
34399 +
            0x1770c47f0e45dd12,
34400 +
            0xfe04ee06e14178c6,
34401 +
            0xf141b6df88db05d1,
34402 +
            0x18359ca667dfa005,
34403 +
            0x2a65a71aa82c294e,
34404 +
            0xc3118d6347288c9a,
34405 +
            0xcc54d5ba2eb2f18d,
34406 +
            0x2520ffc3c1b65459,
34407 +
            0xd2de6408fd860ba3,
34408 +
            0x3baa4e711282ae77,
34409 +
            0x34ef16a87b18d360,
34410 +
            0xdd9b3cd1941c76b4,
34411 +
            0x8c3d5caf8f27f07d,
34412 +
            0x654976d6602355a9,
34413 +
            0x6a0c2e0f09b928be,
34414 +
            0x83780476e6bd8d6a,
34415 +
            0x74869fbdda8dd290,
34416 +
            0x9df2b5c435897744,
34417 +
            0x92b7ed1d5c130a53,
34418 +
            0x7bc3c764b317af87,
34419 +
            0x4993fcd87ce426cc,
34420 +
            0xa0e7d6a193e08318,
34421 +
            0xafa28e78fa7afe0f,
34422 +
            0x46d6a401157e5bdb,
34423 +
            0xb1283fca294e0421,
34424 +
            0x585c15b3c64aa1f5,
34425 +
            0x57194d6aafd0dce2,
34426 +
            0xbe6d671340d47936,
34427 +
            0x33b93a133037ce74,
34428 +
            0xdacd106adf336ba0,
34429 +
            0xd58848b3b6a916b7,
34430 +
            0x3cfc62ca59adb363,
34431 +
            0xcb02f901659dec99,
34432 +
            0x2276d3788a99494d,
34433 +
            0x2d338ba1e303345a,
34434 +
            0xc447a1d80c07918e,
34435 +
            0xf6179a64c3f418c5,
34436 +
            0x1f63b01d2cf0bd11,
34437 +
            0x1026e8c4456ac006,
34438 +
            0xf952c2bdaa6e65d2,
34439 +
            0x0eac5976965e3a28,
34440 +
            0xe7d8730f795a9ffc,
34441 +
            0xe89d2bd610c0e2eb,
34442 +
            0x01e901afffc4473f,
34443 +
            0xc7ecb785a9901f04,
34444 +
            0x2e989dfc4694bad0,
34445 +
            0x21ddc5252f0ec7c7,
34446 +
            0xc8a9ef5cc00a6213,
34447 +
            0x3f577497fc3a3de9,
34448 +
            0xd6235eee133e983d,
34449 +
            0xd96606377aa4e52a,
34450 +
            0x30122c4e95a040fe,
34451 +
            0x024217f25a53c9b5,
34452 +
            0xeb363d8bb5576c61,
34453 +
            0xe4736552dccd1176,
34454 +
            0x0d074f2b33c9b4a2,
34455 +
            0xfaf9d4e00ff9eb58,
34456 +
            0x138dfe99e0fd4e8c,
34457 +
            0x1cc8a6408967339b,
34458 +
            0xf5bc8c396663964f,
34459 +
            0x7868d1391680210d,
34460 +
            0x911cfb40f98484d9,
34461 +
            0x9e59a399901ef9ce,
34462 +
            0x772d89e07f1a5c1a,
34463 +
            0x80d3122b432a03e0,
34464 +
            0x69a73852ac2ea634,
34465 +
            0x66e2608bc5b4db23,
34466 +
            0x8f964af22ab07ef7,
34467 +
            0xbdc6714ee543f7bc,
34468 +
            0x54b25b370a475268,
34469 +
            0x5bf703ee63dd2f7f,
34470 +
            0xb28329978cd98aab,
34471 +
            0x457db25cb0e9d551,
34472 +
            0xac0998255fed7085,
34473 +
            0xa34cc0fc36770d92,
34474 +
            0x4a38ea85d973a846,
34475 +
        ],
34476 +
        [
34477 +
            0x0000000000000000,
34478 +
            0xfc5d27f6bf353971,
34479 +
            0xcc6369be26fde189,
34480 +
            0x303e4e4899c8d8f8,
34481 +
            0xac1ff52f156c5079,
34482 +
            0x5042d2d9aa596908,
34483 +
            0x607c9c913391b1f0,
34484 +
            0x9c21bb678ca48881,
34485 +
            0x6ce6cc0d724f3399,
34486 +
            0x90bbebfbcd7a0ae8,
34487 +
            0xa085a5b354b2d210,
34488 +
            0x5cd88245eb87eb61,
34489 +
            0xc0f93922672363e0,
34490 +
            0x3ca41ed4d8165a91,
34491 +
            0x0c9a509c41de8269,
34492 +
            0xf0c7776afeebbb18,
34493 +
            0xd9cd981ae49e6732,
34494 +
            0x2590bfec5bab5e43,
34495 +
            0x15aef1a4c26386bb,
34496 +
            0xe9f3d6527d56bfca,
34497 +
            0x75d26d35f1f2374b,
34498 +
            0x898f4ac34ec70e3a,
34499 +
            0xb9b1048bd70fd6c2,
34500 +
            0x45ec237d683aefb3,
34501 +
            0xb52b541796d154ab,
34502 +
            0x497673e129e46dda,
34503 +
            0x79483da9b02cb522,
34504 +
            0x85151a5f0f198c53,
34505 +
            0x1934a13883bd04d2,
34506 +
            0xe56986ce3c883da3,
34507 +
            0xd557c886a540e55b,
34508 +
            0x290aef701a75dc2a,
34509 +
            0x8742166691ab5d0f,
34510 +
            0x7b1f31902e9e647e,
34511 +
            0x4b217fd8b756bc86,
34512 +
            0xb77c582e086385f7,
34513 +
            0x2b5de34984c70d76,
34514 +
            0xd700c4bf3bf23407,
34515 +
            0xe73e8af7a23aecff,
34516 +
            0x1b63ad011d0fd58e,
34517 +
            0xeba4da6be3e46e96,
34518 +
            0x17f9fd9d5cd157e7,
34519 +
            0x27c7b3d5c5198f1f,
34520 +
            0xdb9a94237a2cb66e,
34521 +
            0x47bb2f44f6883eef,
34522 +
            0xbbe608b249bd079e,
34523 +
            0x8bd846fad075df66,
34524 +
            0x7785610c6f40e617,
34525 +
            0x5e8f8e7c75353a3d,
34526 +
            0xa2d2a98aca00034c,
34527 +
            0x92ece7c253c8dbb4,
34528 +
            0x6eb1c034ecfde2c5,
34529 +
            0xf2907b5360596a44,
34530 +
            0x0ecd5ca5df6c5335,
34531 +
            0x3ef312ed46a48bcd,
34532 +
            0xc2ae351bf991b2bc,
34533 +
            0x32694271077a09a4,
34534 +
            0xce346587b84f30d5,
34535 +
            0xfe0a2bcf2187e82d,
34536 +
            0x02570c399eb2d15c,
34537 +
            0x9e76b75e121659dd,
34538 +
            0x622b90a8ad2360ac,
34539 +
            0x5215dee034ebb854,
34540 +
            0xae48f9168bde8125,
34541 +
            0x3a5d0a9e7bc12975,
34542 +
            0xc6002d68c4f41004,
34543 +
            0xf63e63205d3cc8fc,
34544 +
            0x0a6344d6e209f18d,
34545 +
            0x9642ffb16ead790c,
34546 +
            0x6a1fd847d198407d,
34547 +
            0x5a21960f48509885,
34548 +
            0xa67cb1f9f765a1f4,
34549 +
            0x56bbc693098e1aec,
34550 +
            0xaae6e165b6bb239d,
34551 +
            0x9ad8af2d2f73fb65,
34552 +
            0x668588db9046c214,
34553 +
            0xfaa433bc1ce24a95,
34554 +
            0x06f9144aa3d773e4,
34555 +
            0x36c75a023a1fab1c,
34556 +
            0xca9a7df4852a926d,
34557 +
            0xe39092849f5f4e47,
34558 +
            0x1fcdb572206a7736,
34559 +
            0x2ff3fb3ab9a2afce,
34560 +
            0xd3aedccc069796bf,
34561 +
            0x4f8f67ab8a331e3e,
34562 +
            0xb3d2405d3506274f,
34563 +
            0x83ec0e15acceffb7,
34564 +
            0x7fb129e313fbc6c6,
34565 +
            0x8f765e89ed107dde,
34566 +
            0x732b797f522544af,
34567 +
            0x43153737cbed9c57,
34568 +
            0xbf4810c174d8a526,
34569 +
            0x2369aba6f87c2da7,
34570 +
            0xdf348c50474914d6,
34571 +
            0xef0ac218de81cc2e,
34572 +
            0x1357e5ee61b4f55f,
34573 +
            0xbd1f1cf8ea6a747a,
34574 +
            0x41423b0e555f4d0b,
34575 +
            0x717c7546cc9795f3,
34576 +
            0x8d2152b073a2ac82,
34577 +
            0x1100e9d7ff062403,
34578 +
            0xed5dce2140331d72,
34579 +
            0xdd638069d9fbc58a,
34580 +
            0x213ea79f66cefcfb,
34581 +
            0xd1f9d0f5982547e3,
34582 +
            0x2da4f70327107e92,
34583 +
            0x1d9ab94bbed8a66a,
34584 +
            0xe1c79ebd01ed9f1b,
34585 +
            0x7de625da8d49179a,
34586 +
            0x81bb022c327c2eeb,
34587 +
            0xb1854c64abb4f613,
34588 +
            0x4dd86b921481cf62,
34589 +
            0x64d284e20ef41348,
34590 +
            0x988fa314b1c12a39,
34591 +
            0xa8b1ed5c2809f2c1,
34592 +
            0x54eccaaa973ccbb0,
34593 +
            0xc8cd71cd1b984331,
34594 +
            0x3490563ba4ad7a40,
34595 +
            0x04ae18733d65a2b8,
34596 +
            0xf8f33f8582509bc9,
34597 +
            0x083448ef7cbb20d1,
34598 +
            0xf4696f19c38e19a0,
34599 +
            0xc45721515a46c158,
34600 +
            0x380a06a7e573f829,
34601 +
            0xa42bbdc069d770a8,
34602 +
            0x58769a36d6e249d9,
34603 +
            0x6848d47e4f2a9121,
34604 +
            0x9415f388f01fa850,
34605 +
            0x74ba153cf78252ea,
34606 +
            0x88e732ca48b76b9b,
34607 +
            0xb8d97c82d17fb363,
34608 +
            0x44845b746e4a8a12,
34609 +
            0xd8a5e013e2ee0293,
34610 +
            0x24f8c7e55ddb3be2,
34611 +
            0x14c689adc413e31a,
34612 +
            0xe89bae5b7b26da6b,
34613 +
            0x185cd93185cd6173,
34614 +
            0xe401fec73af85802,
34615 +
            0xd43fb08fa33080fa,
34616 +
            0x286297791c05b98b,
34617 +
            0xb4432c1e90a1310a,
34618 +
            0x481e0be82f94087b,
34619 +
            0x782045a0b65cd083,
34620 +
            0x847d62560969e9f2,
34621 +
            0xad778d26131c35d8,
34622 +
            0x512aaad0ac290ca9,
34623 +
            0x6114e49835e1d451,
34624 +
            0x9d49c36e8ad4ed20,
34625 +
            0x01687809067065a1,
34626 +
            0xfd355fffb9455cd0,
34627 +
            0xcd0b11b7208d8428,
34628 +
            0x315636419fb8bd59,
34629 +
            0xc191412b61530641,
34630 +
            0x3dcc66ddde663f30,
34631 +
            0x0df2289547aee7c8,
34632 +
            0xf1af0f63f89bdeb9,
34633 +
            0x6d8eb404743f5638,
34634 +
            0x91d393f2cb0a6f49,
34635 +
            0xa1edddba52c2b7b1,
34636 +
            0x5db0fa4cedf78ec0,
34637 +
            0xf3f8035a66290fe5,
34638 +
            0x0fa524acd91c3694,
34639 +
            0x3f9b6ae440d4ee6c,
34640 +
            0xc3c64d12ffe1d71d,
34641 +
            0x5fe7f67573455f9c,
34642 +
            0xa3bad183cc7066ed,
34643 +
            0x93849fcb55b8be15,
34644 +
            0x6fd9b83dea8d8764,
34645 +
            0x9f1ecf5714663c7c,
34646 +
            0x6343e8a1ab53050d,
34647 +
            0x537da6e9329bddf5,
34648 +
            0xaf20811f8daee484,
34649 +
            0x33013a78010a6c05,
34650 +
            0xcf5c1d8ebe3f5574,
34651 +
            0xff6253c627f78d8c,
34652 +
            0x033f743098c2b4fd,
34653 +
            0x2a359b4082b768d7,
34654 +
            0xd668bcb63d8251a6,
34655 +
            0xe656f2fea44a895e,
34656 +
            0x1a0bd5081b7fb02f,
34657 +
            0x862a6e6f97db38ae,
34658 +
            0x7a77499928ee01df,
34659 +
            0x4a4907d1b126d927,
34660 +
            0xb61420270e13e056,
34661 +
            0x46d3574df0f85b4e,
34662 +
            0xba8e70bb4fcd623f,
34663 +
            0x8ab03ef3d605bac7,
34664 +
            0x76ed1905693083b6,
34665 +
            0xeacca262e5940b37,
34666 +
            0x169185945aa13246,
34667 +
            0x26afcbdcc369eabe,
34668 +
            0xdaf2ec2a7c5cd3cf,
34669 +
            0x4ee71fa28c437b9f,
34670 +
            0xb2ba3854337642ee,
34671 +
            0x8284761caabe9a16,
34672 +
            0x7ed951ea158ba367,
34673 +
            0xe2f8ea8d992f2be6,
34674 +
            0x1ea5cd7b261a1297,
34675 +
            0x2e9b8333bfd2ca6f,
34676 +
            0xd2c6a4c500e7f31e,
34677 +
            0x2201d3affe0c4806,
34678 +
            0xde5cf45941397177,
34679 +
            0xee62ba11d8f1a98f,
34680 +
            0x123f9de767c490fe,
34681 +
            0x8e1e2680eb60187f,
34682 +
            0x724301765455210e,
34683 +
            0x427d4f3ecd9df9f6,
34684 +
            0xbe2068c872a8c087,
34685 +
            0x972a87b868dd1cad,
34686 +
            0x6b77a04ed7e825dc,
34687 +
            0x5b49ee064e20fd24,
34688 +
            0xa714c9f0f115c455,
34689 +
            0x3b3572977db14cd4,
34690 +
            0xc7685561c28475a5,
34691 +
            0xf7561b295b4cad5d,
34692 +
            0x0b0b3cdfe479942c,
34693 +
            0xfbcc4bb51a922f34,
34694 +
            0x07916c43a5a71645,
34695 +
            0x37af220b3c6fcebd,
34696 +
            0xcbf205fd835af7cc,
34697 +
            0x57d3be9a0ffe7f4d,
34698 +
            0xab8e996cb0cb463c,
34699 +
            0x9bb0d72429039ec4,
34700 +
            0x67edf0d29636a7b5,
34701 +
            0xc9a509c41de82690,
34702 +
            0x35f82e32a2dd1fe1,
34703 +
            0x05c6607a3b15c719,
34704 +
            0xf99b478c8420fe68,
34705 +
            0x65bafceb088476e9,
34706 +
            0x99e7db1db7b14f98,
34707 +
            0xa9d995552e799760,
34708 +
            0x5584b2a3914cae11,
34709 +
            0xa543c5c96fa71509,
34710 +
            0x591ee23fd0922c78,
34711 +
            0x6920ac77495af480,
34712 +
            0x957d8b81f66fcdf1,
34713 +
            0x095c30e67acb4570,
34714 +
            0xf5011710c5fe7c01,
34715 +
            0xc53f59585c36a4f9,
34716 +
            0x39627eaee3039d88,
34717 +
            0x106891def97641a2,
34718 +
            0xec35b628464378d3,
34719 +
            0xdc0bf860df8ba02b,
34720 +
            0x2056df9660be995a,
34721 +
            0xbc7764f1ec1a11db,
34722 +
            0x402a4307532f28aa,
34723 +
            0x70140d4fcae7f052,
34724 +
            0x8c492ab975d2c923,
34725 +
            0x7c8e5dd38b39723b,
34726 +
            0x80d37a25340c4b4a,
34727 +
            0xb0ed346dadc493b2,
34728 +
            0x4cb0139b12f1aac3,
34729 +
            0xd091a8fc9e552242,
34730 +
            0x2ccc8f0a21601b33,
34731 +
            0x1cf2c142b8a8c3cb,
34732 +
            0xe0afe6b4079dfaba,
34733 +
        ],
34734 +
        [
34735 +
            0x0000000000000000,
34736 +
            0x21e9761e252621ac,
34737 +
            0x43d2ec3c4a4c4358,
34738 +
            0x623b9a226f6a62f4,
34739 +
            0x87a5d878949886b0,
34740 +
            0xa64cae66b1bea71c,
34741 +
            0xc4773444ded4c5e8,
34742 +
            0xe59e425afbf2e444,
34743 +
            0x3b9296a271a69e0b,
34744 +
            0x1a7be0bc5480bfa7,
34745 +
            0x78407a9e3beadd53,
34746 +
            0x59a90c801eccfcff,
34747 +
            0xbc374edae53e18bb,
34748 +
            0x9dde38c4c0183917,
34749 +
            0xffe5a2e6af725be3,
34750 +
            0xde0cd4f88a547a4f,
34751 +
            0x77252d44e34d3c16,
34752 +
            0x56cc5b5ac66b1dba,
34753 +
            0x34f7c178a9017f4e,
34754 +
            0x151eb7668c275ee2,
34755 +
            0xf080f53c77d5baa6,
34756 +
            0xd169832252f39b0a,
34757 +
            0xb35219003d99f9fe,
34758 +
            0x92bb6f1e18bfd852,
34759 +
            0x4cb7bbe692eba21d,
34760 +
            0x6d5ecdf8b7cd83b1,
34761 +
            0x0f6557dad8a7e145,
34762 +
            0x2e8c21c4fd81c0e9,
34763 +
            0xcb12639e067324ad,
34764 +
            0xeafb158023550501,
34765 +
            0x88c08fa24c3f67f5,
34766 +
            0xa929f9bc69194659,
34767 +
            0xee4a5a89c69a782c,
34768 +
            0xcfa32c97e3bc5980,
34769 +
            0xad98b6b58cd63b74,
34770 +
            0x8c71c0aba9f01ad8,
34771 +
            0x69ef82f15202fe9c,
34772 +
            0x4806f4ef7724df30,
34773 +
            0x2a3d6ecd184ebdc4,
34774 +
            0x0bd418d33d689c68,
34775 +
            0xd5d8cc2bb73ce627,
34776 +
            0xf431ba35921ac78b,
34777 +
            0x960a2017fd70a57f,
34778 +
            0xb7e35609d85684d3,
34779 +
            0x527d145323a46097,
34780 +
            0x7394624d0682413b,
34781 +
            0x11aff86f69e823cf,
34782 +
            0x30468e714cce0263,
34783 +
            0x996f77cd25d7443a,
34784 +
            0xb88601d300f16596,
34785 +
            0xdabd9bf16f9b0762,
34786 +
            0xfb54edef4abd26ce,
34787 +
            0x1ecaafb5b14fc28a,
34788 +
            0x3f23d9ab9469e326,
34789 +
            0x5d184389fb0381d2,
34790 +
            0x7cf13597de25a07e,
34791 +
            0xa2fde16f5471da31,
34792 +
            0x831497717157fb9d,
34793 +
            0xe12f0d531e3d9969,
34794 +
            0xc0c67b4d3b1bb8c5,
34795 +
            0x25583917c0e95c81,
34796 +
            0x04b14f09e5cf7d2d,
34797 +
            0x668ad52b8aa51fd9,
34798 +
            0x4763a335af833e75,
34799 +
            0xe84d9340d5a36333,
34800 +
            0xc9a4e55ef085429f,
34801 +
            0xab9f7f7c9fef206b,
34802 +
            0x8a760962bac901c7,
34803 +
            0x6fe84b38413be583,
34804 +
            0x4e013d26641dc42f,
34805 +
            0x2c3aa7040b77a6db,
34806 +
            0x0dd3d11a2e518777,
34807 +
            0xd3df05e2a405fd38,
34808 +
            0xf23673fc8123dc94,
34809 +
            0x900de9deee49be60,
34810 +
            0xb1e49fc0cb6f9fcc,
34811 +
            0x547add9a309d7b88,
34812 +
            0x7593ab8415bb5a24,
34813 +
            0x17a831a67ad138d0,
34814 +
            0x364147b85ff7197c,
34815 +
            0x9f68be0436ee5f25,
34816 +
            0xbe81c81a13c87e89,
34817 +
            0xdcba52387ca21c7d,
34818 +
            0xfd53242659843dd1,
34819 +
            0x18cd667ca276d995,
34820 +
            0x392410628750f839,
34821 +
            0x5b1f8a40e83a9acd,
34822 +
            0x7af6fc5ecd1cbb61,
34823 +
            0xa4fa28a64748c12e,
34824 +
            0x85135eb8626ee082,
34825 +
            0xe728c49a0d048276,
34826 +
            0xc6c1b2842822a3da,
34827 +
            0x235ff0ded3d0479e,
34828 +
            0x02b686c0f6f66632,
34829 +
            0x608d1ce2999c04c6,
34830 +
            0x41646afcbcba256a,
34831 +
            0x0607c9c913391b1f,
34832 +
            0x27eebfd7361f3ab3,
34833 +
            0x45d525f559755847,
34834 +
            0x643c53eb7c5379eb,
34835 +
            0x81a211b187a19daf,
34836 +
            0xa04b67afa287bc03,
34837 +
            0xc270fd8dcdeddef7,
34838 +
            0xe3998b93e8cbff5b,
34839 +
            0x3d955f6b629f8514,
34840 +
            0x1c7c297547b9a4b8,
34841 +
            0x7e47b35728d3c64c,
34842 +
            0x5faec5490df5e7e0,
34843 +
            0xba308713f60703a4,
34844 +
            0x9bd9f10dd3212208,
34845 +
            0xf9e26b2fbc4b40fc,
34846 +
            0xd80b1d31996d6150,
34847 +
            0x7122e48df0742709,
34848 +
            0x50cb9293d55206a5,
34849 +
            0x32f008b1ba386451,
34850 +
            0x13197eaf9f1e45fd,
34851 +
            0xf6873cf564eca1b9,
34852 +
            0xd76e4aeb41ca8015,
34853 +
            0xb555d0c92ea0e2e1,
34854 +
            0x94bca6d70b86c34d,
34855 +
            0x4ab0722f81d2b902,
34856 +
            0x6b590431a4f498ae,
34857 +
            0x09629e13cb9efa5a,
34858 +
            0x288be80deeb8dbf6,
34859 +
            0xcd15aa57154a3fb2,
34860 +
            0xecfcdc49306c1e1e,
34861 +
            0x8ec7466b5f067cea,
34862 +
            0xaf2e30757a205d46,
34863 +
            0xe44200d2f3d1550d,
34864 +
            0xc5ab76ccd6f774a1,
34865 +
            0xa790eceeb99d1655,
34866 +
            0x86799af09cbb37f9,
34867 +
            0x63e7d8aa6749d3bd,
34868 +
            0x420eaeb4426ff211,
34869 +
            0x203534962d0590e5,
34870 +
            0x01dc42880823b149,
34871 +
            0xdfd096708277cb06,
34872 +
            0xfe39e06ea751eaaa,
34873 +
            0x9c027a4cc83b885e,
34874 +
            0xbdeb0c52ed1da9f2,
34875 +
            0x58754e0816ef4db6,
34876 +
            0x799c381633c96c1a,
34877 +
            0x1ba7a2345ca30eee,
34878 +
            0x3a4ed42a79852f42,
34879 +
            0x93672d96109c691b,
34880 +
            0xb28e5b8835ba48b7,
34881 +
            0xd0b5c1aa5ad02a43,
34882 +
            0xf15cb7b47ff60bef,
34883 +
            0x14c2f5ee8404efab,
34884 +
            0x352b83f0a122ce07,
34885 +
            0x571019d2ce48acf3,
34886 +
            0x76f96fcceb6e8d5f,
34887 +
            0xa8f5bb34613af710,
34888 +
            0x891ccd2a441cd6bc,
34889 +
            0xeb2757082b76b448,
34890 +
            0xcace21160e5095e4,
34891 +
            0x2f50634cf5a271a0,
34892 +
            0x0eb91552d084500c,
34893 +
            0x6c828f70bfee32f8,
34894 +
            0x4d6bf96e9ac81354,
34895 +
            0x0a085a5b354b2d21,
34896 +
            0x2be12c45106d0c8d,
34897 +
            0x49dab6677f076e79,
34898 +
            0x6833c0795a214fd5,
34899 +
            0x8dad8223a1d3ab91,
34900 +
            0xac44f43d84f58a3d,
34901 +
            0xce7f6e1feb9fe8c9,
34902 +
            0xef961801ceb9c965,
34903 +
            0x319accf944edb32a,
34904 +
            0x1073bae761cb9286,
34905 +
            0x724820c50ea1f072,
34906 +
            0x53a156db2b87d1de,
34907 +
            0xb63f1481d075359a,
34908 +
            0x97d6629ff5531436,
34909 +
            0xf5edf8bd9a3976c2,
34910 +
            0xd4048ea3bf1f576e,
34911 +
            0x7d2d771fd6061137,
34912 +
            0x5cc40101f320309b,
34913 +
            0x3eff9b239c4a526f,
34914 +
            0x1f16ed3db96c73c3,
34915 +
            0xfa88af67429e9787,
34916 +
            0xdb61d97967b8b62b,
34917 +
            0xb95a435b08d2d4df,
34918 +
            0x98b335452df4f573,
34919 +
            0x46bfe1bda7a08f3c,
34920 +
            0x675697a38286ae90,
34921 +
            0x056d0d81edeccc64,
34922 +
            0x24847b9fc8caedc8,
34923 +
            0xc11a39c53338098c,
34924 +
            0xe0f34fdb161e2820,
34925 +
            0x82c8d5f979744ad4,
34926 +
            0xa321a3e75c526b78,
34927 +
            0x0c0f93922672363e,
34928 +
            0x2de6e58c03541792,
34929 +
            0x4fdd7fae6c3e7566,
34930 +
            0x6e3409b0491854ca,
34931 +
            0x8baa4beab2eab08e,
34932 +
            0xaa433df497cc9122,
34933 +
            0xc878a7d6f8a6f3d6,
34934 +
            0xe991d1c8dd80d27a,
34935 +
            0x379d053057d4a835,
34936 +
            0x1674732e72f28999,
34937 +
            0x744fe90c1d98eb6d,
34938 +
            0x55a69f1238becac1,
34939 +
            0xb038dd48c34c2e85,
34940 +
            0x91d1ab56e66a0f29,
34941 +
            0xf3ea317489006ddd,
34942 +
            0xd203476aac264c71,
34943 +
            0x7b2abed6c53f0a28,
34944 +
            0x5ac3c8c8e0192b84,
34945 +
            0x38f852ea8f734970,
34946 +
            0x191124f4aa5568dc,
34947 +
            0xfc8f66ae51a78c98,
34948 +
            0xdd6610b07481ad34,
34949 +
            0xbf5d8a921bebcfc0,
34950 +
            0x9eb4fc8c3ecdee6c,
34951 +
            0x40b82874b4999423,
34952 +
            0x61515e6a91bfb58f,
34953 +
            0x036ac448fed5d77b,
34954 +
            0x2283b256dbf3f6d7,
34955 +
            0xc71df00c20011293,
34956 +
            0xe6f486120527333f,
34957 +
            0x84cf1c306a4d51cb,
34958 +
            0xa5266a2e4f6b7067,
34959 +
            0xe245c91be0e84e12,
34960 +
            0xc3acbf05c5ce6fbe,
34961 +
            0xa1972527aaa40d4a,
34962 +
            0x807e53398f822ce6,
34963 +
            0x65e011637470c8a2,
34964 +
            0x4409677d5156e90e,
34965 +
            0x2632fd5f3e3c8bfa,
34966 +
            0x07db8b411b1aaa56,
34967 +
            0xd9d75fb9914ed019,
34968 +
            0xf83e29a7b468f1b5,
34969 +
            0x9a05b385db029341,
34970 +
            0xbbecc59bfe24b2ed,
34971 +
            0x5e7287c105d656a9,
34972 +
            0x7f9bf1df20f07705,
34973 +
            0x1da06bfd4f9a15f1,
34974 +
            0x3c491de36abc345d,
34975 +
            0x9560e45f03a57204,
34976 +
            0xb4899241268353a8,
34977 +
            0xd6b2086349e9315c,
34978 +
            0xf75b7e7d6ccf10f0,
34979 +
            0x12c53c27973df4b4,
34980 +
            0x332c4a39b21bd518,
34981 +
            0x5117d01bdd71b7ec,
34982 +
            0x70fea605f8579640,
34983 +
            0xaef272fd7203ec0f,
34984 +
            0x8f1b04e35725cda3,
34985 +
            0xed209ec1384faf57,
34986 +
            0xccc9e8df1d698efb,
34987 +
            0x2957aa85e69b6abf,
34988 +
            0x08bedc9bc3bd4b13,
34989 +
            0x6a8546b9acd729e7,
34990 +
            0x4b6c30a789f1084b,
34991 +
        ],
34992 +
        [
34993 +
            0x0000000000000000,
34994 +
            0x04f28def5347786c,
34995 +
            0x09e51bdea68ef0d8,
34996 +
            0x0d179631f5c988b4,
34997 +
            0x13ca37bd4d1de1b0,
34998 +
            0x1738ba521e5a99dc,
34999 +
            0x1a2f2c63eb931168,
35000 +
            0x1edda18cb8d46904,
35001 +
            0x27946f7a9a3bc360,
35002 +
            0x2366e295c97cbb0c,
35003 +
            0x2e7174a43cb533b8,
35004 +
            0x2a83f94b6ff24bd4,
35005 +
            0x345e58c7d72622d0,
35006 +
            0x30acd52884615abc,
35007 +
            0x3dbb431971a8d208,
35008 +
            0x3949cef622efaa64,
35009 +
            0x4f28def5347786c0,
35010 +
            0x4bda531a6730feac,
35011 +
            0x46cdc52b92f97618,
35012 +
            0x423f48c4c1be0e74,
35013 +
            0x5ce2e948796a6770,
35014 +
            0x581064a72a2d1f1c,
35015 +
            0x5507f296dfe497a8,
35016 +
            0x51f57f798ca3efc4,
35017 +
            0x68bcb18fae4c45a0,
35018 +
            0x6c4e3c60fd0b3dcc,
35019 +
            0x6159aa5108c2b578,
35020 +
            0x65ab27be5b85cd14,
35021 +
            0x7b768632e351a410,
35022 +
            0x7f840bddb016dc7c,
35023 +
            0x72939dec45df54c8,
35024 +
            0x7661100316982ca4,
35025 +
            0x9e51bdea68ef0d80,
35026 +
            0x9aa330053ba875ec,
35027 +
            0x97b4a634ce61fd58,
35028 +
            0x93462bdb9d268534,
35029 +
            0x8d9b8a5725f2ec30,
35030 +
            0x896907b876b5945c,
35031 +
            0x847e9189837c1ce8,
35032 +
            0x808c1c66d03b6484,
35033 +
            0xb9c5d290f2d4cee0,
35034 +
            0xbd375f7fa193b68c,
35035 +
            0xb020c94e545a3e38,
35036 +
            0xb4d244a1071d4654,
35037 +
            0xaa0fe52dbfc92f50,
35038 +
            0xaefd68c2ec8e573c,
35039 +
            0xa3eafef31947df88,
35040 +
            0xa718731c4a00a7e4,
35041 +
            0xd179631f5c988b40,
35042 +
            0xd58beef00fdff32c,
35043 +
            0xd89c78c1fa167b98,
35044 +
            0xdc6ef52ea95103f4,
35045 +
            0xc2b354a211856af0,
35046 +
            0xc641d94d42c2129c,
35047 +
            0xcb564f7cb70b9a28,
35048 +
            0xcfa4c293e44ce244,
35049 +
            0xf6ed0c65c6a34820,
35050 +
            0xf21f818a95e4304c,
35051 +
            0xff0817bb602db8f8,
35052 +
            0xfbfa9a54336ac094,
35053 +
            0xe5273bd88bbea990,
35054 +
            0xe1d5b637d8f9d1fc,
35055 +
            0xecc220062d305948,
35056 +
            0xe830ade97e772124,
35057 +
            0x087a5d878949886b,
35058 +
            0x0c88d068da0ef007,
35059 +
            0x019f46592fc778b3,
35060 +
            0x056dcbb67c8000df,
35061 +
            0x1bb06a3ac45469db,
35062 +
            0x1f42e7d5971311b7,
35063 +
            0x125571e462da9903,
35064 +
            0x16a7fc0b319de16f,
35065 +
            0x2fee32fd13724b0b,
35066 +
            0x2b1cbf1240353367,
35067 +
            0x260b2923b5fcbbd3,
35068 +
            0x22f9a4cce6bbc3bf,
35069 +
            0x3c2405405e6faabb,
35070 +
            0x38d688af0d28d2d7,
35071 +
            0x35c11e9ef8e15a63,
35072 +
            0x31339371aba6220f,
35073 +
            0x47528372bd3e0eab,
35074 +
            0x43a00e9dee7976c7,
35075 +
            0x4eb798ac1bb0fe73,
35076 +
            0x4a45154348f7861f,
35077 +
            0x5498b4cff023ef1b,
35078 +
            0x506a3920a3649777,
35079 +
            0x5d7daf1156ad1fc3,
35080 +
            0x598f22fe05ea67af,
35081 +
            0x60c6ec082705cdcb,
35082 +
            0x643461e77442b5a7,
35083 +
            0x6923f7d6818b3d13,
35084 +
            0x6dd17a39d2cc457f,
35085 +
            0x730cdbb56a182c7b,
35086 +
            0x77fe565a395f5417,
35087 +
            0x7ae9c06bcc96dca3,
35088 +
            0x7e1b4d849fd1a4cf,
35089 +
            0x962be06de1a685eb,
35090 +
            0x92d96d82b2e1fd87,
35091 +
            0x9fcefbb347287533,
35092 +
            0x9b3c765c146f0d5f,
35093 +
            0x85e1d7d0acbb645b,
35094 +
            0x81135a3ffffc1c37,
35095 +
            0x8c04cc0e0a359483,
35096 +
            0x88f641e15972ecef,
35097 +
            0xb1bf8f177b9d468b,
35098 +
            0xb54d02f828da3ee7,
35099 +
            0xb85a94c9dd13b653,
35100 +
            0xbca819268e54ce3f,
35101 +
            0xa275b8aa3680a73b,
35102 +
            0xa687354565c7df57,
35103 +
            0xab90a374900e57e3,
35104 +
            0xaf622e9bc3492f8f,
35105 +
            0xd9033e98d5d1032b,
35106 +
            0xddf1b37786967b47,
35107 +
            0xd0e62546735ff3f3,
35108 +
            0xd414a8a920188b9f,
35109 +
            0xcac9092598cce29b,
35110 +
            0xce3b84cacb8b9af7,
35111 +
            0xc32c12fb3e421243,
35112 +
            0xc7de9f146d056a2f,
35113 +
            0xfe9751e24feac04b,
35114 +
            0xfa65dc0d1cadb827,
35115 +
            0xf7724a3ce9643093,
35116 +
            0xf380c7d3ba2348ff,
35117 +
            0xed5d665f02f721fb,
35118 +
            0xe9afebb051b05997,
35119 +
            0xe4b87d81a479d123,
35120 +
            0xe04af06ef73ea94f,
35121 +
            0x10f4bb0f129310d6,
35122 +
            0x140636e041d468ba,
35123 +
            0x1911a0d1b41de00e,
35124 +
            0x1de32d3ee75a9862,
35125 +
            0x033e8cb25f8ef166,
35126 +
            0x07cc015d0cc9890a,
35127 +
            0x0adb976cf90001be,
35128 +
            0x0e291a83aa4779d2,
35129 +
            0x3760d47588a8d3b6,
35130 +
            0x3392599adbefabda,
35131 +
            0x3e85cfab2e26236e,
35132 +
            0x3a7742447d615b02,
35133 +
            0x24aae3c8c5b53206,
35134 +
            0x20586e2796f24a6a,
35135 +
            0x2d4ff816633bc2de,
35136 +
            0x29bd75f9307cbab2,
35137 +
            0x5fdc65fa26e49616,
35138 +
            0x5b2ee81575a3ee7a,
35139 +
            0x56397e24806a66ce,
35140 +
            0x52cbf3cbd32d1ea2,
35141 +
            0x4c1652476bf977a6,
35142 +
            0x48e4dfa838be0fca,
35143 +
            0x45f34999cd77877e,
35144 +
            0x4101c4769e30ff12,
35145 +
            0x78480a80bcdf5576,
35146 +
            0x7cba876fef982d1a,
35147 +
            0x71ad115e1a51a5ae,
35148 +
            0x755f9cb14916ddc2,
35149 +
            0x6b823d3df1c2b4c6,
35150 +
            0x6f70b0d2a285ccaa,
35151 +
            0x626726e3574c441e,
35152 +
            0x6695ab0c040b3c72,
35153 +
            0x8ea506e57a7c1d56,
35154 +
            0x8a578b0a293b653a,
35155 +
            0x87401d3bdcf2ed8e,
35156 +
            0x83b290d48fb595e2,
35157 +
            0x9d6f31583761fce6,
35158 +
            0x999dbcb76426848a,
35159 +
            0x948a2a8691ef0c3e,
35160 +
            0x9078a769c2a87452,
35161 +
            0xa931699fe047de36,
35162 +
            0xadc3e470b300a65a,
35163 +
            0xa0d4724146c92eee,
35164 +
            0xa426ffae158e5682,
35165 +
            0xbafb5e22ad5a3f86,
35166 +
            0xbe09d3cdfe1d47ea,
35167 +
            0xb31e45fc0bd4cf5e,
35168 +
            0xb7ecc8135893b732,
35169 +
            0xc18dd8104e0b9b96,
35170 +
            0xc57f55ff1d4ce3fa,
35171 +
            0xc868c3cee8856b4e,
35172 +
            0xcc9a4e21bbc21322,
35173 +
            0xd247efad03167a26,
35174 +
            0xd6b562425051024a,
35175 +
            0xdba2f473a5988afe,
35176 +
            0xdf50799cf6dff292,
35177 +
            0xe619b76ad43058f6,
35178 +
            0xe2eb3a858777209a,
35179 +
            0xeffcacb472bea82e,
35180 +
            0xeb0e215b21f9d042,
35181 +
            0xf5d380d7992db946,
35182 +
            0xf1210d38ca6ac12a,
35183 +
            0xfc369b093fa3499e,
35184 +
            0xf8c416e66ce431f2,
35185 +
            0x188ee6889bda98bd,
35186 +
            0x1c7c6b67c89de0d1,
35187 +
            0x116bfd563d546865,
35188 +
            0x159970b96e131009,
35189 +
            0x0b44d135d6c7790d,
35190 +
            0x0fb65cda85800161,
35191 +
            0x02a1caeb704989d5,
35192 +
            0x06534704230ef1b9,
35193 +
            0x3f1a89f201e15bdd,
35194 +
            0x3be8041d52a623b1,
35195 +
            0x36ff922ca76fab05,
35196 +
            0x320d1fc3f428d369,
35197 +
            0x2cd0be4f4cfcba6d,
35198 +
            0x282233a01fbbc201,
35199 +
            0x2535a591ea724ab5,
35200 +
            0x21c7287eb93532d9,
35201 +
            0x57a6387dafad1e7d,
35202 +
            0x5354b592fcea6611,
35203 +
            0x5e4323a30923eea5,
35204 +
            0x5ab1ae4c5a6496c9,
35205 +
            0x446c0fc0e2b0ffcd,
35206 +
            0x409e822fb1f787a1,
35207 +
            0x4d89141e443e0f15,
35208 +
            0x497b99f117797779,
35209 +
            0x703257073596dd1d,
35210 +
            0x74c0dae866d1a571,
35211 +
            0x79d74cd993182dc5,
35212 +
            0x7d25c136c05f55a9,
35213 +
            0x63f860ba788b3cad,
35214 +
            0x670aed552bcc44c1,
35215 +
            0x6a1d7b64de05cc75,
35216 +
            0x6eeff68b8d42b419,
35217 +
            0x86df5b62f335953d,
35218 +
            0x822dd68da072ed51,
35219 +
            0x8f3a40bc55bb65e5,
35220 +
            0x8bc8cd5306fc1d89,
35221 +
            0x95156cdfbe28748d,
35222 +
            0x91e7e130ed6f0ce1,
35223 +
            0x9cf0770118a68455,
35224 +
            0x9802faee4be1fc39,
35225 +
            0xa14b3418690e565d,
35226 +
            0xa5b9b9f73a492e31,
35227 +
            0xa8ae2fc6cf80a685,
35228 +
            0xac5ca2299cc7dee9,
35229 +
            0xb28103a52413b7ed,
35230 +
            0xb6738e4a7754cf81,
35231 +
            0xbb64187b829d4735,
35232 +
            0xbf969594d1da3f59,
35233 +
            0xc9f78597c74213fd,
35234 +
            0xcd05087894056b91,
35235 +
            0xc0129e4961cce325,
35236 +
            0xc4e013a6328b9b49,
35237 +
            0xda3db22a8a5ff24d,
35238 +
            0xdecf3fc5d9188a21,
35239 +
            0xd3d8a9f42cd10295,
35240 +
            0xd72a241b7f967af9,
35241 +
            0xee63eaed5d79d09d,
35242 +
            0xea9167020e3ea8f1,
35243 +
            0xe786f133fbf72045,
35244 +
            0xe3747cdca8b05829,
35245 +
            0xfda9dd501064312d,
35246 +
            0xf95b50bf43234941,
35247 +
            0xf44cc68eb6eac1f5,
35248 +
            0xf0be4b61e5adb999,
35249 +
        ],
35250 +
        [
35251 +
            0x0000000000000000,
35252 +
            0x49e1df807414fdef,
35253 +
            0x93c3bf00e829fbde,
35254 +
            0xda2260809c3d0631,
35255 +
            0x135e585288c464d7,
35256 +
            0x5abf87d2fcd09938,
35257 +
            0x809de75260ed9f09,
35258 +
            0xc97c38d214f962e6,
35259 +
            0x26bcb0a51188c9ae,
35260 +
            0x6f5d6f25659c3441,
35261 +
            0xb57f0fa5f9a13270,
35262 +
            0xfc9ed0258db5cf9f,
35263 +
            0x35e2e8f7994cad79,
35264 +
            0x7c033777ed585096,
35265 +
            0xa62157f7716556a7,
35266 +
            0xefc088770571ab48,
35267 +
            0x4d79614a2311935c,
35268 +
            0x0498beca57056eb3,
35269 +
            0xdebade4acb386882,
35270 +
            0x975b01cabf2c956d,
35271 +
            0x5e273918abd5f78b,
35272 +
            0x17c6e698dfc10a64,
35273 +
            0xcde4861843fc0c55,
35274 +
            0x8405599837e8f1ba,
35275 +
            0x6bc5d1ef32995af2,
35276 +
            0x22240e6f468da71d,
35277 +
            0xf8066eefdab0a12c,
35278 +
            0xb1e7b16faea45cc3,
35279 +
            0x789b89bdba5d3e25,
35280 +
            0x317a563dce49c3ca,
35281 +
            0xeb5836bd5274c5fb,
35282 +
            0xa2b9e93d26603814,
35283 +
            0x9af2c294462326b8,
35284 +
            0xd3131d143237db57,
35285 +
            0x09317d94ae0add66,
35286 +
            0x40d0a214da1e2089,
35287 +
            0x89ac9ac6cee7426f,
35288 +
            0xc04d4546baf3bf80,
35289 +
            0x1a6f25c626ceb9b1,
35290 +
            0x538efa4652da445e,
35291 +
            0xbc4e723157abef16,
35292 +
            0xf5afadb123bf12f9,
35293 +
            0x2f8dcd31bf8214c8,
35294 +
            0x666c12b1cb96e927,
35295 +
            0xaf102a63df6f8bc1,
35296 +
            0xe6f1f5e3ab7b762e,
35297 +
            0x3cd395633746701f,
35298 +
            0x75324ae343528df0,
35299 +
            0xd78ba3de6532b5e4,
35300 +
            0x9e6a7c5e1126480b,
35301 +
            0x44481cde8d1b4e3a,
35302 +
            0x0da9c35ef90fb3d5,
35303 +
            0xc4d5fb8cedf6d133,
35304 +
            0x8d34240c99e22cdc,
35305 +
            0x5716448c05df2aed,
35306 +
            0x1ef79b0c71cbd702,
35307 +
            0xf137137b74ba7c4a,
35308 +
            0xb8d6ccfb00ae81a5,
35309 +
            0x62f4ac7b9c938794,
35310 +
            0x2b1573fbe8877a7b,
35311 +
            0xe2694b29fc7e189d,
35312 +
            0xab8894a9886ae572,
35313 +
            0x71aaf4291457e343,
35314 +
            0x384b2ba960431eac,
35315 +
            0x013ca37bd4d1de1b,
35316 +
            0x48dd7cfba0c523f4,
35317 +
            0x92ff1c7b3cf825c5,
35318 +
            0xdb1ec3fb48ecd82a,
35319 +
            0x1262fb295c15bacc,
35320 +
            0x5b8324a928014723,
35321 +
            0x81a14429b43c4112,
35322 +
            0xc8409ba9c028bcfd,
35323 +
            0x278013dec55917b5,
35324 +
            0x6e61cc5eb14dea5a,
35325 +
            0xb443acde2d70ec6b,
35326 +
            0xfda2735e59641184,
35327 +
            0x34de4b8c4d9d7362,
35328 +
            0x7d3f940c39898e8d,
35329 +
            0xa71df48ca5b488bc,
35330 +
            0xeefc2b0cd1a07553,
35331 +
            0x4c45c231f7c04d47,
35332 +
            0x05a41db183d4b0a8,
35333 +
            0xdf867d311fe9b699,
35334 +
            0x9667a2b16bfd4b76,
35335 +
            0x5f1b9a637f042990,
35336 +
            0x16fa45e30b10d47f,
35337 +
            0xccd82563972dd24e,
35338 +
            0x8539fae3e3392fa1,
35339 +
            0x6af97294e64884e9,
35340 +
            0x2318ad14925c7906,
35341 +
            0xf93acd940e617f37,
35342 +
            0xb0db12147a7582d8,
35343 +
            0x79a72ac66e8ce03e,
35344 +
            0x3046f5461a981dd1,
35345 +
            0xea6495c686a51be0,
35346 +
            0xa3854a46f2b1e60f,
35347 +
            0x9bce61ef92f2f8a3,
35348 +
            0xd22fbe6fe6e6054c,
35349 +
            0x080ddeef7adb037d,
35350 +
            0x41ec016f0ecffe92,
35351 +
            0x889039bd1a369c74,
35352 +
            0xc171e63d6e22619b,
35353 +
            0x1b5386bdf21f67aa,
35354 +
            0x52b2593d860b9a45,
35355 +
            0xbd72d14a837a310d,
35356 +
            0xf4930ecaf76ecce2,
35357 +
            0x2eb16e4a6b53cad3,
35358 +
            0x6750b1ca1f47373c,
35359 +
            0xae2c89180bbe55da,
35360 +
            0xe7cd56987faaa835,
35361 +
            0x3def3618e397ae04,
35362 +
            0x740ee998978353eb,
35363 +
            0xd6b700a5b1e36bff,
35364 +
            0x9f56df25c5f79610,
35365 +
            0x4574bfa559ca9021,
35366 +
            0x0c9560252dde6dce,
35367 +
            0xc5e958f739270f28,
35368 +
            0x8c0887774d33f2c7,
35369 +
            0x562ae7f7d10ef4f6,
35370 +
            0x1fcb3877a51a0919,
35371 +
            0xf00bb000a06ba251,
35372 +
            0xb9ea6f80d47f5fbe,
35373 +
            0x63c80f004842598f,
35374 +
            0x2a29d0803c56a460,
35375 +
            0xe355e85228afc686,
35376 +
            0xaab437d25cbb3b69,
35377 +
            0x70965752c0863d58,
35378 +
            0x397788d2b492c0b7,
35379 +
            0x027946f7a9a3bc36,
35380 +
            0x4b989977ddb741d9,
35381 +
            0x91baf9f7418a47e8,
35382 +
            0xd85b2677359eba07,
35383 +
            0x11271ea52167d8e1,
35384 +
            0x58c6c1255573250e,
35385 +
            0x82e4a1a5c94e233f,
35386 +
            0xcb057e25bd5aded0,
35387 +
            0x24c5f652b82b7598,
35388 +
            0x6d2429d2cc3f8877,
35389 +
            0xb706495250028e46,
35390 +
            0xfee796d2241673a9,
35391 +
            0x379bae0030ef114f,
35392 +
            0x7e7a718044fbeca0,
35393 +
            0xa4581100d8c6ea91,
35394 +
            0xedb9ce80acd2177e,
35395 +
            0x4f0027bd8ab22f6a,
35396 +
            0x06e1f83dfea6d285,
35397 +
            0xdcc398bd629bd4b4,
35398 +
            0x9522473d168f295b,
35399 +
            0x5c5e7fef02764bbd,
35400 +
            0x15bfa06f7662b652,
35401 +
            0xcf9dc0efea5fb063,
35402 +
            0x867c1f6f9e4b4d8c,
35403 +
            0x69bc97189b3ae6c4,
35404 +
            0x205d4898ef2e1b2b,
35405 +
            0xfa7f281873131d1a,
35406 +
            0xb39ef7980707e0f5,
35407 +
            0x7ae2cf4a13fe8213,
35408 +
            0x330310ca67ea7ffc,
35409 +
            0xe921704afbd779cd,
35410 +
            0xa0c0afca8fc38422,
35411 +
            0x988b8463ef809a8e,
35412 +
            0xd16a5be39b946761,
35413 +
            0x0b483b6307a96150,
35414 +
            0x42a9e4e373bd9cbf,
35415 +
            0x8bd5dc316744fe59,
35416 +
            0xc23403b1135003b6,
35417 +
            0x181663318f6d0587,
35418 +
            0x51f7bcb1fb79f868,
35419 +
            0xbe3734c6fe085320,
35420 +
            0xf7d6eb468a1caecf,
35421 +
            0x2df48bc61621a8fe,
35422 +
            0x6415544662355511,
35423 +
            0xad696c9476cc37f7,
35424 +
            0xe488b31402d8ca18,
35425 +
            0x3eaad3949ee5cc29,
35426 +
            0x774b0c14eaf131c6,
35427 +
            0xd5f2e529cc9109d2,
35428 +
            0x9c133aa9b885f43d,
35429 +
            0x46315a2924b8f20c,
35430 +
            0x0fd085a950ac0fe3,
35431 +
            0xc6acbd7b44556d05,
35432 +
            0x8f4d62fb304190ea,
35433 +
            0x556f027bac7c96db,
35434 +
            0x1c8eddfbd8686b34,
35435 +
            0xf34e558cdd19c07c,
35436 +
            0xbaaf8a0ca90d3d93,
35437 +
            0x608dea8c35303ba2,
35438 +
            0x296c350c4124c64d,
35439 +
            0xe0100dde55dda4ab,
35440 +
            0xa9f1d25e21c95944,
35441 +
            0x73d3b2debdf45f75,
35442 +
            0x3a326d5ec9e0a29a,
35443 +
            0x0345e58c7d72622d,
35444 +
            0x4aa43a0c09669fc2,
35445 +
            0x90865a8c955b99f3,
35446 +
            0xd967850ce14f641c,
35447 +
            0x101bbddef5b606fa,
35448 +
            0x59fa625e81a2fb15,
35449 +
            0x83d802de1d9ffd24,
35450 +
            0xca39dd5e698b00cb,
35451 +
            0x25f955296cfaab83,
35452 +
            0x6c188aa918ee566c,
35453 +
            0xb63aea2984d3505d,
35454 +
            0xffdb35a9f0c7adb2,
35455 +
            0x36a70d7be43ecf54,
35456 +
            0x7f46d2fb902a32bb,
35457 +
            0xa564b27b0c17348a,
35458 +
            0xec856dfb7803c965,
35459 +
            0x4e3c84c65e63f171,
35460 +
            0x07dd5b462a770c9e,
35461 +
            0xddff3bc6b64a0aaf,
35462 +
            0x941ee446c25ef740,
35463 +
            0x5d62dc94d6a795a6,
35464 +
            0x14830314a2b36849,
35465 +
            0xcea163943e8e6e78,
35466 +
            0x8740bc144a9a9397,
35467 +
            0x688034634feb38df,
35468 +
            0x2161ebe33bffc530,
35469 +
            0xfb438b63a7c2c301,
35470 +
            0xb2a254e3d3d63eee,
35471 +
            0x7bde6c31c72f5c08,
35472 +
            0x323fb3b1b33ba1e7,
35473 +
            0xe81dd3312f06a7d6,
35474 +
            0xa1fc0cb15b125a39,
35475 +
            0x99b727183b514495,
35476 +
            0xd056f8984f45b97a,
35477 +
            0x0a749818d378bf4b,
35478 +
            0x43954798a76c42a4,
35479 +
            0x8ae97f4ab3952042,
35480 +
            0xc308a0cac781ddad,
35481 +
            0x192ac04a5bbcdb9c,
35482 +
            0x50cb1fca2fa82673,
35483 +
            0xbf0b97bd2ad98d3b,
35484 +
            0xf6ea483d5ecd70d4,
35485 +
            0x2cc828bdc2f076e5,
35486 +
            0x6529f73db6e48b0a,
35487 +
            0xac55cfefa21de9ec,
35488 +
            0xe5b4106fd6091403,
35489 +
            0x3f9670ef4a341232,
35490 +
            0x7677af6f3e20efdd,
35491 +
            0xd4ce46521840d7c9,
35492 +
            0x9d2f99d26c542a26,
35493 +
            0x470df952f0692c17,
35494 +
            0x0eec26d2847dd1f8,
35495 +
            0xc7901e009084b31e,
35496 +
            0x8e71c180e4904ef1,
35497 +
            0x5453a10078ad48c0,
35498 +
            0x1db27e800cb9b52f,
35499 +
            0xf272f6f709c81e67,
35500 +
            0xbb9329777ddce388,
35501 +
            0x61b149f7e1e1e5b9,
35502 +
            0x2850967795f51856,
35503 +
            0xe12caea5810c7ab0,
35504 +
            0xa8cd7125f518875f,
35505 +
            0x72ef11a56925816e,
35506 +
            0x3b0ece251d317c81,
35507 +
        ],
35508 +
        [
35509 +
            0x0000000000000000,
35510 +
            0x52734ea3e726fc54,
35511 +
            0xa4e69d47ce4df8a8,
35512 +
            0xf695d3e4296b04fc,
35513 +
            0x7d141cdcc40c623b,
35514 +
            0x2f67527f232a9e6f,
35515 +
            0xd9f2819b0a419a93,
35516 +
            0x8b81cf38ed6766c7,
35517 +
            0xfa2839b98818c476,
35518 +
            0xa85b771a6f3e3822,
35519 +
            0x5ecea4fe46553cde,
35520 +
            0x0cbdea5da173c08a,
35521 +
            0x873c25654c14a64d,
35522 +
            0xd54f6bc6ab325a19,
35523 +
            0x23dab82282595ee5,
35524 +
            0x71a9f681657fa2b1,
35525 +
            0xc089552048a61b87,
35526 +
            0x92fa1b83af80e7d3,
35527 +
            0x646fc86786ebe32f,
35528 +
            0x361c86c461cd1f7b,
35529 +
            0xbd9d49fc8caa79bc,
35530 +
            0xefee075f6b8c85e8,
35531 +
            0x197bd4bb42e78114,
35532 +
            0x4b089a18a5c17d40,
35533 +
            0x3aa16c99c0bedff1,
35534 +
            0x68d2223a279823a5,
35535 +
            0x9e47f1de0ef32759,
35536 +
            0xcc34bf7de9d5db0d,
35537 +
            0x47b5704504b2bdca,
35538 +
            0x15c63ee6e394419e,
35539 +
            0xe353ed02caff4562,
35540 +
            0xb120a3a12dd9b936,
35541 +
            0xb5cb8c13c9dba465,
35542 +
            0xe7b8c2b02efd5831,
35543 +
            0x112d115407965ccd,
35544 +
            0x435e5ff7e0b0a099,
35545 +
            0xc8df90cf0dd7c65e,
35546 +
            0x9aacde6ceaf13a0a,
35547 +
            0x6c390d88c39a3ef6,
35548 +
            0x3e4a432b24bcc2a2,
35549 +
            0x4fe3b5aa41c36013,
35550 +
            0x1d90fb09a6e59c47,
35551 +
            0xeb0528ed8f8e98bb,
35552 +
            0xb976664e68a864ef,
35553 +
            0x32f7a97685cf0228,
35554 +
            0x6084e7d562e9fe7c,
35555 +
            0x961134314b82fa80,
35556 +
            0xc4627a92aca406d4,
35557 +
            0x7542d933817dbfe2,
35558 +
            0x27319790665b43b6,
35559 +
            0xd1a444744f30474a,
35560 +
            0x83d70ad7a816bb1e,
35561 +
            0x0856c5ef4571ddd9,
35562 +
            0x5a258b4ca257218d,
35563 +
            0xacb058a88b3c2571,
35564 +
            0xfec3160b6c1ad925,
35565 +
            0x8f6ae08a09657b94,
35566 +
            0xdd19ae29ee4387c0,
35567 +
            0x2b8c7dcdc728833c,
35568 +
            0x79ff336e200e7f68,
35569 +
            0xf27efc56cd6919af,
35570 +
            0xa00db2f52a4fe5fb,
35571 +
            0x569861110324e107,
35572 +
            0x04eb2fb2e4021d53,
35573 +
            0x5f4e3e74cb20dba1,
35574 +
            0x0d3d70d72c0627f5,
35575 +
            0xfba8a333056d2309,
35576 +
            0xa9dbed90e24bdf5d,
35577 +
            0x225a22a80f2cb99a,
35578 +
            0x70296c0be80a45ce,
35579 +
            0x86bcbfefc1614132,
35580 +
            0xd4cff14c2647bd66,
35581 +
            0xa56607cd43381fd7,
35582 +
            0xf715496ea41ee383,
35583 +
            0x01809a8a8d75e77f,
35584 +
            0x53f3d4296a531b2b,
35585 +
            0xd8721b1187347dec,
35586 +
            0x8a0155b2601281b8,
35587 +
            0x7c94865649798544,
35588 +
            0x2ee7c8f5ae5f7910,
35589 +
            0x9fc76b548386c026,
35590 +
            0xcdb425f764a03c72,
35591 +
            0x3b21f6134dcb388e,
35592 +
            0x6952b8b0aaedc4da,
35593 +
            0xe2d37788478aa21d,
35594 +
            0xb0a0392ba0ac5e49,
35595 +
            0x4635eacf89c75ab5,
35596 +
            0x1446a46c6ee1a6e1,
35597 +
            0x65ef52ed0b9e0450,
35598 +
            0x379c1c4eecb8f804,
35599 +
            0xc109cfaac5d3fcf8,
35600 +
            0x937a810922f500ac,
35601 +
            0x18fb4e31cf92666b,
35602 +
            0x4a88009228b49a3f,
35603 +
            0xbc1dd37601df9ec3,
35604 +
            0xee6e9dd5e6f96297,
35605 +
            0xea85b26702fb7fc4,
35606 +
            0xb8f6fcc4e5dd8390,
35607 +
            0x4e632f20ccb6876c,
35608 +
            0x1c1061832b907b38,
35609 +
            0x9791aebbc6f71dff,
35610 +
            0xc5e2e01821d1e1ab,
35611 +
            0x337733fc08bae557,
35612 +
            0x61047d5fef9c1903,
35613 +
            0x10ad8bde8ae3bbb2,
35614 +
            0x42dec57d6dc547e6,
35615 +
            0xb44b169944ae431a,
35616 +
            0xe638583aa388bf4e,
35617 +
            0x6db997024eefd989,
35618 +
            0x3fcad9a1a9c925dd,
35619 +
            0xc95f0a4580a22121,
35620 +
            0x9b2c44e66784dd75,
35621 +
            0x2a0ce7474a5d6443,
35622 +
            0x787fa9e4ad7b9817,
35623 +
            0x8eea7a0084109ceb,
35624 +
            0xdc9934a3633660bf,
35625 +
            0x5718fb9b8e510678,
35626 +
            0x056bb5386977fa2c,
35627 +
            0xf3fe66dc401cfed0,
35628 +
            0xa18d287fa73a0284,
35629 +
            0xd024defec245a035,
35630 +
            0x8257905d25635c61,
35631 +
            0x74c243b90c08589d,
35632 +
            0x26b10d1aeb2ea4c9,
35633 +
            0xad30c2220649c20e,
35634 +
            0xff438c81e16f3e5a,
35635 +
            0x09d65f65c8043aa6,
35636 +
            0x5ba511c62f22c6f2,
35637 +
            0xbe9c7ce99641b742,
35638 +
            0xecef324a71674b16,
35639 +
            0x1a7ae1ae580c4fea,
35640 +
            0x4809af0dbf2ab3be,
35641 +
            0xc3886035524dd579,
35642 +
            0x91fb2e96b56b292d,
35643 +
            0x676efd729c002dd1,
35644 +
            0x351db3d17b26d185,
35645 +
            0x44b445501e597334,
35646 +
            0x16c70bf3f97f8f60,
35647 +
            0xe052d817d0148b9c,
35648 +
            0xb22196b4373277c8,
35649 +
            0x39a0598cda55110f,
35650 +
            0x6bd3172f3d73ed5b,
35651 +
            0x9d46c4cb1418e9a7,
35652 +
            0xcf358a68f33e15f3,
35653 +
            0x7e1529c9dee7acc5,
35654 +
            0x2c66676a39c15091,
35655 +
            0xdaf3b48e10aa546d,
35656 +
            0x8880fa2df78ca839,
35657 +
            0x030135151aebcefe,
35658 +
            0x51727bb6fdcd32aa,
35659 +
            0xa7e7a852d4a63656,
35660 +
            0xf594e6f13380ca02,
35661 +
            0x843d107056ff68b3,
35662 +
            0xd64e5ed3b1d994e7,
35663 +
            0x20db8d3798b2901b,
35664 +
            0x72a8c3947f946c4f,
35665 +
            0xf9290cac92f30a88,
35666 +
            0xab5a420f75d5f6dc,
35667 +
            0x5dcf91eb5cbef220,
35668 +
            0x0fbcdf48bb980e74,
35669 +
            0x0b57f0fa5f9a1327,
35670 +
            0x5924be59b8bcef73,
35671 +
            0xafb16dbd91d7eb8f,
35672 +
            0xfdc2231e76f117db,
35673 +
            0x7643ec269b96711c,
35674 +
            0x2430a2857cb08d48,
35675 +
            0xd2a5716155db89b4,
35676 +
            0x80d63fc2b2fd75e0,
35677 +
            0xf17fc943d782d751,
35678 +
            0xa30c87e030a42b05,
35679 +
            0x5599540419cf2ff9,
35680 +
            0x07ea1aa7fee9d3ad,
35681 +
            0x8c6bd59f138eb56a,
35682 +
            0xde189b3cf4a8493e,
35683 +
            0x288d48d8ddc34dc2,
35684 +
            0x7afe067b3ae5b196,
35685 +
            0xcbdea5da173c08a0,
35686 +
            0x99adeb79f01af4f4,
35687 +
            0x6f38389dd971f008,
35688 +
            0x3d4b763e3e570c5c,
35689 +
            0xb6cab906d3306a9b,
35690 +
            0xe4b9f7a5341696cf,
35691 +
            0x122c24411d7d9233,
35692 +
            0x405f6ae2fa5b6e67,
35693 +
            0x31f69c639f24ccd6,
35694 +
            0x6385d2c078023082,
35695 +
            0x951001245169347e,
35696 +
            0xc7634f87b64fc82a,
35697 +
            0x4ce280bf5b28aeed,
35698 +
            0x1e91ce1cbc0e52b9,
35699 +
            0xe8041df895655645,
35700 +
            0xba77535b7243aa11,
35701 +
            0xe1d2429d5d616ce3,
35702 +
            0xb3a10c3eba4790b7,
35703 +
            0x4534dfda932c944b,
35704 +
            0x17479179740a681f,
35705 +
            0x9cc65e41996d0ed8,
35706 +
            0xceb510e27e4bf28c,
35707 +
            0x3820c3065720f670,
35708 +
            0x6a538da5b0060a24,
35709 +
            0x1bfa7b24d579a895,
35710 +
            0x49893587325f54c1,
35711 +
            0xbf1ce6631b34503d,
35712 +
            0xed6fa8c0fc12ac69,
35713 +
            0x66ee67f81175caae,
35714 +
            0x349d295bf65336fa,
35715 +
            0xc208fabfdf383206,
35716 +
            0x907bb41c381ece52,
35717 +
            0x215b17bd15c77764,
35718 +
            0x7328591ef2e18b30,
35719 +
            0x85bd8afadb8a8fcc,
35720 +
            0xd7cec4593cac7398,
35721 +
            0x5c4f0b61d1cb155f,
35722 +
            0x0e3c45c236ede90b,
35723 +
            0xf8a996261f86edf7,
35724 +
            0xaadad885f8a011a3,
35725 +
            0xdb732e049ddfb312,
35726 +
            0x890060a77af94f46,
35727 +
            0x7f95b34353924bba,
35728 +
            0x2de6fde0b4b4b7ee,
35729 +
            0xa66732d859d3d129,
35730 +
            0xf4147c7bbef52d7d,
35731 +
            0x0281af9f979e2981,
35732 +
            0x50f2e13c70b8d5d5,
35733 +
            0x5419ce8e94bac886,
35734 +
            0x066a802d739c34d2,
35735 +
            0xf0ff53c95af7302e,
35736 +
            0xa28c1d6abdd1cc7a,
35737 +
            0x290dd25250b6aabd,
35738 +
            0x7b7e9cf1b79056e9,
35739 +
            0x8deb4f159efb5215,
35740 +
            0xdf9801b679ddae41,
35741 +
            0xae31f7371ca20cf0,
35742 +
            0xfc42b994fb84f0a4,
35743 +
            0x0ad76a70d2eff458,
35744 +
            0x58a424d335c9080c,
35745 +
            0xd325ebebd8ae6ecb,
35746 +
            0x8156a5483f88929f,
35747 +
            0x77c376ac16e39663,
35748 +
            0x25b0380ff1c56a37,
35749 +
            0x94909baedc1cd301,
35750 +
            0xc6e3d50d3b3a2f55,
35751 +
            0x307606e912512ba9,
35752 +
            0x6205484af577d7fd,
35753 +
            0xe98487721810b13a,
35754 +
            0xbbf7c9d1ff364d6e,
35755 +
            0x4d621a35d65d4992,
35756 +
            0x1f115496317bb5c6,
35757 +
            0x6eb8a21754041777,
35758 +
            0x3ccbecb4b322eb23,
35759 +
            0xca5e3f509a49efdf,
35760 +
            0x982d71f37d6f138b,
35761 +
            0x13acbecb9008754c,
35762 +
            0x41dff068772e8918,
35763 +
            0xb74a238c5e458de4,
35764 +
            0xe5396d2fb96371b0,
35765 +
        ],
35766 +
        [
35767 +
            0x0000000000000000,
35768 +
            0x668ab3bbc976d29d,
35769 +
            0xcd15677792eda53a,
35770 +
            0xab9fd4cc5b9b77a7,
35771 +
            0xaef3e8bc7d4cd91f,
35772 +
            0xc8795b07b43a0b82,
35773 +
            0x63e68fcbefa17c25,
35774 +
            0x056c3c7026d7aeb8,
35775 +
            0x693ef72ba20e2155,
35776 +
            0x0fb444906b78f3c8,
35777 +
            0xa42b905c30e3846f,
35778 +
            0xc2a123e7f99556f2,
35779 +
            0xc7cd1f97df42f84a,
35780 +
            0xa147ac2c16342ad7,
35781 +
            0x0ad878e04daf5d70,
35782 +
            0x6c52cb5b84d98fed,
35783 +
            0xd27dee57441c42aa,
35784 +
            0xb4f75dec8d6a9037,
35785 +
            0x1f688920d6f1e790,
35786 +
            0x79e23a9b1f87350d,
35787 +
            0x7c8e06eb39509bb5,
35788 +
            0x1a04b550f0264928,
35789 +
            0xb19b619cabbd3e8f,
35790 +
            0xd711d22762cbec12,
35791 +
            0xbb43197ce61263ff,
35792 +
            0xddc9aac72f64b162,
35793 +
            0x76567e0b74ffc6c5,
35794 +
            0x10dccdb0bd891458,
35795 +
            0x15b0f1c09b5ebae0,
35796 +
            0x733a427b5228687d,
35797 +
            0xd8a596b709b31fda,
35798 +
            0xbe2f250cc0c5cd47,
35799 +
            0x9022fafdd0af163f,
35800 +
            0xf6a8494619d9c4a2,
35801 +
            0x5d379d8a4242b305,
35802 +
            0x3bbd2e318b346198,
35803 +
            0x3ed11241ade3cf20,
35804 +
            0x585ba1fa64951dbd,
35805 +
            0xf3c475363f0e6a1a,
35806 +
            0x954ec68df678b887,
35807 +
            0xf91c0dd672a1376a,
35808 +
            0x9f96be6dbbd7e5f7,
35809 +
            0x34096aa1e04c9250,
35810 +
            0x5283d91a293a40cd,
35811 +
            0x57efe56a0fedee75,
35812 +
            0x316556d1c69b3ce8,
35813 +
            0x9afa821d9d004b4f,
35814 +
            0xfc7031a6547699d2,
35815 +
            0x425f14aa94b35495,
35816 +
            0x24d5a7115dc58608,
35817 +
            0x8f4a73dd065ef1af,
35818 +
            0xe9c0c066cf282332,
35819 +
            0xecacfc16e9ff8d8a,
35820 +
            0x8a264fad20895f17,
35821 +
            0x21b99b617b1228b0,
35822 +
            0x473328dab264fa2d,
35823 +
            0x2b61e38136bd75c0,
35824 +
            0x4deb503affcba75d,
35825 +
            0xe67484f6a450d0fa,
35826 +
            0x80fe374d6d260267,
35827 +
            0x85920b3d4bf1acdf,
35828 +
            0xe318b88682877e42,
35829 +
            0x48876c4ad91c09e5,
35830 +
            0x2e0ddff1106adb78,
35831 +
            0x149cd3a8f9c9bf15,
35832 +
            0x7216601330bf6d88,
35833 +
            0xd989b4df6b241a2f,
35834 +
            0xbf030764a252c8b2,
35835 +
            0xba6f3b148485660a,
35836 +
            0xdce588af4df3b497,
35837 +
            0x777a5c631668c330,
35838 +
            0x11f0efd8df1e11ad,
35839 +
            0x7da224835bc79e40,
35840 +
            0x1b28973892b14cdd,
35841 +
            0xb0b743f4c92a3b7a,
35842 +
            0xd63df04f005ce9e7,
35843 +
            0xd351cc3f268b475f,
35844 +
            0xb5db7f84effd95c2,
35845 +
            0x1e44ab48b466e265,
35846 +
            0x78ce18f37d1030f8,
35847 +
            0xc6e13dffbdd5fdbf,
35848 +
            0xa06b8e4474a32f22,
35849 +
            0x0bf45a882f385885,
35850 +
            0x6d7ee933e64e8a18,
35851 +
            0x6812d543c09924a0,
35852 +
            0x0e9866f809eff63d,
35853 +
            0xa507b2345274819a,
35854 +
            0xc38d018f9b025307,
35855 +
            0xafdfcad41fdbdcea,
35856 +
            0xc955796fd6ad0e77,
35857 +
            0x62caada38d3679d0,
35858 +
            0x04401e184440ab4d,
35859 +
            0x012c2268629705f5,
35860 +
            0x67a691d3abe1d768,
35861 +
            0xcc39451ff07aa0cf,
35862 +
            0xaab3f6a4390c7252,
35863 +
            0x84be29552966a92a,
35864 +
            0xe2349aeee0107bb7,
35865 +
            0x49ab4e22bb8b0c10,
35866 +
            0x2f21fd9972fdde8d,
35867 +
            0x2a4dc1e9542a7035,
35868 +
            0x4cc772529d5ca2a8,
35869 +
            0xe758a69ec6c7d50f,
35870 +
            0x81d215250fb10792,
35871 +
            0xed80de7e8b68887f,
35872 +
            0x8b0a6dc5421e5ae2,
35873 +
            0x2095b90919852d45,
35874 +
            0x461f0ab2d0f3ffd8,
35875 +
            0x437336c2f6245160,
35876 +
            0x25f985793f5283fd,
35877 +
            0x8e6651b564c9f45a,
35878 +
            0xe8ece20eadbf26c7,
35879 +
            0x56c3c7026d7aeb80,
35880 +
            0x304974b9a40c391d,
35881 +
            0x9bd6a075ff974eba,
35882 +
            0xfd5c13ce36e19c27,
35883 +
            0xf8302fbe1036329f,
35884 +
            0x9eba9c05d940e002,
35885 +
            0x352548c982db97a5,
35886 +
            0x53affb724bad4538,
35887 +
            0x3ffd3029cf74cad5,
35888 +
            0x5977839206021848,
35889 +
            0xf2e8575e5d996fef,
35890 +
            0x9462e4e594efbd72,
35891 +
            0x910ed895b23813ca,
35892 +
            0xf7846b2e7b4ec157,
35893 +
            0x5c1bbfe220d5b6f0,
35894 +
            0x3a910c59e9a3646d,
35895 +
            0x2939a751f3937e2a,
35896 +
            0x4fb314ea3ae5acb7,
35897 +
            0xe42cc026617edb10,
35898 +
            0x82a6739da808098d,
35899 +
            0x87ca4fed8edfa735,
35900 +
            0xe140fc5647a975a8,
35901 +
            0x4adf289a1c32020f,
35902 +
            0x2c559b21d544d092,
35903 +
            0x4007507a519d5f7f,
35904 +
            0x268de3c198eb8de2,
35905 +
            0x8d12370dc370fa45,
35906 +
            0xeb9884b60a0628d8,
35907 +
            0xeef4b8c62cd18660,
35908 +
            0x887e0b7de5a754fd,
35909 +
            0x23e1dfb1be3c235a,
35910 +
            0x456b6c0a774af1c7,
35911 +
            0xfb444906b78f3c80,
35912 +
            0x9dcefabd7ef9ee1d,
35913 +
            0x36512e71256299ba,
35914 +
            0x50db9dcaec144b27,
35915 +
            0x55b7a1bacac3e59f,
35916 +
            0x333d120103b53702,
35917 +
            0x98a2c6cd582e40a5,
35918 +
            0xfe28757691589238,
35919 +
            0x927abe2d15811dd5,
35920 +
            0xf4f00d96dcf7cf48,
35921 +
            0x5f6fd95a876cb8ef,
35922 +
            0x39e56ae14e1a6a72,
35923 +
            0x3c89569168cdc4ca,
35924 +
            0x5a03e52aa1bb1657,
35925 +
            0xf19c31e6fa2061f0,
35926 +
            0x9716825d3356b36d,
35927 +
            0xb91b5dac233c6815,
35928 +
            0xdf91ee17ea4aba88,
35929 +
            0x740e3adbb1d1cd2f,
35930 +
            0x1284896078a71fb2,
35931 +
            0x17e8b5105e70b10a,
35932 +
            0x716206ab97066397,
35933 +
            0xdafdd267cc9d1430,
35934 +
            0xbc7761dc05ebc6ad,
35935 +
            0xd025aa8781324940,
35936 +
            0xb6af193c48449bdd,
35937 +
            0x1d30cdf013dfec7a,
35938 +
            0x7bba7e4bdaa93ee7,
35939 +
            0x7ed6423bfc7e905f,
35940 +
            0x185cf180350842c2,
35941 +
            0xb3c3254c6e933565,
35942 +
            0xd54996f7a7e5e7f8,
35943 +
            0x6b66b3fb67202abf,
35944 +
            0x0dec0040ae56f822,
35945 +
            0xa673d48cf5cd8f85,
35946 +
            0xc0f967373cbb5d18,
35947 +
            0xc5955b471a6cf3a0,
35948 +
            0xa31fe8fcd31a213d,
35949 +
            0x08803c308881569a,
35950 +
            0x6e0a8f8b41f78407,
35951 +
            0x025844d0c52e0bea,
35952 +
            0x64d2f76b0c58d977,
35953 +
            0xcf4d23a757c3aed0,
35954 +
            0xa9c7901c9eb57c4d,
35955 +
            0xacabac6cb862d2f5,
35956 +
            0xca211fd771140068,
35957 +
            0x61becb1b2a8f77cf,
35958 +
            0x073478a0e3f9a552,
35959 +
            0x3da574f90a5ac13f,
35960 +
            0x5b2fc742c32c13a2,
35961 +
            0xf0b0138e98b76405,
35962 +
            0x963aa03551c1b698,
35963 +
            0x93569c4577161820,
35964 +
            0xf5dc2ffebe60cabd,
35965 +
            0x5e43fb32e5fbbd1a,
35966 +
            0x38c948892c8d6f87,
35967 +
            0x549b83d2a854e06a,
35968 +
            0x32113069612232f7,
35969 +
            0x998ee4a53ab94550,
35970 +
            0xff04571ef3cf97cd,
35971 +
            0xfa686b6ed5183975,
35972 +
            0x9ce2d8d51c6eebe8,
35973 +
            0x377d0c1947f59c4f,
35974 +
            0x51f7bfa28e834ed2,
35975 +
            0xefd89aae4e468395,
35976 +
            0x8952291587305108,
35977 +
            0x22cdfdd9dcab26af,
35978 +
            0x44474e6215ddf432,
35979 +
            0x412b7212330a5a8a,
35980 +
            0x27a1c1a9fa7c8817,
35981 +
            0x8c3e1565a1e7ffb0,
35982 +
            0xeab4a6de68912d2d,
35983 +
            0x86e66d85ec48a2c0,
35984 +
            0xe06cde3e253e705d,
35985 +
            0x4bf30af27ea507fa,
35986 +
            0x2d79b949b7d3d567,
35987 +
            0x2815853991047bdf,
35988 +
            0x4e9f36825872a942,
35989 +
            0xe500e24e03e9dee5,
35990 +
            0x838a51f5ca9f0c78,
35991 +
            0xad878e04daf5d700,
35992 +
            0xcb0d3dbf1383059d,
35993 +
            0x6092e9734818723a,
35994 +
            0x06185ac8816ea0a7,
35995 +
            0x037466b8a7b90e1f,
35996 +
            0x65fed5036ecfdc82,
35997 +
            0xce6101cf3554ab25,
35998 +
            0xa8ebb274fc2279b8,
35999 +
            0xc4b9792f78fbf655,
36000 +
            0xa233ca94b18d24c8,
36001 +
            0x09ac1e58ea16536f,
36002 +
            0x6f26ade3236081f2,
36003 +
            0x6a4a919305b72f4a,
36004 +
            0x0cc02228ccc1fdd7,
36005 +
            0xa75ff6e4975a8a70,
36006 +
            0xc1d5455f5e2c58ed,
36007 +
            0x7ffa60539ee995aa,
36008 +
            0x1970d3e8579f4737,
36009 +
            0xb2ef07240c043090,
36010 +
            0xd465b49fc572e20d,
36011 +
            0xd10988efe3a54cb5,
36012 +
            0xb7833b542ad39e28,
36013 +
            0x1c1cef987148e98f,
36014 +
            0x7a965c23b83e3b12,
36015 +
            0x16c497783ce7b4ff,
36016 +
            0x704e24c3f5916662,
36017 +
            0xdbd1f00fae0a11c5,
36018 +
            0xbd5b43b4677cc358,
36019 +
            0xb8377fc441ab6de0,
36020 +
            0xdebdcc7f88ddbf7d,
36021 +
            0x752218b3d346c8da,
36022 +
            0x13a8ab081a301a47,
36023 +
        ],
36024 +
        [
36025 +
            0x0000000000000000,
36026 +
            0xf2fa1fae5f5c1165,
36027 +
            0xd12d190fe62fb1a1,
36028 +
            0x23d706a1b973a0c4,
36029 +
            0x9683144c94c8f029,
36030 +
            0x64790be2cb94e14c,
36031 +
            0x47ae0d4372e74188,
36032 +
            0xb55412ed2dbb50ed,
36033 +
            0x19df0eca71067339,
36034 +
            0xeb2511642e5a625c,
36035 +
            0xc8f217c59729c298,
36036 +
            0x3a08086bc875d3fd,
36037 +
            0x8f5c1a86e5ce8310,
36038 +
            0x7da60528ba929275,
36039 +
            0x5e71038903e132b1,
36040 +
            0xac8b1c275cbd23d4,
36041 +
            0x33be1d94e20ce672,
36042 +
            0xc144023abd50f717,
36043 +
            0xe293049b042357d3,
36044 +
            0x10691b355b7f46b6,
36045 +
            0xa53d09d876c4165b,
36046 +
            0x57c716762998073e,
36047 +
            0x741010d790eba7fa,
36048 +
            0x86ea0f79cfb7b69f,
36049 +
            0x2a61135e930a954b,
36050 +
            0xd89b0cf0cc56842e,
36051 +
            0xfb4c0a51752524ea,
36052 +
            0x09b615ff2a79358f,
36053 +
            0xbce2071207c26562,
36054 +
            0x4e1818bc589e7407,
36055 +
            0x6dcf1e1de1edd4c3,
36056 +
            0x9f3501b3beb1c5a6,
36057 +
            0x677c3b29c419cce4,
36058 +
            0x958624879b45dd81,
36059 +
            0xb651222622367d45,
36060 +
            0x44ab3d887d6a6c20,
36061 +
            0xf1ff2f6550d13ccd,
36062 +
            0x030530cb0f8d2da8,
36063 +
            0x20d2366ab6fe8d6c,
36064 +
            0xd22829c4e9a29c09,
36065 +
            0x7ea335e3b51fbfdd,
36066 +
            0x8c592a4dea43aeb8,
36067 +
            0xaf8e2cec53300e7c,
36068 +
            0x5d7433420c6c1f19,
36069 +
            0xe82021af21d74ff4,
36070 +
            0x1ada3e017e8b5e91,
36071 +
            0x390d38a0c7f8fe55,
36072 +
            0xcbf7270e98a4ef30,
36073 +
            0x54c226bd26152a96,
36074 +
            0xa638391379493bf3,
36075 +
            0x85ef3fb2c03a9b37,
36076 +
            0x7715201c9f668a52,
36077 +
            0xc24132f1b2dddabf,
36078 +
            0x30bb2d5fed81cbda,
36079 +
            0x136c2bfe54f26b1e,
36080 +
            0xe19634500bae7a7b,
36081 +
            0x4d1d2877571359af,
36082 +
            0xbfe737d9084f48ca,
36083 +
            0x9c303178b13ce80e,
36084 +
            0x6eca2ed6ee60f96b,
36085 +
            0xdb9e3c3bc3dba986,
36086 +
            0x296423959c87b8e3,
36087 +
            0x0ab3253425f41827,
36088 +
            0xf8493a9a7aa80942,
36089 +
            0xcef87653883399c8,
36090 +
            0x3c0269fdd76f88ad,
36091 +
            0x1fd56f5c6e1c2869,
36092 +
            0xed2f70f23140390c,
36093 +
            0x587b621f1cfb69e1,
36094 +
            0xaa817db143a77884,
36095 +
            0x89567b10fad4d840,
36096 +
            0x7bac64bea588c925,
36097 +
            0xd7277899f935eaf1,
36098 +
            0x25dd6737a669fb94,
36099 +
            0x060a61961f1a5b50,
36100 +
            0xf4f07e3840464a35,
36101 +
            0x41a46cd56dfd1ad8,
36102 +
            0xb35e737b32a10bbd,
36103 +
            0x908975da8bd2ab79,
36104 +
            0x62736a74d48eba1c,
36105 +
            0xfd466bc76a3f7fba,
36106 +
            0x0fbc746935636edf,
36107 +
            0x2c6b72c88c10ce1b,
36108 +
            0xde916d66d34cdf7e,
36109 +
            0x6bc57f8bfef78f93,
36110 +
            0x993f6025a1ab9ef6,
36111 +
            0xbae8668418d83e32,
36112 +
            0x4812792a47842f57,
36113 +
            0xe499650d1b390c83,
36114 +
            0x16637aa344651de6,
36115 +
            0x35b47c02fd16bd22,
36116 +
            0xc74e63aca24aac47,
36117 +
            0x721a71418ff1fcaa,
36118 +
            0x80e06eefd0adedcf,
36119 +
            0xa337684e69de4d0b,
36120 +
            0x51cd77e036825c6e,
36121 +
            0xa9844d7a4c2a552c,
36122 +
            0x5b7e52d413764449,
36123 +
            0x78a95475aa05e48d,
36124 +
            0x8a534bdbf559f5e8,
36125 +
            0x3f075936d8e2a505,
36126 +
            0xcdfd469887beb460,
36127 +
            0xee2a40393ecd14a4,
36128 +
            0x1cd05f97619105c1,
36129 +
            0xb05b43b03d2c2615,
36130 +
            0x42a15c1e62703770,
36131 +
            0x61765abfdb0397b4,
36132 +
            0x938c4511845f86d1,
36133 +
            0x26d857fca9e4d63c,
36134 +
            0xd4224852f6b8c759,
36135 +
            0xf7f54ef34fcb679d,
36136 +
            0x050f515d109776f8,
36137 +
            0x9a3a50eeae26b35e,
36138 +
            0x68c04f40f17aa23b,
36139 +
            0x4b1749e1480902ff,
36140 +
            0xb9ed564f1755139a,
36141 +
            0x0cb944a23aee4377,
36142 +
            0xfe435b0c65b25212,
36143 +
            0xdd945daddcc1f2d6,
36144 +
            0x2f6e4203839de3b3,
36145 +
            0x83e55e24df20c067,
36146 +
            0x711f418a807cd102,
36147 +
            0x52c8472b390f71c6,
36148 +
            0xa0325885665360a3,
36149 +
            0x15664a684be8304e,
36150 +
            0xe79c55c614b4212b,
36151 +
            0xc44b5367adc781ef,
36152 +
            0x36b14cc9f29b908a,
36153 +
            0xa929caf448f0a0fb,
36154 +
            0x5bd3d55a17acb19e,
36155 +
            0x7804d3fbaedf115a,
36156 +
            0x8afecc55f183003f,
36157 +
            0x3faadeb8dc3850d2,
36158 +
            0xcd50c116836441b7,
36159 +
            0xee87c7b73a17e173,
36160 +
            0x1c7dd819654bf016,
36161 +
            0xb0f6c43e39f6d3c2,
36162 +
            0x420cdb9066aac2a7,
36163 +
            0x61dbdd31dfd96263,
36164 +
            0x9321c29f80857306,
36165 +
            0x2675d072ad3e23eb,
36166 +
            0xd48fcfdcf262328e,
36167 +
            0xf758c97d4b11924a,
36168 +
            0x05a2d6d3144d832f,
36169 +
            0x9a97d760aafc4689,
36170 +
            0x686dc8cef5a057ec,
36171 +
            0x4bbace6f4cd3f728,
36172 +
            0xb940d1c1138fe64d,
36173 +
            0x0c14c32c3e34b6a0,
36174 +
            0xfeeedc826168a7c5,
36175 +
            0xdd39da23d81b0701,
36176 +
            0x2fc3c58d87471664,
36177 +
            0x8348d9aadbfa35b0,
36178 +
            0x71b2c60484a624d5,
36179 +
            0x5265c0a53dd58411,
36180 +
            0xa09fdf0b62899574,
36181 +
            0x15cbcde64f32c599,
36182 +
            0xe731d248106ed4fc,
36183 +
            0xc4e6d4e9a91d7438,
36184 +
            0x361ccb47f641655d,
36185 +
            0xce55f1dd8ce96c1f,
36186 +
            0x3cafee73d3b57d7a,
36187 +
            0x1f78e8d26ac6ddbe,
36188 +
            0xed82f77c359accdb,
36189 +
            0x58d6e59118219c36,
36190 +
            0xaa2cfa3f477d8d53,
36191 +
            0x89fbfc9efe0e2d97,
36192 +
            0x7b01e330a1523cf2,
36193 +
            0xd78aff17fdef1f26,
36194 +
            0x2570e0b9a2b30e43,
36195 +
            0x06a7e6181bc0ae87,
36196 +
            0xf45df9b6449cbfe2,
36197 +
            0x4109eb5b6927ef0f,
36198 +
            0xb3f3f4f5367bfe6a,
36199 +
            0x9024f2548f085eae,
36200 +
            0x62deedfad0544fcb,
36201 +
            0xfdebec496ee58a6d,
36202 +
            0x0f11f3e731b99b08,
36203 +
            0x2cc6f54688ca3bcc,
36204 +
            0xde3ceae8d7962aa9,
36205 +
            0x6b68f805fa2d7a44,
36206 +
            0x9992e7aba5716b21,
36207 +
            0xba45e10a1c02cbe5,
36208 +
            0x48bffea4435eda80,
36209 +
            0xe434e2831fe3f954,
36210 +
            0x16cefd2d40bfe831,
36211 +
            0x3519fb8cf9cc48f5,
36212 +
            0xc7e3e422a6905990,
36213 +
            0x72b7f6cf8b2b097d,
36214 +
            0x804de961d4771818,
36215 +
            0xa39aefc06d04b8dc,
36216 +
            0x5160f06e3258a9b9,
36217 +
            0x67d1bca7c0c33933,
36218 +
            0x952ba3099f9f2856,
36219 +
            0xb6fca5a826ec8892,
36220 +
            0x4406ba0679b099f7,
36221 +
            0xf152a8eb540bc91a,
36222 +
            0x03a8b7450b57d87f,
36223 +
            0x207fb1e4b22478bb,
36224 +
            0xd285ae4aed7869de,
36225 +
            0x7e0eb26db1c54a0a,
36226 +
            0x8cf4adc3ee995b6f,
36227 +
            0xaf23ab6257eafbab,
36228 +
            0x5dd9b4cc08b6eace,
36229 +
            0xe88da621250dba23,
36230 +
            0x1a77b98f7a51ab46,
36231 +
            0x39a0bf2ec3220b82,
36232 +
            0xcb5aa0809c7e1ae7,
36233 +
            0x546fa13322cfdf41,
36234 +
            0xa695be9d7d93ce24,
36235 +
            0x8542b83cc4e06ee0,
36236 +
            0x77b8a7929bbc7f85,
36237 +
            0xc2ecb57fb6072f68,
36238 +
            0x3016aad1e95b3e0d,
36239 +
            0x13c1ac7050289ec9,
36240 +
            0xe13bb3de0f748fac,
36241 +
            0x4db0aff953c9ac78,
36242 +
            0xbf4ab0570c95bd1d,
36243 +
            0x9c9db6f6b5e61dd9,
36244 +
            0x6e67a958eaba0cbc,
36245 +
            0xdb33bbb5c7015c51,
36246 +
            0x29c9a41b985d4d34,
36247 +
            0x0a1ea2ba212eedf0,
36248 +
            0xf8e4bd147e72fc95,
36249 +
            0x00ad878e04daf5d7,
36250 +
            0xf25798205b86e4b2,
36251 +
            0xd1809e81e2f54476,
36252 +
            0x237a812fbda95513,
36253 +
            0x962e93c2901205fe,
36254 +
            0x64d48c6ccf4e149b,
36255 +
            0x47038acd763db45f,
36256 +
            0xb5f995632961a53a,
36257 +
            0x1972894475dc86ee,
36258 +
            0xeb8896ea2a80978b,
36259 +
            0xc85f904b93f3374f,
36260 +
            0x3aa58fe5ccaf262a,
36261 +
            0x8ff19d08e11476c7,
36262 +
            0x7d0b82a6be4867a2,
36263 +
            0x5edc8407073bc766,
36264 +
            0xac269ba95867d603,
36265 +
            0x33139a1ae6d613a5,
36266 +
            0xc1e985b4b98a02c0,
36267 +
            0xe23e831500f9a204,
36268 +
            0x10c49cbb5fa5b361,
36269 +
            0xa5908e56721ee38c,
36270 +
            0x576a91f82d42f2e9,
36271 +
            0x74bd97599431522d,
36272 +
            0x864788f7cb6d4348,
36273 +
            0x2acc94d097d0609c,
36274 +
            0xd8368b7ec88c71f9,
36275 +
            0xfbe18ddf71ffd13d,
36276 +
            0x091b92712ea3c058,
36277 +
            0xbc4f809c031890b5,
36278 +
            0x4eb59f325c4481d0,
36279 +
            0x6d629993e5372114,
36280 +
            0x9f98863dba6b3071,
36281 +
        ],
36282 +
        [
36283 +
            0x0000000000000000,
36284 +
            0x9065cb6e6d39918a,
36285 +
            0x1412b08f82e4b07f,
36286 +
            0x84777be1efdd21f5,
36287 +
            0x2825611f05c960fe,
36288 +
            0xb840aa7168f0f174,
36289 +
            0x3c37d190872dd081,
36290 +
            0xac521afeea14410b,
36291 +
            0x504ac23e0b92c1fc,
36292 +
            0xc02f095066ab5076,
36293 +
            0x445872b189767183,
36294 +
            0xd43db9dfe44fe009,
36295 +
            0x786fa3210e5ba102,
36296 +
            0xe80a684f63623088,
36297 +
            0x6c7d13ae8cbf117d,
36298 +
            0xfc18d8c0e18680f7,
36299 +
            0xa095847c172583f8,
36300 +
            0x30f04f127a1c1272,
36301 +
            0xb48734f395c13387,
36302 +
            0x24e2ff9df8f8a20d,
36303 +
            0x88b0e56312ece306,
36304 +
            0x18d52e0d7fd5728c,
36305 +
            0x9ca255ec90085379,
36306 +
            0x0cc79e82fd31c2f3,
36307 +
            0xf0df46421cb74204,
36308 +
            0x60ba8d2c718ed38e,
36309 +
            0xe4cdf6cd9e53f27b,
36310 +
            0x74a83da3f36a63f1,
36311 +
            0xd8fa275d197e22fa,
36312 +
            0x489fec337447b370,
36313 +
            0xcce897d29b9a9285,
36314 +
            0x5c8d5cbcf6a3030f,
36315 +
            0x75f22eab76dc949b,
36316 +
            0xe597e5c51be50511,
36317 +
            0x61e09e24f43824e4,
36318 +
            0xf185554a9901b56e,
36319 +
            0x5dd74fb47315f465,
36320 +
            0xcdb284da1e2c65ef,
36321 +
            0x49c5ff3bf1f1441a,
36322 +
            0xd9a034559cc8d590,
36323 +
            0x25b8ec957d4e5567,
36324 +
            0xb5dd27fb1077c4ed,
36325 +
            0x31aa5c1affaae518,
36326 +
            0xa1cf977492937492,
36327 +
            0x0d9d8d8a78873599,
36328 +
            0x9df846e415bea413,
36329 +
            0x198f3d05fa6385e6,
36330 +
            0x89eaf66b975a146c,
36331 +
            0xd567aad761f91763,
36332 +
            0x450261b90cc086e9,
36333 +
            0xc1751a58e31da71c,
36334 +
            0x5110d1368e243696,
36335 +
            0xfd42cbc86430779d,
36336 +
            0x6d2700a60909e617,
36337 +
            0xe9507b47e6d4c7e2,
36338 +
            0x7935b0298bed5668,
36339 +
            0x852d68e96a6bd69f,
36340 +
            0x1548a38707524715,
36341 +
            0x913fd866e88f66e0,
36342 +
            0x015a130885b6f76a,
36343 +
            0xad0809f66fa2b661,
36344 +
            0x3d6dc298029b27eb,
36345 +
            0xb91ab979ed46061e,
36346 +
            0x297f7217807f9794,
36347 +
            0xebe45d56edb92936,
36348 +
            0x7b8196388080b8bc,
36349 +
            0xfff6edd96f5d9949,
36350 +
            0x6f9326b7026408c3,
36351 +
            0xc3c13c49e87049c8,
36352 +
            0x53a4f7278549d842,
36353 +
            0xd7d38cc66a94f9b7,
36354 +
            0x47b647a807ad683d,
36355 +
            0xbbae9f68e62be8ca,
36356 +
            0x2bcb54068b127940,
36357 +
            0xafbc2fe764cf58b5,
36358 +
            0x3fd9e48909f6c93f,
36359 +
            0x938bfe77e3e28834,
36360 +
            0x03ee35198edb19be,
36361 +
            0x87994ef86106384b,
36362 +
            0x17fc85960c3fa9c1,
36363 +
            0x4b71d92afa9caace,
36364 +
            0xdb14124497a53b44,
36365 +
            0x5f6369a578781ab1,
36366 +
            0xcf06a2cb15418b3b,
36367 +
            0x6354b835ff55ca30,
36368 +
            0xf331735b926c5bba,
36369 +
            0x774608ba7db17a4f,
36370 +
            0xe723c3d41088ebc5,
36371 +
            0x1b3b1b14f10e6b32,
36372 +
            0x8b5ed07a9c37fab8,
36373 +
            0x0f29ab9b73eadb4d,
36374 +
            0x9f4c60f51ed34ac7,
36375 +
            0x331e7a0bf4c70bcc,
36376 +
            0xa37bb16599fe9a46,
36377 +
            0x270cca847623bbb3,
36378 +
            0xb76901ea1b1a2a39,
36379 +
            0x9e1673fd9b65bdad,
36380 +
            0x0e73b893f65c2c27,
36381 +
            0x8a04c37219810dd2,
36382 +
            0x1a61081c74b89c58,
36383 +
            0xb63312e29eacdd53,
36384 +
            0x2656d98cf3954cd9,
36385 +
            0xa221a26d1c486d2c,
36386 +
            0x324469037171fca6,
36387 +
            0xce5cb1c390f77c51,
36388 +
            0x5e397aadfdceeddb,
36389 +
            0xda4e014c1213cc2e,
36390 +
            0x4a2bca227f2a5da4,
36391 +
            0xe679d0dc953e1caf,
36392 +
            0x761c1bb2f8078d25,
36393 +
            0xf26b605317daacd0,
36394 +
            0x620eab3d7ae33d5a,
36395 +
            0x3e83f7818c403e55,
36396 +
            0xaee63cefe179afdf,
36397 +
            0x2a91470e0ea48e2a,
36398 +
            0xbaf48c60639d1fa0,
36399 +
            0x16a6969e89895eab,
36400 +
            0x86c35df0e4b0cf21,
36401 +
            0x02b426110b6deed4,
36402 +
            0x92d1ed7f66547f5e,
36403 +
            0x6ec935bf87d2ffa9,
36404 +
            0xfeacfed1eaeb6e23,
36405 +
            0x7adb853005364fd6,
36406 +
            0xeabe4e5e680fde5c,
36407 +
            0x46ec54a0821b9f57,
36408 +
            0xd6899fceef220edd,
36409 +
            0x52fee42f00ff2f28,
36410 +
            0xc29b2f416dc6bea2,
36411 +
            0xe3119cfe83e5c107,
36412 +
            0x73745790eedc508d,
36413 +
            0xf7032c7101017178,
36414 +
            0x6766e71f6c38e0f2,
36415 +
            0xcb34fde1862ca1f9,
36416 +
            0x5b51368feb153073,
36417 +
            0xdf264d6e04c81186,
36418 +
            0x4f43860069f1800c,
36419 +
            0xb35b5ec0887700fb,
36420 +
            0x233e95aee54e9171,
36421 +
            0xa749ee4f0a93b084,
36422 +
            0x372c252167aa210e,
36423 +
            0x9b7e3fdf8dbe6005,
36424 +
            0x0b1bf4b1e087f18f,
36425 +
            0x8f6c8f500f5ad07a,
36426 +
            0x1f09443e626341f0,
36427 +
            0x4384188294c042ff,
36428 +
            0xd3e1d3ecf9f9d375,
36429 +
            0x5796a80d1624f280,
36430 +
            0xc7f363637b1d630a,
36431 +
            0x6ba1799d91092201,
36432 +
            0xfbc4b2f3fc30b38b,
36433 +
            0x7fb3c91213ed927e,
36434 +
            0xefd6027c7ed403f4,
36435 +
            0x13cedabc9f528303,
36436 +
            0x83ab11d2f26b1289,
36437 +
            0x07dc6a331db6337c,
36438 +
            0x97b9a15d708fa2f6,
36439 +
            0x3bebbba39a9be3fd,
36440 +
            0xab8e70cdf7a27277,
36441 +
            0x2ff90b2c187f5382,
36442 +
            0xbf9cc0427546c208,
36443 +
            0x96e3b255f539559c,
36444 +
            0x0686793b9800c416,
36445 +
            0x82f102da77dde5e3,
36446 +
            0x1294c9b41ae47469,
36447 +
            0xbec6d34af0f03562,
36448 +
            0x2ea318249dc9a4e8,
36449 +
            0xaad463c57214851d,
36450 +
            0x3ab1a8ab1f2d1497,
36451 +
            0xc6a9706bfeab9460,
36452 +
            0x56ccbb05939205ea,
36453 +
            0xd2bbc0e47c4f241f,
36454 +
            0x42de0b8a1176b595,
36455 +
            0xee8c1174fb62f49e,
36456 +
            0x7ee9da1a965b6514,
36457 +
            0xfa9ea1fb798644e1,
36458 +
            0x6afb6a9514bfd56b,
36459 +
            0x36763629e21cd664,
36460 +
            0xa613fd478f2547ee,
36461 +
            0x226486a660f8661b,
36462 +
            0xb2014dc80dc1f791,
36463 +
            0x1e535736e7d5b69a,
36464 +
            0x8e369c588aec2710,
36465 +
            0x0a41e7b9653106e5,
36466 +
            0x9a242cd70808976f,
36467 +
            0x663cf417e98e1798,
36468 +
            0xf6593f7984b78612,
36469 +
            0x722e44986b6aa7e7,
36470 +
            0xe24b8ff60653366d,
36471 +
            0x4e199508ec477766,
36472 +
            0xde7c5e66817ee6ec,
36473 +
            0x5a0b25876ea3c719,
36474 +
            0xca6eeee9039a5693,
36475 +
            0x08f5c1a86e5ce831,
36476 +
            0x98900ac6036579bb,
36477 +
            0x1ce77127ecb8584e,
36478 +
            0x8c82ba498181c9c4,
36479 +
            0x20d0a0b76b9588cf,
36480 +
            0xb0b56bd906ac1945,
36481 +
            0x34c21038e97138b0,
36482 +
            0xa4a7db568448a93a,
36483 +
            0x58bf039665ce29cd,
36484 +
            0xc8dac8f808f7b847,
36485 +
            0x4cadb319e72a99b2,
36486 +
            0xdcc878778a130838,
36487 +
            0x709a628960074933,
36488 +
            0xe0ffa9e70d3ed8b9,
36489 +
            0x6488d206e2e3f94c,
36490 +
            0xf4ed19688fda68c6,
36491 +
            0xa86045d479796bc9,
36492 +
            0x38058eba1440fa43,
36493 +
            0xbc72f55bfb9ddbb6,
36494 +
            0x2c173e3596a44a3c,
36495 +
            0x804524cb7cb00b37,
36496 +
            0x1020efa511899abd,
36497 +
            0x94579444fe54bb48,
36498 +
            0x04325f2a936d2ac2,
36499 +
            0xf82a87ea72ebaa35,
36500 +
            0x684f4c841fd23bbf,
36501 +
            0xec383765f00f1a4a,
36502 +
            0x7c5dfc0b9d368bc0,
36503 +
            0xd00fe6f57722cacb,
36504 +
            0x406a2d9b1a1b5b41,
36505 +
            0xc41d567af5c67ab4,
36506 +
            0x54789d1498ffeb3e,
36507 +
            0x7d07ef0318807caa,
36508 +
            0xed62246d75b9ed20,
36509 +
            0x69155f8c9a64ccd5,
36510 +
            0xf97094e2f75d5d5f,
36511 +
            0x55228e1c1d491c54,
36512 +
            0xc547457270708dde,
36513 +
            0x41303e939fadac2b,
36514 +
            0xd155f5fdf2943da1,
36515 +
            0x2d4d2d3d1312bd56,
36516 +
            0xbd28e6537e2b2cdc,
36517 +
            0x395f9db291f60d29,
36518 +
            0xa93a56dcfccf9ca3,
36519 +
            0x05684c2216dbdda8,
36520 +
            0x950d874c7be24c22,
36521 +
            0x117afcad943f6dd7,
36522 +
            0x811f37c3f906fc5d,
36523 +
            0xdd926b7f0fa5ff52,
36524 +
            0x4df7a011629c6ed8,
36525 +
            0xc980dbf08d414f2d,
36526 +
            0x59e5109ee078dea7,
36527 +
            0xf5b70a600a6c9fac,
36528 +
            0x65d2c10e67550e26,
36529 +
            0xe1a5baef88882fd3,
36530 +
            0x71c07181e5b1be59,
36531 +
            0x8dd8a94104373eae,
36532 +
            0x1dbd622f690eaf24,
36533 +
            0x99ca19ce86d38ed1,
36534 +
            0x09afd2a0ebea1f5b,
36535 +
            0xa5fdc85e01fe5e50,
36536 +
            0x359803306cc7cfda,
36537 +
            0xb1ef78d1831aee2f,
36538 +
            0x218ab3bfee237fa5,
36539 +
        ],
36540 +
        [
36541 +
            0x0000000000000000,
36542 +
            0xc23dfbc6ca591ca3,
36543 +
            0xb0a2d1decc25aa2d,
36544 +
            0x729f2a18067cb68e,
36545 +
            0x559c85eec0dcc731,
36546 +
            0x97a17e280a85db92,
36547 +
            0xe53e54300cf96d1c,
36548 +
            0x2703aff6c6a071bf,
36549 +
            0xab390bdd81b98e62,
36550 +
            0x6904f01b4be092c1,
36551 +
            0x1b9bda034d9c244f,
36552 +
            0xd9a621c587c538ec,
36553 +
            0xfea58e3341654953,
36554 +
            0x3c9875f58b3c55f0,
36555 +
            0x4e075fed8d40e37e,
36556 +
            0x8c3aa42b4719ffdd,
36557 +
            0x62ab31e85be48faf,
36558 +
            0xa096ca2e91bd930c,
36559 +
            0xd209e03697c12582,
36560 +
            0x10341bf05d983921,
36561 +
            0x3737b4069b38489e,
36562 +
            0xf50a4fc05161543d,
36563 +
            0x879565d8571de2b3,
36564 +
            0x45a89e1e9d44fe10,
36565 +
            0xc9923a35da5d01cd,
36566 +
            0x0bafc1f310041d6e,
36567 +
            0x7930ebeb1678abe0,
36568 +
            0xbb0d102ddc21b743,
36569 +
            0x9c0ebfdb1a81c6fc,
36570 +
            0x5e33441dd0d8da5f,
36571 +
            0x2cac6e05d6a46cd1,
36572 +
            0xee9195c31cfd7072,
36573 +
            0xc55663d0b7c91f5e,
36574 +
            0x076b98167d9003fd,
36575 +
            0x75f4b20e7becb573,
36576 +
            0xb7c949c8b1b5a9d0,
36577 +
            0x90cae63e7715d86f,
36578 +
            0x52f71df8bd4cc4cc,
36579 +
            0x206837e0bb307242,
36580 +
            0xe255cc2671696ee1,
36581 +
            0x6e6f680d3670913c,
36582 +
            0xac5293cbfc298d9f,
36583 +
            0xdecdb9d3fa553b11,
36584 +
            0x1cf04215300c27b2,
36585 +
            0x3bf3ede3f6ac560d,
36586 +
            0xf9ce16253cf54aae,
36587 +
            0x8b513c3d3a89fc20,
36588 +
            0x496cc7fbf0d0e083,
36589 +
            0xa7fd5238ec2d90f1,
36590 +
            0x65c0a9fe26748c52,
36591 +
            0x175f83e620083adc,
36592 +
            0xd5627820ea51267f,
36593 +
            0xf261d7d62cf157c0,
36594 +
            0x305c2c10e6a84b63,
36595 +
            0x42c30608e0d4fded,
36596 +
            0x80fefdce2a8de14e,
36597 +
            0x0cc459e56d941e93,
36598 +
            0xcef9a223a7cd0230,
36599 +
            0xbc66883ba1b1b4be,
36600 +
            0x7e5b73fd6be8a81d,
36601 +
            0x5958dc0bad48d9a2,
36602 +
            0x9b6527cd6711c501,
36603 +
            0xe9fa0dd5616d738f,
36604 +
            0x2bc7f613ab346f2c,
36605 +
            0xbe75e1f23705add7,
36606 +
            0x7c481a34fd5cb174,
36607 +
            0x0ed7302cfb2007fa,
36608 +
            0xcceacbea31791b59,
36609 +
            0xebe9641cf7d96ae6,
36610 +
            0x29d49fda3d807645,
36611 +
            0x5b4bb5c23bfcc0cb,
36612 +
            0x99764e04f1a5dc68,
36613 +
            0x154cea2fb6bc23b5,
36614 +
            0xd77111e97ce53f16,
36615 +
            0xa5ee3bf17a998998,
36616 +
            0x67d3c037b0c0953b,
36617 +
            0x40d06fc17660e484,
36618 +
            0x82ed9407bc39f827,
36619 +
            0xf072be1fba454ea9,
36620 +
            0x324f45d9701c520a,
36621 +
            0xdcded01a6ce12278,
36622 +
            0x1ee32bdca6b83edb,
36623 +
            0x6c7c01c4a0c48855,
36624 +
            0xae41fa026a9d94f6,
36625 +
            0x894255f4ac3de549,
36626 +
            0x4b7fae326664f9ea,
36627 +
            0x39e0842a60184f64,
36628 +
            0xfbdd7fecaa4153c7,
36629 +
            0x77e7dbc7ed58ac1a,
36630 +
            0xb5da20012701b0b9,
36631 +
            0xc7450a19217d0637,
36632 +
            0x0578f1dfeb241a94,
36633 +
            0x227b5e292d846b2b,
36634 +
            0xe046a5efe7dd7788,
36635 +
            0x92d98ff7e1a1c106,
36636 +
            0x50e474312bf8dda5,
36637 +
            0x7b23822280ccb289,
36638 +
            0xb91e79e44a95ae2a,
36639 +
            0xcb8153fc4ce918a4,
36640 +
            0x09bca83a86b00407,
36641 +
            0x2ebf07cc401075b8,
36642 +
            0xec82fc0a8a49691b,
36643 +
            0x9e1dd6128c35df95,
36644 +
            0x5c202dd4466cc336,
36645 +
            0xd01a89ff01753ceb,
36646 +
            0x12277239cb2c2048,
36647 +
            0x60b85821cd5096c6,
36648 +
            0xa285a3e707098a65,
36649 +
            0x85860c11c1a9fbda,
36650 +
            0x47bbf7d70bf0e779,
36651 +
            0x3524ddcf0d8c51f7,
36652 +
            0xf7192609c7d54d54,
36653 +
            0x1988b3cadb283d26,
36654 +
            0xdbb5480c11712185,
36655 +
            0xa92a6214170d970b,
36656 +
            0x6b1799d2dd548ba8,
36657 +
            0x4c1436241bf4fa17,
36658 +
            0x8e29cde2d1ade6b4,
36659 +
            0xfcb6e7fad7d1503a,
36660 +
            0x3e8b1c3c1d884c99,
36661 +
            0xb2b1b8175a91b344,
36662 +
            0x708c43d190c8afe7,
36663 +
            0x021369c996b41969,
36664 +
            0xc02e920f5ced05ca,
36665 +
            0xe72d3df99a4d7475,
36666 +
            0x2510c63f501468d6,
36667 +
            0x578fec275668de58,
36668 +
            0x95b217e19c31c2fb,
36669 +
            0x4832e5b7369cc8c5,
36670 +
            0x8a0f1e71fcc5d466,
36671 +
            0xf8903469fab962e8,
36672 +
            0x3aadcfaf30e07e4b,
36673 +
            0x1dae6059f6400ff4,
36674 +
            0xdf939b9f3c191357,
36675 +
            0xad0cb1873a65a5d9,
36676 +
            0x6f314a41f03cb97a,
36677 +
            0xe30bee6ab72546a7,
36678 +
            0x213615ac7d7c5a04,
36679 +
            0x53a93fb47b00ec8a,
36680 +
            0x9194c472b159f029,
36681 +
            0xb6976b8477f98196,
36682 +
            0x74aa9042bda09d35,
36683 +
            0x0635ba5abbdc2bbb,
36684 +
            0xc408419c71853718,
36685 +
            0x2a99d45f6d78476a,
36686 +
            0xe8a42f99a7215bc9,
36687 +
            0x9a3b0581a15ded47,
36688 +
            0x5806fe476b04f1e4,
36689 +
            0x7f0551b1ada4805b,
36690 +
            0xbd38aa7767fd9cf8,
36691 +
            0xcfa7806f61812a76,
36692 +
            0x0d9a7ba9abd836d5,
36693 +
            0x81a0df82ecc1c908,
36694 +
            0x439d24442698d5ab,
36695 +
            0x31020e5c20e46325,
36696 +
            0xf33ff59aeabd7f86,
36697 +
            0xd43c5a6c2c1d0e39,
36698 +
            0x1601a1aae644129a,
36699 +
            0x649e8bb2e038a414,
36700 +
            0xa6a370742a61b8b7,
36701 +
            0x8d6486678155d79b,
36702 +
            0x4f597da14b0ccb38,
36703 +
            0x3dc657b94d707db6,
36704 +
            0xfffbac7f87296115,
36705 +
            0xd8f80389418910aa,
36706 +
            0x1ac5f84f8bd00c09,
36707 +
            0x685ad2578dacba87,
36708 +
            0xaa67299147f5a624,
36709 +
            0x265d8dba00ec59f9,
36710 +
            0xe460767ccab5455a,
36711 +
            0x96ff5c64ccc9f3d4,
36712 +
            0x54c2a7a20690ef77,
36713 +
            0x73c10854c0309ec8,
36714 +
            0xb1fcf3920a69826b,
36715 +
            0xc363d98a0c1534e5,
36716 +
            0x015e224cc64c2846,
36717 +
            0xefcfb78fdab15834,
36718 +
            0x2df24c4910e84497,
36719 +
            0x5f6d66511694f219,
36720 +
            0x9d509d97dccdeeba,
36721 +
            0xba5332611a6d9f05,
36722 +
            0x786ec9a7d03483a6,
36723 +
            0x0af1e3bfd6483528,
36724 +
            0xc8cc18791c11298b,
36725 +
            0x44f6bc525b08d656,
36726 +
            0x86cb47949151caf5,
36727 +
            0xf4546d8c972d7c7b,
36728 +
            0x3669964a5d7460d8,
36729 +
            0x116a39bc9bd41167,
36730 +
            0xd357c27a518d0dc4,
36731 +
            0xa1c8e86257f1bb4a,
36732 +
            0x63f513a49da8a7e9,
36733 +
            0xf647044501996512,
36734 +
            0x347aff83cbc079b1,
36735 +
            0x46e5d59bcdbccf3f,
36736 +
            0x84d82e5d07e5d39c,
36737 +
            0xa3db81abc145a223,
36738 +
            0x61e67a6d0b1cbe80,
36739 +
            0x137950750d60080e,
36740 +
            0xd144abb3c73914ad,
36741 +
            0x5d7e0f988020eb70,
36742 +
            0x9f43f45e4a79f7d3,
36743 +
            0xeddcde464c05415d,
36744 +
            0x2fe12580865c5dfe,
36745 +
            0x08e28a7640fc2c41,
36746 +
            0xcadf71b08aa530e2,
36747 +
            0xb8405ba88cd9866c,
36748 +
            0x7a7da06e46809acf,
36749 +
            0x94ec35ad5a7deabd,
36750 +
            0x56d1ce6b9024f61e,
36751 +
            0x244ee47396584090,
36752 +
            0xe6731fb55c015c33,
36753 +
            0xc170b0439aa12d8c,
36754 +
            0x034d4b8550f8312f,
36755 +
            0x71d2619d568487a1,
36756 +
            0xb3ef9a5b9cdd9b02,
36757 +
            0x3fd53e70dbc464df,
36758 +
            0xfde8c5b6119d787c,
36759 +
            0x8f77efae17e1cef2,
36760 +
            0x4d4a1468ddb8d251,
36761 +
            0x6a49bb9e1b18a3ee,
36762 +
            0xa8744058d141bf4d,
36763 +
            0xdaeb6a40d73d09c3,
36764 +
            0x18d691861d641560,
36765 +
            0x33116795b6507a4c,
36766 +
            0xf12c9c537c0966ef,
36767 +
            0x83b3b64b7a75d061,
36768 +
            0x418e4d8db02cccc2,
36769 +
            0x668de27b768cbd7d,
36770 +
            0xa4b019bdbcd5a1de,
36771 +
            0xd62f33a5baa91750,
36772 +
            0x1412c86370f00bf3,
36773 +
            0x98286c4837e9f42e,
36774 +
            0x5a15978efdb0e88d,
36775 +
            0x288abd96fbcc5e03,
36776 +
            0xeab74650319542a0,
36777 +
            0xcdb4e9a6f735331f,
36778 +
            0x0f8912603d6c2fbc,
36779 +
            0x7d1638783b109932,
36780 +
            0xbf2bc3bef1498591,
36781 +
            0x51ba567dedb4f5e3,
36782 +
            0x9387adbb27ede940,
36783 +
            0xe11887a321915fce,
36784 +
            0x23257c65ebc8436d,
36785 +
            0x0426d3932d6832d2,
36786 +
            0xc61b2855e7312e71,
36787 +
            0xb484024de14d98ff,
36788 +
            0x76b9f98b2b14845c,
36789 +
            0xfa835da06c0d7b81,
36790 +
            0x38bea666a6546722,
36791 +
            0x4a218c7ea028d1ac,
36792 +
            0x881c77b86a71cd0f,
36793 +
            0xaf1fd84eacd1bcb0,
36794 +
            0x6d2223886688a013,
36795 +
            0x1fbd099060f4169d,
36796 +
            0xdd80f256aaad0a3e,
36797 +
        ],
36798 +
        [
36799 +
            0x0000000000000000,
36800 +
            0xeadc41fd2ba3d420,
36801 +
            0xe161a5a90fd03b2b,
36802 +
            0x0bbde4542473ef0b,
36803 +
            0xf61a6d014737e53d,
36804 +
            0x1cc62cfc6c94311d,
36805 +
            0x177bc8a848e7de16,
36806 +
            0xfda7895563440a36,
36807 +
            0xd8edfc51d6f85911,
36808 +
            0x3231bdacfd5b8d31,
36809 +
            0x398c59f8d928623a,
36810 +
            0xd3501805f28bb61a,
36811 +
            0x2ef7915091cfbc2c,
36812 +
            0xc42bd0adba6c680c,
36813 +
            0xcf9634f99e1f8707,
36814 +
            0x254a7504b5bc5327,
36815 +
            0x8502def0f5672149,
36816 +
            0x6fde9f0ddec4f569,
36817 +
            0x64637b59fab71a62,
36818 +
            0x8ebf3aa4d114ce42,
36819 +
            0x7318b3f1b250c474,
36820 +
            0x99c4f20c99f31054,
36821 +
            0x92791658bd80ff5f,
36822 +
            0x78a557a596232b7f,
36823 +
            0x5def22a1239f7858,
36824 +
            0xb733635c083cac78,
36825 +
            0xbc8e87082c4f4373,
36826 +
            0x5652c6f507ec9753,
36827 +
            0xabf54fa064a89d65,
36828 +
            0x41290e5d4f0b4945,
36829 +
            0x4a94ea096b78a64e,
36830 +
            0xa048abf440db726e,
36831 +
            0x3edc9bb2b259d1f9,
36832 +
            0xd400da4f99fa05d9,
36833 +
            0xdfbd3e1bbd89ead2,
36834 +
            0x35617fe6962a3ef2,
36835 +
            0xc8c6f6b3f56e34c4,
36836 +
            0x221ab74edecde0e4,
36837 +
            0x29a7531afabe0fef,
36838 +
            0xc37b12e7d11ddbcf,
36839 +
            0xe63167e364a188e8,
36840 +
            0x0ced261e4f025cc8,
36841 +
            0x0750c24a6b71b3c3,
36842 +
            0xed8c83b740d267e3,
36843 +
            0x102b0ae223966dd5,
36844 +
            0xfaf74b1f0835b9f5,
36845 +
            0xf14aaf4b2c4656fe,
36846 +
            0x1b96eeb607e582de,
36847 +
            0xbbde4542473ef0b0,
36848 +
            0x510204bf6c9d2490,
36849 +
            0x5abfe0eb48eecb9b,
36850 +
            0xb063a116634d1fbb,
36851 +
            0x4dc428430009158d,
36852 +
            0xa71869be2baac1ad,
36853 +
            0xaca58dea0fd92ea6,
36854 +
            0x4679cc17247afa86,
36855 +
            0x6333b91391c6a9a1,
36856 +
            0x89eff8eeba657d81,
36857 +
            0x82521cba9e16928a,
36858 +
            0x688e5d47b5b546aa,
36859 +
            0x9529d412d6f14c9c,
36860 +
            0x7ff595effd5298bc,
36861 +
            0x744871bbd92177b7,
36862 +
            0x9e943046f282a397,
36863 +
            0x7db9376564b3a3f2,
36864 +
            0x976576984f1077d2,
36865 +
            0x9cd892cc6b6398d9,
36866 +
            0x7604d33140c04cf9,
36867 +
            0x8ba35a64238446cf,
36868 +
            0x617f1b99082792ef,
36869 +
            0x6ac2ffcd2c547de4,
36870 +
            0x801ebe3007f7a9c4,
36871 +
            0xa554cb34b24bfae3,
36872 +
            0x4f888ac999e82ec3,
36873 +
            0x44356e9dbd9bc1c8,
36874 +
            0xaee92f60963815e8,
36875 +
            0x534ea635f57c1fde,
36876 +
            0xb992e7c8dedfcbfe,
36877 +
            0xb22f039cfaac24f5,
36878 +
            0x58f34261d10ff0d5,
36879 +
            0xf8bbe99591d482bb,
36880 +
            0x1267a868ba77569b,
36881 +
            0x19da4c3c9e04b990,
36882 +
            0xf3060dc1b5a76db0,
36883 +
            0x0ea18494d6e36786,
36884 +
            0xe47dc569fd40b3a6,
36885 +
            0xefc0213dd9335cad,
36886 +
            0x051c60c0f290888d,
36887 +
            0x205615c4472cdbaa,
36888 +
            0xca8a54396c8f0f8a,
36889 +
            0xc137b06d48fce081,
36890 +
            0x2bebf190635f34a1,
36891 +
            0xd64c78c5001b3e97,
36892 +
            0x3c9039382bb8eab7,
36893 +
            0x372ddd6c0fcb05bc,
36894 +
            0xddf19c912468d19c,
36895 +
            0x4365acd7d6ea720b,
36896 +
            0xa9b9ed2afd49a62b,
36897 +
            0xa204097ed93a4920,
36898 +
            0x48d84883f2999d00,
36899 +
            0xb57fc1d691dd9736,
36900 +
            0x5fa3802bba7e4316,
36901 +
            0x541e647f9e0dac1d,
36902 +
            0xbec22582b5ae783d,
36903 +
            0x9b88508600122b1a,
36904 +
            0x7154117b2bb1ff3a,
36905 +
            0x7ae9f52f0fc21031,
36906 +
            0x9035b4d22461c411,
36907 +
            0x6d923d874725ce27,
36908 +
            0x874e7c7a6c861a07,
36909 +
            0x8cf3982e48f5f50c,
36910 +
            0x662fd9d36356212c,
36911 +
            0xc6677227238d5342,
36912 +
            0x2cbb33da082e8762,
36913 +
            0x2706d78e2c5d6869,
36914 +
            0xcdda967307febc49,
36915 +
            0x307d1f2664bab67f,
36916 +
            0xdaa15edb4f19625f,
36917 +
            0xd11cba8f6b6a8d54,
36918 +
            0x3bc0fb7240c95974,
36919 +
            0x1e8a8e76f5750a53,
36920 +
            0xf456cf8bded6de73,
36921 +
            0xffeb2bdffaa53178,
36922 +
            0x15376a22d106e558,
36923 +
            0xe890e377b242ef6e,
36924 +
            0x024ca28a99e13b4e,
36925 +
            0x09f146debd92d445,
36926 +
            0xe32d072396310065,
36927 +
            0xfb726ecac96747e4,
36928 +
            0x11ae2f37e2c493c4,
36929 +
            0x1a13cb63c6b77ccf,
36930 +
            0xf0cf8a9eed14a8ef,
36931 +
            0x0d6803cb8e50a2d9,
36932 +
            0xe7b44236a5f376f9,
36933 +
            0xec09a662818099f2,
36934 +
            0x06d5e79faa234dd2,
36935 +
            0x239f929b1f9f1ef5,
36936 +
            0xc943d366343ccad5,
36937 +
            0xc2fe3732104f25de,
36938 +
            0x282276cf3becf1fe,
36939 +
            0xd585ff9a58a8fbc8,
36940 +
            0x3f59be67730b2fe8,
36941 +
            0x34e45a335778c0e3,
36942 +
            0xde381bce7cdb14c3,
36943 +
            0x7e70b03a3c0066ad,
36944 +
            0x94acf1c717a3b28d,
36945 +
            0x9f11159333d05d86,
36946 +
            0x75cd546e187389a6,
36947 +
            0x886add3b7b378390,
36948 +
            0x62b69cc6509457b0,
36949 +
            0x690b789274e7b8bb,
36950 +
            0x83d7396f5f446c9b,
36951 +
            0xa69d4c6beaf83fbc,
36952 +
            0x4c410d96c15beb9c,
36953 +
            0x47fce9c2e5280497,
36954 +
            0xad20a83fce8bd0b7,
36955 +
            0x5087216aadcfda81,
36956 +
            0xba5b6097866c0ea1,
36957 +
            0xb1e684c3a21fe1aa,
36958 +
            0x5b3ac53e89bc358a,
36959 +
            0xc5aef5787b3e961d,
36960 +
            0x2f72b485509d423d,
36961 +
            0x24cf50d174eead36,
36962 +
            0xce13112c5f4d7916,
36963 +
            0x33b498793c097320,
36964 +
            0xd968d98417aaa700,
36965 +
            0xd2d53dd033d9480b,
36966 +
            0x38097c2d187a9c2b,
36967 +
            0x1d430929adc6cf0c,
36968 +
            0xf79f48d486651b2c,
36969 +
            0xfc22ac80a216f427,
36970 +
            0x16feed7d89b52007,
36971 +
            0xeb596428eaf12a31,
36972 +
            0x018525d5c152fe11,
36973 +
            0x0a38c181e521111a,
36974 +
            0xe0e4807cce82c53a,
36975 +
            0x40ac2b888e59b754,
36976 +
            0xaa706a75a5fa6374,
36977 +
            0xa1cd8e2181898c7f,
36978 +
            0x4b11cfdcaa2a585f,
36979 +
            0xb6b64689c96e5269,
36980 +
            0x5c6a0774e2cd8649,
36981 +
            0x57d7e320c6be6942,
36982 +
            0xbd0ba2dded1dbd62,
36983 +
            0x9841d7d958a1ee45,
36984 +
            0x729d962473023a65,
36985 +
            0x792072705771d56e,
36986 +
            0x93fc338d7cd2014e,
36987 +
            0x6e5bbad81f960b78,
36988 +
            0x8487fb253435df58,
36989 +
            0x8f3a1f7110463053,
36990 +
            0x65e65e8c3be5e473,
36991 +
            0x86cb59afadd4e416,
36992 +
            0x6c17185286773036,
36993 +
            0x67aafc06a204df3d,
36994 +
            0x8d76bdfb89a70b1d,
36995 +
            0x70d134aeeae3012b,
36996 +
            0x9a0d7553c140d50b,
36997 +
            0x91b09107e5333a00,
36998 +
            0x7b6cd0face90ee20,
36999 +
            0x5e26a5fe7b2cbd07,
37000 +
            0xb4fae403508f6927,
37001 +
            0xbf47005774fc862c,
37002 +
            0x559b41aa5f5f520c,
37003 +
            0xa83cc8ff3c1b583a,
37004 +
            0x42e0890217b88c1a,
37005 +
            0x495d6d5633cb6311,
37006 +
            0xa3812cab1868b731,
37007 +
            0x03c9875f58b3c55f,
37008 +
            0xe915c6a27310117f,
37009 +
            0xe2a822f65763fe74,
37010 +
            0x0874630b7cc02a54,
37011 +
            0xf5d3ea5e1f842062,
37012 +
            0x1f0faba33427f442,
37013 +
            0x14b24ff710541b49,
37014 +
            0xfe6e0e0a3bf7cf69,
37015 +
            0xdb247b0e8e4b9c4e,
37016 +
            0x31f83af3a5e8486e,
37017 +
            0x3a45dea7819ba765,
37018 +
            0xd0999f5aaa387345,
37019 +
            0x2d3e160fc97c7973,
37020 +
            0xc7e257f2e2dfad53,
37021 +
            0xcc5fb3a6c6ac4258,
37022 +
            0x2683f25bed0f9678,
37023 +
            0xb817c21d1f8d35ef,
37024 +
            0x52cb83e0342ee1cf,
37025 +
            0x597667b4105d0ec4,
37026 +
            0xb3aa26493bfedae4,
37027 +
            0x4e0daf1c58bad0d2,
37028 +
            0xa4d1eee1731904f2,
37029 +
            0xaf6c0ab5576aebf9,
37030 +
            0x45b04b487cc93fd9,
37031 +
            0x60fa3e4cc9756cfe,
37032 +
            0x8a267fb1e2d6b8de,
37033 +
            0x819b9be5c6a557d5,
37034 +
            0x6b47da18ed0683f5,
37035 +
            0x96e0534d8e4289c3,
37036 +
            0x7c3c12b0a5e15de3,
37037 +
            0x7781f6e48192b2e8,
37038 +
            0x9d5db719aa3166c8,
37039 +
            0x3d151cedeaea14a6,
37040 +
            0xd7c95d10c149c086,
37041 +
            0xdc74b944e53a2f8d,
37042 +
            0x36a8f8b9ce99fbad,
37043 +
            0xcb0f71ecadddf19b,
37044 +
            0x21d33011867e25bb,
37045 +
            0x2a6ed445a20dcab0,
37046 +
            0xc0b295b889ae1e90,
37047 +
            0xe5f8e0bc3c124db7,
37048 +
            0x0f24a14117b19997,
37049 +
            0x0499451533c2769c,
37050 +
            0xee4504e81861a2bc,
37051 +
            0x13e28dbd7b25a88a,
37052 +
            0xf93ecc4050867caa,
37053 +
            0xf283281474f593a1,
37054 +
            0x185f69e95f564781,
37055 +
        ],
37056 +
    ];
37057 +
37058 +
    pub static CRC64_REDIS_TABLE: [[u64; 256]; 16] = [
37059 +
        [
37060 +
            0x0000000000000000,
37061 +
            0x7ad870c830358979,
37062 +
            0xf5b0e190606b12f2,
37063 +
            0x8f689158505e9b8b,
37064 +
            0xc038e5739841b68f,
37065 +
            0xbae095bba8743ff6,
37066 +
            0x358804e3f82aa47d,
37067 +
            0x4f50742bc81f2d04,
37068 +
            0xab28ecb46814fe75,
37069 +
            0xd1f09c7c5821770c,
37070 +
            0x5e980d24087fec87,
37071 +
            0x24407dec384a65fe,
37072 +
            0x6b1009c7f05548fa,
37073 +
            0x11c8790fc060c183,
37074 +
            0x9ea0e857903e5a08,
37075 +
            0xe478989fa00bd371,
37076 +
            0x7d08ff3b88be6f81,
37077 +
            0x07d08ff3b88be6f8,
37078 +
            0x88b81eabe8d57d73,
37079 +
            0xf2606e63d8e0f40a,
37080 +
            0xbd301a4810ffd90e,
37081 +
            0xc7e86a8020ca5077,
37082 +
            0x4880fbd87094cbfc,
37083 +
            0x32588b1040a14285,
37084 +
            0xd620138fe0aa91f4,
37085 +
            0xacf86347d09f188d,
37086 +
            0x2390f21f80c18306,
37087 +
            0x594882d7b0f40a7f,
37088 +
            0x1618f6fc78eb277b,
37089 +
            0x6cc0863448deae02,
37090 +
            0xe3a8176c18803589,
37091 +
            0x997067a428b5bcf0,
37092 +
            0xfa11fe77117cdf02,
37093 +
            0x80c98ebf2149567b,
37094 +
            0x0fa11fe77117cdf0,
37095 +
            0x75796f2f41224489,
37096 +
            0x3a291b04893d698d,
37097 +
            0x40f16bccb908e0f4,
37098 +
            0xcf99fa94e9567b7f,
37099 +
            0xb5418a5cd963f206,
37100 +
            0x513912c379682177,
37101 +
            0x2be1620b495da80e,
37102 +
            0xa489f35319033385,
37103 +
            0xde51839b2936bafc,
37104 +
            0x9101f7b0e12997f8,
37105 +
            0xebd98778d11c1e81,
37106 +
            0x64b116208142850a,
37107 +
            0x1e6966e8b1770c73,
37108 +
            0x8719014c99c2b083,
37109 +
            0xfdc17184a9f739fa,
37110 +
            0x72a9e0dcf9a9a271,
37111 +
            0x08719014c99c2b08,
37112 +
            0x4721e43f0183060c,
37113 +
            0x3df994f731b68f75,
37114 +
            0xb29105af61e814fe,
37115 +
            0xc849756751dd9d87,
37116 +
            0x2c31edf8f1d64ef6,
37117 +
            0x56e99d30c1e3c78f,
37118 +
            0xd9810c6891bd5c04,
37119 +
            0xa3597ca0a188d57d,
37120 +
            0xec09088b6997f879,
37121 +
            0x96d1784359a27100,
37122 +
            0x19b9e91b09fcea8b,
37123 +
            0x636199d339c963f2,
37124 +
            0xdf7adabd7a6e2d6f,
37125 +
            0xa5a2aa754a5ba416,
37126 +
            0x2aca3b2d1a053f9d,
37127 +
            0x50124be52a30b6e4,
37128 +
            0x1f423fcee22f9be0,
37129 +
            0x659a4f06d21a1299,
37130 +
            0xeaf2de5e82448912,
37131 +
            0x902aae96b271006b,
37132 +
            0x74523609127ad31a,
37133 +
            0x0e8a46c1224f5a63,
37134 +
            0x81e2d7997211c1e8,
37135 +
            0xfb3aa75142244891,
37136 +
            0xb46ad37a8a3b6595,
37137 +
            0xceb2a3b2ba0eecec,
37138 +
            0x41da32eaea507767,
37139 +
            0x3b024222da65fe1e,
37140 +
            0xa2722586f2d042ee,
37141 +
            0xd8aa554ec2e5cb97,
37142 +
            0x57c2c41692bb501c,
37143 +
            0x2d1ab4dea28ed965,
37144 +
            0x624ac0f56a91f461,
37145 +
            0x1892b03d5aa47d18,
37146 +
            0x97fa21650afae693,
37147 +
            0xed2251ad3acf6fea,
37148 +
            0x095ac9329ac4bc9b,
37149 +
            0x7382b9faaaf135e2,
37150 +
            0xfcea28a2faafae69,
37151 +
            0x8632586aca9a2710,
37152 +
            0xc9622c4102850a14,
37153 +
            0xb3ba5c8932b0836d,
37154 +
            0x3cd2cdd162ee18e6,
37155 +
            0x460abd1952db919f,
37156 +
            0x256b24ca6b12f26d,
37157 +
            0x5fb354025b277b14,
37158 +
            0xd0dbc55a0b79e09f,
37159 +
            0xaa03b5923b4c69e6,
37160 +
            0xe553c1b9f35344e2,
37161 +
            0x9f8bb171c366cd9b,
37162 +
            0x10e3202993385610,
37163 +
            0x6a3b50e1a30ddf69,
37164 +
            0x8e43c87e03060c18,
37165 +
            0xf49bb8b633338561,
37166 +
            0x7bf329ee636d1eea,
37167 +
            0x012b592653589793,
37168 +
            0x4e7b2d0d9b47ba97,
37169 +
            0x34a35dc5ab7233ee,
37170 +
            0xbbcbcc9dfb2ca865,
37171 +
            0xc113bc55cb19211c,
37172 +
            0x5863dbf1e3ac9dec,
37173 +
            0x22bbab39d3991495,
37174 +
            0xadd33a6183c78f1e,
37175 +
            0xd70b4aa9b3f20667,
37176 +
            0x985b3e827bed2b63,
37177 +
            0xe2834e4a4bd8a21a,
37178 +
            0x6debdf121b863991,
37179 +
            0x1733afda2bb3b0e8,
37180 +
            0xf34b37458bb86399,
37181 +
            0x8993478dbb8deae0,
37182 +
            0x06fbd6d5ebd3716b,
37183 +
            0x7c23a61ddbe6f812,
37184 +
            0x3373d23613f9d516,
37185 +
            0x49aba2fe23cc5c6f,
37186 +
            0xc6c333a67392c7e4,
37187 +
            0xbc1b436e43a74e9d,
37188 +
            0x95ac9329ac4bc9b5,
37189 +
            0xef74e3e19c7e40cc,
37190 +
            0x601c72b9cc20db47,
37191 +
            0x1ac40271fc15523e,
37192 +
            0x5594765a340a7f3a,
37193 +
            0x2f4c0692043ff643,
37194 +
            0xa02497ca54616dc8,
37195 +
            0xdafce7026454e4b1,
37196 +
            0x3e847f9dc45f37c0,
37197 +
            0x445c0f55f46abeb9,
37198 +
            0xcb349e0da4342532,
37199 +
            0xb1eceec59401ac4b,
37200 +
            0xfebc9aee5c1e814f,
37201 +
            0x8464ea266c2b0836,
37202 +
            0x0b0c7b7e3c7593bd,
37203 +
            0x71d40bb60c401ac4,
37204 +
            0xe8a46c1224f5a634,
37205 +
            0x927c1cda14c02f4d,
37206 +
            0x1d148d82449eb4c6,
37207 +
            0x67ccfd4a74ab3dbf,
37208 +
            0x289c8961bcb410bb,
37209 +
            0x5244f9a98c8199c2,
37210 +
            0xdd2c68f1dcdf0249,
37211 +
            0xa7f41839ecea8b30,
37212 +
            0x438c80a64ce15841,
37213 +
            0x3954f06e7cd4d138,
37214 +
            0xb63c61362c8a4ab3,
37215 +
            0xcce411fe1cbfc3ca,
37216 +
            0x83b465d5d4a0eece,
37217 +
            0xf96c151de49567b7,
37218 +
            0x76048445b4cbfc3c,
37219 +
            0x0cdcf48d84fe7545,
37220 +
            0x6fbd6d5ebd3716b7,
37221 +
            0x15651d968d029fce,
37222 +
            0x9a0d8ccedd5c0445,
37223 +
            0xe0d5fc06ed698d3c,
37224 +
            0xaf85882d2576a038,
37225 +
            0xd55df8e515432941,
37226 +
            0x5a3569bd451db2ca,
37227 +
            0x20ed197575283bb3,
37228 +
            0xc49581ead523e8c2,
37229 +
            0xbe4df122e51661bb,
37230 +
            0x3125607ab548fa30,
37231 +
            0x4bfd10b2857d7349,
37232 +
            0x04ad64994d625e4d,
37233 +
            0x7e7514517d57d734,
37234 +
            0xf11d85092d094cbf,
37235 +
            0x8bc5f5c11d3cc5c6,
37236 +
            0x12b5926535897936,
37237 +
            0x686de2ad05bcf04f,
37238 +
            0xe70573f555e26bc4,
37239 +
            0x9ddd033d65d7e2bd,
37240 +
            0xd28d7716adc8cfb9,
37241 +
            0xa85507de9dfd46c0,
37242 +
            0x273d9686cda3dd4b,
37243 +
            0x5de5e64efd965432,
37244 +
            0xb99d7ed15d9d8743,
37245 +
            0xc3450e196da80e3a,
37246 +
            0x4c2d9f413df695b1,
37247 +
            0x36f5ef890dc31cc8,
37248 +
            0x79a59ba2c5dc31cc,
37249 +
            0x037deb6af5e9b8b5,
37250 +
            0x8c157a32a5b7233e,
37251 +
            0xf6cd0afa9582aa47,
37252 +
            0x4ad64994d625e4da,
37253 +
            0x300e395ce6106da3,
37254 +
            0xbf66a804b64ef628,
37255 +
            0xc5bed8cc867b7f51,
37256 +
            0x8aeeace74e645255,
37257 +
            0xf036dc2f7e51db2c,
37258 +
            0x7f5e4d772e0f40a7,
37259 +
            0x05863dbf1e3ac9de,
37260 +
            0xe1fea520be311aaf,
37261 +
            0x9b26d5e88e0493d6,
37262 +
            0x144e44b0de5a085d,
37263 +
            0x6e963478ee6f8124,
37264 +
            0x21c640532670ac20,
37265 +
            0x5b1e309b16452559,
37266 +
            0xd476a1c3461bbed2,
37267 +
            0xaeaed10b762e37ab,
37268 +
            0x37deb6af5e9b8b5b,
37269 +
            0x4d06c6676eae0222,
37270 +
            0xc26e573f3ef099a9,
37271 +
            0xb8b627f70ec510d0,
37272 +
            0xf7e653dcc6da3dd4,
37273 +
            0x8d3e2314f6efb4ad,
37274 +
            0x0256b24ca6b12f26,
37275 +
            0x788ec2849684a65f,
37276 +
            0x9cf65a1b368f752e,
37277 +
            0xe62e2ad306bafc57,
37278 +
            0x6946bb8b56e467dc,
37279 +
            0x139ecb4366d1eea5,
37280 +
            0x5ccebf68aecec3a1,
37281 +
            0x2616cfa09efb4ad8,
37282 +
            0xa97e5ef8cea5d153,
37283 +
            0xd3a62e30fe90582a,
37284 +
            0xb0c7b7e3c7593bd8,
37285 +
            0xca1fc72bf76cb2a1,
37286 +
            0x45775673a732292a,
37287 +
            0x3faf26bb9707a053,
37288 +
            0x70ff52905f188d57,
37289 +
            0x0a2722586f2d042e,
37290 +
            0x854fb3003f739fa5,
37291 +
            0xff97c3c80f4616dc,
37292 +
            0x1bef5b57af4dc5ad,
37293 +
            0x61372b9f9f784cd4,
37294 +
            0xee5fbac7cf26d75f,
37295 +
            0x9487ca0fff135e26,
37296 +
            0xdbd7be24370c7322,
37297 +
            0xa10fceec0739fa5b,
37298 +
            0x2e675fb4576761d0,
37299 +
            0x54bf2f7c6752e8a9,
37300 +
            0xcdcf48d84fe75459,
37301 +
            0xb71738107fd2dd20,
37302 +
            0x387fa9482f8c46ab,
37303 +
            0x42a7d9801fb9cfd2,
37304 +
            0x0df7adabd7a6e2d6,
37305 +
            0x772fdd63e7936baf,
37306 +
            0xf8474c3bb7cdf024,
37307 +
            0x829f3cf387f8795d,
37308 +
            0x66e7a46c27f3aa2c,
37309 +
            0x1c3fd4a417c62355,
37310 +
            0x935745fc4798b8de,
37311 +
            0xe98f353477ad31a7,
37312 +
            0xa6df411fbfb21ca3,
37313 +
            0xdc0731d78f8795da,
37314 +
            0x536fa08fdfd90e51,
37315 +
            0x29b7d047efec8728,
37316 +
        ],
37317 +
        [
37318 +
            0x0000000000000000,
37319 +
            0x89e99ffd73bddf69,
37320 +
            0x388a19a9bfec2db9,
37321 +
            0xb1638654cc51f2d0,
37322 +
            0x711433537fd85b72,
37323 +
            0xf8fdacae0c65841b,
37324 +
            0x499e2afac03476cb,
37325 +
            0xc077b507b389a9a2,
37326 +
            0xe22866a6ffb0b6e4,
37327 +
            0x6bc1f95b8c0d698d,
37328 +
            0xdaa27f0f405c9b5d,
37329 +
            0x534be0f233e14434,
37330 +
            0x933c55f58068ed96,
37331 +
            0x1ad5ca08f3d532ff,
37332 +
            0xabb64c5c3f84c02f,
37333 +
            0x225fd3a14c391f46,
37334 +
            0xef09eb1ea7f6fea3,
37335 +
            0x66e074e3d44b21ca,
37336 +
            0xd783f2b7181ad31a,
37337 +
            0x5e6a6d4a6ba70c73,
37338 +
            0x9e1dd84dd82ea5d1,
37339 +
            0x17f447b0ab937ab8,
37340 +
            0xa697c1e467c28868,
37341 +
            0x2f7e5e19147f5701,
37342 +
            0x0d218db858464847,
37343 +
            0x84c812452bfb972e,
37344 +
            0x35ab9411e7aa65fe,
37345 +
            0xbc420bec9417ba97,
37346 +
            0x7c35beeb279e1335,
37347 +
            0xf5dc21165423cc5c,
37348 +
            0x44bfa74298723e8c,
37349 +
            0xcd5638bfebcfe1e5,
37350 +
            0xf54af06e177a6e2d,
37351 +
            0x7ca36f9364c7b144,
37352 +
            0xcdc0e9c7a8964394,
37353 +
            0x4429763adb2b9cfd,
37354 +
            0x845ec33d68a2355f,
37355 +
            0x0db75cc01b1fea36,
37356 +
            0xbcd4da94d74e18e6,
37357 +
            0x353d4569a4f3c78f,
37358 +
            0x176296c8e8cad8c9,
37359 +
            0x9e8b09359b7707a0,
37360 +
            0x2fe88f615726f570,
37361 +
            0xa601109c249b2a19,
37362 +
            0x6676a59b971283bb,
37363 +
            0xef9f3a66e4af5cd2,
37364 +
            0x5efcbc3228feae02,
37365 +
            0xd71523cf5b43716b,
37366 +
            0x1a431b70b08c908e,
37367 +
            0x93aa848dc3314fe7,
37368 +
            0x22c902d90f60bd37,
37369 +
            0xab209d247cdd625e,
37370 +
            0x6b572823cf54cbfc,
37371 +
            0xe2beb7debce91495,
37372 +
            0x53dd318a70b8e645,
37373 +
            0xda34ae770305392c,
37374 +
            0xf86b7dd64f3c266a,
37375 +
            0x7182e22b3c81f903,
37376 +
            0xc0e1647ff0d00bd3,
37377 +
            0x4908fb82836dd4ba,
37378 +
            0x897f4e8530e47d18,
37379 +
            0x0096d1784359a271,
37380 +
            0xb1f5572c8f0850a1,
37381 +
            0x381cc8d1fcb58fc8,
37382 +
            0xc1ccc68f76634f31,
37383 +
            0x4825597205de9058,
37384 +
            0xf946df26c98f6288,
37385 +
            0x70af40dbba32bde1,
37386 +
            0xb0d8f5dc09bb1443,
37387 +
            0x39316a217a06cb2a,
37388 +
            0x8852ec75b65739fa,
37389 +
            0x01bb7388c5eae693,
37390 +
            0x23e4a02989d3f9d5,
37391 +
            0xaa0d3fd4fa6e26bc,
37392 +
            0x1b6eb980363fd46c,
37393 +
            0x9287267d45820b05,
37394 +
            0x52f0937af60ba2a7,
37395 +
            0xdb190c8785b67dce,
37396 +
            0x6a7a8ad349e78f1e,
37397 +
            0xe393152e3a5a5077,
37398 +
            0x2ec52d91d195b192,
37399 +
            0xa72cb26ca2286efb,
37400 +
            0x164f34386e799c2b,
37401 +
            0x9fa6abc51dc44342,
37402 +
            0x5fd11ec2ae4deae0,
37403 +
            0xd638813fddf03589,
37404 +
            0x675b076b11a1c759,
37405 +
            0xeeb29896621c1830,
37406 +
            0xcced4b372e250776,
37407 +
            0x4504d4ca5d98d81f,
37408 +
            0xf467529e91c92acf,
37409 +
            0x7d8ecd63e274f5a6,
37410 +
            0xbdf9786451fd5c04,
37411 +
            0x3410e7992240836d,
37412 +
            0x857361cdee1171bd,
37413 +
            0x0c9afe309dacaed4,
37414 +
            0x348636e16119211c,
37415 +
            0xbd6fa91c12a4fe75,
37416 +
            0x0c0c2f48def50ca5,
37417 +
            0x85e5b0b5ad48d3cc,
37418 +
            0x459205b21ec17a6e,
37419 +
            0xcc7b9a4f6d7ca507,
37420 +
            0x7d181c1ba12d57d7,
37421 +
            0xf4f183e6d29088be,
37422 +
            0xd6ae50479ea997f8,
37423 +
            0x5f47cfbaed144891,
37424 +
            0xee2449ee2145ba41,
37425 +
            0x67cdd61352f86528,
37426 +
            0xa7ba6314e171cc8a,
37427 +
            0x2e53fce992cc13e3,
37428 +
            0x9f307abd5e9de133,
37429 +
            0x16d9e5402d203e5a,
37430 +
            0xdb8fddffc6efdfbf,
37431 +
            0x52664202b55200d6,
37432 +
            0xe305c4567903f206,
37433 +
            0x6aec5bab0abe2d6f,
37434 +
            0xaa9beeacb93784cd,
37435 +
            0x23727151ca8a5ba4,
37436 +
            0x9211f70506dba974,
37437 +
            0x1bf868f87566761d,
37438 +
            0x39a7bb59395f695b,
37439 +
            0xb04e24a44ae2b632,
37440 +
            0x012da2f086b344e2,
37441 +
            0x88c43d0df50e9b8b,
37442 +
            0x48b3880a46873229,
37443 +
            0xc15a17f7353aed40,
37444 +
            0x703991a3f96b1f90,
37445 +
            0xf9d00e5e8ad6c0f9,
37446 +
            0xa8c0ab4db4510d09,
37447 +
            0x212934b0c7ecd260,
37448 +
            0x904ab2e40bbd20b0,
37449 +
            0x19a32d197800ffd9,
37450 +
            0xd9d4981ecb89567b,
37451 +
            0x503d07e3b8348912,
37452 +
            0xe15e81b774657bc2,
37453 +
            0x68b71e4a07d8a4ab,
37454 +
            0x4ae8cdeb4be1bbed,
37455 +
            0xc3015216385c6484,
37456 +
            0x7262d442f40d9654,
37457 +
            0xfb8b4bbf87b0493d,
37458 +
            0x3bfcfeb83439e09f,
37459 +
            0xb215614547843ff6,
37460 +
            0x0376e7118bd5cd26,
37461 +
            0x8a9f78ecf868124f,
37462 +
            0x47c9405313a7f3aa,
37463 +
            0xce20dfae601a2cc3,
37464 +
            0x7f4359faac4bde13,
37465 +
            0xf6aac607dff6017a,
37466 +
            0x36dd73006c7fa8d8,
37467 +
            0xbf34ecfd1fc277b1,
37468 +
            0x0e576aa9d3938561,
37469 +
            0x87bef554a02e5a08,
37470 +
            0xa5e126f5ec17454e,
37471 +
            0x2c08b9089faa9a27,
37472 +
            0x9d6b3f5c53fb68f7,
37473 +
            0x1482a0a12046b79e,
37474 +
            0xd4f515a693cf1e3c,
37475 +
            0x5d1c8a5be072c155,
37476 +
            0xec7f0c0f2c233385,
37477 +
            0x659693f25f9eecec,
37478 +
            0x5d8a5b23a32b6324,
37479 +
            0xd463c4ded096bc4d,
37480 +
            0x6500428a1cc74e9d,
37481 +
            0xece9dd776f7a91f4,
37482 +
            0x2c9e6870dcf33856,
37483 +
            0xa577f78daf4ee73f,
37484 +
            0x141471d9631f15ef,
37485 +
            0x9dfdee2410a2ca86,
37486 +
            0xbfa23d855c9bd5c0,
37487 +
            0x364ba2782f260aa9,
37488 +
            0x8728242ce377f879,
37489 +
            0x0ec1bbd190ca2710,
37490 +
            0xceb60ed623438eb2,
37491 +
            0x475f912b50fe51db,
37492 +
            0xf63c177f9cafa30b,
37493 +
            0x7fd58882ef127c62,
37494 +
            0xb283b03d04dd9d87,
37495 +
            0x3b6a2fc0776042ee,
37496 +
            0x8a09a994bb31b03e,
37497 +
            0x03e03669c88c6f57,
37498 +
            0xc397836e7b05c6f5,
37499 +
            0x4a7e1c9308b8199c,
37500 +
            0xfb1d9ac7c4e9eb4c,
37501 +
            0x72f4053ab7543425,
37502 +
            0x50abd69bfb6d2b63,
37503 +
            0xd942496688d0f40a,
37504 +
            0x6821cf32448106da,
37505 +
            0xe1c850cf373cd9b3,
37506 +
            0x21bfe5c884b57011,
37507 +
            0xa8567a35f708af78,
37508 +
            0x1935fc613b595da8,
37509 +
            0x90dc639c48e482c1,
37510 +
            0x690c6dc2c2324238,
37511 +
            0xe0e5f23fb18f9d51,
37512 +
            0x5186746b7dde6f81,
37513 +
            0xd86feb960e63b0e8,
37514 +
            0x18185e91bdea194a,
37515 +
            0x91f1c16cce57c623,
37516 +
            0x20924738020634f3,
37517 +
            0xa97bd8c571bbeb9a,
37518 +
            0x8b240b643d82f4dc,
37519 +
            0x02cd94994e3f2bb5,
37520 +
            0xb3ae12cd826ed965,
37521 +
            0x3a478d30f1d3060c,
37522 +
            0xfa303837425aafae,
37523 +
            0x73d9a7ca31e770c7,
37524 +
            0xc2ba219efdb68217,
37525 +
            0x4b53be638e0b5d7e,
37526 +
            0x860586dc65c4bc9b,
37527 +
            0x0fec1921167963f2,
37528 +
            0xbe8f9f75da289122,
37529 +
            0x37660088a9954e4b,
37530 +
            0xf711b58f1a1ce7e9,
37531 +
            0x7ef82a7269a13880,
37532 +
            0xcf9bac26a5f0ca50,
37533 +
            0x467233dbd64d1539,
37534 +
            0x642de07a9a740a7f,
37535 +
            0xedc47f87e9c9d516,
37536 +
            0x5ca7f9d3259827c6,
37537 +
            0xd54e662e5625f8af,
37538 +
            0x1539d329e5ac510d,
37539 +
            0x9cd04cd496118e64,
37540 +
            0x2db3ca805a407cb4,
37541 +
            0xa45a557d29fda3dd,
37542 +
            0x9c469dacd5482c15,
37543 +
            0x15af0251a6f5f37c,
37544 +
            0xa4cc84056aa401ac,
37545 +
            0x2d251bf81919dec5,
37546 +
            0xed52aeffaa907767,
37547 +
            0x64bb3102d92da80e,
37548 +
            0xd5d8b756157c5ade,
37549 +
            0x5c3128ab66c185b7,
37550 +
            0x7e6efb0a2af89af1,
37551 +
            0xf78764f759454598,
37552 +
            0x46e4e2a39514b748,
37553 +
            0xcf0d7d5ee6a96821,
37554 +
            0x0f7ac8595520c183,
37555 +
            0x869357a4269d1eea,
37556 +
            0x37f0d1f0eaccec3a,
37557 +
            0xbe194e0d99713353,
37558 +
            0x734f76b272bed2b6,
37559 +
            0xfaa6e94f01030ddf,
37560 +
            0x4bc56f1bcd52ff0f,
37561 +
            0xc22cf0e6beef2066,
37562 +
            0x025b45e10d6689c4,
37563 +
            0x8bb2da1c7edb56ad,
37564 +
            0x3ad15c48b28aa47d,
37565 +
            0xb338c3b5c1377b14,
37566 +
            0x916710148d0e6452,
37567 +
            0x188e8fe9feb3bb3b,
37568 +
            0xa9ed09bd32e249eb,
37569 +
            0x20049640415f9682,
37570 +
            0xe0732347f2d63f20,
37571 +
            0x699abcba816be049,
37572 +
            0xd8f93aee4d3a1299,
37573 +
            0x5110a5133e87cdf0,
37574 +
        ],
37575 +
        [
37576 +
            0x0000000000000000,
37577 +
            0xf4125129ce4038be,
37578 +
            0xc37d8400c417e217,
37579 +
            0x376fd5290a57daa9,
37580 +
            0xada22e52d0b85745,
37581 +
            0x59b07f7b1ef86ffb,
37582 +
            0x6edfaa5214afb552,
37583 +
            0x9acdfb7bdaef8dec,
37584 +
            0x701d7af6f9e73de1,
37585 +
            0x840f2bdf37a7055f,
37586 +
            0xb360fef63df0dff6,
37587 +
            0x4772afdff3b0e748,
37588 +
            0xddbf54a4295f6aa4,
37589 +
            0x29ad058de71f521a,
37590 +
            0x1ec2d0a4ed4888b3,
37591 +
            0xead0818d2308b00d,
37592 +
            0xe03af5edf3ce7bc2,
37593 +
            0x1428a4c43d8e437c,
37594 +
            0x234771ed37d999d5,
37595 +
            0xd75520c4f999a16b,
37596 +
            0x4d98dbbf23762c87,
37597 +
            0xb98a8a96ed361439,
37598 +
            0x8ee55fbfe761ce90,
37599 +
            0x7af70e962921f62e,
37600 +
            0x90278f1b0a294623,
37601 +
            0x6435de32c4697e9d,
37602 +
            0x535a0b1bce3ea434,
37603 +
            0xa7485a32007e9c8a,
37604 +
            0x3d85a149da911166,
37605 +
            0xc997f06014d129d8,
37606 +
            0xfef825491e86f371,
37607 +
            0x0aea7460d0c6cbcf,
37608 +
            0xeb2ccd88bf0b64ef,
37609 +
            0x1f3e9ca1714b5c51,
37610 +
            0x285149887b1c86f8,
37611 +
            0xdc4318a1b55cbe46,
37612 +
            0x468ee3da6fb333aa,
37613 +
            0xb29cb2f3a1f30b14,
37614 +
            0x85f367daaba4d1bd,
37615 +
            0x71e136f365e4e903,
37616 +
            0x9b31b77e46ec590e,
37617 +
            0x6f23e65788ac61b0,
37618 +
            0x584c337e82fbbb19,
37619 +
            0xac5e62574cbb83a7,
37620 +
            0x3693992c96540e4b,
37621 +
            0xc281c805581436f5,
37622 +
            0xf5ee1d2c5243ec5c,
37623 +
            0x01fc4c059c03d4e2,
37624 +
            0x0b1638654cc51f2d,
37625 +
            0xff04694c82852793,
37626 +
            0xc86bbc6588d2fd3a,
37627 +
            0x3c79ed4c4692c584,
37628 +
            0xa6b416379c7d4868,
37629 +
            0x52a6471e523d70d6,
37630 +
            0x65c99237586aaa7f,
37631 +
            0x91dbc31e962a92c1,
37632 +
            0x7b0b4293b52222cc,
37633 +
            0x8f1913ba7b621a72,
37634 +
            0xb876c6937135c0db,
37635 +
            0x4c6497babf75f865,
37636 +
            0xd6a96cc1659a7589,
37637 +
            0x22bb3de8abda4d37,
37638 +
            0x15d4e8c1a18d979e,
37639 +
            0xe1c6b9e86fcdaf20,
37640 +
            0xfd00bd4226815ab5,
37641 +
            0x0912ec6be8c1620b,
37642 +
            0x3e7d3942e296b8a2,
37643 +
            0xca6f686b2cd6801c,
37644 +
            0x50a29310f6390df0,
37645 +
            0xa4b0c2393879354e,
37646 +
            0x93df1710322eefe7,
37647 +
            0x67cd4639fc6ed759,
37648 +
            0x8d1dc7b4df666754,
37649 +
            0x790f969d11265fea,
37650 +
            0x4e6043b41b718543,
37651 +
            0xba72129dd531bdfd,
37652 +
            0x20bfe9e60fde3011,
37653 +
            0xd4adb8cfc19e08af,
37654 +
            0xe3c26de6cbc9d206,
37655 +
            0x17d03ccf0589eab8,
37656 +
            0x1d3a48afd54f2177,
37657 +
            0xe92819861b0f19c9,
37658 +
            0xde47ccaf1158c360,
37659 +
            0x2a559d86df18fbde,
37660 +
            0xb09866fd05f77632,
37661 +
            0x448a37d4cbb74e8c,
37662 +
            0x73e5e2fdc1e09425,
37663 +
            0x87f7b3d40fa0ac9b,
37664 +
            0x6d2732592ca81c96,
37665 +
            0x99356370e2e82428,
37666 +
            0xae5ab659e8bffe81,
37667 +
            0x5a48e77026ffc63f,
37668 +
            0xc0851c0bfc104bd3,
37669 +
            0x34974d223250736d,
37670 +
            0x03f8980b3807a9c4,
37671 +
            0xf7eac922f647917a,
37672 +
            0x162c70ca998a3e5a,
37673 +
            0xe23e21e357ca06e4,
37674 +
            0xd551f4ca5d9ddc4d,
37675 +
            0x2143a5e393dde4f3,
37676 +
            0xbb8e5e984932691f,
37677 +
            0x4f9c0fb1877251a1,
37678 +
            0x78f3da988d258b08,
37679 +
            0x8ce18bb14365b3b6,
37680 +
            0x66310a3c606d03bb,
37681 +
            0x92235b15ae2d3b05,
37682 +
            0xa54c8e3ca47ae1ac,
37683 +
            0x515edf156a3ad912,
37684 +
            0xcb93246eb0d554fe,
37685 +
            0x3f8175477e956c40,
37686 +
            0x08eea06e74c2b6e9,
37687 +
            0xfcfcf147ba828e57,
37688 +
            0xf61685276a444598,
37689 +
            0x0204d40ea4047d26,
37690 +
            0x356b0127ae53a78f,
37691 +
            0xc179500e60139f31,
37692 +
            0x5bb4ab75bafc12dd,
37693 +
            0xafa6fa5c74bc2a63,
37694 +
            0x98c92f757eebf0ca,
37695 +
            0x6cdb7e5cb0abc874,
37696 +
            0x860bffd193a37879,
37697 +
            0x7219aef85de340c7,
37698 +
            0x45767bd157b49a6e,
37699 +
            0xb1642af899f4a2d0,
37700 +
            0x2ba9d183431b2f3c,
37701 +
            0xdfbb80aa8d5b1782,
37702 +
            0xe8d45583870ccd2b,
37703 +
            0x1cc604aa494cf595,
37704 +
            0xd1585cd715952601,
37705 +
            0x254a0dfedbd51ebf,
37706 +
            0x1225d8d7d182c416,
37707 +
            0xe63789fe1fc2fca8,
37708 +
            0x7cfa7285c52d7144,
37709 +
            0x88e823ac0b6d49fa,
37710 +
            0xbf87f685013a9353,
37711 +
            0x4b95a7accf7aabed,
37712 +
            0xa1452621ec721be0,
37713 +
            0x555777082232235e,
37714 +
            0x6238a2212865f9f7,
37715 +
            0x962af308e625c149,
37716 +
            0x0ce708733cca4ca5,
37717 +
            0xf8f5595af28a741b,
37718 +
            0xcf9a8c73f8ddaeb2,
37719 +
            0x3b88dd5a369d960c,
37720 +
            0x3162a93ae65b5dc3,
37721 +
            0xc570f813281b657d,
37722 +
            0xf21f2d3a224cbfd4,
37723 +
            0x060d7c13ec0c876a,
37724 +
            0x9cc0876836e30a86,
37725 +
            0x68d2d641f8a33238,
37726 +
            0x5fbd0368f2f4e891,
37727 +
            0xabaf52413cb4d02f,
37728 +
            0x417fd3cc1fbc6022,
37729 +
            0xb56d82e5d1fc589c,
37730 +
            0x820257ccdbab8235,
37731 +
            0x761006e515ebba8b,
37732 +
            0xecddfd9ecf043767,
37733 +
            0x18cfacb701440fd9,
37734 +
            0x2fa0799e0b13d570,
37735 +
            0xdbb228b7c553edce,
37736 +
            0x3a74915faa9e42ee,
37737 +
            0xce66c07664de7a50,
37738 +
            0xf909155f6e89a0f9,
37739 +
            0x0d1b4476a0c99847,
37740 +
            0x97d6bf0d7a2615ab,
37741 +
            0x63c4ee24b4662d15,
37742 +
            0x54ab3b0dbe31f7bc,
37743 +
            0xa0b96a247071cf02,
37744 +
            0x4a69eba953797f0f,
37745 +
            0xbe7bba809d3947b1,
37746 +
            0x89146fa9976e9d18,
37747 +
            0x7d063e80592ea5a6,
37748 +
            0xe7cbc5fb83c1284a,
37749 +
            0x13d994d24d8110f4,
37750 +
            0x24b641fb47d6ca5d,
37751 +
            0xd0a410d28996f2e3,
37752 +
            0xda4e64b25950392c,
37753 +
            0x2e5c359b97100192,
37754 +
            0x1933e0b29d47db3b,
37755 +
            0xed21b19b5307e385,
37756 +
            0x77ec4ae089e86e69,
37757 +
            0x83fe1bc947a856d7,
37758 +
            0xb491cee04dff8c7e,
37759 +
            0x40839fc983bfb4c0,
37760 +
            0xaa531e44a0b704cd,
37761 +
            0x5e414f6d6ef73c73,
37762 +
            0x692e9a4464a0e6da,
37763 +
            0x9d3ccb6daae0de64,
37764 +
            0x07f13016700f5388,
37765 +
            0xf3e3613fbe4f6b36,
37766 +
            0xc48cb416b418b19f,
37767 +
            0x309ee53f7a588921,
37768 +
            0x2c58e19533147cb4,
37769 +
            0xd84ab0bcfd54440a,
37770 +
            0xef256595f7039ea3,
37771 +
            0x1b3734bc3943a61d,
37772 +
            0x81facfc7e3ac2bf1,
37773 +
            0x75e89eee2dec134f,
37774 +
            0x42874bc727bbc9e6,
37775 +
            0xb6951aeee9fbf158,
37776 +
            0x5c459b63caf34155,
37777 +
            0xa857ca4a04b379eb,
37778 +
            0x9f381f630ee4a342,
37779 +
            0x6b2a4e4ac0a49bfc,
37780 +
            0xf1e7b5311a4b1610,
37781 +
            0x05f5e418d40b2eae,
37782 +
            0x329a3131de5cf407,
37783 +
            0xc6886018101cccb9,
37784 +
            0xcc621478c0da0776,
37785 +
            0x387045510e9a3fc8,
37786 +
            0x0f1f907804cde561,
37787 +
            0xfb0dc151ca8ddddf,
37788 +
            0x61c03a2a10625033,
37789 +
            0x95d26b03de22688d,
37790 +
            0xa2bdbe2ad475b224,
37791 +
            0x56afef031a358a9a,
37792 +
            0xbc7f6e8e393d3a97,
37793 +
            0x486d3fa7f77d0229,
37794 +
            0x7f02ea8efd2ad880,
37795 +
            0x8b10bba7336ae03e,
37796 +
            0x11dd40dce9856dd2,
37797 +
            0xe5cf11f527c5556c,
37798 +
            0xd2a0c4dc2d928fc5,
37799 +
            0x26b295f5e3d2b77b,
37800 +
            0xc7742c1d8c1f185b,
37801 +
            0x33667d34425f20e5,
37802 +
            0x0409a81d4808fa4c,
37803 +
            0xf01bf9348648c2f2,
37804 +
            0x6ad6024f5ca74f1e,
37805 +
            0x9ec4536692e777a0,
37806 +
            0xa9ab864f98b0ad09,
37807 +
            0x5db9d76656f095b7,
37808 +
            0xb76956eb75f825ba,
37809 +
            0x437b07c2bbb81d04,
37810 +
            0x7414d2ebb1efc7ad,
37811 +
            0x800683c27fafff13,
37812 +
            0x1acb78b9a54072ff,
37813 +
            0xeed929906b004a41,
37814 +
            0xd9b6fcb9615790e8,
37815 +
            0x2da4ad90af17a856,
37816 +
            0x274ed9f07fd16399,
37817 +
            0xd35c88d9b1915b27,
37818 +
            0xe4335df0bbc6818e,
37819 +
            0x10210cd97586b930,
37820 +
            0x8aecf7a2af6934dc,
37821 +
            0x7efea68b61290c62,
37822 +
            0x499173a26b7ed6cb,
37823 +
            0xbd83228ba53eee75,
37824 +
            0x5753a30686365e78,
37825 +
            0xa341f22f487666c6,
37826 +
            0x942e27064221bc6f,
37827 +
            0x603c762f8c6184d1,
37828 +
            0xfaf18d54568e093d,
37829 +
            0x0ee3dc7d98ce3183,
37830 +
            0x398c09549299eb2a,
37831 +
            0xcd9e587d5cd9d394,
37832 +
        ],
37833 +
        [
37834 +
            0x0000000000000000,
37835 +
            0x8ce168638c796306,
37836 +
            0x329bf69440655567,
37837 +
            0xbe7a9ef7cc1c3661,
37838 +
            0x6537ed2880caaace,
37839 +
            0xe9d6854b0cb3c9c8,
37840 +
            0x57ac1bbcc0afffa9,
37841 +
            0xdb4d73df4cd69caf,
37842 +
            0xca6fda510195559c,
37843 +
            0x468eb2328dec369a,
37844 +
            0xf8f42cc541f000fb,
37845 +
            0x741544a6cd8963fd,
37846 +
            0xaf583779815fff52,
37847 +
            0x23b95f1a0d269c54,
37848 +
            0x9dc3c1edc13aaa35,
37849 +
            0x1122a98e4d43c933,
37850 +
            0xbf8692f15bbd3853,
37851 +
            0x3367fa92d7c45b55,
37852 +
            0x8d1d64651bd86d34,
37853 +
            0x01fc0c0697a10e32,
37854 +
            0xdab17fd9db77929d,
37855 +
            0x565017ba570ef19b,
37856 +
            0xe82a894d9b12c7fa,
37857 +
            0x64cbe12e176ba4fc,
37858 +
            0x75e948a05a286dcf,
37859 +
            0xf90820c3d6510ec9,
37860 +
            0x4772be341a4d38a8,
37861 +
            0xcb93d65796345bae,
37862 +
            0x10dea588dae2c701,
37863 +
            0x9c3fcdeb569ba407,
37864 +
            0x2245531c9a879266,
37865 +
            0xaea43b7f16fef160,
37866 +
            0x545403b1efede3cd,
37867 +
            0xd8b56bd2639480cb,
37868 +
            0x66cff525af88b6aa,
37869 +
            0xea2e9d4623f1d5ac,
37870 +
            0x3163ee996f274903,
37871 +
            0xbd8286fae35e2a05,
37872 +
            0x03f8180d2f421c64,
37873 +
            0x8f19706ea33b7f62,
37874 +
            0x9e3bd9e0ee78b651,
37875 +
            0x12dab1836201d557,
37876 +
            0xaca02f74ae1de336,
37877 +
            0x2041471722648030,
37878 +
            0xfb0c34c86eb21c9f,
37879 +
            0x77ed5cabe2cb7f99,
37880 +
            0xc997c25c2ed749f8,
37881 +
            0x4576aa3fa2ae2afe,
37882 +
            0xebd29140b450db9e,
37883 +
            0x6733f9233829b898,
37884 +
            0xd94967d4f4358ef9,
37885 +
            0x55a80fb7784cedff,
37886 +
            0x8ee57c68349a7150,
37887 +
            0x0204140bb8e31256,
37888 +
            0xbc7e8afc74ff2437,
37889 +
            0x309fe29ff8864731,
37890 +
            0x21bd4b11b5c58e02,
37891 +
            0xad5c237239bced04,
37892 +
            0x1326bd85f5a0db65,
37893 +
            0x9fc7d5e679d9b863,
37894 +
            0x448aa639350f24cc,
37895 +
            0xc86bce5ab97647ca,
37896 +
            0x761150ad756a71ab,
37897 +
            0xfaf038cef91312ad,
37898 +
            0xa8a80763dfdbc79a,
37899 +
            0x24496f0053a2a49c,
37900 +
            0x9a33f1f79fbe92fd,
37901 +
            0x16d2999413c7f1fb,
37902 +
            0xcd9fea4b5f116d54,
37903 +
            0x417e8228d3680e52,
37904 +
            0xff041cdf1f743833,
37905 +
            0x73e574bc930d5b35,
37906 +
            0x62c7dd32de4e9206,
37907 +
            0xee26b5515237f100,
37908 +
            0x505c2ba69e2bc761,
37909 +
            0xdcbd43c51252a467,
37910 +
            0x07f0301a5e8438c8,
37911 +
            0x8b115879d2fd5bce,
37912 +
            0x356bc68e1ee16daf,
37913 +
            0xb98aaeed92980ea9,
37914 +
            0x172e95928466ffc9,
37915 +
            0x9bcffdf1081f9ccf,
37916 +
            0x25b56306c403aaae,
37917 +
            0xa9540b65487ac9a8,
37918 +
            0x721978ba04ac5507,
37919 +
            0xfef810d988d53601,
37920 +
            0x40828e2e44c90060,
37921 +
            0xcc63e64dc8b06366,
37922 +
            0xdd414fc385f3aa55,
37923 +
            0x51a027a0098ac953,
37924 +
            0xefdab957c596ff32,
37925 +
            0x633bd13449ef9c34,
37926 +
            0xb876a2eb0539009b,
37927 +
            0x3497ca888940639d,
37928 +
            0x8aed547f455c55fc,
37929 +
            0x060c3c1cc92536fa,
37930 +
            0xfcfc04d230362457,
37931 +
            0x701d6cb1bc4f4751,
37932 +
            0xce67f24670537130,
37933 +
            0x42869a25fc2a1236,
37934 +
            0x99cbe9fab0fc8e99,
37935 +
            0x152a81993c85ed9f,
37936 +
            0xab501f6ef099dbfe,
37937 +
            0x27b1770d7ce0b8f8,
37938 +
            0x3693de8331a371cb,
37939 +
            0xba72b6e0bdda12cd,
37940 +
            0x0408281771c624ac,
37941 +
            0x88e94074fdbf47aa,
37942 +
            0x53a433abb169db05,
37943 +
            0xdf455bc83d10b803,
37944 +
            0x613fc53ff10c8e62,
37945 +
            0xeddead5c7d75ed64,
37946 +
            0x437a96236b8b1c04,
37947 +
            0xcf9bfe40e7f27f02,
37948 +
            0x71e160b72bee4963,
37949 +
            0xfd0008d4a7972a65,
37950 +
            0x264d7b0beb41b6ca,
37951 +
            0xaaac13686738d5cc,
37952 +
            0x14d68d9fab24e3ad,
37953 +
            0x9837e5fc275d80ab,
37954 +
            0x89154c726a1e4998,
37955 +
            0x05f42411e6672a9e,
37956 +
            0xbb8ebae62a7b1cff,
37957 +
            0x376fd285a6027ff9,
37958 +
            0xec22a15aead4e356,
37959 +
            0x60c3c93966ad8050,
37960 +
            0xdeb957ceaab1b631,
37961 +
            0x52583fad26c8d537,
37962 +
            0x7a092894e7201c5f,
37963 +
            0xf6e840f76b597f59,
37964 +
            0x4892de00a7454938,
37965 +
            0xc473b6632b3c2a3e,
37966 +
            0x1f3ec5bc67eab691,
37967 +
            0x93dfaddfeb93d597,
37968 +
            0x2da53328278fe3f6,
37969 +
            0xa1445b4babf680f0,
37970 +
            0xb066f2c5e6b549c3,
37971 +
            0x3c879aa66acc2ac5,
37972 +
            0x82fd0451a6d01ca4,
37973 +
            0x0e1c6c322aa97fa2,
37974 +
            0xd5511fed667fe30d,
37975 +
            0x59b0778eea06800b,
37976 +
            0xe7cae979261ab66a,
37977 +
            0x6b2b811aaa63d56c,
37978 +
            0xc58fba65bc9d240c,
37979 +
            0x496ed20630e4470a,
37980 +
            0xf7144cf1fcf8716b,
37981 +
            0x7bf524927081126d,
37982 +
            0xa0b8574d3c578ec2,
37983 +
            0x2c593f2eb02eedc4,
37984 +
            0x9223a1d97c32dba5,
37985 +
            0x1ec2c9baf04bb8a3,
37986 +
            0x0fe06034bd087190,
37987 +
            0x8301085731711296,
37988 +
            0x3d7b96a0fd6d24f7,
37989 +
            0xb19afec3711447f1,
37990 +
            0x6ad78d1c3dc2db5e,
37991 +
            0xe636e57fb1bbb858,
37992 +
            0x584c7b887da78e39,
37993 +
            0xd4ad13ebf1deed3f,
37994 +
            0x2e5d2b2508cdff92,
37995 +
            0xa2bc434684b49c94,
37996 +
            0x1cc6ddb148a8aaf5,
37997 +
            0x9027b5d2c4d1c9f3,
37998 +
            0x4b6ac60d8807555c,
37999 +
            0xc78bae6e047e365a,
38000 +
            0x79f13099c862003b,
38001 +
            0xf51058fa441b633d,
38002 +
            0xe432f1740958aa0e,
38003 +
            0x68d399178521c908,
38004 +
            0xd6a907e0493dff69,
38005 +
            0x5a486f83c5449c6f,
38006 +
            0x81051c5c899200c0,
38007 +
            0x0de4743f05eb63c6,
38008 +
            0xb39eeac8c9f755a7,
38009 +
            0x3f7f82ab458e36a1,
38010 +
            0x91dbb9d45370c7c1,
38011 +
            0x1d3ad1b7df09a4c7,
38012 +
            0xa3404f40131592a6,
38013 +
            0x2fa127239f6cf1a0,
38014 +
            0xf4ec54fcd3ba6d0f,
38015 +
            0x780d3c9f5fc30e09,
38016 +
            0xc677a26893df3868,
38017 +
            0x4a96ca0b1fa65b6e,
38018 +
            0x5bb4638552e5925d,
38019 +
            0xd7550be6de9cf15b,
38020 +
            0x692f95111280c73a,
38021 +
            0xe5cefd729ef9a43c,
38022 +
            0x3e838eadd22f3893,
38023 +
            0xb262e6ce5e565b95,
38024 +
            0x0c187839924a6df4,
38025 +
            0x80f9105a1e330ef2,
38026 +
            0xd2a12ff738fbdbc5,
38027 +
            0x5e404794b482b8c3,
38028 +
            0xe03ad963789e8ea2,
38029 +
            0x6cdbb100f4e7eda4,
38030 +
            0xb796c2dfb831710b,
38031 +
            0x3b77aabc3448120d,
38032 +
            0x850d344bf854246c,
38033 +
            0x09ec5c28742d476a,
38034 +
            0x18cef5a6396e8e59,
38035 +
            0x942f9dc5b517ed5f,
38036 +
            0x2a550332790bdb3e,
38037 +
            0xa6b46b51f572b838,
38038 +
            0x7df9188eb9a42497,
38039 +
            0xf11870ed35dd4791,
38040 +
            0x4f62ee1af9c171f0,
38041 +
            0xc383867975b812f6,
38042 +
            0x6d27bd066346e396,
38043 +
            0xe1c6d565ef3f8090,
38044 +
            0x5fbc4b922323b6f1,
38045 +
            0xd35d23f1af5ad5f7,
38046 +
            0x0810502ee38c4958,
38047 +
            0x84f1384d6ff52a5e,
38048 +
            0x3a8ba6baa3e91c3f,
38049 +
            0xb66aced92f907f39,
38050 +
            0xa748675762d3b60a,
38051 +
            0x2ba90f34eeaad50c,
38052 +
            0x95d391c322b6e36d,
38053 +
            0x1932f9a0aecf806b,
38054 +
            0xc27f8a7fe2191cc4,
38055 +
            0x4e9ee21c6e607fc2,
38056 +
            0xf0e47ceba27c49a3,
38057 +
            0x7c0514882e052aa5,
38058 +
            0x86f52c46d7163808,
38059 +
            0x0a1444255b6f5b0e,
38060 +
            0xb46edad297736d6f,
38061 +
            0x388fb2b11b0a0e69,
38062 +
            0xe3c2c16e57dc92c6,
38063 +
            0x6f23a90ddba5f1c0,
38064 +
            0xd15937fa17b9c7a1,
38065 +
            0x5db85f999bc0a4a7,
38066 +
            0x4c9af617d6836d94,
38067 +
            0xc07b9e745afa0e92,
38068 +
            0x7e01008396e638f3,
38069 +
            0xf2e068e01a9f5bf5,
38070 +
            0x29ad1b3f5649c75a,
38071 +
            0xa54c735cda30a45c,
38072 +
            0x1b36edab162c923d,
38073 +
            0x97d785c89a55f13b,
38074 +
            0x3973beb78cab005b,
38075 +
            0xb592d6d400d2635d,
38076 +
            0x0be84823ccce553c,
38077 +
            0x8709204040b7363a,
38078 +
            0x5c44539f0c61aa95,
38079 +
            0xd0a53bfc8018c993,
38080 +
            0x6edfa50b4c04fff2,
38081 +
            0xe23ecd68c07d9cf4,
38082 +
            0xf31c64e68d3e55c7,
38083 +
            0x7ffd0c85014736c1,
38084 +
            0xc1879272cd5b00a0,
38085 +
            0x4d66fa11412263a6,
38086 +
            0x962b89ce0df4ff09,
38087 +
            0x1acae1ad818d9c0f,
38088 +
            0xa4b07f5a4d91aa6e,
38089 +
            0x28511739c1e8c968,
38090 +
        ],
38091 +
        [
38092 +
            0x0000000000000000,
38093 +
            0x3504e58b9ba6dd1e,
38094 +
            0x6a09cb17374dba3c,
38095 +
            0x5f0d2e9caceb6722,
38096 +
            0xd413962e6e9b7478,
38097 +
            0xe11773a5f53da966,
38098 +
            0xbe1a5d3959d6ce44,
38099 +
            0x8b1eb8b2c270135a,
38100 +
            0x837e0a0f85a17b9b,
38101 +
            0xb67aef841e07a685,
38102 +
            0xe977c118b2ecc1a7,
38103 +
            0xdc732493294a1cb9,
38104 +
            0x576d9c21eb3a0fe3,
38105 +
            0x626979aa709cd2fd,
38106 +
            0x3d645736dc77b5df,
38107 +
            0x0860b2bd47d168c1,
38108 +
            0x2da5324c53d5645d,
38109 +
            0x18a1d7c7c873b943,
38110 +
            0x47acf95b6498de61,
38111 +
            0x72a81cd0ff3e037f,
38112 +
            0xf9b6a4623d4e1025,
38113 +
            0xccb241e9a6e8cd3b,
38114 +
            0x93bf6f750a03aa19,
38115 +
            0xa6bb8afe91a57707,
38116 +
            0xaedb3843d6741fc6,
38117 +
            0x9bdfddc84dd2c2d8,
38118 +
            0xc4d2f354e139a5fa,
38119 +
            0xf1d616df7a9f78e4,
38120 +
            0x7ac8ae6db8ef6bbe,
38121 +
            0x4fcc4be62349b6a0,
38122 +
            0x10c1657a8fa2d182,
38123 +
            0x25c580f114040c9c,
38124 +
            0x5b4a6498a7aac8ba,
38125 +
            0x6e4e81133c0c15a4,
38126 +
            0x3143af8f90e77286,
38127 +
            0x04474a040b41af98,
38128 +
            0x8f59f2b6c931bcc2,
38129 +
            0xba5d173d529761dc,
38130 +
            0xe55039a1fe7c06fe,
38131 +
            0xd054dc2a65dadbe0,
38132 +
            0xd8346e97220bb321,
38133 +
            0xed308b1cb9ad6e3f,
38134 +
            0xb23da5801546091d,
38135 +
            0x8739400b8ee0d403,
38136 +
            0x0c27f8b94c90c759,
38137 +
            0x39231d32d7361a47,
38138 +
            0x662e33ae7bdd7d65,
38139 +
            0x532ad625e07ba07b,
38140 +
            0x76ef56d4f47face7,
38141 +
            0x43ebb35f6fd971f9,
38142 +
            0x1ce69dc3c33216db,
38143 +
            0x29e278485894cbc5,
38144 +
            0xa2fcc0fa9ae4d89f,
38145 +
            0x97f8257101420581,
38146 +
            0xc8f50bedada962a3,
38147 +
            0xfdf1ee66360fbfbd,
38148 +
            0xf5915cdb71ded77c,
38149 +
            0xc095b950ea780a62,
38150 +
            0x9f9897cc46936d40,
38151 +
            0xaa9c7247dd35b05e,
38152 +
            0x2182caf51f45a304,
38153 +
            0x14862f7e84e37e1a,
38154 +
            0x4b8b01e228081938,
38155 +
            0x7e8fe469b3aec426,
38156 +
            0xb694c9314f559174,
38157 +
            0x83902cbad4f34c6a,
38158 +
            0xdc9d022678182b48,
38159 +
            0xe999e7ade3bef656,
38160 +
            0x62875f1f21cee50c,
38161 +
            0x5783ba94ba683812,
38162 +
            0x088e940816835f30,
38163 +
            0x3d8a71838d25822e,
38164 +
            0x35eac33ecaf4eaef,
38165 +
            0x00ee26b5515237f1,
38166 +
            0x5fe30829fdb950d3,
38167 +
            0x6ae7eda2661f8dcd,
38168 +
            0xe1f95510a46f9e97,
38169 +
            0xd4fdb09b3fc94389,
38170 +
            0x8bf09e07932224ab,
38171 +
            0xbef47b8c0884f9b5,
38172 +
            0x9b31fb7d1c80f529,
38173 +
            0xae351ef687262837,
38174 +
            0xf138306a2bcd4f15,
38175 +
            0xc43cd5e1b06b920b,
38176 +
            0x4f226d53721b8151,
38177 +
            0x7a2688d8e9bd5c4f,
38178 +
            0x252ba64445563b6d,
38179 +
            0x102f43cfdef0e673,
38180 +
            0x184ff17299218eb2,
38181 +
            0x2d4b14f9028753ac,
38182 +
            0x72463a65ae6c348e,
38183 +
            0x4742dfee35cae990,
38184 +
            0xcc5c675cf7bafaca,
38185 +
            0xf95882d76c1c27d4,
38186 +
            0xa655ac4bc0f740f6,
38187 +
            0x935149c05b519de8,
38188 +
            0xeddeada9e8ff59ce,
38189 +
            0xd8da4822735984d0,
38190 +
            0x87d766bedfb2e3f2,
38191 +
            0xb2d3833544143eec,
38192 +
            0x39cd3b8786642db6,
38193 +
            0x0cc9de0c1dc2f0a8,
38194 +
            0x53c4f090b129978a,
38195 +
            0x66c0151b2a8f4a94,
38196 +
            0x6ea0a7a66d5e2255,
38197 +
            0x5ba4422df6f8ff4b,
38198 +
            0x04a96cb15a139869,
38199 +
            0x31ad893ac1b54577,
38200 +
            0xbab3318803c5562d,
38201 +
            0x8fb7d40398638b33,
38202 +
            0xd0bafa9f3488ec11,
38203 +
            0xe5be1f14af2e310f,
38204 +
            0xc07b9fe5bb2a3d93,
38205 +
            0xf57f7a6e208ce08d,
38206 +
            0xaa7254f28c6787af,
38207 +
            0x9f76b17917c15ab1,
38208 +
            0x146809cbd5b149eb,
38209 +
            0x216cec404e1794f5,
38210 +
            0x7e61c2dce2fcf3d7,
38211 +
            0x4b652757795a2ec9,
38212 +
            0x430595ea3e8b4608,
38213 +
            0x76017061a52d9b16,
38214 +
            0x290c5efd09c6fc34,
38215 +
            0x1c08bb769260212a,
38216 +
            0x971603c450103270,
38217 +
            0xa212e64fcbb6ef6e,
38218 +
            0xfd1fc8d3675d884c,
38219 +
            0xc81b2d58fcfb5552,
38220 +
            0x4670b431c63cb183,
38221 +
            0x737451ba5d9a6c9d,
38222 +
            0x2c797f26f1710bbf,
38223 +
            0x197d9aad6ad7d6a1,
38224 +
            0x9263221fa8a7c5fb,
38225 +
            0xa767c794330118e5,
38226 +
            0xf86ae9089fea7fc7,
38227 +
            0xcd6e0c83044ca2d9,
38228 +
            0xc50ebe3e439dca18,
38229 +
            0xf00a5bb5d83b1706,
38230 +
            0xaf07752974d07024,
38231 +
            0x9a0390a2ef76ad3a,
38232 +
            0x111d28102d06be60,
38233 +
            0x2419cd9bb6a0637e,
38234 +
            0x7b14e3071a4b045c,
38235 +
            0x4e10068c81edd942,
38236 +
            0x6bd5867d95e9d5de,
38237 +
            0x5ed163f60e4f08c0,
38238 +
            0x01dc4d6aa2a46fe2,
38239 +
            0x34d8a8e13902b2fc,
38240 +
            0xbfc61053fb72a1a6,
38241 +
            0x8ac2f5d860d47cb8,
38242 +
            0xd5cfdb44cc3f1b9a,
38243 +
            0xe0cb3ecf5799c684,
38244 +
            0xe8ab8c721048ae45,
38245 +
            0xddaf69f98bee735b,
38246 +
            0x82a2476527051479,
38247 +
            0xb7a6a2eebca3c967,
38248 +
            0x3cb81a5c7ed3da3d,
38249 +
            0x09bcffd7e5750723,
38250 +
            0x56b1d14b499e6001,
38251 +
            0x63b534c0d238bd1f,
38252 +
            0x1d3ad0a961967939,
38253 +
            0x283e3522fa30a427,
38254 +
            0x77331bbe56dbc305,
38255 +
            0x4237fe35cd7d1e1b,
38256 +
            0xc92946870f0d0d41,
38257 +
            0xfc2da30c94abd05f,
38258 +
            0xa3208d903840b77d,
38259 +
            0x9624681ba3e66a63,
38260 +
            0x9e44daa6e43702a2,
38261 +
            0xab403f2d7f91dfbc,
38262 +
            0xf44d11b1d37ab89e,
38263 +
            0xc149f43a48dc6580,
38264 +
            0x4a574c888aac76da,
38265 +
            0x7f53a903110aabc4,
38266 +
            0x205e879fbde1cce6,
38267 +
            0x155a6214264711f8,
38268 +
            0x309fe2e532431d64,
38269 +
            0x059b076ea9e5c07a,
38270 +
            0x5a9629f2050ea758,
38271 +
            0x6f92cc799ea87a46,
38272 +
            0xe48c74cb5cd8691c,
38273 +
            0xd1889140c77eb402,
38274 +
            0x8e85bfdc6b95d320,
38275 +
            0xbb815a57f0330e3e,
38276 +
            0xb3e1e8eab7e266ff,
38277 +
            0x86e50d612c44bbe1,
38278 +
            0xd9e823fd80afdcc3,
38279 +
            0xececc6761b0901dd,
38280 +
            0x67f27ec4d9791287,
38281 +
            0x52f69b4f42dfcf99,
38282 +
            0x0dfbb5d3ee34a8bb,
38283 +
            0x38ff5058759275a5,
38284 +
            0xf0e47d00896920f7,
38285 +
            0xc5e0988b12cffde9,
38286 +
            0x9aedb617be249acb,
38287 +
            0xafe9539c258247d5,
38288 +
            0x24f7eb2ee7f2548f,
38289 +
            0x11f30ea57c548991,
38290 +
            0x4efe2039d0bfeeb3,
38291 +
            0x7bfac5b24b1933ad,
38292 +
            0x739a770f0cc85b6c,
38293 +
            0x469e9284976e8672,
38294 +
            0x1993bc183b85e150,
38295 +
            0x2c975993a0233c4e,
38296 +
            0xa789e12162532f14,
38297 +
            0x928d04aaf9f5f20a,
38298 +
            0xcd802a36551e9528,
38299 +
            0xf884cfbdceb84836,
38300 +
            0xdd414f4cdabc44aa,
38301 +
            0xe845aac7411a99b4,
38302 +
            0xb748845bedf1fe96,
38303 +
            0x824c61d076572388,
38304 +
            0x0952d962b42730d2,
38305 +
            0x3c563ce92f81edcc,
38306 +
            0x635b1275836a8aee,
38307 +
            0x565ff7fe18cc57f0,
38308 +
            0x5e3f45435f1d3f31,
38309 +
            0x6b3ba0c8c4bbe22f,
38310 +
            0x34368e546850850d,
38311 +
            0x01326bdff3f65813,
38312 +
            0x8a2cd36d31864b49,
38313 +
            0xbf2836e6aa209657,
38314 +
            0xe025187a06cbf175,
38315 +
            0xd521fdf19d6d2c6b,
38316 +
            0xabae19982ec3e84d,
38317 +
            0x9eaafc13b5653553,
38318 +
            0xc1a7d28f198e5271,
38319 +
            0xf4a3370482288f6f,
38320 +
            0x7fbd8fb640589c35,
38321 +
            0x4ab96a3ddbfe412b,
38322 +
            0x15b444a177152609,
38323 +
            0x20b0a12aecb3fb17,
38324 +
            0x28d01397ab6293d6,
38325 +
            0x1dd4f61c30c44ec8,
38326 +
            0x42d9d8809c2f29ea,
38327 +
            0x77dd3d0b0789f4f4,
38328 +
            0xfcc385b9c5f9e7ae,
38329 +
            0xc9c760325e5f3ab0,
38330 +
            0x96ca4eaef2b45d92,
38331 +
            0xa3ceab256912808c,
38332 +
            0x860b2bd47d168c10,
38333 +
            0xb30fce5fe6b0510e,
38334 +
            0xec02e0c34a5b362c,
38335 +
            0xd9060548d1fdeb32,
38336 +
            0x5218bdfa138df868,
38337 +
            0x671c5871882b2576,
38338 +
            0x381176ed24c04254,
38339 +
            0x0d159366bf669f4a,
38340 +
            0x057521dbf8b7f78b,
38341 +
            0x3071c45063112a95,
38342 +
            0x6f7ceacccffa4db7,
38343 +
            0x5a780f47545c90a9,
38344 +
            0xd166b7f5962c83f3,
38345 +
            0xe462527e0d8a5eed,
38346 +
            0xbb6f7ce2a16139cf,
38347 +
            0x8e6b99693ac7e4d1,
38348 +
        ],
38349 +
        [
38350 +
            0x0000000000000000,
38351 +
            0xe39d1389931b9354,
38352 +
            0xec6301407ea0b5c3,
38353 +
            0x0ffe12c9edbb2697,
38354 +
            0xf39f24d3a5d6f8ed,
38355 +
            0x1002375a36cd6bb9,
38356 +
            0x1ffc2593db764d2e,
38357 +
            0xfc61361a486dde7a,
38358 +
            0xcc676ff4133a62b1,
38359 +
            0x2ffa7c7d8021f1e5,
38360 +
            0x20046eb46d9ad772,
38361 +
            0xc3997d3dfe814426,
38362 +
            0x3ff84b27b6ec9a5c,
38363 +
            0xdc6558ae25f70908,
38364 +
            0xd39b4a67c84c2f9f,
38365 +
            0x300659ee5b57bccb,
38366 +
            0xb397f9bb7ee35609,
38367 +
            0x500aea32edf8c55d,
38368 +
            0x5ff4f8fb0043e3ca,
38369 +
            0xbc69eb729358709e,
38370 +
            0x4008dd68db35aee4,
38371 +
            0xa395cee1482e3db0,
38372 +
            0xac6bdc28a5951b27,
38373 +
            0x4ff6cfa1368e8873,
38374 +
            0x7ff0964f6dd934b8,
38375 +
            0x9c6d85c6fec2a7ec,
38376 +
            0x9393970f1379817b,
38377 +
            0x700e84868062122f,
38378 +
            0x8c6fb29cc80fcc55,
38379 +
            0x6ff2a1155b145f01,
38380 +
            0x600cb3dcb6af7996,
38381 +
            0x8391a05525b4eac2,
38382 +
            0x4c76d525a5513f79,
38383 +
            0xafebc6ac364aac2d,
38384 +
            0xa015d465dbf18aba,
38385 +
            0x4388c7ec48ea19ee,
38386 +
            0xbfe9f1f60087c794,
38387 +
            0x5c74e27f939c54c0,
38388 +
            0x538af0b67e277257,
38389 +
            0xb017e33fed3ce103,
38390 +
            0x8011bad1b66b5dc8,
38391 +
            0x638ca9582570ce9c,
38392 +
            0x6c72bb91c8cbe80b,
38393 +
            0x8fefa8185bd07b5f,
38394 +
            0x738e9e0213bda525,
38395 +
            0x90138d8b80a63671,
38396 +
            0x9fed9f426d1d10e6,
38397 +
            0x7c708ccbfe0683b2,
38398 +
            0xffe12c9edbb26970,
38399 +
            0x1c7c3f1748a9fa24,
38400 +
            0x13822ddea512dcb3,
38401 +
            0xf01f3e5736094fe7,
38402 +
            0x0c7e084d7e64919d,
38403 +
            0xefe31bc4ed7f02c9,
38404 +
            0xe01d090d00c4245e,
38405 +
            0x03801a8493dfb70a,
38406 +
            0x3386436ac8880bc1,
38407 +
            0xd01b50e35b939895,
38408 +
            0xdfe5422ab628be02,
38409 +
            0x3c7851a325332d56,
38410 +
            0xc01967b96d5ef32c,
38411 +
            0x23847430fe456078,
38412 +
            0x2c7a66f913fe46ef,
38413 +
            0xcfe7757080e5d5bb,
38414 +
            0x98edaa4b4aa27ef2,
38415 +
            0x7b70b9c2d9b9eda6,
38416 +
            0x748eab0b3402cb31,
38417 +
            0x9713b882a7195865,
38418 +
            0x6b728e98ef74861f,
38419 +
            0x88ef9d117c6f154b,
38420 +
            0x87118fd891d433dc,
38421 +
            0x648c9c5102cfa088,
38422 +
            0x548ac5bf59981c43,
38423 +
            0xb717d636ca838f17,
38424 +
            0xb8e9c4ff2738a980,
38425 +
            0x5b74d776b4233ad4,
38426 +
            0xa715e16cfc4ee4ae,
38427 +
            0x4488f2e56f5577fa,
38428 +
            0x4b76e02c82ee516d,
38429 +
            0xa8ebf3a511f5c239,
38430 +
            0x2b7a53f0344128fb,
38431 +
            0xc8e74079a75abbaf,
38432 +
            0xc71952b04ae19d38,
38433 +
            0x24844139d9fa0e6c,
38434 +
            0xd8e577239197d016,
38435 +
            0x3b7864aa028c4342,
38436 +
            0x34867663ef3765d5,
38437 +
            0xd71b65ea7c2cf681,
38438 +
            0xe71d3c04277b4a4a,
38439 +
            0x04802f8db460d91e,
38440 +
            0x0b7e3d4459dbff89,
38441 +
            0xe8e32ecdcac06cdd,
38442 +
            0x148218d782adb2a7,
38443 +
            0xf71f0b5e11b621f3,
38444 +
            0xf8e11997fc0d0764,
38445 +
            0x1b7c0a1e6f169430,
38446 +
            0xd49b7f6eeff3418b,
38447 +
            0x37066ce77ce8d2df,
38448 +
            0x38f87e2e9153f448,
38449 +
            0xdb656da70248671c,
38450 +
            0x27045bbd4a25b966,
38451 +
            0xc4994834d93e2a32,
38452 +
            0xcb675afd34850ca5,
38453 +
            0x28fa4974a79e9ff1,
38454 +
            0x18fc109afcc9233a,
38455 +
            0xfb6103136fd2b06e,
38456 +
            0xf49f11da826996f9,
38457 +
            0x17020253117205ad,
38458 +
            0xeb633449591fdbd7,
38459 +
            0x08fe27c0ca044883,
38460 +
            0x0700350927bf6e14,
38461 +
            0xe49d2680b4a4fd40,
38462 +
            0x670c86d591101782,
38463 +
            0x8491955c020b84d6,
38464 +
            0x8b6f8795efb0a241,
38465 +
            0x68f2941c7cab3115,
38466 +
            0x9493a20634c6ef6f,
38467 +
            0x770eb18fa7dd7c3b,
38468 +
            0x78f0a3464a665aac,
38469 +
            0x9b6db0cfd97dc9f8,
38470 +
            0xab6be921822a7533,
38471 +
            0x48f6faa81131e667,
38472 +
            0x4708e861fc8ac0f0,
38473 +
            0xa495fbe86f9153a4,
38474 +
            0x58f4cdf227fc8dde,
38475 +
            0xbb69de7bb4e71e8a,
38476 +
            0xb497ccb2595c381d,
38477 +
            0x570adf3bca47ab49,
38478 +
            0x1a8272c5cdd36e8f,
38479 +
            0xf91f614c5ec8fddb,
38480 +
            0xf6e17385b373db4c,
38481 +
            0x157c600c20684818,
38482 +
            0xe91d561668059662,
38483 +
            0x0a80459ffb1e0536,
38484 +
            0x057e575616a523a1,
38485 +
            0xe6e344df85beb0f5,
38486 +
            0xd6e51d31dee90c3e,
38487 +
            0x35780eb84df29f6a,
38488 +
            0x3a861c71a049b9fd,
38489 +
            0xd91b0ff833522aa9,
38490 +
            0x257a39e27b3ff4d3,
38491 +
            0xc6e72a6be8246787,
38492 +
            0xc91938a2059f4110,
38493 +
            0x2a842b2b9684d244,
38494 +
            0xa9158b7eb3303886,
38495 +
            0x4a8898f7202babd2,
38496 +
            0x45768a3ecd908d45,
38497 +
            0xa6eb99b75e8b1e11,
38498 +
            0x5a8aafad16e6c06b,
38499 +
            0xb917bc2485fd533f,
38500 +
            0xb6e9aeed684675a8,
38501 +
            0x5574bd64fb5de6fc,
38502 +
            0x6572e48aa00a5a37,
38503 +
            0x86eff7033311c963,
38504 +
            0x8911e5cadeaaeff4,
38505 +
            0x6a8cf6434db17ca0,
38506 +
            0x96edc05905dca2da,
38507 +
            0x7570d3d096c7318e,
38508 +
            0x7a8ec1197b7c1719,
38509 +
            0x9913d290e867844d,
38510 +
            0x56f4a7e0688251f6,
38511 +
            0xb569b469fb99c2a2,
38512 +
            0xba97a6a01622e435,
38513 +
            0x590ab52985397761,
38514 +
            0xa56b8333cd54a91b,
38515 +
            0x46f690ba5e4f3a4f,
38516 +
            0x49088273b3f41cd8,
38517 +
            0xaa9591fa20ef8f8c,
38518 +
            0x9a93c8147bb83347,
38519 +
            0x790edb9de8a3a013,
38520 +
            0x76f0c95405188684,
38521 +
            0x956ddadd960315d0,
38522 +
            0x690cecc7de6ecbaa,
38523 +
            0x8a91ff4e4d7558fe,
38524 +
            0x856fed87a0ce7e69,
38525 +
            0x66f2fe0e33d5ed3d,
38526 +
            0xe5635e5b166107ff,
38527 +
            0x06fe4dd2857a94ab,
38528 +
            0x09005f1b68c1b23c,
38529 +
            0xea9d4c92fbda2168,
38530 +
            0x16fc7a88b3b7ff12,
38531 +
            0xf561690120ac6c46,
38532 +
            0xfa9f7bc8cd174ad1,
38533 +
            0x190268415e0cd985,
38534 +
            0x290431af055b654e,
38535 +
            0xca9922269640f61a,
38536 +
            0xc56730ef7bfbd08d,
38537 +
            0x26fa2366e8e043d9,
38538 +
            0xda9b157ca08d9da3,
38539 +
            0x390606f533960ef7,
38540 +
            0x36f8143cde2d2860,
38541 +
            0xd56507b54d36bb34,
38542 +
            0x826fd88e8771107d,
38543 +
            0x61f2cb07146a8329,
38544 +
            0x6e0cd9cef9d1a5be,
38545 +
            0x8d91ca476aca36ea,
38546 +
            0x71f0fc5d22a7e890,
38547 +
            0x926defd4b1bc7bc4,
38548 +
            0x9d93fd1d5c075d53,
38549 +
            0x7e0eee94cf1cce07,
38550 +
            0x4e08b77a944b72cc,
38551 +
            0xad95a4f30750e198,
38552 +
            0xa26bb63aeaebc70f,
38553 +
            0x41f6a5b379f0545b,
38554 +
            0xbd9793a9319d8a21,
38555 +
            0x5e0a8020a2861975,
38556 +
            0x51f492e94f3d3fe2,
38557 +
            0xb2698160dc26acb6,
38558 +
            0x31f82135f9924674,
38559 +
            0xd26532bc6a89d520,
38560 +
            0xdd9b20758732f3b7,
38561 +
            0x3e0633fc142960e3,
38562 +
            0xc26705e65c44be99,
38563 +
            0x21fa166fcf5f2dcd,
38564 +
            0x2e0404a622e40b5a,
38565 +
            0xcd99172fb1ff980e,
38566 +
            0xfd9f4ec1eaa824c5,
38567 +
            0x1e025d4879b3b791,
38568 +
            0x11fc4f8194089106,
38569 +
            0xf2615c0807130252,
38570 +
            0x0e006a124f7edc28,
38571 +
            0xed9d799bdc654f7c,
38572 +
            0xe2636b5231de69eb,
38573 +
            0x01fe78dba2c5fabf,
38574 +
            0xce190dab22202f04,
38575 +
            0x2d841e22b13bbc50,
38576 +
            0x227a0ceb5c809ac7,
38577 +
            0xc1e71f62cf9b0993,
38578 +
            0x3d86297887f6d7e9,
38579 +
            0xde1b3af114ed44bd,
38580 +
            0xd1e52838f956622a,
38581 +
            0x32783bb16a4df17e,
38582 +
            0x027e625f311a4db5,
38583 +
            0xe1e371d6a201dee1,
38584 +
            0xee1d631f4fbaf876,
38585 +
            0x0d807096dca16b22,
38586 +
            0xf1e1468c94ccb558,
38587 +
            0x127c550507d7260c,
38588 +
            0x1d8247ccea6c009b,
38589 +
            0xfe1f5445797793cf,
38590 +
            0x7d8ef4105cc3790d,
38591 +
            0x9e13e799cfd8ea59,
38592 +
            0x91edf5502263ccce,
38593 +
            0x7270e6d9b1785f9a,
38594 +
            0x8e11d0c3f91581e0,
38595 +
            0x6d8cc34a6a0e12b4,
38596 +
            0x6272d18387b53423,
38597 +
            0x81efc20a14aea777,
38598 +
            0xb1e99be44ff91bbc,
38599 +
            0x5274886ddce288e8,
38600 +
            0x5d8a9aa43159ae7f,
38601 +
            0xbe17892da2423d2b,
38602 +
            0x4276bf37ea2fe351,
38603 +
            0xa1ebacbe79347005,
38604 +
            0xae15be77948f5692,
38605 +
            0x4d88adfe0794c5c6,
38606 +
        ],
38607 +
        [
38608 +
            0x0000000000000000,
38609 +
            0x62a95de6e302eff2,
38610 +
            0xc552bbcdc605dfe4,
38611 +
            0xa7fbe62b25073016,
38612 +
            0xa1fc51c8d49c2ca3,
38613 +
            0xc3550c2e379ec351,
38614 +
            0x64aeea051299f347,
38615 +
            0x0607b7e3f19b1cb5,
38616 +
            0x68a185c2f1afca2d,
38617 +
            0x0a08d82412ad25df,
38618 +
            0xadf33e0f37aa15c9,
38619 +
            0xcf5a63e9d4a8fa3b,
38620 +
            0xc95dd40a2533e68e,
38621 +
            0xabf489ecc631097c,
38622 +
            0x0c0f6fc7e336396a,
38623 +
            0x6ea632210034d698,
38624 +
            0xd1430b85e35f945a,
38625 +
            0xb3ea5663005d7ba8,
38626 +
            0x1411b048255a4bbe,
38627 +
            0x76b8edaec658a44c,
38628 +
            0x70bf5a4d37c3b8f9,
38629 +
            0x121607abd4c1570b,
38630 +
            0xb5ede180f1c6671d,
38631 +
            0xd744bc6612c488ef,
38632 +
            0xb9e28e4712f05e77,
38633 +
            0xdb4bd3a1f1f2b185,
38634 +
            0x7cb0358ad4f58193,
38635 +
            0x1e19686c37f76e61,
38636 +
            0x181edf8fc66c72d4,
38637 +
            0x7ab78269256e9d26,
38638 +
            0xdd4c64420069ad30,
38639 +
            0xbfe539a4e36b42c2,
38640 +
            0x89df31589e28bbdf,
38641 +
            0xeb766cbe7d2a542d,
38642 +
            0x4c8d8a95582d643b,
38643 +
            0x2e24d773bb2f8bc9,
38644 +
            0x282360904ab4977c,
38645 +
            0x4a8a3d76a9b6788e,
38646 +
            0xed71db5d8cb14898,
38647 +
            0x8fd886bb6fb3a76a,
38648 +
            0xe17eb49a6f8771f2,
38649 +
            0x83d7e97c8c859e00,
38650 +
            0x242c0f57a982ae16,
38651 +
            0x468552b14a8041e4,
38652 +
            0x4082e552bb1b5d51,
38653 +
            0x222bb8b45819b2a3,
38654 +
            0x85d05e9f7d1e82b5,
38655 +
            0xe77903799e1c6d47,
38656 +
            0x589c3add7d772f85,
38657 +
            0x3a35673b9e75c077,
38658 +
            0x9dce8110bb72f061,
38659 +
            0xff67dcf658701f93,
38660 +
            0xf9606b15a9eb0326,
38661 +
            0x9bc936f34ae9ecd4,
38662 +
            0x3c32d0d86feedcc2,
38663 +
            0x5e9b8d3e8cec3330,
38664 +
            0x303dbf1f8cd8e5a8,
38665 +
            0x5294e2f96fda0a5a,
38666 +
            0xf56f04d24add3a4c,
38667 +
            0x97c65934a9dfd5be,
38668 +
            0x91c1eed75844c90b,
38669 +
            0xf368b331bb4626f9,
38670 +
            0x5493551a9e4116ef,
38671 +
            0x363a08fc7d43f91d,
38672 +
            0x38e744e264c6e4d5,
38673 +
            0x5a4e190487c40b27,
38674 +
            0xfdb5ff2fa2c33b31,
38675 +
            0x9f1ca2c941c1d4c3,
38676 +
            0x991b152ab05ac876,
38677 +
            0xfbb248cc53582784,
38678 +
            0x5c49aee7765f1792,
38679 +
            0x3ee0f301955df860,
38680 +
            0x5046c12095692ef8,
38681 +
            0x32ef9cc6766bc10a,
38682 +
            0x95147aed536cf11c,
38683 +
            0xf7bd270bb06e1eee,
38684 +
            0xf1ba90e841f5025b,
38685 +
            0x9313cd0ea2f7eda9,
38686 +
            0x34e82b2587f0ddbf,
38687 +
            0x564176c364f2324d,
38688 +
            0xe9a44f678799708f,
38689 +
            0x8b0d1281649b9f7d,
38690 +
            0x2cf6f4aa419caf6b,
38691 +
            0x4e5fa94ca29e4099,
38692 +
            0x48581eaf53055c2c,
38693 +
            0x2af14349b007b3de,
38694 +
            0x8d0aa562950083c8,
38695 +
            0xefa3f88476026c3a,
38696 +
            0x8105caa57636baa2,
38697 +
            0xe3ac974395345550,
38698 +
            0x44577168b0336546,
38699 +
            0x26fe2c8e53318ab4,
38700 +
            0x20f99b6da2aa9601,
38701 +
            0x4250c68b41a879f3,
38702 +
            0xe5ab20a064af49e5,
38703 +
            0x87027d4687ada617,
38704 +
            0xb13875bafaee5f0a,
38705 +
            0xd391285c19ecb0f8,
38706 +
            0x746ace773ceb80ee,
38707 +
            0x16c39391dfe96f1c,
38708 +
            0x10c424722e7273a9,
38709 +
            0x726d7994cd709c5b,
38710 +
            0xd5969fbfe877ac4d,
38711 +
            0xb73fc2590b7543bf,
38712 +
            0xd999f0780b419527,
38713 +
            0xbb30ad9ee8437ad5,
38714 +
            0x1ccb4bb5cd444ac3,
38715 +
            0x7e6216532e46a531,
38716 +
            0x7865a1b0dfddb984,
38717 +
            0x1accfc563cdf5676,
38718 +
            0xbd371a7d19d86660,
38719 +
            0xdf9e479bfada8992,
38720 +
            0x607b7e3f19b1cb50,
38721 +
            0x02d223d9fab324a2,
38722 +
            0xa529c5f2dfb414b4,
38723 +
            0xc78098143cb6fb46,
38724 +
            0xc1872ff7cd2de7f3,
38725 +
            0xa32e72112e2f0801,
38726 +
            0x04d5943a0b283817,
38727 +
            0x667cc9dce82ad7e5,
38728 +
            0x08dafbfde81e017d,
38729 +
            0x6a73a61b0b1cee8f,
38730 +
            0xcd8840302e1bde99,
38731 +
            0xaf211dd6cd19316b,
38732 +
            0xa926aa353c822dde,
38733 +
            0xcb8ff7d3df80c22c,
38734 +
            0x6c7411f8fa87f23a,
38735 +
            0x0edd4c1e19851dc8,
38736 +
            0x71ce89c4c98dc9aa,
38737 +
            0x1367d4222a8f2658,
38738 +
            0xb49c32090f88164e,
38739 +
            0xd6356fefec8af9bc,
38740 +
            0xd032d80c1d11e509,
38741 +
            0xb29b85eafe130afb,
38742 +
            0x156063c1db143aed,
38743 +
            0x77c93e273816d51f,
38744 +
            0x196f0c0638220387,
38745 +
            0x7bc651e0db20ec75,
38746 +
            0xdc3db7cbfe27dc63,
38747 +
            0xbe94ea2d1d253391,
38748 +
            0xb8935dceecbe2f24,
38749 +
            0xda3a00280fbcc0d6,
38750 +
            0x7dc1e6032abbf0c0,
38751 +
            0x1f68bbe5c9b91f32,
38752 +
            0xa08d82412ad25df0,
38753 +
            0xc224dfa7c9d0b202,
38754 +
            0x65df398cecd78214,
38755 +
            0x0776646a0fd56de6,
38756 +
            0x0171d389fe4e7153,
38757 +
            0x63d88e6f1d4c9ea1,
38758 +
            0xc4236844384baeb7,
38759 +
            0xa68a35a2db494145,
38760 +
            0xc82c0783db7d97dd,
38761 +
            0xaa855a65387f782f,
38762 +
            0x0d7ebc4e1d784839,
38763 +
            0x6fd7e1a8fe7aa7cb,
38764 +
            0x69d0564b0fe1bb7e,
38765 +
            0x0b790badece3548c,
38766 +
            0xac82ed86c9e4649a,
38767 +
            0xce2bb0602ae68b68,
38768 +
            0xf811b89c57a57275,
38769 +
            0x9ab8e57ab4a79d87,
38770 +
            0x3d43035191a0ad91,
38771 +
            0x5fea5eb772a24263,
38772 +
            0x59ede95483395ed6,
38773 +
            0x3b44b4b2603bb124,
38774 +
            0x9cbf5299453c8132,
38775 +
            0xfe160f7fa63e6ec0,
38776 +
            0x90b03d5ea60ab858,
38777 +
            0xf21960b8450857aa,
38778 +
            0x55e28693600f67bc,
38779 +
            0x374bdb75830d884e,
38780 +
            0x314c6c96729694fb,
38781 +
            0x53e5317091947b09,
38782 +
            0xf41ed75bb4934b1f,
38783 +
            0x96b78abd5791a4ed,
38784 +
            0x2952b319b4fae62f,
38785 +
            0x4bfbeeff57f809dd,
38786 +
            0xec0008d472ff39cb,
38787 +
            0x8ea9553291fdd639,
38788 +
            0x88aee2d16066ca8c,
38789 +
            0xea07bf378364257e,
38790 +
            0x4dfc591ca6631568,
38791 +
            0x2f5504fa4561fa9a,
38792 +
            0x41f336db45552c02,
38793 +
            0x235a6b3da657c3f0,
38794 +
            0x84a18d168350f3e6,
38795 +
            0xe608d0f060521c14,
38796 +
            0xe00f671391c900a1,
38797 +
            0x82a63af572cbef53,
38798 +
            0x255ddcde57ccdf45,
38799 +
            0x47f48138b4ce30b7,
38800 +
            0x4929cd26ad4b2d7f,
38801 +
            0x2b8090c04e49c28d,
38802 +
            0x8c7b76eb6b4ef29b,
38803 +
            0xeed22b0d884c1d69,
38804 +
            0xe8d59cee79d701dc,
38805 +
            0x8a7cc1089ad5ee2e,
38806 +
            0x2d872723bfd2de38,
38807 +
            0x4f2e7ac55cd031ca,
38808 +
            0x218848e45ce4e752,
38809 +
            0x43211502bfe608a0,
38810 +
            0xe4daf3299ae138b6,
38811 +
            0x8673aecf79e3d744,
38812 +
            0x8074192c8878cbf1,
38813 +
            0xe2dd44ca6b7a2403,
38814 +
            0x4526a2e14e7d1415,
38815 +
            0x278fff07ad7ffbe7,
38816 +
            0x986ac6a34e14b925,
38817 +
            0xfac39b45ad1656d7,
38818 +
            0x5d387d6e881166c1,
38819 +
            0x3f9120886b138933,
38820 +
            0x3996976b9a889586,
38821 +
            0x5b3fca8d798a7a74,
38822 +
            0xfcc42ca65c8d4a62,
38823 +
            0x9e6d7140bf8fa590,
38824 +
            0xf0cb4361bfbb7308,
38825 +
            0x92621e875cb99cfa,
38826 +
            0x3599f8ac79beacec,
38827 +
            0x5730a54a9abc431e,
38828 +
            0x513712a96b275fab,
38829 +
            0x339e4f4f8825b059,
38830 +
            0x9465a964ad22804f,
38831 +
            0xf6ccf4824e206fbd,
38832 +
            0xc0f6fc7e336396a0,
38833 +
            0xa25fa198d0617952,
38834 +
            0x05a447b3f5664944,
38835 +
            0x670d1a551664a6b6,
38836 +
            0x610aadb6e7ffba03,
38837 +
            0x03a3f05004fd55f1,
38838 +
            0xa458167b21fa65e7,
38839 +
            0xc6f14b9dc2f88a15,
38840 +
            0xa85779bcc2cc5c8d,
38841 +
            0xcafe245a21ceb37f,
38842 +
            0x6d05c27104c98369,
38843 +
            0x0fac9f97e7cb6c9b,
38844 +
            0x09ab28741650702e,
38845 +
            0x6b027592f5529fdc,
38846 +
            0xccf993b9d055afca,
38847 +
            0xae50ce5f33574038,
38848 +
            0x11b5f7fbd03c02fa,
38849 +
            0x731caa1d333eed08,
38850 +
            0xd4e74c361639dd1e,
38851 +
            0xb64e11d0f53b32ec,
38852 +
            0xb049a63304a02e59,
38853 +
            0xd2e0fbd5e7a2c1ab,
38854 +
            0x751b1dfec2a5f1bd,
38855 +
            0x17b2401821a71e4f,
38856 +
            0x791472392193c8d7,
38857 +
            0x1bbd2fdfc2912725,
38858 +
            0xbc46c9f4e7961733,
38859 +
            0xdeef94120494f8c1,
38860 +
            0xd8e823f1f50fe474,
38861 +
            0xba417e17160d0b86,
38862 +
            0x1dba983c330a3b90,
38863 +
            0x7f13c5dad008d462,
38864 +
        ],
38865 +
        [
38866 +
            0x0000000000000000,
38867 +
            0x381d0015c96f4444,
38868 +
            0x703a002b92de8888,
38869 +
            0x4827003e5bb1cccc,
38870 +
            0xe074005725bd1110,
38871 +
            0xd8690042ecd25554,
38872 +
            0x904e007cb7639998,
38873 +
            0xa85300697e0cdddc,
38874 +
            0xebb126fd13edb14b,
38875 +
            0xd3ac26e8da82f50f,
38876 +
            0x9b8b26d6813339c3,
38877 +
            0xa39626c3485c7d87,
38878 +
            0x0bc526aa3650a05b,
38879 +
            0x33d826bfff3fe41f,
38880 +
            0x7bff2681a48e28d3,
38881 +
            0x43e226946de16c97,
38882 +
            0xfc3b6ba97f4cf1fd,
38883 +
            0xc4266bbcb623b5b9,
38884 +
            0x8c016b82ed927975,
38885 +
            0xb41c6b9724fd3d31,
38886 +
            0x1c4f6bfe5af1e0ed,
38887 +
            0x24526beb939ea4a9,
38888 +
            0x6c756bd5c82f6865,
38889 +
            0x54686bc001402c21,
38890 +
            0x178a4d546ca140b6,
38891 +
            0x2f974d41a5ce04f2,
38892 +
            0x67b04d7ffe7fc83e,
38893 +
            0x5fad4d6a37108c7a,
38894 +
            0xf7fe4d03491c51a6,
38895 +
            0xcfe34d16807315e2,
38896 +
            0x87c44d28dbc2d92e,
38897 +
            0xbfd94d3d12ad9d6a,
38898 +
            0xd32ff101a60e7091,
38899 +
            0xeb32f1146f6134d5,
38900 +
            0xa315f12a34d0f819,
38901 +
            0x9b08f13ffdbfbc5d,
38902 +
            0x335bf15683b36181,
38903 +
            0x0b46f1434adc25c5,
38904 +
            0x4361f17d116de909,
38905 +
            0x7b7cf168d802ad4d,
38906 +
            0x389ed7fcb5e3c1da,
38907 +
            0x0083d7e97c8c859e,
38908 +
            0x48a4d7d7273d4952,
38909 +
            0x70b9d7c2ee520d16,
38910 +
            0xd8ead7ab905ed0ca,
38911 +
            0xe0f7d7be5931948e,
38912 +
            0xa8d0d78002805842,
38913 +
            0x90cdd795cbef1c06,
38914 +
            0x2f149aa8d942816c,
38915 +
            0x17099abd102dc528,
38916 +
            0x5f2e9a834b9c09e4,
38917 +
            0x67339a9682f34da0,
38918 +
            0xcf609afffcff907c,
38919 +
            0xf77d9aea3590d438,
38920 +
            0xbf5a9ad46e2118f4,
38921 +
            0x87479ac1a74e5cb0,
38922 +
            0xc4a5bc55caaf3027,
38923 +
            0xfcb8bc4003c07463,
38924 +
            0xb49fbc7e5871b8af,
38925 +
            0x8c82bc6b911efceb,
38926 +
            0x24d1bc02ef122137,
38927 +
            0x1cccbc17267d6573,
38928 +
            0x54ebbc297dcca9bf,
38929 +
            0x6cf6bc3cb4a3edfb,
38930 +
            0x8d06c450148b7249,
38931 +
            0xb51bc445dde4360d,
38932 +
            0xfd3cc47b8655fac1,
38933 +
            0xc521c46e4f3abe85,
38934 +
            0x6d72c40731366359,
38935 +
            0x556fc412f859271d,
38936 +
            0x1d48c42ca3e8ebd1,
38937 +
            0x2555c4396a87af95,
38938 +
            0x66b7e2ad0766c302,
38939 +
            0x5eaae2b8ce098746,
38940 +
            0x168de28695b84b8a,
38941 +
            0x2e90e2935cd70fce,
38942 +
            0x86c3e2fa22dbd212,
38943 +
            0xbedee2efebb49656,
38944 +
            0xf6f9e2d1b0055a9a,
38945 +
            0xcee4e2c4796a1ede,
38946 +
            0x713daff96bc783b4,
38947 +
            0x4920afeca2a8c7f0,
38948 +
            0x0107afd2f9190b3c,
38949 +
            0x391aafc730764f78,
38950 +
            0x9149afae4e7a92a4,
38951 +
            0xa954afbb8715d6e0,
38952 +
            0xe173af85dca41a2c,
38953 +
            0xd96eaf9015cb5e68,
38954 +
            0x9a8c8904782a32ff,
38955 +
            0xa2918911b14576bb,
38956 +
            0xeab6892feaf4ba77,
38957 +
            0xd2ab893a239bfe33,
38958 +
            0x7af889535d9723ef,
38959 +
            0x42e5894694f867ab,
38960 +
            0x0ac28978cf49ab67,
38961 +
            0x32df896d0626ef23,
38962 +
            0x5e293551b28502d8,
38963 +
            0x663435447bea469c,
38964 +
            0x2e13357a205b8a50,
38965 +
            0x160e356fe934ce14,
38966 +
            0xbe5d3506973813c8,
38967 +
            0x864035135e57578c,
38968 +
            0xce67352d05e69b40,
38969 +
            0xf67a3538cc89df04,
38970 +
            0xb59813aca168b393,
38971 +
            0x8d8513b96807f7d7,
38972 +
            0xc5a2138733b63b1b,
38973 +
            0xfdbf1392fad97f5f,
38974 +
            0x55ec13fb84d5a283,
38975 +
            0x6df113ee4dbae6c7,
38976 +
            0x25d613d0160b2a0b,
38977 +
            0x1dcb13c5df646e4f,
38978 +
            0xa2125ef8cdc9f325,
38979 +
            0x9a0f5eed04a6b761,
38980 +
            0xd2285ed35f177bad,
38981 +
            0xea355ec696783fe9,
38982 +
            0x42665eafe874e235,
38983 +
            0x7a7b5eba211ba671,
38984 +
            0x325c5e847aaa6abd,
38985 +
            0x0a415e91b3c52ef9,
38986 +
            0x49a37805de24426e,
38987 +
            0x71be7810174b062a,
38988 +
            0x3999782e4cfacae6,
38989 +
            0x0184783b85958ea2,
38990 +
            0xa9d77852fb99537e,
38991 +
            0x91ca784732f6173a,
38992 +
            0xd9ed78796947dbf6,
38993 +
            0xe1f0786ca0289fb2,
38994 +
            0x3154aef3718177f9,
38995 +
            0x0949aee6b8ee33bd,
38996 +
            0x416eaed8e35fff71,
38997 +
            0x7973aecd2a30bb35,
38998 +
            0xd120aea4543c66e9,
38999 +
            0xe93daeb19d5322ad,
39000 +
            0xa11aae8fc6e2ee61,
39001 +
            0x9907ae9a0f8daa25,
39002 +
            0xdae5880e626cc6b2,
39003 +
            0xe2f8881bab0382f6,
39004 +
            0xaadf8825f0b24e3a,
39005 +
            0x92c2883039dd0a7e,
39006 +
            0x3a91885947d1d7a2,
39007 +
            0x028c884c8ebe93e6,
39008 +
            0x4aab8872d50f5f2a,
39009 +
            0x72b688671c601b6e,
39010 +
            0xcd6fc55a0ecd8604,
39011 +
            0xf572c54fc7a2c240,
39012 +
            0xbd55c5719c130e8c,
39013 +
            0x8548c564557c4ac8,
39014 +
            0x2d1bc50d2b709714,
39015 +
            0x1506c518e21fd350,
39016 +
            0x5d21c526b9ae1f9c,
39017 +
            0x653cc53370c15bd8,
39018 +
            0x26dee3a71d20374f,
39019 +
            0x1ec3e3b2d44f730b,
39020 +
            0x56e4e38c8ffebfc7,
39021 +
            0x6ef9e3994691fb83,
39022 +
            0xc6aae3f0389d265f,
39023 +
            0xfeb7e3e5f1f2621b,
39024 +
            0xb690e3dbaa43aed7,
39025 +
            0x8e8de3ce632cea93,
39026 +
            0xe27b5ff2d78f0768,
39027 +
            0xda665fe71ee0432c,
39028 +
            0x92415fd945518fe0,
39029 +
            0xaa5c5fcc8c3ecba4,
39030 +
            0x020f5fa5f2321678,
39031 +
            0x3a125fb03b5d523c,
39032 +
            0x72355f8e60ec9ef0,
39033 +
            0x4a285f9ba983dab4,
39034 +
            0x09ca790fc462b623,
39035 +
            0x31d7791a0d0df267,
39036 +
            0x79f0792456bc3eab,
39037 +
            0x41ed79319fd37aef,
39038 +
            0xe9be7958e1dfa733,
39039 +
            0xd1a3794d28b0e377,
39040 +
            0x9984797373012fbb,
39041 +
            0xa1997966ba6e6bff,
39042 +
            0x1e40345ba8c3f695,
39043 +
            0x265d344e61acb2d1,
39044 +
            0x6e7a34703a1d7e1d,
39045 +
            0x56673465f3723a59,
39046 +
            0xfe34340c8d7ee785,
39047 +
            0xc62934194411a3c1,
39048 +
            0x8e0e34271fa06f0d,
39049 +
            0xb6133432d6cf2b49,
39050 +
            0xf5f112a6bb2e47de,
39051 +
            0xcdec12b37241039a,
39052 +
            0x85cb128d29f0cf56,
39053 +
            0xbdd61298e09f8b12,
39054 +
            0x158512f19e9356ce,
39055 +
            0x2d9812e457fc128a,
39056 +
            0x65bf12da0c4dde46,
39057 +
            0x5da212cfc5229a02,
39058 +
            0xbc526aa3650a05b0,
39059 +
            0x844f6ab6ac6541f4,
39060 +
            0xcc686a88f7d48d38,
39061 +
            0xf4756a9d3ebbc97c,
39062 +
            0x5c266af440b714a0,
39063 +
            0x643b6ae189d850e4,
39064 +
            0x2c1c6adfd2699c28,
39065 +
            0x14016aca1b06d86c,
39066 +
            0x57e34c5e76e7b4fb,
39067 +
            0x6ffe4c4bbf88f0bf,
39068 +
            0x27d94c75e4393c73,
39069 +
            0x1fc44c602d567837,
39070 +
            0xb7974c09535aa5eb,
39071 +
            0x8f8a4c1c9a35e1af,
39072 +
            0xc7ad4c22c1842d63,
39073 +
            0xffb04c3708eb6927,
39074 +
            0x4069010a1a46f44d,
39075 +
            0x7874011fd329b009,
39076 +
            0x3053012188987cc5,
39077 +
            0x084e013441f73881,
39078 +
            0xa01d015d3ffbe55d,
39079 +
            0x98000148f694a119,
39080 +
            0xd0270176ad256dd5,
39081 +
            0xe83a0163644a2991,
39082 +
            0xabd827f709ab4506,
39083 +
            0x93c527e2c0c40142,
39084 +
            0xdbe227dc9b75cd8e,
39085 +
            0xe3ff27c9521a89ca,
39086 +
            0x4bac27a02c165416,
39087 +
            0x73b127b5e5791052,
39088 +
            0x3b96278bbec8dc9e,
39089 +
            0x038b279e77a798da,
39090 +
            0x6f7d9ba2c3047521,
39091 +
            0x57609bb70a6b3165,
39092 +
            0x1f479b8951dafda9,
39093 +
            0x275a9b9c98b5b9ed,
39094 +
            0x8f099bf5e6b96431,
39095 +
            0xb7149be02fd62075,
39096 +
            0xff339bde7467ecb9,
39097 +
            0xc72e9bcbbd08a8fd,
39098 +
            0x84ccbd5fd0e9c46a,
39099 +
            0xbcd1bd4a1986802e,
39100 +
            0xf4f6bd7442374ce2,
39101 +
            0xccebbd618b5808a6,
39102 +
            0x64b8bd08f554d57a,
39103 +
            0x5ca5bd1d3c3b913e,
39104 +
            0x1482bd23678a5df2,
39105 +
            0x2c9fbd36aee519b6,
39106 +
            0x9346f00bbc4884dc,
39107 +
            0xab5bf01e7527c098,
39108 +
            0xe37cf0202e960c54,
39109 +
            0xdb61f035e7f94810,
39110 +
            0x7332f05c99f595cc,
39111 +
            0x4b2ff049509ad188,
39112 +
            0x0308f0770b2b1d44,
39113 +
            0x3b15f062c2445900,
39114 +
            0x78f7d6f6afa53597,
39115 +
            0x40ead6e366ca71d3,
39116 +
            0x08cdd6dd3d7bbd1f,
39117 +
            0x30d0d6c8f414f95b,
39118 +
            0x9883d6a18a182487,
39119 +
            0xa09ed6b4437760c3,
39120 +
            0xe8b9d68a18c6ac0f,
39121 +
            0xd0a4d69fd1a9e84b,
39122 +
        ],
39123 +
        [
39124 +
            0x0000000000000000,
39125 +
            0x1f7a22cef7e6f4a4,
39126 +
            0x3ef4459defcde948,
39127 +
            0x218e6753182b1dec,
39128 +
            0x7de88b3bdf9bd290,
39129 +
            0x6292a9f5287d2634,
39130 +
            0x431ccea630563bd8,
39131 +
            0x5c66ec68c7b0cf7c,
39132 +
            0xfbd11677bf37a520,
39133 +
            0xe4ab34b948d15184,
39134 +
            0xc52553ea50fa4c68,
39135 +
            0xda5f7124a71cb8cc,
39136 +
            0x86399d4c60ac77b0,
39137 +
            0x9943bf82974a8314,
39138 +
            0xb8cdd8d18f619ef8,
39139 +
            0xa7b7fa1f78876a5c,
39140 +
            0xdcfb0abc26f8d92b,
39141 +
            0xc3812872d11e2d8f,
39142 +
            0xe20f4f21c9353063,
39143 +
            0xfd756def3ed3c4c7,
39144 +
            0xa1138187f9630bbb,
39145 +
            0xbe69a3490e85ff1f,
39146 +
            0x9fe7c41a16aee2f3,
39147 +
            0x809de6d4e1481657,
39148 +
            0x272a1ccb99cf7c0b,
39149 +
            0x38503e056e2988af,
39150 +
            0x19de595676029543,
39151 +
            0x06a47b9881e461e7,
39152 +
            0x5ac297f04654ae9b,
39153 +
            0x45b8b53eb1b25a3f,
39154 +
            0x6436d26da99947d3,
39155 +
            0x7b4cf0a35e7fb377,
39156 +
            0x92af332b1566213d,
39157 +
            0x8dd511e5e280d599,
39158 +
            0xac5b76b6faabc875,
39159 +
            0xb32154780d4d3cd1,
39160 +
            0xef47b810cafdf3ad,
39161 +
            0xf03d9ade3d1b0709,
39162 +
            0xd1b3fd8d25301ae5,
39163 +
            0xcec9df43d2d6ee41,
39164 +
            0x697e255caa51841d,
39165 +
            0x760407925db770b9,
39166 +
            0x578a60c1459c6d55,
39167 +
            0x48f0420fb27a99f1,
39168 +
            0x1496ae6775ca568d,
39169 +
            0x0bec8ca9822ca229,
39170 +
            0x2a62ebfa9a07bfc5,
39171 +
            0x3518c9346de14b61,
39172 +
            0x4e543997339ef816,
39173 +
            0x512e1b59c4780cb2,
39174 +
            0x70a07c0adc53115e,
39175 +
            0x6fda5ec42bb5e5fa,
39176 +
            0x33bcb2acec052a86,
39177 +
            0x2cc690621be3de22,
39178 +
            0x0d48f73103c8c3ce,
39179 +
            0x1232d5fff42e376a,
39180 +
            0xb5852fe08ca95d36,
39181 +
            0xaaff0d2e7b4fa992,
39182 +
            0x8b716a7d6364b47e,
39183 +
            0x940b48b3948240da,
39184 +
            0xc86da4db53328fa6,
39185 +
            0xd7178615a4d47b02,
39186 +
            0xf699e146bcff66ee,
39187 +
            0xe9e3c3884b19924a,
39188 +
            0x0e074005725bd111,
39189 +
            0x117d62cb85bd25b5,
39190 +
            0x30f305989d963859,
39191 +
            0x2f8927566a70ccfd,
39192 +
            0x73efcb3eadc00381,
39193 +
            0x6c95e9f05a26f725,
39194 +
            0x4d1b8ea3420deac9,
39195 +
            0x5261ac6db5eb1e6d,
39196 +
            0xf5d65672cd6c7431,
39197 +
            0xeaac74bc3a8a8095,
39198 +
            0xcb2213ef22a19d79,
39199 +
            0xd4583121d54769dd,
39200 +
            0x883edd4912f7a6a1,
39201 +
            0x9744ff87e5115205,
39202 +
            0xb6ca98d4fd3a4fe9,
39203 +
            0xa9b0ba1a0adcbb4d,
39204 +
            0xd2fc4ab954a3083a,
39205 +
            0xcd866877a345fc9e,
39206 +
            0xec080f24bb6ee172,
39207 +
            0xf3722dea4c8815d6,
39208 +
            0xaf14c1828b38daaa,
39209 +
            0xb06ee34c7cde2e0e,
39210 +
            0x91e0841f64f533e2,
39211 +
            0x8e9aa6d19313c746,
39212 +
            0x292d5cceeb94ad1a,
39213 +
            0x36577e001c7259be,
39214 +
            0x17d9195304594452,
39215 +
            0x08a33b9df3bfb0f6,
39216 +
            0x54c5d7f5340f7f8a,
39217 +
            0x4bbff53bc3e98b2e,
39218 +
            0x6a319268dbc296c2,
39219 +
            0x754bb0a62c246266,
39220 +
            0x9ca8732e673df02c,
39221 +
            0x83d251e090db0488,
39222 +
            0xa25c36b388f01964,
39223 +
            0xbd26147d7f16edc0,
39224 +
            0xe140f815b8a622bc,
39225 +
            0xfe3adadb4f40d618,
39226 +
            0xdfb4bd88576bcbf4,
39227 +
            0xc0ce9f46a08d3f50,
39228 +
            0x67796559d80a550c,
39229 +
            0x780347972feca1a8,
39230 +
            0x598d20c437c7bc44,
39231 +
            0x46f7020ac02148e0,
39232 +
            0x1a91ee620791879c,
39233 +
            0x05ebccacf0777338,
39234 +
            0x2465abffe85c6ed4,
39235 +
            0x3b1f89311fba9a70,
39236 +
            0x4053799241c52907,
39237 +
            0x5f295b5cb623dda3,
39238 +
            0x7ea73c0fae08c04f,
39239 +
            0x61dd1ec159ee34eb,
39240 +
            0x3dbbf2a99e5efb97,
39241 +
            0x22c1d06769b80f33,
39242 +
            0x034fb734719312df,
39243 +
            0x1c3595fa8675e67b,
39244 +
            0xbb826fe5fef28c27,
39245 +
            0xa4f84d2b09147883,
39246 +
            0x85762a78113f656f,
39247 +
            0x9a0c08b6e6d991cb,
39248 +
            0xc66ae4de21695eb7,
39249 +
            0xd910c610d68faa13,
39250 +
            0xf89ea143cea4b7ff,
39251 +
            0xe7e4838d3942435b,
39252 +
            0x1c0e800ae4b7a222,
39253 +
            0x0374a2c413515686,
39254 +
            0x22fac5970b7a4b6a,
39255 +
            0x3d80e759fc9cbfce,
39256 +
            0x61e60b313b2c70b2,
39257 +
            0x7e9c29ffccca8416,
39258 +
            0x5f124eacd4e199fa,
39259 +
            0x40686c6223076d5e,
39260 +
            0xe7df967d5b800702,
39261 +
            0xf8a5b4b3ac66f3a6,
39262 +
            0xd92bd3e0b44dee4a,
39263 +
            0xc651f12e43ab1aee,
39264 +
            0x9a371d46841bd592,
39265 +
            0x854d3f8873fd2136,
39266 +
            0xa4c358db6bd63cda,
39267 +
            0xbbb97a159c30c87e,
39268 +
            0xc0f58ab6c24f7b09,
39269 +
            0xdf8fa87835a98fad,
39270 +
            0xfe01cf2b2d829241,
39271 +
            0xe17bede5da6466e5,
39272 +
            0xbd1d018d1dd4a999,
39273 +
            0xa2672343ea325d3d,
39274 +
            0x83e94410f21940d1,
39275 +
            0x9c9366de05ffb475,
39276 +
            0x3b249cc17d78de29,
39277 +
            0x245ebe0f8a9e2a8d,
39278 +
            0x05d0d95c92b53761,
39279 +
            0x1aaafb926553c3c5,
39280 +
            0x46cc17faa2e30cb9,
39281 +
            0x59b635345505f81d,
39282 +
            0x783852674d2ee5f1,
39283 +
            0x674270a9bac81155,
39284 +
            0x8ea1b321f1d1831f,
39285 +
            0x91db91ef063777bb,
39286 +
            0xb055f6bc1e1c6a57,
39287 +
            0xaf2fd472e9fa9ef3,
39288 +
            0xf349381a2e4a518f,
39289 +
            0xec331ad4d9aca52b,
39290 +
            0xcdbd7d87c187b8c7,
39291 +
            0xd2c75f4936614c63,
39292 +
            0x7570a5564ee6263f,
39293 +
            0x6a0a8798b900d29b,
39294 +
            0x4b84e0cba12bcf77,
39295 +
            0x54fec20556cd3bd3,
39296 +
            0x08982e6d917df4af,
39297 +
            0x17e20ca3669b000b,
39298 +
            0x366c6bf07eb01de7,
39299 +
            0x2916493e8956e943,
39300 +
            0x525ab99dd7295a34,
39301 +
            0x4d209b5320cfae90,
39302 +
            0x6caefc0038e4b37c,
39303 +
            0x73d4dececf0247d8,
39304 +
            0x2fb232a608b288a4,
39305 +
            0x30c81068ff547c00,
39306 +
            0x1146773be77f61ec,
39307 +
            0x0e3c55f510999548,
39308 +
            0xa98bafea681eff14,
39309 +
            0xb6f18d249ff80bb0,
39310 +
            0x977fea7787d3165c,
39311 +
            0x8805c8b97035e2f8,
39312 +
            0xd46324d1b7852d84,
39313 +
            0xcb19061f4063d920,
39314 +
            0xea97614c5848c4cc,
39315 +
            0xf5ed4382afae3068,
39316 +
            0x1209c00f96ec7333,
39317 +
            0x0d73e2c1610a8797,
39318 +
            0x2cfd859279219a7b,
39319 +
            0x3387a75c8ec76edf,
39320 +
            0x6fe14b344977a1a3,
39321 +
            0x709b69fabe915507,
39322 +
            0x51150ea9a6ba48eb,
39323 +
            0x4e6f2c67515cbc4f,
39324 +
            0xe9d8d67829dbd613,
39325 +
            0xf6a2f4b6de3d22b7,
39326 +
            0xd72c93e5c6163f5b,
39327 +
            0xc856b12b31f0cbff,
39328 +
            0x94305d43f6400483,
39329 +
            0x8b4a7f8d01a6f027,
39330 +
            0xaac418de198dedcb,
39331 +
            0xb5be3a10ee6b196f,
39332 +
            0xcef2cab3b014aa18,
39333 +
            0xd188e87d47f25ebc,
39334 +
            0xf0068f2e5fd94350,
39335 +
            0xef7cade0a83fb7f4,
39336 +
            0xb31a41886f8f7888,
39337 +
            0xac60634698698c2c,
39338 +
            0x8dee0415804291c0,
39339 +
            0x929426db77a46564,
39340 +
            0x3523dcc40f230f38,
39341 +
            0x2a59fe0af8c5fb9c,
39342 +
            0x0bd79959e0eee670,
39343 +
            0x14adbb97170812d4,
39344 +
            0x48cb57ffd0b8dda8,
39345 +
            0x57b17531275e290c,
39346 +
            0x763f12623f7534e0,
39347 +
            0x694530acc893c044,
39348 +
            0x80a6f324838a520e,
39349 +
            0x9fdcd1ea746ca6aa,
39350 +
            0xbe52b6b96c47bb46,
39351 +
            0xa12894779ba14fe2,
39352 +
            0xfd4e781f5c11809e,
39353 +
            0xe2345ad1abf7743a,
39354 +
            0xc3ba3d82b3dc69d6,
39355 +
            0xdcc01f4c443a9d72,
39356 +
            0x7b77e5533cbdf72e,
39357 +
            0x640dc79dcb5b038a,
39358 +
            0x4583a0ced3701e66,
39359 +
            0x5af982002496eac2,
39360 +
            0x069f6e68e32625be,
39361 +
            0x19e54ca614c0d11a,
39362 +
            0x386b2bf50cebccf6,
39363 +
            0x2711093bfb0d3852,
39364 +
            0x5c5df998a5728b25,
39365 +
            0x4327db5652947f81,
39366 +
            0x62a9bc054abf626d,
39367 +
            0x7dd39ecbbd5996c9,
39368 +
            0x21b572a37ae959b5,
39369 +
            0x3ecf506d8d0fad11,
39370 +
            0x1f41373e9524b0fd,
39371 +
            0x003b15f062c24459,
39372 +
            0xa78cefef1a452e05,
39373 +
            0xb8f6cd21eda3daa1,
39374 +
            0x9978aa72f588c74d,
39375 +
            0x860288bc026e33e9,
39376 +
            0xda6464d4c5defc95,
39377 +
            0xc51e461a32380831,
39378 +
            0xe49021492a1315dd,
39379 +
            0xfbea0387ddf5e179,
39380 +
        ],
39381 +
        [
39382 +
            0x0000000000000000,
39383 +
            0xaf9af20feb8146cc,
39384 +
            0x746cc24c8f951ef3,
39385 +
            0xdbf630436414583f,
39386 +
            0xe8d984991f2a3de6,
39387 +
            0x47437696f4ab7b2a,
39388 +
            0x9cb546d590bf2315,
39389 +
            0x332fb4da7b3e65d9,
39390 +
            0xfaea2f6166c3e8a7,
39391 +
            0x5570dd6e8d42ae6b,
39392 +
            0x8e86ed2de956f654,
39393 +
            0x211c1f2202d7b098,
39394 +
            0x1233abf879e9d541,
39395 +
            0xbda959f79268938d,
39396 +
            0x665f69b4f67ccbb2,
39397 +
            0xc9c59bbb1dfd8d7e,
39398 +
            0xde8d789195104225,
39399 +
            0x71178a9e7e9104e9,
39400 +
            0xaae1badd1a855cd6,
39401 +
            0x057b48d2f1041a1a,
39402 +
            0x3654fc088a3a7fc3,
39403 +
            0x99ce0e0761bb390f,
39404 +
            0x42383e4405af6130,
39405 +
            0xeda2cc4bee2e27fc,
39406 +
            0x246757f0f3d3aa82,
39407 +
            0x8bfda5ff1852ec4e,
39408 +
            0x500b95bc7c46b471,
39409 +
            0xff9167b397c7f2bd,
39410 +
            0xccbed369ecf99764,
39411 +
            0x632421660778d1a8,
39412 +
            0xb8d21125636c8997,
39413 +
            0x1748e32a88edcf5b,
39414 +
            0x9643d77072b71721,
39415 +
            0x39d9257f993651ed,
39416 +
            0xe22f153cfd2209d2,
39417 +
            0x4db5e73316a34f1e,
39418 +
            0x7e9a53e96d9d2ac7,
39419 +
            0xd100a1e6861c6c0b,
39420 +
            0x0af691a5e2083434,
39421 +
            0xa56c63aa098972f8,
39422 +
            0x6ca9f8111474ff86,
39423 +
            0xc3330a1efff5b94a,
39424 +
            0x18c53a5d9be1e175,
39425 +
            0xb75fc8527060a7b9,
39426 +
            0x84707c880b5ec260,
39427 +
            0x2bea8e87e0df84ac,
39428 +
            0xf01cbec484cbdc93,
39429 +
            0x5f864ccb6f4a9a5f,
39430 +
            0x48ceafe1e7a75504,
39431 +
            0xe7545dee0c2613c8,
39432 +
            0x3ca26dad68324bf7,
39433 +
            0x93389fa283b30d3b,
39434 +
            0xa0172b78f88d68e2,
39435 +
            0x0f8dd977130c2e2e,
39436 +
            0xd47be93477187611,
39437 +
            0x7be11b3b9c9930dd,
39438 +
            0xb22480808164bda3,
39439 +
            0x1dbe728f6ae5fb6f,
39440 +
            0xc64842cc0ef1a350,
39441 +
            0x69d2b0c3e570e59c,
39442 +
            0x5afd04199e4e8045,
39443 +
            0xf567f61675cfc689,
39444 +
            0x2e91c65511db9eb6,
39445 +
            0x810b345afa5ad87a,
39446 +
            0x07de88b3bdf9bd29,
39447 +
            0xa8447abc5678fbe5,
39448 +
            0x73b24aff326ca3da,
39449 +
            0xdc28b8f0d9ede516,
39450 +
            0xef070c2aa2d380cf,
39451 +
            0x409dfe254952c603,
39452 +
            0x9b6bce662d469e3c,
39453 +
            0x34f13c69c6c7d8f0,
39454 +
            0xfd34a7d2db3a558e,
39455 +
            0x52ae55dd30bb1342,
39456 +
            0x8958659e54af4b7d,
39457 +
            0x26c29791bf2e0db1,
39458 +
            0x15ed234bc4106868,
39459 +
            0xba77d1442f912ea4,
39460 +
            0x6181e1074b85769b,
39461 +
            0xce1b1308a0043057,
39462 +
            0xd953f02228e9ff0c,
39463 +
            0x76c9022dc368b9c0,
39464 +
            0xad3f326ea77ce1ff,
39465 +
            0x02a5c0614cfda733,
39466 +
            0x318a74bb37c3c2ea,
39467 +
            0x9e1086b4dc428426,
39468 +
            0x45e6b6f7b856dc19,
39469 +
            0xea7c44f853d79ad5,
39470 +
            0x23b9df434e2a17ab,
39471 +
            0x8c232d4ca5ab5167,
39472 +
            0x57d51d0fc1bf0958,
39473 +
            0xf84fef002a3e4f94,
39474 +
            0xcb605bda51002a4d,
39475 +
            0x64faa9d5ba816c81,
39476 +
            0xbf0c9996de9534be,
39477 +
            0x10966b9935147272,
39478 +
            0x919d5fc3cf4eaa08,
39479 +
            0x3e07adcc24cfecc4,
39480 +
            0xe5f19d8f40dbb4fb,
39481 +
            0x4a6b6f80ab5af237,
39482 +
            0x7944db5ad06497ee,
39483 +
            0xd6de29553be5d122,
39484 +
            0x0d2819165ff1891d,
39485 +
            0xa2b2eb19b470cfd1,
39486 +
            0x6b7770a2a98d42af,
39487 +
            0xc4ed82ad420c0463,
39488 +
            0x1f1bb2ee26185c5c,
39489 +
            0xb08140e1cd991a90,
39490 +
            0x83aef43bb6a77f49,
39491 +
            0x2c3406345d263985,
39492 +
            0xf7c23677393261ba,
39493 +
            0x5858c478d2b32776,
39494 +
            0x4f1027525a5ee82d,
39495 +
            0xe08ad55db1dfaee1,
39496 +
            0x3b7ce51ed5cbf6de,
39497 +
            0x94e617113e4ab012,
39498 +
            0xa7c9a3cb4574d5cb,
39499 +
            0x085351c4aef59307,
39500 +
            0xd3a56187cae1cb38,
39501 +
            0x7c3f938821608df4,
39502 +
            0xb5fa08333c9d008a,
39503 +
            0x1a60fa3cd71c4646,
39504 +
            0xc196ca7fb3081e79,
39505 +
            0x6e0c3870588958b5,
39506 +
            0x5d238caa23b73d6c,
39507 +
            0xf2b97ea5c8367ba0,
39508 +
            0x294f4ee6ac22239f,
39509 +
            0x86d5bce947a36553,
39510 +
            0x0fbd11677bf37a52,
39511 +
            0xa027e36890723c9e,
39512 +
            0x7bd1d32bf46664a1,
39513 +
            0xd44b21241fe7226d,
39514 +
            0xe76495fe64d947b4,
39515 +
            0x48fe67f18f580178,
39516 +
            0x930857b2eb4c5947,
39517 +
            0x3c92a5bd00cd1f8b,
39518 +
            0xf5573e061d3092f5,
39519 +
            0x5acdcc09f6b1d439,
39520 +
            0x813bfc4a92a58c06,
39521 +
            0x2ea10e457924caca,
39522 +
            0x1d8eba9f021aaf13,
39523 +
            0xb2144890e99be9df,
39524 +
            0x69e278d38d8fb1e0,
39525 +
            0xc6788adc660ef72c,
39526 +
            0xd13069f6eee33877,
39527 +
            0x7eaa9bf905627ebb,
39528 +
            0xa55cabba61762684,
39529 +
            0x0ac659b58af76048,
39530 +
            0x39e9ed6ff1c90591,
39531 +
            0x96731f601a48435d,
39532 +
            0x4d852f237e5c1b62,
39533 +
            0xe21fdd2c95dd5dae,
39534 +
            0x2bda46978820d0d0,
39535 +
            0x8440b49863a1961c,
39536 +
            0x5fb684db07b5ce23,
39537 +
            0xf02c76d4ec3488ef,
39538 +
            0xc303c20e970aed36,
39539 +
            0x6c9930017c8babfa,
39540 +
            0xb76f0042189ff3c5,
39541 +
            0x18f5f24df31eb509,
39542 +
            0x99fec61709446d73,
39543 +
            0x36643418e2c52bbf,
39544 +
            0xed92045b86d17380,
39545 +
            0x4208f6546d50354c,
39546 +
            0x7127428e166e5095,
39547 +
            0xdebdb081fdef1659,
39548 +
            0x054b80c299fb4e66,
39549 +
            0xaad172cd727a08aa,
39550 +
            0x6314e9766f8785d4,
39551 +
            0xcc8e1b798406c318,
39552 +
            0x17782b3ae0129b27,
39553 +
            0xb8e2d9350b93ddeb,
39554 +
            0x8bcd6def70adb832,
39555 +
            0x24579fe09b2cfefe,
39556 +
            0xffa1afa3ff38a6c1,
39557 +
            0x503b5dac14b9e00d,
39558 +
            0x4773be869c542f56,
39559 +
            0xe8e94c8977d5699a,
39560 +
            0x331f7cca13c131a5,
39561 +
            0x9c858ec5f8407769,
39562 +
            0xafaa3a1f837e12b0,
39563 +
            0x0030c81068ff547c,
39564 +
            0xdbc6f8530ceb0c43,
39565 +
            0x745c0a5ce76a4a8f,
39566 +
            0xbd9991e7fa97c7f1,
39567 +
            0x120363e81116813d,
39568 +
            0xc9f553ab7502d902,
39569 +
            0x666fa1a49e839fce,
39570 +
            0x5540157ee5bdfa17,
39571 +
            0xfadae7710e3cbcdb,
39572 +
            0x212cd7326a28e4e4,
39573 +
            0x8eb6253d81a9a228,
39574 +
            0x086399d4c60ac77b,
39575 +
            0xa7f96bdb2d8b81b7,
39576 +
            0x7c0f5b98499fd988,
39577 +
            0xd395a997a21e9f44,
39578 +
            0xe0ba1d4dd920fa9d,
39579 +
            0x4f20ef4232a1bc51,
39580 +
            0x94d6df0156b5e46e,
39581 +
            0x3b4c2d0ebd34a2a2,
39582 +
            0xf289b6b5a0c92fdc,
39583 +
            0x5d1344ba4b486910,
39584 +
            0x86e574f92f5c312f,
39585 +
            0x297f86f6c4dd77e3,
39586 +
            0x1a50322cbfe3123a,
39587 +
            0xb5cac023546254f6,
39588 +
            0x6e3cf06030760cc9,
39589 +
            0xc1a6026fdbf74a05,
39590 +
            0xd6eee145531a855e,
39591 +
            0x7974134ab89bc392,
39592 +
            0xa2822309dc8f9bad,
39593 +
            0x0d18d106370edd61,
39594 +
            0x3e3765dc4c30b8b8,
39595 +
            0x91ad97d3a7b1fe74,
39596 +
            0x4a5ba790c3a5a64b,
39597 +
            0xe5c1559f2824e087,
39598 +
            0x2c04ce2435d96df9,
39599 +
            0x839e3c2bde582b35,
39600 +
            0x58680c68ba4c730a,
39601 +
            0xf7f2fe6751cd35c6,
39602 +
            0xc4dd4abd2af3501f,
39603 +
            0x6b47b8b2c17216d3,
39604 +
            0xb0b188f1a5664eec,
39605 +
            0x1f2b7afe4ee70820,
39606 +
            0x9e204ea4b4bdd05a,
39607 +
            0x31babcab5f3c9696,
39608 +
            0xea4c8ce83b28cea9,
39609 +
            0x45d67ee7d0a98865,
39610 +
            0x76f9ca3dab97edbc,
39611 +
            0xd96338324016ab70,
39612 +
            0x029508712402f34f,
39613 +
            0xad0ffa7ecf83b583,
39614 +
            0x64ca61c5d27e38fd,
39615 +
            0xcb5093ca39ff7e31,
39616 +
            0x10a6a3895deb260e,
39617 +
            0xbf3c5186b66a60c2,
39618 +
            0x8c13e55ccd54051b,
39619 +
            0x2389175326d543d7,
39620 +
            0xf87f271042c11be8,
39621 +
            0x57e5d51fa9405d24,
39622 +
            0x40ad363521ad927f,
39623 +
            0xef37c43aca2cd4b3,
39624 +
            0x34c1f479ae388c8c,
39625 +
            0x9b5b067645b9ca40,
39626 +
            0xa874b2ac3e87af99,
39627 +
            0x07ee40a3d506e955,
39628 +
            0xdc1870e0b112b16a,
39629 +
            0x738282ef5a93f7a6,
39630 +
            0xba471954476e7ad8,
39631 +
            0x15ddeb5bacef3c14,
39632 +
            0xce2bdb18c8fb642b,
39633 +
            0x61b12917237a22e7,
39634 +
            0x529e9dcd5844473e,
39635 +
            0xfd046fc2b3c501f2,
39636 +
            0x26f25f81d7d159cd,
39637 +
            0x8968ad8e3c501f01,
39638 +
        ],
39639 +
        [
39640 +
            0x0000000000000000,
39641 +
            0x2169daa1299b2d66,
39642 +
            0x42d3b54253365acc,
39643 +
            0x63ba6fe37aad77aa,
39644 +
            0x85a76a84a66cb598,
39645 +
            0xa4ceb0258ff798fe,
39646 +
            0xc774dfc6f55aef54,
39647 +
            0xe61d0567dcc1c232,
39648 +
            0x2017f35a144ef85b,
39649 +
            0x017e29fb3dd5d53d,
39650 +
            0x62c446184778a297,
39651 +
            0x43ad9cb96ee38ff1,
39652 +
            0xa5b099deb2224dc3,
39653 +
            0x84d9437f9bb960a5,
39654 +
            0xe7632c9ce114170f,
39655 +
            0xc60af63dc88f3a69,
39656 +
            0x402fe6b4289df0b6,
39657 +
            0x61463c150106ddd0,
39658 +
            0x02fc53f67babaa7a,
39659 +
            0x239589575230871c,
39660 +
            0xc5888c308ef1452e,
39661 +
            0xe4e15691a76a6848,
39662 +
            0x875b3972ddc71fe2,
39663 +
            0xa632e3d3f45c3284,
39664 +
            0x603815ee3cd308ed,
39665 +
            0x4151cf4f1548258b,
39666 +
            0x22eba0ac6fe55221,
39667 +
            0x03827a0d467e7f47,
39668 +
            0xe59f7f6a9abfbd75,
39669 +
            0xc4f6a5cbb3249013,
39670 +
            0xa74cca28c989e7b9,
39671 +
            0x86251089e012cadf,
39672 +
            0x805fcd68513be16c,
39673 +
            0xa13617c978a0cc0a,
39674 +
            0xc28c782a020dbba0,
39675 +
            0xe3e5a28b2b9696c6,
39676 +
            0x05f8a7ecf75754f4,
39677 +
            0x24917d4ddecc7992,
39678 +
            0x472b12aea4610e38,
39679 +
            0x6642c80f8dfa235e,
39680 +
            0xa0483e3245751937,
39681 +
            0x8121e4936cee3451,
39682 +
            0xe29b8b70164343fb,
39683 +
            0xc3f251d13fd86e9d,
39684 +
            0x25ef54b6e319acaf,
39685 +
            0x04868e17ca8281c9,
39686 +
            0x673ce1f4b02ff663,
39687 +
            0x46553b5599b4db05,
39688 +
            0xc0702bdc79a611da,
39689 +
            0xe119f17d503d3cbc,
39690 +
            0x82a39e9e2a904b16,
39691 +
            0xa3ca443f030b6670,
39692 +
            0x45d74158dfcaa442,
39693 +
            0x64be9bf9f6518924,
39694 +
            0x0704f41a8cfcfe8e,
39695 +
            0x266d2ebba567d3e8,
39696 +
            0xe067d8866de8e981,
39697 +
            0xc10e02274473c4e7,
39698 +
            0xa2b46dc43edeb34d,
39699 +
            0x83ddb76517459e2b,
39700 +
            0x65c0b202cb845c19,
39701 +
            0x44a968a3e21f717f,
39702 +
            0x2713074098b206d5,
39703 +
            0x067adde1b1292bb3,
39704 +
            0x2be6bc83fae051b3,
39705 +
            0x0a8f6622d37b7cd5,
39706 +
            0x693509c1a9d60b7f,
39707 +
            0x485cd360804d2619,
39708 +
            0xae41d6075c8ce42b,
39709 +
            0x8f280ca67517c94d,
39710 +
            0xec9263450fbabee7,
39711 +
            0xcdfbb9e426219381,
39712 +
            0x0bf14fd9eeaea9e8,
39713 +
            0x2a989578c735848e,
39714 +
            0x4922fa9bbd98f324,
39715 +
            0x684b203a9403de42,
39716 +
            0x8e56255d48c21c70,
39717 +
            0xaf3ffffc61593116,
39718 +
            0xcc85901f1bf446bc,
39719 +
            0xedec4abe326f6bda,
39720 +
            0x6bc95a37d27da105,
39721 +
            0x4aa08096fbe68c63,
39722 +
            0x291aef75814bfbc9,
39723 +
            0x087335d4a8d0d6af,
39724 +
            0xee6e30b37411149d,
39725 +
            0xcf07ea125d8a39fb,
39726 +
            0xacbd85f127274e51,
39727 +
            0x8dd45f500ebc6337,
39728 +
            0x4bdea96dc633595e,
39729 +
            0x6ab773ccefa87438,
39730 +
            0x090d1c2f95050392,
39731 +
            0x2864c68ebc9e2ef4,
39732 +
            0xce79c3e9605fecc6,
39733 +
            0xef10194849c4c1a0,
39734 +
            0x8caa76ab3369b60a,
39735 +
            0xadc3ac0a1af29b6c,
39736 +
            0xabb971ebabdbb0df,
39737 +
            0x8ad0ab4a82409db9,
39738 +
            0xe96ac4a9f8edea13,
39739 +
            0xc8031e08d176c775,
39740 +
            0x2e1e1b6f0db70547,
39741 +
            0x0f77c1ce242c2821,
39742 +
            0x6ccdae2d5e815f8b,
39743 +
            0x4da4748c771a72ed,
39744 +
            0x8bae82b1bf954884,
39745 +
            0xaac75810960e65e2,
39746 +
            0xc97d37f3eca31248,
39747 +
            0xe814ed52c5383f2e,
39748 +
            0x0e09e83519f9fd1c,
39749 +
            0x2f6032943062d07a,
39750 +
            0x4cda5d774acfa7d0,
39751 +
            0x6db387d663548ab6,
39752 +
            0xeb96975f83464069,
39753 +
            0xcaff4dfeaadd6d0f,
39754 +
            0xa945221dd0701aa5,
39755 +
            0x882cf8bcf9eb37c3,
39756 +
            0x6e31fddb252af5f1,
39757 +
            0x4f58277a0cb1d897,
39758 +
            0x2ce24899761caf3d,
39759 +
            0x0d8b92385f87825b,
39760 +
            0xcb8164059708b832,
39761 +
            0xeae8bea4be939554,
39762 +
            0x8952d147c43ee2fe,
39763 +
            0xa83b0be6eda5cf98,
39764 +
            0x4e260e8131640daa,
39765 +
            0x6f4fd42018ff20cc,
39766 +
            0x0cf5bbc362525766,
39767 +
            0x2d9c61624bc97a00,
39768 +
            0x57cd7907f5c0a366,
39769 +
            0x76a4a3a6dc5b8e00,
39770 +
            0x151ecc45a6f6f9aa,
39771 +
            0x347716e48f6dd4cc,
39772 +
            0xd26a138353ac16fe,
39773 +
            0xf303c9227a373b98,
39774 +
            0x90b9a6c1009a4c32,
39775 +
            0xb1d07c6029016154,
39776 +
            0x77da8a5de18e5b3d,
39777 +
            0x56b350fcc815765b,
39778 +
            0x35093f1fb2b801f1,
39779 +
            0x1460e5be9b232c97,
39780 +
            0xf27de0d947e2eea5,
39781 +
            0xd3143a786e79c3c3,
39782 +
            0xb0ae559b14d4b469,
39783 +
            0x91c78f3a3d4f990f,
39784 +
            0x17e29fb3dd5d53d0,
39785 +
            0x368b4512f4c67eb6,
39786 +
            0x55312af18e6b091c,
39787 +
            0x7458f050a7f0247a,
39788 +
            0x9245f5377b31e648,
39789 +
            0xb32c2f9652aacb2e,
39790 +
            0xd09640752807bc84,
39791 +
            0xf1ff9ad4019c91e2,
39792 +
            0x37f56ce9c913ab8b,
39793 +
            0x169cb648e08886ed,
39794 +
            0x7526d9ab9a25f147,
39795 +
            0x544f030ab3bedc21,
39796 +
            0xb252066d6f7f1e13,
39797 +
            0x933bdccc46e43375,
39798 +
            0xf081b32f3c4944df,
39799 +
            0xd1e8698e15d269b9,
39800 +
            0xd792b46fa4fb420a,
39801 +
            0xf6fb6ece8d606f6c,
39802 +
            0x9541012df7cd18c6,
39803 +
            0xb428db8cde5635a0,
39804 +
            0x5235deeb0297f792,
39805 +
            0x735c044a2b0cdaf4,
39806 +
            0x10e66ba951a1ad5e,
39807 +
            0x318fb108783a8038,
39808 +
            0xf7854735b0b5ba51,
39809 +
            0xd6ec9d94992e9737,
39810 +
            0xb556f277e383e09d,
39811 +
            0x943f28d6ca18cdfb,
39812 +
            0x72222db116d90fc9,
39813 +
            0x534bf7103f4222af,
39814 +
            0x30f198f345ef5505,
39815 +
            0x119842526c747863,
39816 +
            0x97bd52db8c66b2bc,
39817 +
            0xb6d4887aa5fd9fda,
39818 +
            0xd56ee799df50e870,
39819 +
            0xf4073d38f6cbc516,
39820 +
            0x121a385f2a0a0724,
39821 +
            0x3373e2fe03912a42,
39822 +
            0x50c98d1d793c5de8,
39823 +
            0x71a057bc50a7708e,
39824 +
            0xb7aaa18198284ae7,
39825 +
            0x96c37b20b1b36781,
39826 +
            0xf57914c3cb1e102b,
39827 +
            0xd410ce62e2853d4d,
39828 +
            0x320dcb053e44ff7f,
39829 +
            0x136411a417dfd219,
39830 +
            0x70de7e476d72a5b3,
39831 +
            0x51b7a4e644e988d5,
39832 +
            0x7c2bc5840f20f2d5,
39833 +
            0x5d421f2526bbdfb3,
39834 +
            0x3ef870c65c16a819,
39835 +
            0x1f91aa67758d857f,
39836 +
            0xf98caf00a94c474d,
39837 +
            0xd8e575a180d76a2b,
39838 +
            0xbb5f1a42fa7a1d81,
39839 +
            0x9a36c0e3d3e130e7,
39840 +
            0x5c3c36de1b6e0a8e,
39841 +
            0x7d55ec7f32f527e8,
39842 +
            0x1eef839c48585042,
39843 +
            0x3f86593d61c37d24,
39844 +
            0xd99b5c5abd02bf16,
39845 +
            0xf8f286fb94999270,
39846 +
            0x9b48e918ee34e5da,
39847 +
            0xba2133b9c7afc8bc,
39848 +
            0x3c04233027bd0263,
39849 +
            0x1d6df9910e262f05,
39850 +
            0x7ed79672748b58af,
39851 +
            0x5fbe4cd35d1075c9,
39852 +
            0xb9a349b481d1b7fb,
39853 +
            0x98ca9315a84a9a9d,
39854 +
            0xfb70fcf6d2e7ed37,
39855 +
            0xda192657fb7cc051,
39856 +
            0x1c13d06a33f3fa38,
39857 +
            0x3d7a0acb1a68d75e,
39858 +
            0x5ec0652860c5a0f4,
39859 +
            0x7fa9bf89495e8d92,
39860 +
            0x99b4baee959f4fa0,
39861 +
            0xb8dd604fbc0462c6,
39862 +
            0xdb670facc6a9156c,
39863 +
            0xfa0ed50def32380a,
39864 +
            0xfc7408ec5e1b13b9,
39865 +
            0xdd1dd24d77803edf,
39866 +
            0xbea7bdae0d2d4975,
39867 +
            0x9fce670f24b66413,
39868 +
            0x79d36268f877a621,
39869 +
            0x58bab8c9d1ec8b47,
39870 +
            0x3b00d72aab41fced,
39871 +
            0x1a690d8b82dad18b,
39872 +
            0xdc63fbb64a55ebe2,
39873 +
            0xfd0a211763cec684,
39874 +
            0x9eb04ef41963b12e,
39875 +
            0xbfd9945530f89c48,
39876 +
            0x59c49132ec395e7a,
39877 +
            0x78ad4b93c5a2731c,
39878 +
            0x1b172470bf0f04b6,
39879 +
            0x3a7efed1969429d0,
39880 +
            0xbc5bee587686e30f,
39881 +
            0x9d3234f95f1dce69,
39882 +
            0xfe885b1a25b0b9c3,
39883 +
            0xdfe181bb0c2b94a5,
39884 +
            0x39fc84dcd0ea5697,
39885 +
            0x18955e7df9717bf1,
39886 +
            0x7b2f319e83dc0c5b,
39887 +
            0x5a46eb3faa47213d,
39888 +
            0x9c4c1d0262c81b54,
39889 +
            0xbd25c7a34b533632,
39890 +
            0xde9fa84031fe4198,
39891 +
            0xfff672e118656cfe,
39892 +
            0x19eb7786c4a4aecc,
39893 +
            0x3882ad27ed3f83aa,
39894 +
            0x5b38c2c49792f400,
39895 +
            0x7a511865be09d966,
39896 +
        ],
39897 +
        [
39898 +
            0x0000000000000000,
39899 +
            0x10c249f33211cd3d,
39900 +
            0x218493e664239a7a,
39901 +
            0x3146da1556325747,
39902 +
            0x430927ccc84734f4,
39903 +
            0x53cb6e3ffa56f9c9,
39904 +
            0x628db42aac64ae8e,
39905 +
            0x724ffdd99e7563b3,
39906 +
            0x86124f99908e69e8,
39907 +
            0x96d0066aa29fa4d5,
39908 +
            0xa796dc7ff4adf392,
39909 +
            0xb754958cc6bc3eaf,
39910 +
            0xc51b685558c95d1c,
39911 +
            0xd5d921a66ad89021,
39912 +
            0xe49ffbb33ceac766,
39913 +
            0xf45db2400efb0a5b,
39914 +
            0x277db960798b40bb,
39915 +
            0x37bff0934b9a8d86,
39916 +
            0x06f92a861da8dac1,
39917 +
            0x163b63752fb917fc,
39918 +
            0x64749eacb1cc744f,
39919 +
            0x74b6d75f83ddb972,
39920 +
            0x45f00d4ad5efee35,
39921 +
            0x553244b9e7fe2308,
39922 +
            0xa16ff6f9e9052953,
39923 +
            0xb1adbf0adb14e46e,
39924 +
            0x80eb651f8d26b329,
39925 +
            0x90292cecbf377e14,
39926 +
            0xe266d13521421da7,
39927 +
            0xf2a498c61353d09a,
39928 +
            0xc3e242d3456187dd,
39929 +
            0xd3200b2077704ae0,
39930 +
            0x4efb72c0f3168176,
39931 +
            0x5e393b33c1074c4b,
39932 +
            0x6f7fe12697351b0c,
39933 +
            0x7fbda8d5a524d631,
39934 +
            0x0df2550c3b51b582,
39935 +
            0x1d301cff094078bf,
39936 +
            0x2c76c6ea5f722ff8,
39937 +
            0x3cb48f196d63e2c5,
39938 +
            0xc8e93d596398e89e,
39939 +
            0xd82b74aa518925a3,
39940 +
            0xe96daebf07bb72e4,
39941 +
            0xf9afe74c35aabfd9,
39942 +
            0x8be01a95abdfdc6a,
39943 +
            0x9b22536699ce1157,
39944 +
            0xaa648973cffc4610,
39945 +
            0xbaa6c080fded8b2d,
39946 +
            0x6986cba08a9dc1cd,
39947 +
            0x79448253b88c0cf0,
39948 +
            0x48025846eebe5bb7,
39949 +
            0x58c011b5dcaf968a,
39950 +
            0x2a8fec6c42daf539,
39951 +
            0x3a4da59f70cb3804,
39952 +
            0x0b0b7f8a26f96f43,
39953 +
            0x1bc9367914e8a27e,
39954 +
            0xef9484391a13a825,
39955 +
            0xff56cdca28026518,
39956 +
            0xce1017df7e30325f,
39957 +
            0xded25e2c4c21ff62,
39958 +
            0xac9da3f5d2549cd1,
39959 +
            0xbc5fea06e04551ec,
39960 +
            0x8d193013b67706ab,
39961 +
            0x9ddb79e08466cb96,
39962 +
            0x9df6e581e62d02ec,
39963 +
            0x8d34ac72d43ccfd1,
39964 +
            0xbc727667820e9896,
39965 +
            0xacb03f94b01f55ab,
39966 +
            0xdeffc24d2e6a3618,
39967 +
            0xce3d8bbe1c7bfb25,
39968 +
            0xff7b51ab4a49ac62,
39969 +
            0xefb918587858615f,
39970 +
            0x1be4aa1876a36b04,
39971 +
            0x0b26e3eb44b2a639,
39972 +
            0x3a6039fe1280f17e,
39973 +
            0x2aa2700d20913c43,
39974 +
            0x58ed8dd4bee45ff0,
39975 +
            0x482fc4278cf592cd,
39976 +
            0x79691e32dac7c58a,
39977 +
            0x69ab57c1e8d608b7,
39978 +
            0xba8b5ce19fa64257,
39979 +
            0xaa491512adb78f6a,
39980 +
            0x9b0fcf07fb85d82d,
39981 +
            0x8bcd86f4c9941510,
39982 +
            0xf9827b2d57e176a3,
39983 +
            0xe94032de65f0bb9e,
39984 +
            0xd806e8cb33c2ecd9,
39985 +
            0xc8c4a13801d321e4,
39986 +
            0x3c9913780f282bbf,
39987 +
            0x2c5b5a8b3d39e682,
39988 +
            0x1d1d809e6b0bb1c5,
39989 +
            0x0ddfc96d591a7cf8,
39990 +
            0x7f9034b4c76f1f4b,
39991 +
            0x6f527d47f57ed276,
39992 +
            0x5e14a752a34c8531,
39993 +
            0x4ed6eea1915d480c,
39994 +
            0xd30d9741153b839a,
39995 +
            0xc3cfdeb2272a4ea7,
39996 +
            0xf28904a7711819e0,
39997 +
            0xe24b4d544309d4dd,
39998 +
            0x9004b08ddd7cb76e,
39999 +
            0x80c6f97eef6d7a53,
40000 +
            0xb180236bb95f2d14,
40001 +
            0xa1426a988b4ee029,
40002 +
            0x551fd8d885b5ea72,
40003 +
            0x45dd912bb7a4274f,
40004 +
            0x749b4b3ee1967008,
40005 +
            0x645902cdd387bd35,
40006 +
            0x1616ff144df2de86,
40007 +
            0x06d4b6e77fe313bb,
40008 +
            0x37926cf229d144fc,
40009 +
            0x275025011bc089c1,
40010 +
            0xf4702e216cb0c321,
40011 +
            0xe4b267d25ea10e1c,
40012 +
            0xd5f4bdc70893595b,
40013 +
            0xc536f4343a829466,
40014 +
            0xb77909eda4f7f7d5,
40015 +
            0xa7bb401e96e63ae8,
40016 +
            0x96fd9a0bc0d46daf,
40017 +
            0x863fd3f8f2c5a092,
40018 +
            0x726261b8fc3eaac9,
40019 +
            0x62a0284bce2f67f4,
40020 +
            0x53e6f25e981d30b3,
40021 +
            0x4324bbadaa0cfd8e,
40022 +
            0x316b467434799e3d,
40023 +
            0x21a90f8706685300,
40024 +
            0x10efd592505a0447,
40025 +
            0x002d9c61624bc97a,
40026 +
            0x10b4ed5094cd96b3,
40027 +
            0x0076a4a3a6dc5b8e,
40028 +
            0x31307eb6f0ee0cc9,
40029 +
            0x21f23745c2ffc1f4,
40030 +
            0x53bdca9c5c8aa247,
40031 +
            0x437f836f6e9b6f7a,
40032 +
            0x7239597a38a9383d,
40033 +
            0x62fb10890ab8f500,
40034 +
            0x96a6a2c90443ff5b,
40035 +
            0x8664eb3a36523266,
40036 +
            0xb722312f60606521,
40037 +
            0xa7e078dc5271a81c,
40038 +
            0xd5af8505cc04cbaf,
40039 +
            0xc56dccf6fe150692,
40040 +
            0xf42b16e3a82751d5,
40041 +
            0xe4e95f109a369ce8,
40042 +
            0x37c95430ed46d608,
40043 +
            0x270b1dc3df571b35,
40044 +
            0x164dc7d689654c72,
40045 +
            0x068f8e25bb74814f,
40046 +
            0x74c073fc2501e2fc,
40047 +
            0x64023a0f17102fc1,
40048 +
            0x5544e01a41227886,
40049 +
            0x4586a9e97333b5bb,
40050 +
            0xb1db1ba97dc8bfe0,
40051 +
            0xa119525a4fd972dd,
40052 +
            0x905f884f19eb259a,
40053 +
            0x809dc1bc2bfae8a7,
40054 +
            0xf2d23c65b58f8b14,
40055 +
            0xe2107596879e4629,
40056 +
            0xd356af83d1ac116e,
40057 +
            0xc394e670e3bddc53,
40058 +
            0x5e4f9f9067db17c5,
40059 +
            0x4e8dd66355cadaf8,
40060 +
            0x7fcb0c7603f88dbf,
40061 +
            0x6f09458531e94082,
40062 +
            0x1d46b85caf9c2331,
40063 +
            0x0d84f1af9d8dee0c,
40064 +
            0x3cc22bbacbbfb94b,
40065 +
            0x2c006249f9ae7476,
40066 +
            0xd85dd009f7557e2d,
40067 +
            0xc89f99fac544b310,
40068 +
            0xf9d943ef9376e457,
40069 +
            0xe91b0a1ca167296a,
40070 +
            0x9b54f7c53f124ad9,
40071 +
            0x8b96be360d0387e4,
40072 +
            0xbad064235b31d0a3,
40073 +
            0xaa122dd069201d9e,
40074 +
            0x793226f01e50577e,
40075 +
            0x69f06f032c419a43,
40076 +
            0x58b6b5167a73cd04,
40077 +
            0x4874fce548620039,
40078 +
            0x3a3b013cd617638a,
40079 +
            0x2af948cfe406aeb7,
40080 +
            0x1bbf92dab234f9f0,
40081 +
            0x0b7ddb29802534cd,
40082 +
            0xff2069698ede3e96,
40083 +
            0xefe2209abccff3ab,
40084 +
            0xdea4fa8feafda4ec,
40085 +
            0xce66b37cd8ec69d1,
40086 +
            0xbc294ea546990a62,
40087 +
            0xaceb07567488c75f,
40088 +
            0x9daddd4322ba9018,
40089 +
            0x8d6f94b010ab5d25,
40090 +
            0x8d4208d172e0945f,
40091 +
            0x9d80412240f15962,
40092 +
            0xacc69b3716c30e25,
40093 +
            0xbc04d2c424d2c318,
40094 +
            0xce4b2f1dbaa7a0ab,
40095 +
            0xde8966ee88b66d96,
40096 +
            0xefcfbcfbde843ad1,
40097 +
            0xff0df508ec95f7ec,
40098 +
            0x0b504748e26efdb7,
40099 +
            0x1b920ebbd07f308a,
40100 +
            0x2ad4d4ae864d67cd,
40101 +
            0x3a169d5db45caaf0,
40102 +
            0x485960842a29c943,
40103 +
            0x589b29771838047e,
40104 +
            0x69ddf3624e0a5339,
40105 +
            0x791fba917c1b9e04,
40106 +
            0xaa3fb1b10b6bd4e4,
40107 +
            0xbafdf842397a19d9,
40108 +
            0x8bbb22576f484e9e,
40109 +
            0x9b796ba45d5983a3,
40110 +
            0xe936967dc32ce010,
40111 +
            0xf9f4df8ef13d2d2d,
40112 +
            0xc8b2059ba70f7a6a,
40113 +
            0xd8704c68951eb757,
40114 +
            0x2c2dfe289be5bd0c,
40115 +
            0x3cefb7dba9f47031,
40116 +
            0x0da96dceffc62776,
40117 +
            0x1d6b243dcdd7ea4b,
40118 +
            0x6f24d9e453a289f8,
40119 +
            0x7fe6901761b344c5,
40120 +
            0x4ea04a0237811382,
40121 +
            0x5e6203f10590debf,
40122 +
            0xc3b97a1181f61529,
40123 +
            0xd37b33e2b3e7d814,
40124 +
            0xe23de9f7e5d58f53,
40125 +
            0xf2ffa004d7c4426e,
40126 +
            0x80b05ddd49b121dd,
40127 +
            0x9072142e7ba0ece0,
40128 +
            0xa134ce3b2d92bba7,
40129 +
            0xb1f687c81f83769a,
40130 +
            0x45ab358811787cc1,
40131 +
            0x55697c7b2369b1fc,
40132 +
            0x642fa66e755be6bb,
40133 +
            0x74edef9d474a2b86,
40134 +
            0x06a21244d93f4835,
40135 +
            0x16605bb7eb2e8508,
40136 +
            0x272681a2bd1cd24f,
40137 +
            0x37e4c8518f0d1f72,
40138 +
            0xe4c4c371f87d5592,
40139 +
            0xf4068a82ca6c98af,
40140 +
            0xc54050979c5ecfe8,
40141 +
            0xd5821964ae4f02d5,
40142 +
            0xa7cde4bd303a6166,
40143 +
            0xb70fad4e022bac5b,
40144 +
            0x8649775b5419fb1c,
40145 +
            0x968b3ea866083621,
40146 +
            0x62d68ce868f33c7a,
40147 +
            0x7214c51b5ae2f147,
40148 +
            0x43521f0e0cd0a600,
40149 +
            0x539056fd3ec16b3d,
40150 +
            0x21dfab24a0b4088e,
40151 +
            0x311de2d792a5c5b3,
40152 +
            0x005b38c2c49792f4,
40153 +
            0x10997131f6865fc9,
40154 +
        ],
40155 +
        [
40156 +
            0x0000000000000000,
40157 +
            0x96c1ba0aaa9060cd,
40158 +
            0x06da52460db752f1,
40159 +
            0x901be84ca727323c,
40160 +
            0x0db4a48c1b6ea5e2,
40161 +
            0x9b751e86b1fec52f,
40162 +
            0x0b6ef6ca16d9f713,
40163 +
            0x9daf4cc0bc4997de,
40164 +
            0x1b69491836dd4bc4,
40165 +
            0x8da8f3129c4d2b09,
40166 +
            0x1db31b5e3b6a1935,
40167 +
            0x8b72a15491fa79f8,
40168 +
            0x16dded942db3ee26,
40169 +
            0x801c579e87238eeb,
40170 +
            0x1007bfd22004bcd7,
40171 +
            0x86c605d88a94dc1a,
40172 +
            0x36d292306dba9788,
40173 +
            0xa013283ac72af745,
40174 +
            0x3008c076600dc579,
40175 +
            0xa6c97a7cca9da5b4,
40176 +
            0x3b6636bc76d4326a,
40177 +
            0xada78cb6dc4452a7,
40178 +
            0x3dbc64fa7b63609b,
40179 +
            0xab7ddef0d1f30056,
40180 +
            0x2dbbdb285b67dc4c,
40181 +
            0xbb7a6122f1f7bc81,
40182 +
            0x2b61896e56d08ebd,
40183 +
            0xbda03364fc40ee70,
40184 +
            0x200f7fa4400979ae,
40185 +
            0xb6cec5aeea991963,
40186 +
            0x26d52de24dbe2b5f,
40187 +
            0xb01497e8e72e4b92,
40188 +
            0x6da52460db752f10,
40189 +
            0xfb649e6a71e54fdd,
40190 +
            0x6b7f7626d6c27de1,
40191 +
            0xfdbecc2c7c521d2c,
40192 +
            0x601180ecc01b8af2,
40193 +
            0xf6d03ae66a8bea3f,
40194 +
            0x66cbd2aacdacd803,
40195 +
            0xf00a68a0673cb8ce,
40196 +
            0x76cc6d78eda864d4,
40197 +
            0xe00dd77247380419,
40198 +
            0x70163f3ee01f3625,
40199 +
            0xe6d785344a8f56e8,
40200 +
            0x7b78c9f4f6c6c136,
40201 +
            0xedb973fe5c56a1fb,
40202 +
            0x7da29bb2fb7193c7,
40203 +
            0xeb6321b851e1f30a,
40204 +
            0x5b77b650b6cfb898,
40205 +
            0xcdb60c5a1c5fd855,
40206 +
            0x5dade416bb78ea69,
40207 +
            0xcb6c5e1c11e88aa4,
40208 +
            0x56c312dcada11d7a,
40209 +
            0xc002a8d607317db7,
40210 +
            0x5019409aa0164f8b,
40211 +
            0xc6d8fa900a862f46,
40212 +
            0x401eff488012f35c,
40213 +
            0xd6df45422a829391,
40214 +
            0x46c4ad0e8da5a1ad,
40215 +
            0xd00517042735c160,
40216 +
            0x4daa5bc49b7c56be,
40217 +
            0xdb6be1ce31ec3673,
40218 +
            0x4b70098296cb044f,
40219 +
            0xddb1b3883c5b6482,
40220 +
            0xdb4a48c1b6ea5e20,
40221 +
            0x4d8bf2cb1c7a3eed,
40222 +
            0xdd901a87bb5d0cd1,
40223 +
            0x4b51a08d11cd6c1c,
40224 +
            0xd6feec4dad84fbc2,
40225 +
            0x403f564707149b0f,
40226 +
            0xd024be0ba033a933,
40227 +
            0x46e504010aa3c9fe,
40228 +
            0xc02301d9803715e4,
40229 +
            0x56e2bbd32aa77529,
40230 +
            0xc6f9539f8d804715,
40231 +
            0x5038e995271027d8,
40232 +
            0xcd97a5559b59b006,
40233 +
            0x5b561f5f31c9d0cb,
40234 +
            0xcb4df71396eee2f7,
40235 +
            0x5d8c4d193c7e823a,
40236 +
            0xed98daf1db50c9a8,
40237 +
            0x7b5960fb71c0a965,
40238 +
            0xeb4288b7d6e79b59,
40239 +
            0x7d8332bd7c77fb94,
40240 +
            0xe02c7e7dc03e6c4a,
40241 +
            0x76edc4776aae0c87,
40242 +
            0xe6f62c3bcd893ebb,
40243 +
            0x7037963167195e76,
40244 +
            0xf6f193e9ed8d826c,
40245 +
            0x603029e3471de2a1,
40246 +
            0xf02bc1afe03ad09d,
40247 +
            0x66ea7ba54aaab050,
40248 +
            0xfb453765f6e3278e,
40249 +
            0x6d848d6f5c734743,
40250 +
            0xfd9f6523fb54757f,
40251 +
            0x6b5edf2951c415b2,
40252 +
            0xb6ef6ca16d9f7130,
40253 +
            0x202ed6abc70f11fd,
40254 +
            0xb0353ee7602823c1,
40255 +
            0x26f484edcab8430c,
40256 +
            0xbb5bc82d76f1d4d2,
40257 +
            0x2d9a7227dc61b41f,
40258 +
            0xbd819a6b7b468623,
40259 +
            0x2b402061d1d6e6ee,
40260 +
            0xad8625b95b423af4,
40261 +
            0x3b479fb3f1d25a39,
40262 +
            0xab5c77ff56f56805,
40263 +
            0x3d9dcdf5fc6508c8,
40264 +
            0xa0328135402c9f16,
40265 +
            0x36f33b3feabcffdb,
40266 +
            0xa6e8d3734d9bcde7,
40267 +
            0x30296979e70bad2a,
40268 +
            0x803dfe910025e6b8,
40269 +
            0x16fc449baab58675,
40270 +
            0x86e7acd70d92b449,
40271 +
            0x102616dda702d484,
40272 +
            0x8d895a1d1b4b435a,
40273 +
            0x1b48e017b1db2397,
40274 +
            0x8b53085b16fc11ab,
40275 +
            0x1d92b251bc6c7166,
40276 +
            0x9b54b78936f8ad7c,
40277 +
            0x0d950d839c68cdb1,
40278 +
            0x9d8ee5cf3b4fff8d,
40279 +
            0x0b4f5fc591df9f40,
40280 +
            0x96e013052d96089e,
40281 +
            0x0021a90f87066853,
40282 +
            0x903a414320215a6f,
40283 +
            0x06fbfb498ab13aa2,
40284 +
            0x9dcdb7d035432f2b,
40285 +
            0x0b0c0dda9fd34fe6,
40286 +
            0x9b17e59638f47dda,
40287 +
            0x0dd65f9c92641d17,
40288 +
            0x9079135c2e2d8ac9,
40289 +
            0x06b8a95684bdea04,
40290 +
            0x96a3411a239ad838,
40291 +
            0x0062fb10890ab8f5,
40292 +
            0x86a4fec8039e64ef,
40293 +
            0x106544c2a90e0422,
40294 +
            0x807eac8e0e29361e,
40295 +
            0x16bf1684a4b956d3,
40296 +
            0x8b105a4418f0c10d,
40297 +
            0x1dd1e04eb260a1c0,
40298 +
            0x8dca0802154793fc,
40299 +
            0x1b0bb208bfd7f331,
40300 +
            0xab1f25e058f9b8a3,
40301 +
            0x3dde9feaf269d86e,
40302 +
            0xadc577a6554eea52,
40303 +
            0x3b04cdacffde8a9f,
40304 +
            0xa6ab816c43971d41,
40305 +
            0x306a3b66e9077d8c,
40306 +
            0xa071d32a4e204fb0,
40307 +
            0x36b06920e4b02f7d,
40308 +
            0xb0766cf86e24f367,
40309 +
            0x26b7d6f2c4b493aa,
40310 +
            0xb6ac3ebe6393a196,
40311 +
            0x206d84b4c903c15b,
40312 +
            0xbdc2c874754a5685,
40313 +
            0x2b03727edfda3648,
40314 +
            0xbb189a3278fd0474,
40315 +
            0x2dd92038d26d64b9,
40316 +
            0xf06893b0ee36003b,
40317 +
            0x66a929ba44a660f6,
40318 +
            0xf6b2c1f6e38152ca,
40319 +
            0x60737bfc49113207,
40320 +
            0xfddc373cf558a5d9,
40321 +
            0x6b1d8d365fc8c514,
40322 +
            0xfb06657af8eff728,
40323 +
            0x6dc7df70527f97e5,
40324 +
            0xeb01daa8d8eb4bff,
40325 +
            0x7dc060a2727b2b32,
40326 +
            0xeddb88eed55c190e,
40327 +
            0x7b1a32e47fcc79c3,
40328 +
            0xe6b57e24c385ee1d,
40329 +
            0x7074c42e69158ed0,
40330 +
            0xe06f2c62ce32bcec,
40331 +
            0x76ae966864a2dc21,
40332 +
            0xc6ba0180838c97b3,
40333 +
            0x507bbb8a291cf77e,
40334 +
            0xc06053c68e3bc542,
40335 +
            0x56a1e9cc24aba58f,
40336 +
            0xcb0ea50c98e23251,
40337 +
            0x5dcf1f063272529c,
40338 +
            0xcdd4f74a955560a0,
40339 +
            0x5b154d403fc5006d,
40340 +
            0xddd34898b551dc77,
40341 +
            0x4b12f2921fc1bcba,
40342 +
            0xdb091adeb8e68e86,
40343 +
            0x4dc8a0d41276ee4b,
40344 +
            0xd067ec14ae3f7995,
40345 +
            0x46a6561e04af1958,
40346 +
            0xd6bdbe52a3882b64,
40347 +
            0x407c045809184ba9,
40348 +
            0x4687ff1183a9710b,
40349 +
            0xd046451b293911c6,
40350 +
            0x405dad578e1e23fa,
40351 +
            0xd69c175d248e4337,
40352 +
            0x4b335b9d98c7d4e9,
40353 +
            0xddf2e1973257b424,
40354 +
            0x4de909db95708618,
40355 +
            0xdb28b3d13fe0e6d5,
40356 +
            0x5deeb609b5743acf,
40357 +
            0xcb2f0c031fe45a02,
40358 +
            0x5b34e44fb8c3683e,
40359 +
            0xcdf55e45125308f3,
40360 +
            0x505a1285ae1a9f2d,
40361 +
            0xc69ba88f048affe0,
40362 +
            0x568040c3a3adcddc,
40363 +
            0xc041fac9093dad11,
40364 +
            0x70556d21ee13e683,
40365 +
            0xe694d72b4483864e,
40366 +
            0x768f3f67e3a4b472,
40367 +
            0xe04e856d4934d4bf,
40368 +
            0x7de1c9adf57d4361,
40369 +
            0xeb2073a75fed23ac,
40370 +
            0x7b3b9bebf8ca1190,
40371 +
            0xedfa21e1525a715d,
40372 +
            0x6b3c2439d8cead47,
40373 +
            0xfdfd9e33725ecd8a,
40374 +
            0x6de6767fd579ffb6,
40375 +
            0xfb27cc757fe99f7b,
40376 +
            0x668880b5c3a008a5,
40377 +
            0xf0493abf69306868,
40378 +
            0x6052d2f3ce175a54,
40379 +
            0xf69368f964873a99,
40380 +
            0x2b22db7158dc5e1b,
40381 +
            0xbde3617bf24c3ed6,
40382 +
            0x2df88937556b0cea,
40383 +
            0xbb39333dfffb6c27,
40384 +
            0x26967ffd43b2fbf9,
40385 +
            0xb057c5f7e9229b34,
40386 +
            0x204c2dbb4e05a908,
40387 +
            0xb68d97b1e495c9c5,
40388 +
            0x304b92696e0115df,
40389 +
            0xa68a2863c4917512,
40390 +
            0x3691c02f63b6472e,
40391 +
            0xa0507a25c92627e3,
40392 +
            0x3dff36e5756fb03d,
40393 +
            0xab3e8cefdfffd0f0,
40394 +
            0x3b2564a378d8e2cc,
40395 +
            0xade4dea9d2488201,
40396 +
            0x1df049413566c993,
40397 +
            0x8b31f34b9ff6a95e,
40398 +
            0x1b2a1b0738d19b62,
40399 +
            0x8deba10d9241fbaf,
40400 +
            0x1044edcd2e086c71,
40401 +
            0x868557c784980cbc,
40402 +
            0x169ebf8b23bf3e80,
40403 +
            0x805f0581892f5e4d,
40404 +
            0x0699005903bb8257,
40405 +
            0x9058ba53a92be29a,
40406 +
            0x0043521f0e0cd0a6,
40407 +
            0x9682e815a49cb06b,
40408 +
            0x0b2da4d518d527b5,
40409 +
            0x9dec1edfb2454778,
40410 +
            0x0df7f69315627544,
40411 +
            0x9b364c99bff21589,
40412 +
        ],
40413 +
        [
40414 +
            0x0000000000000000,
40415 +
            0x5b88f1211cefb539,
40416 +
            0xb711e24239df6a72,
40417 +
            0xec9913632530df4b,
40418 +
            0x457ae2d72b29478f,
40419 +
            0x1ef213f637c6f2b6,
40420 +
            0xf26b009512f62dfd,
40421 +
            0xa9e3f1b40e1998c4,
40422 +
            0x8af5c5ae56528f1e,
40423 +
            0xd17d348f4abd3a27,
40424 +
            0x3de427ec6f8de56c,
40425 +
            0x666cd6cd73625055,
40426 +
            0xcf8f27797d7bc891,
40427 +
            0x9407d65861947da8,
40428 +
            0x789ec53b44a4a2e3,
40429 +
            0x2316341a584b17da,
40430 +
            0x3eb2ad0ff4328d57,
40431 +
            0x653a5c2ee8dd386e,
40432 +
            0x89a34f4dcdede725,
40433 +
            0xd22bbe6cd102521c,
40434 +
            0x7bc84fd8df1bcad8,
40435 +
            0x2040bef9c3f47fe1,
40436 +
            0xccd9ad9ae6c4a0aa,
40437 +
            0x97515cbbfa2b1593,
40438 +
            0xb44768a1a2600249,
40439 +
            0xefcf9980be8fb770,
40440 +
            0x03568ae39bbf683b,
40441 +
            0x58de7bc28750dd02,
40442 +
            0xf13d8a76894945c6,
40443 +
            0xaab57b5795a6f0ff,
40444 +
            0x462c6834b0962fb4,
40445 +
            0x1da49915ac799a8d,
40446 +
            0x7d655a1fe8651aae,
40447 +
            0x26edab3ef48aaf97,
40448 +
            0xca74b85dd1ba70dc,
40449 +
            0x91fc497ccd55c5e5,
40450 +
            0x381fb8c8c34c5d21,
40451 +
            0x639749e9dfa3e818,
40452 +
            0x8f0e5a8afa933753,
40453 +
            0xd486ababe67c826a,
40454 +
            0xf7909fb1be3795b0,
40455 +
            0xac186e90a2d82089,
40456 +
            0x40817df387e8ffc2,
40457 +
            0x1b098cd29b074afb,
40458 +
            0xb2ea7d66951ed23f,
40459 +
            0xe9628c4789f16706,
40460 +
            0x05fb9f24acc1b84d,
40461 +
            0x5e736e05b02e0d74,
40462 +
            0x43d7f7101c5797f9,
40463 +
            0x185f063100b822c0,
40464 +
            0xf4c615522588fd8b,
40465 +
            0xaf4ee473396748b2,
40466 +
            0x06ad15c7377ed076,
40467 +
            0x5d25e4e62b91654f,
40468 +
            0xb1bcf7850ea1ba04,
40469 +
            0xea3406a4124e0f3d,
40470 +
            0xc92232be4a0518e7,
40471 +
            0x92aac39f56eaadde,
40472 +
            0x7e33d0fc73da7295,
40473 +
            0x25bb21dd6f35c7ac,
40474 +
            0x8c58d069612c5f68,
40475 +
            0xd7d021487dc3ea51,
40476 +
            0x3b49322b58f3351a,
40477 +
            0x60c1c30a441c8023,
40478 +
            0xfacab43fd0ca355c,
40479 +
            0xa142451ecc258065,
40480 +
            0x4ddb567de9155f2e,
40481 +
            0x1653a75cf5faea17,
40482 +
            0xbfb056e8fbe372d3,
40483 +
            0xe438a7c9e70cc7ea,
40484 +
            0x08a1b4aac23c18a1,
40485 +
            0x5329458bded3ad98,
40486 +
            0x703f71918698ba42,
40487 +
            0x2bb780b09a770f7b,
40488 +
            0xc72e93d3bf47d030,
40489 +
            0x9ca662f2a3a86509,
40490 +
            0x35459346adb1fdcd,
40491 +
            0x6ecd6267b15e48f4,
40492 +
            0x82547104946e97bf,
40493 +
            0xd9dc802588812286,
40494 +
            0xc478193024f8b80b,
40495 +
            0x9ff0e81138170d32,
40496 +
            0x7369fb721d27d279,
40497 +
            0x28e10a5301c86740,
40498 +
            0x8102fbe70fd1ff84,
40499 +
            0xda8a0ac6133e4abd,
40500 +
            0x361319a5360e95f6,
40501 +
            0x6d9be8842ae120cf,
40502 +
            0x4e8ddc9e72aa3715,
40503 +
            0x15052dbf6e45822c,
40504 +
            0xf99c3edc4b755d67,
40505 +
            0xa214cffd579ae85e,
40506 +
            0x0bf73e495983709a,
40507 +
            0x507fcf68456cc5a3,
40508 +
            0xbce6dc0b605c1ae8,
40509 +
            0xe76e2d2a7cb3afd1,
40510 +
            0x87afee2038af2ff2,
40511 +
            0xdc271f0124409acb,
40512 +
            0x30be0c6201704580,
40513 +
            0x6b36fd431d9ff0b9,
40514 +
            0xc2d50cf71386687d,
40515 +
            0x995dfdd60f69dd44,
40516 +
            0x75c4eeb52a59020f,
40517 +
            0x2e4c1f9436b6b736,
40518 +
            0x0d5a2b8e6efda0ec,
40519 +
            0x56d2daaf721215d5,
40520 +
            0xba4bc9cc5722ca9e,
40521 +
            0xe1c338ed4bcd7fa7,
40522 +
            0x4820c95945d4e763,
40523 +
            0x13a83878593b525a,
40524 +
            0xff312b1b7c0b8d11,
40525 +
            0xa4b9da3a60e43828,
40526 +
            0xb91d432fcc9da2a5,
40527 +
            0xe295b20ed072179c,
40528 +
            0x0e0ca16df542c8d7,
40529 +
            0x5584504ce9ad7dee,
40530 +
            0xfc67a1f8e7b4e52a,
40531 +
            0xa7ef50d9fb5b5013,
40532 +
            0x4b7643bade6b8f58,
40533 +
            0x10feb29bc2843a61,
40534 +
            0x33e886819acf2dbb,
40535 +
            0x686077a086209882,
40536 +
            0x84f964c3a31047c9,
40537 +
            0xdf7195e2bffff2f0,
40538 +
            0x76926456b1e66a34,
40539 +
            0x2d1a9577ad09df0d,
40540 +
            0xc183861488390046,
40541 +
            0x9a0b773594d6b57f,
40542 +
            0xdecc4e2cf903f9d3,
40543 +
            0x8544bf0de5ec4cea,
40544 +
            0x69ddac6ec0dc93a1,
40545 +
            0x32555d4fdc332698,
40546 +
            0x9bb6acfbd22abe5c,
40547 +
            0xc03e5ddacec50b65,
40548 +
            0x2ca74eb9ebf5d42e,
40549 +
            0x772fbf98f71a6117,
40550 +
            0x54398b82af5176cd,
40551 +
            0x0fb17aa3b3bec3f4,
40552 +
            0xe32869c0968e1cbf,
40553 +
            0xb8a098e18a61a986,
40554 +
            0x1143695584783142,
40555 +
            0x4acb98749897847b,
40556 +
            0xa6528b17bda75b30,
40557 +
            0xfdda7a36a148ee09,
40558 +
            0xe07ee3230d317484,
40559 +
            0xbbf6120211dec1bd,
40560 +
            0x576f016134ee1ef6,
40561 +
            0x0ce7f0402801abcf,
40562 +
            0xa50401f42618330b,
40563 +
            0xfe8cf0d53af78632,
40564 +
            0x1215e3b61fc75979,
40565 +
            0x499d12970328ec40,
40566 +
            0x6a8b268d5b63fb9a,
40567 +
            0x3103d7ac478c4ea3,
40568 +
            0xdd9ac4cf62bc91e8,
40569 +
            0x861235ee7e5324d1,
40570 +
            0x2ff1c45a704abc15,
40571 +
            0x7479357b6ca5092c,
40572 +
            0x98e026184995d667,
40573 +
            0xc368d739557a635e,
40574 +
            0xa3a914331166e37d,
40575 +
            0xf821e5120d895644,
40576 +
            0x14b8f67128b9890f,
40577 +
            0x4f30075034563c36,
40578 +
            0xe6d3f6e43a4fa4f2,
40579 +
            0xbd5b07c526a011cb,
40580 +
            0x51c214a60390ce80,
40581 +
            0x0a4ae5871f7f7bb9,
40582 +
            0x295cd19d47346c63,
40583 +
            0x72d420bc5bdbd95a,
40584 +
            0x9e4d33df7eeb0611,
40585 +
            0xc5c5c2fe6204b328,
40586 +
            0x6c26334a6c1d2bec,
40587 +
            0x37aec26b70f29ed5,
40588 +
            0xdb37d10855c2419e,
40589 +
            0x80bf2029492df4a7,
40590 +
            0x9d1bb93ce5546e2a,
40591 +
            0xc693481df9bbdb13,
40592 +
            0x2a0a5b7edc8b0458,
40593 +
            0x7182aa5fc064b161,
40594 +
            0xd8615bebce7d29a5,
40595 +
            0x83e9aacad2929c9c,
40596 +
            0x6f70b9a9f7a243d7,
40597 +
            0x34f84888eb4df6ee,
40598 +
            0x17ee7c92b306e134,
40599 +
            0x4c668db3afe9540d,
40600 +
            0xa0ff9ed08ad98b46,
40601 +
            0xfb776ff196363e7f,
40602 +
            0x52949e45982fa6bb,
40603 +
            0x091c6f6484c01382,
40604 +
            0xe5857c07a1f0ccc9,
40605 +
            0xbe0d8d26bd1f79f0,
40606 +
            0x2406fa1329c9cc8f,
40607 +
            0x7f8e0b32352679b6,
40608 +
            0x931718511016a6fd,
40609 +
            0xc89fe9700cf913c4,
40610 +
            0x617c18c402e08b00,
40611 +
            0x3af4e9e51e0f3e39,
40612 +
            0xd66dfa863b3fe172,
40613 +
            0x8de50ba727d0544b,
40614 +
            0xaef33fbd7f9b4391,
40615 +
            0xf57bce9c6374f6a8,
40616 +
            0x19e2ddff464429e3,
40617 +
            0x426a2cde5aab9cda,
40618 +
            0xeb89dd6a54b2041e,
40619 +
            0xb0012c4b485db127,
40620 +
            0x5c983f286d6d6e6c,
40621 +
            0x0710ce097182db55,
40622 +
            0x1ab4571cddfb41d8,
40623 +
            0x413ca63dc114f4e1,
40624 +
            0xada5b55ee4242baa,
40625 +
            0xf62d447ff8cb9e93,
40626 +
            0x5fceb5cbf6d20657,
40627 +
            0x044644eaea3db36e,
40628 +
            0xe8df5789cf0d6c25,
40629 +
            0xb357a6a8d3e2d91c,
40630 +
            0x904192b28ba9cec6,
40631 +
            0xcbc9639397467bff,
40632 +
            0x275070f0b276a4b4,
40633 +
            0x7cd881d1ae99118d,
40634 +
            0xd53b7065a0808949,
40635 +
            0x8eb38144bc6f3c70,
40636 +
            0x622a9227995fe33b,
40637 +
            0x39a2630685b05602,
40638 +
            0x5963a00cc1acd621,
40639 +
            0x02eb512ddd436318,
40640 +
            0xee72424ef873bc53,
40641 +
            0xb5fab36fe49c096a,
40642 +
            0x1c1942dbea8591ae,
40643 +
            0x4791b3faf66a2497,
40644 +
            0xab08a099d35afbdc,
40645 +
            0xf08051b8cfb54ee5,
40646 +
            0xd39665a297fe593f,
40647 +
            0x881e94838b11ec06,
40648 +
            0x648787e0ae21334d,
40649 +
            0x3f0f76c1b2ce8674,
40650 +
            0x96ec8775bcd71eb0,
40651 +
            0xcd647654a038ab89,
40652 +
            0x21fd6537850874c2,
40653 +
            0x7a75941699e7c1fb,
40654 +
            0x67d10d03359e5b76,
40655 +
            0x3c59fc222971ee4f,
40656 +
            0xd0c0ef410c413104,
40657 +
            0x8b481e6010ae843d,
40658 +
            0x22abefd41eb71cf9,
40659 +
            0x79231ef50258a9c0,
40660 +
            0x95ba0d962768768b,
40661 +
            0xce32fcb73b87c3b2,
40662 +
            0xed24c8ad63ccd468,
40663 +
            0xb6ac398c7f236151,
40664 +
            0x5a352aef5a13be1a,
40665 +
            0x01bddbce46fc0b23,
40666 +
            0xa85e2a7a48e593e7,
40667 +
            0xf3d6db5b540a26de,
40668 +
            0x1f4fc838713af995,
40669 +
            0x44c739196dd54cac,
40670 +
        ],
40671 +
        [
40672 +
            0x0000000000000000,
40673 +
            0x56b215c1e0ff283a,
40674 +
            0xad642b83c1fe5074,
40675 +
            0xfbd63e422101784e,
40676 +
            0x71917154db6b3383,
40677 +
            0x272364953b941bb9,
40678 +
            0xdcf55ad71a9563f7,
40679 +
            0x8a474f16fa6a4bcd,
40680 +
            0xe322e2a9b6d66706,
40681 +
            0xb590f76856294f3c,
40682 +
            0x4e46c92a77283772,
40683 +
            0x18f4dceb97d71f48,
40684 +
            0x92b393fd6dbd5485,
40685 +
            0xc401863c8d427cbf,
40686 +
            0x3fd7b87eac4304f1,
40687 +
            0x6965adbf4cbc2ccb,
40688 +
            0xed1ce300353b5d67,
40689 +
            0xbbaef6c1d5c4755d,
40690 +
            0x4078c883f4c50d13,
40691 +
            0x16cadd42143a2529,
40692 +
            0x9c8d9254ee506ee4,
40693 +
            0xca3f87950eaf46de,
40694 +
            0x31e9b9d72fae3e90,
40695 +
            0x675bac16cf5116aa,
40696 +
            0x0e3e01a983ed3a61,
40697 +
            0x588c14686312125b,
40698 +
            0xa35a2a2a42136a15,
40699 +
            0xf5e83feba2ec422f,
40700 +
            0x7faf70fd588609e2,
40701 +
            0x291d653cb87921d8,
40702 +
            0xd2cb5b7e99785996,
40703 +
            0x84794ebf798771ac,
40704 +
            0xf160e05332e129a5,
40705 +
            0xa7d2f592d21e019f,
40706 +
            0x5c04cbd0f31f79d1,
40707 +
            0x0ab6de1113e051eb,
40708 +
            0x80f19107e98a1a26,
40709 +
            0xd64384c60975321c,
40710 +
            0x2d95ba8428744a52,
40711 +
            0x7b27af45c88b6268,
40712 +
            0x124202fa84374ea3,
40713 +
            0x44f0173b64c86699,
40714 +
            0xbf26297945c91ed7,
40715 +
            0xe9943cb8a53636ed,
40716 +
            0x63d373ae5f5c7d20,
40717 +
            0x3561666fbfa3551a,
40718 +
            0xceb7582d9ea22d54,
40719 +
            0x98054dec7e5d056e,
40720 +
            0x1c7c035307da74c2,
40721 +
            0x4ace1692e7255cf8,
40722 +
            0xb11828d0c62424b6,
40723 +
            0xe7aa3d1126db0c8c,
40724 +
            0x6ded7207dcb14741,
40725 +
            0x3b5f67c63c4e6f7b,
40726 +
            0xc08959841d4f1735,
40727 +
            0x963b4c45fdb03f0f,
40728 +
            0xff5ee1fab10c13c4,
40729 +
            0xa9ecf43b51f33bfe,
40730 +
            0x523aca7970f243b0,
40731 +
            0x0488dfb8900d6b8a,
40732 +
            0x8ecf90ae6a672047,
40733 +
            0xd87d856f8a98087d,
40734 +
            0x23abbb2dab997033,
40735 +
            0x7519aeec4b665809,
40736 +
            0xc998e6f53d55c021,
40737 +
            0x9f2af334ddaae81b,
40738 +
            0x64fccd76fcab9055,
40739 +
            0x324ed8b71c54b86f,
40740 +
            0xb80997a1e63ef3a2,
40741 +
            0xeebb826006c1db98,
40742 +
            0x156dbc2227c0a3d6,
40743 +
            0x43dfa9e3c73f8bec,
40744 +
            0x2aba045c8b83a727,
40745 +
            0x7c08119d6b7c8f1d,
40746 +
            0x87de2fdf4a7df753,
40747 +
            0xd16c3a1eaa82df69,
40748 +
            0x5b2b750850e894a4,
40749 +
            0x0d9960c9b017bc9e,
40750 +
            0xf64f5e8b9116c4d0,
40751 +
            0xa0fd4b4a71e9ecea,
40752 +
            0x248405f5086e9d46,
40753 +
            0x72361034e891b57c,
40754 +
            0x89e02e76c990cd32,
40755 +
            0xdf523bb7296fe508,
40756 +
            0x551574a1d305aec5,
40757 +
            0x03a7616033fa86ff,
40758 +
            0xf8715f2212fbfeb1,
40759 +
            0xaec34ae3f204d68b,
40760 +
            0xc7a6e75cbeb8fa40,
40761 +
            0x9114f29d5e47d27a,
40762 +
            0x6ac2ccdf7f46aa34,
40763 +
            0x3c70d91e9fb9820e,
40764 +
            0xb637960865d3c9c3,
40765 +
            0xe08583c9852ce1f9,
40766 +
            0x1b53bd8ba42d99b7,
40767 +
            0x4de1a84a44d2b18d,
40768 +
            0x38f806a60fb4e984,
40769 +
            0x6e4a1367ef4bc1be,
40770 +
            0x959c2d25ce4ab9f0,
40771 +
            0xc32e38e42eb591ca,
40772 +
            0x496977f2d4dfda07,
40773 +
            0x1fdb62333420f23d,
40774 +
            0xe40d5c7115218a73,
40775 +
            0xb2bf49b0f5dea249,
40776 +
            0xdbdae40fb9628e82,
40777 +
            0x8d68f1ce599da6b8,
40778 +
            0x76becf8c789cdef6,
40779 +
            0x200cda4d9863f6cc,
40780 +
            0xaa4b955b6209bd01,
40781 +
            0xfcf9809a82f6953b,
40782 +
            0x072fbed8a3f7ed75,
40783 +
            0x519dab194308c54f,
40784 +
            0xd5e4e5a63a8fb4e3,
40785 +
            0x8356f067da709cd9,
40786 +
            0x7880ce25fb71e497,
40787 +
            0x2e32dbe41b8eccad,
40788 +
            0xa47594f2e1e48760,
40789 +
            0xf2c78133011baf5a,
40790 +
            0x0911bf71201ad714,
40791 +
            0x5fa3aab0c0e5ff2e,
40792 +
            0x36c6070f8c59d3e5,
40793 +
            0x607412ce6ca6fbdf,
40794 +
            0x9ba22c8c4da78391,
40795 +
            0xcd10394dad58abab,
40796 +
            0x4757765b5732e066,
40797 +
            0x11e5639ab7cdc85c,
40798 +
            0xea335dd896ccb012,
40799 +
            0xbc81481976339828,
40800 +
            0xb868ebb9223c1329,
40801 +
            0xeedafe78c2c33b13,
40802 +
            0x150cc03ae3c2435d,
40803 +
            0x43bed5fb033d6b67,
40804 +
            0xc9f99aedf95720aa,
40805 +
            0x9f4b8f2c19a80890,
40806 +
            0x649db16e38a970de,
40807 +
            0x322fa4afd85658e4,
40808 +
            0x5b4a091094ea742f,
40809 +
            0x0df81cd174155c15,
40810 +
            0xf62e22935514245b,
40811 +
            0xa09c3752b5eb0c61,
40812 +
            0x2adb78444f8147ac,
40813 +
            0x7c696d85af7e6f96,
40814 +
            0x87bf53c78e7f17d8,
40815 +
            0xd10d46066e803fe2,
40816 +
            0x557408b917074e4e,
40817 +
            0x03c61d78f7f86674,
40818 +
            0xf810233ad6f91e3a,
40819 +
            0xaea236fb36063600,
40820 +
            0x24e579edcc6c7dcd,
40821 +
            0x72576c2c2c9355f7,
40822 +
            0x8981526e0d922db9,
40823 +
            0xdf3347afed6d0583,
40824 +
            0xb656ea10a1d12948,
40825 +
            0xe0e4ffd1412e0172,
40826 +
            0x1b32c193602f793c,
40827 +
            0x4d80d45280d05106,
40828 +
            0xc7c79b447aba1acb,
40829 +
            0x91758e859a4532f1,
40830 +
            0x6aa3b0c7bb444abf,
40831 +
            0x3c11a5065bbb6285,
40832 +
            0x49080bea10dd3a8c,
40833 +
            0x1fba1e2bf02212b6,
40834 +
            0xe46c2069d1236af8,
40835 +
            0xb2de35a831dc42c2,
40836 +
            0x38997abecbb6090f,
40837 +
            0x6e2b6f7f2b492135,
40838 +
            0x95fd513d0a48597b,
40839 +
            0xc34f44fceab77141,
40840 +
            0xaa2ae943a60b5d8a,
40841 +
            0xfc98fc8246f475b0,
40842 +
            0x074ec2c067f50dfe,
40843 +
            0x51fcd701870a25c4,
40844 +
            0xdbbb98177d606e09,
40845 +
            0x8d098dd69d9f4633,
40846 +
            0x76dfb394bc9e3e7d,
40847 +
            0x206da6555c611647,
40848 +
            0xa414e8ea25e667eb,
40849 +
            0xf2a6fd2bc5194fd1,
40850 +
            0x0970c369e418379f,
40851 +
            0x5fc2d6a804e71fa5,
40852 +
            0xd58599befe8d5468,
40853 +
            0x83378c7f1e727c52,
40854 +
            0x78e1b23d3f73041c,
40855 +
            0x2e53a7fcdf8c2c26,
40856 +
            0x47360a43933000ed,
40857 +
            0x11841f8273cf28d7,
40858 +
            0xea5221c052ce5099,
40859 +
            0xbce03401b23178a3,
40860 +
            0x36a77b17485b336e,
40861 +
            0x60156ed6a8a41b54,
40862 +
            0x9bc3509489a5631a,
40863 +
            0xcd714555695a4b20,
40864 +
            0x71f00d4c1f69d308,
40865 +
            0x2742188dff96fb32,
40866 +
            0xdc9426cfde97837c,
40867 +
            0x8a26330e3e68ab46,
40868 +
            0x00617c18c402e08b,
40869 +
            0x56d369d924fdc8b1,
40870 +
            0xad05579b05fcb0ff,
40871 +
            0xfbb7425ae50398c5,
40872 +
            0x92d2efe5a9bfb40e,
40873 +
            0xc460fa2449409c34,
40874 +
            0x3fb6c4666841e47a,
40875 +
            0x6904d1a788becc40,
40876 +
            0xe3439eb172d4878d,
40877 +
            0xb5f18b70922bafb7,
40878 +
            0x4e27b532b32ad7f9,
40879 +
            0x1895a0f353d5ffc3,
40880 +
            0x9cecee4c2a528e6f,
40881 +
            0xca5efb8dcaada655,
40882 +
            0x3188c5cfebacde1b,
40883 +
            0x673ad00e0b53f621,
40884 +
            0xed7d9f18f139bdec,
40885 +
            0xbbcf8ad911c695d6,
40886 +
            0x4019b49b30c7ed98,
40887 +
            0x16aba15ad038c5a2,
40888 +
            0x7fce0ce59c84e969,
40889 +
            0x297c19247c7bc153,
40890 +
            0xd2aa27665d7ab91d,
40891 +
            0x841832a7bd859127,
40892 +
            0x0e5f7db147efdaea,
40893 +
            0x58ed6870a710f2d0,
40894 +
            0xa33b563286118a9e,
40895 +
            0xf58943f366eea2a4,
40896 +
            0x8090ed1f2d88faad,
40897 +
            0xd622f8decd77d297,
40898 +
            0x2df4c69cec76aad9,
40899 +
            0x7b46d35d0c8982e3,
40900 +
            0xf1019c4bf6e3c92e,
40901 +
            0xa7b3898a161ce114,
40902 +
            0x5c65b7c8371d995a,
40903 +
            0x0ad7a209d7e2b160,
40904 +
            0x63b20fb69b5e9dab,
40905 +
            0x35001a777ba1b591,
40906 +
            0xced624355aa0cddf,
40907 +
            0x986431f4ba5fe5e5,
40908 +
            0x12237ee24035ae28,
40909 +
            0x44916b23a0ca8612,
40910 +
            0xbf47556181cbfe5c,
40911 +
            0xe9f540a06134d666,
40912 +
            0x6d8c0e1f18b3a7ca,
40913 +
            0x3b3e1bdef84c8ff0,
40914 +
            0xc0e8259cd94df7be,
40915 +
            0x965a305d39b2df84,
40916 +
            0x1c1d7f4bc3d89449,
40917 +
            0x4aaf6a8a2327bc73,
40918 +
            0xb17954c80226c43d,
40919 +
            0xe7cb4109e2d9ec07,
40920 +
            0x8eaeecb6ae65c0cc,
40921 +
            0xd81cf9774e9ae8f6,
40922 +
            0x23cac7356f9b90b8,
40923 +
            0x7578d2f48f64b882,
40924 +
            0xff3f9de2750ef34f,
40925 +
            0xa98d882395f1db75,
40926 +
            0x525bb661b4f0a33b,
40927 +
            0x04e9a3a0540f8b01,
40928 +
        ],
40929 +
        [
40930 +
            0x0000000000000000,
40931 +
            0xd9d7be7d505da32c,
40932 +
            0x98f65aa9f82cd533,
40933 +
            0x4121e4d4a871761f,
40934 +
            0x1ab59300a8ce390d,
40935 +
            0xc3622d7df8939a21,
40936 +
            0x8243c9a950e2ec3e,
40937 +
            0x5b9477d400bf4f12,
40938 +
            0x356b2601519c721a,
40939 +
            0xecbc987c01c1d136,
40940 +
            0xad9d7ca8a9b0a729,
40941 +
            0x744ac2d5f9ed0405,
40942 +
            0x2fdeb501f9524b17,
40943 +
            0xf6090b7ca90fe83b,
40944 +
            0xb728efa8017e9e24,
40945 +
            0x6eff51d551233d08,
40946 +
            0x6ad64c02a338e434,
40947 +
            0xb301f27ff3654718,
40948 +
            0xf22016ab5b143107,
40949 +
            0x2bf7a8d60b49922b,
40950 +
            0x7063df020bf6dd39,
40951 +
            0xa9b4617f5bab7e15,
40952 +
            0xe89585abf3da080a,
40953 +
            0x31423bd6a387ab26,
40954 +
            0x5fbd6a03f2a4962e,
40955 +
            0x866ad47ea2f93502,
40956 +
            0xc74b30aa0a88431d,
40957 +
            0x1e9c8ed75ad5e031,
40958 +
            0x4508f9035a6aaf23,
40959 +
            0x9cdf477e0a370c0f,
40960 +
            0xddfea3aaa2467a10,
40961 +
            0x04291dd7f21bd93c,
40962 +
            0xd5ac98054671c868,
40963 +
            0x0c7b2678162c6b44,
40964 +
            0x4d5ac2acbe5d1d5b,
40965 +
            0x948d7cd1ee00be77,
40966 +
            0xcf190b05eebff165,
40967 +
            0x16ceb578bee25249,
40968 +
            0x57ef51ac16932456,
40969 +
            0x8e38efd146ce877a,
40970 +
            0xe0c7be0417edba72,
40971 +
            0x3910007947b0195e,
40972 +
            0x7831e4adefc16f41,
40973 +
            0xa1e65ad0bf9ccc6d,
40974 +
            0xfa722d04bf23837f,
40975 +
            0x23a59379ef7e2053,
40976 +
            0x628477ad470f564c,
40977 +
            0xbb53c9d01752f560,
40978 +
            0xbf7ad407e5492c5c,
40979 +
            0x66ad6a7ab5148f70,
40980 +
            0x278c8eae1d65f96f,
40981 +
            0xfe5b30d34d385a43,
40982 +
            0xa5cf47074d871551,
40983 +
            0x7c18f97a1ddab67d,
40984 +
            0x3d391daeb5abc062,
40985 +
            0xe4eea3d3e5f6634e,
40986 +
            0x8a11f206b4d55e46,
40987 +
            0x53c64c7be488fd6a,
40988 +
            0x12e7a8af4cf98b75,
40989 +
            0xcb3016d21ca42859,
40990 +
            0x90a461061c1b674b,
40991 +
            0x4973df7b4c46c467,
40992 +
            0x08523bafe437b278,
40993 +
            0xd18585d2b46a1154,
40994 +
            0x80001659d47403bb,
40995 +
            0x59d7a8248429a097,
40996 +
            0x18f64cf02c58d688,
40997 +
            0xc121f28d7c0575a4,
40998 +
            0x9ab585597cba3ab6,
40999 +
            0x43623b242ce7999a,
41000 +
            0x0243dff08496ef85,
41001 +
            0xdb94618dd4cb4ca9,
41002 +
            0xb56b305885e871a1,
41003 +
            0x6cbc8e25d5b5d28d,
41004 +
            0x2d9d6af17dc4a492,
41005 +
            0xf44ad48c2d9907be,
41006 +
            0xafdea3582d2648ac,
41007 +
            0x76091d257d7beb80,
41008 +
            0x3728f9f1d50a9d9f,
41009 +
            0xeeff478c85573eb3,
41010 +
            0xead65a5b774ce78f,
41011 +
            0x3301e426271144a3,
41012 +
            0x722000f28f6032bc,
41013 +
            0xabf7be8fdf3d9190,
41014 +
            0xf063c95bdf82de82,
41015 +
            0x29b477268fdf7dae,
41016 +
            0x689593f227ae0bb1,
41017 +
            0xb1422d8f77f3a89d,
41018 +
            0xdfbd7c5a26d09595,
41019 +
            0x066ac227768d36b9,
41020 +
            0x474b26f3defc40a6,
41021 +
            0x9e9c988e8ea1e38a,
41022 +
            0xc508ef5a8e1eac98,
41023 +
            0x1cdf5127de430fb4,
41024 +
            0x5dfeb5f3763279ab,
41025 +
            0x84290b8e266fda87,
41026 +
            0x55ac8e5c9205cbd3,
41027 +
            0x8c7b3021c25868ff,
41028 +
            0xcd5ad4f56a291ee0,
41029 +
            0x148d6a883a74bdcc,
41030 +
            0x4f191d5c3acbf2de,
41031 +
            0x96cea3216a9651f2,
41032 +
            0xd7ef47f5c2e727ed,
41033 +
            0x0e38f98892ba84c1,
41034 +
            0x60c7a85dc399b9c9,
41035 +
            0xb910162093c41ae5,
41036 +
            0xf831f2f43bb56cfa,
41037 +
            0x21e64c896be8cfd6,
41038 +
            0x7a723b5d6b5780c4,
41039 +
            0xa3a585203b0a23e8,
41040 +
            0xe28461f4937b55f7,
41041 +
            0x3b53df89c326f6db,
41042 +
            0x3f7ac25e313d2fe7,
41043 +
            0xe6ad7c2361608ccb,
41044 +
            0xa78c98f7c911fad4,
41045 +
            0x7e5b268a994c59f8,
41046 +
            0x25cf515e99f316ea,
41047 +
            0xfc18ef23c9aeb5c6,
41048 +
            0xbd390bf761dfc3d9,
41049 +
            0x64eeb58a318260f5,
41050 +
            0x0a11e45f60a15dfd,
41051 +
            0xd3c65a2230fcfed1,
41052 +
            0x92e7bef6988d88ce,
41053 +
            0x4b30008bc8d02be2,
41054 +
            0x10a4775fc86f64f0,
41055 +
            0xc973c9229832c7dc,
41056 +
            0x88522df63043b1c3,
41057 +
            0x5185938b601e12ef,
41058 +
            0x2b590ae0f07f941d,
41059 +
            0xf28eb49da0223731,
41060 +
            0xb3af50490853412e,
41061 +
            0x6a78ee34580ee202,
41062 +
            0x31ec99e058b1ad10,
41063 +
            0xe83b279d08ec0e3c,
41064 +
            0xa91ac349a09d7823,
41065 +
            0x70cd7d34f0c0db0f,
41066 +
            0x1e322ce1a1e3e607,
41067 +
            0xc7e5929cf1be452b,
41068 +
            0x86c4764859cf3334,
41069 +
            0x5f13c83509929018,
41070 +
            0x0487bfe1092ddf0a,
41071 +
            0xdd50019c59707c26,
41072 +
            0x9c71e548f1010a39,
41073 +
            0x45a65b35a15ca915,
41074 +
            0x418f46e253477029,
41075 +
            0x9858f89f031ad305,
41076 +
            0xd9791c4bab6ba51a,
41077 +
            0x00aea236fb360636,
41078 +
            0x5b3ad5e2fb894924,
41079 +
            0x82ed6b9fabd4ea08,
41080 +
            0xc3cc8f4b03a59c17,
41081 +
            0x1a1b313653f83f3b,
41082 +
            0x74e460e302db0233,
41083 +
            0xad33de9e5286a11f,
41084 +
            0xec123a4afaf7d700,
41085 +
            0x35c58437aaaa742c,
41086 +
            0x6e51f3e3aa153b3e,
41087 +
            0xb7864d9efa489812,
41088 +
            0xf6a7a94a5239ee0d,
41089 +
            0x2f70173702644d21,
41090 +
            0xfef592e5b60e5c75,
41091 +
            0x27222c98e653ff59,
41092 +
            0x6603c84c4e228946,
41093 +
            0xbfd476311e7f2a6a,
41094 +
            0xe44001e51ec06578,
41095 +
            0x3d97bf984e9dc654,
41096 +
            0x7cb65b4ce6ecb04b,
41097 +
            0xa561e531b6b11367,
41098 +
            0xcb9eb4e4e7922e6f,
41099 +
            0x12490a99b7cf8d43,
41100 +
            0x5368ee4d1fbefb5c,
41101 +
            0x8abf50304fe35870,
41102 +
            0xd12b27e44f5c1762,
41103 +
            0x08fc99991f01b44e,
41104 +
            0x49dd7d4db770c251,
41105 +
            0x900ac330e72d617d,
41106 +
            0x9423dee71536b841,
41107 +
            0x4df4609a456b1b6d,
41108 +
            0x0cd5844eed1a6d72,
41109 +
            0xd5023a33bd47ce5e,
41110 +
            0x8e964de7bdf8814c,
41111 +
            0x5741f39aeda52260,
41112 +
            0x1660174e45d4547f,
41113 +
            0xcfb7a9331589f753,
41114 +
            0xa148f8e644aaca5b,
41115 +
            0x789f469b14f76977,
41116 +
            0x39bea24fbc861f68,
41117 +
            0xe0691c32ecdbbc44,
41118 +
            0xbbfd6be6ec64f356,
41119 +
            0x622ad59bbc39507a,
41120 +
            0x230b314f14482665,
41121 +
            0xfadc8f3244158549,
41122 +
            0xab591cb9240b97a6,
41123 +
            0x728ea2c47456348a,
41124 +
            0x33af4610dc274295,
41125 +
            0xea78f86d8c7ae1b9,
41126 +
            0xb1ec8fb98cc5aeab,
41127 +
            0x683b31c4dc980d87,
41128 +
            0x291ad51074e97b98,
41129 +
            0xf0cd6b6d24b4d8b4,
41130 +
            0x9e323ab87597e5bc,
41131 +
            0x47e584c525ca4690,
41132 +
            0x06c460118dbb308f,
41133 +
            0xdf13de6cdde693a3,
41134 +
            0x8487a9b8dd59dcb1,
41135 +
            0x5d5017c58d047f9d,
41136 +
            0x1c71f31125750982,
41137 +
            0xc5a64d6c7528aaae,
41138 +
            0xc18f50bb87337392,
41139 +
            0x1858eec6d76ed0be,
41140 +
            0x59790a127f1fa6a1,
41141 +
            0x80aeb46f2f42058d,
41142 +
            0xdb3ac3bb2ffd4a9f,
41143 +
            0x02ed7dc67fa0e9b3,
41144 +
            0x43cc9912d7d19fac,
41145 +
            0x9a1b276f878c3c80,
41146 +
            0xf4e476bad6af0188,
41147 +
            0x2d33c8c786f2a2a4,
41148 +
            0x6c122c132e83d4bb,
41149 +
            0xb5c5926e7ede7797,
41150 +
            0xee51e5ba7e613885,
41151 +
            0x37865bc72e3c9ba9,
41152 +
            0x76a7bf13864dedb6,
41153 +
            0xaf70016ed6104e9a,
41154 +
            0x7ef584bc627a5fce,
41155 +
            0xa7223ac13227fce2,
41156 +
            0xe603de159a568afd,
41157 +
            0x3fd46068ca0b29d1,
41158 +
            0x644017bccab466c3,
41159 +
            0xbd97a9c19ae9c5ef,
41160 +
            0xfcb64d153298b3f0,
41161 +
            0x2561f36862c510dc,
41162 +
            0x4b9ea2bd33e62dd4,
41163 +
            0x92491cc063bb8ef8,
41164 +
            0xd368f814cbcaf8e7,
41165 +
            0x0abf46699b975bcb,
41166 +
            0x512b31bd9b2814d9,
41167 +
            0x88fc8fc0cb75b7f5,
41168 +
            0xc9dd6b146304c1ea,
41169 +
            0x100ad569335962c6,
41170 +
            0x1423c8bec142bbfa,
41171 +
            0xcdf476c3911f18d6,
41172 +
            0x8cd59217396e6ec9,
41173 +
            0x55022c6a6933cde5,
41174 +
            0x0e965bbe698c82f7,
41175 +
            0xd741e5c339d121db,
41176 +
            0x9660011791a057c4,
41177 +
            0x4fb7bf6ac1fdf4e8,
41178 +
            0x2148eebf90dec9e0,
41179 +
            0xf89f50c2c0836acc,
41180 +
            0xb9beb41668f21cd3,
41181 +
            0x60690a6b38afbfff,
41182 +
            0x3bfd7dbf3810f0ed,
41183 +
            0xe22ac3c2684d53c1,
41184 +
            0xa30b2716c03c25de,
41185 +
            0x7adc996b906186f2,
41186 +
        ],
41187 +
    ];
41188 +
41189 +
    pub static CRC64_WE_TABLE: [[u64; 256]; 16] = [
41190 +
        [
41191 +
            0x0000000000000000,
41192 +
            0x42f0e1eba9ea3693,
41193 +
            0x85e1c3d753d46d26,
41194 +
            0xc711223cfa3e5bb5,
41195 +
            0x493366450e42ecdf,
41196 +
            0x0bc387aea7a8da4c,
41197 +
            0xccd2a5925d9681f9,
41198 +
            0x8e224479f47cb76a,
41199 +
            0x9266cc8a1c85d9be,
41200 +
            0xd0962d61b56fef2d,
41201 +
            0x17870f5d4f51b498,
41202 +
            0x5577eeb6e6bb820b,
41203 +
            0xdb55aacf12c73561,
41204 +
            0x99a54b24bb2d03f2,
41205 +
            0x5eb4691841135847,
41206 +
            0x1c4488f3e8f96ed4,
41207 +
            0x663d78ff90e185ef,
41208 +
            0x24cd9914390bb37c,
41209 +
            0xe3dcbb28c335e8c9,
41210 +
            0xa12c5ac36adfde5a,
41211 +
            0x2f0e1eba9ea36930,
41212 +
            0x6dfeff5137495fa3,
41213 +
            0xaaefdd6dcd770416,
41214 +
            0xe81f3c86649d3285,
41215 +
            0xf45bb4758c645c51,
41216 +
            0xb6ab559e258e6ac2,
41217 +
            0x71ba77a2dfb03177,
41218 +
            0x334a9649765a07e4,
41219 +
            0xbd68d2308226b08e,
41220 +
            0xff9833db2bcc861d,
41221 +
            0x388911e7d1f2dda8,
41222 +
            0x7a79f00c7818eb3b,
41223 +
            0xcc7af1ff21c30bde,
41224 +
            0x8e8a101488293d4d,
41225 +
            0x499b3228721766f8,
41226 +
            0x0b6bd3c3dbfd506b,
41227 +
            0x854997ba2f81e701,
41228 +
            0xc7b97651866bd192,
41229 +
            0x00a8546d7c558a27,
41230 +
            0x4258b586d5bfbcb4,
41231 +
            0x5e1c3d753d46d260,
41232 +
            0x1cecdc9e94ace4f3,
41233 +
            0xdbfdfea26e92bf46,
41234 +
            0x990d1f49c77889d5,
41235 +
            0x172f5b3033043ebf,
41236 +
            0x55dfbadb9aee082c,
41237 +
            0x92ce98e760d05399,
41238 +
            0xd03e790cc93a650a,
41239 +
            0xaa478900b1228e31,
41240 +
            0xe8b768eb18c8b8a2,
41241 +
            0x2fa64ad7e2f6e317,
41242 +
            0x6d56ab3c4b1cd584,
41243 +
            0xe374ef45bf6062ee,
41244 +
            0xa1840eae168a547d,
41245 +
            0x66952c92ecb40fc8,
41246 +
            0x2465cd79455e395b,
41247 +
            0x3821458aada7578f,
41248 +
            0x7ad1a461044d611c,
41249 +
            0xbdc0865dfe733aa9,
41250 +
            0xff3067b657990c3a,
41251 +
            0x711223cfa3e5bb50,
41252 +
            0x33e2c2240a0f8dc3,
41253 +
            0xf4f3e018f031d676,
41254 +
            0xb60301f359dbe0e5,
41255 +
            0xda050215ea6c212f,
41256 +
            0x98f5e3fe438617bc,
41257 +
            0x5fe4c1c2b9b84c09,
41258 +
            0x1d14202910527a9a,
41259 +
            0x93366450e42ecdf0,
41260 +
            0xd1c685bb4dc4fb63,
41261 +
            0x16d7a787b7faa0d6,
41262 +
            0x5427466c1e109645,
41263 +
            0x4863ce9ff6e9f891,
41264 +
            0x0a932f745f03ce02,
41265 +
            0xcd820d48a53d95b7,
41266 +
            0x8f72eca30cd7a324,
41267 +
            0x0150a8daf8ab144e,
41268 +
            0x43a04931514122dd,
41269 +
            0x84b16b0dab7f7968,
41270 +
            0xc6418ae602954ffb,
41271 +
            0xbc387aea7a8da4c0,
41272 +
            0xfec89b01d3679253,
41273 +
            0x39d9b93d2959c9e6,
41274 +
            0x7b2958d680b3ff75,
41275 +
            0xf50b1caf74cf481f,
41276 +
            0xb7fbfd44dd257e8c,
41277 +
            0x70eadf78271b2539,
41278 +
            0x321a3e938ef113aa,
41279 +
            0x2e5eb66066087d7e,
41280 +
            0x6cae578bcfe24bed,
41281 +
            0xabbf75b735dc1058,
41282 +
            0xe94f945c9c3626cb,
41283 +
            0x676dd025684a91a1,
41284 +
            0x259d31cec1a0a732,
41285 +
            0xe28c13f23b9efc87,
41286 +
            0xa07cf2199274ca14,
41287 +
            0x167ff3eacbaf2af1,
41288 +
            0x548f120162451c62,
41289 +
            0x939e303d987b47d7,
41290 +
            0xd16ed1d631917144,
41291 +
            0x5f4c95afc5edc62e,
41292 +
            0x1dbc74446c07f0bd,
41293 +
            0xdaad56789639ab08,
41294 +
            0x985db7933fd39d9b,
41295 +
            0x84193f60d72af34f,
41296 +
            0xc6e9de8b7ec0c5dc,
41297 +
            0x01f8fcb784fe9e69,
41298 +
            0x43081d5c2d14a8fa,
41299 +
            0xcd2a5925d9681f90,
41300 +
            0x8fdab8ce70822903,
41301 +
            0x48cb9af28abc72b6,
41302 +
            0x0a3b7b1923564425,
41303 +
            0x70428b155b4eaf1e,
41304 +
            0x32b26afef2a4998d,
41305 +
            0xf5a348c2089ac238,
41306 +
            0xb753a929a170f4ab,
41307 +
            0x3971ed50550c43c1,
41308 +
            0x7b810cbbfce67552,
41309 +
            0xbc902e8706d82ee7,
41310 +
            0xfe60cf6caf321874,
41311 +
            0xe224479f47cb76a0,
41312 +
            0xa0d4a674ee214033,
41313 +
            0x67c58448141f1b86,
41314 +
            0x253565a3bdf52d15,
41315 +
            0xab1721da49899a7f,
41316 +
            0xe9e7c031e063acec,
41317 +
            0x2ef6e20d1a5df759,
41318 +
            0x6c0603e6b3b7c1ca,
41319 +
            0xf6fae5c07d3274cd,
41320 +
            0xb40a042bd4d8425e,
41321 +
            0x731b26172ee619eb,
41322 +
            0x31ebc7fc870c2f78,
41323 +
            0xbfc9838573709812,
41324 +
            0xfd39626eda9aae81,
41325 +
            0x3a28405220a4f534,
41326 +
            0x78d8a1b9894ec3a7,
41327 +
            0x649c294a61b7ad73,
41328 +
            0x266cc8a1c85d9be0,
41329 +
            0xe17dea9d3263c055,
41330 +
            0xa38d0b769b89f6c6,
41331 +
            0x2daf4f0f6ff541ac,
41332 +
            0x6f5faee4c61f773f,
41333 +
            0xa84e8cd83c212c8a,
41334 +
            0xeabe6d3395cb1a19,
41335 +
            0x90c79d3fedd3f122,
41336 +
            0xd2377cd44439c7b1,
41337 +
            0x15265ee8be079c04,
41338 +
            0x57d6bf0317edaa97,
41339 +
            0xd9f4fb7ae3911dfd,
41340 +
            0x9b041a914a7b2b6e,
41341 +
            0x5c1538adb04570db,
41342 +
            0x1ee5d94619af4648,
41343 +
            0x02a151b5f156289c,
41344 +
            0x4051b05e58bc1e0f,
41345 +
            0x87409262a28245ba,
41346 +
            0xc5b073890b687329,
41347 +
            0x4b9237f0ff14c443,
41348 +
            0x0962d61b56fef2d0,
41349 +
            0xce73f427acc0a965,
41350 +
            0x8c8315cc052a9ff6,
41351 +
            0x3a80143f5cf17f13,
41352 +
            0x7870f5d4f51b4980,
41353 +
            0xbf61d7e80f251235,
41354 +
            0xfd913603a6cf24a6,
41355 +
            0x73b3727a52b393cc,
41356 +
            0x31439391fb59a55f,
41357 +
            0xf652b1ad0167feea,
41358 +
            0xb4a25046a88dc879,
41359 +
            0xa8e6d8b54074a6ad,
41360 +
            0xea16395ee99e903e,
41361 +
            0x2d071b6213a0cb8b,
41362 +
            0x6ff7fa89ba4afd18,
41363 +
            0xe1d5bef04e364a72,
41364 +
            0xa3255f1be7dc7ce1,
41365 +
            0x64347d271de22754,
41366 +
            0x26c49cccb40811c7,
41367 +
            0x5cbd6cc0cc10fafc,
41368 +
            0x1e4d8d2b65facc6f,
41369 +
            0xd95caf179fc497da,
41370 +
            0x9bac4efc362ea149,
41371 +
            0x158e0a85c2521623,
41372 +
            0x577eeb6e6bb820b0,
41373 +
            0x906fc95291867b05,
41374 +
            0xd29f28b9386c4d96,
41375 +
            0xcedba04ad0952342,
41376 +
            0x8c2b41a1797f15d1,
41377 +
            0x4b3a639d83414e64,
41378 +
            0x09ca82762aab78f7,
41379 +
            0x87e8c60fded7cf9d,
41380 +
            0xc51827e4773df90e,
41381 +
            0x020905d88d03a2bb,
41382 +
            0x40f9e43324e99428,
41383 +
            0x2cffe7d5975e55e2,
41384 +
            0x6e0f063e3eb46371,
41385 +
            0xa91e2402c48a38c4,
41386 +
            0xebeec5e96d600e57,
41387 +
            0x65cc8190991cb93d,
41388 +
            0x273c607b30f68fae,
41389 +
            0xe02d4247cac8d41b,
41390 +
            0xa2dda3ac6322e288,
41391 +
            0xbe992b5f8bdb8c5c,
41392 +
            0xfc69cab42231bacf,
41393 +
            0x3b78e888d80fe17a,
41394 +
            0x7988096371e5d7e9,
41395 +
            0xf7aa4d1a85996083,
41396 +
            0xb55aacf12c735610,
41397 +
            0x724b8ecdd64d0da5,
41398 +
            0x30bb6f267fa73b36,
41399 +
            0x4ac29f2a07bfd00d,
41400 +
            0x08327ec1ae55e69e,
41401 +
            0xcf235cfd546bbd2b,
41402 +
            0x8dd3bd16fd818bb8,
41403 +
            0x03f1f96f09fd3cd2,
41404 +
            0x41011884a0170a41,
41405 +
            0x86103ab85a2951f4,
41406 +
            0xc4e0db53f3c36767,
41407 +
            0xd8a453a01b3a09b3,
41408 +
            0x9a54b24bb2d03f20,
41409 +
            0x5d45907748ee6495,
41410 +
            0x1fb5719ce1045206,
41411 +
            0x919735e51578e56c,
41412 +
            0xd367d40ebc92d3ff,
41413 +
            0x1476f63246ac884a,
41414 +
            0x568617d9ef46bed9,
41415 +
            0xe085162ab69d5e3c,
41416 +
            0xa275f7c11f7768af,
41417 +
            0x6564d5fde549331a,
41418 +
            0x279434164ca30589,
41419 +
            0xa9b6706fb8dfb2e3,
41420 +
            0xeb46918411358470,
41421 +
            0x2c57b3b8eb0bdfc5,
41422 +
            0x6ea7525342e1e956,
41423 +
            0x72e3daa0aa188782,
41424 +
            0x30133b4b03f2b111,
41425 +
            0xf7021977f9cceaa4,
41426 +
            0xb5f2f89c5026dc37,
41427 +
            0x3bd0bce5a45a6b5d,
41428 +
            0x79205d0e0db05dce,
41429 +
            0xbe317f32f78e067b,
41430 +
            0xfcc19ed95e6430e8,
41431 +
            0x86b86ed5267cdbd3,
41432 +
            0xc4488f3e8f96ed40,
41433 +
            0x0359ad0275a8b6f5,
41434 +
            0x41a94ce9dc428066,
41435 +
            0xcf8b0890283e370c,
41436 +
            0x8d7be97b81d4019f,
41437 +
            0x4a6acb477bea5a2a,
41438 +
            0x089a2aacd2006cb9,
41439 +
            0x14dea25f3af9026d,
41440 +
            0x562e43b4931334fe,
41441 +
            0x913f6188692d6f4b,
41442 +
            0xd3cf8063c0c759d8,
41443 +
            0x5dedc41a34bbeeb2,
41444 +
            0x1f1d25f19d51d821,
41445 +
            0xd80c07cd676f8394,
41446 +
            0x9afce626ce85b507,
41447 +
        ],
41448 +
        [
41449 +
            0x0000000000000000,
41450 +
            0xaf052a6b538edf09,
41451 +
            0x1cfab53d0ef78881,
41452 +
            0xb3ff9f565d795788,
41453 +
            0x39f56a7a1def1102,
41454 +
            0x96f040114e61ce0b,
41455 +
            0x250fdf4713189983,
41456 +
            0x8a0af52c4096468a,
41457 +
            0x73ead4f43bde2204,
41458 +
            0xdceffe9f6850fd0d,
41459 +
            0x6f1061c93529aa85,
41460 +
            0xc0154ba266a7758c,
41461 +
            0x4a1fbe8e26313306,
41462 +
            0xe51a94e575bfec0f,
41463 +
            0x56e50bb328c6bb87,
41464 +
            0xf9e021d87b48648e,
41465 +
            0xe7d5a9e877bc4408,
41466 +
            0x48d0838324329b01,
41467 +
            0xfb2f1cd5794bcc89,
41468 +
            0x542a36be2ac51380,
41469 +
            0xde20c3926a53550a,
41470 +
            0x7125e9f939dd8a03,
41471 +
            0xc2da76af64a4dd8b,
41472 +
            0x6ddf5cc4372a0282,
41473 +
            0x943f7d1c4c62660c,
41474 +
            0x3b3a57771fecb905,
41475 +
            0x88c5c8214295ee8d,
41476 +
            0x27c0e24a111b3184,
41477 +
            0xadca1766518d770e,
41478 +
            0x02cf3d0d0203a807,
41479 +
            0xb130a25b5f7aff8f,
41480 +
            0x1e3588300cf42086,
41481 +
            0x8d5bb23b4692be83,
41482 +
            0x225e9850151c618a,
41483 +
            0x91a1070648653602,
41484 +
            0x3ea42d6d1bebe90b,
41485 +
            0xb4aed8415b7daf81,
41486 +
            0x1babf22a08f37088,
41487 +
            0xa8546d7c558a2700,
41488 +
            0x075147170604f809,
41489 +
            0xfeb166cf7d4c9c87,
41490 +
            0x51b44ca42ec2438e,
41491 +
            0xe24bd3f273bb1406,
41492 +
            0x4d4ef9992035cb0f,
41493 +
            0xc7440cb560a38d85,
41494 +
            0x684126de332d528c,
41495 +
            0xdbbeb9886e540504,
41496 +
            0x74bb93e33ddada0d,
41497 +
            0x6a8e1bd3312efa8b,
41498 +
            0xc58b31b862a02582,
41499 +
            0x7674aeee3fd9720a,
41500 +
            0xd97184856c57ad03,
41501 +
            0x537b71a92cc1eb89,
41502 +
            0xfc7e5bc27f4f3480,
41503 +
            0x4f81c49422366308,
41504 +
            0xe084eeff71b8bc01,
41505 +
            0x1964cf270af0d88f,
41506 +
            0xb661e54c597e0786,
41507 +
            0x059e7a1a0407500e,
41508 +
            0xaa9b507157898f07,
41509 +
            0x2091a55d171fc98d,
41510 +
            0x8f948f3644911684,
41511 +
            0x3c6b106019e8410c,
41512 +
            0x936e3a0b4a669e05,
41513 +
            0x5847859d24cf4b95,
41514 +
            0xf742aff67741949c,
41515 +
            0x44bd30a02a38c314,
41516 +
            0xebb81acb79b61c1d,
41517 +
            0x61b2efe739205a97,
41518 +
            0xceb7c58c6aae859e,
41519 +
            0x7d485ada37d7d216,
41520 +
            0xd24d70b164590d1f,
41521 +
            0x2bad51691f116991,
41522 +
            0x84a87b024c9fb698,
41523 +
            0x3757e45411e6e110,
41524 +
            0x9852ce3f42683e19,
41525 +
            0x12583b1302fe7893,
41526 +
            0xbd5d11785170a79a,
41527 +
            0x0ea28e2e0c09f012,
41528 +
            0xa1a7a4455f872f1b,
41529 +
            0xbf922c7553730f9d,
41530 +
            0x1097061e00fdd094,
41531 +
            0xa36899485d84871c,
41532 +
            0x0c6db3230e0a5815,
41533 +
            0x8667460f4e9c1e9f,
41534 +
            0x29626c641d12c196,
41535 +
            0x9a9df332406b961e,
41536 +
            0x3598d95913e54917,
41537 +
            0xcc78f88168ad2d99,
41538 +
            0x637dd2ea3b23f290,
41539 +
            0xd0824dbc665aa518,
41540 +
            0x7f8767d735d47a11,
41541 +
            0xf58d92fb75423c9b,
41542 +
            0x5a88b89026cce392,
41543 +
            0xe97727c67bb5b41a,
41544 +
            0x46720dad283b6b13,
41545 +
            0xd51c37a6625df516,
41546 +
            0x7a191dcd31d32a1f,
41547 +
            0xc9e6829b6caa7d97,
41548 +
            0x66e3a8f03f24a29e,
41549 +
            0xece95ddc7fb2e414,
41550 +
            0x43ec77b72c3c3b1d,
41551 +
            0xf013e8e171456c95,
41552 +
            0x5f16c28a22cbb39c,
41553 +
            0xa6f6e3525983d712,
41554 +
            0x09f3c9390a0d081b,
41555 +
            0xba0c566f57745f93,
41556 +
            0x15097c0404fa809a,
41557 +
            0x9f038928446cc610,
41558 +
            0x3006a34317e21919,
41559 +
            0x83f93c154a9b4e91,
41560 +
            0x2cfc167e19159198,
41561 +
            0x32c99e4e15e1b11e,
41562 +
            0x9dccb425466f6e17,
41563 +
            0x2e332b731b16399f,
41564 +
            0x813601184898e696,
41565 +
            0x0b3cf434080ea01c,
41566 +
            0xa439de5f5b807f15,
41567 +
            0x17c6410906f9289d,
41568 +
            0xb8c36b625577f794,
41569 +
            0x41234aba2e3f931a,
41570 +
            0xee2660d17db14c13,
41571 +
            0x5dd9ff8720c81b9b,
41572 +
            0xf2dcd5ec7346c492,
41573 +
            0x78d620c033d08218,
41574 +
            0xd7d30aab605e5d11,
41575 +
            0x642c95fd3d270a99,
41576 +
            0xcb29bf966ea9d590,
41577 +
            0xb08f0b3a499e972a,
41578 +
            0x1f8a21511a104823,
41579 +
            0xac75be0747691fab,
41580 +
            0x0370946c14e7c0a2,
41581 +
            0x897a614054718628,
41582 +
            0x267f4b2b07ff5921,
41583 +
            0x9580d47d5a860ea9,
41584 +
            0x3a85fe160908d1a0,
41585 +
            0xc365dfce7240b52e,
41586 +
            0x6c60f5a521ce6a27,
41587 +
            0xdf9f6af37cb73daf,
41588 +
            0x709a40982f39e2a6,
41589 +
            0xfa90b5b46fafa42c,
41590 +
            0x55959fdf3c217b25,
41591 +
            0xe66a008961582cad,
41592 +
            0x496f2ae232d6f3a4,
41593 +
            0x575aa2d23e22d322,
41594 +
            0xf85f88b96dac0c2b,
41595 +
            0x4ba017ef30d55ba3,
41596 +
            0xe4a53d84635b84aa,
41597 +
            0x6eafc8a823cdc220,
41598 +
            0xc1aae2c370431d29,
41599 +
            0x72557d952d3a4aa1,
41600 +
            0xdd5057fe7eb495a8,
41601 +
            0x24b0762605fcf126,
41602 +
            0x8bb55c4d56722e2f,
41603 +
            0x384ac31b0b0b79a7,
41604 +
            0x974fe9705885a6ae,
41605 +
            0x1d451c5c1813e024,
41606 +
            0xb24036374b9d3f2d,
41607 +
            0x01bfa96116e468a5,
41608 +
            0xaeba830a456ab7ac,
41609 +
            0x3dd4b9010f0c29a9,
41610 +
            0x92d1936a5c82f6a0,
41611 +
            0x212e0c3c01fba128,
41612 +
            0x8e2b265752757e21,
41613 +
            0x0421d37b12e338ab,
41614 +
            0xab24f910416de7a2,
41615 +
            0x18db66461c14b02a,
41616 +
            0xb7de4c2d4f9a6f23,
41617 +
            0x4e3e6df534d20bad,
41618 +
            0xe13b479e675cd4a4,
41619 +
            0x52c4d8c83a25832c,
41620 +
            0xfdc1f2a369ab5c25,
41621 +
            0x77cb078f293d1aaf,
41622 +
            0xd8ce2de47ab3c5a6,
41623 +
            0x6b31b2b227ca922e,
41624 +
            0xc43498d974444d27,
41625 +
            0xda0110e978b06da1,
41626 +
            0x75043a822b3eb2a8,
41627 +
            0xc6fba5d47647e520,
41628 +
            0x69fe8fbf25c93a29,
41629 +
            0xe3f47a93655f7ca3,
41630 +
            0x4cf150f836d1a3aa,
41631 +
            0xff0ecfae6ba8f422,
41632 +
            0x500be5c538262b2b,
41633 +
            0xa9ebc41d436e4fa5,
41634 +
            0x06eeee7610e090ac,
41635 +
            0xb51171204d99c724,
41636 +
            0x1a145b4b1e17182d,
41637 +
            0x901eae675e815ea7,
41638 +
            0x3f1b840c0d0f81ae,
41639 +
            0x8ce41b5a5076d626,
41640 +
            0x23e1313103f8092f,
41641 +
            0xe8c88ea76d51dcbf,
41642 +
            0x47cda4cc3edf03b6,
41643 +
            0xf4323b9a63a6543e,
41644 +
            0x5b3711f130288b37,
41645 +
            0xd13de4dd70becdbd,
41646 +
            0x7e38ceb6233012b4,
41647 +
            0xcdc751e07e49453c,
41648 +
            0x62c27b8b2dc79a35,
41649 +
            0x9b225a53568ffebb,
41650 +
            0x34277038050121b2,
41651 +
            0x87d8ef6e5878763a,
41652 +
            0x28ddc5050bf6a933,
41653 +
            0xa2d730294b60efb9,
41654 +
            0x0dd21a4218ee30b0,
41655 +
            0xbe2d851445976738,
41656 +
            0x1128af7f1619b831,
41657 +
            0x0f1d274f1aed98b7,
41658 +
            0xa0180d24496347be,
41659 +
            0x13e79272141a1036,
41660 +
            0xbce2b8194794cf3f,
41661 +
            0x36e84d35070289b5,
41662 +
            0x99ed675e548c56bc,
41663 +
            0x2a12f80809f50134,
41664 +
            0x8517d2635a7bde3d,
41665 +
            0x7cf7f3bb2133bab3,
41666 +
            0xd3f2d9d072bd65ba,
41667 +
            0x600d46862fc43232,
41668 +
            0xcf086ced7c4aed3b,
41669 +
            0x450299c13cdcabb1,
41670 +
            0xea07b3aa6f5274b8,
41671 +
            0x59f82cfc322b2330,
41672 +
            0xf6fd069761a5fc39,
41673 +
            0x65933c9c2bc3623c,
41674 +
            0xca9616f7784dbd35,
41675 +
            0x796989a12534eabd,
41676 +
            0xd66ca3ca76ba35b4,
41677 +
            0x5c6656e6362c733e,
41678 +
            0xf3637c8d65a2ac37,
41679 +
            0x409ce3db38dbfbbf,
41680 +
            0xef99c9b06b5524b6,
41681 +
            0x1679e868101d4038,
41682 +
            0xb97cc20343939f31,
41683 +
            0x0a835d551eeac8b9,
41684 +
            0xa586773e4d6417b0,
41685 +
            0x2f8c82120df2513a,
41686 +
            0x8089a8795e7c8e33,
41687 +
            0x3376372f0305d9bb,
41688 +
            0x9c731d44508b06b2,
41689 +
            0x824695745c7f2634,
41690 +
            0x2d43bf1f0ff1f93d,
41691 +
            0x9ebc20495288aeb5,
41692 +
            0x31b90a22010671bc,
41693 +
            0xbbb3ff0e41903736,
41694 +
            0x14b6d565121ee83f,
41695 +
            0xa7494a334f67bfb7,
41696 +
            0x084c60581ce960be,
41697 +
            0xf1ac418067a10430,
41698 +
            0x5ea96beb342fdb39,
41699 +
            0xed56f4bd69568cb1,
41700 +
            0x4253ded63ad853b8,
41701 +
            0xc8592bfa7a4e1532,
41702 +
            0x675c019129c0ca3b,
41703 +
            0xd4a39ec774b99db3,
41704 +
            0x7ba6b4ac273742ba,
41705 +
        ],
41706 +
        [
41707 +
            0x0000000000000000,
41708 +
            0x23eef79f3ad718c7,
41709 +
            0x47ddef3e75ae318e,
41710 +
            0x643318a14f792949,
41711 +
            0x8fbbde7ceb5c631c,
41712 +
            0xac5529e3d18b7bdb,
41713 +
            0xc86631429ef25292,
41714 +
            0xeb88c6dda4254a55,
41715 +
            0x5d875d127f52f0ab,
41716 +
            0x7e69aa8d4585e86c,
41717 +
            0x1a5ab22c0afcc125,
41718 +
            0x39b445b3302bd9e2,
41719 +
            0xd23c836e940e93b7,
41720 +
            0xf1d274f1aed98b70,
41721 +
            0x95e16c50e1a0a239,
41722 +
            0xb60f9bcfdb77bafe,
41723 +
            0xbb0eba24fea5e156,
41724 +
            0x98e04dbbc472f991,
41725 +
            0xfcd3551a8b0bd0d8,
41726 +
            0xdf3da285b1dcc81f,
41727 +
            0x34b5645815f9824a,
41728 +
            0x175b93c72f2e9a8d,
41729 +
            0x73688b666057b3c4,
41730 +
            0x50867cf95a80ab03,
41731 +
            0xe689e73681f711fd,
41732 +
            0xc56710a9bb20093a,
41733 +
            0xa1540808f4592073,
41734 +
            0x82baff97ce8e38b4,
41735 +
            0x6932394a6aab72e1,
41736 +
            0x4adcced5507c6a26,
41737 +
            0x2eefd6741f05436f,
41738 +
            0x0d0121eb25d25ba8,
41739 +
            0x34ed95a254a1f43f,
41740 +
            0x1703623d6e76ecf8,
41741 +
            0x73307a9c210fc5b1,
41742 +
            0x50de8d031bd8dd76,
41743 +
            0xbb564bdebffd9723,
41744 +
            0x98b8bc41852a8fe4,
41745 +
            0xfc8ba4e0ca53a6ad,
41746 +
            0xdf65537ff084be6a,
41747 +
            0x696ac8b02bf30494,
41748 +
            0x4a843f2f11241c53,
41749 +
            0x2eb7278e5e5d351a,
41750 +
            0x0d59d011648a2ddd,
41751 +
            0xe6d116ccc0af6788,
41752 +
            0xc53fe153fa787f4f,
41753 +
            0xa10cf9f2b5015606,
41754 +
            0x82e20e6d8fd64ec1,
41755 +
            0x8fe32f86aa041569,
41756 +
            0xac0dd81990d30dae,
41757 +
            0xc83ec0b8dfaa24e7,
41758 +
            0xebd03727e57d3c20,
41759 +
            0x0058f1fa41587675,
41760 +
            0x23b606657b8f6eb2,
41761 +
            0x47851ec434f647fb,
41762 +
            0x646be95b0e215f3c,
41763 +
            0xd2647294d556e5c2,
41764 +
            0xf18a850bef81fd05,
41765 +
            0x95b99daaa0f8d44c,
41766 +
            0xb6576a359a2fcc8b,
41767 +
            0x5ddface83e0a86de,
41768 +
            0x7e315b7704dd9e19,
41769 +
            0x1a0243d64ba4b750,
41770 +
            0x39ecb4497173af97,
41771 +
            0x69db2b44a943e87e,
41772 +
            0x4a35dcdb9394f0b9,
41773 +
            0x2e06c47adcedd9f0,
41774 +
            0x0de833e5e63ac137,
41775 +
            0xe660f538421f8b62,
41776 +
            0xc58e02a778c893a5,
41777 +
            0xa1bd1a0637b1baec,
41778 +
            0x8253ed990d66a22b,
41779 +
            0x345c7656d61118d5,
41780 +
            0x17b281c9ecc60012,
41781 +
            0x73819968a3bf295b,
41782 +
            0x506f6ef79968319c,
41783 +
            0xbbe7a82a3d4d7bc9,
41784 +
            0x98095fb5079a630e,
41785 +
            0xfc3a471448e34a47,
41786 +
            0xdfd4b08b72345280,
41787 +
            0xd2d5916057e60928,
41788 +
            0xf13b66ff6d3111ef,
41789 +
            0x95087e5e224838a6,
41790 +
            0xb6e689c1189f2061,
41791 +
            0x5d6e4f1cbcba6a34,
41792 +
            0x7e80b883866d72f3,
41793 +
            0x1ab3a022c9145bba,
41794 +
            0x395d57bdf3c3437d,
41795 +
            0x8f52cc7228b4f983,
41796 +
            0xacbc3bed1263e144,
41797 +
            0xc88f234c5d1ac80d,
41798 +
            0xeb61d4d367cdd0ca,
41799 +
            0x00e9120ec3e89a9f,
41800 +
            0x2307e591f93f8258,
41801 +
            0x4734fd30b646ab11,
41802 +
            0x64da0aaf8c91b3d6,
41803 +
            0x5d36bee6fde21c41,
41804 +
            0x7ed84979c7350486,
41805 +
            0x1aeb51d8884c2dcf,
41806 +
            0x3905a647b29b3508,
41807 +
            0xd28d609a16be7f5d,
41808 +
            0xf16397052c69679a,
41809 +
            0x95508fa463104ed3,
41810 +
            0xb6be783b59c75614,
41811 +
            0x00b1e3f482b0ecea,
41812 +
            0x235f146bb867f42d,
41813 +
            0x476c0ccaf71edd64,
41814 +
            0x6482fb55cdc9c5a3,
41815 +
            0x8f0a3d8869ec8ff6,
41816 +
            0xace4ca17533b9731,
41817 +
            0xc8d7d2b61c42be78,
41818 +
            0xeb3925292695a6bf,
41819 +
            0xe63804c20347fd17,
41820 +
            0xc5d6f35d3990e5d0,
41821 +
            0xa1e5ebfc76e9cc99,
41822 +
            0x820b1c634c3ed45e,
41823 +
            0x6983dabee81b9e0b,
41824 +
            0x4a6d2d21d2cc86cc,
41825 +
            0x2e5e35809db5af85,
41826 +
            0x0db0c21fa762b742,
41827 +
            0xbbbf59d07c150dbc,
41828 +
            0x9851ae4f46c2157b,
41829 +
            0xfc62b6ee09bb3c32,
41830 +
            0xdf8c4171336c24f5,
41831 +
            0x340487ac97496ea0,
41832 +
            0x17ea7033ad9e7667,
41833 +
            0x73d96892e2e75f2e,
41834 +
            0x50379f0dd83047e9,
41835 +
            0xd3b656895287d0fc,
41836 +
            0xf058a1166850c83b,
41837 +
            0x946bb9b72729e172,
41838 +
            0xb7854e281dfef9b5,
41839 +
            0x5c0d88f5b9dbb3e0,
41840 +
            0x7fe37f6a830cab27,
41841 +
            0x1bd067cbcc75826e,
41842 +
            0x383e9054f6a29aa9,
41843 +
            0x8e310b9b2dd52057,
41844 +
            0xaddffc0417023890,
41845 +
            0xc9ece4a5587b11d9,
41846 +
            0xea02133a62ac091e,
41847 +
            0x018ad5e7c689434b,
41848 +
            0x22642278fc5e5b8c,
41849 +
            0x46573ad9b32772c5,
41850 +
            0x65b9cd4689f06a02,
41851 +
            0x68b8ecadac2231aa,
41852 +
            0x4b561b3296f5296d,
41853 +
            0x2f650393d98c0024,
41854 +
            0x0c8bf40ce35b18e3,
41855 +
            0xe70332d1477e52b6,
41856 +
            0xc4edc54e7da94a71,
41857 +
            0xa0deddef32d06338,
41858 +
            0x83302a7008077bff,
41859 +
            0x353fb1bfd370c101,
41860 +
            0x16d14620e9a7d9c6,
41861 +
            0x72e25e81a6def08f,
41862 +
            0x510ca91e9c09e848,
41863 +
            0xba846fc3382ca21d,
41864 +
            0x996a985c02fbbada,
41865 +
            0xfd5980fd4d829393,
41866 +
            0xdeb7776277558b54,
41867 +
            0xe75bc32b062624c3,
41868 +
            0xc4b534b43cf13c04,
41869 +
            0xa0862c157388154d,
41870 +
            0x8368db8a495f0d8a,
41871 +
            0x68e01d57ed7a47df,
41872 +
            0x4b0eeac8d7ad5f18,
41873 +
            0x2f3df26998d47651,
41874 +
            0x0cd305f6a2036e96,
41875 +
            0xbadc9e397974d468,
41876 +
            0x993269a643a3ccaf,
41877 +
            0xfd0171070cdae5e6,
41878 +
            0xdeef8698360dfd21,
41879 +
            0x356740459228b774,
41880 +
            0x1689b7daa8ffafb3,
41881 +
            0x72baaf7be78686fa,
41882 +
            0x515458e4dd519e3d,
41883 +
            0x5c55790ff883c595,
41884 +
            0x7fbb8e90c254dd52,
41885 +
            0x1b8896318d2df41b,
41886 +
            0x386661aeb7faecdc,
41887 +
            0xd3eea77313dfa689,
41888 +
            0xf00050ec2908be4e,
41889 +
            0x9433484d66719707,
41890 +
            0xb7ddbfd25ca68fc0,
41891 +
            0x01d2241d87d1353e,
41892 +
            0x223cd382bd062df9,
41893 +
            0x460fcb23f27f04b0,
41894 +
            0x65e13cbcc8a81c77,
41895 +
            0x8e69fa616c8d5622,
41896 +
            0xad870dfe565a4ee5,
41897 +
            0xc9b4155f192367ac,
41898 +
            0xea5ae2c023f47f6b,
41899 +
            0xba6d7dcdfbc43882,
41900 +
            0x99838a52c1132045,
41901 +
            0xfdb092f38e6a090c,
41902 +
            0xde5e656cb4bd11cb,
41903 +
            0x35d6a3b110985b9e,
41904 +
            0x1638542e2a4f4359,
41905 +
            0x720b4c8f65366a10,
41906 +
            0x51e5bb105fe172d7,
41907 +
            0xe7ea20df8496c829,
41908 +
            0xc404d740be41d0ee,
41909 +
            0xa037cfe1f138f9a7,
41910 +
            0x83d9387ecbefe160,
41911 +
            0x6851fea36fcaab35,
41912 +
            0x4bbf093c551db3f2,
41913 +
            0x2f8c119d1a649abb,
41914 +
            0x0c62e60220b3827c,
41915 +
            0x0163c7e90561d9d4,
41916 +
            0x228d30763fb6c113,
41917 +
            0x46be28d770cfe85a,
41918 +
            0x6550df484a18f09d,
41919 +
            0x8ed81995ee3dbac8,
41920 +
            0xad36ee0ad4eaa20f,
41921 +
            0xc905f6ab9b938b46,
41922 +
            0xeaeb0134a1449381,
41923 +
            0x5ce49afb7a33297f,
41924 +
            0x7f0a6d6440e431b8,
41925 +
            0x1b3975c50f9d18f1,
41926 +
            0x38d7825a354a0036,
41927 +
            0xd35f4487916f4a63,
41928 +
            0xf0b1b318abb852a4,
41929 +
            0x9482abb9e4c17bed,
41930 +
            0xb76c5c26de16632a,
41931 +
            0x8e80e86faf65ccbd,
41932 +
            0xad6e1ff095b2d47a,
41933 +
            0xc95d0751dacbfd33,
41934 +
            0xeab3f0cee01ce5f4,
41935 +
            0x013b36134439afa1,
41936 +
            0x22d5c18c7eeeb766,
41937 +
            0x46e6d92d31979e2f,
41938 +
            0x65082eb20b4086e8,
41939 +
            0xd307b57dd0373c16,
41940 +
            0xf0e942e2eae024d1,
41941 +
            0x94da5a43a5990d98,
41942 +
            0xb734addc9f4e155f,
41943 +
            0x5cbc6b013b6b5f0a,
41944 +
            0x7f529c9e01bc47cd,
41945 +
            0x1b61843f4ec56e84,
41946 +
            0x388f73a074127643,
41947 +
            0x358e524b51c02deb,
41948 +
            0x1660a5d46b17352c,
41949 +
            0x7253bd75246e1c65,
41950 +
            0x51bd4aea1eb904a2,
41951 +
            0xba358c37ba9c4ef7,
41952 +
            0x99db7ba8804b5630,
41953 +
            0xfde86309cf327f79,
41954 +
            0xde069496f5e567be,
41955 +
            0x68090f592e92dd40,
41956 +
            0x4be7f8c61445c587,
41957 +
            0x2fd4e0675b3cecce,
41958 +
            0x0c3a17f861ebf409,
41959 +
            0xe7b2d125c5cebe5c,
41960 +
            0xc45c26baff19a69b,
41961 +
            0xa06f3e1bb0608fd2,
41962 +
            0x8381c9848ab79715,
41963 +
        ],
41964 +
        [
41965 +
            0x0000000000000000,
41966 +
            0xe59c4cf90ce5976b,
41967 +
            0x89c87819b0211845,
41968 +
            0x6c5434e0bcc48f2e,
41969 +
            0x516011d8c9a80619,
41970 +
            0xb4fc5d21c54d9172,
41971 +
            0xd8a869c179891e5c,
41972 +
            0x3d342538756c8937,
41973 +
            0xa2c023b193500c32,
41974 +
            0x475c6f489fb59b59,
41975 +
            0x2b085ba823711477,
41976 +
            0xce9417512f94831c,
41977 +
            0xf3a032695af80a2b,
41978 +
            0x163c7e90561d9d40,
41979 +
            0x7a684a70ead9126e,
41980 +
            0x9ff40689e63c8505,
41981 +
            0x0770a6888f4a2ef7,
41982 +
            0xe2ecea7183afb99c,
41983 +
            0x8eb8de913f6b36b2,
41984 +
            0x6b249268338ea1d9,
41985 +
            0x5610b75046e228ee,
41986 +
            0xb38cfba94a07bf85,
41987 +
            0xdfd8cf49f6c330ab,
41988 +
            0x3a4483b0fa26a7c0,
41989 +
            0xa5b085391c1a22c5,
41990 +
            0x402cc9c010ffb5ae,
41991 +
            0x2c78fd20ac3b3a80,
41992 +
            0xc9e4b1d9a0deadeb,
41993 +
            0xf4d094e1d5b224dc,
41994 +
            0x114cd818d957b3b7,
41995 +
            0x7d18ecf865933c99,
41996 +
            0x9884a0016976abf2,
41997 +
            0x0ee14d111e945dee,
41998 +
            0xeb7d01e81271ca85,
41999 +
            0x87293508aeb545ab,
42000 +
            0x62b579f1a250d2c0,
42001 +
            0x5f815cc9d73c5bf7,
42002 +
            0xba1d1030dbd9cc9c,
42003 +
            0xd64924d0671d43b2,
42004 +
            0x33d568296bf8d4d9,
42005 +
            0xac216ea08dc451dc,
42006 +
            0x49bd22598121c6b7,
42007 +
            0x25e916b93de54999,
42008 +
            0xc0755a403100def2,
42009 +
            0xfd417f78446c57c5,
42010 +
            0x18dd33814889c0ae,
42011 +
            0x74890761f44d4f80,
42012 +
            0x91154b98f8a8d8eb,
42013 +
            0x0991eb9991de7319,
42014 +
            0xec0da7609d3be472,
42015 +
            0x8059938021ff6b5c,
42016 +
            0x65c5df792d1afc37,
42017 +
            0x58f1fa4158767500,
42018 +
            0xbd6db6b85493e26b,
42019 +
            0xd1398258e8576d45,
42020 +
            0x34a5cea1e4b2fa2e,
42021 +
            0xab51c828028e7f2b,
42022 +
            0x4ecd84d10e6be840,
42023 +
            0x2299b031b2af676e,
42024 +
            0xc705fcc8be4af005,
42025 +
            0xfa31d9f0cb267932,
42026 +
            0x1fad9509c7c3ee59,
42027 +
            0x73f9a1e97b076177,
42028 +
            0x9665ed1077e2f61c,
42029 +
            0x1dc29a223d28bbdc,
42030 +
            0xf85ed6db31cd2cb7,
42031 +
            0x940ae23b8d09a399,
42032 +
            0x7196aec281ec34f2,
42033 +
            0x4ca28bfaf480bdc5,
42034 +
            0xa93ec703f8652aae,
42035 +
            0xc56af3e344a1a580,
42036 +
            0x20f6bf1a484432eb,
42037 +
            0xbf02b993ae78b7ee,
42038 +
            0x5a9ef56aa29d2085,
42039 +
            0x36cac18a1e59afab,
42040 +
            0xd3568d7312bc38c0,
42041 +
            0xee62a84b67d0b1f7,
42042 +
            0x0bfee4b26b35269c,
42043 +
            0x67aad052d7f1a9b2,
42044 +
            0x82369cabdb143ed9,
42045 +
            0x1ab23caab262952b,
42046 +
            0xff2e7053be870240,
42047 +
            0x937a44b302438d6e,
42048 +
            0x76e6084a0ea61a05,
42049 +
            0x4bd22d727bca9332,
42050 +
            0xae4e618b772f0459,
42051 +
            0xc21a556bcbeb8b77,
42052 +
            0x27861992c70e1c1c,
42053 +
            0xb8721f1b21329919,
42054 +
            0x5dee53e22dd70e72,
42055 +
            0x31ba67029113815c,
42056 +
            0xd4262bfb9df61637,
42057 +
            0xe9120ec3e89a9f00,
42058 +
            0x0c8e423ae47f086b,
42059 +
            0x60da76da58bb8745,
42060 +
            0x85463a23545e102e,
42061 +
            0x1323d73323bce632,
42062 +
            0xf6bf9bca2f597159,
42063 +
            0x9aebaf2a939dfe77,
42064 +
            0x7f77e3d39f78691c,
42065 +
            0x4243c6ebea14e02b,
42066 +
            0xa7df8a12e6f17740,
42067 +
            0xcb8bbef25a35f86e,
42068 +
            0x2e17f20b56d06f05,
42069 +
            0xb1e3f482b0ecea00,
42070 +
            0x547fb87bbc097d6b,
42071 +
            0x382b8c9b00cdf245,
42072 +
            0xddb7c0620c28652e,
42073 +
            0xe083e55a7944ec19,
42074 +
            0x051fa9a375a17b72,
42075 +
            0x694b9d43c965f45c,
42076 +
            0x8cd7d1bac5806337,
42077 +
            0x145371bbacf6c8c5,
42078 +
            0xf1cf3d42a0135fae,
42079 +
            0x9d9b09a21cd7d080,
42080 +
            0x7807455b103247eb,
42081 +
            0x45336063655ecedc,
42082 +
            0xa0af2c9a69bb59b7,
42083 +
            0xccfb187ad57fd699,
42084 +
            0x29675483d99a41f2,
42085 +
            0xb693520a3fa6c4f7,
42086 +
            0x530f1ef33343539c,
42087 +
            0x3f5b2a138f87dcb2,
42088 +
            0xdac766ea83624bd9,
42089 +
            0xe7f343d2f60ec2ee,
42090 +
            0x026f0f2bfaeb5585,
42091 +
            0x6e3b3bcb462fdaab,
42092 +
            0x8ba777324aca4dc0,
42093 +
            0x3b8534447a5177b8,
42094 +
            0xde1978bd76b4e0d3,
42095 +
            0xb24d4c5dca706ffd,
42096 +
            0x57d100a4c695f896,
42097 +
            0x6ae5259cb3f971a1,
42098 +
            0x8f796965bf1ce6ca,
42099 +
            0xe32d5d8503d869e4,
42100 +
            0x06b1117c0f3dfe8f,
42101 +
            0x994517f5e9017b8a,
42102 +
            0x7cd95b0ce5e4ece1,
42103 +
            0x108d6fec592063cf,
42104 +
            0xf511231555c5f4a4,
42105 +
            0xc825062d20a97d93,
42106 +
            0x2db94ad42c4ceaf8,
42107 +
            0x41ed7e34908865d6,
42108 +
            0xa47132cd9c6df2bd,
42109 +
            0x3cf592ccf51b594f,
42110 +
            0xd969de35f9fece24,
42111 +
            0xb53dead5453a410a,
42112 +
            0x50a1a62c49dfd661,
42113 +
            0x6d9583143cb35f56,
42114 +
            0x8809cfed3056c83d,
42115 +
            0xe45dfb0d8c924713,
42116 +
            0x01c1b7f48077d078,
42117 +
            0x9e35b17d664b557d,
42118 +
            0x7ba9fd846aaec216,
42119 +
            0x17fdc964d66a4d38,
42120 +
            0xf261859dda8fda53,
42121 +
            0xcf55a0a5afe35364,
42122 +
            0x2ac9ec5ca306c40f,
42123 +
            0x469dd8bc1fc24b21,
42124 +
            0xa30194451327dc4a,
42125 +
            0x3564795564c52a56,
42126 +
            0xd0f835ac6820bd3d,
42127 +
            0xbcac014cd4e43213,
42128 +
            0x59304db5d801a578,
42129 +
            0x6404688dad6d2c4f,
42130 +
            0x81982474a188bb24,
42131 +
            0xedcc10941d4c340a,
42132 +
            0x08505c6d11a9a361,
42133 +
            0x97a45ae4f7952664,
42134 +
            0x7238161dfb70b10f,
42135 +
            0x1e6c22fd47b43e21,
42136 +
            0xfbf06e044b51a94a,
42137 +
            0xc6c44b3c3e3d207d,
42138 +
            0x235807c532d8b716,
42139 +
            0x4f0c33258e1c3838,
42140 +
            0xaa907fdc82f9af53,
42141 +
            0x3214dfddeb8f04a1,
42142 +
            0xd7889324e76a93ca,
42143 +
            0xbbdca7c45bae1ce4,
42144 +
            0x5e40eb3d574b8b8f,
42145 +
            0x6374ce05222702b8,
42146 +
            0x86e882fc2ec295d3,
42147 +
            0xeabcb61c92061afd,
42148 +
            0x0f20fae59ee38d96,
42149 +
            0x90d4fc6c78df0893,
42150 +
            0x7548b095743a9ff8,
42151 +
            0x191c8475c8fe10d6,
42152 +
            0xfc80c88cc41b87bd,
42153 +
            0xc1b4edb4b1770e8a,
42154 +
            0x2428a14dbd9299e1,
42155 +
            0x487c95ad015616cf,
42156 +
            0xade0d9540db381a4,
42157 +
            0x2647ae664779cc64,
42158 +
            0xc3dbe29f4b9c5b0f,
42159 +
            0xaf8fd67ff758d421,
42160 +
            0x4a139a86fbbd434a,
42161 +
            0x7727bfbe8ed1ca7d,
42162 +
            0x92bbf34782345d16,
42163 +
            0xfeefc7a73ef0d238,
42164 +
            0x1b738b5e32154553,
42165 +
            0x84878dd7d429c056,
42166 +
            0x611bc12ed8cc573d,
42167 +
            0x0d4ff5ce6408d813,
42168 +
            0xe8d3b93768ed4f78,
42169 +
            0xd5e79c0f1d81c64f,
42170 +
            0x307bd0f611645124,
42171 +
            0x5c2fe416ada0de0a,
42172 +
            0xb9b3a8efa1454961,
42173 +
            0x213708eec833e293,
42174 +
            0xc4ab4417c4d675f8,
42175 +
            0xa8ff70f77812fad6,
42176 +
            0x4d633c0e74f76dbd,
42177 +
            0x70571936019be48a,
42178 +
            0x95cb55cf0d7e73e1,
42179 +
            0xf99f612fb1bafccf,
42180 +
            0x1c032dd6bd5f6ba4,
42181 +
            0x83f72b5f5b63eea1,
42182 +
            0x666b67a6578679ca,
42183 +
            0x0a3f5346eb42f6e4,
42184 +
            0xefa31fbfe7a7618f,
42185 +
            0xd2973a8792cbe8b8,
42186 +
            0x370b767e9e2e7fd3,
42187 +
            0x5b5f429e22eaf0fd,
42188 +
            0xbec30e672e0f6796,
42189 +
            0x28a6e37759ed918a,
42190 +
            0xcd3aaf8e550806e1,
42191 +
            0xa16e9b6ee9cc89cf,
42192 +
            0x44f2d797e5291ea4,
42193 +
            0x79c6f2af90459793,
42194 +
            0x9c5abe569ca000f8,
42195 +
            0xf00e8ab620648fd6,
42196 +
            0x1592c64f2c8118bd,
42197 +
            0x8a66c0c6cabd9db8,
42198 +
            0x6ffa8c3fc6580ad3,
42199 +
            0x03aeb8df7a9c85fd,
42200 +
            0xe632f42676791296,
42201 +
            0xdb06d11e03159ba1,
42202 +
            0x3e9a9de70ff00cca,
42203 +
            0x52cea907b33483e4,
42204 +
            0xb752e5febfd1148f,
42205 +
            0x2fd645ffd6a7bf7d,
42206 +
            0xca4a0906da422816,
42207 +
            0xa61e3de66686a738,
42208 +
            0x4382711f6a633053,
42209 +
            0x7eb654271f0fb964,
42210 +
            0x9b2a18de13ea2e0f,
42211 +
            0xf77e2c3eaf2ea121,
42212 +
            0x12e260c7a3cb364a,
42213 +
            0x8d16664e45f7b34f,
42214 +
            0x688a2ab749122424,
42215 +
            0x04de1e57f5d6ab0a,
42216 +
            0xe14252aef9333c61,
42217 +
            0xdc7677968c5fb556,
42218 +
            0x39ea3b6f80ba223d,
42219 +
            0x55be0f8f3c7ead13,
42220 +
            0xb0224376309b3a78,
42221 +
        ],
42222 +
        [
42223 +
            0x0000000000000000,
42224 +
            0x770a6888f4a2ef70,
42225 +
            0xee14d111e945dee0,
42226 +
            0x991eb9991de73190,
42227 +
            0x9ed943c87b618b53,
42228 +
            0xe9d32b408fc36423,
42229 +
            0x70cd92d9922455b3,
42230 +
            0x07c7fa516686bac3,
42231 +
            0x7f42667b5f292035,
42232 +
            0x08480ef3ab8bcf45,
42233 +
            0x9156b76ab66cfed5,
42234 +
            0xe65cdfe242ce11a5,
42235 +
            0xe19b25b32448ab66,
42236 +
            0x96914d3bd0ea4416,
42237 +
            0x0f8ff4a2cd0d7586,
42238 +
            0x78859c2a39af9af6,
42239 +
            0xfe84ccf6be52406a,
42240 +
            0x898ea47e4af0af1a,
42241 +
            0x10901de757179e8a,
42242 +
            0x679a756fa3b571fa,
42243 +
            0x605d8f3ec533cb39,
42244 +
            0x1757e7b631912449,
42245 +
            0x8e495e2f2c7615d9,
42246 +
            0xf94336a7d8d4faa9,
42247 +
            0x81c6aa8de17b605f,
42248 +
            0xf6ccc20515d98f2f,
42249 +
            0x6fd27b9c083ebebf,
42250 +
            0x18d81314fc9c51cf,
42251 +
            0x1f1fe9459a1aeb0c,
42252 +
            0x681581cd6eb8047c,
42253 +
            0xf10b3854735f35ec,
42254 +
            0x860150dc87fdda9c,
42255 +
            0xbff97806d54eb647,
42256 +
            0xc8f3108e21ec5937,
42257 +
            0x51eda9173c0b68a7,
42258 +
            0x26e7c19fc8a987d7,
42259 +
            0x21203bceae2f3d14,
42260 +
            0x562a53465a8dd264,
42261 +
            0xcf34eadf476ae3f4,
42262 +
            0xb83e8257b3c80c84,
42263 +
            0xc0bb1e7d8a679672,
42264 +
            0xb7b176f57ec57902,
42265 +
            0x2eafcf6c63224892,
42266 +
            0x59a5a7e49780a7e2,
42267 +
            0x5e625db5f1061d21,
42268 +
            0x2968353d05a4f251,
42269 +
            0xb0768ca41843c3c1,
42270 +
            0xc77ce42cece12cb1,
42271 +
            0x417db4f06b1cf62d,
42272 +
            0x3677dc789fbe195d,
42273 +
            0xaf6965e1825928cd,
42274 +
            0xd8630d6976fbc7bd,
42275 +
            0xdfa4f738107d7d7e,
42276 +
            0xa8ae9fb0e4df920e,
42277 +
            0x31b02629f938a39e,
42278 +
            0x46ba4ea10d9a4cee,
42279 +
            0x3e3fd28b3435d618,
42280 +
            0x4935ba03c0973968,
42281 +
            0xd02b039add7008f8,
42282 +
            0xa7216b1229d2e788,
42283 +
            0xa0e691434f545d4b,
42284 +
            0xd7ecf9cbbbf6b23b,
42285 +
            0x4ef24052a61183ab,
42286 +
            0x39f828da52b36cdb,
42287 +
            0x3d0211e603775a1d,
42288 +
            0x4a08796ef7d5b56d,
42289 +
            0xd316c0f7ea3284fd,
42290 +
            0xa41ca87f1e906b8d,
42291 +
            0xa3db522e7816d14e,
42292 +
            0xd4d13aa68cb43e3e,
42293 +
            0x4dcf833f91530fae,
42294 +
            0x3ac5ebb765f1e0de,
42295 +
            0x4240779d5c5e7a28,
42296 +
            0x354a1f15a8fc9558,
42297 +
            0xac54a68cb51ba4c8,
42298 +
            0xdb5ece0441b94bb8,
42299 +
            0xdc993455273ff17b,
42300 +
            0xab935cddd39d1e0b,
42301 +
            0x328de544ce7a2f9b,
42302 +
            0x45878dcc3ad8c0eb,
42303 +
            0xc386dd10bd251a77,
42304 +
            0xb48cb5984987f507,
42305 +
            0x2d920c015460c497,
42306 +
            0x5a986489a0c22be7,
42307 +
            0x5d5f9ed8c6449124,
42308 +
            0x2a55f65032e67e54,
42309 +
            0xb34b4fc92f014fc4,
42310 +
            0xc4412741dba3a0b4,
42311 +
            0xbcc4bb6be20c3a42,
42312 +
            0xcbced3e316aed532,
42313 +
            0x52d06a7a0b49e4a2,
42314 +
            0x25da02f2ffeb0bd2,
42315 +
            0x221df8a3996db111,
42316 +
            0x5517902b6dcf5e61,
42317 +
            0xcc0929b270286ff1,
42318 +
            0xbb03413a848a8081,
42319 +
            0x82fb69e0d639ec5a,
42320 +
            0xf5f10168229b032a,
42321 +
            0x6cefb8f13f7c32ba,
42322 +
            0x1be5d079cbdeddca,
42323 +
            0x1c222a28ad586709,
42324 +
            0x6b2842a059fa8879,
42325 +
            0xf236fb39441db9e9,
42326 +
            0x853c93b1b0bf5699,
42327 +
            0xfdb90f9b8910cc6f,
42328 +
            0x8ab367137db2231f,
42329 +
            0x13adde8a6055128f,
42330 +
            0x64a7b60294f7fdff,
42331 +
            0x63604c53f271473c,
42332 +
            0x146a24db06d3a84c,
42333 +
            0x8d749d421b3499dc,
42334 +
            0xfa7ef5caef9676ac,
42335 +
            0x7c7fa516686bac30,
42336 +
            0x0b75cd9e9cc94340,
42337 +
            0x926b7407812e72d0,
42338 +
            0xe5611c8f758c9da0,
42339 +
            0xe2a6e6de130a2763,
42340 +
            0x95ac8e56e7a8c813,
42341 +
            0x0cb237cffa4ff983,
42342 +
            0x7bb85f470eed16f3,
42343 +
            0x033dc36d37428c05,
42344 +
            0x7437abe5c3e06375,
42345 +
            0xed29127cde0752e5,
42346 +
            0x9a237af42aa5bd95,
42347 +
            0x9de480a54c230756,
42348 +
            0xeaeee82db881e826,
42349 +
            0x73f051b4a566d9b6,
42350 +
            0x04fa393c51c436c6,
42351 +
            0x7a0423cc06eeb43a,
42352 +
            0x0d0e4b44f24c5b4a,
42353 +
            0x9410f2ddefab6ada,
42354 +
            0xe31a9a551b0985aa,
42355 +
            0xe4dd60047d8f3f69,
42356 +
            0x93d7088c892dd019,
42357 +
            0x0ac9b11594cae189,
42358 +
            0x7dc3d99d60680ef9,
42359 +
            0x054645b759c7940f,
42360 +
            0x724c2d3fad657b7f,
42361 +
            0xeb5294a6b0824aef,
42362 +
            0x9c58fc2e4420a59f,
42363 +
            0x9b9f067f22a61f5c,
42364 +
            0xec956ef7d604f02c,
42365 +
            0x758bd76ecbe3c1bc,
42366 +
            0x0281bfe63f412ecc,
42367 +
            0x8480ef3ab8bcf450,
42368 +
            0xf38a87b24c1e1b20,
42369 +
            0x6a943e2b51f92ab0,
42370 +
            0x1d9e56a3a55bc5c0,
42371 +
            0x1a59acf2c3dd7f03,
42372 +
            0x6d53c47a377f9073,
42373 +
            0xf44d7de32a98a1e3,
42374 +
            0x8347156bde3a4e93,
42375 +
            0xfbc28941e795d465,
42376 +
            0x8cc8e1c913373b15,
42377 +
            0x15d658500ed00a85,
42378 +
            0x62dc30d8fa72e5f5,
42379 +
            0x651bca899cf45f36,
42380 +
            0x1211a2016856b046,
42381 +
            0x8b0f1b9875b181d6,
42382 +
            0xfc05731081136ea6,
42383 +
            0xc5fd5bcad3a0027d,
42384 +
            0xb2f733422702ed0d,
42385 +
            0x2be98adb3ae5dc9d,
42386 +
            0x5ce3e253ce4733ed,
42387 +
            0x5b241802a8c1892e,
42388 +
            0x2c2e708a5c63665e,
42389 +
            0xb530c913418457ce,
42390 +
            0xc23aa19bb526b8be,
42391 +
            0xbabf3db18c892248,
42392 +
            0xcdb55539782bcd38,
42393 +
            0x54abeca065ccfca8,
42394 +
            0x23a18428916e13d8,
42395 +
            0x24667e79f7e8a91b,
42396 +
            0x536c16f1034a466b,
42397 +
            0xca72af681ead77fb,
42398 +
            0xbd78c7e0ea0f988b,
42399 +
            0x3b79973c6df24217,
42400 +
            0x4c73ffb49950ad67,
42401 +
            0xd56d462d84b79cf7,
42402 +
            0xa2672ea570157387,
42403 +
            0xa5a0d4f41693c944,
42404 +
            0xd2aabc7ce2312634,
42405 +
            0x4bb405e5ffd617a4,
42406 +
            0x3cbe6d6d0b74f8d4,
42407 +
            0x443bf14732db6222,
42408 +
            0x333199cfc6798d52,
42409 +
            0xaa2f2056db9ebcc2,
42410 +
            0xdd2548de2f3c53b2,
42411 +
            0xdae2b28f49bae971,
42412 +
            0xade8da07bd180601,
42413 +
            0x34f6639ea0ff3791,
42414 +
            0x43fc0b16545dd8e1,
42415 +
            0x4706322a0599ee27,
42416 +
            0x300c5aa2f13b0157,
42417 +
            0xa912e33becdc30c7,
42418 +
            0xde188bb3187edfb7,
42419 +
            0xd9df71e27ef86574,
42420 +
            0xaed5196a8a5a8a04,
42421 +
            0x37cba0f397bdbb94,
42422 +
            0x40c1c87b631f54e4,
42423 +
            0x384454515ab0ce12,
42424 +
            0x4f4e3cd9ae122162,
42425 +
            0xd6508540b3f510f2,
42426 +
            0xa15aedc84757ff82,
42427 +
            0xa69d179921d14541,
42428 +
            0xd1977f11d573aa31,
42429 +
            0x4889c688c8949ba1,
42430 +
            0x3f83ae003c3674d1,
42431 +
            0xb982fedcbbcbae4d,
42432 +
            0xce8896544f69413d,
42433 +
            0x57962fcd528e70ad,
42434 +
            0x209c4745a62c9fdd,
42435 +
            0x275bbd14c0aa251e,
42436 +
            0x5051d59c3408ca6e,
42437 +
            0xc94f6c0529effbfe,
42438 +
            0xbe45048ddd4d148e,
42439 +
            0xc6c098a7e4e28e78,
42440 +
            0xb1caf02f10406108,
42441 +
            0x28d449b60da75098,
42442 +
            0x5fde213ef905bfe8,
42443 +
            0x5819db6f9f83052b,
42444 +
            0x2f13b3e76b21ea5b,
42445 +
            0xb60d0a7e76c6dbcb,
42446 +
            0xc10762f6826434bb,
42447 +
            0xf8ff4a2cd0d75860,
42448 +
            0x8ff522a42475b710,
42449 +
            0x16eb9b3d39928680,
42450 +
            0x61e1f3b5cd3069f0,
42451 +
            0x662609e4abb6d333,
42452 +
            0x112c616c5f143c43,
42453 +
            0x8832d8f542f30dd3,
42454 +
            0xff38b07db651e2a3,
42455 +
            0x87bd2c578ffe7855,
42456 +
            0xf0b744df7b5c9725,
42457 +
            0x69a9fd4666bba6b5,
42458 +
            0x1ea395ce921949c5,
42459 +
            0x19646f9ff49ff306,
42460 +
            0x6e6e0717003d1c76,
42461 +
            0xf770be8e1dda2de6,
42462 +
            0x807ad606e978c296,
42463 +
            0x067b86da6e85180a,
42464 +
            0x7171ee529a27f77a,
42465 +
            0xe86f57cb87c0c6ea,
42466 +
            0x9f653f437362299a,
42467 +
            0x98a2c51215e49359,
42468 +
            0xefa8ad9ae1467c29,
42469 +
            0x76b61403fca14db9,
42470 +
            0x01bc7c8b0803a2c9,
42471 +
            0x7939e0a131ac383f,
42472 +
            0x0e338829c50ed74f,
42473 +
            0x972d31b0d8e9e6df,
42474 +
            0xe02759382c4b09af,
42475 +
            0xe7e0a3694acdb36c,
42476 +
            0x90eacbe1be6f5c1c,
42477 +
            0x09f47278a3886d8c,
42478 +
            0x7efe1af0572a82fc,
42479 +
        ],
42480 +
        [
42481 +
            0x0000000000000000,
42482 +
            0xf40847980ddd6874,
42483 +
            0xaae06edbb250e67b,
42484 +
            0x5ee82943bf8d8e0f,
42485 +
            0x17303c5ccd4bfa65,
42486 +
            0xe3387bc4c0969211,
42487 +
            0xbdd052877f1b1c1e,
42488 +
            0x49d8151f72c6746a,
42489 +
            0x2e6078b99a97f4ca,
42490 +
            0xda683f21974a9cbe,
42491 +
            0x8480166228c712b1,
42492 +
            0x708851fa251a7ac5,
42493 +
            0x395044e557dc0eaf,
42494 +
            0xcd58037d5a0166db,
42495 +
            0x93b02a3ee58ce8d4,
42496 +
            0x67b86da6e85180a0,
42497 +
            0x5cc0f173352fe994,
42498 +
            0xa8c8b6eb38f281e0,
42499 +
            0xf6209fa8877f0fef,
42500 +
            0x0228d8308aa2679b,
42501 +
            0x4bf0cd2ff86413f1,
42502 +
            0xbff88ab7f5b97b85,
42503 +
            0xe110a3f44a34f58a,
42504 +
            0x1518e46c47e99dfe,
42505 +
            0x72a089caafb81d5e,
42506 +
            0x86a8ce52a265752a,
42507 +
            0xd840e7111de8fb25,
42508 +
            0x2c48a08910359351,
42509 +
            0x6590b59662f3e73b,
42510 +
            0x9198f20e6f2e8f4f,
42511 +
            0xcf70db4dd0a30140,
42512 +
            0x3b789cd5dd7e6934,
42513 +
            0xb981e2e66a5fd328,
42514 +
            0x4d89a57e6782bb5c,
42515 +
            0x13618c3dd80f3553,
42516 +
            0xe769cba5d5d25d27,
42517 +
            0xaeb1debaa714294d,
42518 +
            0x5ab99922aac94139,
42519 +
            0x0451b0611544cf36,
42520 +
            0xf059f7f91899a742,
42521 +
            0x97e19a5ff0c827e2,
42522 +
            0x63e9ddc7fd154f96,
42523 +
            0x3d01f4844298c199,
42524 +
            0xc909b31c4f45a9ed,
42525 +
            0x80d1a6033d83dd87,
42526 +
            0x74d9e19b305eb5f3,
42527 +
            0x2a31c8d88fd33bfc,
42528 +
            0xde398f40820e5388,
42529 +
            0xe54113955f703abc,
42530 +
            0x1149540d52ad52c8,
42531 +
            0x4fa17d4eed20dcc7,
42532 +
            0xbba93ad6e0fdb4b3,
42533 +
            0xf2712fc9923bc0d9,
42534 +
            0x067968519fe6a8ad,
42535 +
            0x58914112206b26a2,
42536 +
            0xac99068a2db64ed6,
42537 +
            0xcb216b2cc5e7ce76,
42538 +
            0x3f292cb4c83aa602,
42539 +
            0x61c105f777b7280d,
42540 +
            0x95c9426f7a6a4079,
42541 +
            0xdc11577008ac3413,
42542 +
            0x281910e805715c67,
42543 +
            0x76f139abbafcd268,
42544 +
            0x82f97e33b721ba1c,
42545 +
            0x31f324277d5590c3,
42546 +
            0xc5fb63bf7088f8b7,
42547 +
            0x9b134afccf0576b8,
42548 +
            0x6f1b0d64c2d81ecc,
42549 +
            0x26c3187bb01e6aa6,
42550 +
            0xd2cb5fe3bdc302d2,
42551 +
            0x8c2376a0024e8cdd,
42552 +
            0x782b31380f93e4a9,
42553 +
            0x1f935c9ee7c26409,
42554 +
            0xeb9b1b06ea1f0c7d,
42555 +
            0xb573324555928272,
42556 +
            0x417b75dd584fea06,
42557 +
            0x08a360c22a899e6c,
42558 +
            0xfcab275a2754f618,
42559 +
            0xa2430e1998d97817,
42560 +
            0x564b498195041063,
42561 +
            0x6d33d554487a7957,
42562 +
            0x993b92cc45a71123,
42563 +
            0xc7d3bb8ffa2a9f2c,
42564 +
            0x33dbfc17f7f7f758,
42565 +
            0x7a03e90885318332,
42566 +
            0x8e0bae9088eceb46,
42567 +
            0xd0e387d337616549,
42568 +
            0x24ebc04b3abc0d3d,
42569 +
            0x4353adedd2ed8d9d,
42570 +
            0xb75bea75df30e5e9,
42571 +
            0xe9b3c33660bd6be6,
42572 +
            0x1dbb84ae6d600392,
42573 +
            0x546391b11fa677f8,
42574 +
            0xa06bd629127b1f8c,
42575 +
            0xfe83ff6aadf69183,
42576 +
            0x0a8bb8f2a02bf9f7,
42577 +
            0x8872c6c1170a43eb,
42578 +
            0x7c7a81591ad72b9f,
42579 +
            0x2292a81aa55aa590,
42580 +
            0xd69aef82a887cde4,
42581 +
            0x9f42fa9dda41b98e,
42582 +
            0x6b4abd05d79cd1fa,
42583 +
            0x35a2944668115ff5,
42584 +
            0xc1aad3de65cc3781,
42585 +
            0xa612be788d9db721,
42586 +
            0x521af9e08040df55,
42587 +
            0x0cf2d0a33fcd515a,
42588 +
            0xf8fa973b3210392e,
42589 +
            0xb122822440d64d44,
42590 +
            0x452ac5bc4d0b2530,
42591 +
            0x1bc2ecfff286ab3f,
42592 +
            0xefcaab67ff5bc34b,
42593 +
            0xd4b237b22225aa7f,
42594 +
            0x20ba702a2ff8c20b,
42595 +
            0x7e52596990754c04,
42596 +
            0x8a5a1ef19da82470,
42597 +
            0xc3820beeef6e501a,
42598 +
            0x378a4c76e2b3386e,
42599 +
            0x696265355d3eb661,
42600 +
            0x9d6a22ad50e3de15,
42601 +
            0xfad24f0bb8b25eb5,
42602 +
            0x0eda0893b56f36c1,
42603 +
            0x503221d00ae2b8ce,
42604 +
            0xa43a6648073fd0ba,
42605 +
            0xede2735775f9a4d0,
42606 +
            0x19ea34cf7824cca4,
42607 +
            0x47021d8cc7a942ab,
42608 +
            0xb30a5a14ca742adf,
42609 +
            0x63e6484efaab2186,
42610 +
            0x97ee0fd6f77649f2,
42611 +
            0xc906269548fbc7fd,
42612 +
            0x3d0e610d4526af89,
42613 +
            0x74d6741237e0dbe3,
42614 +
            0x80de338a3a3db397,
42615 +
            0xde361ac985b03d98,
42616 +
            0x2a3e5d51886d55ec,
42617 +
            0x4d8630f7603cd54c,
42618 +
            0xb98e776f6de1bd38,
42619 +
            0xe7665e2cd26c3337,
42620 +
            0x136e19b4dfb15b43,
42621 +
            0x5ab60cabad772f29,
42622 +
            0xaebe4b33a0aa475d,
42623 +
            0xf05662701f27c952,
42624 +
            0x045e25e812faa126,
42625 +
            0x3f26b93dcf84c812,
42626 +
            0xcb2efea5c259a066,
42627 +
            0x95c6d7e67dd42e69,
42628 +
            0x61ce907e7009461d,
42629 +
            0x2816856102cf3277,
42630 +
            0xdc1ec2f90f125a03,
42631 +
            0x82f6ebbab09fd40c,
42632 +
            0x76feac22bd42bc78,
42633 +
            0x1146c18455133cd8,
42634 +
            0xe54e861c58ce54ac,
42635 +
            0xbba6af5fe743daa3,
42636 +
            0x4faee8c7ea9eb2d7,
42637 +
            0x0676fdd89858c6bd,
42638 +
            0xf27eba409585aec9,
42639 +
            0xac9693032a0820c6,
42640 +
            0x589ed49b27d548b2,
42641 +
            0xda67aaa890f4f2ae,
42642 +
            0x2e6fed309d299ada,
42643 +
            0x7087c47322a414d5,
42644 +
            0x848f83eb2f797ca1,
42645 +
            0xcd5796f45dbf08cb,
42646 +
            0x395fd16c506260bf,
42647 +
            0x67b7f82fefefeeb0,
42648 +
            0x93bfbfb7e23286c4,
42649 +
            0xf407d2110a630664,
42650 +
            0x000f958907be6e10,
42651 +
            0x5ee7bccab833e01f,
42652 +
            0xaaeffb52b5ee886b,
42653 +
            0xe337ee4dc728fc01,
42654 +
            0x173fa9d5caf59475,
42655 +
            0x49d7809675781a7a,
42656 +
            0xbddfc70e78a5720e,
42657 +
            0x86a75bdba5db1b3a,
42658 +
            0x72af1c43a806734e,
42659 +
            0x2c473500178bfd41,
42660 +
            0xd84f72981a569535,
42661 +
            0x919767876890e15f,
42662 +
            0x659f201f654d892b,
42663 +
            0x3b77095cdac00724,
42664 +
            0xcf7f4ec4d71d6f50,
42665 +
            0xa8c723623f4ceff0,
42666 +
            0x5ccf64fa32918784,
42667 +
            0x02274db98d1c098b,
42668 +
            0xf62f0a2180c161ff,
42669 +
            0xbff71f3ef2071595,
42670 +
            0x4bff58a6ffda7de1,
42671 +
            0x151771e54057f3ee,
42672 +
            0xe11f367d4d8a9b9a,
42673 +
            0x52156c6987feb145,
42674 +
            0xa61d2bf18a23d931,
42675 +
            0xf8f502b235ae573e,
42676 +
            0x0cfd452a38733f4a,
42677 +
            0x452550354ab54b20,
42678 +
            0xb12d17ad47682354,
42679 +
            0xefc53eeef8e5ad5b,
42680 +
            0x1bcd7976f538c52f,
42681 +
            0x7c7514d01d69458f,
42682 +
            0x887d534810b42dfb,
42683 +
            0xd6957a0baf39a3f4,
42684 +
            0x229d3d93a2e4cb80,
42685 +
            0x6b45288cd022bfea,
42686 +
            0x9f4d6f14ddffd79e,
42687 +
            0xc1a5465762725991,
42688 +
            0x35ad01cf6faf31e5,
42689 +
            0x0ed59d1ab2d158d1,
42690 +
            0xfaddda82bf0c30a5,
42691 +
            0xa435f3c10081beaa,
42692 +
            0x503db4590d5cd6de,
42693 +
            0x19e5a1467f9aa2b4,
42694 +
            0xedede6de7247cac0,
42695 +
            0xb305cf9dcdca44cf,
42696 +
            0x470d8805c0172cbb,
42697 +
            0x20b5e5a32846ac1b,
42698 +
            0xd4bda23b259bc46f,
42699 +
            0x8a558b789a164a60,
42700 +
            0x7e5dcce097cb2214,
42701 +
            0x3785d9ffe50d567e,
42702 +
            0xc38d9e67e8d03e0a,
42703 +
            0x9d65b724575db005,
42704 +
            0x696df0bc5a80d871,
42705 +
            0xeb948e8feda1626d,
42706 +
            0x1f9cc917e07c0a19,
42707 +
            0x4174e0545ff18416,
42708 +
            0xb57ca7cc522cec62,
42709 +
            0xfca4b2d320ea9808,
42710 +
            0x08acf54b2d37f07c,
42711 +
            0x5644dc0892ba7e73,
42712 +
            0xa24c9b909f671607,
42713 +
            0xc5f4f636773696a7,
42714 +
            0x31fcb1ae7aebfed3,
42715 +
            0x6f1498edc56670dc,
42716 +
            0x9b1cdf75c8bb18a8,
42717 +
            0xd2c4ca6aba7d6cc2,
42718 +
            0x26cc8df2b7a004b6,
42719 +
            0x7824a4b1082d8ab9,
42720 +
            0x8c2ce32905f0e2cd,
42721 +
            0xb7547ffcd88e8bf9,
42722 +
            0x435c3864d553e38d,
42723 +
            0x1db411276ade6d82,
42724 +
            0xe9bc56bf670305f6,
42725 +
            0xa06443a015c5719c,
42726 +
            0x546c0438181819e8,
42727 +
            0x0a842d7ba79597e7,
42728 +
            0xfe8c6ae3aa48ff93,
42729 +
            0x9934074542197f33,
42730 +
            0x6d3c40dd4fc41747,
42731 +
            0x33d4699ef0499948,
42732 +
            0xc7dc2e06fd94f13c,
42733 +
            0x8e043b198f528556,
42734 +
            0x7a0c7c81828fed22,
42735 +
            0x24e455c23d02632d,
42736 +
            0xd0ec125a30df0b59,
42737 +
        ],
42738 +
        [
42739 +
            0x0000000000000000,
42740 +
            0xc7cc909df556430c,
42741 +
            0xcd69c0d04346b08b,
42742 +
            0x0aa5504db610f387,
42743 +
            0xd823604b2f675785,
42744 +
            0x1feff0d6da311489,
42745 +
            0x154aa09b6c21e70e,
42746 +
            0xd28630069977a402,
42747 +
            0xf2b6217df7249999,
42748 +
            0x357ab1e00272da95,
42749 +
            0x3fdfe1adb4622912,
42750 +
            0xf813713041346a1e,
42751 +
            0x2a954136d843ce1c,
42752 +
            0xed59d1ab2d158d10,
42753 +
            0xe7fc81e69b057e97,
42754 +
            0x2030117b6e533d9b,
42755 +
            0xa79ca31047a305a1,
42756 +
            0x6050338db2f546ad,
42757 +
            0x6af563c004e5b52a,
42758 +
            0xad39f35df1b3f626,
42759 +
            0x7fbfc35b68c45224,
42760 +
            0xb87353c69d921128,
42761 +
            0xb2d6038b2b82e2af,
42762 +
            0x751a9316ded4a1a3,
42763 +
            0x552a826db0879c38,
42764 +
            0x92e612f045d1df34,
42765 +
            0x984342bdf3c12cb3,
42766 +
            0x5f8fd22006976fbf,
42767 +
            0x8d09e2269fe0cbbd,
42768 +
            0x4ac572bb6ab688b1,
42769 +
            0x406022f6dca67b36,
42770 +
            0x87acb26b29f0383a,
42771 +
            0x0dc9a7cb26ac3dd1,
42772 +
            0xca053756d3fa7edd,
42773 +
            0xc0a0671b65ea8d5a,
42774 +
            0x076cf78690bcce56,
42775 +
            0xd5eac78009cb6a54,
42776 +
            0x1226571dfc9d2958,
42777 +
            0x188307504a8ddadf,
42778 +
            0xdf4f97cdbfdb99d3,
42779 +
            0xff7f86b6d188a448,
42780 +
            0x38b3162b24dee744,
42781 +
            0x3216466692ce14c3,
42782 +
            0xf5dad6fb679857cf,
42783 +
            0x275ce6fdfeeff3cd,
42784 +
            0xe09076600bb9b0c1,
42785 +
            0xea35262dbda94346,
42786 +
            0x2df9b6b048ff004a,
42787 +
            0xaa5504db610f3870,
42788 +
            0x6d99944694597b7c,
42789 +
            0x673cc40b224988fb,
42790 +
            0xa0f05496d71fcbf7,
42791 +
            0x727664904e686ff5,
42792 +
            0xb5baf40dbb3e2cf9,
42793 +
            0xbf1fa4400d2edf7e,
42794 +
            0x78d334ddf8789c72,
42795 +
            0x58e325a6962ba1e9,
42796 +
            0x9f2fb53b637de2e5,
42797 +
            0x958ae576d56d1162,
42798 +
            0x524675eb203b526e,
42799 +
            0x80c045edb94cf66c,
42800 +
            0x470cd5704c1ab560,
42801 +
            0x4da9853dfa0a46e7,
42802 +
            0x8a6515a00f5c05eb,
42803 +
            0x1b934f964d587ba2,
42804 +
            0xdc5fdf0bb80e38ae,
42805 +
            0xd6fa8f460e1ecb29,
42806 +
            0x11361fdbfb488825,
42807 +
            0xc3b02fdd623f2c27,
42808 +
            0x047cbf4097696f2b,
42809 +
            0x0ed9ef0d21799cac,
42810 +
            0xc9157f90d42fdfa0,
42811 +
            0xe9256eebba7ce23b,
42812 +
            0x2ee9fe764f2aa137,
42813 +
            0x244cae3bf93a52b0,
42814 +
            0xe3803ea60c6c11bc,
42815 +
            0x31060ea0951bb5be,
42816 +
            0xf6ca9e3d604df6b2,
42817 +
            0xfc6fce70d65d0535,
42818 +
            0x3ba35eed230b4639,
42819 +
            0xbc0fec860afb7e03,
42820 +
            0x7bc37c1bffad3d0f,
42821 +
            0x71662c5649bdce88,
42822 +
            0xb6aabccbbceb8d84,
42823 +
            0x642c8ccd259c2986,
42824 +
            0xa3e01c50d0ca6a8a,
42825 +
            0xa9454c1d66da990d,
42826 +
            0x6e89dc80938cda01,
42827 +
            0x4eb9cdfbfddfe79a,
42828 +
            0x89755d660889a496,
42829 +
            0x83d00d2bbe995711,
42830 +
            0x441c9db64bcf141d,
42831 +
            0x969aadb0d2b8b01f,
42832 +
            0x51563d2d27eef313,
42833 +
            0x5bf36d6091fe0094,
42834 +
            0x9c3ffdfd64a84398,
42835 +
            0x165ae85d6bf44673,
42836 +
            0xd19678c09ea2057f,
42837 +
            0xdb33288d28b2f6f8,
42838 +
            0x1cffb810dde4b5f4,
42839 +
            0xce798816449311f6,
42840 +
            0x09b5188bb1c552fa,
42841 +
            0x031048c607d5a17d,
42842 +
            0xc4dcd85bf283e271,
42843 +
            0xe4ecc9209cd0dfea,
42844 +
            0x232059bd69869ce6,
42845 +
            0x298509f0df966f61,
42846 +
            0xee49996d2ac02c6d,
42847 +
            0x3ccfa96bb3b7886f,
42848 +
            0xfb0339f646e1cb63,
42849 +
            0xf1a669bbf0f138e4,
42850 +
            0x366af92605a77be8,
42851 +
            0xb1c64b4d2c5743d2,
42852 +
            0x760adbd0d90100de,
42853 +
            0x7caf8b9d6f11f359,
42854 +
            0xbb631b009a47b055,
42855 +
            0x69e52b0603301457,
42856 +
            0xae29bb9bf666575b,
42857 +
            0xa48cebd64076a4dc,
42858 +
            0x63407b4bb520e7d0,
42859 +
            0x43706a30db73da4b,
42860 +
            0x84bcfaad2e259947,
42861 +
            0x8e19aae098356ac0,
42862 +
            0x49d53a7d6d6329cc,
42863 +
            0x9b530a7bf4148dce,
42864 +
            0x5c9f9ae60142cec2,
42865 +
            0x563acaabb7523d45,
42866 +
            0x91f65a3642047e49,
42867 +
            0x37269f2c9ab0f744,
42868 +
            0xf0ea0fb16fe6b448,
42869 +
            0xfa4f5ffcd9f647cf,
42870 +
            0x3d83cf612ca004c3,
42871 +
            0xef05ff67b5d7a0c1,
42872 +
            0x28c96ffa4081e3cd,
42873 +
            0x226c3fb7f691104a,
42874 +
            0xe5a0af2a03c75346,
42875 +
            0xc590be516d946edd,
42876 +
            0x025c2ecc98c22dd1,
42877 +
            0x08f97e812ed2de56,
42878 +
            0xcf35ee1cdb849d5a,
42879 +
            0x1db3de1a42f33958,
42880 +
            0xda7f4e87b7a57a54,
42881 +
            0xd0da1eca01b589d3,
42882 +
            0x17168e57f4e3cadf,
42883 +
            0x90ba3c3cdd13f2e5,
42884 +
            0x5776aca12845b1e9,
42885 +
            0x5dd3fcec9e55426e,
42886 +
            0x9a1f6c716b030162,
42887 +
            0x48995c77f274a560,
42888 +
            0x8f55ccea0722e66c,
42889 +
            0x85f09ca7b13215eb,
42890 +
            0x423c0c3a446456e7,
42891 +
            0x620c1d412a376b7c,
42892 +
            0xa5c08ddcdf612870,
42893 +
            0xaf65dd916971dbf7,
42894 +
            0x68a94d0c9c2798fb,
42895 +
            0xba2f7d0a05503cf9,
42896 +
            0x7de3ed97f0067ff5,
42897 +
            0x7746bdda46168c72,
42898 +
            0xb08a2d47b340cf7e,
42899 +
            0x3aef38e7bc1cca95,
42900 +
            0xfd23a87a494a8999,
42901 +
            0xf786f837ff5a7a1e,
42902 +
            0x304a68aa0a0c3912,
42903 +
            0xe2cc58ac937b9d10,
42904 +
            0x2500c831662dde1c,
42905 +
            0x2fa5987cd03d2d9b,
42906 +
            0xe86908e1256b6e97,
42907 +
            0xc859199a4b38530c,
42908 +
            0x0f958907be6e1000,
42909 +
            0x0530d94a087ee387,
42910 +
            0xc2fc49d7fd28a08b,
42911 +
            0x107a79d1645f0489,
42912 +
            0xd7b6e94c91094785,
42913 +
            0xdd13b9012719b402,
42914 +
            0x1adf299cd24ff70e,
42915 +
            0x9d739bf7fbbfcf34,
42916 +
            0x5abf0b6a0ee98c38,
42917 +
            0x501a5b27b8f97fbf,
42918 +
            0x97d6cbba4daf3cb3,
42919 +
            0x4550fbbcd4d898b1,
42920 +
            0x829c6b21218edbbd,
42921 +
            0x88393b6c979e283a,
42922 +
            0x4ff5abf162c86b36,
42923 +
            0x6fc5ba8a0c9b56ad,
42924 +
            0xa8092a17f9cd15a1,
42925 +
            0xa2ac7a5a4fdde626,
42926 +
            0x6560eac7ba8ba52a,
42927 +
            0xb7e6dac123fc0128,
42928 +
            0x702a4a5cd6aa4224,
42929 +
            0x7a8f1a1160bab1a3,
42930 +
            0xbd438a8c95ecf2af,
42931 +
            0x2cb5d0bad7e88ce6,
42932 +
            0xeb79402722becfea,
42933 +
            0xe1dc106a94ae3c6d,
42934 +
            0x261080f761f87f61,
42935 +
            0xf496b0f1f88fdb63,
42936 +
            0x335a206c0dd9986f,
42937 +
            0x39ff7021bbc96be8,
42938 +
            0xfe33e0bc4e9f28e4,
42939 +
            0xde03f1c720cc157f,
42940 +
            0x19cf615ad59a5673,
42941 +
            0x136a3117638aa5f4,
42942 +
            0xd4a6a18a96dce6f8,
42943 +
            0x0620918c0fab42fa,
42944 +
            0xc1ec0111fafd01f6,
42945 +
            0xcb49515c4cedf271,
42946 +
            0x0c85c1c1b9bbb17d,
42947 +
            0x8b2973aa904b8947,
42948 +
            0x4ce5e337651dca4b,
42949 +
            0x4640b37ad30d39cc,
42950 +
            0x818c23e7265b7ac0,
42951 +
            0x530a13e1bf2cdec2,
42952 +
            0x94c6837c4a7a9dce,
42953 +
            0x9e63d331fc6a6e49,
42954 +
            0x59af43ac093c2d45,
42955 +
            0x799f52d7676f10de,
42956 +
            0xbe53c24a923953d2,
42957 +
            0xb4f692072429a055,
42958 +
            0x733a029ad17fe359,
42959 +
            0xa1bc329c4808475b,
42960 +
            0x6670a201bd5e0457,
42961 +
            0x6cd5f24c0b4ef7d0,
42962 +
            0xab1962d1fe18b4dc,
42963 +
            0x217c7771f144b137,
42964 +
            0xe6b0e7ec0412f23b,
42965 +
            0xec15b7a1b20201bc,
42966 +
            0x2bd9273c475442b0,
42967 +
            0xf95f173ade23e6b2,
42968 +
            0x3e9387a72b75a5be,
42969 +
            0x3436d7ea9d655639,
42970 +
            0xf3fa477768331535,
42971 +
            0xd3ca560c066028ae,
42972 +
            0x1406c691f3366ba2,
42973 +
            0x1ea396dc45269825,
42974 +
            0xd96f0641b070db29,
42975 +
            0x0be9364729077f2b,
42976 +
            0xcc25a6dadc513c27,
42977 +
            0xc680f6976a41cfa0,
42978 +
            0x014c660a9f178cac,
42979 +
            0x86e0d461b6e7b496,
42980 +
            0x412c44fc43b1f79a,
42981 +
            0x4b8914b1f5a1041d,
42982 +
            0x8c45842c00f74711,
42983 +
            0x5ec3b42a9980e313,
42984 +
            0x990f24b76cd6a01f,
42985 +
            0x93aa74fadac65398,
42986 +
            0x5466e4672f901094,
42987 +
            0x7456f51c41c32d0f,
42988 +
            0xb39a6581b4956e03,
42989 +
            0xb93f35cc02859d84,
42990 +
            0x7ef3a551f7d3de88,
42991 +
            0xac7595576ea47a8a,
42992 +
            0x6bb905ca9bf23986,
42993 +
            0x611c55872de2ca01,
42994 +
            0xa6d0c51ad8b4890d,
42995 +
        ],
42996 +
        [
42997 +
            0x0000000000000000,
42998 +
            0x6e4d3e593561ee88,
42999 +
            0xdc9a7cb26ac3dd10,
43000 +
            0xb2d742eb5fa23398,
43001 +
            0xfbc4188f7c6d8cb3,
43002 +
            0x958926d6490c623b,
43003 +
            0x275e643d16ae51a3,
43004 +
            0x49135a6423cfbf2b,
43005 +
            0xb578d0f551312ff5,
43006 +
            0xdb35eeac6450c17d,
43007 +
            0x69e2ac473bf2f2e5,
43008 +
            0x07af921e0e931c6d,
43009 +
            0x4ebcc87a2d5ca346,
43010 +
            0x20f1f623183d4dce,
43011 +
            0x9226b4c8479f7e56,
43012 +
            0xfc6b8a9172fe90de,
43013 +
            0x280140010b886979,
43014 +
            0x464c7e583ee987f1,
43015 +
            0xf49b3cb3614bb469,
43016 +
            0x9ad602ea542a5ae1,
43017 +
            0xd3c5588e77e5e5ca,
43018 +
            0xbd8866d742840b42,
43019 +
            0x0f5f243c1d2638da,
43020 +
            0x61121a652847d652,
43021 +
            0x9d7990f45ab9468c,
43022 +
            0xf334aead6fd8a804,
43023 +
            0x41e3ec46307a9b9c,
43024 +
            0x2faed21f051b7514,
43025 +
            0x66bd887b26d4ca3f,
43026 +
            0x08f0b62213b524b7,
43027 +
            0xba27f4c94c17172f,
43028 +
            0xd46aca907976f9a7,
43029 +
            0x500280021710d2f2,
43030 +
            0x3e4fbe5b22713c7a,
43031 +
            0x8c98fcb07dd30fe2,
43032 +
            0xe2d5c2e948b2e16a,
43033 +
            0xabc6988d6b7d5e41,
43034 +
            0xc58ba6d45e1cb0c9,
43035 +
            0x775ce43f01be8351,
43036 +
            0x1911da6634df6dd9,
43037 +
            0xe57a50f74621fd07,
43038 +
            0x8b376eae7340138f,
43039 +
            0x39e02c452ce22017,
43040 +
            0x57ad121c1983ce9f,
43041 +
            0x1ebe48783a4c71b4,
43042 +
            0x70f376210f2d9f3c,
43043 +
            0xc22434ca508faca4,
43044 +
            0xac690a9365ee422c,
43045 +
            0x7803c0031c98bb8b,
43046 +
            0x164efe5a29f95503,
43047 +
            0xa499bcb1765b669b,
43048 +
            0xcad482e8433a8813,
43049 +
            0x83c7d88c60f53738,
43050 +
            0xed8ae6d55594d9b0,
43051 +
            0x5f5da43e0a36ea28,
43052 +
            0x31109a673f5704a0,
43053 +
            0xcd7b10f64da9947e,
43054 +
            0xa3362eaf78c87af6,
43055 +
            0x11e16c44276a496e,
43056 +
            0x7fac521d120ba7e6,
43057 +
            0x36bf087931c418cd,
43058 +
            0x58f2362004a5f645,
43059 +
            0xea2574cb5b07c5dd,
43060 +
            0x84684a926e662b55,
43061 +
            0xa00500042e21a5e4,
43062 +
            0xce483e5d1b404b6c,
43063 +
            0x7c9f7cb644e278f4,
43064 +
            0x12d242ef7183967c,
43065 +
            0x5bc1188b524c2957,
43066 +
            0x358c26d2672dc7df,
43067 +
            0x875b6439388ff447,
43068 +
            0xe9165a600dee1acf,
43069 +
            0x157dd0f17f108a11,
43070 +
            0x7b30eea84a716499,
43071 +
            0xc9e7ac4315d35701,
43072 +
            0xa7aa921a20b2b989,
43073 +
            0xeeb9c87e037d06a2,
43074 +
            0x80f4f627361ce82a,
43075 +
            0x3223b4cc69bedbb2,
43076 +
            0x5c6e8a955cdf353a,
43077 +
            0x8804400525a9cc9d,
43078 +
            0xe6497e5c10c82215,
43079 +
            0x549e3cb74f6a118d,
43080 +
            0x3ad302ee7a0bff05,
43081 +
            0x73c0588a59c4402e,
43082 +
            0x1d8d66d36ca5aea6,
43083 +
            0xaf5a243833079d3e,
43084 +
            0xc1171a61066673b6,
43085 +
            0x3d7c90f07498e368,
43086 +
            0x5331aea941f90de0,
43087 +
            0xe1e6ec421e5b3e78,
43088 +
            0x8fabd21b2b3ad0f0,
43089 +
            0xc6b8887f08f56fdb,
43090 +
            0xa8f5b6263d948153,
43091 +
            0x1a22f4cd6236b2cb,
43092 +
            0x746fca9457575c43,
43093 +
            0xf007800639317716,
43094 +
            0x9e4abe5f0c50999e,
43095 +
            0x2c9dfcb453f2aa06,
43096 +
            0x42d0c2ed6693448e,
43097 +
            0x0bc39889455cfba5,
43098 +
            0x658ea6d0703d152d,
43099 +
            0xd759e43b2f9f26b5,
43100 +
            0xb914da621afec83d,
43101 +
            0x457f50f3680058e3,
43102 +
            0x2b326eaa5d61b66b,
43103 +
            0x99e52c4102c385f3,
43104 +
            0xf7a8121837a26b7b,
43105 +
            0xbebb487c146dd450,
43106 +
            0xd0f67625210c3ad8,
43107 +
            0x622134ce7eae0940,
43108 +
            0x0c6c0a974bcfe7c8,
43109 +
            0xd806c00732b91e6f,
43110 +
            0xb64bfe5e07d8f0e7,
43111 +
            0x049cbcb5587ac37f,
43112 +
            0x6ad182ec6d1b2df7,
43113 +
            0x23c2d8884ed492dc,
43114 +
            0x4d8fe6d17bb57c54,
43115 +
            0xff58a43a24174fcc,
43116 +
            0x91159a631176a144,
43117 +
            0x6d7e10f26388319a,
43118 +
            0x03332eab56e9df12,
43119 +
            0xb1e46c40094bec8a,
43120 +
            0xdfa952193c2a0202,
43121 +
            0x96ba087d1fe5bd29,
43122 +
            0xf8f736242a8453a1,
43123 +
            0x4a2074cf75266039,
43124 +
            0x246d4a9640478eb1,
43125 +
            0x02fae1e3f5a97d5b,
43126 +
            0x6cb7dfbac0c893d3,
43127 +
            0xde609d519f6aa04b,
43128 +
            0xb02da308aa0b4ec3,
43129 +
            0xf93ef96c89c4f1e8,
43130 +
            0x9773c735bca51f60,
43131 +
            0x25a485dee3072cf8,
43132 +
            0x4be9bb87d666c270,
43133 +
            0xb7823116a49852ae,
43134 +
            0xd9cf0f4f91f9bc26,
43135 +
            0x6b184da4ce5b8fbe,
43136 +
            0x055573fdfb3a6136,
43137 +
            0x4c462999d8f5de1d,
43138 +
            0x220b17c0ed943095,
43139 +
            0x90dc552bb236030d,
43140 +
            0xfe916b728757ed85,
43141 +
            0x2afba1e2fe211422,
43142 +
            0x44b69fbbcb40faaa,
43143 +
            0xf661dd5094e2c932,
43144 +
            0x982ce309a18327ba,
43145 +
            0xd13fb96d824c9891,
43146 +
            0xbf728734b72d7619,
43147 +
            0x0da5c5dfe88f4581,
43148 +
            0x63e8fb86ddeeab09,
43149 +
            0x9f837117af103bd7,
43150 +
            0xf1ce4f4e9a71d55f,
43151 +
            0x43190da5c5d3e6c7,
43152 +
            0x2d5433fcf0b2084f,
43153 +
            0x64476998d37db764,
43154 +
            0x0a0a57c1e61c59ec,
43155 +
            0xb8dd152ab9be6a74,
43156 +
            0xd6902b738cdf84fc,
43157 +
            0x52f861e1e2b9afa9,
43158 +
            0x3cb55fb8d7d84121,
43159 +
            0x8e621d53887a72b9,
43160 +
            0xe02f230abd1b9c31,
43161 +
            0xa93c796e9ed4231a,
43162 +
            0xc7714737abb5cd92,
43163 +
            0x75a605dcf417fe0a,
43164 +
            0x1beb3b85c1761082,
43165 +
            0xe780b114b388805c,
43166 +
            0x89cd8f4d86e96ed4,
43167 +
            0x3b1acda6d94b5d4c,
43168 +
            0x5557f3ffec2ab3c4,
43169 +
            0x1c44a99bcfe50cef,
43170 +
            0x720997c2fa84e267,
43171 +
            0xc0ded529a526d1ff,
43172 +
            0xae93eb7090473f77,
43173 +
            0x7af921e0e931c6d0,
43174 +
            0x14b41fb9dc502858,
43175 +
            0xa6635d5283f21bc0,
43176 +
            0xc82e630bb693f548,
43177 +
            0x813d396f955c4a63,
43178 +
            0xef700736a03da4eb,
43179 +
            0x5da745ddff9f9773,
43180 +
            0x33ea7b84cafe79fb,
43181 +
            0xcf81f115b800e925,
43182 +
            0xa1cccf4c8d6107ad,
43183 +
            0x131b8da7d2c33435,
43184 +
            0x7d56b3fee7a2dabd,
43185 +
            0x3445e99ac46d6596,
43186 +
            0x5a08d7c3f10c8b1e,
43187 +
            0xe8df9528aeaeb886,
43188 +
            0x8692ab719bcf560e,
43189 +
            0xa2ffe1e7db88d8bf,
43190 +
            0xccb2dfbeeee93637,
43191 +
            0x7e659d55b14b05af,
43192 +
            0x1028a30c842aeb27,
43193 +
            0x593bf968a7e5540c,
43194 +
            0x3776c7319284ba84,
43195 +
            0x85a185dacd26891c,
43196 +
            0xebecbb83f8476794,
43197 +
            0x178731128ab9f74a,
43198 +
            0x79ca0f4bbfd819c2,
43199 +
            0xcb1d4da0e07a2a5a,
43200 +
            0xa55073f9d51bc4d2,
43201 +
            0xec43299df6d47bf9,
43202 +
            0x820e17c4c3b59571,
43203 +
            0x30d9552f9c17a6e9,
43204 +
            0x5e946b76a9764861,
43205 +
            0x8afea1e6d000b1c6,
43206 +
            0xe4b39fbfe5615f4e,
43207 +
            0x5664dd54bac36cd6,
43208 +
            0x3829e30d8fa2825e,
43209 +
            0x713ab969ac6d3d75,
43210 +
            0x1f778730990cd3fd,
43211 +
            0xada0c5dbc6aee065,
43212 +
            0xc3edfb82f3cf0eed,
43213 +
            0x3f86711381319e33,
43214 +
            0x51cb4f4ab45070bb,
43215 +
            0xe31c0da1ebf24323,
43216 +
            0x8d5133f8de93adab,
43217 +
            0xc442699cfd5c1280,
43218 +
            0xaa0f57c5c83dfc08,
43219 +
            0x18d8152e979fcf90,
43220 +
            0x76952b77a2fe2118,
43221 +
            0xf2fd61e5cc980a4d,
43222 +
            0x9cb05fbcf9f9e4c5,
43223 +
            0x2e671d57a65bd75d,
43224 +
            0x402a230e933a39d5,
43225 +
            0x0939796ab0f586fe,
43226 +
            0x6774473385946876,
43227 +
            0xd5a305d8da365bee,
43228 +
            0xbbee3b81ef57b566,
43229 +
            0x4785b1109da925b8,
43230 +
            0x29c88f49a8c8cb30,
43231 +
            0x9b1fcda2f76af8a8,
43232 +
            0xf552f3fbc20b1620,
43233 +
            0xbc41a99fe1c4a90b,
43234 +
            0xd20c97c6d4a54783,
43235 +
            0x60dbd52d8b07741b,
43236 +
            0x0e96eb74be669a93,
43237 +
            0xdafc21e4c7106334,
43238 +
            0xb4b11fbdf2718dbc,
43239 +
            0x06665d56add3be24,
43240 +
            0x682b630f98b250ac,
43241 +
            0x2138396bbb7def87,
43242 +
            0x4f7507328e1c010f,
43243 +
            0xfda245d9d1be3297,
43244 +
            0x93ef7b80e4dfdc1f,
43245 +
            0x6f84f11196214cc1,
43246 +
            0x01c9cf48a340a249,
43247 +
            0xb31e8da3fce291d1,
43248 +
            0xdd53b3fac9837f59,
43249 +
            0x9440e99eea4cc072,
43250 +
            0xfa0dd7c7df2d2efa,
43251 +
            0x48da952c808f1d62,
43252 +
            0x2697ab75b5eef3ea,
43253 +
        ],
43254 +
        [
43255 +
            0x0000000000000000,
43256 +
            0x05f5c3c7eb52fab6,
43257 +
            0x0beb878fd6a5f56c,
43258 +
            0x0e1e44483df70fda,
43259 +
            0x17d70f1fad4bead8,
43260 +
            0x1222ccd84619106e,
43261 +
            0x1c3c88907bee1fb4,
43262 +
            0x19c94b5790bce502,
43263 +
            0x2fae1e3f5a97d5b0,
43264 +
            0x2a5bddf8b1c52f06,
43265 +
            0x244599b08c3220dc,
43266 +
            0x21b05a776760da6a,
43267 +
            0x38791120f7dc3f68,
43268 +
            0x3d8cd2e71c8ec5de,
43269 +
            0x339296af2179ca04,
43270 +
            0x36675568ca2b30b2,
43271 +
            0x5f5c3c7eb52fab60,
43272 +
            0x5aa9ffb95e7d51d6,
43273 +
            0x54b7bbf1638a5e0c,
43274 +
            0x5142783688d8a4ba,
43275 +
            0x488b3361186441b8,
43276 +
            0x4d7ef0a6f336bb0e,
43277 +
            0x4360b4eecec1b4d4,
43278 +
            0x4695772925934e62,
43279 +
            0x70f22241efb87ed0,
43280 +
            0x7507e18604ea8466,
43281 +
            0x7b19a5ce391d8bbc,
43282 +
            0x7eec6609d24f710a,
43283 +
            0x67252d5e42f39408,
43284 +
            0x62d0ee99a9a16ebe,
43285 +
            0x6cceaad194566164,
43286 +
            0x693b69167f049bd2,
43287 +
            0xbeb878fd6a5f56c0,
43288 +
            0xbb4dbb3a810dac76,
43289 +
            0xb553ff72bcfaa3ac,
43290 +
            0xb0a63cb557a8591a,
43291 +
            0xa96f77e2c714bc18,
43292 +
            0xac9ab4252c4646ae,
43293 +
            0xa284f06d11b14974,
43294 +
            0xa77133aafae3b3c2,
43295 +
            0x911666c230c88370,
43296 +
            0x94e3a505db9a79c6,
43297 +
            0x9afde14de66d761c,
43298 +
            0x9f08228a0d3f8caa,
43299 +
            0x86c169dd9d8369a8,
43300 +
            0x8334aa1a76d1931e,
43301 +
            0x8d2aee524b269cc4,
43302 +
            0x88df2d95a0746672,
43303 +
            0xe1e44483df70fda0,
43304 +
            0xe411874434220716,
43305 +
            0xea0fc30c09d508cc,
43306 +
            0xeffa00cbe287f27a,
43307 +
            0xf6334b9c723b1778,
43308 +
            0xf3c6885b9969edce,
43309 +
            0xfdd8cc13a49ee214,
43310 +
            0xf82d0fd44fcc18a2,
43311 +
            0xce4a5abc85e72810,
43312 +
            0xcbbf997b6eb5d2a6,
43313 +
            0xc5a1dd335342dd7c,
43314 +
            0xc0541ef4b81027ca,
43315 +
            0xd99d55a328acc2c8,
43316 +
            0xdc689664c3fe387e,
43317 +
            0xd276d22cfe0937a4,
43318 +
            0xd78311eb155bcd12,
43319 +
            0x3f8010117d549b13,
43320 +
            0x3a75d3d6960661a5,
43321 +
            0x346b979eabf16e7f,
43322 +
            0x319e545940a394c9,
43323 +
            0x28571f0ed01f71cb,
43324 +
            0x2da2dcc93b4d8b7d,
43325 +
            0x23bc988106ba84a7,
43326 +
            0x26495b46ede87e11,
43327 +
            0x102e0e2e27c34ea3,
43328 +
            0x15dbcde9cc91b415,
43329 +
            0x1bc589a1f166bbcf,
43330 +
            0x1e304a661a344179,
43331 +
            0x07f901318a88a47b,
43332 +
            0x020cc2f661da5ecd,
43333 +
            0x0c1286be5c2d5117,
43334 +
            0x09e74579b77faba1,
43335 +
            0x60dc2c6fc87b3073,
43336 +
            0x6529efa82329cac5,
43337 +
            0x6b37abe01edec51f,
43338 +
            0x6ec26827f58c3fa9,
43339 +
            0x770b23706530daab,
43340 +
            0x72fee0b78e62201d,
43341 +
            0x7ce0a4ffb3952fc7,
43342 +
            0x7915673858c7d571,
43343 +
            0x4f72325092ece5c3,
43344 +
            0x4a87f19779be1f75,
43345 +
            0x4499b5df444910af,
43346 +
            0x416c7618af1bea19,
43347 +
            0x58a53d4f3fa70f1b,
43348 +
            0x5d50fe88d4f5f5ad,
43349 +
            0x534ebac0e902fa77,
43350 +
            0x56bb7907025000c1,
43351 +
            0x813868ec170bcdd3,
43352 +
            0x84cdab2bfc593765,
43353 +
            0x8ad3ef63c1ae38bf,
43354 +
            0x8f262ca42afcc209,
43355 +
            0x96ef67f3ba40270b,
43356 +
            0x931aa4345112ddbd,
43357 +
            0x9d04e07c6ce5d267,
43358 +
            0x98f123bb87b728d1,
43359 +
            0xae9676d34d9c1863,
43360 +
            0xab63b514a6cee2d5,
43361 +
            0xa57df15c9b39ed0f,
43362 +
            0xa088329b706b17b9,
43363 +
            0xb94179cce0d7f2bb,
43364 +
            0xbcb4ba0b0b85080d,
43365 +
            0xb2aafe43367207d7,
43366 +
            0xb75f3d84dd20fd61,
43367 +
            0xde645492a22466b3,
43368 +
            0xdb91975549769c05,
43369 +
            0xd58fd31d748193df,
43370 +
            0xd07a10da9fd36969,
43371 +
            0xc9b35b8d0f6f8c6b,
43372 +
            0xcc46984ae43d76dd,
43373 +
            0xc258dc02d9ca7907,
43374 +
            0xc7ad1fc5329883b1,
43375 +
            0xf1ca4aadf8b3b303,
43376 +
            0xf43f896a13e149b5,
43377 +
            0xfa21cd222e16466f,
43378 +
            0xffd40ee5c544bcd9,
43379 +
            0xe61d45b255f859db,
43380 +
            0xe3e88675beaaa36d,
43381 +
            0xedf6c23d835dacb7,
43382 +
            0xe80301fa680f5601,
43383 +
            0x7f002022faa93626,
43384 +
            0x7af5e3e511fbcc90,
43385 +
            0x74eba7ad2c0cc34a,
43386 +
            0x711e646ac75e39fc,
43387 +
            0x68d72f3d57e2dcfe,
43388 +
            0x6d22ecfabcb02648,
43389 +
            0x633ca8b281472992,
43390 +
            0x66c96b756a15d324,
43391 +
            0x50ae3e1da03ee396,
43392 +
            0x555bfdda4b6c1920,
43393 +
            0x5b45b992769b16fa,
43394 +
            0x5eb07a559dc9ec4c,
43395 +
            0x477931020d75094e,
43396 +
            0x428cf2c5e627f3f8,
43397 +
            0x4c92b68ddbd0fc22,
43398 +
            0x4967754a30820694,
43399 +
            0x205c1c5c4f869d46,
43400 +
            0x25a9df9ba4d467f0,
43401 +
            0x2bb79bd39923682a,
43402 +
            0x2e4258147271929c,
43403 +
            0x378b1343e2cd779e,
43404 +
            0x327ed084099f8d28,
43405 +
            0x3c6094cc346882f2,
43406 +
            0x3995570bdf3a7844,
43407 +
            0x0ff20263151148f6,
43408 +
            0x0a07c1a4fe43b240,
43409 +
            0x041985ecc3b4bd9a,
43410 +
            0x01ec462b28e6472c,
43411 +
            0x18250d7cb85aa22e,
43412 +
            0x1dd0cebb53085898,
43413 +
            0x13ce8af36eff5742,
43414 +
            0x163b493485adadf4,
43415 +
            0xc1b858df90f660e6,
43416 +
            0xc44d9b187ba49a50,
43417 +
            0xca53df504653958a,
43418 +
            0xcfa61c97ad016f3c,
43419 +
            0xd66f57c03dbd8a3e,
43420 +
            0xd39a9407d6ef7088,
43421 +
            0xdd84d04feb187f52,
43422 +
            0xd8711388004a85e4,
43423 +
            0xee1646e0ca61b556,
43424 +
            0xebe3852721334fe0,
43425 +
            0xe5fdc16f1cc4403a,
43426 +
            0xe00802a8f796ba8c,
43427 +
            0xf9c149ff672a5f8e,
43428 +
            0xfc348a388c78a538,
43429 +
            0xf22ace70b18faae2,
43430 +
            0xf7df0db75add5054,
43431 +
            0x9ee464a125d9cb86,
43432 +
            0x9b11a766ce8b3130,
43433 +
            0x950fe32ef37c3eea,
43434 +
            0x90fa20e9182ec45c,
43435 +
            0x89336bbe8892215e,
43436 +
            0x8cc6a87963c0dbe8,
43437 +
            0x82d8ec315e37d432,
43438 +
            0x872d2ff6b5652e84,
43439 +
            0xb14a7a9e7f4e1e36,
43440 +
            0xb4bfb959941ce480,
43441 +
            0xbaa1fd11a9ebeb5a,
43442 +
            0xbf543ed642b911ec,
43443 +
            0xa69d7581d205f4ee,
43444 +
            0xa368b64639570e58,
43445 +
            0xad76f20e04a00182,
43446 +
            0xa88331c9eff2fb34,
43447 +
            0x4080303387fdad35,
43448 +
            0x4575f3f46caf5783,
43449 +
            0x4b6bb7bc51585859,
43450 +
            0x4e9e747bba0aa2ef,
43451 +
            0x57573f2c2ab647ed,
43452 +
            0x52a2fcebc1e4bd5b,
43453 +
            0x5cbcb8a3fc13b281,
43454 +
            0x59497b6417414837,
43455 +
            0x6f2e2e0cdd6a7885,
43456 +
            0x6adbedcb36388233,
43457 +
            0x64c5a9830bcf8de9,
43458 +
            0x61306a44e09d775f,
43459 +
            0x78f921137021925d,
43460 +
            0x7d0ce2d49b7368eb,
43461 +
            0x7312a69ca6846731,
43462 +
            0x76e7655b4dd69d87,
43463 +
            0x1fdc0c4d32d20655,
43464 +
            0x1a29cf8ad980fce3,
43465 +
            0x14378bc2e477f339,
43466 +
            0x11c248050f25098f,
43467 +
            0x080b03529f99ec8d,
43468 +
            0x0dfec09574cb163b,
43469 +
            0x03e084dd493c19e1,
43470 +
            0x0615471aa26ee357,
43471 +
            0x307212726845d3e5,
43472 +
            0x3587d1b583172953,
43473 +
            0x3b9995fdbee02689,
43474 +
            0x3e6c563a55b2dc3f,
43475 +
            0x27a51d6dc50e393d,
43476 +
            0x2250deaa2e5cc38b,
43477 +
            0x2c4e9ae213abcc51,
43478 +
            0x29bb5925f8f936e7,
43479 +
            0xfe3848ceeda2fbf5,
43480 +
            0xfbcd8b0906f00143,
43481 +
            0xf5d3cf413b070e99,
43482 +
            0xf0260c86d055f42f,
43483 +
            0xe9ef47d140e9112d,
43484 +
            0xec1a8416abbbeb9b,
43485 +
            0xe204c05e964ce441,
43486 +
            0xe7f103997d1e1ef7,
43487 +
            0xd19656f1b7352e45,
43488 +
            0xd46395365c67d4f3,
43489 +
            0xda7dd17e6190db29,
43490 +
            0xdf8812b98ac2219f,
43491 +
            0xc64159ee1a7ec49d,
43492 +
            0xc3b49a29f12c3e2b,
43493 +
            0xcdaade61ccdb31f1,
43494 +
            0xc85f1da62789cb47,
43495 +
            0xa16474b0588d5095,
43496 +
            0xa491b777b3dfaa23,
43497 +
            0xaa8ff33f8e28a5f9,
43498 +
            0xaf7a30f8657a5f4f,
43499 +
            0xb6b37baff5c6ba4d,
43500 +
            0xb346b8681e9440fb,
43501 +
            0xbd58fc2023634f21,
43502 +
            0xb8ad3fe7c831b597,
43503 +
            0x8eca6a8f021a8525,
43504 +
            0x8b3fa948e9487f93,
43505 +
            0x8521ed00d4bf7049,
43506 +
            0x80d42ec73fed8aff,
43507 +
            0x991d6590af516ffd,
43508 +
            0x9ce8a6574403954b,
43509 +
            0x92f6e21f79f49a91,
43510 +
            0x970321d892a66027,
43511 +
        ],
43512 +
        [
43513 +
            0x0000000000000000,
43514 +
            0xfe004045f5526c4c,
43515 +
            0xbef06160434eee0b,
43516 +
            0x40f02125b61c8247,
43517 +
            0x3f10232b2f77ea85,
43518 +
            0xc110636eda2586c9,
43519 +
            0x81e0424b6c39048e,
43520 +
            0x7fe0020e996b68c2,
43521 +
            0x7e2046565eefd50a,
43522 +
            0x80200613abbdb946,
43523 +
            0xc0d027361da13b01,
43524 +
            0x3ed06773e8f3574d,
43525 +
            0x4130657d71983f8f,
43526 +
            0xbf30253884ca53c3,
43527 +
            0xffc0041d32d6d184,
43528 +
            0x01c04458c784bdc8,
43529 +
            0xfc408cacbddfaa14,
43530 +
            0x0240cce9488dc658,
43531 +
            0x42b0edccfe91441f,
43532 +
            0xbcb0ad890bc32853,
43533 +
            0xc350af8792a84091,
43534 +
            0x3d50efc267fa2cdd,
43535 +
            0x7da0cee7d1e6ae9a,
43536 +
            0x83a08ea224b4c2d6,
43537 +
            0x8260cafae3307f1e,
43538 +
            0x7c608abf16621352,
43539 +
            0x3c90ab9aa07e9115,
43540 +
            0xc290ebdf552cfd59,
43541 +
            0xbd70e9d1cc47959b,
43542 +
            0x4370a9943915f9d7,
43543 +
            0x038088b18f097b90,
43544 +
            0xfd80c8f47a5b17dc,
43545 +
            0xba71f8b2d25562bb,
43546 +
            0x4471b8f727070ef7,
43547 +
            0x048199d2911b8cb0,
43548 +
            0xfa81d9976449e0fc,
43549 +
            0x8561db99fd22883e,
43550 +
            0x7b619bdc0870e472,
43551 +
            0x3b91baf9be6c6635,
43552 +
            0xc591fabc4b3e0a79,
43553 +
            0xc451bee48cbab7b1,
43554 +
            0x3a51fea179e8dbfd,
43555 +
            0x7aa1df84cff459ba,
43556 +
            0x84a19fc13aa635f6,
43557 +
            0xfb419dcfa3cd5d34,
43558 +
            0x0541dd8a569f3178,
43559 +
            0x45b1fcafe083b33f,
43560 +
            0xbbb1bcea15d1df73,
43561 +
            0x4631741e6f8ac8af,
43562 +
            0xb831345b9ad8a4e3,
43563 +
            0xf8c1157e2cc426a4,
43564 +
            0x06c1553bd9964ae8,
43565 +
            0x7921573540fd222a,
43566 +
            0x87211770b5af4e66,
43567 +
            0xc7d1365503b3cc21,
43568 +
            0x39d17610f6e1a06d,
43569 +
            0x3811324831651da5,
43570 +
            0xc611720dc43771e9,
43571 +
            0x86e15328722bf3ae,
43572 +
            0x78e1136d87799fe2,
43573 +
            0x070111631e12f720,
43574 +
            0xf9015126eb409b6c,
43575 +
            0xb9f170035d5c192b,
43576 +
            0x47f13046a80e7567,
43577 +
            0x3613108e0d40f3e5,
43578 +
            0xc81350cbf8129fa9,
43579 +
            0x88e371ee4e0e1dee,
43580 +
            0x76e331abbb5c71a2,
43581 +
            0x090333a522371960,
43582 +
            0xf70373e0d765752c,
43583 +
            0xb7f352c56179f76b,
43584 +
            0x49f31280942b9b27,
43585 +
            0x483356d853af26ef,
43586 +
            0xb633169da6fd4aa3,
43587 +
            0xf6c337b810e1c8e4,
43588 +
            0x08c377fde5b3a4a8,
43589 +
            0x772375f37cd8cc6a,
43590 +
            0x892335b6898aa026,
43591 +
            0xc9d314933f962261,
43592 +
            0x37d354d6cac44e2d,
43593 +
            0xca539c22b09f59f1,
43594 +
            0x3453dc6745cd35bd,
43595 +
            0x74a3fd42f3d1b7fa,
43596 +
            0x8aa3bd070683dbb6,
43597 +
            0xf543bf099fe8b374,
43598 +
            0x0b43ff4c6abadf38,
43599 +
            0x4bb3de69dca65d7f,
43600 +
            0xb5b39e2c29f43133,
43601 +
            0xb473da74ee708cfb,
43602 +
            0x4a739a311b22e0b7,
43603 +
            0x0a83bb14ad3e62f0,
43604 +
            0xf483fb51586c0ebc,
43605 +
            0x8b63f95fc107667e,
43606 +
            0x7563b91a34550a32,
43607 +
            0x3593983f82498875,
43608 +
            0xcb93d87a771be439,
43609 +
            0x8c62e83cdf15915e,
43610 +
            0x7262a8792a47fd12,
43611 +
            0x3292895c9c5b7f55,
43612 +
            0xcc92c91969091319,
43613 +
            0xb372cb17f0627bdb,
43614 +
            0x4d728b5205301797,
43615 +
            0x0d82aa77b32c95d0,
43616 +
            0xf382ea32467ef99c,
43617 +
            0xf242ae6a81fa4454,
43618 +
            0x0c42ee2f74a82818,
43619 +
            0x4cb2cf0ac2b4aa5f,
43620 +
            0xb2b28f4f37e6c613,
43621 +
            0xcd528d41ae8daed1,
43622 +
            0x3352cd045bdfc29d,
43623 +
            0x73a2ec21edc340da,
43624 +
            0x8da2ac6418912c96,
43625 +
            0x7022649062ca3b4a,
43626 +
            0x8e2224d597985706,
43627 +
            0xced205f02184d541,
43628 +
            0x30d245b5d4d6b90d,
43629 +
            0x4f3247bb4dbdd1cf,
43630 +
            0xb13207feb8efbd83,
43631 +
            0xf1c226db0ef33fc4,
43632 +
            0x0fc2669efba15388,
43633 +
            0x0e0222c63c25ee40,
43634 +
            0xf0026283c977820c,
43635 +
            0xb0f243a67f6b004b,
43636 +
            0x4ef203e38a396c07,
43637 +
            0x311201ed135204c5,
43638 +
            0xcf1241a8e6006889,
43639 +
            0x8fe2608d501ceace,
43640 +
            0x71e220c8a54e8682,
43641 +
            0x6c26211c1a81e7ca,
43642 +
            0x92266159efd38b86,
43643 +
            0xd2d6407c59cf09c1,
43644 +
            0x2cd60039ac9d658d,
43645 +
            0x5336023735f60d4f,
43646 +
            0xad364272c0a46103,
43647 +
            0xedc6635776b8e344,
43648 +
            0x13c6231283ea8f08,
43649 +
            0x1206674a446e32c0,
43650 +
            0xec06270fb13c5e8c,
43651 +
            0xacf6062a0720dccb,
43652 +
            0x52f6466ff272b087,
43653 +
            0x2d1644616b19d845,
43654 +
            0xd31604249e4bb409,
43655 +
            0x93e625012857364e,
43656 +
            0x6de66544dd055a02,
43657 +
            0x9066adb0a75e4dde,
43658 +
            0x6e66edf5520c2192,
43659 +
            0x2e96ccd0e410a3d5,
43660 +
            0xd0968c951142cf99,
43661 +
            0xaf768e9b8829a75b,
43662 +
            0x5176cede7d7bcb17,
43663 +
            0x1186effbcb674950,
43664 +
            0xef86afbe3e35251c,
43665 +
            0xee46ebe6f9b198d4,
43666 +
            0x1046aba30ce3f498,
43667 +
            0x50b68a86baff76df,
43668 +
            0xaeb6cac34fad1a93,
43669 +
            0xd156c8cdd6c67251,
43670 +
            0x2f56888823941e1d,
43671 +
            0x6fa6a9ad95889c5a,
43672 +
            0x91a6e9e860daf016,
43673 +
            0xd657d9aec8d48571,
43674 +
            0x285799eb3d86e93d,
43675 +
            0x68a7b8ce8b9a6b7a,
43676 +
            0x96a7f88b7ec80736,
43677 +
            0xe947fa85e7a36ff4,
43678 +
            0x1747bac012f103b8,
43679 +
            0x57b79be5a4ed81ff,
43680 +
            0xa9b7dba051bfedb3,
43681 +
            0xa8779ff8963b507b,
43682 +
            0x5677dfbd63693c37,
43683 +
            0x1687fe98d575be70,
43684 +
            0xe887bedd2027d23c,
43685 +
            0x9767bcd3b94cbafe,
43686 +
            0x6967fc964c1ed6b2,
43687 +
            0x2997ddb3fa0254f5,
43688 +
            0xd7979df60f5038b9,
43689 +
            0x2a175502750b2f65,
43690 +
            0xd417154780594329,
43691 +
            0x94e734623645c16e,
43692 +
            0x6ae77427c317ad22,
43693 +
            0x150776295a7cc5e0,
43694 +
            0xeb07366caf2ea9ac,
43695 +
            0xabf7174919322beb,
43696 +
            0x55f7570cec6047a7,
43697 +
            0x543713542be4fa6f,
43698 +
            0xaa375311deb69623,
43699 +
            0xeac7723468aa1464,
43700 +
            0x14c732719df87828,
43701 +
            0x6b27307f049310ea,
43702 +
            0x9527703af1c17ca6,
43703 +
            0xd5d7511f47ddfee1,
43704 +
            0x2bd7115ab28f92ad,
43705 +
            0x5a35319217c1142f,
43706 +
            0xa43571d7e2937863,
43707 +
            0xe4c550f2548ffa24,
43708 +
            0x1ac510b7a1dd9668,
43709 +
            0x652512b938b6feaa,
43710 +
            0x9b2552fccde492e6,
43711 +
            0xdbd573d97bf810a1,
43712 +
            0x25d5339c8eaa7ced,
43713 +
            0x241577c4492ec125,
43714 +
            0xda153781bc7cad69,
43715 +
            0x9ae516a40a602f2e,
43716 +
            0x64e556e1ff324362,
43717 +
            0x1b0554ef66592ba0,
43718 +
            0xe50514aa930b47ec,
43719 +
            0xa5f5358f2517c5ab,
43720 +
            0x5bf575cad045a9e7,
43721 +
            0xa675bd3eaa1ebe3b,
43722 +
            0x5875fd7b5f4cd277,
43723 +
            0x1885dc5ee9505030,
43724 +
            0xe6859c1b1c023c7c,
43725 +
            0x99659e15856954be,
43726 +
            0x6765de50703b38f2,
43727 +
            0x2795ff75c627bab5,
43728 +
            0xd995bf303375d6f9,
43729 +
            0xd855fb68f4f16b31,
43730 +
            0x2655bb2d01a3077d,
43731 +
            0x66a59a08b7bf853a,
43732 +
            0x98a5da4d42ede976,
43733 +
            0xe745d843db8681b4,
43734 +
            0x194598062ed4edf8,
43735 +
            0x59b5b92398c86fbf,
43736 +
            0xa7b5f9666d9a03f3,
43737 +
            0xe044c920c5947694,
43738 +
            0x1e44896530c61ad8,
43739 +
            0x5eb4a84086da989f,
43740 +
            0xa0b4e8057388f4d3,
43741 +
            0xdf54ea0beae39c11,
43742 +
            0x2154aa4e1fb1f05d,
43743 +
            0x61a48b6ba9ad721a,
43744 +
            0x9fa4cb2e5cff1e56,
43745 +
            0x9e648f769b7ba39e,
43746 +
            0x6064cf336e29cfd2,
43747 +
            0x2094ee16d8354d95,
43748 +
            0xde94ae532d6721d9,
43749 +
            0xa174ac5db40c491b,
43750 +
            0x5f74ec18415e2557,
43751 +
            0x1f84cd3df742a710,
43752 +
            0xe1848d780210cb5c,
43753 +
            0x1c04458c784bdc80,
43754 +
            0xe20405c98d19b0cc,
43755 +
            0xa2f424ec3b05328b,
43756 +
            0x5cf464a9ce575ec7,
43757 +
            0x231466a7573c3605,
43758 +
            0xdd1426e2a26e5a49,
43759 +
            0x9de407c71472d80e,
43760 +
            0x63e44782e120b442,
43761 +
            0x622403da26a4098a,
43762 +
            0x9c24439fd3f665c6,
43763 +
            0xdcd462ba65eae781,
43764 +
            0x22d422ff90b88bcd,
43765 +
            0x5d3420f109d3e30f,
43766 +
            0xa33460b4fc818f43,
43767 +
            0xe3c441914a9d0d04,
43768 +
            0x1dc401d4bfcf6148,
43769 +
        ],
43770 +
        [
43771 +
            0x0000000000000000,
43772 +
            0xd84c42383503cf94,
43773 +
            0xf268659bc3eda9bb,
43774 +
            0x2a2427a3f6ee662f,
43775 +
            0xa6202adc2e3165e5,
43776 +
            0x7e6c68e41b32aa71,
43777 +
            0x54484f47eddccc5e,
43778 +
            0x8c040d7fd8df03ca,
43779 +
            0x0eb0b453f588fd59,
43780 +
            0xd6fcf66bc08b32cd,
43781 +
            0xfcd8d1c8366554e2,
43782 +
            0x249493f003669b76,
43783 +
            0xa8909e8fdbb998bc,
43784 +
            0x70dcdcb7eeba5728,
43785 +
            0x5af8fb1418543107,
43786 +
            0x82b4b92c2d57fe93,
43787 +
            0x1d6168a7eb11fab2,
43788 +
            0xc52d2a9fde123526,
43789 +
            0xef090d3c28fc5309,
43790 +
            0x37454f041dff9c9d,
43791 +
            0xbb41427bc5209f57,
43792 +
            0x630d0043f02350c3,
43793 +
            0x492927e006cd36ec,
43794 +
            0x916565d833cef978,
43795 +
            0x13d1dcf41e9907eb,
43796 +
            0xcb9d9ecc2b9ac87f,
43797 +
            0xe1b9b96fdd74ae50,
43798 +
            0x39f5fb57e87761c4,
43799 +
            0xb5f1f62830a8620e,
43800 +
            0x6dbdb41005abad9a,
43801 +
            0x479993b3f345cbb5,
43802 +
            0x9fd5d18bc6460421,
43803 +
            0x3ac2d14fd623f564,
43804 +
            0xe28e9377e3203af0,
43805 +
            0xc8aab4d415ce5cdf,
43806 +
            0x10e6f6ec20cd934b,
43807 +
            0x9ce2fb93f8129081,
43808 +
            0x44aeb9abcd115f15,
43809 +
            0x6e8a9e083bff393a,
43810 +
            0xb6c6dc300efcf6ae,
43811 +
            0x3472651c23ab083d,
43812 +
            0xec3e272416a8c7a9,
43813 +
            0xc61a0087e046a186,
43814 +
            0x1e5642bfd5456e12,
43815 +
            0x92524fc00d9a6dd8,
43816 +
            0x4a1e0df83899a24c,
43817 +
            0x603a2a5bce77c463,
43818 +
            0xb8766863fb740bf7,
43819 +
            0x27a3b9e83d320fd6,
43820 +
            0xffeffbd00831c042,
43821 +
            0xd5cbdc73fedfa66d,
43822 +
            0x0d879e4bcbdc69f9,
43823 +
            0x8183933413036a33,
43824 +
            0x59cfd10c2600a5a7,
43825 +
            0x73ebf6afd0eec388,
43826 +
            0xaba7b497e5ed0c1c,
43827 +
            0x29130dbbc8baf28f,
43828 +
            0xf15f4f83fdb93d1b,
43829 +
            0xdb7b68200b575b34,
43830 +
            0x03372a183e5494a0,
43831 +
            0x8f332767e68b976a,
43832 +
            0x577f655fd38858fe,
43833 +
            0x7d5b42fc25663ed1,
43834 +
            0xa51700c41065f145,
43835 +
            0x7585a29fac47eac8,
43836 +
            0xadc9e0a79944255c,
43837 +
            0x87edc7046faa4373,
43838 +
            0x5fa1853c5aa98ce7,
43839 +
            0xd3a5884382768f2d,
43840 +
            0x0be9ca7bb77540b9,
43841 +
            0x21cdedd8419b2696,
43842 +
            0xf981afe07498e902,
43843 +
            0x7b3516cc59cf1791,
43844 +
            0xa37954f46cccd805,
43845 +
            0x895d73579a22be2a,
43846 +
            0x5111316faf2171be,
43847 +
            0xdd153c1077fe7274,
43848 +
            0x05597e2842fdbde0,
43849 +
            0x2f7d598bb413dbcf,
43850 +
            0xf7311bb38110145b,
43851 +
            0x68e4ca384756107a,
43852 +
            0xb0a888007255dfee,
43853 +
            0x9a8cafa384bbb9c1,
43854 +
            0x42c0ed9bb1b87655,
43855 +
            0xcec4e0e46967759f,
43856 +
            0x1688a2dc5c64ba0b,
43857 +
            0x3cac857faa8adc24,
43858 +
            0xe4e0c7479f8913b0,
43859 +
            0x66547e6bb2deed23,
43860 +
            0xbe183c5387dd22b7,
43861 +
            0x943c1bf071334498,
43862 +
            0x4c7059c844308b0c,
43863 +
            0xc07454b79cef88c6,
43864 +
            0x1838168fa9ec4752,
43865 +
            0x321c312c5f02217d,
43866 +
            0xea5073146a01eee9,
43867 +
            0x4f4773d07a641fac,
43868 +
            0x970b31e84f67d038,
43869 +
            0xbd2f164bb989b617,
43870 +
            0x656354738c8a7983,
43871 +
            0xe967590c54557a49,
43872 +
            0x312b1b346156b5dd,
43873 +
            0x1b0f3c9797b8d3f2,
43874 +
            0xc3437eafa2bb1c66,
43875 +
            0x41f7c7838fece2f5,
43876 +
            0x99bb85bbbaef2d61,
43877 +
            0xb39fa2184c014b4e,
43878 +
            0x6bd3e020790284da,
43879 +
            0xe7d7ed5fa1dd8710,
43880 +
            0x3f9baf6794de4884,
43881 +
            0x15bf88c462302eab,
43882 +
            0xcdf3cafc5733e13f,
43883 +
            0x52261b779175e51e,
43884 +
            0x8a6a594fa4762a8a,
43885 +
            0xa04e7eec52984ca5,
43886 +
            0x78023cd4679b8331,
43887 +
            0xf40631abbf4480fb,
43888 +
            0x2c4a73938a474f6f,
43889 +
            0x066e54307ca92940,
43890 +
            0xde22160849aae6d4,
43891 +
            0x5c96af2464fd1847,
43892 +
            0x84daed1c51fed7d3,
43893 +
            0xaefecabfa710b1fc,
43894 +
            0x76b2888792137e68,
43895 +
            0xfab685f84acc7da2,
43896 +
            0x22fac7c07fcfb236,
43897 +
            0x08dee0638921d419,
43898 +
            0xd092a25bbc221b8d,
43899 +
            0xeb0b453f588fd590,
43900 +
            0x334707076d8c1a04,
43901 +
            0x196320a49b627c2b,
43902 +
            0xc12f629cae61b3bf,
43903 +
            0x4d2b6fe376beb075,
43904 +
            0x95672ddb43bd7fe1,
43905 +
            0xbf430a78b55319ce,
43906 +
            0x670f48408050d65a,
43907 +
            0xe5bbf16cad0728c9,
43908 +
            0x3df7b3549804e75d,
43909 +
            0x17d394f76eea8172,
43910 +
            0xcf9fd6cf5be94ee6,
43911 +
            0x439bdbb083364d2c,
43912 +
            0x9bd79988b63582b8,
43913 +
            0xb1f3be2b40dbe497,
43914 +
            0x69bffc1375d82b03,
43915 +
            0xf66a2d98b39e2f22,
43916 +
            0x2e266fa0869de0b6,
43917 +
            0x0402480370738699,
43918 +
            0xdc4e0a3b4570490d,
43919 +
            0x504a07449daf4ac7,
43920 +
            0x8806457ca8ac8553,
43921 +
            0xa22262df5e42e37c,
43922 +
            0x7a6e20e76b412ce8,
43923 +
            0xf8da99cb4616d27b,
43924 +
            0x2096dbf373151def,
43925 +
            0x0ab2fc5085fb7bc0,
43926 +
            0xd2febe68b0f8b454,
43927 +
            0x5efab3176827b79e,
43928 +
            0x86b6f12f5d24780a,
43929 +
            0xac92d68cabca1e25,
43930 +
            0x74de94b49ec9d1b1,
43931 +
            0xd1c994708eac20f4,
43932 +
            0x0985d648bbafef60,
43933 +
            0x23a1f1eb4d41894f,
43934 +
            0xfbedb3d3784246db,
43935 +
            0x77e9beaca09d4511,
43936 +
            0xafa5fc94959e8a85,
43937 +
            0x8581db376370ecaa,
43938 +
            0x5dcd990f5673233e,
43939 +
            0xdf7920237b24ddad,
43940 +
            0x0735621b4e271239,
43941 +
            0x2d1145b8b8c97416,
43942 +
            0xf55d07808dcabb82,
43943 +
            0x79590aff5515b848,
43944 +
            0xa11548c7601677dc,
43945 +
            0x8b316f6496f811f3,
43946 +
            0x537d2d5ca3fbde67,
43947 +
            0xcca8fcd765bdda46,
43948 +
            0x14e4beef50be15d2,
43949 +
            0x3ec0994ca65073fd,
43950 +
            0xe68cdb749353bc69,
43951 +
            0x6a88d60b4b8cbfa3,
43952 +
            0xb2c494337e8f7037,
43953 +
            0x98e0b39088611618,
43954 +
            0x40acf1a8bd62d98c,
43955 +
            0xc21848849035271f,
43956 +
            0x1a540abca536e88b,
43957 +
            0x30702d1f53d88ea4,
43958 +
            0xe83c6f2766db4130,
43959 +
            0x64386258be0442fa,
43960 +
            0xbc7420608b078d6e,
43961 +
            0x965007c37de9eb41,
43962 +
            0x4e1c45fb48ea24d5,
43963 +
            0x9e8ee7a0f4c83f58,
43964 +
            0x46c2a598c1cbf0cc,
43965 +
            0x6ce6823b372596e3,
43966 +
            0xb4aac00302265977,
43967 +
            0x38aecd7cdaf95abd,
43968 +
            0xe0e28f44effa9529,
43969 +
            0xcac6a8e71914f306,
43970 +
            0x128aeadf2c173c92,
43971 +
            0x903e53f30140c201,
43972 +
            0x487211cb34430d95,
43973 +
            0x62563668c2ad6bba,
43974 +
            0xba1a7450f7aea42e,
43975 +
            0x361e792f2f71a7e4,
43976 +
            0xee523b171a726870,
43977 +
            0xc4761cb4ec9c0e5f,
43978 +
            0x1c3a5e8cd99fc1cb,
43979 +
            0x83ef8f071fd9c5ea,
43980 +
            0x5ba3cd3f2ada0a7e,
43981 +
            0x7187ea9cdc346c51,
43982 +
            0xa9cba8a4e937a3c5,
43983 +
            0x25cfa5db31e8a00f,
43984 +
            0xfd83e7e304eb6f9b,
43985 +
            0xd7a7c040f20509b4,
43986 +
            0x0feb8278c706c620,
43987 +
            0x8d5f3b54ea5138b3,
43988 +
            0x5513796cdf52f727,
43989 +
            0x7f375ecf29bc9108,
43990 +
            0xa77b1cf71cbf5e9c,
43991 +
            0x2b7f1188c4605d56,
43992 +
            0xf33353b0f16392c2,
43993 +
            0xd9177413078df4ed,
43994 +
            0x015b362b328e3b79,
43995 +
            0xa44c36ef22ebca3c,
43996 +
            0x7c0074d717e805a8,
43997 +
            0x56245374e1066387,
43998 +
            0x8e68114cd405ac13,
43999 +
            0x026c1c330cdaafd9,
44000 +
            0xda205e0b39d9604d,
44001 +
            0xf00479a8cf370662,
44002 +
            0x28483b90fa34c9f6,
44003 +
            0xaafc82bcd7633765,
44004 +
            0x72b0c084e260f8f1,
44005 +
            0x5894e727148e9ede,
44006 +
            0x80d8a51f218d514a,
44007 +
            0x0cdca860f9525280,
44008 +
            0xd490ea58cc519d14,
44009 +
            0xfeb4cdfb3abffb3b,
44010 +
            0x26f88fc30fbc34af,
44011 +
            0xb92d5e48c9fa308e,
44012 +
            0x61611c70fcf9ff1a,
44013 +
            0x4b453bd30a179935,
44014 +
            0x930979eb3f1456a1,
44015 +
            0x1f0d7494e7cb556b,
44016 +
            0xc74136acd2c89aff,
44017 +
            0xed65110f2426fcd0,
44018 +
            0x3529533711253344,
44019 +
            0xb79dea1b3c72cdd7,
44020 +
            0x6fd1a82309710243,
44021 +
            0x45f58f80ff9f646c,
44022 +
            0x9db9cdb8ca9cabf8,
44023 +
            0x11bdc0c71243a832,
44024 +
            0xc9f182ff274067a6,
44025 +
            0xe3d5a55cd1ae0189,
44026 +
            0x3b99e764e4adce1d,
44027 +
        ],
44028 +
        [
44029 +
            0x0000000000000000,
44030 +
            0x94e66b9518f59db3,
44031 +
            0x6b3c36c198010df5,
44032 +
            0xffda5d5480f49046,
44033 +
            0xd6786d8330021bea,
44034 +
            0x429e061628f78659,
44035 +
            0xbd445b42a803161f,
44036 +
            0x29a230d7b0f68bac,
44037 +
            0xee003aedc9ee0147,
44038 +
            0x7ae65178d11b9cf4,
44039 +
            0x853c0c2c51ef0cb2,
44040 +
            0x11da67b9491a9101,
44041 +
            0x3878576ef9ec1aad,
44042 +
            0xac9e3cfbe119871e,
44043 +
            0x534461af61ed1758,
44044 +
            0xc7a20a3a79188aeb,
44045 +
            0x9ef094303a36341d,
44046 +
            0x0a16ffa522c3a9ae,
44047 +
            0xf5cca2f1a23739e8,
44048 +
            0x612ac964bac2a45b,
44049 +
            0x4888f9b30a342ff7,
44050 +
            0xdc6e922612c1b244,
44051 +
            0x23b4cf7292352202,
44052 +
            0xb752a4e78ac0bfb1,
44053 +
            0x70f0aeddf3d8355a,
44054 +
            0xe416c548eb2da8e9,
44055 +
            0x1bcc981c6bd938af,
44056 +
            0x8f2af389732ca51c,
44057 +
            0xa688c35ec3da2eb0,
44058 +
            0x326ea8cbdb2fb303,
44059 +
            0xcdb4f59f5bdb2345,
44060 +
            0x59529e0a432ebef6,
44061 +
            0x7f11c98bdd865ea9,
44062 +
            0xebf7a21ec573c31a,
44063 +
            0x142dff4a4587535c,
44064 +
            0x80cb94df5d72ceef,
44065 +
            0xa969a408ed844543,
44066 +
            0x3d8fcf9df571d8f0,
44067 +
            0xc25592c9758548b6,
44068 +
            0x56b3f95c6d70d505,
44069 +
            0x9111f36614685fee,
44070 +
            0x05f798f30c9dc25d,
44071 +
            0xfa2dc5a78c69521b,
44072 +
            0x6ecbae32949ccfa8,
44073 +
            0x47699ee5246a4404,
44074 +
            0xd38ff5703c9fd9b7,
44075 +
            0x2c55a824bc6b49f1,
44076 +
            0xb8b3c3b1a49ed442,
44077 +
            0xe1e15dbbe7b06ab4,
44078 +
            0x7507362eff45f707,
44079 +
            0x8add6b7a7fb16741,
44080 +
            0x1e3b00ef6744faf2,
44081 +
            0x37993038d7b2715e,
44082 +
            0xa37f5badcf47eced,
44083 +
            0x5ca506f94fb37cab,
44084 +
            0xc8436d6c5746e118,
44085 +
            0x0fe167562e5e6bf3,
44086 +
            0x9b070cc336abf640,
44087 +
            0x64dd5197b65f6606,
44088 +
            0xf03b3a02aeaafbb5,
44089 +
            0xd9990ad51e5c7019,
44090 +
            0x4d7f614006a9edaa,
44091 +
            0xb2a53c14865d7dec,
44092 +
            0x264357819ea8e05f,
44093 +
            0xfe239317bb0cbd52,
44094 +
            0x6ac5f882a3f920e1,
44095 +
            0x951fa5d6230db0a7,
44096 +
            0x01f9ce433bf82d14,
44097 +
            0x285bfe948b0ea6b8,
44098 +
            0xbcbd950193fb3b0b,
44099 +
            0x4367c855130fab4d,
44100 +
            0xd781a3c00bfa36fe,
44101 +
            0x1023a9fa72e2bc15,
44102 +
            0x84c5c26f6a1721a6,
44103 +
            0x7b1f9f3beae3b1e0,
44104 +
            0xeff9f4aef2162c53,
44105 +
            0xc65bc47942e0a7ff,
44106 +
            0x52bdafec5a153a4c,
44107 +
            0xad67f2b8dae1aa0a,
44108 +
            0x3981992dc21437b9,
44109 +
            0x60d30727813a894f,
44110 +
            0xf4356cb299cf14fc,
44111 +
            0x0bef31e6193b84ba,
44112 +
            0x9f095a7301ce1909,
44113 +
            0xb6ab6aa4b13892a5,
44114 +
            0x224d0131a9cd0f16,
44115 +
            0xdd975c6529399f50,
44116 +
            0x497137f031cc02e3,
44117 +
            0x8ed33dca48d48808,
44118 +
            0x1a35565f502115bb,
44119 +
            0xe5ef0b0bd0d585fd,
44120 +
            0x7109609ec820184e,
44121 +
            0x58ab504978d693e2,
44122 +
            0xcc4d3bdc60230e51,
44123 +
            0x33976688e0d79e17,
44124 +
            0xa7710d1df82203a4,
44125 +
            0x81325a9c668ae3fb,
44126 +
            0x15d431097e7f7e48,
44127 +
            0xea0e6c5dfe8bee0e,
44128 +
            0x7ee807c8e67e73bd,
44129 +
            0x574a371f5688f811,
44130 +
            0xc3ac5c8a4e7d65a2,
44131 +
            0x3c7601dece89f5e4,
44132 +
            0xa8906a4bd67c6857,
44133 +
            0x6f326071af64e2bc,
44134 +
            0xfbd40be4b7917f0f,
44135 +
            0x040e56b03765ef49,
44136 +
            0x90e83d252f9072fa,
44137 +
            0xb94a0df29f66f956,
44138 +
            0x2dac6667879364e5,
44139 +
            0xd2763b330767f4a3,
44140 +
            0x469050a61f926910,
44141 +
            0x1fc2ceac5cbcd7e6,
44142 +
            0x8b24a53944494a55,
44143 +
            0x74fef86dc4bdda13,
44144 +
            0xe01893f8dc4847a0,
44145 +
            0xc9baa32f6cbecc0c,
44146 +
            0x5d5cc8ba744b51bf,
44147 +
            0xa28695eef4bfc1f9,
44148 +
            0x3660fe7bec4a5c4a,
44149 +
            0xf1c2f4419552d6a1,
44150 +
            0x65249fd48da74b12,
44151 +
            0x9afec2800d53db54,
44152 +
            0x0e18a91515a646e7,
44153 +
            0x27ba99c2a550cd4b,
44154 +
            0xb35cf257bda550f8,
44155 +
            0x4c86af033d51c0be,
44156 +
            0xd860c49625a45d0d,
44157 +
            0xbeb7c7c4dff34c37,
44158 +
            0x2a51ac51c706d184,
44159 +
            0xd58bf10547f241c2,
44160 +
            0x416d9a905f07dc71,
44161 +
            0x68cfaa47eff157dd,
44162 +
            0xfc29c1d2f704ca6e,
44163 +
            0x03f39c8677f05a28,
44164 +
            0x9715f7136f05c79b,
44165 +
            0x50b7fd29161d4d70,
44166 +
            0xc45196bc0ee8d0c3,
44167 +
            0x3b8bcbe88e1c4085,
44168 +
            0xaf6da07d96e9dd36,
44169 +
            0x86cf90aa261f569a,
44170 +
            0x1229fb3f3eeacb29,
44171 +
            0xedf3a66bbe1e5b6f,
44172 +
            0x7915cdfea6ebc6dc,
44173 +
            0x204753f4e5c5782a,
44174 +
            0xb4a13861fd30e599,
44175 +
            0x4b7b65357dc475df,
44176 +
            0xdf9d0ea06531e86c,
44177 +
            0xf63f3e77d5c763c0,
44178 +
            0x62d955e2cd32fe73,
44179 +
            0x9d0308b64dc66e35,
44180 +
            0x09e563235533f386,
44181 +
            0xce4769192c2b796d,
44182 +
            0x5aa1028c34dee4de,
44183 +
            0xa57b5fd8b42a7498,
44184 +
            0x319d344dacdfe92b,
44185 +
            0x183f049a1c296287,
44186 +
            0x8cd96f0f04dcff34,
44187 +
            0x7303325b84286f72,
44188 +
            0xe7e559ce9cddf2c1,
44189 +
            0xc1a60e4f0275129e,
44190 +
            0x554065da1a808f2d,
44191 +
            0xaa9a388e9a741f6b,
44192 +
            0x3e7c531b828182d8,
44193 +
            0x17de63cc32770974,
44194 +
            0x833808592a8294c7,
44195 +
            0x7ce2550daa760481,
44196 +
            0xe8043e98b2839932,
44197 +
            0x2fa634a2cb9b13d9,
44198 +
            0xbb405f37d36e8e6a,
44199 +
            0x449a0263539a1e2c,
44200 +
            0xd07c69f64b6f839f,
44201 +
            0xf9de5921fb990833,
44202 +
            0x6d3832b4e36c9580,
44203 +
            0x92e26fe0639805c6,
44204 +
            0x060404757b6d9875,
44205 +
            0x5f569a7f38432683,
44206 +
            0xcbb0f1ea20b6bb30,
44207 +
            0x346aacbea0422b76,
44208 +
            0xa08cc72bb8b7b6c5,
44209 +
            0x892ef7fc08413d69,
44210 +
            0x1dc89c6910b4a0da,
44211 +
            0xe212c13d9040309c,
44212 +
            0x76f4aaa888b5ad2f,
44213 +
            0xb156a092f1ad27c4,
44214 +
            0x25b0cb07e958ba77,
44215 +
            0xda6a965369ac2a31,
44216 +
            0x4e8cfdc67159b782,
44217 +
            0x672ecd11c1af3c2e,
44218 +
            0xf3c8a684d95aa19d,
44219 +
            0x0c12fbd059ae31db,
44220 +
            0x98f49045415bac68,
44221 +
            0x409454d364fff165,
44222 +
            0xd4723f467c0a6cd6,
44223 +
            0x2ba86212fcfefc90,
44224 +
            0xbf4e0987e40b6123,
44225 +
            0x96ec395054fdea8f,
44226 +
            0x020a52c54c08773c,
44227 +
            0xfdd00f91ccfce77a,
44228 +
            0x69366404d4097ac9,
44229 +
            0xae946e3ead11f022,
44230 +
            0x3a7205abb5e46d91,
44231 +
            0xc5a858ff3510fdd7,
44232 +
            0x514e336a2de56064,
44233 +
            0x78ec03bd9d13ebc8,
44234 +
            0xec0a682885e6767b,
44235 +
            0x13d0357c0512e63d,
44236 +
            0x87365ee91de77b8e,
44237 +
            0xde64c0e35ec9c578,
44238 +
            0x4a82ab76463c58cb,
44239 +
            0xb558f622c6c8c88d,
44240 +
            0x21be9db7de3d553e,
44241 +
            0x081cad606ecbde92,
44242 +
            0x9cfac6f5763e4321,
44243 +
            0x63209ba1f6cad367,
44244 +
            0xf7c6f034ee3f4ed4,
44245 +
            0x3064fa0e9727c43f,
44246 +
            0xa482919b8fd2598c,
44247 +
            0x5b58cccf0f26c9ca,
44248 +
            0xcfbea75a17d35479,
44249 +
            0xe61c978da725dfd5,
44250 +
            0x72fafc18bfd04266,
44251 +
            0x8d20a14c3f24d220,
44252 +
            0x19c6cad927d14f93,
44253 +
            0x3f859d58b979afcc,
44254 +
            0xab63f6cda18c327f,
44255 +
            0x54b9ab992178a239,
44256 +
            0xc05fc00c398d3f8a,
44257 +
            0xe9fdf0db897bb426,
44258 +
            0x7d1b9b4e918e2995,
44259 +
            0x82c1c61a117ab9d3,
44260 +
            0x1627ad8f098f2460,
44261 +
            0xd185a7b57097ae8b,
44262 +
            0x4563cc2068623338,
44263 +
            0xbab99174e896a37e,
44264 +
            0x2e5ffae1f0633ecd,
44265 +
            0x07fdca364095b561,
44266 +
            0x931ba1a3586028d2,
44267 +
            0x6cc1fcf7d894b894,
44268 +
            0xf8279762c0612527,
44269 +
            0xa1750968834f9bd1,
44270 +
            0x359362fd9bba0662,
44271 +
            0xca493fa91b4e9624,
44272 +
            0x5eaf543c03bb0b97,
44273 +
            0x770d64ebb34d803b,
44274 +
            0xe3eb0f7eabb81d88,
44275 +
            0x1c31522a2b4c8dce,
44276 +
            0x88d739bf33b9107d,
44277 +
            0x4f7533854aa19a96,
44278 +
            0xdb93581052540725,
44279 +
            0x24490544d2a09763,
44280 +
            0xb0af6ed1ca550ad0,
44281 +
            0x990d5e067aa3817c,
44282 +
            0x0deb359362561ccf,
44283 +
            0xf23168c7e2a28c89,
44284 +
            0x66d70352fa57113a,
44285 +
        ],
44286 +
        [
44287 +
            0x0000000000000000,
44288 +
            0x3f9f6e62160caefd,
44289 +
            0x7f3edcc42c195dfa,
44290 +
            0x40a1b2a63a15f307,
44291 +
            0xfe7db9885832bbf4,
44292 +
            0xc1e2d7ea4e3e1509,
44293 +
            0x8143654c742be60e,
44294 +
            0xbedc0b2e622748f3,
44295 +
            0xbe0b92fb198f417b,
44296 +
            0x8194fc990f83ef86,
44297 +
            0xc1354e3f35961c81,
44298 +
            0xfeaa205d239ab27c,
44299 +
            0x40762b7341bdfa8f,
44300 +
            0x7fe9451157b15472,
44301 +
            0x3f48f7b76da4a775,
44302 +
            0x00d799d57ba80988,
44303 +
            0x3ee7c41d9af4b465,
44304 +
            0x0178aa7f8cf81a98,
44305 +
            0x41d918d9b6ede99f,
44306 +
            0x7e4676bba0e14762,
44307 +
            0xc09a7d95c2c60f91,
44308 +
            0xff0513f7d4caa16c,
44309 +
            0xbfa4a151eedf526b,
44310 +
            0x803bcf33f8d3fc96,
44311 +
            0x80ec56e6837bf51e,
44312 +
            0xbf73388495775be3,
44313 +
            0xffd28a22af62a8e4,
44314 +
            0xc04de440b96e0619,
44315 +
            0x7e91ef6edb494eea,
44316 +
            0x410e810ccd45e017,
44317 +
            0x01af33aaf7501310,
44318 +
            0x3e305dc8e15cbded,
44319 +
            0x7dcf883b35e968ca,
44320 +
            0x4250e65923e5c637,
44321 +
            0x02f154ff19f03530,
44322 +
            0x3d6e3a9d0ffc9bcd,
44323 +
            0x83b231b36ddbd33e,
44324 +
            0xbc2d5fd17bd77dc3,
44325 +
            0xfc8ced7741c28ec4,
44326 +
            0xc313831557ce2039,
44327 +
            0xc3c41ac02c6629b1,
44328 +
            0xfc5b74a23a6a874c,
44329 +
            0xbcfac604007f744b,
44330 +
            0x8365a8661673dab6,
44331 +
            0x3db9a34874549245,
44332 +
            0x0226cd2a62583cb8,
44333 +
            0x42877f8c584dcfbf,
44334 +
            0x7d1811ee4e416142,
44335 +
            0x43284c26af1ddcaf,
44336 +
            0x7cb72244b9117252,
44337 +
            0x3c1690e283048155,
44338 +
            0x0389fe8095082fa8,
44339 +
            0xbd55f5aef72f675b,
44340 +
            0x82ca9bcce123c9a6,
44341 +
            0xc26b296adb363aa1,
44342 +
            0xfdf44708cd3a945c,
44343 +
            0xfd23deddb6929dd4,
44344 +
            0xc2bcb0bfa09e3329,
44345 +
            0x821d02199a8bc02e,
44346 +
            0xbd826c7b8c876ed3,
44347 +
            0x035e6755eea02620,
44348 +
            0x3cc10937f8ac88dd,
44349 +
            0x7c60bb91c2b97bda,
44350 +
            0x43ffd5f3d4b5d527,
44351 +
            0xfb9f10766bd2d194,
44352 +
            0xc4007e147dde7f69,
44353 +
            0x84a1ccb247cb8c6e,
44354 +
            0xbb3ea2d051c72293,
44355 +
            0x05e2a9fe33e06a60,
44356 +
            0x3a7dc79c25ecc49d,
44357 +
            0x7adc753a1ff9379a,
44358 +
            0x45431b5809f59967,
44359 +
            0x4594828d725d90ef,
44360 +
            0x7a0becef64513e12,
44361 +
            0x3aaa5e495e44cd15,
44362 +
            0x0535302b484863e8,
44363 +
            0xbbe93b052a6f2b1b,
44364 +
            0x847655673c6385e6,
44365 +
            0xc4d7e7c1067676e1,
44366 +
            0xfb4889a3107ad81c,
44367 +
            0xc578d46bf12665f1,
44368 +
            0xfae7ba09e72acb0c,
44369 +
            0xba4608afdd3f380b,
44370 +
            0x85d966cdcb3396f6,
44371 +
            0x3b056de3a914de05,
44372 +
            0x049a0381bf1870f8,
44373 +
            0x443bb127850d83ff,
44374 +
            0x7ba4df4593012d02,
44375 +
            0x7b734690e8a9248a,
44376 +
            0x44ec28f2fea58a77,
44377 +
            0x044d9a54c4b07970,
44378 +
            0x3bd2f436d2bcd78d,
44379 +
            0x850eff18b09b9f7e,
44380 +
            0xba91917aa6973183,
44381 +
            0xfa3023dc9c82c284,
44382 +
            0xc5af4dbe8a8e6c79,
44383 +
            0x8650984d5e3bb95e,
44384 +
            0xb9cff62f483717a3,
44385 +
            0xf96e44897222e4a4,
44386 +
            0xc6f12aeb642e4a59,
44387 +
            0x782d21c5060902aa,
44388 +
            0x47b24fa71005ac57,
44389 +
            0x0713fd012a105f50,
44390 +
            0x388c93633c1cf1ad,
44391 +
            0x385b0ab647b4f825,
44392 +
            0x07c464d451b856d8,
44393 +
            0x4765d6726bada5df,
44394 +
            0x78fab8107da10b22,
44395 +
            0xc626b33e1f8643d1,
44396 +
            0xf9b9dd5c098aed2c,
44397 +
            0xb9186ffa339f1e2b,
44398 +
            0x868701982593b0d6,
44399 +
            0xb8b75c50c4cf0d3b,
44400 +
            0x87283232d2c3a3c6,
44401 +
            0xc7898094e8d650c1,
44402 +
            0xf816eef6fedafe3c,
44403 +
            0x46cae5d89cfdb6cf,
44404 +
            0x79558bba8af11832,
44405 +
            0x39f4391cb0e4eb35,
44406 +
            0x066b577ea6e845c8,
44407 +
            0x06bcceabdd404c40,
44408 +
            0x3923a0c9cb4ce2bd,
44409 +
            0x7982126ff15911ba,
44410 +
            0x461d7c0de755bf47,
44411 +
            0xf8c177238572f7b4,
44412 +
            0xc75e1941937e5949,
44413 +
            0x87ffabe7a96baa4e,
44414 +
            0xb860c585bf6704b3,
44415 +
            0xb5cec1077e4f95bb,
44416 +
            0x8a51af6568433b46,
44417 +
            0xcaf01dc35256c841,
44418 +
            0xf56f73a1445a66bc,
44419 +
            0x4bb3788f267d2e4f,
44420 +
            0x742c16ed307180b2,
44421 +
            0x348da44b0a6473b5,
44422 +
            0x0b12ca291c68dd48,
44423 +
            0x0bc553fc67c0d4c0,
44424 +
            0x345a3d9e71cc7a3d,
44425 +
            0x74fb8f384bd9893a,
44426 +
            0x4b64e15a5dd527c7,
44427 +
            0xf5b8ea743ff26f34,
44428 +
            0xca27841629fec1c9,
44429 +
            0x8a8636b013eb32ce,
44430 +
            0xb51958d205e79c33,
44431 +
            0x8b29051ae4bb21de,
44432 +
            0xb4b66b78f2b78f23,
44433 +
            0xf417d9dec8a27c24,
44434 +
            0xcb88b7bcdeaed2d9,
44435 +
            0x7554bc92bc899a2a,
44436 +
            0x4acbd2f0aa8534d7,
44437 +
            0x0a6a60569090c7d0,
44438 +
            0x35f50e34869c692d,
44439 +
            0x352297e1fd3460a5,
44440 +
            0x0abdf983eb38ce58,
44441 +
            0x4a1c4b25d12d3d5f,
44442 +
            0x75832547c72193a2,
44443 +
            0xcb5f2e69a506db51,
44444 +
            0xf4c0400bb30a75ac,
44445 +
            0xb461f2ad891f86ab,
44446 +
            0x8bfe9ccf9f132856,
44447 +
            0xc801493c4ba6fd71,
44448 +
            0xf79e275e5daa538c,
44449 +
            0xb73f95f867bfa08b,
44450 +
            0x88a0fb9a71b30e76,
44451 +
            0x367cf0b413944685,
44452 +
            0x09e39ed60598e878,
44453 +
            0x49422c703f8d1b7f,
44454 +
            0x76dd42122981b582,
44455 +
            0x760adbc75229bc0a,
44456 +
            0x4995b5a5442512f7,
44457 +
            0x093407037e30e1f0,
44458 +
            0x36ab6961683c4f0d,
44459 +
            0x8877624f0a1b07fe,
44460 +
            0xb7e80c2d1c17a903,
44461 +
            0xf749be8b26025a04,
44462 +
            0xc8d6d0e9300ef4f9,
44463 +
            0xf6e68d21d1524914,
44464 +
            0xc979e343c75ee7e9,
44465 +
            0x89d851e5fd4b14ee,
44466 +
            0xb6473f87eb47ba13,
44467 +
            0x089b34a98960f2e0,
44468 +
            0x37045acb9f6c5c1d,
44469 +
            0x77a5e86da579af1a,
44470 +
            0x483a860fb37501e7,
44471 +
            0x48ed1fdac8dd086f,
44472 +
            0x777271b8ded1a692,
44473 +
            0x37d3c31ee4c45595,
44474 +
            0x084cad7cf2c8fb68,
44475 +
            0xb690a65290efb39b,
44476 +
            0x890fc83086e31d66,
44477 +
            0xc9ae7a96bcf6ee61,
44478 +
            0xf63114f4aafa409c,
44479 +
            0x4e51d171159d442f,
44480 +
            0x71cebf130391ead2,
44481 +
            0x316f0db5398419d5,
44482 +
            0x0ef063d72f88b728,
44483 +
            0xb02c68f94dafffdb,
44484 +
            0x8fb3069b5ba35126,
44485 +
            0xcf12b43d61b6a221,
44486 +
            0xf08dda5f77ba0cdc,
44487 +
            0xf05a438a0c120554,
44488 +
            0xcfc52de81a1eaba9,
44489 +
            0x8f649f4e200b58ae,
44490 +
            0xb0fbf12c3607f653,
44491 +
            0x0e27fa025420bea0,
44492 +
            0x31b89460422c105d,
44493 +
            0x711926c67839e35a,
44494 +
            0x4e8648a46e354da7,
44495 +
            0x70b6156c8f69f04a,
44496 +
            0x4f297b0e99655eb7,
44497 +
            0x0f88c9a8a370adb0,
44498 +
            0x3017a7cab57c034d,
44499 +
            0x8ecbace4d75b4bbe,
44500 +
            0xb154c286c157e543,
44501 +
            0xf1f57020fb421644,
44502 +
            0xce6a1e42ed4eb8b9,
44503 +
            0xcebd879796e6b131,
44504 +
            0xf122e9f580ea1fcc,
44505 +
            0xb1835b53baffeccb,
44506 +
            0x8e1c3531acf34236,
44507 +
            0x30c03e1fced40ac5,
44508 +
            0x0f5f507dd8d8a438,
44509 +
            0x4ffee2dbe2cd573f,
44510 +
            0x70618cb9f4c1f9c2,
44511 +
            0x339e594a20742ce5,
44512 +
            0x0c01372836788218,
44513 +
            0x4ca0858e0c6d711f,
44514 +
            0x733febec1a61dfe2,
44515 +
            0xcde3e0c278469711,
44516 +
            0xf27c8ea06e4a39ec,
44517 +
            0xb2dd3c06545fcaeb,
44518 +
            0x8d42526442536416,
44519 +
            0x8d95cbb139fb6d9e,
44520 +
            0xb20aa5d32ff7c363,
44521 +
            0xf2ab177515e23064,
44522 +
            0xcd34791703ee9e99,
44523 +
            0x73e8723961c9d66a,
44524 +
            0x4c771c5b77c57897,
44525 +
            0x0cd6aefd4dd08b90,
44526 +
            0x3349c09f5bdc256d,
44527 +
            0x0d799d57ba809880,
44528 +
            0x32e6f335ac8c367d,
44529 +
            0x724741939699c57a,
44530 +
            0x4dd82ff180956b87,
44531 +
            0xf30424dfe2b22374,
44532 +
            0xcc9b4abdf4be8d89,
44533 +
            0x8c3af81bceab7e8e,
44534 +
            0xb3a59679d8a7d073,
44535 +
            0xb3720faca30fd9fb,
44536 +
            0x8ced61ceb5037706,
44537 +
            0xcc4cd3688f168401,
44538 +
            0xf3d3bd0a991a2afc,
44539 +
            0x4d0fb624fb3d620f,
44540 +
            0x7290d846ed31ccf2,
44541 +
            0x32316ae0d7243ff5,
44542 +
            0x0dae0482c1289108,
44543 +
        ],
44544 +
        [
44545 +
            0x0000000000000000,
44546 +
            0x296d63e555751de5,
44547 +
            0x52dac7caaaea3bca,
44548 +
            0x7bb7a42fff9f262f,
44549 +
            0xa5b58f9555d47794,
44550 +
            0x8cd8ec7000a16a71,
44551 +
            0xf76f485fff3e4c5e,
44552 +
            0xde022bbaaa4b51bb,
44553 +
            0x099bfec10242d9bb,
44554 +
            0x20f69d245737c45e,
44555 +
            0x5b41390ba8a8e271,
44556 +
            0x722c5aeefdddff94,
44557 +
            0xac2e71545796ae2f,
44558 +
            0x854312b102e3b3ca,
44559 +
            0xfef4b69efd7c95e5,
44560 +
            0xd799d57ba8098800,
44561 +
            0x1337fd820485b376,
44562 +
            0x3a5a9e6751f0ae93,
44563 +
            0x41ed3a48ae6f88bc,
44564 +
            0x688059adfb1a9559,
44565 +
            0xb68272175151c4e2,
44566 +
            0x9fef11f20424d907,
44567 +
            0xe458b5ddfbbbff28,
44568 +
            0xcd35d638aecee2cd,
44569 +
            0x1aac034306c76acd,
44570 +
            0x33c160a653b27728,
44571 +
            0x4876c489ac2d5107,
44572 +
            0x611ba76cf9584ce2,
44573 +
            0xbf198cd653131d59,
44574 +
            0x9674ef33066600bc,
44575 +
            0xedc34b1cf9f92693,
44576 +
            0xc4ae28f9ac8c3b76,
44577 +
            0x266ffb04090b66ec,
44578 +
            0x0f0298e15c7e7b09,
44579 +
            0x74b53ccea3e15d26,
44580 +
            0x5dd85f2bf69440c3,
44581 +
            0x83da74915cdf1178,
44582 +
            0xaab7177409aa0c9d,
44583 +
            0xd100b35bf6352ab2,
44584 +
            0xf86dd0bea3403757,
44585 +
            0x2ff405c50b49bf57,
44586 +
            0x069966205e3ca2b2,
44587 +
            0x7d2ec20fa1a3849d,
44588 +
            0x5443a1eaf4d69978,
44589 +
            0x8a418a505e9dc8c3,
44590 +
            0xa32ce9b50be8d526,
44591 +
            0xd89b4d9af477f309,
44592 +
            0xf1f62e7fa102eeec,
44593 +
            0x355806860d8ed59a,
44594 +
            0x1c35656358fbc87f,
44595 +
            0x6782c14ca764ee50,
44596 +
            0x4eefa2a9f211f3b5,
44597 +
            0x90ed8913585aa20e,
44598 +
            0xb980eaf60d2fbfeb,
44599 +
            0xc2374ed9f2b099c4,
44600 +
            0xeb5a2d3ca7c58421,
44601 +
            0x3cc3f8470fcc0c21,
44602 +
            0x15ae9ba25ab911c4,
44603 +
            0x6e193f8da52637eb,
44604 +
            0x47745c68f0532a0e,
44605 +
            0x997677d25a187bb5,
44606 +
            0xb01b14370f6d6650,
44607 +
            0xcbacb018f0f2407f,
44608 +
            0xe2c1d3fda5875d9a,
44609 +
            0x4cdff6081216cdd8,
44610 +
            0x65b295ed4763d03d,
44611 +
            0x1e0531c2b8fcf612,
44612 +
            0x37685227ed89ebf7,
44613 +
            0xe96a799d47c2ba4c,
44614 +
            0xc0071a7812b7a7a9,
44615 +
            0xbbb0be57ed288186,
44616 +
            0x92ddddb2b85d9c63,
44617 +
            0x454408c910541463,
44618 +
            0x6c296b2c45210986,
44619 +
            0x179ecf03babe2fa9,
44620 +
            0x3ef3ace6efcb324c,
44621 +
            0xe0f1875c458063f7,
44622 +
            0xc99ce4b910f57e12,
44623 +
            0xb22b4096ef6a583d,
44624 +
            0x9b462373ba1f45d8,
44625 +
            0x5fe80b8a16937eae,
44626 +
            0x7685686f43e6634b,
44627 +
            0x0d32cc40bc794564,
44628 +
            0x245fafa5e90c5881,
44629 +
            0xfa5d841f4347093a,
44630 +
            0xd330e7fa163214df,
44631 +
            0xa88743d5e9ad32f0,
44632 +
            0x81ea2030bcd82f15,
44633 +
            0x5673f54b14d1a715,
44634 +
            0x7f1e96ae41a4baf0,
44635 +
            0x04a93281be3b9cdf,
44636 +
            0x2dc45164eb4e813a,
44637 +
            0xf3c67ade4105d081,
44638 +
            0xdaab193b1470cd64,
44639 +
            0xa11cbd14ebefeb4b,
44640 +
            0x8871def1be9af6ae,
44641 +
            0x6ab00d0c1b1dab34,
44642 +
            0x43dd6ee94e68b6d1,
44643 +
            0x386acac6b1f790fe,
44644 +
            0x1107a923e4828d1b,
44645 +
            0xcf0582994ec9dca0,
44646 +
            0xe668e17c1bbcc145,
44647 +
            0x9ddf4553e423e76a,
44648 +
            0xb4b226b6b156fa8f,
44649 +
            0x632bf3cd195f728f,
44650 +
            0x4a4690284c2a6f6a,
44651 +
            0x31f13407b3b54945,
44652 +
            0x189c57e2e6c054a0,
44653 +
            0xc69e7c584c8b051b,
44654 +
            0xeff31fbd19fe18fe,
44655 +
            0x9444bb92e6613ed1,
44656 +
            0xbd29d877b3142334,
44657 +
            0x7987f08e1f981842,
44658 +
            0x50ea936b4aed05a7,
44659 +
            0x2b5d3744b5722388,
44660 +
            0x023054a1e0073e6d,
44661 +
            0xdc327f1b4a4c6fd6,
44662 +
            0xf55f1cfe1f397233,
44663 +
            0x8ee8b8d1e0a6541c,
44664 +
            0xa785db34b5d349f9,
44665 +
            0x701c0e4f1ddac1f9,
44666 +
            0x59716daa48afdc1c,
44667 +
            0x22c6c985b730fa33,
44668 +
            0x0babaa60e245e7d6,
44669 +
            0xd5a981da480eb66d,
44670 +
            0xfcc4e23f1d7bab88,
44671 +
            0x87734610e2e48da7,
44672 +
            0xae1e25f5b7919042,
44673 +
            0x99bfec10242d9bb0,
44674 +
            0xb0d28ff571588655,
44675 +
            0xcb652bda8ec7a07a,
44676 +
            0xe208483fdbb2bd9f,
44677 +
            0x3c0a638571f9ec24,
44678 +
            0x15670060248cf1c1,
44679 +
            0x6ed0a44fdb13d7ee,
44680 +
            0x47bdc7aa8e66ca0b,
44681 +
            0x902412d1266f420b,
44682 +
            0xb9497134731a5fee,
44683 +
            0xc2fed51b8c8579c1,
44684 +
            0xeb93b6fed9f06424,
44685 +
            0x35919d4473bb359f,
44686 +
            0x1cfcfea126ce287a,
44687 +
            0x674b5a8ed9510e55,
44688 +
            0x4e26396b8c2413b0,
44689 +
            0x8a88119220a828c6,
44690 +
            0xa3e5727775dd3523,
44691 +
            0xd852d6588a42130c,
44692 +
            0xf13fb5bddf370ee9,
44693 +
            0x2f3d9e07757c5f52,
44694 +
            0x0650fde2200942b7,
44695 +
            0x7de759cddf966498,
44696 +
            0x548a3a288ae3797d,
44697 +
            0x8313ef5322eaf17d,
44698 +
            0xaa7e8cb6779fec98,
44699 +
            0xd1c928998800cab7,
44700 +
            0xf8a44b7cdd75d752,
44701 +
            0x26a660c6773e86e9,
44702 +
            0x0fcb0323224b9b0c,
44703 +
            0x747ca70cddd4bd23,
44704 +
            0x5d11c4e988a1a0c6,
44705 +
            0xbfd017142d26fd5c,
44706 +
            0x96bd74f17853e0b9,
44707 +
            0xed0ad0de87ccc696,
44708 +
            0xc467b33bd2b9db73,
44709 +
            0x1a65988178f28ac8,
44710 +
            0x3308fb642d87972d,
44711 +
            0x48bf5f4bd218b102,
44712 +
            0x61d23cae876dace7,
44713 +
            0xb64be9d52f6424e7,
44714 +
            0x9f268a307a113902,
44715 +
            0xe4912e1f858e1f2d,
44716 +
            0xcdfc4dfad0fb02c8,
44717 +
            0x13fe66407ab05373,
44718 +
            0x3a9305a52fc54e96,
44719 +
            0x4124a18ad05a68b9,
44720 +
            0x6849c26f852f755c,
44721 +
            0xace7ea9629a34e2a,
44722 +
            0x858a89737cd653cf,
44723 +
            0xfe3d2d5c834975e0,
44724 +
            0xd7504eb9d63c6805,
44725 +
            0x095265037c7739be,
44726 +
            0x203f06e62902245b,
44727 +
            0x5b88a2c9d69d0274,
44728 +
            0x72e5c12c83e81f91,
44729 +
            0xa57c14572be19791,
44730 +
            0x8c1177b27e948a74,
44731 +
            0xf7a6d39d810bac5b,
44732 +
            0xdecbb078d47eb1be,
44733 +
            0x00c99bc27e35e005,
44734 +
            0x29a4f8272b40fde0,
44735 +
            0x52135c08d4dfdbcf,
44736 +
            0x7b7e3fed81aac62a,
44737 +
            0xd5601a18363b5668,
44738 +
            0xfc0d79fd634e4b8d,
44739 +
            0x87baddd29cd16da2,
44740 +
            0xaed7be37c9a47047,
44741 +
            0x70d5958d63ef21fc,
44742 +
            0x59b8f668369a3c19,
44743 +
            0x220f5247c9051a36,
44744 +
            0x0b6231a29c7007d3,
44745 +
            0xdcfbe4d934798fd3,
44746 +
            0xf596873c610c9236,
44747 +
            0x8e2123139e93b419,
44748 +
            0xa74c40f6cbe6a9fc,
44749 +
            0x794e6b4c61adf847,
44750 +
            0x502308a934d8e5a2,
44751 +
            0x2b94ac86cb47c38d,
44752 +
            0x02f9cf639e32de68,
44753 +
            0xc657e79a32bee51e,
44754 +
            0xef3a847f67cbf8fb,
44755 +
            0x948d20509854ded4,
44756 +
            0xbde043b5cd21c331,
44757 +
            0x63e2680f676a928a,
44758 +
            0x4a8f0bea321f8f6f,
44759 +
            0x3138afc5cd80a940,
44760 +
            0x1855cc2098f5b4a5,
44761 +
            0xcfcc195b30fc3ca5,
44762 +
            0xe6a17abe65892140,
44763 +
            0x9d16de919a16076f,
44764 +
            0xb47bbd74cf631a8a,
44765 +
            0x6a7996ce65284b31,
44766 +
            0x4314f52b305d56d4,
44767 +
            0x38a35104cfc270fb,
44768 +
            0x11ce32e19ab76d1e,
44769 +
            0xf30fe11c3f303084,
44770 +
            0xda6282f96a452d61,
44771 +
            0xa1d526d695da0b4e,
44772 +
            0x88b84533c0af16ab,
44773 +
            0x56ba6e896ae44710,
44774 +
            0x7fd70d6c3f915af5,
44775 +
            0x0460a943c00e7cda,
44776 +
            0x2d0dcaa6957b613f,
44777 +
            0xfa941fdd3d72e93f,
44778 +
            0xd3f97c386807f4da,
44779 +
            0xa84ed8179798d2f5,
44780 +
            0x8123bbf2c2edcf10,
44781 +
            0x5f21904868a69eab,
44782 +
            0x764cf3ad3dd3834e,
44783 +
            0x0dfb5782c24ca561,
44784 +
            0x249634679739b884,
44785 +
            0xe0381c9e3bb583f2,
44786 +
            0xc9557f7b6ec09e17,
44787 +
            0xb2e2db54915fb838,
44788 +
            0x9b8fb8b1c42aa5dd,
44789 +
            0x458d930b6e61f466,
44790 +
            0x6ce0f0ee3b14e983,
44791 +
            0x175754c1c48bcfac,
44792 +
            0x3e3a372491fed249,
44793 +
            0xe9a3e25f39f75a49,
44794 +
            0xc0ce81ba6c8247ac,
44795 +
            0xbb792595931d6183,
44796 +
            0x92144670c6687c66,
44797 +
            0x4c166dca6c232ddd,
44798 +
            0x657b0e2f39563038,
44799 +
            0x1eccaa00c6c91617,
44800 +
            0x37a1c9e593bc0bf2,
44801 +
        ],
44802 +
        [
44803 +
            0x0000000000000000,
44804 +
            0x718f39cbe1b101f3,
44805 +
            0xe31e7397c36203e6,
44806 +
            0x92914a5c22d30215,
44807 +
            0x84cc06c42f2e315f,
44808 +
            0xf5433f0fce9f30ac,
44809 +
            0x67d27553ec4c32b9,
44810 +
            0x165d4c980dfd334a,
44811 +
            0x4b68ec63f7b6542d,
44812 +
            0x3ae7d5a8160755de,
44813 +
            0xa8769ff434d457cb,
44814 +
            0xd9f9a63fd5655638,
44815 +
            0xcfa4eaa7d8986572,
44816 +
            0xbe2bd36c39296481,
44817 +
            0x2cba99301bfa6694,
44818 +
            0x5d35a0fbfa4b6767,
44819 +
            0x96d1d8c7ef6ca85a,
44820 +
            0xe75ee10c0edda9a9,
44821 +
            0x75cfab502c0eabbc,
44822 +
            0x0440929bcdbfaa4f,
44823 +
            0x121dde03c0429905,
44824 +
            0x6392e7c821f398f6,
44825 +
            0xf103ad9403209ae3,
44826 +
            0x808c945fe2919b10,
44827 +
            0xddb934a418dafc77,
44828 +
            0xac360d6ff96bfd84,
44829 +
            0x3ea74733dbb8ff91,
44830 +
            0x4f287ef83a09fe62,
44831 +
            0x5975326037f4cd28,
44832 +
            0x28fa0babd645ccdb,
44833 +
            0xba6b41f7f496cece,
44834 +
            0xcbe4783c1527cf3d,
44835 +
            0x6f53506477336627,
44836 +
            0x1edc69af968267d4,
44837 +
            0x8c4d23f3b45165c1,
44838 +
            0xfdc21a3855e06432,
44839 +
            0xeb9f56a0581d5778,
44840 +
            0x9a106f6bb9ac568b,
44841 +
            0x088125379b7f549e,
44842 +
            0x790e1cfc7ace556d,
44843 +
            0x243bbc078085320a,
44844 +
            0x55b485cc613433f9,
44845 +
            0xc725cf9043e731ec,
44846 +
            0xb6aaf65ba256301f,
44847 +
            0xa0f7bac3afab0355,
44848 +
            0xd17883084e1a02a6,
44849 +
            0x43e9c9546cc900b3,
44850 +
            0x3266f09f8d780140,
44851 +
            0xf98288a3985fce7d,
44852 +
            0x880db16879eecf8e,
44853 +
            0x1a9cfb345b3dcd9b,
44854 +
            0x6b13c2ffba8ccc68,
44855 +
            0x7d4e8e67b771ff22,
44856 +
            0x0cc1b7ac56c0fed1,
44857 +
            0x9e50fdf07413fcc4,
44858 +
            0xefdfc43b95a2fd37,
44859 +
            0xb2ea64c06fe99a50,
44860 +
            0xc3655d0b8e589ba3,
44861 +
            0x51f41757ac8b99b6,
44862 +
            0x207b2e9c4d3a9845,
44863 +
            0x3626620440c7ab0f,
44864 +
            0x47a95bcfa176aafc,
44865 +
            0xd538119383a5a8e9,
44866 +
            0xa4b728586214a91a,
44867 +
            0xdea6a0c8ee66cc4e,
44868 +
            0xaf2999030fd7cdbd,
44869 +
            0x3db8d35f2d04cfa8,
44870 +
            0x4c37ea94ccb5ce5b,
44871 +
            0x5a6aa60cc148fd11,
44872 +
            0x2be59fc720f9fce2,
44873 +
            0xb974d59b022afef7,
44874 +
            0xc8fbec50e39bff04,
44875 +
            0x95ce4cab19d09863,
44876 +
            0xe4417560f8619990,
44877 +
            0x76d03f3cdab29b85,
44878 +
            0x075f06f73b039a76,
44879 +
            0x11024a6f36fea93c,
44880 +
            0x608d73a4d74fa8cf,
44881 +
            0xf21c39f8f59caada,
44882 +
            0x83930033142dab29,
44883 +
            0x4877780f010a6414,
44884 +
            0x39f841c4e0bb65e7,
44885 +
            0xab690b98c26867f2,
44886 +
            0xdae6325323d96601,
44887 +
            0xccbb7ecb2e24554b,
44888 +
            0xbd344700cf9554b8,
44889 +
            0x2fa50d5ced4656ad,
44890 +
            0x5e2a34970cf7575e,
44891 +
            0x031f946cf6bc3039,
44892 +
            0x7290ada7170d31ca,
44893 +
            0xe001e7fb35de33df,
44894 +
            0x918ede30d46f322c,
44895 +
            0x87d392a8d9920166,
44896 +
            0xf65cab6338230095,
44897 +
            0x64cde13f1af00280,
44898 +
            0x1542d8f4fb410373,
44899 +
            0xb1f5f0ac9955aa69,
44900 +
            0xc07ac96778e4ab9a,
44901 +
            0x52eb833b5a37a98f,
44902 +
            0x2364baf0bb86a87c,
44903 +
            0x3539f668b67b9b36,
44904 +
            0x44b6cfa357ca9ac5,
44905 +
            0xd62785ff751998d0,
44906 +
            0xa7a8bc3494a89923,
44907 +
            0xfa9d1ccf6ee3fe44,
44908 +
            0x8b1225048f52ffb7,
44909 +
            0x19836f58ad81fda2,
44910 +
            0x680c56934c30fc51,
44911 +
            0x7e511a0b41cdcf1b,
44912 +
            0x0fde23c0a07ccee8,
44913 +
            0x9d4f699c82afccfd,
44914 +
            0xecc05057631ecd0e,
44915 +
            0x2724286b76390233,
44916 +
            0x56ab11a0978803c0,
44917 +
            0xc43a5bfcb55b01d5,
44918 +
            0xb5b5623754ea0026,
44919 +
            0xa3e82eaf5917336c,
44920 +
            0xd2671764b8a6329f,
44921 +
            0x40f65d389a75308a,
44922 +
            0x317964f37bc43179,
44923 +
            0x6c4cc408818f561e,
44924 +
            0x1dc3fdc3603e57ed,
44925 +
            0x8f52b79f42ed55f8,
44926 +
            0xfedd8e54a35c540b,
44927 +
            0xe880c2ccaea16741,
44928 +
            0x990ffb074f1066b2,
44929 +
            0x0b9eb15b6dc364a7,
44930 +
            0x7a1188908c726554,
44931 +
            0xffbda07a7527ae0f,
44932 +
            0x8e3299b19496affc,
44933 +
            0x1ca3d3edb645ade9,
44934 +
            0x6d2cea2657f4ac1a,
44935 +
            0x7b71a6be5a099f50,
44936 +
            0x0afe9f75bbb89ea3,
44937 +
            0x986fd529996b9cb6,
44938 +
            0xe9e0ece278da9d45,
44939 +
            0xb4d54c198291fa22,
44940 +
            0xc55a75d26320fbd1,
44941 +
            0x57cb3f8e41f3f9c4,
44942 +
            0x26440645a042f837,
44943 +
            0x30194addadbfcb7d,
44944 +
            0x419673164c0eca8e,
44945 +
            0xd307394a6eddc89b,
44946 +
            0xa28800818f6cc968,
44947 +
            0x696c78bd9a4b0655,
44948 +
            0x18e341767bfa07a6,
44949 +
            0x8a720b2a592905b3,
44950 +
            0xfbfd32e1b8980440,
44951 +
            0xeda07e79b565370a,
44952 +
            0x9c2f47b254d436f9,
44953 +
            0x0ebe0dee760734ec,
44954 +
            0x7f31342597b6351f,
44955 +
            0x220494de6dfd5278,
44956 +
            0x538bad158c4c538b,
44957 +
            0xc11ae749ae9f519e,
44958 +
            0xb095de824f2e506d,
44959 +
            0xa6c8921a42d36327,
44960 +
            0xd747abd1a36262d4,
44961 +
            0x45d6e18d81b160c1,
44962 +
            0x3459d84660006132,
44963 +
            0x90eef01e0214c828,
44964 +
            0xe161c9d5e3a5c9db,
44965 +
            0x73f08389c176cbce,
44966 +
            0x027fba4220c7ca3d,
44967 +
            0x1422f6da2d3af977,
44968 +
            0x65adcf11cc8bf884,
44969 +
            0xf73c854dee58fa91,
44970 +
            0x86b3bc860fe9fb62,
44971 +
            0xdb861c7df5a29c05,
44972 +
            0xaa0925b614139df6,
44973 +
            0x38986fea36c09fe3,
44974 +
            0x49175621d7719e10,
44975 +
            0x5f4a1ab9da8cad5a,
44976 +
            0x2ec523723b3daca9,
44977 +
            0xbc54692e19eeaebc,
44978 +
            0xcddb50e5f85faf4f,
44979 +
            0x063f28d9ed786072,
44980 +
            0x77b011120cc96181,
44981 +
            0xe5215b4e2e1a6394,
44982 +
            0x94ae6285cfab6267,
44983 +
            0x82f32e1dc256512d,
44984 +
            0xf37c17d623e750de,
44985 +
            0x61ed5d8a013452cb,
44986 +
            0x10626441e0855338,
44987 +
            0x4d57c4ba1ace345f,
44988 +
            0x3cd8fd71fb7f35ac,
44989 +
            0xae49b72dd9ac37b9,
44990 +
            0xdfc68ee6381d364a,
44991 +
            0xc99bc27e35e00500,
44992 +
            0xb814fbb5d45104f3,
44993 +
            0x2a85b1e9f68206e6,
44994 +
            0x5b0a882217330715,
44995 +
            0x211b00b29b416241,
44996 +
            0x509439797af063b2,
44997 +
            0xc2057325582361a7,
44998 +
            0xb38a4aeeb9926054,
44999 +
            0xa5d70676b46f531e,
45000 +
            0xd4583fbd55de52ed,
45001 +
            0x46c975e1770d50f8,
45002 +
            0x37464c2a96bc510b,
45003 +
            0x6a73ecd16cf7366c,
45004 +
            0x1bfcd51a8d46379f,
45005 +
            0x896d9f46af95358a,
45006 +
            0xf8e2a68d4e243479,
45007 +
            0xeebfea1543d90733,
45008 +
            0x9f30d3dea26806c0,
45009 +
            0x0da1998280bb04d5,
45010 +
            0x7c2ea049610a0526,
45011 +
            0xb7cad875742dca1b,
45012 +
            0xc645e1be959ccbe8,
45013 +
            0x54d4abe2b74fc9fd,
45014 +
            0x255b922956fec80e,
45015 +
            0x3306deb15b03fb44,
45016 +
            0x4289e77abab2fab7,
45017 +
            0xd018ad269861f8a2,
45018 +
            0xa19794ed79d0f951,
45019 +
            0xfca23416839b9e36,
45020 +
            0x8d2d0ddd622a9fc5,
45021 +
            0x1fbc478140f99dd0,
45022 +
            0x6e337e4aa1489c23,
45023 +
            0x786e32d2acb5af69,
45024 +
            0x09e10b194d04ae9a,
45025 +
            0x9b7041456fd7ac8f,
45026 +
            0xeaff788e8e66ad7c,
45027 +
            0x4e4850d6ec720466,
45028 +
            0x3fc7691d0dc30595,
45029 +
            0xad5623412f100780,
45030 +
            0xdcd91a8acea10673,
45031 +
            0xca845612c35c3539,
45032 +
            0xbb0b6fd922ed34ca,
45033 +
            0x299a2585003e36df,
45034 +
            0x58151c4ee18f372c,
45035 +
            0x0520bcb51bc4504b,
45036 +
            0x74af857efa7551b8,
45037 +
            0xe63ecf22d8a653ad,
45038 +
            0x97b1f6e93917525e,
45039 +
            0x81ecba7134ea6114,
45040 +
            0xf06383bad55b60e7,
45041 +
            0x62f2c9e6f78862f2,
45042 +
            0x137df02d16396301,
45043 +
            0xd8998811031eac3c,
45044 +
            0xa916b1dae2afadcf,
45045 +
            0x3b87fb86c07cafda,
45046 +
            0x4a08c24d21cdae29,
45047 +
            0x5c558ed52c309d63,
45048 +
            0x2ddab71ecd819c90,
45049 +
            0xbf4bfd42ef529e85,
45050 +
            0xcec4c4890ee39f76,
45051 +
            0x93f16472f4a8f811,
45052 +
            0xe27e5db91519f9e2,
45053 +
            0x70ef17e537cafbf7,
45054 +
            0x01602e2ed67bfa04,
45055 +
            0x173d62b6db86c94e,
45056 +
            0x66b25b7d3a37c8bd,
45057 +
            0xf423112118e4caa8,
45058 +
            0x85ac28eaf955cb5b,
45059 +
        ],
45060 +
        [
45061 +
            0x0000000000000000,
45062 +
            0xbd8ba11f43a56a8d,
45063 +
            0x39e7a3d52ea0e389,
45064 +
            0x846c02ca6d058904,
45065 +
            0x73cf47aa5d41c712,
45066 +
            0xce44e6b51ee4ad9f,
45067 +
            0x4a28e47f73e1249b,
45068 +
            0xf7a3456030444e16,
45069 +
            0xe79e8f54ba838e24,
45070 +
            0x5a152e4bf926e4a9,
45071 +
            0xde792c8194236dad,
45072 +
            0x63f28d9ed7860720,
45073 +
            0x9451c8fee7c24936,
45074 +
            0x29da69e1a46723bb,
45075 +
            0xadb66b2bc962aabf,
45076 +
            0x103dca348ac7c032,
45077 +
            0x8dcdff42dced2adb,
45078 +
            0x30465e5d9f484056,
45079 +
            0xb42a5c97f24dc952,
45080 +
            0x09a1fd88b1e8a3df,
45081 +
            0xfe02b8e881acedc9,
45082 +
            0x438919f7c2098744,
45083 +
            0xc7e51b3daf0c0e40,
45084 +
            0x7a6eba22eca964cd,
45085 +
            0x6a537016666ea4ff,
45086 +
            0xd7d8d10925cbce72,
45087 +
            0x53b4d3c348ce4776,
45088 +
            0xee3f72dc0b6b2dfb,
45089 +
            0x199c37bc3b2f63ed,
45090 +
            0xa41796a3788a0960,
45091 +
            0x207b9469158f8064,
45092 +
            0x9df03576562aeae9,
45093 +
            0x596b1f6e10306325,
45094 +
            0xe4e0be71539509a8,
45095 +
            0x608cbcbb3e9080ac,
45096 +
            0xdd071da47d35ea21,
45097 +
            0x2aa458c44d71a437,
45098 +
            0x972ff9db0ed4ceba,
45099 +
            0x1343fb1163d147be,
45100 +
            0xaec85a0e20742d33,
45101 +
            0xbef5903aaab3ed01,
45102 +
            0x037e3125e916878c,
45103 +
            0x871233ef84130e88,
45104 +
            0x3a9992f0c7b66405,
45105 +
            0xcd3ad790f7f22a13,
45106 +
            0x70b1768fb457409e,
45107 +
            0xf4dd7445d952c99a,
45108 +
            0x4956d55a9af7a317,
45109 +
            0xd4a6e02cccdd49fe,
45110 +
            0x692d41338f782373,
45111 +
            0xed4143f9e27daa77,
45112 +
            0x50cae2e6a1d8c0fa,
45113 +
            0xa769a786919c8eec,
45114 +
            0x1ae20699d239e461,
45115 +
            0x9e8e0453bf3c6d65,
45116 +
            0x2305a54cfc9907e8,
45117 +
            0x33386f78765ec7da,
45118 +
            0x8eb3ce6735fbad57,
45119 +
            0x0adfccad58fe2453,
45120 +
            0xb7546db21b5b4ede,
45121 +
            0x40f728d22b1f00c8,
45122 +
            0xfd7c89cd68ba6a45,
45123 +
            0x79108b0705bfe341,
45124 +
            0xc49b2a18461a89cc,
45125 +
            0xb2d63edc2060c64a,
45126 +
            0x0f5d9fc363c5acc7,
45127 +
            0x8b319d090ec025c3,
45128 +
            0x36ba3c164d654f4e,
45129 +
            0xc11979767d210158,
45130 +
            0x7c92d8693e846bd5,
45131 +
            0xf8fedaa35381e2d1,
45132 +
            0x45757bbc1024885c,
45133 +
            0x5548b1889ae3486e,
45134 +
            0xe8c31097d94622e3,
45135 +
            0x6caf125db443abe7,
45136 +
            0xd124b342f7e6c16a,
45137 +
            0x2687f622c7a28f7c,
45138 +
            0x9b0c573d8407e5f1,
45139 +
            0x1f6055f7e9026cf5,
45140 +
            0xa2ebf4e8aaa70678,
45141 +
            0x3f1bc19efc8dec91,
45142 +
            0x82906081bf28861c,
45143 +
            0x06fc624bd22d0f18,
45144 +
            0xbb77c35491886595,
45145 +
            0x4cd48634a1cc2b83,
45146 +
            0xf15f272be269410e,
45147 +
            0x753325e18f6cc80a,
45148 +
            0xc8b884feccc9a287,
45149 +
            0xd8854eca460e62b5,
45150 +
            0x650eefd505ab0838,
45151 +
            0xe162ed1f68ae813c,
45152 +
            0x5ce94c002b0bebb1,
45153 +
            0xab4a09601b4fa5a7,
45154 +
            0x16c1a87f58eacf2a,
45155 +
            0x92adaab535ef462e,
45156 +
            0x2f260baa764a2ca3,
45157 +
            0xebbd21b23050a56f,
45158 +
            0x563680ad73f5cfe2,
45159 +
            0xd25a82671ef046e6,
45160 +
            0x6fd123785d552c6b,
45161 +
            0x987266186d11627d,
45162 +
            0x25f9c7072eb408f0,
45163 +
            0xa195c5cd43b181f4,
45164 +
            0x1c1e64d20014eb79,
45165 +
            0x0c23aee68ad32b4b,
45166 +
            0xb1a80ff9c97641c6,
45167 +
            0x35c40d33a473c8c2,
45168 +
            0x884fac2ce7d6a24f,
45169 +
            0x7fece94cd792ec59,
45170 +
            0xc2674853943786d4,
45171 +
            0x460b4a99f9320fd0,
45172 +
            0xfb80eb86ba97655d,
45173 +
            0x6670def0ecbd8fb4,
45174 +
            0xdbfb7fefaf18e539,
45175 +
            0x5f977d25c21d6c3d,
45176 +
            0xe21cdc3a81b806b0,
45177 +
            0x15bf995ab1fc48a6,
45178 +
            0xa8343845f259222b,
45179 +
            0x2c583a8f9f5cab2f,
45180 +
            0x91d39b90dcf9c1a2,
45181 +
            0x81ee51a4563e0190,
45182 +
            0x3c65f0bb159b6b1d,
45183 +
            0xb809f271789ee219,
45184 +
            0x0582536e3b3b8894,
45185 +
            0xf221160e0b7fc682,
45186 +
            0x4faab71148daac0f,
45187 +
            0xcbc6b5db25df250b,
45188 +
            0x764d14c4667a4f86,
45189 +
            0x275c9c53e92bba07,
45190 +
            0x9ad73d4caa8ed08a,
45191 +
            0x1ebb3f86c78b598e,
45192 +
            0xa3309e99842e3303,
45193 +
            0x5493dbf9b46a7d15,
45194 +
            0xe9187ae6f7cf1798,
45195 +
            0x6d74782c9aca9e9c,
45196 +
            0xd0ffd933d96ff411,
45197 +
            0xc0c2130753a83423,
45198 +
            0x7d49b218100d5eae,
45199 +
            0xf925b0d27d08d7aa,
45200 +
            0x44ae11cd3eadbd27,
45201 +
            0xb30d54ad0ee9f331,
45202 +
            0x0e86f5b24d4c99bc,
45203 +
            0x8aeaf778204910b8,
45204 +
            0x3761566763ec7a35,
45205 +
            0xaa91631135c690dc,
45206 +
            0x171ac20e7663fa51,
45207 +
            0x9376c0c41b667355,
45208 +
            0x2efd61db58c319d8,
45209 +
            0xd95e24bb688757ce,
45210 +
            0x64d585a42b223d43,
45211 +
            0xe0b9876e4627b447,
45212 +
            0x5d3226710582deca,
45213 +
            0x4d0fec458f451ef8,
45214 +
            0xf0844d5acce07475,
45215 +
            0x74e84f90a1e5fd71,
45216 +
            0xc963ee8fe24097fc,
45217 +
            0x3ec0abefd204d9ea,
45218 +
            0x834b0af091a1b367,
45219 +
            0x0727083afca43a63,
45220 +
            0xbaaca925bf0150ee,
45221 +
            0x7e37833df91bd922,
45222 +
            0xc3bc2222babeb3af,
45223 +
            0x47d020e8d7bb3aab,
45224 +
            0xfa5b81f7941e5026,
45225 +
            0x0df8c497a45a1e30,
45226 +
            0xb0736588e7ff74bd,
45227 +
            0x341f67428afafdb9,
45228 +
            0x8994c65dc95f9734,
45229 +
            0x99a90c6943985706,
45230 +
            0x2422ad76003d3d8b,
45231 +
            0xa04eafbc6d38b48f,
45232 +
            0x1dc50ea32e9dde02,
45233 +
            0xea664bc31ed99014,
45234 +
            0x57edeadc5d7cfa99,
45235 +
            0xd381e8163079739d,
45236 +
            0x6e0a490973dc1910,
45237 +
            0xf3fa7c7f25f6f3f9,
45238 +
            0x4e71dd6066539974,
45239 +
            0xca1ddfaa0b561070,
45240 +
            0x77967eb548f37afd,
45241 +
            0x80353bd578b734eb,
45242 +
            0x3dbe9aca3b125e66,
45243 +
            0xb9d298005617d762,
45244 +
            0x0459391f15b2bdef,
45245 +
            0x1464f32b9f757ddd,
45246 +
            0xa9ef5234dcd01750,
45247 +
            0x2d8350feb1d59e54,
45248 +
            0x9008f1e1f270f4d9,
45249 +
            0x67abb481c234bacf,
45250 +
            0xda20159e8191d042,
45251 +
            0x5e4c1754ec945946,
45252 +
            0xe3c7b64baf3133cb,
45253 +
            0x958aa28fc94b7c4d,
45254 +
            0x280103908aee16c0,
45255 +
            0xac6d015ae7eb9fc4,
45256 +
            0x11e6a045a44ef549,
45257 +
            0xe645e525940abb5f,
45258 +
            0x5bce443ad7afd1d2,
45259 +
            0xdfa246f0baaa58d6,
45260 +
            0x6229e7eff90f325b,
45261 +
            0x72142ddb73c8f269,
45262 +
            0xcf9f8cc4306d98e4,
45263 +
            0x4bf38e0e5d6811e0,
45264 +
            0xf6782f111ecd7b6d,
45265 +
            0x01db6a712e89357b,
45266 +
            0xbc50cb6e6d2c5ff6,
45267 +
            0x383cc9a40029d6f2,
45268 +
            0x85b768bb438cbc7f,
45269 +
            0x18475dcd15a65696,
45270 +
            0xa5ccfcd256033c1b,
45271 +
            0x21a0fe183b06b51f,
45272 +
            0x9c2b5f0778a3df92,
45273 +
            0x6b881a6748e79184,
45274 +
            0xd603bb780b42fb09,
45275 +
            0x526fb9b26647720d,
45276 +
            0xefe418ad25e21880,
45277 +
            0xffd9d299af25d8b2,
45278 +
            0x42527386ec80b23f,
45279 +
            0xc63e714c81853b3b,
45280 +
            0x7bb5d053c22051b6,
45281 +
            0x8c169533f2641fa0,
45282 +
            0x319d342cb1c1752d,
45283 +
            0xb5f136e6dcc4fc29,
45284 +
            0x087a97f99f6196a4,
45285 +
            0xcce1bde1d97b1f68,
45286 +
            0x716a1cfe9ade75e5,
45287 +
            0xf5061e34f7dbfce1,
45288 +
            0x488dbf2bb47e966c,
45289 +
            0xbf2efa4b843ad87a,
45290 +
            0x02a55b54c79fb2f7,
45291 +
            0x86c9599eaa9a3bf3,
45292 +
            0x3b42f881e93f517e,
45293 +
            0x2b7f32b563f8914c,
45294 +
            0x96f493aa205dfbc1,
45295 +
            0x129891604d5872c5,
45296 +
            0xaf13307f0efd1848,
45297 +
            0x58b0751f3eb9565e,
45298 +
            0xe53bd4007d1c3cd3,
45299 +
            0x6157d6ca1019b5d7,
45300 +
            0xdcdc77d553bcdf5a,
45301 +
            0x412c42a3059635b3,
45302 +
            0xfca7e3bc46335f3e,
45303 +
            0x78cbe1762b36d63a,
45304 +
            0xc54040696893bcb7,
45305 +
            0x32e3050958d7f2a1,
45306 +
            0x8f68a4161b72982c,
45307 +
            0x0b04a6dc76771128,
45308 +
            0xb68f07c335d27ba5,
45309 +
            0xa6b2cdf7bf15bb97,
45310 +
            0x1b396ce8fcb0d11a,
45311 +
            0x9f556e2291b5581e,
45312 +
            0x22decf3dd2103293,
45313 +
            0xd57d8a5de2547c85,
45314 +
            0x68f62b42a1f11608,
45315 +
            0xec9a2988ccf49f0c,
45316 +
            0x511188978f51f581,
45317 +
        ],
45318 +
    ];
45319 +
45320 +
    pub static CRC64_XZ_TABLE: [[u64; 256]; 16] = [
45321 +
        [
45322 +
            0x0000000000000000,
45323 +
            0xb32e4cbe03a75f6f,
45324 +
            0xf4843657a840a05b,
45325 +
            0x47aa7ae9abe7ff34,
45326 +
            0x7bd0c384ff8f5e33,
45327 +
            0xc8fe8f3afc28015c,
45328 +
            0x8f54f5d357cffe68,
45329 +
            0x3c7ab96d5468a107,
45330 +
            0xf7a18709ff1ebc66,
45331 +
            0x448fcbb7fcb9e309,
45332 +
            0x0325b15e575e1c3d,
45333 +
            0xb00bfde054f94352,
45334 +
            0x8c71448d0091e255,
45335 +
            0x3f5f08330336bd3a,
45336 +
            0x78f572daa8d1420e,
45337 +
            0xcbdb3e64ab761d61,
45338 +
            0x7d9ba13851336649,
45339 +
            0xceb5ed8652943926,
45340 +
            0x891f976ff973c612,
45341 +
            0x3a31dbd1fad4997d,
45342 +
            0x064b62bcaebc387a,
45343 +
            0xb5652e02ad1b6715,
45344 +
            0xf2cf54eb06fc9821,
45345 +
            0x41e11855055bc74e,
45346 +
            0x8a3a2631ae2dda2f,
45347 +
            0x39146a8fad8a8540,
45348 +
            0x7ebe1066066d7a74,
45349 +
            0xcd905cd805ca251b,
45350 +
            0xf1eae5b551a2841c,
45351 +
            0x42c4a90b5205db73,
45352 +
            0x056ed3e2f9e22447,
45353 +
            0xb6409f5cfa457b28,
45354 +
            0xfb374270a266cc92,
45355 +
            0x48190ecea1c193fd,
45356 +
            0x0fb374270a266cc9,
45357 +
            0xbc9d3899098133a6,
45358 +
            0x80e781f45de992a1,
45359 +
            0x33c9cd4a5e4ecdce,
45360 +
            0x7463b7a3f5a932fa,
45361 +
            0xc74dfb1df60e6d95,
45362 +
            0x0c96c5795d7870f4,
45363 +
            0xbfb889c75edf2f9b,
45364 +
            0xf812f32ef538d0af,
45365 +
            0x4b3cbf90f69f8fc0,
45366 +
            0x774606fda2f72ec7,
45367 +
            0xc4684a43a15071a8,
45368 +
            0x83c230aa0ab78e9c,
45369 +
            0x30ec7c140910d1f3,
45370 +
            0x86ace348f355aadb,
45371 +
            0x3582aff6f0f2f5b4,
45372 +
            0x7228d51f5b150a80,
45373 +
            0xc10699a158b255ef,
45374 +
            0xfd7c20cc0cdaf4e8,
45375 +
            0x4e526c720f7dab87,
45376 +
            0x09f8169ba49a54b3,
45377 +
            0xbad65a25a73d0bdc,
45378 +
            0x710d64410c4b16bd,
45379 +
            0xc22328ff0fec49d2,
45380 +
            0x85895216a40bb6e6,
45381 +
            0x36a71ea8a7ace989,
45382 +
            0x0adda7c5f3c4488e,
45383 +
            0xb9f3eb7bf06317e1,
45384 +
            0xfe5991925b84e8d5,
45385 +
            0x4d77dd2c5823b7ba,
45386 +
            0x64b62bcaebc387a1,
45387 +
            0xd7986774e864d8ce,
45388 +
            0x90321d9d438327fa,
45389 +
            0x231c512340247895,
45390 +
            0x1f66e84e144cd992,
45391 +
            0xac48a4f017eb86fd,
45392 +
            0xebe2de19bc0c79c9,
45393 +
            0x58cc92a7bfab26a6,
45394 +
            0x9317acc314dd3bc7,
45395 +
            0x2039e07d177a64a8,
45396 +
            0x67939a94bc9d9b9c,
45397 +
            0xd4bdd62abf3ac4f3,
45398 +
            0xe8c76f47eb5265f4,
45399 +
            0x5be923f9e8f53a9b,
45400 +
            0x1c4359104312c5af,
45401 +
            0xaf6d15ae40b59ac0,
45402 +
            0x192d8af2baf0e1e8,
45403 +
            0xaa03c64cb957be87,
45404 +
            0xeda9bca512b041b3,
45405 +
            0x5e87f01b11171edc,
45406 +
            0x62fd4976457fbfdb,
45407 +
            0xd1d305c846d8e0b4,
45408 +
            0x96797f21ed3f1f80,
45409 +
            0x2557339fee9840ef,
45410 +
            0xee8c0dfb45ee5d8e,
45411 +
            0x5da24145464902e1,
45412 +
            0x1a083bacedaefdd5,
45413 +
            0xa9267712ee09a2ba,
45414 +
            0x955cce7fba6103bd,
45415 +
            0x267282c1b9c65cd2,
45416 +
            0x61d8f8281221a3e6,
45417 +
            0xd2f6b4961186fc89,
45418 +
            0x9f8169ba49a54b33,
45419 +
            0x2caf25044a02145c,
45420 +
            0x6b055fede1e5eb68,
45421 +
            0xd82b1353e242b407,
45422 +
            0xe451aa3eb62a1500,
45423 +
            0x577fe680b58d4a6f,
45424 +
            0x10d59c691e6ab55b,
45425 +
            0xa3fbd0d71dcdea34,
45426 +
            0x6820eeb3b6bbf755,
45427 +
            0xdb0ea20db51ca83a,
45428 +
            0x9ca4d8e41efb570e,
45429 +
            0x2f8a945a1d5c0861,
45430 +
            0x13f02d374934a966,
45431 +
            0xa0de61894a93f609,
45432 +
            0xe7741b60e174093d,
45433 +
            0x545a57dee2d35652,
45434 +
            0xe21ac88218962d7a,
45435 +
            0x5134843c1b317215,
45436 +
            0x169efed5b0d68d21,
45437 +
            0xa5b0b26bb371d24e,
45438 +
            0x99ca0b06e7197349,
45439 +
            0x2ae447b8e4be2c26,
45440 +
            0x6d4e3d514f59d312,
45441 +
            0xde6071ef4cfe8c7d,
45442 +
            0x15bb4f8be788911c,
45443 +
            0xa6950335e42fce73,
45444 +
            0xe13f79dc4fc83147,
45445 +
            0x521135624c6f6e28,
45446 +
            0x6e6b8c0f1807cf2f,
45447 +
            0xdd45c0b11ba09040,
45448 +
            0x9aefba58b0476f74,
45449 +
            0x29c1f6e6b3e0301b,
45450 +
            0xc96c5795d7870f42,
45451 +
            0x7a421b2bd420502d,
45452 +
            0x3de861c27fc7af19,
45453 +
            0x8ec62d7c7c60f076,
45454 +
            0xb2bc941128085171,
45455 +
            0x0192d8af2baf0e1e,
45456 +
            0x4638a2468048f12a,
45457 +
            0xf516eef883efae45,
45458 +
            0x3ecdd09c2899b324,
45459 +
            0x8de39c222b3eec4b,
45460 +
            0xca49e6cb80d9137f,
45461 +
            0x7967aa75837e4c10,
45462 +
            0x451d1318d716ed17,
45463 +
            0xf6335fa6d4b1b278,
45464 +
            0xb199254f7f564d4c,
45465 +
            0x02b769f17cf11223,
45466 +
            0xb4f7f6ad86b4690b,
45467 +
            0x07d9ba1385133664,
45468 +
            0x4073c0fa2ef4c950,
45469 +
            0xf35d8c442d53963f,
45470 +
            0xcf273529793b3738,
45471 +
            0x7c0979977a9c6857,
45472 +
            0x3ba3037ed17b9763,
45473 +
            0x888d4fc0d2dcc80c,
45474 +
            0x435671a479aad56d,
45475 +
            0xf0783d1a7a0d8a02,
45476 +
            0xb7d247f3d1ea7536,
45477 +
            0x04fc0b4dd24d2a59,
45478 +
            0x3886b22086258b5e,
45479 +
            0x8ba8fe9e8582d431,
45480 +
            0xcc0284772e652b05,
45481 +
            0x7f2cc8c92dc2746a,
45482 +
            0x325b15e575e1c3d0,
45483 +
            0x8175595b76469cbf,
45484 +
            0xc6df23b2dda1638b,
45485 +
            0x75f16f0cde063ce4,
45486 +
            0x498bd6618a6e9de3,
45487 +
            0xfaa59adf89c9c28c,
45488 +
            0xbd0fe036222e3db8,
45489 +
            0x0e21ac88218962d7,
45490 +
            0xc5fa92ec8aff7fb6,
45491 +
            0x76d4de52895820d9,
45492 +
            0x317ea4bb22bfdfed,
45493 +
            0x8250e80521188082,
45494 +
            0xbe2a516875702185,
45495 +
            0x0d041dd676d77eea,
45496 +
            0x4aae673fdd3081de,
45497 +
            0xf9802b81de97deb1,
45498 +
            0x4fc0b4dd24d2a599,
45499 +
            0xfceef8632775faf6,
45500 +
            0xbb44828a8c9205c2,
45501 +
            0x086ace348f355aad,
45502 +
            0x34107759db5dfbaa,
45503 +
            0x873e3be7d8faa4c5,
45504 +
            0xc094410e731d5bf1,
45505 +
            0x73ba0db070ba049e,
45506 +
            0xb86133d4dbcc19ff,
45507 +
            0x0b4f7f6ad86b4690,
45508 +
            0x4ce50583738cb9a4,
45509 +
            0xffcb493d702be6cb,
45510 +
            0xc3b1f050244347cc,
45511 +
            0x709fbcee27e418a3,
45512 +
            0x3735c6078c03e797,
45513 +
            0x841b8ab98fa4b8f8,
45514 +
            0xadda7c5f3c4488e3,
45515 +
            0x1ef430e13fe3d78c,
45516 +
            0x595e4a08940428b8,
45517 +
            0xea7006b697a377d7,
45518 +
            0xd60abfdbc3cbd6d0,
45519 +
            0x6524f365c06c89bf,
45520 +
            0x228e898c6b8b768b,
45521 +
            0x91a0c532682c29e4,
45522 +
            0x5a7bfb56c35a3485,
45523 +
            0xe955b7e8c0fd6bea,
45524 +
            0xaeffcd016b1a94de,
45525 +
            0x1dd181bf68bdcbb1,
45526 +
            0x21ab38d23cd56ab6,
45527 +
            0x9285746c3f7235d9,
45528 +
            0xd52f0e859495caed,
45529 +
            0x6601423b97329582,
45530 +
            0xd041dd676d77eeaa,
45531 +
            0x636f91d96ed0b1c5,
45532 +
            0x24c5eb30c5374ef1,
45533 +
            0x97eba78ec690119e,
45534 +
            0xab911ee392f8b099,
45535 +
            0x18bf525d915feff6,
45536 +
            0x5f1528b43ab810c2,
45537 +
            0xec3b640a391f4fad,
45538 +
            0x27e05a6e926952cc,
45539 +
            0x94ce16d091ce0da3,
45540 +
            0xd3646c393a29f297,
45541 +
            0x604a2087398eadf8,
45542 +
            0x5c3099ea6de60cff,
45543 +
            0xef1ed5546e415390,
45544 +
            0xa8b4afbdc5a6aca4,
45545 +
            0x1b9ae303c601f3cb,
45546 +
            0x56ed3e2f9e224471,
45547 +
            0xe5c372919d851b1e,
45548 +
            0xa26908783662e42a,
45549 +
            0x114744c635c5bb45,
45550 +
            0x2d3dfdab61ad1a42,
45551 +
            0x9e13b115620a452d,
45552 +
            0xd9b9cbfcc9edba19,
45553 +
            0x6a978742ca4ae576,
45554 +
            0xa14cb926613cf817,
45555 +
            0x1262f598629ba778,
45556 +
            0x55c88f71c97c584c,
45557 +
            0xe6e6c3cfcadb0723,
45558 +
            0xda9c7aa29eb3a624,
45559 +
            0x69b2361c9d14f94b,
45560 +
            0x2e184cf536f3067f,
45561 +
            0x9d36004b35545910,
45562 +
            0x2b769f17cf112238,
45563 +
            0x9858d3a9ccb67d57,
45564 +
            0xdff2a94067518263,
45565 +
            0x6cdce5fe64f6dd0c,
45566 +
            0x50a65c93309e7c0b,
45567 +
            0xe388102d33392364,
45568 +
            0xa4226ac498dedc50,
45569 +
            0x170c267a9b79833f,
45570 +
            0xdcd7181e300f9e5e,
45571 +
            0x6ff954a033a8c131,
45572 +
            0x28532e49984f3e05,
45573 +
            0x9b7d62f79be8616a,
45574 +
            0xa707db9acf80c06d,
45575 +
            0x14299724cc279f02,
45576 +
            0x5383edcd67c06036,
45577 +
            0xe0ada17364673f59,
45578 +
        ],
45579 +
        [
45580 +
            0x0000000000000000,
45581 +
            0x54e979925cd0f10d,
45582 +
            0xa9d2f324b9a1e21a,
45583 +
            0xfd3b8ab6e5711317,
45584 +
            0xc17d4962dc4ddab1,
45585 +
            0x959430f0809d2bbc,
45586 +
            0x68afba4665ec38ab,
45587 +
            0x3c46c3d4393cc9a6,
45588 +
            0x10223dee1795abe7,
45589 +
            0x44cb447c4b455aea,
45590 +
            0xb9f0cecaae3449fd,
45591 +
            0xed19b758f2e4b8f0,
45592 +
            0xd15f748ccbd87156,
45593 +
            0x85b60d1e9708805b,
45594 +
            0x788d87a87279934c,
45595 +
            0x2c64fe3a2ea96241,
45596 +
            0x20447bdc2f2b57ce,
45597 +
            0x74ad024e73fba6c3,
45598 +
            0x899688f8968ab5d4,
45599 +
            0xdd7ff16aca5a44d9,
45600 +
            0xe13932bef3668d7f,
45601 +
            0xb5d04b2cafb67c72,
45602 +
            0x48ebc19a4ac76f65,
45603 +
            0x1c02b80816179e68,
45604 +
            0x3066463238befc29,
45605 +
            0x648f3fa0646e0d24,
45606 +
            0x99b4b516811f1e33,
45607 +
            0xcd5dcc84ddcfef3e,
45608 +
            0xf11b0f50e4f32698,
45609 +
            0xa5f276c2b823d795,
45610 +
            0x58c9fc745d52c482,
45611 +
            0x0c2085e60182358f,
45612 +
            0x4088f7b85e56af9c,
45613 +
            0x14618e2a02865e91,
45614 +
            0xe95a049ce7f74d86,
45615 +
            0xbdb37d0ebb27bc8b,
45616 +
            0x81f5beda821b752d,
45617 +
            0xd51cc748decb8420,
45618 +
            0x28274dfe3bba9737,
45619 +
            0x7cce346c676a663a,
45620 +
            0x50aaca5649c3047b,
45621 +
            0x0443b3c41513f576,
45622 +
            0xf9783972f062e661,
45623 +
            0xad9140e0acb2176c,
45624 +
            0x91d78334958edeca,
45625 +
            0xc53efaa6c95e2fc7,
45626 +
            0x380570102c2f3cd0,
45627 +
            0x6cec098270ffcddd,
45628 +
            0x60cc8c64717df852,
45629 +
            0x3425f5f62dad095f,
45630 +
            0xc91e7f40c8dc1a48,
45631 +
            0x9df706d2940ceb45,
45632 +
            0xa1b1c506ad3022e3,
45633 +
            0xf558bc94f1e0d3ee,
45634 +
            0x086336221491c0f9,
45635 +
            0x5c8a4fb0484131f4,
45636 +
            0x70eeb18a66e853b5,
45637 +
            0x2407c8183a38a2b8,
45638 +
            0xd93c42aedf49b1af,
45639 +
            0x8dd53b3c839940a2,
45640 +
            0xb193f8e8baa58904,
45641 +
            0xe57a817ae6757809,
45642 +
            0x18410bcc03046b1e,
45643 +
            0x4ca8725e5fd49a13,
45644 +
            0x8111ef70bcad5f38,
45645 +
            0xd5f896e2e07dae35,
45646 +
            0x28c31c54050cbd22,
45647 +
            0x7c2a65c659dc4c2f,
45648 +
            0x406ca61260e08589,
45649 +
            0x1485df803c307484,
45650 +
            0xe9be5536d9416793,
45651 +
            0xbd572ca48591969e,
45652 +
            0x9133d29eab38f4df,
45653 +
            0xc5daab0cf7e805d2,
45654 +
            0x38e121ba129916c5,
45655 +
            0x6c0858284e49e7c8,
45656 +
            0x504e9bfc77752e6e,
45657 +
            0x04a7e26e2ba5df63,
45658 +
            0xf99c68d8ced4cc74,
45659 +
            0xad75114a92043d79,
45660 +
            0xa15594ac938608f6,
45661 +
            0xf5bced3ecf56f9fb,
45662 +
            0x088767882a27eaec,
45663 +
            0x5c6e1e1a76f71be1,
45664 +
            0x6028ddce4fcbd247,
45665 +
            0x34c1a45c131b234a,
45666 +
            0xc9fa2eeaf66a305d,
45667 +
            0x9d135778aabac150,
45668 +
            0xb177a9428413a311,
45669 +
            0xe59ed0d0d8c3521c,
45670 +
            0x18a55a663db2410b,
45671 +
            0x4c4c23f46162b006,
45672 +
            0x700ae020585e79a0,
45673 +
            0x24e399b2048e88ad,
45674 +
            0xd9d81304e1ff9bba,
45675 +
            0x8d316a96bd2f6ab7,
45676 +
            0xc19918c8e2fbf0a4,
45677 +
            0x9570615abe2b01a9,
45678 +
            0x684bebec5b5a12be,
45679 +
            0x3ca2927e078ae3b3,
45680 +
            0x00e451aa3eb62a15,
45681 +
            0x540d28386266db18,
45682 +
            0xa936a28e8717c80f,
45683 +
            0xfddfdb1cdbc73902,
45684 +
            0xd1bb2526f56e5b43,
45685 +
            0x85525cb4a9beaa4e,
45686 +
            0x7869d6024ccfb959,
45687 +
            0x2c80af90101f4854,
45688 +
            0x10c66c44292381f2,
45689 +
            0x442f15d675f370ff,
45690 +
            0xb9149f60908263e8,
45691 +
            0xedfde6f2cc5292e5,
45692 +
            0xe1dd6314cdd0a76a,
45693 +
            0xb5341a8691005667,
45694 +
            0x480f903074714570,
45695 +
            0x1ce6e9a228a1b47d,
45696 +
            0x20a02a76119d7ddb,
45697 +
            0x744953e44d4d8cd6,
45698 +
            0x8972d952a83c9fc1,
45699 +
            0xdd9ba0c0f4ec6ecc,
45700 +
            0xf1ff5efada450c8d,
45701 +
            0xa51627688695fd80,
45702 +
            0x582dadde63e4ee97,
45703 +
            0x0cc4d44c3f341f9a,
45704 +
            0x308217980608d63c,
45705 +
            0x646b6e0a5ad82731,
45706 +
            0x9950e4bcbfa93426,
45707 +
            0xcdb99d2ee379c52b,
45708 +
            0x90fb71cad654a0f5,
45709 +
            0xc41208588a8451f8,
45710 +
            0x392982ee6ff542ef,
45711 +
            0x6dc0fb7c3325b3e2,
45712 +
            0x518638a80a197a44,
45713 +
            0x056f413a56c98b49,
45714 +
            0xf854cb8cb3b8985e,
45715 +
            0xacbdb21eef686953,
45716 +
            0x80d94c24c1c10b12,
45717 +
            0xd43035b69d11fa1f,
45718 +
            0x290bbf007860e908,
45719 +
            0x7de2c69224b01805,
45720 +
            0x41a405461d8cd1a3,
45721 +
            0x154d7cd4415c20ae,
45722 +
            0xe876f662a42d33b9,
45723 +
            0xbc9f8ff0f8fdc2b4,
45724 +
            0xb0bf0a16f97ff73b,
45725 +
            0xe4567384a5af0636,
45726 +
            0x196df93240de1521,
45727 +
            0x4d8480a01c0ee42c,
45728 +
            0x71c2437425322d8a,
45729 +
            0x252b3ae679e2dc87,
45730 +
            0xd810b0509c93cf90,
45731 +
            0x8cf9c9c2c0433e9d,
45732 +
            0xa09d37f8eeea5cdc,
45733 +
            0xf4744e6ab23aadd1,
45734 +
            0x094fc4dc574bbec6,
45735 +
            0x5da6bd4e0b9b4fcb,
45736 +
            0x61e07e9a32a7866d,
45737 +
            0x350907086e777760,
45738 +
            0xc8328dbe8b066477,
45739 +
            0x9cdbf42cd7d6957a,
45740 +
            0xd073867288020f69,
45741 +
            0x849affe0d4d2fe64,
45742 +
            0x79a1755631a3ed73,
45743 +
            0x2d480cc46d731c7e,
45744 +
            0x110ecf10544fd5d8,
45745 +
            0x45e7b682089f24d5,
45746 +
            0xb8dc3c34edee37c2,
45747 +
            0xec3545a6b13ec6cf,
45748 +
            0xc051bb9c9f97a48e,
45749 +
            0x94b8c20ec3475583,
45750 +
            0x698348b826364694,
45751 +
            0x3d6a312a7ae6b799,
45752 +
            0x012cf2fe43da7e3f,
45753 +
            0x55c58b6c1f0a8f32,
45754 +
            0xa8fe01dafa7b9c25,
45755 +
            0xfc177848a6ab6d28,
45756 +
            0xf037fdaea72958a7,
45757 +
            0xa4de843cfbf9a9aa,
45758 +
            0x59e50e8a1e88babd,
45759 +
            0x0d0c771842584bb0,
45760 +
            0x314ab4cc7b648216,
45761 +
            0x65a3cd5e27b4731b,
45762 +
            0x989847e8c2c5600c,
45763 +
            0xcc713e7a9e159101,
45764 +
            0xe015c040b0bcf340,
45765 +
            0xb4fcb9d2ec6c024d,
45766 +
            0x49c73364091d115a,
45767 +
            0x1d2e4af655cde057,
45768 +
            0x216889226cf129f1,
45769 +
            0x7581f0b03021d8fc,
45770 +
            0x88ba7a06d550cbeb,
45771 +
            0xdc53039489803ae6,
45772 +
            0x11ea9eba6af9ffcd,
45773 +
            0x4503e72836290ec0,
45774 +
            0xb8386d9ed3581dd7,
45775 +
            0xecd1140c8f88ecda,
45776 +
            0xd097d7d8b6b4257c,
45777 +
            0x847eae4aea64d471,
45778 +
            0x794524fc0f15c766,
45779 +
            0x2dac5d6e53c5366b,
45780 +
            0x01c8a3547d6c542a,
45781 +
            0x5521dac621bca527,
45782 +
            0xa81a5070c4cdb630,
45783 +
            0xfcf329e2981d473d,
45784 +
            0xc0b5ea36a1218e9b,
45785 +
            0x945c93a4fdf17f96,
45786 +
            0x6967191218806c81,
45787 +
            0x3d8e608044509d8c,
45788 +
            0x31aee56645d2a803,
45789 +
            0x65479cf41902590e,
45790 +
            0x987c1642fc734a19,
45791 +
            0xcc956fd0a0a3bb14,
45792 +
            0xf0d3ac04999f72b2,
45793 +
            0xa43ad596c54f83bf,
45794 +
            0x59015f20203e90a8,
45795 +
            0x0de826b27cee61a5,
45796 +
            0x218cd888524703e4,
45797 +
            0x7565a11a0e97f2e9,
45798 +
            0x885e2bacebe6e1fe,
45799 +
            0xdcb7523eb73610f3,
45800 +
            0xe0f191ea8e0ad955,
45801 +
            0xb418e878d2da2858,
45802 +
            0x492362ce37ab3b4f,
45803 +
            0x1dca1b5c6b7bca42,
45804 +
            0x5162690234af5051,
45805 +
            0x058b1090687fa15c,
45806 +
            0xf8b09a268d0eb24b,
45807 +
            0xac59e3b4d1de4346,
45808 +
            0x901f2060e8e28ae0,
45809 +
            0xc4f659f2b4327bed,
45810 +
            0x39cdd344514368fa,
45811 +
            0x6d24aad60d9399f7,
45812 +
            0x414054ec233afbb6,
45813 +
            0x15a92d7e7fea0abb,
45814 +
            0xe892a7c89a9b19ac,
45815 +
            0xbc7bde5ac64be8a1,
45816 +
            0x803d1d8eff772107,
45817 +
            0xd4d4641ca3a7d00a,
45818 +
            0x29efeeaa46d6c31d,
45819 +
            0x7d0697381a063210,
45820 +
            0x712612de1b84079f,
45821 +
            0x25cf6b4c4754f692,
45822 +
            0xd8f4e1faa225e585,
45823 +
            0x8c1d9868fef51488,
45824 +
            0xb05b5bbcc7c9dd2e,
45825 +
            0xe4b2222e9b192c23,
45826 +
            0x1989a8987e683f34,
45827 +
            0x4d60d10a22b8ce39,
45828 +
            0x61042f300c11ac78,
45829 +
            0x35ed56a250c15d75,
45830 +
            0xc8d6dc14b5b04e62,
45831 +
            0x9c3fa586e960bf6f,
45832 +
            0xa0796652d05c76c9,
45833 +
            0xf4901fc08c8c87c4,
45834 +
            0x09ab957669fd94d3,
45835 +
            0x5d42ece4352d65de,
45836 +
        ],
45837 +
        [
45838 +
            0x0000000000000000,
45839 +
            0x3f0be14a916a6dcb,
45840 +
            0x7e17c29522d4db96,
45841 +
            0x411c23dfb3beb65d,
45842 +
            0xfc2f852a45a9b72c,
45843 +
            0xc3246460d4c3dae7,
45844 +
            0x823847bf677d6cba,
45845 +
            0xbd33a6f5f6170171,
45846 +
            0x6a87a57f245d70dd,
45847 +
            0x558c4435b5371d16,
45848 +
            0x149067ea0689ab4b,
45849 +
            0x2b9b86a097e3c680,
45850 +
            0x96a8205561f4c7f1,
45851 +
            0xa9a3c11ff09eaa3a,
45852 +
            0xe8bfe2c043201c67,
45853 +
            0xd7b4038ad24a71ac,
45854 +
            0xd50f4afe48bae1ba,
45855 +
            0xea04abb4d9d08c71,
45856 +
            0xab18886b6a6e3a2c,
45857 +
            0x94136921fb0457e7,
45858 +
            0x2920cfd40d135696,
45859 +
            0x162b2e9e9c793b5d,
45860 +
            0x57370d412fc78d00,
45861 +
            0x683cec0bbeade0cb,
45862 +
            0xbf88ef816ce79167,
45863 +
            0x80830ecbfd8dfcac,
45864 +
            0xc19f2d144e334af1,
45865 +
            0xfe94cc5edf59273a,
45866 +
            0x43a76aab294e264b,
45867 +
            0x7cac8be1b8244b80,
45868 +
            0x3db0a83e0b9afddd,
45869 +
            0x02bb49749af09016,
45870 +
            0x38c63ad73e7bddf1,
45871 +
            0x07cddb9daf11b03a,
45872 +
            0x46d1f8421caf0667,
45873 +
            0x79da19088dc56bac,
45874 +
            0xc4e9bffd7bd26add,
45875 +
            0xfbe25eb7eab80716,
45876 +
            0xbafe7d685906b14b,
45877 +
            0x85f59c22c86cdc80,
45878 +
            0x52419fa81a26ad2c,
45879 +
            0x6d4a7ee28b4cc0e7,
45880 +
            0x2c565d3d38f276ba,
45881 +
            0x135dbc77a9981b71,
45882 +
            0xae6e1a825f8f1a00,
45883 +
            0x9165fbc8cee577cb,
45884 +
            0xd079d8177d5bc196,
45885 +
            0xef72395dec31ac5d,
45886 +
            0xedc9702976c13c4b,
45887 +
            0xd2c29163e7ab5180,
45888 +
            0x93deb2bc5415e7dd,
45889 +
            0xacd553f6c57f8a16,
45890 +
            0x11e6f50333688b67,
45891 +
            0x2eed1449a202e6ac,
45892 +
            0x6ff1379611bc50f1,
45893 +
            0x50fad6dc80d63d3a,
45894 +
            0x874ed556529c4c96,
45895 +
            0xb845341cc3f6215d,
45896 +
            0xf95917c370489700,
45897 +
            0xc652f689e122facb,
45898 +
            0x7b61507c1735fbba,
45899 +
            0x446ab136865f9671,
45900 +
            0x057692e935e1202c,
45901 +
            0x3a7d73a3a48b4de7,
45902 +
            0x718c75ae7cf7bbe2,
45903 +
            0x4e8794e4ed9dd629,
45904 +
            0x0f9bb73b5e236074,
45905 +
            0x30905671cf490dbf,
45906 +
            0x8da3f084395e0cce,
45907 +
            0xb2a811cea8346105,
45908 +
            0xf3b432111b8ad758,
45909 +
            0xccbfd35b8ae0ba93,
45910 +
            0x1b0bd0d158aacb3f,
45911 +
            0x2400319bc9c0a6f4,
45912 +
            0x651c12447a7e10a9,
45913 +
            0x5a17f30eeb147d62,
45914 +
            0xe72455fb1d037c13,
45915 +
            0xd82fb4b18c6911d8,
45916 +
            0x9933976e3fd7a785,
45917 +
            0xa6387624aebdca4e,
45918 +
            0xa4833f50344d5a58,
45919 +
            0x9b88de1aa5273793,
45920 +
            0xda94fdc5169981ce,
45921 +
            0xe59f1c8f87f3ec05,
45922 +
            0x58acba7a71e4ed74,
45923 +
            0x67a75b30e08e80bf,
45924 +
            0x26bb78ef533036e2,
45925 +
            0x19b099a5c25a5b29,
45926 +
            0xce049a2f10102a85,
45927 +
            0xf10f7b65817a474e,
45928 +
            0xb01358ba32c4f113,
45929 +
            0x8f18b9f0a3ae9cd8,
45930 +
            0x322b1f0555b99da9,
45931 +
            0x0d20fe4fc4d3f062,
45932 +
            0x4c3cdd90776d463f,
45933 +
            0x73373cdae6072bf4,
45934 +
            0x494a4f79428c6613,
45935 +
            0x7641ae33d3e60bd8,
45936 +
            0x375d8dec6058bd85,
45937 +
            0x08566ca6f132d04e,
45938 +
            0xb565ca530725d13f,
45939 +
            0x8a6e2b19964fbcf4,
45940 +
            0xcb7208c625f10aa9,
45941 +
            0xf479e98cb49b6762,
45942 +
            0x23cdea0666d116ce,
45943 +
            0x1cc60b4cf7bb7b05,
45944 +
            0x5dda28934405cd58,
45945 +
            0x62d1c9d9d56fa093,
45946 +
            0xdfe26f2c2378a1e2,
45947 +
            0xe0e98e66b212cc29,
45948 +
            0xa1f5adb901ac7a74,
45949 +
            0x9efe4cf390c617bf,
45950 +
            0x9c4505870a3687a9,
45951 +
            0xa34ee4cd9b5cea62,
45952 +
            0xe252c71228e25c3f,
45953 +
            0xdd592658b98831f4,
45954 +
            0x606a80ad4f9f3085,
45955 +
            0x5f6161e7def55d4e,
45956 +
            0x1e7d42386d4beb13,
45957 +
            0x2176a372fc2186d8,
45958 +
            0xf6c2a0f82e6bf774,
45959 +
            0xc9c941b2bf019abf,
45960 +
            0x88d5626d0cbf2ce2,
45961 +
            0xb7de83279dd54129,
45962 +
            0x0aed25d26bc24058,
45963 +
            0x35e6c498faa82d93,
45964 +
            0x74fae74749169bce,
45965 +
            0x4bf1060dd87cf605,
45966 +
            0xe318eb5cf9ef77c4,
45967 +
            0xdc130a1668851a0f,
45968 +
            0x9d0f29c9db3bac52,
45969 +
            0xa204c8834a51c199,
45970 +
            0x1f376e76bc46c0e8,
45971 +
            0x203c8f3c2d2cad23,
45972 +
            0x6120ace39e921b7e,
45973 +
            0x5e2b4da90ff876b5,
45974 +
            0x899f4e23ddb20719,
45975 +
            0xb694af694cd86ad2,
45976 +
            0xf7888cb6ff66dc8f,
45977 +
            0xc8836dfc6e0cb144,
45978 +
            0x75b0cb09981bb035,
45979 +
            0x4abb2a430971ddfe,
45980 +
            0x0ba7099cbacf6ba3,
45981 +
            0x34ace8d62ba50668,
45982 +
            0x3617a1a2b155967e,
45983 +
            0x091c40e8203ffbb5,
45984 +
            0x4800633793814de8,
45985 +
            0x770b827d02eb2023,
45986 +
            0xca382488f4fc2152,
45987 +
            0xf533c5c265964c99,
45988 +
            0xb42fe61dd628fac4,
45989 +
            0x8b2407574742970f,
45990 +
            0x5c9004dd9508e6a3,
45991 +
            0x639be59704628b68,
45992 +
            0x2287c648b7dc3d35,
45993 +
            0x1d8c270226b650fe,
45994 +
            0xa0bf81f7d0a1518f,
45995 +
            0x9fb460bd41cb3c44,
45996 +
            0xdea84362f2758a19,
45997 +
            0xe1a3a228631fe7d2,
45998 +
            0xdbded18bc794aa35,
45999 +
            0xe4d530c156fec7fe,
46000 +
            0xa5c9131ee54071a3,
46001 +
            0x9ac2f254742a1c68,
46002 +
            0x27f154a1823d1d19,
46003 +
            0x18fab5eb135770d2,
46004 +
            0x59e69634a0e9c68f,
46005 +
            0x66ed777e3183ab44,
46006 +
            0xb15974f4e3c9dae8,
46007 +
            0x8e5295be72a3b723,
46008 +
            0xcf4eb661c11d017e,
46009 +
            0xf045572b50776cb5,
46010 +
            0x4d76f1dea6606dc4,
46011 +
            0x727d1094370a000f,
46012 +
            0x3361334b84b4b652,
46013 +
            0x0c6ad20115dedb99,
46014 +
            0x0ed19b758f2e4b8f,
46015 +
            0x31da7a3f1e442644,
46016 +
            0x70c659e0adfa9019,
46017 +
            0x4fcdb8aa3c90fdd2,
46018 +
            0xf2fe1e5fca87fca3,
46019 +
            0xcdf5ff155bed9168,
46020 +
            0x8ce9dccae8532735,
46021 +
            0xb3e23d8079394afe,
46022 +
            0x64563e0aab733b52,
46023 +
            0x5b5ddf403a195699,
46024 +
            0x1a41fc9f89a7e0c4,
46025 +
            0x254a1dd518cd8d0f,
46026 +
            0x9879bb20eeda8c7e,
46027 +
            0xa7725a6a7fb0e1b5,
46028 +
            0xe66e79b5cc0e57e8,
46029 +
            0xd96598ff5d643a23,
46030 +
            0x92949ef28518cc26,
46031 +
            0xad9f7fb81472a1ed,
46032 +
            0xec835c67a7cc17b0,
46033 +
            0xd388bd2d36a67a7b,
46034 +
            0x6ebb1bd8c0b17b0a,
46035 +
            0x51b0fa9251db16c1,
46036 +
            0x10acd94de265a09c,
46037 +
            0x2fa73807730fcd57,
46038 +
            0xf8133b8da145bcfb,
46039 +
            0xc718dac7302fd130,
46040 +
            0x8604f9188391676d,
46041 +
            0xb90f185212fb0aa6,
46042 +
            0x043cbea7e4ec0bd7,
46043 +
            0x3b375fed7586661c,
46044 +
            0x7a2b7c32c638d041,
46045 +
            0x45209d785752bd8a,
46046 +
            0x479bd40ccda22d9c,
46047 +
            0x789035465cc84057,
46048 +
            0x398c1699ef76f60a,
46049 +
            0x0687f7d37e1c9bc1,
46050 +
            0xbbb45126880b9ab0,
46051 +
            0x84bfb06c1961f77b,
46052 +
            0xc5a393b3aadf4126,
46053 +
            0xfaa872f93bb52ced,
46054 +
            0x2d1c7173e9ff5d41,
46055 +
            0x121790397895308a,
46056 +
            0x530bb3e6cb2b86d7,
46057 +
            0x6c0052ac5a41eb1c,
46058 +
            0xd133f459ac56ea6d,
46059 +
            0xee3815133d3c87a6,
46060 +
            0xaf2436cc8e8231fb,
46061 +
            0x902fd7861fe85c30,
46062 +
            0xaa52a425bb6311d7,
46063 +
            0x9559456f2a097c1c,
46064 +
            0xd44566b099b7ca41,
46065 +
            0xeb4e87fa08dda78a,
46066 +
            0x567d210ffecaa6fb,
46067 +
            0x6976c0456fa0cb30,
46068 +
            0x286ae39adc1e7d6d,
46069 +
            0x176102d04d7410a6,
46070 +
            0xc0d5015a9f3e610a,
46071 +
            0xffdee0100e540cc1,
46072 +
            0xbec2c3cfbdeaba9c,
46073 +
            0x81c922852c80d757,
46074 +
            0x3cfa8470da97d626,
46075 +
            0x03f1653a4bfdbbed,
46076 +
            0x42ed46e5f8430db0,
46077 +
            0x7de6a7af6929607b,
46078 +
            0x7f5deedbf3d9f06d,
46079 +
            0x40560f9162b39da6,
46080 +
            0x014a2c4ed10d2bfb,
46081 +
            0x3e41cd0440674630,
46082 +
            0x83726bf1b6704741,
46083 +
            0xbc798abb271a2a8a,
46084 +
            0xfd65a96494a49cd7,
46085 +
            0xc26e482e05cef11c,
46086 +
            0x15da4ba4d78480b0,
46087 +
            0x2ad1aaee46eeed7b,
46088 +
            0x6bcd8931f5505b26,
46089 +
            0x54c6687b643a36ed,
46090 +
            0xe9f5ce8e922d379c,
46091 +
            0xd6fe2fc403475a57,
46092 +
            0x97e20c1bb0f9ec0a,
46093 +
            0xa8e9ed51219381c1,
46094 +
        ],
46095 +
        [
46096 +
            0x0000000000000000,
46097 +
            0x1dee8a5e222ca1dc,
46098 +
            0x3bdd14bc445943b8,
46099 +
            0x26339ee26675e264,
46100 +
            0x77ba297888b28770,
46101 +
            0x6a54a326aa9e26ac,
46102 +
            0x4c673dc4ccebc4c8,
46103 +
            0x5189b79aeec76514,
46104 +
            0xef7452f111650ee0,
46105 +
            0xf29ad8af3349af3c,
46106 +
            0xd4a9464d553c4d58,
46107 +
            0xc947cc137710ec84,
46108 +
            0x98ce7b8999d78990,
46109 +
            0x8520f1d7bbfb284c,
46110 +
            0xa3136f35dd8eca28,
46111 +
            0xbefde56bffa26bf4,
46112 +
            0x4c300ac98dc40345,
46113 +
            0x51de8097afe8a299,
46114 +
            0x77ed1e75c99d40fd,
46115 +
            0x6a03942bebb1e121,
46116 +
            0x3b8a23b105768435,
46117 +
            0x2664a9ef275a25e9,
46118 +
            0x0057370d412fc78d,
46119 +
            0x1db9bd5363036651,
46120 +
            0xa34458389ca10da5,
46121 +
            0xbeaad266be8dac79,
46122 +
            0x98994c84d8f84e1d,
46123 +
            0x8577c6dafad4efc1,
46124 +
            0xd4fe714014138ad5,
46125 +
            0xc910fb1e363f2b09,
46126 +
            0xef2365fc504ac96d,
46127 +
            0xf2cdefa2726668b1,
46128 +
            0x986015931b88068a,
46129 +
            0x858e9fcd39a4a756,
46130 +
            0xa3bd012f5fd14532,
46131 +
            0xbe538b717dfde4ee,
46132 +
            0xefda3ceb933a81fa,
46133 +
            0xf234b6b5b1162026,
46134 +
            0xd4072857d763c242,
46135 +
            0xc9e9a209f54f639e,
46136 +
            0x771447620aed086a,
46137 +
            0x6afacd3c28c1a9b6,
46138 +
            0x4cc953de4eb44bd2,
46139 +
            0x5127d9806c98ea0e,
46140 +
            0x00ae6e1a825f8f1a,
46141 +
            0x1d40e444a0732ec6,
46142 +
            0x3b737aa6c606cca2,
46143 +
            0x269df0f8e42a6d7e,
46144 +
            0xd4501f5a964c05cf,
46145 +
            0xc9be9504b460a413,
46146 +
            0xef8d0be6d2154677,
46147 +
            0xf26381b8f039e7ab,
46148 +
            0xa3ea36221efe82bf,
46149 +
            0xbe04bc7c3cd22363,
46150 +
            0x9837229e5aa7c107,
46151 +
            0x85d9a8c0788b60db,
46152 +
            0x3b244dab87290b2f,
46153 +
            0x26cac7f5a505aaf3,
46154 +
            0x00f95917c3704897,
46155 +
            0x1d17d349e15ce94b,
46156 +
            0x4c9e64d30f9b8c5f,
46157 +
            0x5170ee8d2db72d83,
46158 +
            0x7743706f4bc2cfe7,
46159 +
            0x6aadfa3169ee6e3b,
46160 +
            0xa218840d981e1391,
46161 +
            0xbff60e53ba32b24d,
46162 +
            0x99c590b1dc475029,
46163 +
            0x842b1aeffe6bf1f5,
46164 +
            0xd5a2ad7510ac94e1,
46165 +
            0xc84c272b3280353d,
46166 +
            0xee7fb9c954f5d759,
46167 +
            0xf391339776d97685,
46168 +
            0x4d6cd6fc897b1d71,
46169 +
            0x50825ca2ab57bcad,
46170 +
            0x76b1c240cd225ec9,
46171 +
            0x6b5f481eef0eff15,
46172 +
            0x3ad6ff8401c99a01,
46173 +
            0x273875da23e53bdd,
46174 +
            0x010beb384590d9b9,
46175 +
            0x1ce5616667bc7865,
46176 +
            0xee288ec415da10d4,
46177 +
            0xf3c6049a37f6b108,
46178 +
            0xd5f59a785183536c,
46179 +
            0xc81b102673aff2b0,
46180 +
            0x9992a7bc9d6897a4,
46181 +
            0x847c2de2bf443678,
46182 +
            0xa24fb300d931d41c,
46183 +
            0xbfa1395efb1d75c0,
46184 +
            0x015cdc3504bf1e34,
46185 +
            0x1cb2566b2693bfe8,
46186 +
            0x3a81c88940e65d8c,
46187 +
            0x276f42d762cafc50,
46188 +
            0x76e6f54d8c0d9944,
46189 +
            0x6b087f13ae213898,
46190 +
            0x4d3be1f1c854dafc,
46191 +
            0x50d56bafea787b20,
46192 +
            0x3a78919e8396151b,
46193 +
            0x27961bc0a1bab4c7,
46194 +
            0x01a58522c7cf56a3,
46195 +
            0x1c4b0f7ce5e3f77f,
46196 +
            0x4dc2b8e60b24926b,
46197 +
            0x502c32b8290833b7,
46198 +
            0x761fac5a4f7dd1d3,
46199 +
            0x6bf126046d51700f,
46200 +
            0xd50cc36f92f31bfb,
46201 +
            0xc8e24931b0dfba27,
46202 +
            0xeed1d7d3d6aa5843,
46203 +
            0xf33f5d8df486f99f,
46204 +
            0xa2b6ea171a419c8b,
46205 +
            0xbf586049386d3d57,
46206 +
            0x996bfeab5e18df33,
46207 +
            0x848574f57c347eef,
46208 +
            0x76489b570e52165e,
46209 +
            0x6ba611092c7eb782,
46210 +
            0x4d958feb4a0b55e6,
46211 +
            0x507b05b56827f43a,
46212 +
            0x01f2b22f86e0912e,
46213 +
            0x1c1c3871a4cc30f2,
46214 +
            0x3a2fa693c2b9d296,
46215 +
            0x27c12ccde095734a,
46216 +
            0x993cc9a61f3718be,
46217 +
            0x84d243f83d1bb962,
46218 +
            0xa2e1dd1a5b6e5b06,
46219 +
            0xbf0f57447942fada,
46220 +
            0xee86e0de97859fce,
46221 +
            0xf3686a80b5a93e12,
46222 +
            0xd55bf462d3dcdc76,
46223 +
            0xc8b57e3cf1f07daa,
46224 +
            0xd6e9a7309f3239a7,
46225 +
            0xcb072d6ebd1e987b,
46226 +
            0xed34b38cdb6b7a1f,
46227 +
            0xf0da39d2f947dbc3,
46228 +
            0xa1538e481780bed7,
46229 +
            0xbcbd041635ac1f0b,
46230 +
            0x9a8e9af453d9fd6f,
46231 +
            0x876010aa71f55cb3,
46232 +
            0x399df5c18e573747,
46233 +
            0x24737f9fac7b969b,
46234 +
            0x0240e17dca0e74ff,
46235 +
            0x1fae6b23e822d523,
46236 +
            0x4e27dcb906e5b037,
46237 +
            0x53c956e724c911eb,
46238 +
            0x75fac80542bcf38f,
46239 +
            0x6814425b60905253,
46240 +
            0x9ad9adf912f63ae2,
46241 +
            0x873727a730da9b3e,
46242 +
            0xa104b94556af795a,
46243 +
            0xbcea331b7483d886,
46244 +
            0xed6384819a44bd92,
46245 +
            0xf08d0edfb8681c4e,
46246 +
            0xd6be903dde1dfe2a,
46247 +
            0xcb501a63fc315ff6,
46248 +
            0x75adff0803933402,
46249 +
            0x6843755621bf95de,
46250 +
            0x4e70ebb447ca77ba,
46251 +
            0x539e61ea65e6d666,
46252 +
            0x0217d6708b21b372,
46253 +
            0x1ff95c2ea90d12ae,
46254 +
            0x39cac2cccf78f0ca,
46255 +
            0x24244892ed545116,
46256 +
            0x4e89b2a384ba3f2d,
46257 +
            0x536738fda6969ef1,
46258 +
            0x7554a61fc0e37c95,
46259 +
            0x68ba2c41e2cfdd49,
46260 +
            0x39339bdb0c08b85d,
46261 +
            0x24dd11852e241981,
46262 +
            0x02ee8f674851fbe5,
46263 +
            0x1f0005396a7d5a39,
46264 +
            0xa1fde05295df31cd,
46265 +
            0xbc136a0cb7f39011,
46266 +
            0x9a20f4eed1867275,
46267 +
            0x87ce7eb0f3aad3a9,
46268 +
            0xd647c92a1d6db6bd,
46269 +
            0xcba943743f411761,
46270 +
            0xed9add965934f505,
46271 +
            0xf07457c87b1854d9,
46272 +
            0x02b9b86a097e3c68,
46273 +
            0x1f5732342b529db4,
46274 +
            0x3964acd64d277fd0,
46275 +
            0x248a26886f0bde0c,
46276 +
            0x7503911281ccbb18,
46277 +
            0x68ed1b4ca3e01ac4,
46278 +
            0x4ede85aec595f8a0,
46279 +
            0x53300ff0e7b9597c,
46280 +
            0xedcdea9b181b3288,
46281 +
            0xf02360c53a379354,
46282 +
            0xd610fe275c427130,
46283 +
            0xcbfe74797e6ed0ec,
46284 +
            0x9a77c3e390a9b5f8,
46285 +
            0x879949bdb2851424,
46286 +
            0xa1aad75fd4f0f640,
46287 +
            0xbc445d01f6dc579c,
46288 +
            0x74f1233d072c2a36,
46289 +
            0x691fa96325008bea,
46290 +
            0x4f2c37814375698e,
46291 +
            0x52c2bddf6159c852,
46292 +
            0x034b0a458f9ead46,
46293 +
            0x1ea5801badb20c9a,
46294 +
            0x38961ef9cbc7eefe,
46295 +
            0x257894a7e9eb4f22,
46296 +
            0x9b8571cc164924d6,
46297 +
            0x866bfb923465850a,
46298 +
            0xa05865705210676e,
46299 +
            0xbdb6ef2e703cc6b2,
46300 +
            0xec3f58b49efba3a6,
46301 +
            0xf1d1d2eabcd7027a,
46302 +
            0xd7e24c08daa2e01e,
46303 +
            0xca0cc656f88e41c2,
46304 +
            0x38c129f48ae82973,
46305 +
            0x252fa3aaa8c488af,
46306 +
            0x031c3d48ceb16acb,
46307 +
            0x1ef2b716ec9dcb17,
46308 +
            0x4f7b008c025aae03,
46309 +
            0x52958ad220760fdf,
46310 +
            0x74a614304603edbb,
46311 +
            0x69489e6e642f4c67,
46312 +
            0xd7b57b059b8d2793,
46313 +
            0xca5bf15bb9a1864f,
46314 +
            0xec686fb9dfd4642b,
46315 +
            0xf186e5e7fdf8c5f7,
46316 +
            0xa00f527d133fa0e3,
46317 +
            0xbde1d8233113013f,
46318 +
            0x9bd246c15766e35b,
46319 +
            0x863ccc9f754a4287,
46320 +
            0xec9136ae1ca42cbc,
46321 +
            0xf17fbcf03e888d60,
46322 +
            0xd74c221258fd6f04,
46323 +
            0xcaa2a84c7ad1ced8,
46324 +
            0x9b2b1fd69416abcc,
46325 +
            0x86c59588b63a0a10,
46326 +
            0xa0f60b6ad04fe874,
46327 +
            0xbd188134f26349a8,
46328 +
            0x03e5645f0dc1225c,
46329 +
            0x1e0bee012fed8380,
46330 +
            0x383870e3499861e4,
46331 +
            0x25d6fabd6bb4c038,
46332 +
            0x745f4d278573a52c,
46333 +
            0x69b1c779a75f04f0,
46334 +
            0x4f82599bc12ae694,
46335 +
            0x526cd3c5e3064748,
46336 +
            0xa0a13c6791602ff9,
46337 +
            0xbd4fb639b34c8e25,
46338 +
            0x9b7c28dbd5396c41,
46339 +
            0x8692a285f715cd9d,
46340 +
            0xd71b151f19d2a889,
46341 +
            0xcaf59f413bfe0955,
46342 +
            0xecc601a35d8beb31,
46343 +
            0xf1288bfd7fa74aed,
46344 +
            0x4fd56e9680052119,
46345 +
            0x523be4c8a22980c5,
46346 +
            0x74087a2ac45c62a1,
46347 +
            0x69e6f074e670c37d,
46348 +
            0x386f47ee08b7a669,
46349 +
            0x2581cdb02a9b07b5,
46350 +
            0x03b253524ceee5d1,
46351 +
            0x1e5cd90c6ec2440d,
46352 +
        ],
46353 +
        [
46354 +
            0x0000000000000000,
46355 +
            0x5c2d776033c4205e,
46356 +
            0xb85aeec0678840bc,
46357 +
            0xe47799a0544c60e2,
46358 +
            0xe26d72ab601e9ffd,
46359 +
            0xbe4005cb53dabfa3,
46360 +
            0x5a379c6b0796df41,
46361 +
            0x061aeb0b3452ff1f,
46362 +
            0x56024a7d6f33217f,
46363 +
            0x0a2f3d1d5cf70121,
46364 +
            0xee58a4bd08bb61c3,
46365 +
            0xb275d3dd3b7f419d,
46366 +
            0xb46f38d60f2dbe82,
46367 +
            0xe8424fb63ce99edc,
46368 +
            0x0c35d61668a5fe3e,
46369 +
            0x5018a1765b61de60,
46370 +
            0xac0494fade6642fe,
46371 +
            0xf029e39aeda262a0,
46372 +
            0x145e7a3ab9ee0242,
46373 +
            0x48730d5a8a2a221c,
46374 +
            0x4e69e651be78dd03,
46375 +
            0x124491318dbcfd5d,
46376 +
            0xf6330891d9f09dbf,
46377 +
            0xaa1e7ff1ea34bde1,
46378 +
            0xfa06de87b1556381,
46379 +
            0xa62ba9e7829143df,
46380 +
            0x425c3047d6dd233d,
46381 +
            0x1e714727e5190363,
46382 +
            0x186bac2cd14bfc7c,
46383 +
            0x4446db4ce28fdc22,
46384 +
            0xa03142ecb6c3bcc0,
46385 +
            0xfc1c358c85079c9e,
46386 +
            0xcad186de13c29b79,
46387 +
            0x96fcf1be2006bb27,
46388 +
            0x728b681e744adbc5,
46389 +
            0x2ea61f7e478efb9b,
46390 +
            0x28bcf47573dc0484,
46391 +
            0x74918315401824da,
46392 +
            0x90e61ab514544438,
46393 +
            0xcccb6dd527906466,
46394 +
            0x9cd3cca37cf1ba06,
46395 +
            0xc0febbc34f359a58,
46396 +
            0x248922631b79faba,
46397 +
            0x78a4550328bddae4,
46398 +
            0x7ebebe081cef25fb,
46399 +
            0x2293c9682f2b05a5,
46400 +
            0xc6e450c87b676547,
46401 +
            0x9ac927a848a34519,
46402 +
            0x66d51224cda4d987,
46403 +
            0x3af86544fe60f9d9,
46404 +
            0xde8ffce4aa2c993b,
46405 +
            0x82a28b8499e8b965,
46406 +
            0x84b8608fadba467a,
46407 +
            0xd89517ef9e7e6624,
46408 +
            0x3ce28e4fca3206c6,
46409 +
            0x60cff92ff9f62698,
46410 +
            0x30d75859a297f8f8,
46411 +
            0x6cfa2f399153d8a6,
46412 +
            0x888db699c51fb844,
46413 +
            0xd4a0c1f9f6db981a,
46414 +
            0xd2ba2af2c2896705,
46415 +
            0x8e975d92f14d475b,
46416 +
            0x6ae0c432a50127b9,
46417 +
            0x36cdb35296c507e7,
46418 +
            0x077ba297888b2877,
46419 +
            0x5b56d5f7bb4f0829,
46420 +
            0xbf214c57ef0368cb,
46421 +
            0xe30c3b37dcc74895,
46422 +
            0xe516d03ce895b78a,
46423 +
            0xb93ba75cdb5197d4,
46424 +
            0x5d4c3efc8f1df736,
46425 +
            0x0161499cbcd9d768,
46426 +
            0x5179e8eae7b80908,
46427 +
            0x0d549f8ad47c2956,
46428 +
            0xe923062a803049b4,
46429 +
            0xb50e714ab3f469ea,
46430 +
            0xb3149a4187a696f5,
46431 +
            0xef39ed21b462b6ab,
46432 +
            0x0b4e7481e02ed649,
46433 +
            0x576303e1d3eaf617,
46434 +
            0xab7f366d56ed6a89,
46435 +
            0xf752410d65294ad7,
46436 +
            0x1325d8ad31652a35,
46437 +
            0x4f08afcd02a10a6b,
46438 +
            0x491244c636f3f574,
46439 +
            0x153f33a60537d52a,
46440 +
            0xf148aa06517bb5c8,
46441 +
            0xad65dd6662bf9596,
46442 +
            0xfd7d7c1039de4bf6,
46443 +
            0xa1500b700a1a6ba8,
46444 +
            0x452792d05e560b4a,
46445 +
            0x190ae5b06d922b14,
46446 +
            0x1f100ebb59c0d40b,
46447 +
            0x433d79db6a04f455,
46448 +
            0xa74ae07b3e4894b7,
46449 +
            0xfb67971b0d8cb4e9,
46450 +
            0xcdaa24499b49b30e,
46451 +
            0x91875329a88d9350,
46452 +
            0x75f0ca89fcc1f3b2,
46453 +
            0x29ddbde9cf05d3ec,
46454 +
            0x2fc756e2fb572cf3,
46455 +
            0x73ea2182c8930cad,
46456 +
            0x979db8229cdf6c4f,
46457 +
            0xcbb0cf42af1b4c11,
46458 +
            0x9ba86e34f47a9271,
46459 +
            0xc7851954c7beb22f,
46460 +
            0x23f280f493f2d2cd,
46461 +
            0x7fdff794a036f293,
46462 +
            0x79c51c9f94640d8c,
46463 +
            0x25e86bffa7a02dd2,
46464 +
            0xc19ff25ff3ec4d30,
46465 +
            0x9db2853fc0286d6e,
46466 +
            0x61aeb0b3452ff1f0,
46467 +
            0x3d83c7d376ebd1ae,
46468 +
            0xd9f45e7322a7b14c,
46469 +
            0x85d9291311639112,
46470 +
            0x83c3c21825316e0d,
46471 +
            0xdfeeb57816f54e53,
46472 +
            0x3b992cd842b92eb1,
46473 +
            0x67b45bb8717d0eef,
46474 +
            0x37acface2a1cd08f,
46475 +
            0x6b818dae19d8f0d1,
46476 +
            0x8ff6140e4d949033,
46477 +
            0xd3db636e7e50b06d,
46478 +
            0xd5c188654a024f72,
46479 +
            0x89ecff0579c66f2c,
46480 +
            0x6d9b66a52d8a0fce,
46481 +
            0x31b611c51e4e2f90,
46482 +
            0x0ef7452f111650ee,
46483 +
            0x52da324f22d270b0,
46484 +
            0xb6adabef769e1052,
46485 +
            0xea80dc8f455a300c,
46486 +
            0xec9a37847108cf13,
46487 +
            0xb0b740e442ccef4d,
46488 +
            0x54c0d94416808faf,
46489 +
            0x08edae242544aff1,
46490 +
            0x58f50f527e257191,
46491 +
            0x04d878324de151cf,
46492 +
            0xe0afe19219ad312d,
46493 +
            0xbc8296f22a691173,
46494 +
            0xba987df91e3bee6c,
46495 +
            0xe6b50a992dffce32,
46496 +
            0x02c2933979b3aed0,
46497 +
            0x5eefe4594a778e8e,
46498 +
            0xa2f3d1d5cf701210,
46499 +
            0xfedea6b5fcb4324e,
46500 +
            0x1aa93f15a8f852ac,
46501 +
            0x468448759b3c72f2,
46502 +
            0x409ea37eaf6e8ded,
46503 +
            0x1cb3d41e9caaadb3,
46504 +
            0xf8c44dbec8e6cd51,
46505 +
            0xa4e93adefb22ed0f,
46506 +
            0xf4f19ba8a043336f,
46507 +
            0xa8dcecc893871331,
46508 +
            0x4cab7568c7cb73d3,
46509 +
            0x10860208f40f538d,
46510 +
            0x169ce903c05dac92,
46511 +
            0x4ab19e63f3998ccc,
46512 +
            0xaec607c3a7d5ec2e,
46513 +
            0xf2eb70a39411cc70,
46514 +
            0xc426c3f102d4cb97,
46515 +
            0x980bb4913110ebc9,
46516 +
            0x7c7c2d31655c8b2b,
46517 +
            0x20515a515698ab75,
46518 +
            0x264bb15a62ca546a,
46519 +
            0x7a66c63a510e7434,
46520 +
            0x9e115f9a054214d6,
46521 +
            0xc23c28fa36863488,
46522 +
            0x9224898c6de7eae8,
46523 +
            0xce09feec5e23cab6,
46524 +
            0x2a7e674c0a6faa54,
46525 +
            0x7653102c39ab8a0a,
46526 +
            0x7049fb270df97515,
46527 +
            0x2c648c473e3d554b,
46528 +
            0xc81315e76a7135a9,
46529 +
            0x943e628759b515f7,
46530 +
            0x6822570bdcb28969,
46531 +
            0x340f206bef76a937,
46532 +
            0xd078b9cbbb3ac9d5,
46533 +
            0x8c55ceab88fee98b,
46534 +
            0x8a4f25a0bcac1694,
46535 +
            0xd66252c08f6836ca,
46536 +
            0x3215cb60db245628,
46537 +
            0x6e38bc00e8e07676,
46538 +
            0x3e201d76b381a816,
46539 +
            0x620d6a1680458848,
46540 +
            0x867af3b6d409e8aa,
46541 +
            0xda5784d6e7cdc8f4,
46542 +
            0xdc4d6fddd39f37eb,
46543 +
            0x806018bde05b17b5,
46544 +
            0x6417811db4177757,
46545 +
            0x383af67d87d35709,
46546 +
            0x098ce7b8999d7899,
46547 +
            0x55a190d8aa5958c7,
46548 +
            0xb1d60978fe153825,
46549 +
            0xedfb7e18cdd1187b,
46550 +
            0xebe19513f983e764,
46551 +
            0xb7cce273ca47c73a,
46552 +
            0x53bb7bd39e0ba7d8,
46553 +
            0x0f960cb3adcf8786,
46554 +
            0x5f8eadc5f6ae59e6,
46555 +
            0x03a3daa5c56a79b8,
46556 +
            0xe7d443059126195a,
46557 +
            0xbbf93465a2e23904,
46558 +
            0xbde3df6e96b0c61b,
46559 +
            0xe1cea80ea574e645,
46560 +
            0x05b931aef13886a7,
46561 +
            0x599446cec2fca6f9,
46562 +
            0xa588734247fb3a67,
46563 +
            0xf9a50422743f1a39,
46564 +
            0x1dd29d8220737adb,
46565 +
            0x41ffeae213b75a85,
46566 +
            0x47e501e927e5a59a,
46567 +
            0x1bc87689142185c4,
46568 +
            0xffbfef29406de526,
46569 +
            0xa392984973a9c578,
46570 +
            0xf38a393f28c81b18,
46571 +
            0xafa74e5f1b0c3b46,
46572 +
            0x4bd0d7ff4f405ba4,
46573 +
            0x17fda09f7c847bfa,
46574 +
            0x11e74b9448d684e5,
46575 +
            0x4dca3cf47b12a4bb,
46576 +
            0xa9bda5542f5ec459,
46577 +
            0xf590d2341c9ae407,
46578 +
            0xc35d61668a5fe3e0,
46579 +
            0x9f701606b99bc3be,
46580 +
            0x7b078fa6edd7a35c,
46581 +
            0x272af8c6de138302,
46582 +
            0x213013cdea417c1d,
46583 +
            0x7d1d64add9855c43,
46584 +
            0x996afd0d8dc93ca1,
46585 +
            0xc5478a6dbe0d1cff,
46586 +
            0x955f2b1be56cc29f,
46587 +
            0xc9725c7bd6a8e2c1,
46588 +
            0x2d05c5db82e48223,
46589 +
            0x7128b2bbb120a27d,
46590 +
            0x773259b085725d62,
46591 +
            0x2b1f2ed0b6b67d3c,
46592 +
            0xcf68b770e2fa1dde,
46593 +
            0x9345c010d13e3d80,
46594 +
            0x6f59f59c5439a11e,
46595 +
            0x337482fc67fd8140,
46596 +
            0xd7031b5c33b1e1a2,
46597 +
            0x8b2e6c3c0075c1fc,
46598 +
            0x8d34873734273ee3,
46599 +
            0xd119f05707e31ebd,
46600 +
            0x356e69f753af7e5f,
46601 +
            0x69431e97606b5e01,
46602 +
            0x395bbfe13b0a8061,
46603 +
            0x6576c88108cea03f,
46604 +
            0x810151215c82c0dd,
46605 +
            0xdd2c26416f46e083,
46606 +
            0xdb36cd4a5b141f9c,
46607 +
            0x871bba2a68d03fc2,
46608 +
            0x636c238a3c9c5f20,
46609 +
            0x3f4154ea0f587f7e,
46610 +
        ],
46611 +
        [
46612 +
            0x0000000000000000,
46613 +
            0x6184d55f721267c6,
46614 +
            0xc309aabee424cf8c,
46615 +
            0xa28d7fe19636a84a,
46616 +
            0x14cbfa566747819d,
46617 +
            0x754f2f091555e65b,
46618 +
            0xd7c250e883634e11,
46619 +
            0xb64685b7f17129d7,
46620 +
            0x2997f4acce8f033a,
46621 +
            0x481321f3bc9d64fc,
46622 +
            0xea9e5e122aabccb6,
46623 +
            0x8b1a8b4d58b9ab70,
46624 +
            0x3d5c0efaa9c882a7,
46625 +
            0x5cd8dba5dbdae561,
46626 +
            0xfe55a4444dec4d2b,
46627 +
            0x9fd1711b3ffe2aed,
46628 +
            0x532fe9599d1e0674,
46629 +
            0x32ab3c06ef0c61b2,
46630 +
            0x902643e7793ac9f8,
46631 +
            0xf1a296b80b28ae3e,
46632 +
            0x47e4130ffa5987e9,
46633 +
            0x2660c650884be02f,
46634 +
            0x84edb9b11e7d4865,
46635 +
            0xe5696cee6c6f2fa3,
46636 +
            0x7ab81df55391054e,
46637 +
            0x1b3cc8aa21836288,
46638 +
            0xb9b1b74bb7b5cac2,
46639 +
            0xd8356214c5a7ad04,
46640 +
            0x6e73e7a334d684d3,
46641 +
            0x0ff732fc46c4e315,
46642 +
            0xad7a4d1dd0f24b5f,
46643 +
            0xccfe9842a2e02c99,
46644 +
            0xa65fd2b33a3c0ce8,
46645 +
            0xc7db07ec482e6b2e,
46646 +
            0x6556780dde18c364,
46647 +
            0x04d2ad52ac0aa4a2,
46648 +
            0xb29428e55d7b8d75,
46649 +
            0xd310fdba2f69eab3,
46650 +
            0x719d825bb95f42f9,
46651 +
            0x10195704cb4d253f,
46652 +
            0x8fc8261ff4b30fd2,
46653 +
            0xee4cf34086a16814,
46654 +
            0x4cc18ca11097c05e,
46655 +
            0x2d4559fe6285a798,
46656 +
            0x9b03dc4993f48e4f,
46657 +
            0xfa870916e1e6e989,
46658 +
            0x580a76f777d041c3,
46659 +
            0x398ea3a805c22605,
46660 +
            0xf5703beaa7220a9c,
46661 +
            0x94f4eeb5d5306d5a,
46662 +
            0x367991544306c510,
46663 +
            0x57fd440b3114a2d6,
46664 +
            0xe1bbc1bcc0658b01,
46665 +
            0x803f14e3b277ecc7,
46666 +
            0x22b26b022441448d,
46667 +
            0x4336be5d5653234b,
46668 +
            0xdce7cf4669ad09a6,
46669 +
            0xbd631a191bbf6e60,
46670 +
            0x1fee65f88d89c62a,
46671 +
            0x7e6ab0a7ff9ba1ec,
46672 +
            0xc82c35100eea883b,
46673 +
            0xa9a8e04f7cf8effd,
46674 +
            0x0b259faeeace47b7,
46675 +
            0x6aa14af198dc2071,
46676 +
            0xde670a4ddb760755,
46677 +
            0xbfe3df12a9646093,
46678 +
            0x1d6ea0f33f52c8d9,
46679 +
            0x7cea75ac4d40af1f,
46680 +
            0xcaacf01bbc3186c8,
46681 +
            0xab282544ce23e10e,
46682 +
            0x09a55aa558154944,
46683 +
            0x68218ffa2a072e82,
46684 +
            0xf7f0fee115f9046f,
46685 +
            0x96742bbe67eb63a9,
46686 +
            0x34f9545ff1ddcbe3,
46687 +
            0x557d810083cfac25,
46688 +
            0xe33b04b772be85f2,
46689 +
            0x82bfd1e800ace234,
46690 +
            0x2032ae09969a4a7e,
46691 +
            0x41b67b56e4882db8,
46692 +
            0x8d48e31446680121,
46693 +
            0xeccc364b347a66e7,
46694 +
            0x4e4149aaa24ccead,
46695 +
            0x2fc59cf5d05ea96b,
46696 +
            0x99831942212f80bc,
46697 +
            0xf807cc1d533de77a,
46698 +
            0x5a8ab3fcc50b4f30,
46699 +
            0x3b0e66a3b71928f6,
46700 +
            0xa4df17b888e7021b,
46701 +
            0xc55bc2e7faf565dd,
46702 +
            0x67d6bd066cc3cd97,
46703 +
            0x065268591ed1aa51,
46704 +
            0xb014edeeefa08386,
46705 +
            0xd19038b19db2e440,
46706 +
            0x731d47500b844c0a,
46707 +
            0x1299920f79962bcc,
46708 +
            0x7838d8fee14a0bbd,
46709 +
            0x19bc0da193586c7b,
46710 +
            0xbb317240056ec431,
46711 +
            0xdab5a71f777ca3f7,
46712 +
            0x6cf322a8860d8a20,
46713 +
            0x0d77f7f7f41fede6,
46714 +
            0xaffa8816622945ac,
46715 +
            0xce7e5d49103b226a,
46716 +
            0x51af2c522fc50887,
46717 +
            0x302bf90d5dd76f41,
46718 +
            0x92a686eccbe1c70b,
46719 +
            0xf32253b3b9f3a0cd,
46720 +
            0x4564d6044882891a,
46721 +
            0x24e0035b3a90eedc,
46722 +
            0x866d7cbaaca64696,
46723 +
            0xe7e9a9e5deb42150,
46724 +
            0x2b1731a77c540dc9,
46725 +
            0x4a93e4f80e466a0f,
46726 +
            0xe81e9b199870c245,
46727 +
            0x899a4e46ea62a583,
46728 +
            0x3fdccbf11b138c54,
46729 +
            0x5e581eae6901eb92,
46730 +
            0xfcd5614fff3743d8,
46731 +
            0x9d51b4108d25241e,
46732 +
            0x0280c50bb2db0ef3,
46733 +
            0x63041054c0c96935,
46734 +
            0xc1896fb556ffc17f,
46735 +
            0xa00dbaea24eda6b9,
46736 +
            0x164b3f5dd59c8f6e,
46737 +
            0x77cfea02a78ee8a8,
46738 +
            0xd54295e331b840e2,
46739 +
            0xb4c640bc43aa2724,
46740 +
            0x2e16bbb019e2102f,
46741 +
            0x4f926eef6bf077e9,
46742 +
            0xed1f110efdc6dfa3,
46743 +
            0x8c9bc4518fd4b865,
46744 +
            0x3add41e67ea591b2,
46745 +
            0x5b5994b90cb7f674,
46746 +
            0xf9d4eb589a815e3e,
46747 +
            0x98503e07e89339f8,
46748 +
            0x07814f1cd76d1315,
46749 +
            0x66059a43a57f74d3,
46750 +
            0xc488e5a23349dc99,
46751 +
            0xa50c30fd415bbb5f,
46752 +
            0x134ab54ab02a9288,
46753 +
            0x72ce6015c238f54e,
46754 +
            0xd0431ff4540e5d04,
46755 +
            0xb1c7caab261c3ac2,
46756 +
            0x7d3952e984fc165b,
46757 +
            0x1cbd87b6f6ee719d,
46758 +
            0xbe30f85760d8d9d7,
46759 +
            0xdfb42d0812cabe11,
46760 +
            0x69f2a8bfe3bb97c6,
46761 +
            0x08767de091a9f000,
46762 +
            0xaafb0201079f584a,
46763 +
            0xcb7fd75e758d3f8c,
46764 +
            0x54aea6454a731561,
46765 +
            0x352a731a386172a7,
46766 +
            0x97a70cfbae57daed,
46767 +
            0xf623d9a4dc45bd2b,
46768 +
            0x40655c132d3494fc,
46769 +
            0x21e1894c5f26f33a,
46770 +
            0x836cf6adc9105b70,
46771 +
            0xe2e823f2bb023cb6,
46772 +
            0x8849690323de1cc7,
46773 +
            0xe9cdbc5c51cc7b01,
46774 +
            0x4b40c3bdc7fad34b,
46775 +
            0x2ac416e2b5e8b48d,
46776 +
            0x9c82935544999d5a,
46777 +
            0xfd06460a368bfa9c,
46778 +
            0x5f8b39eba0bd52d6,
46779 +
            0x3e0fecb4d2af3510,
46780 +
            0xa1de9dafed511ffd,
46781 +
            0xc05a48f09f43783b,
46782 +
            0x62d737110975d071,
46783 +
            0x0353e24e7b67b7b7,
46784 +
            0xb51567f98a169e60,
46785 +
            0xd491b2a6f804f9a6,
46786 +
            0x761ccd476e3251ec,
46787 +
            0x179818181c20362a,
46788 +
            0xdb66805abec01ab3,
46789 +
            0xbae25505ccd27d75,
46790 +
            0x186f2ae45ae4d53f,
46791 +
            0x79ebffbb28f6b2f9,
46792 +
            0xcfad7a0cd9879b2e,
46793 +
            0xae29af53ab95fce8,
46794 +
            0x0ca4d0b23da354a2,
46795 +
            0x6d2005ed4fb13364,
46796 +
            0xf2f174f6704f1989,
46797 +
            0x9375a1a9025d7e4f,
46798 +
            0x31f8de48946bd605,
46799 +
            0x507c0b17e679b1c3,
46800 +
            0xe63a8ea017089814,
46801 +
            0x87be5bff651affd2,
46802 +
            0x2533241ef32c5798,
46803 +
            0x44b7f141813e305e,
46804 +
            0xf071b1fdc294177a,
46805 +
            0x91f564a2b08670bc,
46806 +
            0x33781b4326b0d8f6,
46807 +
            0x52fcce1c54a2bf30,
46808 +
            0xe4ba4baba5d396e7,
46809 +
            0x853e9ef4d7c1f121,
46810 +
            0x27b3e11541f7596b,
46811 +
            0x4637344a33e53ead,
46812 +
            0xd9e645510c1b1440,
46813 +
            0xb862900e7e097386,
46814 +
            0x1aefefefe83fdbcc,
46815 +
            0x7b6b3ab09a2dbc0a,
46816 +
            0xcd2dbf076b5c95dd,
46817 +
            0xaca96a58194ef21b,
46818 +
            0x0e2415b98f785a51,
46819 +
            0x6fa0c0e6fd6a3d97,
46820 +
            0xa35e58a45f8a110e,
46821 +
            0xc2da8dfb2d9876c8,
46822 +
            0x6057f21abbaede82,
46823 +
            0x01d32745c9bcb944,
46824 +
            0xb795a2f238cd9093,
46825 +
            0xd61177ad4adff755,
46826 +
            0x749c084cdce95f1f,
46827 +
            0x1518dd13aefb38d9,
46828 +
            0x8ac9ac0891051234,
46829 +
            0xeb4d7957e31775f2,
46830 +
            0x49c006b67521ddb8,
46831 +
            0x2844d3e90733ba7e,
46832 +
            0x9e02565ef64293a9,
46833 +
            0xff8683018450f46f,
46834 +
            0x5d0bfce012665c25,
46835 +
            0x3c8f29bf60743be3,
46836 +
            0x562e634ef8a81b92,
46837 +
            0x37aab6118aba7c54,
46838 +
            0x9527c9f01c8cd41e,
46839 +
            0xf4a31caf6e9eb3d8,
46840 +
            0x42e599189fef9a0f,
46841 +
            0x23614c47edfdfdc9,
46842 +
            0x81ec33a67bcb5583,
46843 +
            0xe068e6f909d93245,
46844 +
            0x7fb997e2362718a8,
46845 +
            0x1e3d42bd44357f6e,
46846 +
            0xbcb03d5cd203d724,
46847 +
            0xdd34e803a011b0e2,
46848 +
            0x6b726db451609935,
46849 +
            0x0af6b8eb2372fef3,
46850 +
            0xa87bc70ab54456b9,
46851 +
            0xc9ff1255c756317f,
46852 +
            0x05018a1765b61de6,
46853 +
            0x64855f4817a47a20,
46854 +
            0xc60820a98192d26a,
46855 +
            0xa78cf5f6f380b5ac,
46856 +
            0x11ca704102f19c7b,
46857 +
            0x704ea51e70e3fbbd,
46858 +
            0xd2c3daffe6d553f7,
46859 +
            0xb3470fa094c73431,
46860 +
            0x2c967ebbab391edc,
46861 +
            0x4d12abe4d92b791a,
46862 +
            0xef9fd4054f1dd150,
46863 +
            0x8e1b015a3d0fb696,
46864 +
            0x385d84edcc7e9f41,
46865 +
            0x59d951b2be6cf887,
46866 +
            0xfb542e53285a50cd,
46867 +
            0x9ad0fb0c5a48370b,
46868 +
        ],
46869 +
        [
46870 +
            0x0000000000000000,
46871 +
            0x22ef0d5934f964ec,
46872 +
            0x45de1ab269f2c9d8,
46873 +
            0x673117eb5d0bad34,
46874 +
            0x8bbc3564d3e593b0,
46875 +
            0xa953383de71cf75c,
46876 +
            0xce622fd6ba175a68,
46877 +
            0xec8d228f8eee3e84,
46878 +
            0x85a0c5e208c539e5,
46879 +
            0xa74fc8bb3c3c5d09,
46880 +
            0xc07edf506137f03d,
46881 +
            0xe291d20955ce94d1,
46882 +
            0x0e1cf086db20aa55,
46883 +
            0x2cf3fddfefd9ceb9,
46884 +
            0x4bc2ea34b2d2638d,
46885 +
            0x692de76d862b0761,
46886 +
            0x999924efbe846d4f,
46887 +
            0xbb7629b68a7d09a3,
46888 +
            0xdc473e5dd776a497,
46889 +
            0xfea83304e38fc07b,
46890 +
            0x1225118b6d61feff,
46891 +
            0x30ca1cd259989a13,
46892 +
            0x57fb0b3904933727,
46893 +
            0x75140660306a53cb,
46894 +
            0x1c39e10db64154aa,
46895 +
            0x3ed6ec5482b83046,
46896 +
            0x59e7fbbfdfb39d72,
46897 +
            0x7b08f6e6eb4af99e,
46898 +
            0x9785d46965a4c71a,
46899 +
            0xb56ad930515da3f6,
46900 +
            0xd25bcedb0c560ec2,
46901 +
            0xf0b4c38238af6a2e,
46902 +
            0xa1eae6f4d206c41b,
46903 +
            0x8305ebade6ffa0f7,
46904 +
            0xe434fc46bbf40dc3,
46905 +
            0xc6dbf11f8f0d692f,
46906 +
            0x2a56d39001e357ab,
46907 +
            0x08b9dec9351a3347,
46908 +
            0x6f88c92268119e73,
46909 +
            0x4d67c47b5ce8fa9f,
46910 +
            0x244a2316dac3fdfe,
46911 +
            0x06a52e4fee3a9912,
46912 +
            0x619439a4b3313426,
46913 +
            0x437b34fd87c850ca,
46914 +
            0xaff6167209266e4e,
46915 +
            0x8d191b2b3ddf0aa2,
46916 +
            0xea280cc060d4a796,
46917 +
            0xc8c70199542dc37a,
46918 +
            0x3873c21b6c82a954,
46919 +
            0x1a9ccf42587bcdb8,
46920 +
            0x7dadd8a90570608c,
46921 +
            0x5f42d5f031890460,
46922 +
            0xb3cff77fbf673ae4,
46923 +
            0x9120fa268b9e5e08,
46924 +
            0xf611edcdd695f33c,
46925 +
            0xd4fee094e26c97d0,
46926 +
            0xbdd307f9644790b1,
46927 +
            0x9f3c0aa050bef45d,
46928 +
            0xf80d1d4b0db55969,
46929 +
            0xdae21012394c3d85,
46930 +
            0x366f329db7a20301,
46931 +
            0x14803fc4835b67ed,
46932 +
            0x73b1282fde50cad9,
46933 +
            0x515e2576eaa9ae35,
46934 +
            0xd10d62c20b0396b3,
46935 +
            0xf3e26f9b3ffaf25f,
46936 +
            0x94d3787062f15f6b,
46937 +
            0xb63c752956083b87,
46938 +
            0x5ab157a6d8e60503,
46939 +
            0x785e5affec1f61ef,
46940 +
            0x1f6f4d14b114ccdb,
46941 +
            0x3d80404d85eda837,
46942 +
            0x54ada72003c6af56,
46943 +
            0x7642aa79373fcbba,
46944 +
            0x1173bd926a34668e,
46945 +
            0x339cb0cb5ecd0262,
46946 +
            0xdf119244d0233ce6,
46947 +
            0xfdfe9f1de4da580a,
46948 +
            0x9acf88f6b9d1f53e,
46949 +
            0xb82085af8d2891d2,
46950 +
            0x4894462db587fbfc,
46951 +
            0x6a7b4b74817e9f10,
46952 +
            0x0d4a5c9fdc753224,
46953 +
            0x2fa551c6e88c56c8,
46954 +
            0xc32873496662684c,
46955 +
            0xe1c77e10529b0ca0,
46956 +
            0x86f669fb0f90a194,
46957 +
            0xa41964a23b69c578,
46958 +
            0xcd3483cfbd42c219,
46959 +
            0xefdb8e9689bba6f5,
46960 +
            0x88ea997dd4b00bc1,
46961 +
            0xaa059424e0496f2d,
46962 +
            0x4688b6ab6ea751a9,
46963 +
            0x6467bbf25a5e3545,
46964 +
            0x0356ac1907559871,
46965 +
            0x21b9a14033acfc9d,
46966 +
            0x70e78436d90552a8,
46967 +
            0x5208896fedfc3644,
46968 +
            0x35399e84b0f79b70,
46969 +
            0x17d693dd840eff9c,
46970 +
            0xfb5bb1520ae0c118,
46971 +
            0xd9b4bc0b3e19a5f4,
46972 +
            0xbe85abe0631208c0,
46973 +
            0x9c6aa6b957eb6c2c,
46974 +
            0xf54741d4d1c06b4d,
46975 +
            0xd7a84c8de5390fa1,
46976 +
            0xb0995b66b832a295,
46977 +
            0x9276563f8ccbc679,
46978 +
            0x7efb74b00225f8fd,
46979 +
            0x5c1479e936dc9c11,
46980 +
            0x3b256e026bd73125,
46981 +
            0x19ca635b5f2e55c9,
46982 +
            0xe97ea0d967813fe7,
46983 +
            0xcb91ad8053785b0b,
46984 +
            0xaca0ba6b0e73f63f,
46985 +
            0x8e4fb7323a8a92d3,
46986 +
            0x62c295bdb464ac57,
46987 +
            0x402d98e4809dc8bb,
46988 +
            0x271c8f0fdd96658f,
46989 +
            0x05f38256e96f0163,
46990 +
            0x6cde653b6f440602,
46991 +
            0x4e3168625bbd62ee,
46992 +
            0x29007f8906b6cfda,
46993 +
            0x0bef72d0324fab36,
46994 +
            0xe762505fbca195b2,
46995 +
            0xc58d5d068858f15e,
46996 +
            0xa2bc4aedd5535c6a,
46997 +
            0x805347b4e1aa3886,
46998 +
            0x30c26aafb90933e3,
46999 +
            0x122d67f68df0570f,
47000 +
            0x751c701dd0fbfa3b,
47001 +
            0x57f37d44e4029ed7,
47002 +
            0xbb7e5fcb6aeca053,
47003 +
            0x999152925e15c4bf,
47004 +
            0xfea04579031e698b,
47005 +
            0xdc4f482037e70d67,
47006 +
            0xb562af4db1cc0a06,
47007 +
            0x978da21485356eea,
47008 +
            0xf0bcb5ffd83ec3de,
47009 +
            0xd253b8a6ecc7a732,
47010 +
            0x3ede9a29622999b6,
47011 +
            0x1c31977056d0fd5a,
47012 +
            0x7b00809b0bdb506e,
47013 +
            0x59ef8dc23f223482,
47014 +
            0xa95b4e40078d5eac,
47015 +
            0x8bb4431933743a40,
47016 +
            0xec8554f26e7f9774,
47017 +
            0xce6a59ab5a86f398,
47018 +
            0x22e77b24d468cd1c,
47019 +
            0x0008767de091a9f0,
47020 +
            0x67396196bd9a04c4,
47021 +
            0x45d66ccf89636028,
47022 +
            0x2cfb8ba20f486749,
47023 +
            0x0e1486fb3bb103a5,
47024 +
            0x6925911066baae91,
47025 +
            0x4bca9c495243ca7d,
47026 +
            0xa747bec6dcadf4f9,
47027 +
            0x85a8b39fe8549015,
47028 +
            0xe299a474b55f3d21,
47029 +
            0xc076a92d81a659cd,
47030 +
            0x91288c5b6b0ff7f8,
47031 +
            0xb3c781025ff69314,
47032 +
            0xd4f696e902fd3e20,
47033 +
            0xf6199bb036045acc,
47034 +
            0x1a94b93fb8ea6448,
47035 +
            0x387bb4668c1300a4,
47036 +
            0x5f4aa38dd118ad90,
47037 +
            0x7da5aed4e5e1c97c,
47038 +
            0x148849b963cace1d,
47039 +
            0x366744e05733aaf1,
47040 +
            0x5156530b0a3807c5,
47041 +
            0x73b95e523ec16329,
47042 +
            0x9f347cddb02f5dad,
47043 +
            0xbddb718484d63941,
47044 +
            0xdaea666fd9dd9475,
47045 +
            0xf8056b36ed24f099,
47046 +
            0x08b1a8b4d58b9ab7,
47047 +
            0x2a5ea5ede172fe5b,
47048 +
            0x4d6fb206bc79536f,
47049 +
            0x6f80bf5f88803783,
47050 +
            0x830d9dd0066e0907,
47051 +
            0xa1e2908932976deb,
47052 +
            0xc6d387626f9cc0df,
47053 +
            0xe43c8a3b5b65a433,
47054 +
            0x8d116d56dd4ea352,
47055 +
            0xaffe600fe9b7c7be,
47056 +
            0xc8cf77e4b4bc6a8a,
47057 +
            0xea207abd80450e66,
47058 +
            0x06ad58320eab30e2,
47059 +
            0x2442556b3a52540e,
47060 +
            0x437342806759f93a,
47061 +
            0x619c4fd953a09dd6,
47062 +
            0xe1cf086db20aa550,
47063 +
            0xc320053486f3c1bc,
47064 +
            0xa41112dfdbf86c88,
47065 +
            0x86fe1f86ef010864,
47066 +
            0x6a733d0961ef36e0,
47067 +
            0x489c30505516520c,
47068 +
            0x2fad27bb081dff38,
47069 +
            0x0d422ae23ce49bd4,
47070 +
            0x646fcd8fbacf9cb5,
47071 +
            0x4680c0d68e36f859,
47072 +
            0x21b1d73dd33d556d,
47073 +
            0x035eda64e7c43181,
47074 +
            0xefd3f8eb692a0f05,
47075 +
            0xcd3cf5b25dd36be9,
47076 +
            0xaa0de25900d8c6dd,
47077 +
            0x88e2ef003421a231,
47078 +
            0x78562c820c8ec81f,
47079 +
            0x5ab921db3877acf3,
47080 +
            0x3d883630657c01c7,
47081 +
            0x1f673b695185652b,
47082 +
            0xf3ea19e6df6b5baf,
47083 +
            0xd10514bfeb923f43,
47084 +
            0xb6340354b6999277,
47085 +
            0x94db0e0d8260f69b,
47086 +
            0xfdf6e960044bf1fa,
47087 +
            0xdf19e43930b29516,
47088 +
            0xb828f3d26db93822,
47089 +
            0x9ac7fe8b59405cce,
47090 +
            0x764adc04d7ae624a,
47091 +
            0x54a5d15de35706a6,
47092 +
            0x3394c6b6be5cab92,
47093 +
            0x117bcbef8aa5cf7e,
47094 +
            0x4025ee99600c614b,
47095 +
            0x62cae3c054f505a7,
47096 +
            0x05fbf42b09fea893,
47097 +
            0x2714f9723d07cc7f,
47098 +
            0xcb99dbfdb3e9f2fb,
47099 +
            0xe976d6a487109617,
47100 +
            0x8e47c14fda1b3b23,
47101 +
            0xaca8cc16eee25fcf,
47102 +
            0xc5852b7b68c958ae,
47103 +
            0xe76a26225c303c42,
47104 +
            0x805b31c9013b9176,
47105 +
            0xa2b43c9035c2f59a,
47106 +
            0x4e391e1fbb2ccb1e,
47107 +
            0x6cd613468fd5aff2,
47108 +
            0x0be704add2de02c6,
47109 +
            0x290809f4e627662a,
47110 +
            0xd9bcca76de880c04,
47111 +
            0xfb53c72fea7168e8,
47112 +
            0x9c62d0c4b77ac5dc,
47113 +
            0xbe8ddd9d8383a130,
47114 +
            0x5200ff120d6d9fb4,
47115 +
            0x70eff24b3994fb58,
47116 +
            0x17dee5a0649f566c,
47117 +
            0x3531e8f950663280,
47118 +
            0x5c1c0f94d64d35e1,
47119 +
            0x7ef302cde2b4510d,
47120 +
            0x19c21526bfbffc39,
47121 +
            0x3b2d187f8b4698d5,
47122 +
            0xd7a03af005a8a651,
47123 +
            0xf54f37a93151c2bd,
47124 +
            0x927e20426c5a6f89,
47125 +
            0xb0912d1b58a30b65,
47126 +
        ],
47127 +
        [
47128 +
            0x0000000000000000,
47129 +
            0xdabe95afc7875f40,
47130 +
            0x27a584742000a005,
47131 +
            0xfd1b11dbe787ff45,
47132 +
            0x4f4b08e84001400a,
47133 +
            0x95f59d4787861f4a,
47134 +
            0x68ee8c9c6001e00f,
47135 +
            0xb2501933a786bf4f,
47136 +
            0x9e9611d080028014,
47137 +
            0x4428847f4785df54,
47138 +
            0xb93395a4a0022011,
47139 +
            0x638d000b67857f51,
47140 +
            0xd1dd1938c003c01e,
47141 +
            0x0b638c9707849f5e,
47142 +
            0xf6789d4ce003601b,
47143 +
            0x2cc608e327843f5b,
47144 +
            0xaff48c8aaf0b1ead,
47145 +
            0x754a1925688c41ed,
47146 +
            0x885108fe8f0bbea8,
47147 +
            0x52ef9d51488ce1e8,
47148 +
            0xe0bf8462ef0a5ea7,
47149 +
            0x3a0111cd288d01e7,
47150 +
            0xc71a0016cf0afea2,
47151 +
            0x1da495b9088da1e2,
47152 +
            0x31629d5a2f099eb9,
47153 +
            0xebdc08f5e88ec1f9,
47154 +
            0x16c7192e0f093ebc,
47155 +
            0xcc798c81c88e61fc,
47156 +
            0x7e2995b26f08deb3,
47157 +
            0xa497001da88f81f3,
47158 +
            0x598c11c64f087eb6,
47159 +
            0x83328469888f21f6,
47160 +
            0xcd31b63ef11823df,
47161 +
            0x178f2391369f7c9f,
47162 +
            0xea94324ad11883da,
47163 +
            0x302aa7e5169fdc9a,
47164 +
            0x827abed6b11963d5,
47165 +
            0x58c42b79769e3c95,
47166 +
            0xa5df3aa29119c3d0,
47167 +
            0x7f61af0d569e9c90,
47168 +
            0x53a7a7ee711aa3cb,
47169 +
            0x89193241b69dfc8b,
47170 +
            0x7402239a511a03ce,
47171 +
            0xaebcb635969d5c8e,
47172 +
            0x1cecaf06311be3c1,
47173 +
            0xc6523aa9f69cbc81,
47174 +
            0x3b492b72111b43c4,
47175 +
            0xe1f7beddd69c1c84,
47176 +
            0x62c53ab45e133d72,
47177 +
            0xb87baf1b99946232,
47178 +
            0x4560bec07e139d77,
47179 +
            0x9fde2b6fb994c237,
47180 +
            0x2d8e325c1e127d78,
47181 +
            0xf730a7f3d9952238,
47182 +
            0x0a2bb6283e12dd7d,
47183 +
            0xd0952387f995823d,
47184 +
            0xfc532b64de11bd66,
47185 +
            0x26edbecb1996e226,
47186 +
            0xdbf6af10fe111d63,
47187 +
            0x01483abf39964223,
47188 +
            0xb318238c9e10fd6c,
47189 +
            0x69a6b6235997a22c,
47190 +
            0x94bda7f8be105d69,
47191 +
            0x4e03325779970229,
47192 +
            0x08bbc3564d3e593b,
47193 +
            0xd20556f98ab9067b,
47194 +
            0x2f1e47226d3ef93e,
47195 +
            0xf5a0d28daab9a67e,
47196 +
            0x47f0cbbe0d3f1931,
47197 +
            0x9d4e5e11cab84671,
47198 +
            0x60554fca2d3fb934,
47199 +
            0xbaebda65eab8e674,
47200 +
            0x962dd286cd3cd92f,
47201 +
            0x4c9347290abb866f,
47202 +
            0xb18856f2ed3c792a,
47203 +
            0x6b36c35d2abb266a,
47204 +
            0xd966da6e8d3d9925,
47205 +
            0x03d84fc14abac665,
47206 +
            0xfec35e1aad3d3920,
47207 +
            0x247dcbb56aba6660,
47208 +
            0xa74f4fdce2354796,
47209 +
            0x7df1da7325b218d6,
47210 +
            0x80eacba8c235e793,
47211 +
            0x5a545e0705b2b8d3,
47212 +
            0xe8044734a234079c,
47213 +
            0x32bad29b65b358dc,
47214 +
            0xcfa1c3408234a799,
47215 +
            0x151f56ef45b3f8d9,
47216 +
            0x39d95e0c6237c782,
47217 +
            0xe367cba3a5b098c2,
47218 +
            0x1e7cda7842376787,
47219 +
            0xc4c24fd785b038c7,
47220 +
            0x769256e422368788,
47221 +
            0xac2cc34be5b1d8c8,
47222 +
            0x5137d2900236278d,
47223 +
            0x8b89473fc5b178cd,
47224 +
            0xc58a7568bc267ae4,
47225 +
            0x1f34e0c77ba125a4,
47226 +
            0xe22ff11c9c26dae1,
47227 +
            0x389164b35ba185a1,
47228 +
            0x8ac17d80fc273aee,
47229 +
            0x507fe82f3ba065ae,
47230 +
            0xad64f9f4dc279aeb,
47231 +
            0x77da6c5b1ba0c5ab,
47232 +
            0x5b1c64b83c24faf0,
47233 +
            0x81a2f117fba3a5b0,
47234 +
            0x7cb9e0cc1c245af5,
47235 +
            0xa6077563dba305b5,
47236 +
            0x14576c507c25bafa,
47237 +
            0xcee9f9ffbba2e5ba,
47238 +
            0x33f2e8245c251aff,
47239 +
            0xe94c7d8b9ba245bf,
47240 +
            0x6a7ef9e2132d6449,
47241 +
            0xb0c06c4dd4aa3b09,
47242 +
            0x4ddb7d96332dc44c,
47243 +
            0x9765e839f4aa9b0c,
47244 +
            0x2535f10a532c2443,
47245 +
            0xff8b64a594ab7b03,
47246 +
            0x0290757e732c8446,
47247 +
            0xd82ee0d1b4abdb06,
47248 +
            0xf4e8e832932fe45d,
47249 +
            0x2e567d9d54a8bb1d,
47250 +
            0xd34d6c46b32f4458,
47251 +
            0x09f3f9e974a81b18,
47252 +
            0xbba3e0dad32ea457,
47253 +
            0x611d757514a9fb17,
47254 +
            0x9c0664aef32e0452,
47255 +
            0x46b8f10134a95b12,
47256 +
            0x117786ac9a7cb276,
47257 +
            0xcbc913035dfbed36,
47258 +
            0x36d202d8ba7c1273,
47259 +
            0xec6c97777dfb4d33,
47260 +
            0x5e3c8e44da7df27c,
47261 +
            0x84821beb1dfaad3c,
47262 +
            0x79990a30fa7d5279,
47263 +
            0xa3279f9f3dfa0d39,
47264 +
            0x8fe1977c1a7e3262,
47265 +
            0x555f02d3ddf96d22,
47266 +
            0xa84413083a7e9267,
47267 +
            0x72fa86a7fdf9cd27,
47268 +
            0xc0aa9f945a7f7268,
47269 +
            0x1a140a3b9df82d28,
47270 +
            0xe70f1be07a7fd26d,
47271 +
            0x3db18e4fbdf88d2d,
47272 +
            0xbe830a263577acdb,
47273 +
            0x643d9f89f2f0f39b,
47274 +
            0x99268e5215770cde,
47275 +
            0x43981bfdd2f0539e,
47276 +
            0xf1c802ce7576ecd1,
47277 +
            0x2b769761b2f1b391,
47278 +
            0xd66d86ba55764cd4,
47279 +
            0x0cd3131592f11394,
47280 +
            0x20151bf6b5752ccf,
47281 +
            0xfaab8e5972f2738f,
47282 +
            0x07b09f8295758cca,
47283 +
            0xdd0e0a2d52f2d38a,
47284 +
            0x6f5e131ef5746cc5,
47285 +
            0xb5e086b132f33385,
47286 +
            0x48fb976ad574ccc0,
47287 +
            0x924502c512f39380,
47288 +
            0xdc4630926b6491a9,
47289 +
            0x06f8a53dace3cee9,
47290 +
            0xfbe3b4e64b6431ac,
47291 +
            0x215d21498ce36eec,
47292 +
            0x930d387a2b65d1a3,
47293 +
            0x49b3add5ece28ee3,
47294 +
            0xb4a8bc0e0b6571a6,
47295 +
            0x6e1629a1cce22ee6,
47296 +
            0x42d02142eb6611bd,
47297 +
            0x986eb4ed2ce14efd,
47298 +
            0x6575a536cb66b1b8,
47299 +
            0xbfcb30990ce1eef8,
47300 +
            0x0d9b29aaab6751b7,
47301 +
            0xd725bc056ce00ef7,
47302 +
            0x2a3eadde8b67f1b2,
47303 +
            0xf08038714ce0aef2,
47304 +
            0x73b2bc18c46f8f04,
47305 +
            0xa90c29b703e8d044,
47306 +
            0x5417386ce46f2f01,
47307 +
            0x8ea9adc323e87041,
47308 +
            0x3cf9b4f0846ecf0e,
47309 +
            0xe647215f43e9904e,
47310 +
            0x1b5c3084a46e6f0b,
47311 +
            0xc1e2a52b63e9304b,
47312 +
            0xed24adc8446d0f10,
47313 +
            0x379a386783ea5050,
47314 +
            0xca8129bc646daf15,
47315 +
            0x103fbc13a3eaf055,
47316 +
            0xa26fa520046c4f1a,
47317 +
            0x78d1308fc3eb105a,
47318 +
            0x85ca2154246cef1f,
47319 +
            0x5f74b4fbe3ebb05f,
47320 +
            0x19cc45fad742eb4d,
47321 +
            0xc372d05510c5b40d,
47322 +
            0x3e69c18ef7424b48,
47323 +
            0xe4d7542130c51408,
47324 +
            0x56874d129743ab47,
47325 +
            0x8c39d8bd50c4f407,
47326 +
            0x7122c966b7430b42,
47327 +
            0xab9c5cc970c45402,
47328 +
            0x875a542a57406b59,
47329 +
            0x5de4c18590c73419,
47330 +
            0xa0ffd05e7740cb5c,
47331 +
            0x7a4145f1b0c7941c,
47332 +
            0xc8115cc217412b53,
47333 +
            0x12afc96dd0c67413,
47334 +
            0xefb4d8b637418b56,
47335 +
            0x350a4d19f0c6d416,
47336 +
            0xb638c9707849f5e0,
47337 +
            0x6c865cdfbfceaaa0,
47338 +
            0x919d4d04584955e5,
47339 +
            0x4b23d8ab9fce0aa5,
47340 +
            0xf973c1983848b5ea,
47341 +
            0x23cd5437ffcfeaaa,
47342 +
            0xded645ec184815ef,
47343 +
            0x0468d043dfcf4aaf,
47344 +
            0x28aed8a0f84b75f4,
47345 +
            0xf2104d0f3fcc2ab4,
47346 +
            0x0f0b5cd4d84bd5f1,
47347 +
            0xd5b5c97b1fcc8ab1,
47348 +
            0x67e5d048b84a35fe,
47349 +
            0xbd5b45e77fcd6abe,
47350 +
            0x4040543c984a95fb,
47351 +
            0x9afec1935fcdcabb,
47352 +
            0xd4fdf3c4265ac892,
47353 +
            0x0e43666be1dd97d2,
47354 +
            0xf35877b0065a6897,
47355 +
            0x29e6e21fc1dd37d7,
47356 +
            0x9bb6fb2c665b8898,
47357 +
            0x41086e83a1dcd7d8,
47358 +
            0xbc137f58465b289d,
47359 +
            0x66adeaf781dc77dd,
47360 +
            0x4a6be214a6584886,
47361 +
            0x90d577bb61df17c6,
47362 +
            0x6dce66608658e883,
47363 +
            0xb770f3cf41dfb7c3,
47364 +
            0x0520eafce659088c,
47365 +
            0xdf9e7f5321de57cc,
47366 +
            0x22856e88c659a889,
47367 +
            0xf83bfb2701def7c9,
47368 +
            0x7b097f4e8951d63f,
47369 +
            0xa1b7eae14ed6897f,
47370 +
            0x5cacfb3aa951763a,
47371 +
            0x86126e956ed6297a,
47372 +
            0x344277a6c9509635,
47373 +
            0xeefce2090ed7c975,
47374 +
            0x13e7f3d2e9503630,
47375 +
            0xc959667d2ed76970,
47376 +
            0xe59f6e9e0953562b,
47377 +
            0x3f21fb31ced4096b,
47378 +
            0xc23aeaea2953f62e,
47379 +
            0x18847f45eed4a96e,
47380 +
            0xaad4667649521621,
47381 +
            0x706af3d98ed54961,
47382 +
            0x8d71e2026952b624,
47383 +
            0x57cf77adaed5e964,
47384 +
        ],
47385 +
        [
47386 +
            0x0000000000000000,
47387 +
            0x646c955f440400fe,
47388 +
            0xc8d92abe880801fc,
47389 +
            0xacb5bfe1cc0c0102,
47390 +
            0x036afa56bf1e1d7d,
47391 +
            0x67066f09fb1a1d83,
47392 +
            0xcbb3d0e837161c81,
47393 +
            0xafdf45b773121c7f,
47394 +
            0x06d5f4ad7e3c3afa,
47395 +
            0x62b961f23a383a04,
47396 +
            0xce0cde13f6343b06,
47397 +
            0xaa604b4cb2303bf8,
47398 +
            0x05bf0efbc1222787,
47399 +
            0x61d39ba485262779,
47400 +
            0xcd662445492a267b,
47401 +
            0xa90ab11a0d2e2685,
47402 +
            0x0dabe95afc7875f4,
47403 +
            0x69c77c05b87c750a,
47404 +
            0xc572c3e474707408,
47405 +
            0xa11e56bb307474f6,
47406 +
            0x0ec1130c43666889,
47407 +
            0x6aad865307626877,
47408 +
            0xc61839b2cb6e6975,
47409 +
            0xa274aced8f6a698b,
47410 +
            0x0b7e1df782444f0e,
47411 +
            0x6f1288a8c6404ff0,
47412 +
            0xc3a737490a4c4ef2,
47413 +
            0xa7cba2164e484e0c,
47414 +
            0x0814e7a13d5a5273,
47415 +
            0x6c7872fe795e528d,
47416 +
            0xc0cdcd1fb552538f,
47417 +
            0xa4a15840f1565371,
47418 +
            0x1b57d2b5f8f0ebe8,
47419 +
            0x7f3b47eabcf4eb16,
47420 +
            0xd38ef80b70f8ea14,
47421 +
            0xb7e26d5434fceaea,
47422 +
            0x183d28e347eef695,
47423 +
            0x7c51bdbc03eaf66b,
47424 +
            0xd0e4025dcfe6f769,
47425 +
            0xb48897028be2f797,
47426 +
            0x1d82261886ccd112,
47427 +
            0x79eeb347c2c8d1ec,
47428 +
            0xd55b0ca60ec4d0ee,
47429 +
            0xb13799f94ac0d010,
47430 +
            0x1ee8dc4e39d2cc6f,
47431 +
            0x7a8449117dd6cc91,
47432 +
            0xd631f6f0b1dacd93,
47433 +
            0xb25d63aff5decd6d,
47434 +
            0x16fc3bef04889e1c,
47435 +
            0x7290aeb0408c9ee2,
47436 +
            0xde2511518c809fe0,
47437 +
            0xba49840ec8849f1e,
47438 +
            0x1596c1b9bb968361,
47439 +
            0x71fa54e6ff92839f,
47440 +
            0xdd4feb07339e829d,
47441 +
            0xb9237e58779a8263,
47442 +
            0x1029cf427ab4a4e6,
47443 +
            0x74455a1d3eb0a418,
47444 +
            0xd8f0e5fcf2bca51a,
47445 +
            0xbc9c70a3b6b8a5e4,
47446 +
            0x13433514c5aab99b,
47447 +
            0x772fa04b81aeb965,
47448 +
            0xdb9a1faa4da2b867,
47449 +
            0xbff68af509a6b899,
47450 +
            0x36afa56bf1e1d7d0,
47451 +
            0x52c33034b5e5d72e,
47452 +
            0xfe768fd579e9d62c,
47453 +
            0x9a1a1a8a3dedd6d2,
47454 +
            0x35c55f3d4effcaad,
47455 +
            0x51a9ca620afbca53,
47456 +
            0xfd1c7583c6f7cb51,
47457 +
            0x9970e0dc82f3cbaf,
47458 +
            0x307a51c68fdded2a,
47459 +
            0x5416c499cbd9edd4,
47460 +
            0xf8a37b7807d5ecd6,
47461 +
            0x9ccfee2743d1ec28,
47462 +
            0x3310ab9030c3f057,
47463 +
            0x577c3ecf74c7f0a9,
47464 +
            0xfbc9812eb8cbf1ab,
47465 +
            0x9fa51471fccff155,
47466 +
            0x3b044c310d99a224,
47467 +
            0x5f68d96e499da2da,
47468 +
            0xf3dd668f8591a3d8,
47469 +
            0x97b1f3d0c195a326,
47470 +
            0x386eb667b287bf59,
47471 +
            0x5c022338f683bfa7,
47472 +
            0xf0b79cd93a8fbea5,
47473 +
            0x94db09867e8bbe5b,
47474 +
            0x3dd1b89c73a598de,
47475 +
            0x59bd2dc337a19820,
47476 +
            0xf5089222fbad9922,
47477 +
            0x9164077dbfa999dc,
47478 +
            0x3ebb42caccbb85a3,
47479 +
            0x5ad7d79588bf855d,
47480 +
            0xf662687444b3845f,
47481 +
            0x920efd2b00b784a1,
47482 +
            0x2df877de09113c38,
47483 +
            0x4994e2814d153cc6,
47484 +
            0xe5215d6081193dc4,
47485 +
            0x814dc83fc51d3d3a,
47486 +
            0x2e928d88b60f2145,
47487 +
            0x4afe18d7f20b21bb,
47488 +
            0xe64ba7363e0720b9,
47489 +
            0x822732697a032047,
47490 +
            0x2b2d8373772d06c2,
47491 +
            0x4f41162c3329063c,
47492 +
            0xe3f4a9cdff25073e,
47493 +
            0x87983c92bb2107c0,
47494 +
            0x28477925c8331bbf,
47495 +
            0x4c2bec7a8c371b41,
47496 +
            0xe09e539b403b1a43,
47497 +
            0x84f2c6c4043f1abd,
47498 +
            0x20539e84f56949cc,
47499 +
            0x443f0bdbb16d4932,
47500 +
            0xe88ab43a7d614830,
47501 +
            0x8ce62165396548ce,
47502 +
            0x233964d24a7754b1,
47503 +
            0x4755f18d0e73544f,
47504 +
            0xebe04e6cc27f554d,
47505 +
            0x8f8cdb33867b55b3,
47506 +
            0x26866a298b557336,
47507 +
            0x42eaff76cf5173c8,
47508 +
            0xee5f4097035d72ca,
47509 +
            0x8a33d5c847597234,
47510 +
            0x25ec907f344b6e4b,
47511 +
            0x41800520704f6eb5,
47512 +
            0xed35bac1bc436fb7,
47513 +
            0x89592f9ef8476f49,
47514 +
            0x6d5f4ad7e3c3afa0,
47515 +
            0x0933df88a7c7af5e,
47516 +
            0xa58660696bcbae5c,
47517 +
            0xc1eaf5362fcfaea2,
47518 +
            0x6e35b0815cddb2dd,
47519 +
            0x0a5925de18d9b223,
47520 +
            0xa6ec9a3fd4d5b321,
47521 +
            0xc2800f6090d1b3df,
47522 +
            0x6b8abe7a9dff955a,
47523 +
            0x0fe62b25d9fb95a4,
47524 +
            0xa35394c415f794a6,
47525 +
            0xc73f019b51f39458,
47526 +
            0x68e0442c22e18827,
47527 +
            0x0c8cd17366e588d9,
47528 +
            0xa0396e92aae989db,
47529 +
            0xc455fbcdeeed8925,
47530 +
            0x60f4a38d1fbbda54,
47531 +
            0x049836d25bbfdaaa,
47532 +
            0xa82d893397b3dba8,
47533 +
            0xcc411c6cd3b7db56,
47534 +
            0x639e59dba0a5c729,
47535 +
            0x07f2cc84e4a1c7d7,
47536 +
            0xab47736528adc6d5,
47537 +
            0xcf2be63a6ca9c62b,
47538 +
            0x662157206187e0ae,
47539 +
            0x024dc27f2583e050,
47540 +
            0xaef87d9ee98fe152,
47541 +
            0xca94e8c1ad8be1ac,
47542 +
            0x654bad76de99fdd3,
47543 +
            0x012738299a9dfd2d,
47544 +
            0xad9287c85691fc2f,
47545 +
            0xc9fe12971295fcd1,
47546 +
            0x760898621b334448,
47547 +
            0x12640d3d5f3744b6,
47548 +
            0xbed1b2dc933b45b4,
47549 +
            0xdabd2783d73f454a,
47550 +
            0x75626234a42d5935,
47551 +
            0x110ef76be02959cb,
47552 +
            0xbdbb488a2c2558c9,
47553 +
            0xd9d7ddd568215837,
47554 +
            0x70dd6ccf650f7eb2,
47555 +
            0x14b1f990210b7e4c,
47556 +
            0xb8044671ed077f4e,
47557 +
            0xdc68d32ea9037fb0,
47558 +
            0x73b79699da1163cf,
47559 +
            0x17db03c69e156331,
47560 +
            0xbb6ebc2752196233,
47561 +
            0xdf022978161d62cd,
47562 +
            0x7ba37138e74b31bc,
47563 +
            0x1fcfe467a34f3142,
47564 +
            0xb37a5b866f433040,
47565 +
            0xd716ced92b4730be,
47566 +
            0x78c98b6e58552cc1,
47567 +
            0x1ca51e311c512c3f,
47568 +
            0xb010a1d0d05d2d3d,
47569 +
            0xd47c348f94592dc3,
47570 +
            0x7d76859599770b46,
47571 +
            0x191a10cadd730bb8,
47572 +
            0xb5afaf2b117f0aba,
47573 +
            0xd1c33a74557b0a44,
47574 +
            0x7e1c7fc32669163b,
47575 +
            0x1a70ea9c626d16c5,
47576 +
            0xb6c5557dae6117c7,
47577 +
            0xd2a9c022ea651739,
47578 +
            0x5bf0efbc12227870,
47579 +
            0x3f9c7ae35626788e,
47580 +
            0x9329c5029a2a798c,
47581 +
            0xf745505dde2e7972,
47582 +
            0x589a15eaad3c650d,
47583 +
            0x3cf680b5e93865f3,
47584 +
            0x90433f54253464f1,
47585 +
            0xf42faa0b6130640f,
47586 +
            0x5d251b116c1e428a,
47587 +
            0x39498e4e281a4274,
47588 +
            0x95fc31afe4164376,
47589 +
            0xf190a4f0a0124388,
47590 +
            0x5e4fe147d3005ff7,
47591 +
            0x3a23741897045f09,
47592 +
            0x9696cbf95b085e0b,
47593 +
            0xf2fa5ea61f0c5ef5,
47594 +
            0x565b06e6ee5a0d84,
47595 +
            0x323793b9aa5e0d7a,
47596 +
            0x9e822c5866520c78,
47597 +
            0xfaeeb90722560c86,
47598 +
            0x5531fcb0514410f9,
47599 +
            0x315d69ef15401007,
47600 +
            0x9de8d60ed94c1105,
47601 +
            0xf98443519d4811fb,
47602 +
            0x508ef24b9066377e,
47603 +
            0x34e26714d4623780,
47604 +
            0x9857d8f5186e3682,
47605 +
            0xfc3b4daa5c6a367c,
47606 +
            0x53e4081d2f782a03,
47607 +
            0x37889d426b7c2afd,
47608 +
            0x9b3d22a3a7702bff,
47609 +
            0xff51b7fce3742b01,
47610 +
            0x40a73d09ead29398,
47611 +
            0x24cba856aed69366,
47612 +
            0x887e17b762da9264,
47613 +
            0xec1282e826de929a,
47614 +
            0x43cdc75f55cc8ee5,
47615 +
            0x27a1520011c88e1b,
47616 +
            0x8b14ede1ddc48f19,
47617 +
            0xef7878be99c08fe7,
47618 +
            0x4672c9a494eea962,
47619 +
            0x221e5cfbd0eaa99c,
47620 +
            0x8eabe31a1ce6a89e,
47621 +
            0xeac7764558e2a860,
47622 +
            0x451833f22bf0b41f,
47623 +
            0x2174a6ad6ff4b4e1,
47624 +
            0x8dc1194ca3f8b5e3,
47625 +
            0xe9ad8c13e7fcb51d,
47626 +
            0x4d0cd45316aae66c,
47627 +
            0x2960410c52aee692,
47628 +
            0x85d5feed9ea2e790,
47629 +
            0xe1b96bb2daa6e76e,
47630 +
            0x4e662e05a9b4fb11,
47631 +
            0x2a0abb5aedb0fbef,
47632 +
            0x86bf04bb21bcfaed,
47633 +
            0xe2d391e465b8fa13,
47634 +
            0x4bd920fe6896dc96,
47635 +
            0x2fb5b5a12c92dc68,
47636 +
            0x83000a40e09edd6a,
47637 +
            0xe76c9f1fa49add94,
47638 +
            0x48b3daa8d788c1eb,
47639 +
            0x2cdf4ff7938cc115,
47640 +
            0x806af0165f80c017,
47641 +
            0xe40665491b84c0e9,
47642 +
        ],
47643 +
        [
47644 +
            0x0000000000000000,
47645 +
            0x53e7815838846436,
47646 +
            0xa7cf02b07108c86c,
47647 +
            0xf42883e8498cac5a,
47648 +
            0xdd46aa4b4d1f8e5d,
47649 +
            0x8ea12b13759bea6b,
47650 +
            0x7a89a8fb3c174631,
47651 +
            0x296e29a304932207,
47652 +
            0x2855fbbd3531023f,
47653 +
            0x7bb27ae50db56609,
47654 +
            0x8f9af90d4439ca53,
47655 +
            0xdc7d78557cbdae65,
47656 +
            0xf51351f6782e8c62,
47657 +
            0xa6f4d0ae40aae854,
47658 +
            0x52dc53460926440e,
47659 +
            0x013bd21e31a22038,
47660 +
            0x50abf77a6a62047e,
47661 +
            0x034c762252e66048,
47662 +
            0xf764f5ca1b6acc12,
47663 +
            0xa483749223eea824,
47664 +
            0x8ded5d31277d8a23,
47665 +
            0xde0adc691ff9ee15,
47666 +
            0x2a225f815675424f,
47667 +
            0x79c5ded96ef12679,
47668 +
            0x78fe0cc75f530641,
47669 +
            0x2b198d9f67d76277,
47670 +
            0xdf310e772e5bce2d,
47671 +
            0x8cd68f2f16dfaa1b,
47672 +
            0xa5b8a68c124c881c,
47673 +
            0xf65f27d42ac8ec2a,
47674 +
            0x0277a43c63444070,
47675 +
            0x519025645bc02446,
47676 +
            0xa157eef4d4c408fc,
47677 +
            0xf2b06facec406cca,
47678 +
            0x0698ec44a5ccc090,
47679 +
            0x557f6d1c9d48a4a6,
47680 +
            0x7c1144bf99db86a1,
47681 +
            0x2ff6c5e7a15fe297,
47682 +
            0xdbde460fe8d34ecd,
47683 +
            0x8839c757d0572afb,
47684 +
            0x89021549e1f50ac3,
47685 +
            0xdae59411d9716ef5,
47686 +
            0x2ecd17f990fdc2af,
47687 +
            0x7d2a96a1a879a699,
47688 +
            0x5444bf02acea849e,
47689 +
            0x07a33e5a946ee0a8,
47690 +
            0xf38bbdb2dde24cf2,
47691 +
            0xa06c3ceae56628c4,
47692 +
            0xf1fc198ebea60c82,
47693 +
            0xa21b98d6862268b4,
47694 +
            0x56331b3ecfaec4ee,
47695 +
            0x05d49a66f72aa0d8,
47696 +
            0x2cbab3c5f3b982df,
47697 +
            0x7f5d329dcb3de6e9,
47698 +
            0x8b75b17582b14ab3,
47699 +
            0xd892302dba352e85,
47700 +
            0xd9a9e2338b970ebd,
47701 +
            0x8a4e636bb3136a8b,
47702 +
            0x7e66e083fa9fc6d1,
47703 +
            0x2d8161dbc21ba2e7,
47704 +
            0x04ef4878c68880e0,
47705 +
            0x5708c920fe0ce4d6,
47706 +
            0xa3204ac8b780488c,
47707 +
            0xf0c7cb908f042cba,
47708 +
            0xd07772c206860f7d,
47709 +
            0x8390f39a3e026b4b,
47710 +
            0x77b87072778ec711,
47711 +
            0x245ff12a4f0aa327,
47712 +
            0x0d31d8894b998120,
47713 +
            0x5ed659d1731de516,
47714 +
            0xaafeda393a91494c,
47715 +
            0xf9195b6102152d7a,
47716 +
            0xf822897f33b70d42,
47717 +
            0xabc508270b336974,
47718 +
            0x5fed8bcf42bfc52e,
47719 +
            0x0c0a0a977a3ba118,
47720 +
            0x256423347ea8831f,
47721 +
            0x7683a26c462ce729,
47722 +
            0x82ab21840fa04b73,
47723 +
            0xd14ca0dc37242f45,
47724 +
            0x80dc85b86ce40b03,
47725 +
            0xd33b04e054606f35,
47726 +
            0x271387081decc36f,
47727 +
            0x74f406502568a759,
47728 +
            0x5d9a2ff321fb855e,
47729 +
            0x0e7daeab197fe168,
47730 +
            0xfa552d4350f34d32,
47731 +
            0xa9b2ac1b68772904,
47732 +
            0xa8897e0559d5093c,
47733 +
            0xfb6eff5d61516d0a,
47734 +
            0x0f467cb528ddc150,
47735 +
            0x5ca1fded1059a566,
47736 +
            0x75cfd44e14ca8761,
47737 +
            0x262855162c4ee357,
47738 +
            0xd200d6fe65c24f0d,
47739 +
            0x81e757a65d462b3b,
47740 +
            0x71209c36d2420781,
47741 +
            0x22c71d6eeac663b7,
47742 +
            0xd6ef9e86a34acfed,
47743 +
            0x85081fde9bceabdb,
47744 +
            0xac66367d9f5d89dc,
47745 +
            0xff81b725a7d9edea,
47746 +
            0x0ba934cdee5541b0,
47747 +
            0x584eb595d6d12586,
47748 +
            0x5975678be77305be,
47749 +
            0x0a92e6d3dff76188,
47750 +
            0xfeba653b967bcdd2,
47751 +
            0xad5de463aeffa9e4,
47752 +
            0x8433cdc0aa6c8be3,
47753 +
            0xd7d44c9892e8efd5,
47754 +
            0x23fccf70db64438f,
47755 +
            0x701b4e28e3e027b9,
47756 +
            0x218b6b4cb82003ff,
47757 +
            0x726cea1480a467c9,
47758 +
            0x864469fcc928cb93,
47759 +
            0xd5a3e8a4f1acafa5,
47760 +
            0xfccdc107f53f8da2,
47761 +
            0xaf2a405fcdbbe994,
47762 +
            0x5b02c3b7843745ce,
47763 +
            0x08e542efbcb321f8,
47764 +
            0x09de90f18d1101c0,
47765 +
            0x5a3911a9b59565f6,
47766 +
            0xae119241fc19c9ac,
47767 +
            0xfdf61319c49dad9a,
47768 +
            0xd4983abac00e8f9d,
47769 +
            0x877fbbe2f88aebab,
47770 +
            0x7357380ab10647f1,
47771 +
            0x20b0b952898223c7,
47772 +
            0x32364aafa202007f,
47773 +
            0x61d1cbf79a866449,
47774 +
            0x95f9481fd30ac813,
47775 +
            0xc61ec947eb8eac25,
47776 +
            0xef70e0e4ef1d8e22,
47777 +
            0xbc9761bcd799ea14,
47778 +
            0x48bfe2549e15464e,
47779 +
            0x1b58630ca6912278,
47780 +
            0x1a63b11297330240,
47781 +
            0x4984304aafb76676,
47782 +
            0xbdacb3a2e63bca2c,
47783 +
            0xee4b32fadebfae1a,
47784 +
            0xc7251b59da2c8c1d,
47785 +
            0x94c29a01e2a8e82b,
47786 +
            0x60ea19e9ab244471,
47787 +
            0x330d98b193a02047,
47788 +
            0x629dbdd5c8600401,
47789 +
            0x317a3c8df0e46037,
47790 +
            0xc552bf65b968cc6d,
47791 +
            0x96b53e3d81eca85b,
47792 +
            0xbfdb179e857f8a5c,
47793 +
            0xec3c96c6bdfbee6a,
47794 +
            0x1814152ef4774230,
47795 +
            0x4bf39476ccf32606,
47796 +
            0x4ac84668fd51063e,
47797 +
            0x192fc730c5d56208,
47798 +
            0xed0744d88c59ce52,
47799 +
            0xbee0c580b4ddaa64,
47800 +
            0x978eec23b04e8863,
47801 +
            0xc4696d7b88caec55,
47802 +
            0x3041ee93c146400f,
47803 +
            0x63a66fcbf9c22439,
47804 +
            0x9361a45b76c60883,
47805 +
            0xc08625034e426cb5,
47806 +
            0x34aea6eb07cec0ef,
47807 +
            0x674927b33f4aa4d9,
47808 +
            0x4e270e103bd986de,
47809 +
            0x1dc08f48035de2e8,
47810 +
            0xe9e80ca04ad14eb2,
47811 +
            0xba0f8df872552a84,
47812 +
            0xbb345fe643f70abc,
47813 +
            0xe8d3debe7b736e8a,
47814 +
            0x1cfb5d5632ffc2d0,
47815 +
            0x4f1cdc0e0a7ba6e6,
47816 +
            0x6672f5ad0ee884e1,
47817 +
            0x359574f5366ce0d7,
47818 +
            0xc1bdf71d7fe04c8d,
47819 +
            0x925a7645476428bb,
47820 +
            0xc3ca53211ca40cfd,
47821 +
            0x902dd279242068cb,
47822 +
            0x640551916dacc491,
47823 +
            0x37e2d0c95528a0a7,
47824 +
            0x1e8cf96a51bb82a0,
47825 +
            0x4d6b7832693fe696,
47826 +
            0xb943fbda20b34acc,
47827 +
            0xeaa47a8218372efa,
47828 +
            0xeb9fa89c29950ec2,
47829 +
            0xb87829c411116af4,
47830 +
            0x4c50aa2c589dc6ae,
47831 +
            0x1fb72b746019a298,
47832 +
            0x36d902d7648a809f,
47833 +
            0x653e838f5c0ee4a9,
47834 +
            0x91160067158248f3,
47835 +
            0xc2f1813f2d062cc5,
47836 +
            0xe241386da4840f02,
47837 +
            0xb1a6b9359c006b34,
47838 +
            0x458e3addd58cc76e,
47839 +
            0x1669bb85ed08a358,
47840 +
            0x3f079226e99b815f,
47841 +
            0x6ce0137ed11fe569,
47842 +
            0x98c8909698934933,
47843 +
            0xcb2f11cea0172d05,
47844 +
            0xca14c3d091b50d3d,
47845 +
            0x99f34288a931690b,
47846 +
            0x6ddbc160e0bdc551,
47847 +
            0x3e3c4038d839a167,
47848 +
            0x1752699bdcaa8360,
47849 +
            0x44b5e8c3e42ee756,
47850 +
            0xb09d6b2bada24b0c,
47851 +
            0xe37aea7395262f3a,
47852 +
            0xb2eacf17cee60b7c,
47853 +
            0xe10d4e4ff6626f4a,
47854 +
            0x1525cda7bfeec310,
47855 +
            0x46c24cff876aa726,
47856 +
            0x6fac655c83f98521,
47857 +
            0x3c4be404bb7de117,
47858 +
            0xc86367ecf2f14d4d,
47859 +
            0x9b84e6b4ca75297b,
47860 +
            0x9abf34aafbd70943,
47861 +
            0xc958b5f2c3536d75,
47862 +
            0x3d70361a8adfc12f,
47863 +
            0x6e97b742b25ba519,
47864 +
            0x47f99ee1b6c8871e,
47865 +
            0x141e1fb98e4ce328,
47866 +
            0xe0369c51c7c04f72,
47867 +
            0xb3d11d09ff442b44,
47868 +
            0x4316d699704007fe,
47869 +
            0x10f157c148c463c8,
47870 +
            0xe4d9d4290148cf92,
47871 +
            0xb73e557139ccaba4,
47872 +
            0x9e507cd23d5f89a3,
47873 +
            0xcdb7fd8a05dbed95,
47874 +
            0x399f7e624c5741cf,
47875 +
            0x6a78ff3a74d325f9,
47876 +
            0x6b432d24457105c1,
47877 +
            0x38a4ac7c7df561f7,
47878 +
            0xcc8c2f943479cdad,
47879 +
            0x9f6baecc0cfda99b,
47880 +
            0xb605876f086e8b9c,
47881 +
            0xe5e2063730eaefaa,
47882 +
            0x11ca85df796643f0,
47883 +
            0x422d048741e227c6,
47884 +
            0x13bd21e31a220380,
47885 +
            0x405aa0bb22a667b6,
47886 +
            0xb47223536b2acbec,
47887 +
            0xe795a20b53aeafda,
47888 +
            0xcefb8ba8573d8ddd,
47889 +
            0x9d1c0af06fb9e9eb,
47890 +
            0x69348918263545b1,
47891 +
            0x3ad308401eb12187,
47892 +
            0x3be8da5e2f1301bf,
47893 +
            0x680f5b0617976589,
47894 +
            0x9c27d8ee5e1bc9d3,
47895 +
            0xcfc059b6669fade5,
47896 +
            0xe6ae7015620c8fe2,
47897 +
            0xb549f14d5a88ebd4,
47898 +
            0x416172a51304478e,
47899 +
            0x1286f3fd2b8023b8,
47900 +
        ],
47901 +
        [
47902 +
            0x0000000000000000,
47903 +
            0x09abf11afca2d0d7,
47904 +
            0x1357e235f945a1ae,
47905 +
            0x1afc132f05e77179,
47906 +
            0x26afc46bf28b435c,
47907 +
            0x2f0435710e29938b,
47908 +
            0x35f8265e0bcee2f2,
47909 +
            0x3c53d744f76c3225,
47910 +
            0x4d5f88d7e51686b8,
47911 +
            0x44f479cd19b4566f,
47912 +
            0x5e086ae21c532716,
47913 +
            0x57a39bf8e0f1f7c1,
47914 +
            0x6bf04cbc179dc5e4,
47915 +
            0x625bbda6eb3f1533,
47916 +
            0x78a7ae89eed8644a,
47917 +
            0x710c5f93127ab49d,
47918 +
            0x9abf11afca2d0d70,
47919 +
            0x9314e0b5368fdda7,
47920 +
            0x89e8f39a3368acde,
47921 +
            0x80430280cfca7c09,
47922 +
            0xbc10d5c438a64e2c,
47923 +
            0xb5bb24dec4049efb,
47924 +
            0xaf4737f1c1e3ef82,
47925 +
            0xa6ecc6eb3d413f55,
47926 +
            0xd7e099782f3b8bc8,
47927 +
            0xde4b6862d3995b1f,
47928 +
            0xc4b77b4dd67e2a66,
47929 +
            0xcd1c8a572adcfab1,
47930 +
            0xf14f5d13ddb0c894,
47931 +
            0xf8e4ac0921121843,
47932 +
            0xe218bf2624f5693a,
47933 +
            0xebb34e3cd857b9ed,
47934 +
            0xa7a68c743b540465,
47935 +
            0xae0d7d6ec7f6d4b2,
47936 +
            0xb4f16e41c211a5cb,
47937 +
            0xbd5a9f5b3eb3751c,
47938 +
            0x8109481fc9df4739,
47939 +
            0x88a2b905357d97ee,
47940 +
            0x925eaa2a309ae697,
47941 +
            0x9bf55b30cc383640,
47942 +
            0xeaf904a3de4282dd,
47943 +
            0xe352f5b922e0520a,
47944 +
            0xf9aee69627072373,
47945 +
            0xf005178cdba5f3a4,
47946 +
            0xcc56c0c82cc9c181,
47947 +
            0xc5fd31d2d06b1156,
47948 +
            0xdf0122fdd58c602f,
47949 +
            0xd6aad3e7292eb0f8,
47950 +
            0x3d199ddbf1790915,
47951 +
            0x34b26cc10ddbd9c2,
47952 +
            0x2e4e7fee083ca8bb,
47953 +
            0x27e58ef4f49e786c,
47954 +
            0x1bb659b003f24a49,
47955 +
            0x121da8aaff509a9e,
47956 +
            0x08e1bb85fab7ebe7,
47957 +
            0x014a4a9f06153b30,
47958 +
            0x7046150c146f8fad,
47959 +
            0x79ede416e8cd5f7a,
47960 +
            0x6311f739ed2a2e03,
47961 +
            0x6aba06231188fed4,
47962 +
            0x56e9d167e6e4ccf1,
47963 +
            0x5f42207d1a461c26,
47964 +
            0x45be33521fa16d5f,
47965 +
            0x4c15c248e303bd88,
47966 +
            0xdd95b7c3d9a6164f,
47967 +
            0xd43e46d92504c698,
47968 +
            0xcec255f620e3b7e1,
47969 +
            0xc769a4ecdc416736,
47970 +
            0xfb3a73a82b2d5513,
47971 +
            0xf29182b2d78f85c4,
47972 +
            0xe86d919dd268f4bd,
47973 +
            0xe1c660872eca246a,
47974 +
            0x90ca3f143cb090f7,
47975 +
            0x9961ce0ec0124020,
47976 +
            0x839ddd21c5f53159,
47977 +
            0x8a362c3b3957e18e,
47978 +
            0xb665fb7fce3bd3ab,
47979 +
            0xbfce0a653299037c,
47980 +
            0xa532194a377e7205,
47981 +
            0xac99e850cbdca2d2,
47982 +
            0x472aa66c138b1b3f,
47983 +
            0x4e815776ef29cbe8,
47984 +
            0x547d4459eaceba91,
47985 +
            0x5dd6b543166c6a46,
47986 +
            0x61856207e1005863,
47987 +
            0x682e931d1da288b4,
47988 +
            0x72d280321845f9cd,
47989 +
            0x7b797128e4e7291a,
47990 +
            0x0a752ebbf69d9d87,
47991 +
            0x03dedfa10a3f4d50,
47992 +
            0x1922cc8e0fd83c29,
47993 +
            0x10893d94f37aecfe,
47994 +
            0x2cdaead00416dedb,
47995 +
            0x25711bcaf8b40e0c,
47996 +
            0x3f8d08e5fd537f75,
47997 +
            0x3626f9ff01f1afa2,
47998 +
            0x7a333bb7e2f2122a,
47999 +
            0x7398caad1e50c2fd,
48000 +
            0x6964d9821bb7b384,
48001 +
            0x60cf2898e7156353,
48002 +
            0x5c9cffdc10795176,
48003 +
            0x55370ec6ecdb81a1,
48004 +
            0x4fcb1de9e93cf0d8,
48005 +
            0x4660ecf3159e200f,
48006 +
            0x376cb36007e49492,
48007 +
            0x3ec7427afb464445,
48008 +
            0x243b5155fea1353c,
48009 +
            0x2d90a04f0203e5eb,
48010 +
            0x11c3770bf56fd7ce,
48011 +
            0x1868861109cd0719,
48012 +
            0x0294953e0c2a7660,
48013 +
            0x0b3f6424f088a6b7,
48014 +
            0xe08c2a1828df1f5a,
48015 +
            0xe927db02d47dcf8d,
48016 +
            0xf3dbc82dd19abef4,
48017 +
            0xfa7039372d386e23,
48018 +
            0xc623ee73da545c06,
48019 +
            0xcf881f6926f68cd1,
48020 +
            0xd5740c462311fda8,
48021 +
            0xdcdffd5cdfb32d7f,
48022 +
            0xadd3a2cfcdc999e2,
48023 +
            0xa47853d5316b4935,
48024 +
            0xbe8440fa348c384c,
48025 +
            0xb72fb1e0c82ee89b,
48026 +
            0x8b7c66a43f42dabe,
48027 +
            0x82d797bec3e00a69,
48028 +
            0x982b8491c6077b10,
48029 +
            0x9180758b3aa5abc7,
48030 +
            0x29f3c0ac1c42321b,
48031 +
            0x205831b6e0e0e2cc,
48032 +
            0x3aa42299e50793b5,
48033 +
            0x330fd38319a54362,
48034 +
            0x0f5c04c7eec97147,
48035 +
            0x06f7f5dd126ba190,
48036 +
            0x1c0be6f2178cd0e9,
48037 +
            0x15a017e8eb2e003e,
48038 +
            0x64ac487bf954b4a3,
48039 +
            0x6d07b96105f66474,
48040 +
            0x77fbaa4e0011150d,
48041 +
            0x7e505b54fcb3c5da,
48042 +
            0x42038c100bdff7ff,
48043 +
            0x4ba87d0af77d2728,
48044 +
            0x51546e25f29a5651,
48045 +
            0x58ff9f3f0e388686,
48046 +
            0xb34cd103d66f3f6b,
48047 +
            0xbae720192acdefbc,
48048 +
            0xa01b33362f2a9ec5,
48049 +
            0xa9b0c22cd3884e12,
48050 +
            0x95e3156824e47c37,
48051 +
            0x9c48e472d846ace0,
48052 +
            0x86b4f75ddda1dd99,
48053 +
            0x8f1f064721030d4e,
48054 +
            0xfe1359d43379b9d3,
48055 +
            0xf7b8a8cecfdb6904,
48056 +
            0xed44bbe1ca3c187d,
48057 +
            0xe4ef4afb369ec8aa,
48058 +
            0xd8bc9dbfc1f2fa8f,
48059 +
            0xd1176ca53d502a58,
48060 +
            0xcbeb7f8a38b75b21,
48061 +
            0xc2408e90c4158bf6,
48062 +
            0x8e554cd82716367e,
48063 +
            0x87febdc2dbb4e6a9,
48064 +
            0x9d02aeedde5397d0,
48065 +
            0x94a95ff722f14707,
48066 +
            0xa8fa88b3d59d7522,
48067 +
            0xa15179a9293fa5f5,
48068 +
            0xbbad6a862cd8d48c,
48069 +
            0xb2069b9cd07a045b,
48070 +
            0xc30ac40fc200b0c6,
48071 +
            0xcaa135153ea26011,
48072 +
            0xd05d263a3b451168,
48073 +
            0xd9f6d720c7e7c1bf,
48074 +
            0xe5a50064308bf39a,
48075 +
            0xec0ef17ecc29234d,
48076 +
            0xf6f2e251c9ce5234,
48077 +
            0xff59134b356c82e3,
48078 +
            0x14ea5d77ed3b3b0e,
48079 +
            0x1d41ac6d1199ebd9,
48080 +
            0x07bdbf42147e9aa0,
48081 +
            0x0e164e58e8dc4a77,
48082 +
            0x3245991c1fb07852,
48083 +
            0x3bee6806e312a885,
48084 +
            0x21127b29e6f5d9fc,
48085 +
            0x28b98a331a57092b,
48086 +
            0x59b5d5a0082dbdb6,
48087 +
            0x501e24baf48f6d61,
48088 +
            0x4ae23795f1681c18,
48089 +
            0x4349c68f0dcacccf,
48090 +
            0x7f1a11cbfaa6feea,
48091 +
            0x76b1e0d106042e3d,
48092 +
            0x6c4df3fe03e35f44,
48093 +
            0x65e602e4ff418f93,
48094 +
            0xf466776fc5e42454,
48095 +
            0xfdcd86753946f483,
48096 +
            0xe731955a3ca185fa,
48097 +
            0xee9a6440c003552d,
48098 +
            0xd2c9b304376f6708,
48099 +
            0xdb62421ecbcdb7df,
48100 +
            0xc19e5131ce2ac6a6,
48101 +
            0xc835a02b32881671,
48102 +
            0xb939ffb820f2a2ec,
48103 +
            0xb0920ea2dc50723b,
48104 +
            0xaa6e1d8dd9b70342,
48105 +
            0xa3c5ec972515d395,
48106 +
            0x9f963bd3d279e1b0,
48107 +
            0x963dcac92edb3167,
48108 +
            0x8cc1d9e62b3c401e,
48109 +
            0x856a28fcd79e90c9,
48110 +
            0x6ed966c00fc92924,
48111 +
            0x677297daf36bf9f3,
48112 +
            0x7d8e84f5f68c888a,
48113 +
            0x742575ef0a2e585d,
48114 +
            0x4876a2abfd426a78,
48115 +
            0x41dd53b101e0baaf,
48116 +
            0x5b21409e0407cbd6,
48117 +
            0x528ab184f8a51b01,
48118 +
            0x2386ee17eadfaf9c,
48119 +
            0x2a2d1f0d167d7f4b,
48120 +
            0x30d10c22139a0e32,
48121 +
            0x397afd38ef38dee5,
48122 +
            0x05292a7c1854ecc0,
48123 +
            0x0c82db66e4f63c17,
48124 +
            0x167ec849e1114d6e,
48125 +
            0x1fd539531db39db9,
48126 +
            0x53c0fb1bfeb02031,
48127 +
            0x5a6b0a010212f0e6,
48128 +
            0x4097192e07f5819f,
48129 +
            0x493ce834fb575148,
48130 +
            0x756f3f700c3b636d,
48131 +
            0x7cc4ce6af099b3ba,
48132 +
            0x6638dd45f57ec2c3,
48133 +
            0x6f932c5f09dc1214,
48134 +
            0x1e9f73cc1ba6a689,
48135 +
            0x173482d6e704765e,
48136 +
            0x0dc891f9e2e30727,
48137 +
            0x046360e31e41d7f0,
48138 +
            0x3830b7a7e92de5d5,
48139 +
            0x319b46bd158f3502,
48140 +
            0x2b6755921068447b,
48141 +
            0x22cca488ecca94ac,
48142 +
            0xc97feab4349d2d41,
48143 +
            0xc0d41baec83ffd96,
48144 +
            0xda280881cdd88cef,
48145 +
            0xd383f99b317a5c38,
48146 +
            0xefd02edfc6166e1d,
48147 +
            0xe67bdfc53ab4beca,
48148 +
            0xfc87ccea3f53cfb3,
48149 +
            0xf52c3df0c3f11f64,
48150 +
            0x84206263d18babf9,
48151 +
            0x8d8b93792d297b2e,
48152 +
            0x9777805628ce0a57,
48153 +
            0x9edc714cd46cda80,
48154 +
            0xa28fa6082300e8a5,
48155 +
            0xab245712dfa23872,
48156 +
            0xb1d8443dda45490b,
48157 +
            0xb873b52726e799dc,
48158 +
        ],
48159 +
        [
48160 +
            0x0000000000000000,
48161 +
            0xec32cffb23e3ed7d,
48162 +
            0x4abd30dde8c9c47f,
48163 +
            0xa68fff26cb2a2902,
48164 +
            0x957a61bbd19388fe,
48165 +
            0x7948ae40f2706583,
48166 +
            0xdfc75166395a4c81,
48167 +
            0x33f59e9d1ab9a1fc,
48168 +
            0xb82c6c5c0c290f79,
48169 +
            0x541ea3a72fcae204,
48170 +
            0xf2915c81e4e0cb06,
48171 +
            0x1ea3937ac703267b,
48172 +
            0x2d560de7ddba8787,
48173 +
            0xc164c21cfe596afa,
48174 +
            0x67eb3d3a357343f8,
48175 +
            0x8bd9f2c11690ae85,
48176 +
            0xe2807793b75c0077,
48177 +
            0x0eb2b86894bfed0a,
48178 +
            0xa83d474e5f95c408,
48179 +
            0x440f88b57c762975,
48180 +
            0x77fa162866cf8889,
48181 +
            0x9bc8d9d3452c65f4,
48182 +
            0x3d4726f58e064cf6,
48183 +
            0xd175e90eade5a18b,
48184 +
            0x5aac1bcfbb750f0e,
48185 +
            0xb69ed4349896e273,
48186 +
            0x10112b1253bccb71,
48187 +
            0xfc23e4e9705f260c,
48188 +
            0xcfd67a746ae687f0,
48189 +
            0x23e4b58f49056a8d,
48190 +
            0x856b4aa9822f438f,
48191 +
            0x69598552a1ccaef2,
48192 +
            0x57d8400cc1b61e6b,
48193 +
            0xbbea8ff7e255f316,
48194 +
            0x1d6570d1297fda14,
48195 +
            0xf157bf2a0a9c3769,
48196 +
            0xc2a221b710259695,
48197 +
            0x2e90ee4c33c67be8,
48198 +
            0x881f116af8ec52ea,
48199 +
            0x642dde91db0fbf97,
48200 +
            0xeff42c50cd9f1112,
48201 +
            0x03c6e3abee7cfc6f,
48202 +
            0xa5491c8d2556d56d,
48203 +
            0x497bd37606b53810,
48204 +
            0x7a8e4deb1c0c99ec,
48205 +
            0x96bc82103fef7491,
48206 +
            0x30337d36f4c55d93,
48207 +
            0xdc01b2cdd726b0ee,
48208 +
            0xb558379f76ea1e1c,
48209 +
            0x596af8645509f361,
48210 +
            0xffe507429e23da63,
48211 +
            0x13d7c8b9bdc0371e,
48212 +
            0x20225624a77996e2,
48213 +
            0xcc1099df849a7b9f,
48214 +
            0x6a9f66f94fb0529d,
48215 +
            0x86ada9026c53bfe0,
48216 +
            0x0d745bc37ac31165,
48217 +
            0xe14694385920fc18,
48218 +
            0x47c96b1e920ad51a,
48219 +
            0xabfba4e5b1e93867,
48220 +
            0x980e3a78ab50999b,
48221 +
            0x743cf58388b374e6,
48222 +
            0xd2b30aa543995de4,
48223 +
            0x3e81c55e607ab099,
48224 +
            0xafb08019836c3cd6,
48225 +
            0x43824fe2a08fd1ab,
48226 +
            0xe50db0c46ba5f8a9,
48227 +
            0x093f7f3f484615d4,
48228 +
            0x3acae1a252ffb428,
48229 +
            0xd6f82e59711c5955,
48230 +
            0x7077d17fba367057,
48231 +
            0x9c451e8499d59d2a,
48232 +
            0x179cec458f4533af,
48233 +
            0xfbae23beaca6ded2,
48234 +
            0x5d21dc98678cf7d0,
48235 +
            0xb1131363446f1aad,
48236 +
            0x82e68dfe5ed6bb51,
48237 +
            0x6ed442057d35562c,
48238 +
            0xc85bbd23b61f7f2e,
48239 +
            0x246972d895fc9253,
48240 +
            0x4d30f78a34303ca1,
48241 +
            0xa102387117d3d1dc,
48242 +
            0x078dc757dcf9f8de,
48243 +
            0xebbf08acff1a15a3,
48244 +
            0xd84a9631e5a3b45f,
48245 +
            0x347859cac6405922,
48246 +
            0x92f7a6ec0d6a7020,
48247 +
            0x7ec569172e899d5d,
48248 +
            0xf51c9bd6381933d8,
48249 +
            0x192e542d1bfadea5,
48250 +
            0xbfa1ab0bd0d0f7a7,
48251 +
            0x539364f0f3331ada,
48252 +
            0x6066fa6de98abb26,
48253 +
            0x8c543596ca69565b,
48254 +
            0x2adbcab001437f59,
48255 +
            0xc6e9054b22a09224,
48256 +
            0xf868c01542da22bd,
48257 +
            0x145a0fee6139cfc0,
48258 +
            0xb2d5f0c8aa13e6c2,
48259 +
            0x5ee73f3389f00bbf,
48260 +
            0x6d12a1ae9349aa43,
48261 +
            0x81206e55b0aa473e,
48262 +
            0x27af91737b806e3c,
48263 +
            0xcb9d5e8858638341,
48264 +
            0x4044ac494ef32dc4,
48265 +
            0xac7663b26d10c0b9,
48266 +
            0x0af99c94a63ae9bb,
48267 +
            0xe6cb536f85d904c6,
48268 +
            0xd53ecdf29f60a53a,
48269 +
            0x390c0209bc834847,
48270 +
            0x9f83fd2f77a96145,
48271 +
            0x73b132d4544a8c38,
48272 +
            0x1ae8b786f58622ca,
48273 +
            0xf6da787dd665cfb7,
48274 +
            0x5055875b1d4fe6b5,
48275 +
            0xbc6748a03eac0bc8,
48276 +
            0x8f92d63d2415aa34,
48277 +
            0x63a019c607f64749,
48278 +
            0xc52fe6e0ccdc6e4b,
48279 +
            0x291d291bef3f8336,
48280 +
            0xa2c4dbdaf9af2db3,
48281 +
            0x4ef61421da4cc0ce,
48282 +
            0xe879eb071166e9cc,
48283 +
            0x044b24fc328504b1,
48284 +
            0x37beba61283ca54d,
48285 +
            0xdb8c759a0bdf4830,
48286 +
            0x7d038abcc0f56132,
48287 +
            0x91314547e3168c4f,
48288 +
            0xcdb9af18a9d66729,
48289 +
            0x218b60e38a358a54,
48290 +
            0x87049fc5411fa356,
48291 +
            0x6b36503e62fc4e2b,
48292 +
            0x58c3cea37845efd7,
48293 +
            0xb4f101585ba602aa,
48294 +
            0x127efe7e908c2ba8,
48295 +
            0xfe4c3185b36fc6d5,
48296 +
            0x7595c344a5ff6850,
48297 +
            0x99a70cbf861c852d,
48298 +
            0x3f28f3994d36ac2f,
48299 +
            0xd31a3c626ed54152,
48300 +
            0xe0efa2ff746ce0ae,
48301 +
            0x0cdd6d04578f0dd3,
48302 +
            0xaa5292229ca524d1,
48303 +
            0x46605dd9bf46c9ac,
48304 +
            0x2f39d88b1e8a675e,
48305 +
            0xc30b17703d698a23,
48306 +
            0x6584e856f643a321,
48307 +
            0x89b627add5a04e5c,
48308 +
            0xba43b930cf19efa0,
48309 +
            0x567176cbecfa02dd,
48310 +
            0xf0fe89ed27d02bdf,
48311 +
            0x1ccc46160433c6a2,
48312 +
            0x9715b4d712a36827,
48313 +
            0x7b277b2c3140855a,
48314 +
            0xdda8840afa6aac58,
48315 +
            0x319a4bf1d9894125,
48316 +
            0x026fd56cc330e0d9,
48317 +
            0xee5d1a97e0d30da4,
48318 +
            0x48d2e5b12bf924a6,
48319 +
            0xa4e02a4a081ac9db,
48320 +
            0x9a61ef1468607942,
48321 +
            0x765320ef4b83943f,
48322 +
            0xd0dcdfc980a9bd3d,
48323 +
            0x3cee1032a34a5040,
48324 +
            0x0f1b8eafb9f3f1bc,
48325 +
            0xe32941549a101cc1,
48326 +
            0x45a6be72513a35c3,
48327 +
            0xa994718972d9d8be,
48328 +
            0x224d83486449763b,
48329 +
            0xce7f4cb347aa9b46,
48330 +
            0x68f0b3958c80b244,
48331 +
            0x84c27c6eaf635f39,
48332 +
            0xb737e2f3b5dafec5,
48333 +
            0x5b052d08963913b8,
48334 +
            0xfd8ad22e5d133aba,
48335 +
            0x11b81dd57ef0d7c7,
48336 +
            0x78e19887df3c7935,
48337 +
            0x94d3577cfcdf9448,
48338 +
            0x325ca85a37f5bd4a,
48339 +
            0xde6e67a114165037,
48340 +
            0xed9bf93c0eaff1cb,
48341 +
            0x01a936c72d4c1cb6,
48342 +
            0xa726c9e1e66635b4,
48343 +
            0x4b14061ac585d8c9,
48344 +
            0xc0cdf4dbd315764c,
48345 +
            0x2cff3b20f0f69b31,
48346 +
            0x8a70c4063bdcb233,
48347 +
            0x66420bfd183f5f4e,
48348 +
            0x55b795600286feb2,
48349 +
            0xb9855a9b216513cf,
48350 +
            0x1f0aa5bdea4f3acd,
48351 +
            0xf3386a46c9acd7b0,
48352 +
            0x62092f012aba5bff,
48353 +
            0x8e3be0fa0959b682,
48354 +
            0x28b41fdcc2739f80,
48355 +
            0xc486d027e19072fd,
48356 +
            0xf7734ebafb29d301,
48357 +
            0x1b418141d8ca3e7c,
48358 +
            0xbdce7e6713e0177e,
48359 +
            0x51fcb19c3003fa03,
48360 +
            0xda25435d26935486,
48361 +
            0x36178ca60570b9fb,
48362 +
            0x90987380ce5a90f9,
48363 +
            0x7caabc7bedb97d84,
48364 +
            0x4f5f22e6f700dc78,
48365 +
            0xa36ded1dd4e33105,
48366 +
            0x05e2123b1fc91807,
48367 +
            0xe9d0ddc03c2af57a,
48368 +
            0x808958929de65b88,
48369 +
            0x6cbb9769be05b6f5,
48370 +
            0xca34684f752f9ff7,
48371 +
            0x2606a7b456cc728a,
48372 +
            0x15f339294c75d376,
48373 +
            0xf9c1f6d26f963e0b,
48374 +
            0x5f4e09f4a4bc1709,
48375 +
            0xb37cc60f875ffa74,
48376 +
            0x38a534ce91cf54f1,
48377 +
            0xd497fb35b22cb98c,
48378 +
            0x721804137906908e,
48379 +
            0x9e2acbe85ae57df3,
48380 +
            0xaddf5575405cdc0f,
48381 +
            0x41ed9a8e63bf3172,
48382 +
            0xe76265a8a8951870,
48383 +
            0x0b50aa538b76f50d,
48384 +
            0x35d16f0deb0c4594,
48385 +
            0xd9e3a0f6c8efa8e9,
48386 +
            0x7f6c5fd003c581eb,
48387 +
            0x935e902b20266c96,
48388 +
            0xa0ab0eb63a9fcd6a,
48389 +
            0x4c99c14d197c2017,
48390 +
            0xea163e6bd2560915,
48391 +
            0x0624f190f1b5e468,
48392 +
            0x8dfd0351e7254aed,
48393 +
            0x61cfccaac4c6a790,
48394 +
            0xc740338c0fec8e92,
48395 +
            0x2b72fc772c0f63ef,
48396 +
            0x188762ea36b6c213,
48397 +
            0xf4b5ad1115552f6e,
48398 +
            0x523a5237de7f066c,
48399 +
            0xbe089dccfd9ceb11,
48400 +
            0xd751189e5c5045e3,
48401 +
            0x3b63d7657fb3a89e,
48402 +
            0x9dec2843b499819c,
48403 +
            0x71dee7b8977a6ce1,
48404 +
            0x422b79258dc3cd1d,
48405 +
            0xae19b6deae202060,
48406 +
            0x089649f8650a0962,
48407 +
            0xe4a4860346e9e41f,
48408 +
            0x6f7d74c250794a9a,
48409 +
            0x834fbb39739aa7e7,
48410 +
            0x25c0441fb8b08ee5,
48411 +
            0xc9f28be49b536398,
48412 +
            0xfa07157981eac264,
48413 +
            0x1635da82a2092f19,
48414 +
            0xb0ba25a46923061b,
48415 +
            0x5c88ea5f4ac0eb66,
48416 +
        ],
48417 +
        [
48418 +
            0x0000000000000000,
48419 +
            0xdda9f27ee08373ad,
48420 +
            0x298b4bd66e08f9df,
48421 +
            0xf422b9a88e8b8a72,
48422 +
            0x531697acdc11f3be,
48423 +
            0x8ebf65d23c928013,
48424 +
            0x7a9ddc7ab2190a61,
48425 +
            0xa7342e04529a79cc,
48426 +
            0xa62d2f59b823e77c,
48427 +
            0x7b84dd2758a094d1,
48428 +
            0x8fa6648fd62b1ea3,
48429 +
            0x520f96f136a86d0e,
48430 +
            0xf53bb8f5643214c2,
48431 +
            0x28924a8b84b1676f,
48432 +
            0xdcb0f3230a3aed1d,
48433 +
            0x0119015deab99eb0,
48434 +
            0xde82f198df49d07d,
48435 +
            0x032b03e63fcaa3d0,
48436 +
            0xf709ba4eb14129a2,
48437 +
            0x2aa0483051c25a0f,
48438 +
            0x8d946634035823c3,
48439 +
            0x503d944ae3db506e,
48440 +
            0xa41f2de26d50da1c,
48441 +
            0x79b6df9c8dd3a9b1,
48442 +
            0x78afdec1676a3701,
48443 +
            0xa5062cbf87e944ac,
48444 +
            0x512495170962cede,
48445 +
            0x8c8d6769e9e1bd73,
48446 +
            0x2bb9496dbb7bc4bf,
48447 +
            0xf610bb135bf8b712,
48448 +
            0x023202bbd5733d60,
48449 +
            0xdf9bf0c535f04ecd,
48450 +
            0x2fdd4c1a119dbe7f,
48451 +
            0xf274be64f11ecdd2,
48452 +
            0x065607cc7f9547a0,
48453 +
            0xdbfff5b29f16340d,
48454 +
            0x7ccbdbb6cd8c4dc1,
48455 +
            0xa16229c82d0f3e6c,
48456 +
            0x55409060a384b41e,
48457 +
            0x88e9621e4307c7b3,
48458 +
            0x89f06343a9be5903,
48459 +
            0x5459913d493d2aae,
48460 +
            0xa07b2895c7b6a0dc,
48461 +
            0x7dd2daeb2735d371,
48462 +
            0xdae6f4ef75afaabd,
48463 +
            0x074f0691952cd910,
48464 +
            0xf36dbf391ba75362,
48465 +
            0x2ec44d47fb2420cf,
48466 +
            0xf15fbd82ced46e02,
48467 +
            0x2cf64ffc2e571daf,
48468 +
            0xd8d4f654a0dc97dd,
48469 +
            0x057d042a405fe470,
48470 +
            0xa2492a2e12c59dbc,
48471 +
            0x7fe0d850f246ee11,
48472 +
            0x8bc261f87ccd6463,
48473 +
            0x566b93869c4e17ce,
48474 +
            0x577292db76f7897e,
48475 +
            0x8adb60a59674fad3,
48476 +
            0x7ef9d90d18ff70a1,
48477 +
            0xa3502b73f87c030c,
48478 +
            0x04640577aae67ac0,
48479 +
            0xd9cdf7094a65096d,
48480 +
            0x2def4ea1c4ee831f,
48481 +
            0xf046bcdf246df0b2,
48482 +
            0x5fba9834233b7cfe,
48483 +
            0x82136a4ac3b80f53,
48484 +
            0x7631d3e24d338521,
48485 +
            0xab98219cadb0f68c,
48486 +
            0x0cac0f98ff2a8f40,
48487 +
            0xd105fde61fa9fced,
48488 +
            0x2527444e9122769f,
48489 +
            0xf88eb63071a10532,
48490 +
            0xf997b76d9b189b82,
48491 +
            0x243e45137b9be82f,
48492 +
            0xd01cfcbbf510625d,
48493 +
            0x0db50ec5159311f0,
48494 +
            0xaa8120c14709683c,
48495 +
            0x7728d2bfa78a1b91,
48496 +
            0x830a6b17290191e3,
48497 +
            0x5ea39969c982e24e,
48498 +
            0x813869acfc72ac83,
48499 +
            0x5c919bd21cf1df2e,
48500 +
            0xa8b3227a927a555c,
48501 +
            0x751ad00472f926f1,
48502 +
            0xd22efe0020635f3d,
48503 +
            0x0f870c7ec0e02c90,
48504 +
            0xfba5b5d64e6ba6e2,
48505 +
            0x260c47a8aee8d54f,
48506 +
            0x271546f544514bff,
48507 +
            0xfabcb48ba4d23852,
48508 +
            0x0e9e0d232a59b220,
48509 +
            0xd337ff5dcadac18d,
48510 +
            0x7403d1599840b841,
48511 +
            0xa9aa232778c3cbec,
48512 +
            0x5d889a8ff648419e,
48513 +
            0x802168f116cb3233,
48514 +
            0x7067d42e32a6c281,
48515 +
            0xadce2650d225b12c,
48516 +
            0x59ec9ff85cae3b5e,
48517 +
            0x84456d86bc2d48f3,
48518 +
            0x23714382eeb7313f,
48519 +
            0xfed8b1fc0e344292,
48520 +
            0x0afa085480bfc8e0,
48521 +
            0xd753fa2a603cbb4d,
48522 +
            0xd64afb778a8525fd,
48523 +
            0x0be309096a065650,
48524 +
            0xffc1b0a1e48ddc22,
48525 +
            0x226842df040eaf8f,
48526 +
            0x855c6cdb5694d643,
48527 +
            0x58f59ea5b617a5ee,
48528 +
            0xacd7270d389c2f9c,
48529 +
            0x717ed573d81f5c31,
48530 +
            0xaee525b6edef12fc,
48531 +
            0x734cd7c80d6c6151,
48532 +
            0x876e6e6083e7eb23,
48533 +
            0x5ac79c1e6364988e,
48534 +
            0xfdf3b21a31fee142,
48535 +
            0x205a4064d17d92ef,
48536 +
            0xd478f9cc5ff6189d,
48537 +
            0x09d10bb2bf756b30,
48538 +
            0x08c80aef55ccf580,
48539 +
            0xd561f891b54f862d,
48540 +
            0x214341393bc40c5f,
48541 +
            0xfceab347db477ff2,
48542 +
            0x5bde9d4389dd063e,
48543 +
            0x86776f3d695e7593,
48544 +
            0x7255d695e7d5ffe1,
48545 +
            0xaffc24eb07568c4c,
48546 +
            0xbf7530684676f9fc,
48547 +
            0x62dcc216a6f58a51,
48548 +
            0x96fe7bbe287e0023,
48549 +
            0x4b5789c0c8fd738e,
48550 +
            0xec63a7c49a670a42,
48551 +
            0x31ca55ba7ae479ef,
48552 +
            0xc5e8ec12f46ff39d,
48553 +
            0x18411e6c14ec8030,
48554 +
            0x19581f31fe551e80,
48555 +
            0xc4f1ed4f1ed66d2d,
48556 +
            0x30d354e7905de75f,
48557 +
            0xed7aa69970de94f2,
48558 +
            0x4a4e889d2244ed3e,
48559 +
            0x97e77ae3c2c79e93,
48560 +
            0x63c5c34b4c4c14e1,
48561 +
            0xbe6c3135accf674c,
48562 +
            0x61f7c1f0993f2981,
48563 +
            0xbc5e338e79bc5a2c,
48564 +
            0x487c8a26f737d05e,
48565 +
            0x95d5785817b4a3f3,
48566 +
            0x32e1565c452eda3f,
48567 +
            0xef48a422a5ada992,
48568 +
            0x1b6a1d8a2b2623e0,
48569 +
            0xc6c3eff4cba5504d,
48570 +
            0xc7daeea9211ccefd,
48571 +
            0x1a731cd7c19fbd50,
48572 +
            0xee51a57f4f143722,
48573 +
            0x33f85701af97448f,
48574 +
            0x94cc7905fd0d3d43,
48575 +
            0x49658b7b1d8e4eee,
48576 +
            0xbd4732d39305c49c,
48577 +
            0x60eec0ad7386b731,
48578 +
            0x90a87c7257eb4783,
48579 +
            0x4d018e0cb768342e,
48580 +
            0xb92337a439e3be5c,
48581 +
            0x648ac5dad960cdf1,
48582 +
            0xc3beebde8bfab43d,
48583 +
            0x1e1719a06b79c790,
48584 +
            0xea35a008e5f24de2,
48585 +
            0x379c527605713e4f,
48586 +
            0x3685532befc8a0ff,
48587 +
            0xeb2ca1550f4bd352,
48588 +
            0x1f0e18fd81c05920,
48589 +
            0xc2a7ea8361432a8d,
48590 +
            0x6593c48733d95341,
48591 +
            0xb83a36f9d35a20ec,
48592 +
            0x4c188f515dd1aa9e,
48593 +
            0x91b17d2fbd52d933,
48594 +
            0x4e2a8dea88a297fe,
48595 +
            0x93837f946821e453,
48596 +
            0x67a1c63ce6aa6e21,
48597 +
            0xba08344206291d8c,
48598 +
            0x1d3c1a4654b36440,
48599 +
            0xc095e838b43017ed,
48600 +
            0x34b751903abb9d9f,
48601 +
            0xe91ea3eeda38ee32,
48602 +
            0xe807a2b330817082,
48603 +
            0x35ae50cdd002032f,
48604 +
            0xc18ce9655e89895d,
48605 +
            0x1c251b1bbe0afaf0,
48606 +
            0xbb11351fec90833c,
48607 +
            0x66b8c7610c13f091,
48608 +
            0x929a7ec982987ae3,
48609 +
            0x4f338cb7621b094e,
48610 +
            0xe0cfa85c654d8502,
48611 +
            0x3d665a2285cef6af,
48612 +
            0xc944e38a0b457cdd,
48613 +
            0x14ed11f4ebc60f70,
48614 +
            0xb3d93ff0b95c76bc,
48615 +
            0x6e70cd8e59df0511,
48616 +
            0x9a527426d7548f63,
48617 +
            0x47fb865837d7fcce,
48618 +
            0x46e28705dd6e627e,
48619 +
            0x9b4b757b3ded11d3,
48620 +
            0x6f69ccd3b3669ba1,
48621 +
            0xb2c03ead53e5e80c,
48622 +
            0x15f410a9017f91c0,
48623 +
            0xc85de2d7e1fce26d,
48624 +
            0x3c7f5b7f6f77681f,
48625 +
            0xe1d6a9018ff41bb2,
48626 +
            0x3e4d59c4ba04557f,
48627 +
            0xe3e4abba5a8726d2,
48628 +
            0x17c61212d40caca0,
48629 +
            0xca6fe06c348fdf0d,
48630 +
            0x6d5bce686615a6c1,
48631 +
            0xb0f23c168696d56c,
48632 +
            0x44d085be081d5f1e,
48633 +
            0x997977c0e89e2cb3,
48634 +
            0x9860769d0227b203,
48635 +
            0x45c984e3e2a4c1ae,
48636 +
            0xb1eb3d4b6c2f4bdc,
48637 +
            0x6c42cf358cac3871,
48638 +
            0xcb76e131de3641bd,
48639 +
            0x16df134f3eb53210,
48640 +
            0xe2fdaae7b03eb862,
48641 +
            0x3f54589950bdcbcf,
48642 +
            0xcf12e44674d03b7d,
48643 +
            0x12bb1638945348d0,
48644 +
            0xe699af901ad8c2a2,
48645 +
            0x3b305deefa5bb10f,
48646 +
            0x9c0473eaa8c1c8c3,
48647 +
            0x41ad81944842bb6e,
48648 +
            0xb58f383cc6c9311c,
48649 +
            0x6826ca42264a42b1,
48650 +
            0x693fcb1fccf3dc01,
48651 +
            0xb49639612c70afac,
48652 +
            0x40b480c9a2fb25de,
48653 +
            0x9d1d72b742785673,
48654 +
            0x3a295cb310e22fbf,
48655 +
            0xe780aecdf0615c12,
48656 +
            0x13a217657eead660,
48657 +
            0xce0be51b9e69a5cd,
48658 +
            0x119015deab99eb00,
48659 +
            0xcc39e7a04b1a98ad,
48660 +
            0x381b5e08c59112df,
48661 +
            0xe5b2ac7625126172,
48662 +
            0x42868272778818be,
48663 +
            0x9f2f700c970b6b13,
48664 +
            0x6b0dc9a41980e161,
48665 +
            0xb6a43bdaf90392cc,
48666 +
            0xb7bd3a8713ba0c7c,
48667 +
            0x6a14c8f9f3397fd1,
48668 +
            0x9e3671517db2f5a3,
48669 +
            0x439f832f9d31860e,
48670 +
            0xe4abad2bcfabffc2,
48671 +
            0x39025f552f288c6f,
48672 +
            0xcd20e6fda1a3061d,
48673 +
            0x10891483412075b0,
48674 +
        ],
48675 +
        [
48676 +
            0x0000000000000000,
48677 +
            0x0dd9b4240837fd99,
48678 +
            0x1bb36848106ffb32,
48679 +
            0x166adc6c185806ab,
48680 +
            0x3766d09020dff664,
48681 +
            0x3abf64b428e80bfd,
48682 +
            0x2cd5b8d830b00d56,
48683 +
            0x210c0cfc3887f0cf,
48684 +
            0x6ecda12041bfecc8,
48685 +
            0x6314150449881151,
48686 +
            0x757ec96851d017fa,
48687 +
            0x78a77d4c59e7ea63,
48688 +
            0x59ab71b061601aac,
48689 +
            0x5472c5946957e735,
48690 +
            0x421819f8710fe19e,
48691 +
            0x4fc1addc79381c07,
48692 +
            0xdd9b4240837fd990,
48693 +
            0xd042f6648b482409,
48694 +
            0xc6282a08931022a2,
48695 +
            0xcbf19e2c9b27df3b,
48696 +
            0xeafd92d0a3a02ff4,
48697 +
            0xe72426f4ab97d26d,
48698 +
            0xf14efa98b3cfd4c6,
48699 +
            0xfc974ebcbbf8295f,
48700 +
            0xb356e360c2c03558,
48701 +
            0xbe8f5744caf7c8c1,
48702 +
            0xa8e58b28d2afce6a,
48703 +
            0xa53c3f0cda9833f3,
48704 +
            0x843033f0e21fc33c,
48705 +
            0x89e987d4ea283ea5,
48706 +
            0x9f835bb8f270380e,
48707 +
            0x925aef9cfa47c597,
48708 +
            0x29ee2baaa9f1ada5,
48709 +
            0x24379f8ea1c6503c,
48710 +
            0x325d43e2b99e5697,
48711 +
            0x3f84f7c6b1a9ab0e,
48712 +
            0x1e88fb3a892e5bc1,
48713 +
            0x13514f1e8119a658,
48714 +
            0x053b93729941a0f3,
48715 +
            0x08e2275691765d6a,
48716 +
            0x47238a8ae84e416d,
48717 +
            0x4afa3eaee079bcf4,
48718 +
            0x5c90e2c2f821ba5f,
48719 +
            0x514956e6f01647c6,
48720 +
            0x70455a1ac891b709,
48721 +
            0x7d9cee3ec0a64a90,
48722 +
            0x6bf63252d8fe4c3b,
48723 +
            0x662f8676d0c9b1a2,
48724 +
            0xf47569ea2a8e7435,
48725 +
            0xf9acddce22b989ac,
48726 +
            0xefc601a23ae18f07,
48727 +
            0xe21fb58632d6729e,
48728 +
            0xc313b97a0a518251,
48729 +
            0xceca0d5e02667fc8,
48730 +
            0xd8a0d1321a3e7963,
48731 +
            0xd5796516120984fa,
48732 +
            0x9ab8c8ca6b3198fd,
48733 +
            0x97617cee63066564,
48734 +
            0x810ba0827b5e63cf,
48735 +
            0x8cd214a673699e56,
48736 +
            0xadde185a4bee6e99,
48737 +
            0xa007ac7e43d99300,
48738 +
            0xb66d70125b8195ab,
48739 +
            0xbbb4c43653b66832,
48740 +
            0x53dc575553e35b4a,
48741 +
            0x5e05e3715bd4a6d3,
48742 +
            0x486f3f1d438ca078,
48743 +
            0x45b68b394bbb5de1,
48744 +
            0x64ba87c5733cad2e,
48745 +
            0x696333e17b0b50b7,
48746 +
            0x7f09ef8d6353561c,
48747 +
            0x72d05ba96b64ab85,
48748 +
            0x3d11f675125cb782,
48749 +
            0x30c842511a6b4a1b,
48750 +
            0x26a29e3d02334cb0,
48751 +
            0x2b7b2a190a04b129,
48752 +
            0x0a7726e5328341e6,
48753 +
            0x07ae92c13ab4bc7f,
48754 +
            0x11c44ead22ecbad4,
48755 +
            0x1c1dfa892adb474d,
48756 +
            0x8e471515d09c82da,
48757 +
            0x839ea131d8ab7f43,
48758 +
            0x95f47d5dc0f379e8,
48759 +
            0x982dc979c8c48471,
48760 +
            0xb921c585f04374be,
48761 +
            0xb4f871a1f8748927,
48762 +
            0xa292adcde02c8f8c,
48763 +
            0xaf4b19e9e81b7215,
48764 +
            0xe08ab43591236e12,
48765 +
            0xed5300119914938b,
48766 +
            0xfb39dc7d814c9520,
48767 +
            0xf6e06859897b68b9,
48768 +
            0xd7ec64a5b1fc9876,
48769 +
            0xda35d081b9cb65ef,
48770 +
            0xcc5f0ceda1936344,
48771 +
            0xc186b8c9a9a49edd,
48772 +
            0x7a327cfffa12f6ef,
48773 +
            0x77ebc8dbf2250b76,
48774 +
            0x618114b7ea7d0ddd,
48775 +
            0x6c58a093e24af044,
48776 +
            0x4d54ac6fdacd008b,
48777 +
            0x408d184bd2fafd12,
48778 +
            0x56e7c427caa2fbb9,
48779 +
            0x5b3e7003c2950620,
48780 +
            0x14ffdddfbbad1a27,
48781 +
            0x192669fbb39ae7be,
48782 +
            0x0f4cb597abc2e115,
48783 +
            0x029501b3a3f51c8c,
48784 +
            0x23990d4f9b72ec43,
48785 +
            0x2e40b96b934511da,
48786 +
            0x382a65078b1d1771,
48787 +
            0x35f3d123832aeae8,
48788 +
            0xa7a93ebf796d2f7f,
48789 +
            0xaa708a9b715ad2e6,
48790 +
            0xbc1a56f76902d44d,
48791 +
            0xb1c3e2d3613529d4,
48792 +
            0x90cfee2f59b2d91b,
48793 +
            0x9d165a0b51852482,
48794 +
            0x8b7c866749dd2229,
48795 +
            0x86a5324341eadfb0,
48796 +
            0xc9649f9f38d2c3b7,
48797 +
            0xc4bd2bbb30e53e2e,
48798 +
            0xd2d7f7d728bd3885,
48799 +
            0xdf0e43f3208ac51c,
48800 +
            0xfe024f0f180d35d3,
48801 +
            0xf3dbfb2b103ac84a,
48802 +
            0xe5b127470862cee1,
48803 +
            0xe868936300553378,
48804 +
            0xa7b8aeaaa7c6b694,
48805 +
            0xaa611a8eaff14b0d,
48806 +
            0xbc0bc6e2b7a94da6,
48807 +
            0xb1d272c6bf9eb03f,
48808 +
            0x90de7e3a871940f0,
48809 +
            0x9d07ca1e8f2ebd69,
48810 +
            0x8b6d16729776bbc2,
48811 +
            0x86b4a2569f41465b,
48812 +
            0xc9750f8ae6795a5c,
48813 +
            0xc4acbbaeee4ea7c5,
48814 +
            0xd2c667c2f616a16e,
48815 +
            0xdf1fd3e6fe215cf7,
48816 +
            0xfe13df1ac6a6ac38,
48817 +
            0xf3ca6b3ece9151a1,
48818 +
            0xe5a0b752d6c9570a,
48819 +
            0xe8790376defeaa93,
48820 +
            0x7a23ecea24b96f04,
48821 +
            0x77fa58ce2c8e929d,
48822 +
            0x619084a234d69436,
48823 +
            0x6c4930863ce169af,
48824 +
            0x4d453c7a04669960,
48825 +
            0x409c885e0c5164f9,
48826 +
            0x56f6543214096252,
48827 +
            0x5b2fe0161c3e9fcb,
48828 +
            0x14ee4dca650683cc,
48829 +
            0x1937f9ee6d317e55,
48830 +
            0x0f5d2582756978fe,
48831 +
            0x028491a67d5e8567,
48832 +
            0x23889d5a45d975a8,
48833 +
            0x2e51297e4dee8831,
48834 +
            0x383bf51255b68e9a,
48835 +
            0x35e241365d817303,
48836 +
            0x8e5685000e371b31,
48837 +
            0x838f31240600e6a8,
48838 +
            0x95e5ed481e58e003,
48839 +
            0x983c596c166f1d9a,
48840 +
            0xb93055902ee8ed55,
48841 +
            0xb4e9e1b426df10cc,
48842 +
            0xa2833dd83e871667,
48843 +
            0xaf5a89fc36b0ebfe,
48844 +
            0xe09b24204f88f7f9,
48845 +
            0xed42900447bf0a60,
48846 +
            0xfb284c685fe70ccb,
48847 +
            0xf6f1f84c57d0f152,
48848 +
            0xd7fdf4b06f57019d,
48849 +
            0xda2440946760fc04,
48850 +
            0xcc4e9cf87f38faaf,
48851 +
            0xc19728dc770f0736,
48852 +
            0x53cdc7408d48c2a1,
48853 +
            0x5e147364857f3f38,
48854 +
            0x487eaf089d273993,
48855 +
            0x45a71b2c9510c40a,
48856 +
            0x64ab17d0ad9734c5,
48857 +
            0x6972a3f4a5a0c95c,
48858 +
            0x7f187f98bdf8cff7,
48859 +
            0x72c1cbbcb5cf326e,
48860 +
            0x3d006660ccf72e69,
48861 +
            0x30d9d244c4c0d3f0,
48862 +
            0x26b30e28dc98d55b,
48863 +
            0x2b6aba0cd4af28c2,
48864 +
            0x0a66b6f0ec28d80d,
48865 +
            0x07bf02d4e41f2594,
48866 +
            0x11d5deb8fc47233f,
48867 +
            0x1c0c6a9cf470dea6,
48868 +
            0xf464f9fff425edde,
48869 +
            0xf9bd4ddbfc121047,
48870 +
            0xefd791b7e44a16ec,
48871 +
            0xe20e2593ec7deb75,
48872 +
            0xc302296fd4fa1bba,
48873 +
            0xcedb9d4bdccde623,
48874 +
            0xd8b14127c495e088,
48875 +
            0xd568f503cca21d11,
48876 +
            0x9aa958dfb59a0116,
48877 +
            0x9770ecfbbdadfc8f,
48878 +
            0x811a3097a5f5fa24,
48879 +
            0x8cc384b3adc207bd,
48880 +
            0xadcf884f9545f772,
48881 +
            0xa0163c6b9d720aeb,
48882 +
            0xb67ce007852a0c40,
48883 +
            0xbba554238d1df1d9,
48884 +
            0x29ffbbbf775a344e,
48885 +
            0x24260f9b7f6dc9d7,
48886 +
            0x324cd3f76735cf7c,
48887 +
            0x3f9567d36f0232e5,
48888 +
            0x1e996b2f5785c22a,
48889 +
            0x1340df0b5fb23fb3,
48890 +
            0x052a036747ea3918,
48891 +
            0x08f3b7434fddc481,
48892 +
            0x47321a9f36e5d886,
48893 +
            0x4aebaebb3ed2251f,
48894 +
            0x5c8172d7268a23b4,
48895 +
            0x5158c6f32ebdde2d,
48896 +
            0x7054ca0f163a2ee2,
48897 +
            0x7d8d7e2b1e0dd37b,
48898 +
            0x6be7a2470655d5d0,
48899 +
            0x663e16630e622849,
48900 +
            0xdd8ad2555dd4407b,
48901 +
            0xd053667155e3bde2,
48902 +
            0xc639ba1d4dbbbb49,
48903 +
            0xcbe00e39458c46d0,
48904 +
            0xeaec02c57d0bb61f,
48905 +
            0xe735b6e1753c4b86,
48906 +
            0xf15f6a8d6d644d2d,
48907 +
            0xfc86dea96553b0b4,
48908 +
            0xb34773751c6bacb3,
48909 +
            0xbe9ec751145c512a,
48910 +
            0xa8f41b3d0c045781,
48911 +
            0xa52daf190433aa18,
48912 +
            0x8421a3e53cb45ad7,
48913 +
            0x89f817c13483a74e,
48914 +
            0x9f92cbad2cdba1e5,
48915 +
            0x924b7f8924ec5c7c,
48916 +
            0x00119015deab99eb,
48917 +
            0x0dc82431d69c6472,
48918 +
            0x1ba2f85dcec462d9,
48919 +
            0x167b4c79c6f39f40,
48920 +
            0x37774085fe746f8f,
48921 +
            0x3aaef4a1f6439216,
48922 +
            0x2cc428cdee1b94bd,
48923 +
            0x211d9ce9e62c6924,
48924 +
            0x6edc31359f147523,
48925 +
            0x63058511972388ba,
48926 +
            0x756f597d8f7b8e11,
48927 +
            0x78b6ed59874c7388,
48928 +
            0x59bae1a5bfcb8347,
48929 +
            0x54635581b7fc7ede,
48930 +
            0x420989edafa47875,
48931 +
            0x4fd03dc9a79385ec,
48932 +
        ],
48933 +
        [
48934 +
            0x0000000000000000,
48935 +
            0xf075e4ae5e05bdff,
48936 +
            0x723366771305657b,
48937 +
            0x824682d94d00d884,
48938 +
            0xe466ccee260acaf6,
48939 +
            0x14132840780f7709,
48940 +
            0x9655aa99350faf8d,
48941 +
            0x66204e376b0a1272,
48942 +
            0x5a1536f7e31b8b69,
48943 +
            0xaa60d259bd1e3696,
48944 +
            0x28265080f01eee12,
48945 +
            0xd853b42eae1b53ed,
48946 +
            0xbe73fa19c511419f,
48947 +
            0x4e061eb79b14fc60,
48948 +
            0xcc409c6ed61424e4,
48949 +
            0x3c3578c08811991b,
48950 +
            0xb42a6defc63716d2,
48951 +
            0x445f89419832ab2d,
48952 +
            0xc6190b98d53273a9,
48953 +
            0x366cef368b37ce56,
48954 +
            0x504ca101e03ddc24,
48955 +
            0xa03945afbe3861db,
48956 +
            0x227fc776f338b95f,
48957 +
            0xd20a23d8ad3d04a0,
48958 +
            0xee3f5b18252c9dbb,
48959 +
            0x1e4abfb67b292044,
48960 +
            0x9c0c3d6f3629f8c0,
48961 +
            0x6c79d9c1682c453f,
48962 +
            0x0a5997f60326574d,
48963 +
            0xfa2c73585d23eab2,
48964 +
            0x786af18110233236,
48965 +
            0x881f152f4e268fc9,
48966 +
            0xfa8c74f423603321,
48967 +
            0x0af9905a7d658ede,
48968 +
            0x88bf12833065565a,
48969 +
            0x78caf62d6e60eba5,
48970 +
            0x1eeab81a056af9d7,
48971 +
            0xee9f5cb45b6f4428,
48972 +
            0x6cd9de6d166f9cac,
48973 +
            0x9cac3ac3486a2153,
48974 +
            0xa0994203c07bb848,
48975 +
            0x50eca6ad9e7e05b7,
48976 +
            0xd2aa2474d37edd33,
48977 +
            0x22dfc0da8d7b60cc,
48978 +
            0x44ff8eede67172be,
48979 +
            0xb48a6a43b874cf41,
48980 +
            0x36cce89af57417c5,
48981 +
            0xc6b90c34ab71aa3a,
48982 +
            0x4ea6191be55725f3,
48983 +
            0xbed3fdb5bb52980c,
48984 +
            0x3c957f6cf6524088,
48985 +
            0xcce09bc2a857fd77,
48986 +
            0xaac0d5f5c35def05,
48987 +
            0x5ab5315b9d5852fa,
48988 +
            0xd8f3b382d0588a7e,
48989 +
            0x2886572c8e5d3781,
48990 +
            0x14b32fec064cae9a,
48991 +
            0xe4c6cb4258491365,
48992 +
            0x6680499b1549cbe1,
48993 +
            0x96f5ad354b4c761e,
48994 +
            0xf0d5e3022046646c,
48995 +
            0x00a007ac7e43d993,
48996 +
            0x82e6857533430117,
48997 +
            0x729361db6d46bce8,
48998 +
            0x67c046c3e9ce78c7,
48999 +
            0x97b5a26db7cbc538,
49000 +
            0x15f320b4facb1dbc,
49001 +
            0xe586c41aa4cea043,
49002 +
            0x83a68a2dcfc4b231,
49003 +
            0x73d36e8391c10fce,
49004 +
            0xf195ec5adcc1d74a,
49005 +
            0x01e008f482c46ab5,
49006 +
            0x3dd570340ad5f3ae,
49007 +
            0xcda0949a54d04e51,
49008 +
            0x4fe6164319d096d5,
49009 +
            0xbf93f2ed47d52b2a,
49010 +
            0xd9b3bcda2cdf3958,
49011 +
            0x29c6587472da84a7,
49012 +
            0xab80daad3fda5c23,
49013 +
            0x5bf53e0361dfe1dc,
49014 +
            0xd3ea2b2c2ff96e15,
49015 +
            0x239fcf8271fcd3ea,
49016 +
            0xa1d94d5b3cfc0b6e,
49017 +
            0x51aca9f562f9b691,
49018 +
            0x378ce7c209f3a4e3,
49019 +
            0xc7f9036c57f6191c,
49020 +
            0x45bf81b51af6c198,
49021 +
            0xb5ca651b44f37c67,
49022 +
            0x89ff1ddbcce2e57c,
49023 +
            0x798af97592e75883,
49024 +
            0xfbcc7bacdfe78007,
49025 +
            0x0bb99f0281e23df8,
49026 +
            0x6d99d135eae82f8a,
49027 +
            0x9dec359bb4ed9275,
49028 +
            0x1faab742f9ed4af1,
49029 +
            0xefdf53eca7e8f70e,
49030 +
            0x9d4c3237caae4be6,
49031 +
            0x6d39d69994abf619,
49032 +
            0xef7f5440d9ab2e9d,
49033 +
            0x1f0ab0ee87ae9362,
49034 +
            0x792afed9eca48110,
49035 +
            0x895f1a77b2a13cef,
49036 +
            0x0b1998aeffa1e46b,
49037 +
            0xfb6c7c00a1a45994,
49038 +
            0xc75904c029b5c08f,
49039 +
            0x372ce06e77b07d70,
49040 +
            0xb56a62b73ab0a5f4,
49041 +
            0x451f861964b5180b,
49042 +
            0x233fc82e0fbf0a79,
49043 +
            0xd34a2c8051bab786,
49044 +
            0x510cae591cba6f02,
49045 +
            0xa1794af742bfd2fd,
49046 +
            0x29665fd80c995d34,
49047 +
            0xd913bb76529ce0cb,
49048 +
            0x5b5539af1f9c384f,
49049 +
            0xab20dd01419985b0,
49050 +
            0xcd0093362a9397c2,
49051 +
            0x3d75779874962a3d,
49052 +
            0xbf33f5413996f2b9,
49053 +
            0x4f4611ef67934f46,
49054 +
            0x7373692fef82d65d,
49055 +
            0x83068d81b1876ba2,
49056 +
            0x01400f58fc87b326,
49057 +
            0xf135ebf6a2820ed9,
49058 +
            0x9715a5c1c9881cab,
49059 +
            0x6760416f978da154,
49060 +
            0xe526c3b6da8d79d0,
49061 +
            0x155327188488c42f,
49062 +
            0xcf808d87d39cf18e,
49063 +
            0x3ff569298d994c71,
49064 +
            0xbdb3ebf0c09994f5,
49065 +
            0x4dc60f5e9e9c290a,
49066 +
            0x2be64169f5963b78,
49067 +
            0xdb93a5c7ab938687,
49068 +
            0x59d5271ee6935e03,
49069 +
            0xa9a0c3b0b896e3fc,
49070 +
            0x9595bb7030877ae7,
49071 +
            0x65e05fde6e82c718,
49072 +
            0xe7a6dd0723821f9c,
49073 +
            0x17d339a97d87a263,
49074 +
            0x71f3779e168db011,
49075 +
            0x8186933048880dee,
49076 +
            0x03c011e90588d56a,
49077 +
            0xf3b5f5475b8d6895,
49078 +
            0x7baae06815abe75c,
49079 +
            0x8bdf04c64bae5aa3,
49080 +
            0x0999861f06ae8227,
49081 +
            0xf9ec62b158ab3fd8,
49082 +
            0x9fcc2c8633a12daa,
49083 +
            0x6fb9c8286da49055,
49084 +
            0xedff4af120a448d1,
49085 +
            0x1d8aae5f7ea1f52e,
49086 +
            0x21bfd69ff6b06c35,
49087 +
            0xd1ca3231a8b5d1ca,
49088 +
            0x538cb0e8e5b5094e,
49089 +
            0xa3f95446bbb0b4b1,
49090 +
            0xc5d91a71d0baa6c3,
49091 +
            0x35acfedf8ebf1b3c,
49092 +
            0xb7ea7c06c3bfc3b8,
49093 +
            0x479f98a89dba7e47,
49094 +
            0x350cf973f0fcc2af,
49095 +
            0xc5791dddaef97f50,
49096 +
            0x473f9f04e3f9a7d4,
49097 +
            0xb74a7baabdfc1a2b,
49098 +
            0xd16a359dd6f60859,
49099 +
            0x211fd13388f3b5a6,
49100 +
            0xa35953eac5f36d22,
49101 +
            0x532cb7449bf6d0dd,
49102 +
            0x6f19cf8413e749c6,
49103 +
            0x9f6c2b2a4de2f439,
49104 +
            0x1d2aa9f300e22cbd,
49105 +
            0xed5f4d5d5ee79142,
49106 +
            0x8b7f036a35ed8330,
49107 +
            0x7b0ae7c46be83ecf,
49108 +
            0xf94c651d26e8e64b,
49109 +
            0x093981b378ed5bb4,
49110 +
            0x8126949c36cbd47d,
49111 +
            0x7153703268ce6982,
49112 +
            0xf315f2eb25ceb106,
49113 +
            0x036016457bcb0cf9,
49114 +
            0x6540587210c11e8b,
49115 +
            0x9535bcdc4ec4a374,
49116 +
            0x17733e0503c47bf0,
49117 +
            0xe706daab5dc1c60f,
49118 +
            0xdb33a26bd5d05f14,
49119 +
            0x2b4646c58bd5e2eb,
49120 +
            0xa900c41cc6d53a6f,
49121 +
            0x597520b298d08790,
49122 +
            0x3f556e85f3da95e2,
49123 +
            0xcf208a2baddf281d,
49124 +
            0x4d6608f2e0dff099,
49125 +
            0xbd13ec5cbeda4d66,
49126 +
            0xa840cb443a528949,
49127 +
            0x58352fea645734b6,
49128 +
            0xda73ad332957ec32,
49129 +
            0x2a06499d775251cd,
49130 +
            0x4c2607aa1c5843bf,
49131 +
            0xbc53e304425dfe40,
49132 +
            0x3e1561dd0f5d26c4,
49133 +
            0xce60857351589b3b,
49134 +
            0xf255fdb3d9490220,
49135 +
            0x0220191d874cbfdf,
49136 +
            0x80669bc4ca4c675b,
49137 +
            0x70137f6a9449daa4,
49138 +
            0x1633315dff43c8d6,
49139 +
            0xe646d5f3a1467529,
49140 +
            0x6400572aec46adad,
49141 +
            0x9475b384b2431052,
49142 +
            0x1c6aa6abfc659f9b,
49143 +
            0xec1f4205a2602264,
49144 +
            0x6e59c0dcef60fae0,
49145 +
            0x9e2c2472b165471f,
49146 +
            0xf80c6a45da6f556d,
49147 +
            0x08798eeb846ae892,
49148 +
            0x8a3f0c32c96a3016,
49149 +
            0x7a4ae89c976f8de9,
49150 +
            0x467f905c1f7e14f2,
49151 +
            0xb60a74f2417ba90d,
49152 +
            0x344cf62b0c7b7189,
49153 +
            0xc4391285527ecc76,
49154 +
            0xa2195cb23974de04,
49155 +
            0x526cb81c677163fb,
49156 +
            0xd02a3ac52a71bb7f,
49157 +
            0x205fde6b74740680,
49158 +
            0x52ccbfb01932ba68,
49159 +
            0xa2b95b1e47370797,
49160 +
            0x20ffd9c70a37df13,
49161 +
            0xd08a3d69543262ec,
49162 +
            0xb6aa735e3f38709e,
49163 +
            0x46df97f0613dcd61,
49164 +
            0xc49915292c3d15e5,
49165 +
            0x34ecf1877238a81a,
49166 +
            0x08d98947fa293101,
49167 +
            0xf8ac6de9a42c8cfe,
49168 +
            0x7aeaef30e92c547a,
49169 +
            0x8a9f0b9eb729e985,
49170 +
            0xecbf45a9dc23fbf7,
49171 +
            0x1ccaa10782264608,
49172 +
            0x9e8c23decf269e8c,
49173 +
            0x6ef9c77091232373,
49174 +
            0xe6e6d25fdf05acba,
49175 +
            0x169336f181001145,
49176 +
            0x94d5b428cc00c9c1,
49177 +
            0x64a050869205743e,
49178 +
            0x02801eb1f90f664c,
49179 +
            0xf2f5fa1fa70adbb3,
49180 +
            0x70b378c6ea0a0337,
49181 +
            0x80c69c68b40fbec8,
49182 +
            0xbcf3e4a83c1e27d3,
49183 +
            0x4c860006621b9a2c,
49184 +
            0xcec082df2f1b42a8,
49185 +
            0x3eb56671711eff57,
49186 +
            0x589528461a14ed25,
49187 +
            0xa8e0cce8441150da,
49188 +
            0x2aa64e310911885e,
49189 +
            0xdad3aa9f571435a1,
49190 +
        ],
49191 +
        [
49192 +
            0x0000000000000000,
49193 +
            0xe05dd497ca393ae4,
49194 +
            0x526306043b7c6b4d,
49195 +
            0xb23ed293f14551a9,
49196 +
            0xa4c60c0876f8d69a,
49197 +
            0x449bd89fbcc1ec7e,
49198 +
            0xf6a50a0c4d84bdd7,
49199 +
            0x16f8de9b87bd8733,
49200 +
            0xdb54b73b42ffb3b1,
49201 +
            0x3b0963ac88c68955,
49202 +
            0x8937b13f7983d8fc,
49203 +
            0x696a65a8b3bae218,
49204 +
            0x7f92bb333407652b,
49205 +
            0x9fcf6fa4fe3e5fcf,
49206 +
            0x2df1bd370f7b0e66,
49207 +
            0xcdac69a0c5423482,
49208 +
            0x2471c15d2af179e7,
49209 +
            0xc42c15cae0c84303,
49210 +
            0x7612c759118d12aa,
49211 +
            0x964f13cedbb4284e,
49212 +
            0x80b7cd555c09af7d,
49213 +
            0x60ea19c296309599,
49214 +
            0xd2d4cb516775c430,
49215 +
            0x32891fc6ad4cfed4,
49216 +
            0xff257666680eca56,
49217 +
            0x1f78a2f1a237f0b2,
49218 +
            0xad4670625372a11b,
49219 +
            0x4d1ba4f5994b9bff,
49220 +
            0x5be37a6e1ef61ccc,
49221 +
            0xbbbeaef9d4cf2628,
49222 +
            0x09807c6a258a7781,
49223 +
            0xe9dda8fdefb34d65,
49224 +
            0x48e382ba55e2f3ce,
49225 +
            0xa8be562d9fdbc92a,
49226 +
            0x1a8084be6e9e9883,
49227 +
            0xfadd5029a4a7a267,
49228 +
            0xec258eb2231a2554,
49229 +
            0x0c785a25e9231fb0,
49230 +
            0xbe4688b618664e19,
49231 +
            0x5e1b5c21d25f74fd,
49232 +
            0x93b73581171d407f,
49233 +
            0x73eae116dd247a9b,
49234 +
            0xc1d433852c612b32,
49235 +
            0x2189e712e65811d6,
49236 +
            0x3771398961e596e5,
49237 +
            0xd72ced1eabdcac01,
49238 +
            0x65123f8d5a99fda8,
49239 +
            0x854feb1a90a0c74c,
49240 +
            0x6c9243e77f138a29,
49241 +
            0x8ccf9770b52ab0cd,
49242 +
            0x3ef145e3446fe164,
49243 +
            0xdeac91748e56db80,
49244 +
            0xc8544fef09eb5cb3,
49245 +
            0x28099b78c3d26657,
49246 +
            0x9a3749eb329737fe,
49247 +
            0x7a6a9d7cf8ae0d1a,
49248 +
            0xb7c6f4dc3dec3998,
49249 +
            0x579b204bf7d5037c,
49250 +
            0xe5a5f2d8069052d5,
49251 +
            0x05f8264fcca96831,
49252 +
            0x1300f8d44b14ef02,
49253 +
            0xf35d2c43812dd5e6,
49254 +
            0x4163fed07068844f,
49255 +
            0xa13e2a47ba51beab,
49256 +
            0x91c70574abc5e79c,
49257 +
            0x719ad1e361fcdd78,
49258 +
            0xc3a4037090b98cd1,
49259 +
            0x23f9d7e75a80b635,
49260 +
            0x3501097cdd3d3106,
49261 +
            0xd55cddeb17040be2,
49262 +
            0x67620f78e6415a4b,
49263 +
            0x873fdbef2c7860af,
49264 +
            0x4a93b24fe93a542d,
49265 +
            0xaace66d823036ec9,
49266 +
            0x18f0b44bd2463f60,
49267 +
            0xf8ad60dc187f0584,
49268 +
            0xee55be479fc282b7,
49269 +
            0x0e086ad055fbb853,
49270 +
            0xbc36b843a4bee9fa,
49271 +
            0x5c6b6cd46e87d31e,
49272 +
            0xb5b6c42981349e7b,
49273 +
            0x55eb10be4b0da49f,
49274 +
            0xe7d5c22dba48f536,
49275 +
            0x078816ba7071cfd2,
49276 +
            0x1170c821f7cc48e1,
49277 +
            0xf12d1cb63df57205,
49278 +
            0x4313ce25ccb023ac,
49279 +
            0xa34e1ab206891948,
49280 +
            0x6ee27312c3cb2dca,
49281 +
            0x8ebfa78509f2172e,
49282 +
            0x3c817516f8b74687,
49283 +
            0xdcdca181328e7c63,
49284 +
            0xca247f1ab533fb50,
49285 +
            0x2a79ab8d7f0ac1b4,
49286 +
            0x9847791e8e4f901d,
49287 +
            0x781aad894476aaf9,
49288 +
            0xd92487cefe271452,
49289 +
            0x39795359341e2eb6,
49290 +
            0x8b4781cac55b7f1f,
49291 +
            0x6b1a555d0f6245fb,
49292 +
            0x7de28bc688dfc2c8,
49293 +
            0x9dbf5f5142e6f82c,
49294 +
            0x2f818dc2b3a3a985,
49295 +
            0xcfdc5955799a9361,
49296 +
            0x027030f5bcd8a7e3,
49297 +
            0xe22de46276e19d07,
49298 +
            0x501336f187a4ccae,
49299 +
            0xb04ee2664d9df64a,
49300 +
            0xa6b63cfdca207179,
49301 +
            0x46ebe86a00194b9d,
49302 +
            0xf4d53af9f15c1a34,
49303 +
            0x1488ee6e3b6520d0,
49304 +
            0xfd554693d4d66db5,
49305 +
            0x1d0892041eef5751,
49306 +
            0xaf364097efaa06f8,
49307 +
            0x4f6b940025933c1c,
49308 +
            0x59934a9ba22ebb2f,
49309 +
            0xb9ce9e0c681781cb,
49310 +
            0x0bf04c9f9952d062,
49311 +
            0xebad9808536bea86,
49312 +
            0x2601f1a89629de04,
49313 +
            0xc65c253f5c10e4e0,
49314 +
            0x7462f7acad55b549,
49315 +
            0x943f233b676c8fad,
49316 +
            0x82c7fda0e0d1089e,
49317 +
            0x629a29372ae8327a,
49318 +
            0xd0a4fba4dbad63d3,
49319 +
            0x30f92f3311945937,
49320 +
            0xb156a5c2f885d1bd,
49321 +
            0x510b715532bceb59,
49322 +
            0xe335a3c6c3f9baf0,
49323 +
            0x0368775109c08014,
49324 +
            0x1590a9ca8e7d0727,
49325 +
            0xf5cd7d5d44443dc3,
49326 +
            0x47f3afceb5016c6a,
49327 +
            0xa7ae7b597f38568e,
49328 +
            0x6a0212f9ba7a620c,
49329 +
            0x8a5fc66e704358e8,
49330 +
            0x386114fd81060941,
49331 +
            0xd83cc06a4b3f33a5,
49332 +
            0xcec41ef1cc82b496,
49333 +
            0x2e99ca6606bb8e72,
49334 +
            0x9ca718f5f7fedfdb,
49335 +
            0x7cfacc623dc7e53f,
49336 +
            0x9527649fd274a85a,
49337 +
            0x757ab008184d92be,
49338 +
            0xc744629be908c317,
49339 +
            0x2719b60c2331f9f3,
49340 +
            0x31e16897a48c7ec0,
49341 +
            0xd1bcbc006eb54424,
49342 +
            0x63826e939ff0158d,
49343 +
            0x83dfba0455c92f69,
49344 +
            0x4e73d3a4908b1beb,
49345 +
            0xae2e07335ab2210f,
49346 +
            0x1c10d5a0abf770a6,
49347 +
            0xfc4d013761ce4a42,
49348 +
            0xeab5dface673cd71,
49349 +
            0x0ae80b3b2c4af795,
49350 +
            0xb8d6d9a8dd0fa63c,
49351 +
            0x588b0d3f17369cd8,
49352 +
            0xf9b52778ad672273,
49353 +
            0x19e8f3ef675e1897,
49354 +
            0xabd6217c961b493e,
49355 +
            0x4b8bf5eb5c2273da,
49356 +
            0x5d732b70db9ff4e9,
49357 +
            0xbd2effe711a6ce0d,
49358 +
            0x0f102d74e0e39fa4,
49359 +
            0xef4df9e32adaa540,
49360 +
            0x22e19043ef9891c2,
49361 +
            0xc2bc44d425a1ab26,
49362 +
            0x70829647d4e4fa8f,
49363 +
            0x90df42d01eddc06b,
49364 +
            0x86279c4b99604758,
49365 +
            0x667a48dc53597dbc,
49366 +
            0xd4449a4fa21c2c15,
49367 +
            0x34194ed8682516f1,
49368 +
            0xddc4e62587965b94,
49369 +
            0x3d9932b24daf6170,
49370 +
            0x8fa7e021bcea30d9,
49371 +
            0x6ffa34b676d30a3d,
49372 +
            0x7902ea2df16e8d0e,
49373 +
            0x995f3eba3b57b7ea,
49374 +
            0x2b61ec29ca12e643,
49375 +
            0xcb3c38be002bdca7,
49376 +
            0x0690511ec569e825,
49377 +
            0xe6cd85890f50d2c1,
49378 +
            0x54f3571afe158368,
49379 +
            0xb4ae838d342cb98c,
49380 +
            0xa2565d16b3913ebf,
49381 +
            0x420b898179a8045b,
49382 +
            0xf0355b1288ed55f2,
49383 +
            0x10688f8542d46f16,
49384 +
            0x2091a0b653403621,
49385 +
            0xc0cc742199790cc5,
49386 +
            0x72f2a6b2683c5d6c,
49387 +
            0x92af7225a2056788,
49388 +
            0x8457acbe25b8e0bb,
49389 +
            0x640a7829ef81da5f,
49390 +
            0xd634aaba1ec48bf6,
49391 +
            0x36697e2dd4fdb112,
49392 +
            0xfbc5178d11bf8590,
49393 +
            0x1b98c31adb86bf74,
49394 +
            0xa9a611892ac3eedd,
49395 +
            0x49fbc51ee0fad439,
49396 +
            0x5f031b856747530a,
49397 +
            0xbf5ecf12ad7e69ee,
49398 +
            0x0d601d815c3b3847,
49399 +
            0xed3dc916960202a3,
49400 +
            0x04e061eb79b14fc6,
49401 +
            0xe4bdb57cb3887522,
49402 +
            0x568367ef42cd248b,
49403 +
            0xb6deb37888f41e6f,
49404 +
            0xa0266de30f49995c,
49405 +
            0x407bb974c570a3b8,
49406 +
            0xf2456be73435f211,
49407 +
            0x1218bf70fe0cc8f5,
49408 +
            0xdfb4d6d03b4efc77,
49409 +
            0x3fe90247f177c693,
49410 +
            0x8dd7d0d40032973a,
49411 +
            0x6d8a0443ca0badde,
49412 +
            0x7b72dad84db62aed,
49413 +
            0x9b2f0e4f878f1009,
49414 +
            0x2911dcdc76ca41a0,
49415 +
            0xc94c084bbcf37b44,
49416 +
            0x6872220c06a2c5ef,
49417 +
            0x882ff69bcc9bff0b,
49418 +
            0x3a1124083ddeaea2,
49419 +
            0xda4cf09ff7e79446,
49420 +
            0xccb42e04705a1375,
49421 +
            0x2ce9fa93ba632991,
49422 +
            0x9ed728004b267838,
49423 +
            0x7e8afc97811f42dc,
49424 +
            0xb3269537445d765e,
49425 +
            0x537b41a08e644cba,
49426 +
            0xe14593337f211d13,
49427 +
            0x011847a4b51827f7,
49428 +
            0x17e0993f32a5a0c4,
49429 +
            0xf7bd4da8f89c9a20,
49430 +
            0x45839f3b09d9cb89,
49431 +
            0xa5de4bacc3e0f16d,
49432 +
            0x4c03e3512c53bc08,
49433 +
            0xac5e37c6e66a86ec,
49434 +
            0x1e60e555172fd745,
49435 +
            0xfe3d31c2dd16eda1,
49436 +
            0xe8c5ef595aab6a92,
49437 +
            0x08983bce90925076,
49438 +
            0xbaa6e95d61d701df,
49439 +
            0x5afb3dcaabee3b3b,
49440 +
            0x9757546a6eac0fb9,
49441 +
            0x770a80fda495355d,
49442 +
            0xc534526e55d064f4,
49443 +
            0x256986f99fe95e10,
49444 +
            0x339158621854d923,
49445 +
            0xd3cc8cf5d26de3c7,
49446 +
            0x61f25e662328b26e,
49447 +
            0x81af8af1e911888a,
49448 +
        ],
49449 +
    ];
49450 +
}
added vendor/crc-fast/src/test/consts.rs +493 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![cfg(test)]
4 +
#![allow(dead_code)]
5 +
6 +
use crate::crc16::consts::{
7 +
    CRC16_ARC, CRC16_CDMA2000, CRC16_CMS, CRC16_DDS_110, CRC16_DECT_R, CRC16_DECT_X, CRC16_DNP,
8 +
    CRC16_EN_13757, CRC16_GENIBUS, CRC16_GSM, CRC16_IBM_3740, CRC16_IBM_SDLC,
9 +
    CRC16_ISO_IEC_14443_3_A, CRC16_KERMIT, CRC16_LJ1200, CRC16_M17, CRC16_MAXIM_DOW, CRC16_MCRF4XX,
10 +
    CRC16_MODBUS, CRC16_NRSC_5, CRC16_OPENSAFETY_A, CRC16_OPENSAFETY_B, CRC16_PROFIBUS,
11 +
    CRC16_RIELLO, CRC16_SPI_FUJITSU, CRC16_T10_DIF, CRC16_TELEDISK, CRC16_TMS37157, CRC16_UMTS,
12 +
    CRC16_USB, CRC16_XMODEM,
13 +
};
14 +
use crate::crc32::consts::{
15 +
    CRC32_AIXM, CRC32_AUTOSAR, CRC32_BASE91_D, CRC32_BZIP2, CRC32_CD_ROM_EDC, CRC32_CKSUM,
16 +
    CRC32_ISCSI, CRC32_ISO_HDLC, CRC32_JAMCRC, CRC32_MEF, CRC32_MPEG_2, CRC32_XFER,
17 +
};
18 +
use crate::crc64::consts::{
19 +
    CRC64_ECMA_182, CRC64_GO_ISO, CRC64_MS, CRC64_NVME, CRC64_REDIS, CRC64_WE, CRC64_XZ,
20 +
};
21 +
use crate::test::enums::*;
22 +
use crate::test::structs::*;
23 +
use crc::Table;
24 +
25 +
pub const TEST_CHECK_STRING: &[u8] = b"123456789";
26 +
27 +
pub const TEST_256_BYTES_STRING: &[u8] = b"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456";
28 +
29 +
pub const TEST_255_BYTES_STRING: &[u8] = b"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345";
30 +
31 +
pub const CRC_64_NVME_CRC: crc::Algorithm<u64> = crc::Algorithm {
32 +
    width: 64,
33 +
    poly: 0xad93d23594c93659,
34 +
    init: 0xffffffffffffffff,
35 +
    refin: true,
36 +
    refout: true,
37 +
    xorout: 0xffffffffffffffff,
38 +
    check: 0xae8b14860a799888,
39 +
    residue: 0xf310303b2b6f6e42,
40 +
};
41 +
42 +
pub(crate) const RUST_CRC32_AIXM: crc::Crc<u32, Table<16>> =
43 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_AIXM);
44 +
45 +
pub(crate) const RUST_CRC32_AUTOSAR: crc::Crc<u32, Table<16>> =
46 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_AUTOSAR);
47 +
48 +
pub(crate) const RUST_CRC32_BASE91_D: crc::Crc<u32, Table<16>> =
49 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_BASE91_D);
50 +
51 +
pub(crate) const RUST_CRC32_BZIP2: crc::Crc<u32, Table<16>> =
52 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_BZIP2);
53 +
54 +
pub(crate) const RUST_CRC32_CD_ROM_EDC: crc::Crc<u32, Table<16>> =
55 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_CD_ROM_EDC);
56 +
57 +
pub(crate) const RUST_CRC32_CKSUM: crc::Crc<u32, Table<16>> =
58 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_CKSUM);
59 +
60 +
pub(crate) const RUST_CRC32_ISCSI: crc::Crc<u32, Table<16>> =
61 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_ISCSI);
62 +
63 +
pub(crate) const RUST_CRC32_ISO_HDLC: crc::Crc<u32, Table<16>> =
64 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_ISO_HDLC);
65 +
66 +
pub(crate) const RUST_CRC32_JAMCRC: crc::Crc<u32, Table<16>> =
67 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_JAMCRC);
68 +
69 +
pub(crate) const RUST_CRC32_MEF: crc::Crc<u32, Table<16>> =
70 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_MEF);
71 +
72 +
pub(crate) const RUST_CRC32_MPEG_2: crc::Crc<u32, Table<16>> =
73 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_MPEG_2);
74 +
75 +
pub(crate) const RUST_CRC32_XFER: crc::Crc<u32, Table<16>> =
76 +
    crc::Crc::<u32, Table<16>>::new(&crc::CRC_32_XFER);
77 +
78 +
pub(crate) const RUST_CRC16_ARC: crc::Crc<u16, Table<16>> =
79 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_ARC);
80 +
81 +
pub(crate) const RUST_CRC16_CDMA2000: crc::Crc<u16, Table<16>> =
82 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_CDMA2000);
83 +
84 +
pub(crate) const RUST_CRC16_CMS: crc::Crc<u16, Table<16>> =
85 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_CMS);
86 +
87 +
pub(crate) const RUST_CRC16_DDS_110: crc::Crc<u16, Table<16>> =
88 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_DDS_110);
89 +
90 +
pub(crate) const RUST_CRC16_DECT_R: crc::Crc<u16, Table<16>> =
91 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_DECT_R);
92 +
93 +
pub(crate) const RUST_CRC16_DECT_X: crc::Crc<u16, Table<16>> =
94 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_DECT_X);
95 +
96 +
pub(crate) const RUST_CRC16_DNP: crc::Crc<u16, Table<16>> =
97 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_DNP);
98 +
99 +
pub(crate) const RUST_CRC16_EN_13757: crc::Crc<u16, Table<16>> =
100 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_EN_13757);
101 +
102 +
pub(crate) const RUST_CRC16_GENIBUS: crc::Crc<u16, Table<16>> =
103 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_GENIBUS);
104 +
105 +
pub(crate) const RUST_CRC16_GSM: crc::Crc<u16, Table<16>> =
106 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_GSM);
107 +
108 +
pub(crate) const RUST_CRC16_IBM_3740: crc::Crc<u16, Table<16>> =
109 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_IBM_3740);
110 +
111 +
pub(crate) const RUST_CRC16_IBM_SDLC: crc::Crc<u16, Table<16>> =
112 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_IBM_SDLC);
113 +
114 +
pub(crate) const RUST_CRC16_ISO_IEC_14443_3_A: crc::Crc<u16, Table<16>> =
115 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_ISO_IEC_14443_3_A);
116 +
117 +
pub(crate) const RUST_CRC16_KERMIT: crc::Crc<u16, Table<16>> =
118 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_KERMIT);
119 +
120 +
pub(crate) const RUST_CRC16_LJ1200: crc::Crc<u16, Table<16>> =
121 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_LJ1200);
122 +
123 +
pub(crate) const RUST_CRC16_M17: crc::Crc<u16, Table<16>> =
124 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_M17);
125 +
126 +
pub(crate) const RUST_CRC16_MAXIM_DOW: crc::Crc<u16, Table<16>> =
127 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_MAXIM_DOW);
128 +
129 +
pub(crate) const RUST_CRC16_MCRF4XX: crc::Crc<u16, Table<16>> =
130 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_MCRF4XX);
131 +
132 +
pub(crate) const RUST_CRC16_MODBUS: crc::Crc<u16, Table<16>> =
133 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_MODBUS);
134 +
135 +
pub(crate) const RUST_CRC16_NRSC_5: crc::Crc<u16, Table<16>> =
136 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_NRSC_5);
137 +
138 +
pub(crate) const RUST_CRC16_OPENSAFETY_A: crc::Crc<u16, Table<16>> =
139 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_OPENSAFETY_A);
140 +
141 +
pub(crate) const RUST_CRC16_OPENSAFETY_B: crc::Crc<u16, Table<16>> =
142 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_OPENSAFETY_B);
143 +
144 +
pub(crate) const RUST_CRC16_PROFIBUS: crc::Crc<u16, Table<16>> =
145 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_PROFIBUS);
146 +
147 +
pub(crate) const RUST_CRC16_RIELLO: crc::Crc<u16, Table<16>> =
148 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_RIELLO);
149 +
150 +
pub(crate) const RUST_CRC16_SPI_FUJITSU: crc::Crc<u16, Table<16>> =
151 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_SPI_FUJITSU);
152 +
153 +
pub(crate) const RUST_CRC16_T10_DIF: crc::Crc<u16, Table<16>> =
154 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_T10_DIF);
155 +
156 +
pub(crate) const RUST_CRC16_TELEDISK: crc::Crc<u16, Table<16>> =
157 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_TELEDISK);
158 +
159 +
pub(crate) const RUST_CRC16_TMS37157: crc::Crc<u16, Table<16>> =
160 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_TMS37157);
161 +
162 +
pub(crate) const RUST_CRC16_UMTS: crc::Crc<u16, Table<16>> =
163 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_UMTS);
164 +
165 +
pub(crate) const RUST_CRC16_USB: crc::Crc<u16, Table<16>> =
166 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_USB);
167 +
168 +
pub(crate) const RUST_CRC16_XMODEM: crc::Crc<u16, Table<16>> =
169 +
    crc::Crc::<u16, Table<16>>::new(&crc::CRC_16_XMODEM);
170 +
171 +
pub(crate) const RUST_CRC64_ECMA_182: crc::Crc<u64, Table<16>> =
172 +
    crc::Crc::<u64, Table<16>>::new(&crc::CRC_64_ECMA_182);
173 +
174 +
pub(crate) const RUST_CRC64_GO_ISO: crc::Crc<u64, Table<16>> =
175 +
    crc::Crc::<u64, Table<16>>::new(&crc::CRC_64_GO_ISO);
176 +
177 +
pub(crate) const RUST_CRC64_MS: crc::Crc<u64, Table<16>> =
178 +
    crc::Crc::<u64, Table<16>>::new(&crc::CRC_64_MS);
179 +
180 +
pub(crate) const RUST_CRC64_NVME: crc::Crc<u64, Table<16>> =
181 +
    crc::Crc::<u64, Table<16>>::new(&CRC_64_NVME_CRC);
182 +
183 +
pub(crate) const RUST_CRC64_REDIS: crc::Crc<u64, Table<16>> =
184 +
    crc::Crc::<u64, Table<16>>::new(&crc::CRC_64_REDIS);
185 +
186 +
pub(crate) const RUST_CRC64_WE: crc::Crc<u64, Table<16>> =
187 +
    crc::Crc::<u64, Table<16>>::new(&crc::CRC_64_WE);
188 +
189 +
pub(crate) const RUST_CRC64_XZ: crc::Crc<u64, Table<16>> =
190 +
    crc::Crc::<u64, Table<16>>::new(&crc::CRC_64_XZ);
191 +
192 +
pub(crate) const TEST_CRC64_ECMA_182: Crc64TestConfig = Crc64TestConfig {
193 +
    params: CRC64_ECMA_182,
194 +
    reference_impl: &RUST_CRC64_ECMA_182,
195 +
};
196 +
197 +
pub(crate) const TEST_CRC64_GO_ISO: Crc64TestConfig = Crc64TestConfig {
198 +
    params: CRC64_GO_ISO,
199 +
    reference_impl: &RUST_CRC64_GO_ISO,
200 +
};
201 +
202 +
pub(crate) const TEST_CRC64_MS: Crc64TestConfig = Crc64TestConfig {
203 +
    params: CRC64_MS,
204 +
    reference_impl: &RUST_CRC64_MS,
205 +
};
206 +
207 +
pub(crate) const TEST_CRC64_NVME: Crc64TestConfig = Crc64TestConfig {
208 +
    params: CRC64_NVME,
209 +
    reference_impl: &RUST_CRC64_NVME,
210 +
};
211 +
212 +
pub(crate) const TEST_CRC64_REDIS: Crc64TestConfig = Crc64TestConfig {
213 +
    params: CRC64_REDIS,
214 +
    reference_impl: &RUST_CRC64_REDIS,
215 +
};
216 +
217 +
pub(crate) const TEST_CRC64_WE: Crc64TestConfig = Crc64TestConfig {
218 +
    params: CRC64_WE,
219 +
    reference_impl: &RUST_CRC64_WE,
220 +
};
221 +
222 +
pub(crate) const TEST_CRC64_XZ: Crc64TestConfig = Crc64TestConfig {
223 +
    params: CRC64_XZ,
224 +
    reference_impl: &RUST_CRC64_XZ,
225 +
};
226 +
227 +
pub(crate) const TEST_CRC16_ARC: Crc16TestConfig = Crc16TestConfig {
228 +
    params: CRC16_ARC,
229 +
    reference_impl: &RUST_CRC16_ARC,
230 +
};
231 +
232 +
pub(crate) const TEST_CRC16_CDMA2000: Crc16TestConfig = Crc16TestConfig {
233 +
    params: CRC16_CDMA2000,
234 +
    reference_impl: &RUST_CRC16_CDMA2000,
235 +
};
236 +
237 +
pub(crate) const TEST_CRC16_CMS: Crc16TestConfig = Crc16TestConfig {
238 +
    params: CRC16_CMS,
239 +
    reference_impl: &RUST_CRC16_CMS,
240 +
};
241 +
242 +
pub(crate) const TEST_CRC16_DDS_110: Crc16TestConfig = Crc16TestConfig {
243 +
    params: CRC16_DDS_110,
244 +
    reference_impl: &RUST_CRC16_DDS_110,
245 +
};
246 +
247 +
pub(crate) const TEST_CRC16_DECT_R: Crc16TestConfig = Crc16TestConfig {
248 +
    params: CRC16_DECT_R,
249 +
    reference_impl: &RUST_CRC16_DECT_R,
250 +
};
251 +
252 +
pub(crate) const TEST_CRC16_DECT_X: Crc16TestConfig = Crc16TestConfig {
253 +
    params: CRC16_DECT_X,
254 +
    reference_impl: &RUST_CRC16_DECT_X,
255 +
};
256 +
257 +
pub(crate) const TEST_CRC16_DNP: Crc16TestConfig = Crc16TestConfig {
258 +
    params: CRC16_DNP,
259 +
    reference_impl: &RUST_CRC16_DNP,
260 +
};
261 +
262 +
pub(crate) const TEST_CRC16_EN_13757: Crc16TestConfig = Crc16TestConfig {
263 +
    params: CRC16_EN_13757,
264 +
    reference_impl: &RUST_CRC16_EN_13757,
265 +
};
266 +
267 +
pub(crate) const TEST_CRC16_GENIBUS: Crc16TestConfig = Crc16TestConfig {
268 +
    params: CRC16_GENIBUS,
269 +
    reference_impl: &RUST_CRC16_GENIBUS,
270 +
};
271 +
272 +
pub(crate) const TEST_CRC16_GSM: Crc16TestConfig = Crc16TestConfig {
273 +
    params: CRC16_GSM,
274 +
    reference_impl: &RUST_CRC16_GSM,
275 +
};
276 +
277 +
pub(crate) const TEST_CRC16_IBM_3740: Crc16TestConfig = Crc16TestConfig {
278 +
    params: CRC16_IBM_3740,
279 +
    reference_impl: &RUST_CRC16_IBM_3740,
280 +
};
281 +
282 +
pub(crate) const TEST_CRC16_IBM_SDLC: Crc16TestConfig = Crc16TestConfig {
283 +
    params: CRC16_IBM_SDLC,
284 +
    reference_impl: &RUST_CRC16_IBM_SDLC,
285 +
};
286 +
287 +
pub(crate) const TEST_CRC16_ISO_IEC_14443_3_A: Crc16TestConfig = Crc16TestConfig {
288 +
    params: CRC16_ISO_IEC_14443_3_A,
289 +
    reference_impl: &RUST_CRC16_ISO_IEC_14443_3_A,
290 +
};
291 +
292 +
pub(crate) const TEST_CRC16_KERMIT: Crc16TestConfig = Crc16TestConfig {
293 +
    params: CRC16_KERMIT,
294 +
    reference_impl: &RUST_CRC16_KERMIT,
295 +
};
296 +
297 +
pub(crate) const TEST_CRC16_LJ1200: Crc16TestConfig = Crc16TestConfig {
298 +
    params: CRC16_LJ1200,
299 +
    reference_impl: &RUST_CRC16_LJ1200,
300 +
};
301 +
302 +
pub(crate) const TEST_CRC16_M17: Crc16TestConfig = Crc16TestConfig {
303 +
    params: CRC16_M17,
304 +
    reference_impl: &RUST_CRC16_M17,
305 +
};
306 +
307 +
pub(crate) const TEST_CRC16_MAXIM_DOW: Crc16TestConfig = Crc16TestConfig {
308 +
    params: CRC16_MAXIM_DOW,
309 +
    reference_impl: &RUST_CRC16_MAXIM_DOW,
310 +
};
311 +
312 +
pub(crate) const TEST_CRC16_MCRF4XX: Crc16TestConfig = Crc16TestConfig {
313 +
    params: CRC16_MCRF4XX,
314 +
    reference_impl: &RUST_CRC16_MCRF4XX,
315 +
};
316 +
317 +
pub(crate) const TEST_CRC16_MODBUS: Crc16TestConfig = Crc16TestConfig {
318 +
    params: CRC16_MODBUS,
319 +
    reference_impl: &RUST_CRC16_MODBUS,
320 +
};
321 +
322 +
pub(crate) const TEST_CRC16_NRSC_5: Crc16TestConfig = Crc16TestConfig {
323 +
    params: CRC16_NRSC_5,
324 +
    reference_impl: &RUST_CRC16_NRSC_5,
325 +
};
326 +
327 +
pub(crate) const TEST_CRC16_OPENSAFETY_A: Crc16TestConfig = Crc16TestConfig {
328 +
    params: CRC16_OPENSAFETY_A,
329 +
    reference_impl: &RUST_CRC16_OPENSAFETY_A,
330 +
};
331 +
332 +
pub(crate) const TEST_CRC16_OPENSAFETY_B: Crc16TestConfig = Crc16TestConfig {
333 +
    params: CRC16_OPENSAFETY_B,
334 +
    reference_impl: &RUST_CRC16_OPENSAFETY_B,
335 +
};
336 +
337 +
pub(crate) const TEST_CRC16_PROFIBUS: Crc16TestConfig = Crc16TestConfig {
338 +
    params: CRC16_PROFIBUS,
339 +
    reference_impl: &RUST_CRC16_PROFIBUS,
340 +
};
341 +
342 +
pub(crate) const TEST_CRC16_RIELLO: Crc16TestConfig = Crc16TestConfig {
343 +
    params: CRC16_RIELLO,
344 +
    reference_impl: &RUST_CRC16_RIELLO,
345 +
};
346 +
347 +
pub(crate) const TEST_CRC16_SPI_FUJITSU: Crc16TestConfig = Crc16TestConfig {
348 +
    params: CRC16_SPI_FUJITSU,
349 +
    reference_impl: &RUST_CRC16_SPI_FUJITSU,
350 +
};
351 +
352 +
pub(crate) const TEST_CRC16_T10_DIF: Crc16TestConfig = Crc16TestConfig {
353 +
    params: CRC16_T10_DIF,
354 +
    reference_impl: &RUST_CRC16_T10_DIF,
355 +
};
356 +
357 +
pub(crate) const TEST_CRC16_TELEDISK: Crc16TestConfig = Crc16TestConfig {
358 +
    params: CRC16_TELEDISK,
359 +
    reference_impl: &RUST_CRC16_TELEDISK,
360 +
};
361 +
362 +
pub(crate) const TEST_CRC16_TMS37157: Crc16TestConfig = Crc16TestConfig {
363 +
    params: CRC16_TMS37157,
364 +
    reference_impl: &RUST_CRC16_TMS37157,
365 +
};
366 +
367 +
pub(crate) const TEST_CRC16_UMTS: Crc16TestConfig = Crc16TestConfig {
368 +
    params: CRC16_UMTS,
369 +
    reference_impl: &RUST_CRC16_UMTS,
370 +
};
371 +
372 +
pub(crate) const TEST_CRC16_USB: Crc16TestConfig = Crc16TestConfig {
373 +
    params: CRC16_USB,
374 +
    reference_impl: &RUST_CRC16_USB,
375 +
};
376 +
377 +
pub(crate) const TEST_CRC16_XMODEM: Crc16TestConfig = Crc16TestConfig {
378 +
    params: CRC16_XMODEM,
379 +
    reference_impl: &RUST_CRC16_XMODEM,
380 +
};
381 +
382 +
pub(crate) const TEST_CRC32_AIXM: Crc32TestConfig = Crc32TestConfig {
383 +
    params: CRC32_AIXM,
384 +
    reference_impl: &RUST_CRC32_AIXM,
385 +
};
386 +
387 +
pub(crate) const TEST_CRC32_AUTOSAR: Crc32TestConfig = Crc32TestConfig {
388 +
    params: CRC32_AUTOSAR,
389 +
    reference_impl: &RUST_CRC32_AUTOSAR,
390 +
};
391 +
392 +
pub(crate) const TEST_CRC32_BASE91_D: Crc32TestConfig = Crc32TestConfig {
393 +
    params: CRC32_BASE91_D,
394 +
    reference_impl: &RUST_CRC32_BASE91_D,
395 +
};
396 +
397 +
pub(crate) const TEST_CRC32_BZIP2: Crc32TestConfig = Crc32TestConfig {
398 +
    params: CRC32_BZIP2,
399 +
    reference_impl: &RUST_CRC32_BZIP2,
400 +
};
401 +
402 +
pub(crate) const TEST_CRC32_CD_ROM_EDC: Crc32TestConfig = Crc32TestConfig {
403 +
    params: CRC32_CD_ROM_EDC,
404 +
    reference_impl: &RUST_CRC32_CD_ROM_EDC,
405 +
};
406 +
407 +
pub(crate) const TEST_CRC32_CKSUM: Crc32TestConfig = Crc32TestConfig {
408 +
    params: CRC32_CKSUM,
409 +
    reference_impl: &RUST_CRC32_CKSUM,
410 +
};
411 +
412 +
pub(crate) const TEST_CRC32_ISCSI: Crc32TestConfig = Crc32TestConfig {
413 +
    params: CRC32_ISCSI,
414 +
    reference_impl: &RUST_CRC32_ISCSI,
415 +
};
416 +
417 +
pub(crate) const TEST_CRC32_ISO_HDLC: Crc32TestConfig = Crc32TestConfig {
418 +
    params: CRC32_ISO_HDLC,
419 +
    reference_impl: &RUST_CRC32_ISO_HDLC,
420 +
};
421 +
422 +
pub(crate) const TEST_CRC32_JAMCRC: Crc32TestConfig = Crc32TestConfig {
423 +
    params: CRC32_JAMCRC,
424 +
    reference_impl: &RUST_CRC32_JAMCRC,
425 +
};
426 +
427 +
pub(crate) const TEST_CRC32_MEF: Crc32TestConfig = Crc32TestConfig {
428 +
    params: CRC32_MEF,
429 +
    reference_impl: &RUST_CRC32_MEF,
430 +
};
431 +
432 +
pub(crate) const TEST_CRC32_MPEG_2: Crc32TestConfig = Crc32TestConfig {
433 +
    params: CRC32_MPEG_2,
434 +
    reference_impl: &RUST_CRC32_MPEG_2,
435 +
};
436 +
437 +
pub(crate) const TEST_CRC32_XFER: Crc32TestConfig = Crc32TestConfig {
438 +
    params: CRC32_XFER,
439 +
    reference_impl: &RUST_CRC32_XFER,
440 +
};
441 +
442 +
pub(crate) const TEST_ALL_CONFIGS: &[AnyCrcTestConfig] = &[
443 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_ARC),
444 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_CDMA2000),
445 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_CMS),
446 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_DDS_110),
447 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_DECT_R),
448 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_DECT_X),
449 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_DNP),
450 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_EN_13757),
451 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_GENIBUS),
452 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_GSM),
453 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_IBM_3740),
454 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_IBM_SDLC),
455 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_ISO_IEC_14443_3_A),
456 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_KERMIT),
457 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_LJ1200),
458 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_M17),
459 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_MAXIM_DOW),
460 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_MCRF4XX),
461 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_MODBUS),
462 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_NRSC_5),
463 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_OPENSAFETY_A),
464 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_OPENSAFETY_B),
465 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_PROFIBUS),
466 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_RIELLO),
467 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_SPI_FUJITSU),
468 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_T10_DIF),
469 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_TELEDISK),
470 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_TMS37157),
471 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_UMTS),
472 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_USB),
473 +
    AnyCrcTestConfig::CRC16(&TEST_CRC16_XMODEM),
474 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_AIXM),
475 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_AUTOSAR),
476 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_BASE91_D),
477 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_BZIP2),
478 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_CD_ROM_EDC),
479 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_CKSUM),
480 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_ISCSI),
481 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_ISO_HDLC),
482 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_JAMCRC),
483 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_MEF),
484 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_MPEG_2),
485 +
    AnyCrcTestConfig::CRC32(&TEST_CRC32_XFER),
486 +
    AnyCrcTestConfig::CRC64(&TEST_CRC64_ECMA_182),
487 +
    AnyCrcTestConfig::CRC64(&TEST_CRC64_GO_ISO),
488 +
    AnyCrcTestConfig::CRC64(&TEST_CRC64_MS),
489 +
    AnyCrcTestConfig::CRC64(&TEST_CRC64_NVME),
490 +
    AnyCrcTestConfig::CRC64(&TEST_CRC64_REDIS),
491 +
    AnyCrcTestConfig::CRC64(&TEST_CRC64_WE),
492 +
    AnyCrcTestConfig::CRC64(&TEST_CRC64_XZ),
493 +
];
added vendor/crc-fast/src/test/enums.rs +88 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![cfg(test)]
4 +
#![allow(dead_code)]
5 +
6 +
use crate::test::structs::*;
7 +
use crate::CrcAlgorithm;
8 +
use crate::CrcParams;
9 +
use crc::Crc;
10 +
11 +
pub enum AnyCrcTestConfig {
12 +
    CRC16(&'static Crc16TestConfig),
13 +
    CRC32(&'static Crc32TestConfig),
14 +
    CRC64(&'static Crc64TestConfig),
15 +
}
16 +
17 +
impl AnyCrcTestConfig {
18 +
    pub fn get_params(&self) -> &CrcParams {
19 +
        match self {
20 +
            AnyCrcTestConfig::CRC16(cfg) => &cfg.params,
21 +
            AnyCrcTestConfig::CRC32(cfg) => &cfg.params,
22 +
            AnyCrcTestConfig::CRC64(cfg) => &cfg.params,
23 +
        }
24 +
    }
25 +
26 +
    pub fn get_width(&self) -> u8 {
27 +
        self.get_params().width
28 +
    }
29 +
30 +
    pub fn get_poly(&self) -> u64 {
31 +
        self.get_params().poly
32 +
    }
33 +
34 +
    pub fn get_refin(&self) -> bool {
35 +
        self.get_params().refin
36 +
    }
37 +
38 +
    pub fn get_algorithm(&self) -> CrcAlgorithm {
39 +
        self.get_params().algorithm
40 +
    }
41 +
42 +
    pub fn get_init(&self) -> u64 {
43 +
        self.get_params().init
44 +
    }
45 +
46 +
    pub fn get_init_algorithm(&self) -> u64 {
47 +
        self.get_params().init_algorithm
48 +
    }
49 +
50 +
    pub fn get_xorout(&self) -> u64 {
51 +
        self.get_params().xorout
52 +
    }
53 +
54 +
    pub fn get_check(&self) -> u64 {
55 +
        self.get_params().check
56 +
    }
57 +
58 +
    pub fn get_name(&self) -> &str {
59 +
        self.get_params().name
60 +
    }
61 +
62 +
    pub fn get_keys(&self) -> [u64; 23] {
63 +
        self.get_params().keys.to_keys_array_23()
64 +
    }
65 +
66 +
    pub fn checksum_with_reference(&self, data: &[u8]) -> u64 {
67 +
        match self {
68 +
            AnyCrcTestConfig::CRC16(cfg) => cfg.reference_impl.checksum(data) as u64,
69 +
            AnyCrcTestConfig::CRC32(cfg) => cfg.reference_impl.checksum(data) as u64,
70 +
            AnyCrcTestConfig::CRC64(cfg) => cfg.reference_impl.checksum(data),
71 +
        }
72 +
    }
73 +
74 +
    pub fn with_reference_impl<F, R>(&self, f: F) -> R
75 +
    where
76 +
        F: FnOnce(
77 +
            Option<&Crc<u16, crc::Table<16>>>,
78 +
            Option<&Crc<u32, crc::Table<16>>>,
79 +
            Option<&Crc<u64, crc::Table<16>>>,
80 +
        ) -> R,
81 +
    {
82 +
        match self {
83 +
            AnyCrcTestConfig::CRC16(cfg) => f(Some(cfg.reference_impl), None, None),
84 +
            AnyCrcTestConfig::CRC32(cfg) => f(None, Some(cfg.reference_impl), None),
85 +
            AnyCrcTestConfig::CRC64(cfg) => f(None, None, Some(cfg.reference_impl)),
86 +
        }
87 +
    }
88 +
}
added vendor/crc-fast/src/test/future_proof_tests.rs +1756 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! Tests for future-proof CrcKeysStorage and CrcParams functionality
4 +
5 +
#![cfg(test)]
6 +
7 +
use crate::{CrcAlgorithm, CrcKeysStorage, CrcParams};
8 +
9 +
#[test]
10 +
fn test_crc_keys_storage_bounds_checking() {
11 +
    // Test KeysFold256 variant (23 keys)
12 +
    let keys_23 = [1u64; 23];
13 +
    let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23);
14 +
15 +
    // Test valid indices
16 +
    for i in 0..23 {
17 +
        assert_eq!(
18 +
            storage_23.get_key(i),
19 +
            1,
20 +
            "Valid index {} should return key value",
21 +
            i
22 +
        );
23 +
    }
24 +
25 +
    // Test out-of-bounds indices return 0
26 +
    assert_eq!(
27 +
        storage_23.get_key(23),
28 +
        0,
29 +
        "Index 23 should return 0 for 23-key storage"
30 +
    );
31 +
    assert_eq!(
32 +
        storage_23.get_key(24),
33 +
        0,
34 +
        "Index 24 should return 0 for 23-key storage"
35 +
    );
36 +
    assert_eq!(
37 +
        storage_23.get_key(100),
38 +
        0,
39 +
        "Large index should return 0 for 23-key storage"
40 +
    );
41 +
42 +
    // Test KeysFutureTest variant (25 keys)
43 +
    let keys_25 = [2u64; 25];
44 +
    let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25);
45 +
46 +
    // Test valid indices
47 +
    for i in 0..25 {
48 +
        assert_eq!(
49 +
            storage_25.get_key(i),
50 +
            2,
51 +
            "Valid index {} should return key value",
52 +
            i
53 +
        );
54 +
    }
55 +
56 +
    // Test out-of-bounds indices return 0
57 +
    assert_eq!(
58 +
        storage_25.get_key(25),
59 +
        0,
60 +
        "Index 25 should return 0 for 25-key storage"
61 +
    );
62 +
    assert_eq!(
63 +
        storage_25.get_key(26),
64 +
        0,
65 +
        "Index 26 should return 0 for 25-key storage"
66 +
    );
67 +
    assert_eq!(
68 +
        storage_25.get_key(100),
69 +
        0,
70 +
        "Large index should return 0 for 25-key storage"
71 +
    );
72 +
}
73 +
74 +
#[test]
75 +
#[allow(deprecated)]
76 +
fn test_crc_params_get_key_checked() {
77 +
    // Create test CrcParams with 23-key storage
78 +
    let keys_23 = [42u64; 23];
79 +
    let params_23 = CrcParams {
80 +
        algorithm: CrcAlgorithm::Crc32Custom,
81 +
        name: "Test CRC",
82 +
        width: 32,
83 +
        poly: 0x1EDC6F41,
84 +
        init: 0xFFFFFFFF,
85 +
        init_algorithm: 0xFFFFFFFF,
86 +
        refin: true,
87 +
        refout: true,
88 +
        xorout: 0xFFFFFFFF,
89 +
        check: 0x12345678,
90 +
        keys: CrcKeysStorage::from_keys_fold_256(keys_23),
91 +
    };
92 +
93 +
    // Test valid indices return Some(value)
94 +
    for i in 0..23 {
95 +
        assert_eq!(
96 +
            params_23.get_key_checked(i),
97 +
            Some(42),
98 +
            "Valid index {} should return Some(42)",
99 +
            i
100 +
        );
101 +
    }
102 +
103 +
    // Test out-of-bounds indices return None
104 +
    assert_eq!(
105 +
        params_23.get_key_checked(23),
106 +
        None,
107 +
        "Index 23 should return None for 23-key params"
108 +
    );
109 +
    assert_eq!(
110 +
        params_23.get_key_checked(24),
111 +
        None,
112 +
        "Index 24 should return None for 23-key params"
113 +
    );
114 +
    assert_eq!(
115 +
        params_23.get_key_checked(100),
116 +
        None,
117 +
        "Large index should return None for 23-key params"
118 +
    );
119 +
120 +
    // Create test CrcParams with 25-key storage
121 +
    let keys_25 = [84u64; 25];
122 +
    let params_25 = CrcParams {
123 +
        algorithm: CrcAlgorithm::Crc64Custom,
124 +
        name: "Test CRC 64",
125 +
        width: 64,
126 +
        poly: 0x42F0E1EBA9EA3693,
127 +
        init: 0xFFFFFFFFFFFFFFFF,
128 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
129 +
        refin: true,
130 +
        refout: true,
131 +
        xorout: 0xFFFFFFFFFFFFFFFF,
132 +
        check: 0x123456789ABCDEF0,
133 +
        keys: CrcKeysStorage::from_keys_fold_future_test(keys_25),
134 +
    };
135 +
136 +
    // Test valid indices return Some(value)
137 +
    for i in 0..25 {
138 +
        assert_eq!(
139 +
            params_25.get_key_checked(i),
140 +
            Some(84),
141 +
            "Valid index {} should return Some(84)",
142 +
            i
143 +
        );
144 +
    }
145 +
146 +
    // Test out-of-bounds indices return None
147 +
    assert_eq!(
148 +
        params_25.get_key_checked(25),
149 +
        None,
150 +
        "Index 25 should return None for 25-key params"
151 +
    );
152 +
    assert_eq!(
153 +
        params_25.get_key_checked(26),
154 +
        None,
155 +
        "Index 26 should return None for 25-key params"
156 +
    );
157 +
    assert_eq!(
158 +
        params_25.get_key_checked(100),
159 +
        None,
160 +
        "Large index should return None for 25-key params"
161 +
    );
162 +
}
163 +
164 +
#[test]
165 +
#[allow(deprecated)]
166 +
fn test_key_count_returns_correct_values() {
167 +
    // Test KeysFold256 variant
168 +
    let keys_23 = [1u64; 23];
169 +
    let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23);
170 +
    assert_eq!(
171 +
        storage_23.key_count(),
172 +
        23,
173 +
        "KeysFold256 should report 23 keys"
174 +
    );
175 +
176 +
    let params_23 = CrcParams {
177 +
        algorithm: CrcAlgorithm::Crc32Custom,
178 +
        name: "Test CRC",
179 +
        width: 32,
180 +
        poly: 0x1EDC6F41,
181 +
        init: 0xFFFFFFFF,
182 +
        init_algorithm: 0xFFFFFFFF,
183 +
        refin: true,
184 +
        refout: true,
185 +
        xorout: 0xFFFFFFFF,
186 +
        check: 0x12345678,
187 +
        keys: storage_23,
188 +
    };
189 +
    assert_eq!(
190 +
        params_23.key_count(),
191 +
        23,
192 +
        "CrcParams with KeysFold256 should report 23 keys"
193 +
    );
194 +
195 +
    // Test KeysFutureTest variant
196 +
    let keys_25 = [2u64; 25];
197 +
    let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25);
198 +
    assert_eq!(
199 +
        storage_25.key_count(),
200 +
        25,
201 +
        "KeysFutureTest should report 25 keys"
202 +
    );
203 +
204 +
    let params_25 = CrcParams {
205 +
        algorithm: CrcAlgorithm::Crc64Custom,
206 +
        name: "Test CRC 64",
207 +
        width: 64,
208 +
        poly: 0x42F0E1EBA9EA3693,
209 +
        init: 0xFFFFFFFFFFFFFFFF,
210 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
211 +
        refin: true,
212 +
        refout: true,
213 +
        xorout: 0xFFFFFFFFFFFFFFFF,
214 +
        check: 0x123456789ABCDEF0,
215 +
        keys: storage_25,
216 +
    };
217 +
    assert_eq!(
218 +
        params_25.key_count(),
219 +
        25,
220 +
        "CrcParams with KeysFutureTest should report 25 keys"
221 +
    );
222 +
}
223 +
224 +
#[test]
225 +
#[allow(deprecated)]
226 +
fn test_crc_params_get_key_bounds_checking() {
227 +
    // Create test CrcParams with 23-key storage
228 +
    let keys_23 = [99u64; 23];
229 +
    let params_23 = CrcParams {
230 +
        algorithm: CrcAlgorithm::Crc32Custom,
231 +
        name: "Test CRC",
232 +
        width: 32,
233 +
        poly: 0x1EDC6F41,
234 +
        init: 0xFFFFFFFF,
235 +
        init_algorithm: 0xFFFFFFFF,
236 +
        refin: true,
237 +
        refout: true,
238 +
        xorout: 0xFFFFFFFF,
239 +
        check: 0x12345678,
240 +
        keys: CrcKeysStorage::from_keys_fold_256(keys_23),
241 +
    };
242 +
243 +
    // Test valid indices
244 +
    for i in 0..23 {
245 +
        assert_eq!(
246 +
            params_23.get_key(i),
247 +
            99,
248 +
            "Valid index {} should return 99",
249 +
            i
250 +
        );
251 +
    }
252 +
253 +
    // Test out-of-bounds indices return 0
254 +
    assert_eq!(
255 +
        params_23.get_key(23),
256 +
        0,
257 +
        "Index 23 should return 0 for 23-key params"
258 +
    );
259 +
    assert_eq!(
260 +
        params_23.get_key(24),
261 +
        0,
262 +
        "Index 24 should return 0 for 23-key params"
263 +
    );
264 +
    assert_eq!(
265 +
        params_23.get_key(100),
266 +
        0,
267 +
        "Large index should return 0 for 23-key params"
268 +
    );
269 +
}
270 +
271 +
#[test]
272 +
#[allow(deprecated)]
273 +
fn test_third_party_const_definitions_compatibility() {
274 +
    // Mock third-party const definitions using the new format
275 +
    // These simulate how third-party applications would define custom CrcParams
276 +
277 +
    // Mock third-party CRC-32 definition (similar to existing library constants)
278 +
    const MOCK_THIRD_PARTY_CRC32: CrcParams = CrcParams {
279 +
        algorithm: CrcAlgorithm::Crc32Custom,
280 +
        name: "Mock Third Party CRC-32",
281 +
        width: 32,
282 +
        poly: 0x1EDC6F41,
283 +
        init: 0xFFFFFFFF,
284 +
        init_algorithm: 0xFFFFFFFF,
285 +
        refin: true,
286 +
        refout: true,
287 +
        xorout: 0xFFFFFFFF,
288 +
        check: 0xE3069283,
289 +
        keys: CrcKeysStorage::from_keys_fold_256([
290 +
            0x1234567890ABCDEF,
291 +
            0x2345678901BCDEF0,
292 +
            0x3456789012CDEF01,
293 +
            0x456789023DEF012,
294 +
            0x56789034EF0123,
295 +
            0x6789045F01234,
296 +
            0x789056012345,
297 +
            0x89067123456,
298 +
            0x9078234567,
299 +
            0xA089345678,
300 +
            0xB09A456789,
301 +
            0xC0AB56789A,
302 +
            0xD0BC6789AB,
303 +
            0xE0CD789ABC,
304 +
            0xF0DE89ABCD,
305 +
            0x10EF9ABCDE,
306 +
            0x210ABCDEF0,
307 +
            0x321BCDEF01,
308 +
            0x432CDEF012,
309 +
            0x543DEF0123,
310 +
            0x654EF01234,
311 +
            0x765F012345,
312 +
            0x876012345,
313 +
        ]),
314 +
    };
315 +
316 +
    // Mock third-party CRC-64 definition
317 +
    const MOCK_THIRD_PARTY_CRC64: CrcParams = CrcParams {
318 +
        algorithm: CrcAlgorithm::Crc64Custom,
319 +
        name: "Mock Third Party CRC-64",
320 +
        width: 64,
321 +
        poly: 0x42F0E1EBA9EA3693,
322 +
        init: 0xFFFFFFFFFFFFFFFF,
323 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
324 +
        refin: true,
325 +
        refout: true,
326 +
        xorout: 0xFFFFFFFFFFFFFFFF,
327 +
        check: 0x6C40DF5F0B497347,
328 +
        keys: CrcKeysStorage::from_keys_fold_256([
329 +
            0xFEDCBA0987654321,
330 +
            0xEDCBA09876543210,
331 +
            0xDCBA098765432101,
332 +
            0xCBA0987654321012,
333 +
            0xBA09876543210123,
334 +
            0xA098765432101234,
335 +
            0x9087654321012345,
336 +
            0x8076543210123456,
337 +
            0x7065432101234567,
338 +
            0x6054321012345678,
339 +
            0x5043210123456789,
340 +
            0x403210123456789A,
341 +
            0x3210123456789AB,
342 +
            0x210123456789ABC,
343 +
            0x10123456789ABCD,
344 +
            0x123456789ABCDE,
345 +
            0x23456789ABCDEF,
346 +
            0x3456789ABCDEF0,
347 +
            0x456789ABCDEF01,
348 +
            0x56789ABCDEF012,
349 +
            0x6789ABCDEF0123,
350 +
            0x789ABCDEF01234,
351 +
            0x89ABCDEF012345,
352 +
        ]),
353 +
    };
354 +
355 +
    // Test that third-party const definitions work correctly
356 +
    assert_eq!(MOCK_THIRD_PARTY_CRC32.key_count(), 23);
357 +
    assert_eq!(MOCK_THIRD_PARTY_CRC64.key_count(), 23);
358 +
359 +
    // Test key access patterns that third-party code might use
360 +
    assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key(0), 0x1234567890ABCDEF);
361 +
    assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key(22), 0x876012345);
362 +
    assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key(23), 0); // Out of bounds
363 +
364 +
    assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key(0), 0xFEDCBA0987654321);
365 +
    assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key(22), 0x89ABCDEF012345);
366 +
    assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key(23), 0); // Out of bounds
367 +
368 +
    // Test that checked access works as expected
369 +
    assert_eq!(
370 +
        MOCK_THIRD_PARTY_CRC32.get_key_checked(0),
371 +
        Some(0x1234567890ABCDEF)
372 +
    );
373 +
    assert_eq!(
374 +
        MOCK_THIRD_PARTY_CRC32.get_key_checked(22),
375 +
        Some(0x876012345)
376 +
    );
377 +
    assert_eq!(MOCK_THIRD_PARTY_CRC32.get_key_checked(23), None);
378 +
379 +
    assert_eq!(
380 +
        MOCK_THIRD_PARTY_CRC64.get_key_checked(0),
381 +
        Some(0xFEDCBA0987654321)
382 +
    );
383 +
    assert_eq!(
384 +
        MOCK_THIRD_PARTY_CRC64.get_key_checked(22),
385 +
        Some(0x89ABCDEF012345)
386 +
    );
387 +
    assert_eq!(MOCK_THIRD_PARTY_CRC64.get_key_checked(23), None);
388 +
}
389 +
390 +
#[test]
391 +
#[allow(clippy::needless_range_loop)] // Intentionally testing indexed key access patterns
392 +
#[allow(deprecated)]
393 +
fn test_existing_key_access_patterns_continue_to_work() {
394 +
    // Test that common key access patterns used by existing code continue to work
395 +
396 +
    let test_keys = [
397 +
        0x1111111111111111,
398 +
        0x2222222222222222,
399 +
        0x3333333333333333,
400 +
        0x4444444444444444,
401 +
        0x5555555555555555,
402 +
        0x6666666666666666,
403 +
        0x7777777777777777,
404 +
        0x8888888888888888,
405 +
        0x9999999999999999,
406 +
        0xAAAAAAAAAAAAAAAA,
407 +
        0xBBBBBBBBBBBBBBBB,
408 +
        0xCCCCCCCCCCCCCCCC,
409 +
        0xDDDDDDDDDDDDDDDD,
410 +
        0xEEEEEEEEEEEEEEEE,
411 +
        0xFFFFFFFFFFFFFFFF,
412 +
        0x1010101010101010,
413 +
        0x2020202020202020,
414 +
        0x3030303030303030,
415 +
        0x4040404040404040,
416 +
        0x5050505050505050,
417 +
        0x6060606060606060,
418 +
        0x7070707070707070,
419 +
        0x8080808080808080,
420 +
    ];
421 +
422 +
    let params = CrcParams {
423 +
        algorithm: CrcAlgorithm::Crc32Custom,
424 +
        name: "Test Pattern Access",
425 +
        width: 32,
426 +
        poly: 0x1EDC6F41,
427 +
        init: 0xFFFFFFFF,
428 +
        init_algorithm: 0xFFFFFFFF,
429 +
        refin: true,
430 +
        refout: true,
431 +
        xorout: 0xFFFFFFFF,
432 +
        check: 0x12345678,
433 +
        keys: CrcKeysStorage::from_keys_fold_256(test_keys),
434 +
    };
435 +
436 +
    // Pattern 1: Sequential access (common in folding algorithms)
437 +
    for i in 0..23 {
438 +
        let expected = test_keys[i];
439 +
        assert_eq!(
440 +
            params.get_key(i),
441 +
            expected,
442 +
            "Sequential access failed at index {}",
443 +
            i
444 +
        );
445 +
    }
446 +
447 +
    // Pattern 2: Reverse access (sometimes used in algorithms)
448 +
    for i in (0..23).rev() {
449 +
        let expected = test_keys[i];
450 +
        assert_eq!(
451 +
            params.get_key(i),
452 +
            expected,
453 +
            "Reverse access failed at index {}",
454 +
            i
455 +
        );
456 +
    }
457 +
458 +
    // Pattern 3: Specific indices commonly used in folding (powers of 2, etc.)
459 +
    let common_indices = [0, 1, 2, 4, 8, 16, 22];
460 +
    for &i in &common_indices {
461 +
        if i < 23 {
462 +
            let expected = test_keys[i];
463 +
            assert_eq!(
464 +
                params.get_key(i),
465 +
                expected,
466 +
                "Common index access failed at index {}",
467 +
                i
468 +
            );
469 +
        }
470 +
    }
471 +
472 +
    // Pattern 4: Bounds checking that third-party code might rely on
473 +
    assert_eq!(
474 +
        params.get_key(23),
475 +
        0,
476 +
        "Out-of-bounds access should return 0"
477 +
    );
478 +
    assert_eq!(
479 +
        params.get_key(100),
480 +
        0,
481 +
        "Large out-of-bounds access should return 0"
482 +
    );
483 +
}
484 +
485 +
#[test]
486 +
#[allow(clippy::needless_range_loop)] // Intentionally testing indexed key access for backwards compatibility
487 +
#[allow(deprecated)]
488 +
fn test_backwards_compatibility_throughout_migration_phases() {
489 +
    // This test simulates the migration phases to ensure backwards compatibility
490 +
491 +
    // Phase 1 & 2: Original array-based access patterns (simulated)
492 +
    let test_keys = [0x123456789ABCDEF0u64; 23];
493 +
    let storage = CrcKeysStorage::from_keys_fold_256(test_keys);
494 +
495 +
    // Verify that the storage behaves identically to direct array access
496 +
    for i in 0..23 {
497 +
        assert_eq!(
498 +
            storage.get_key(i),
499 +
            test_keys[i],
500 +
            "Storage access should match array access at index {}",
501 +
            i
502 +
        );
503 +
    }
504 +
505 +
    // Phase 3: New CrcKeysStorage-based access
506 +
    let params = CrcParams {
507 +
        algorithm: CrcAlgorithm::Crc64Custom,
508 +
        name: "Migration Test",
509 +
        width: 64,
510 +
        poly: 0x42F0E1EBA9EA3693,
511 +
        init: 0x0000000000000000,
512 +
        init_algorithm: 0x0000000000000000,
513 +
        refin: false,
514 +
        refout: false,
515 +
        xorout: 0x0000000000000000,
516 +
        check: 0x6C40DF5F0B497347,
517 +
        keys: storage,
518 +
    };
519 +
520 +
    // Verify that CrcParams provides the same access patterns
521 +
    for i in 0..23 {
522 +
        assert_eq!(
523 +
            params.get_key(i),
524 +
            test_keys[i],
525 +
            "CrcParams access should match array access at index {}",
526 +
            i
527 +
        );
528 +
        assert_eq!(
529 +
            params.get_key_checked(i),
530 +
            Some(test_keys[i]),
531 +
            "CrcParams checked access should match array access at index {}",
532 +
            i
533 +
        );
534 +
    }
535 +
536 +
    // Verify bounds checking works consistently
537 +
    assert_eq!(params.get_key(23), 0, "Out-of-bounds should return 0");
538 +
    assert_eq!(
539 +
        params.get_key_checked(23),
540 +
        None,
541 +
        "Out-of-bounds checked should return None"
542 +
    );
543 +
544 +
    // Verify key count is correct
545 +
    assert_eq!(params.key_count(), 23, "Key count should be 23");
546 +
547 +
    // Test compatibility with existing comparison operations
548 +
    assert_eq!(
549 +
        storage.to_keys_array_23(),
550 +
        test_keys,
551 +
        "Storage should convert back to original array"
552 +
    );
553 +
    assert_eq!(
554 +
        storage, test_keys,
555 +
        "Storage should compare equal to original array"
556 +
    );
557 +
    assert_eq!(
558 +
        test_keys, storage,
559 +
        "Original array should compare equal to storage"
560 +
    );
561 +
}
562 +
563 +
#[test]
564 +
#[allow(clippy::needless_range_loop)] // Intentionally testing indexed access performance
565 +
#[allow(deprecated)]
566 +
fn test_key_access_performance_matches_direct_array_access() {
567 +
    // This test verifies that CrcKeysStorage key access has zero runtime overhead
568 +
    // compared to direct array access. While we can't easily measure exact timing
569 +
    // in a unit test, we can verify that the compiler optimizations work correctly
570 +
    // by testing that the behavior is identical and that large-scale access works efficiently.
571 +
572 +
    // Create test keys with different values to avoid XOR cancellation
573 +
    let test_keys = [
574 +
        0x1111111111111111,
575 +
        0x2222222222222222,
576 +
        0x3333333333333333,
577 +
        0x4444444444444444,
578 +
        0x5555555555555555,
579 +
        0x6666666666666666,
580 +
        0x7777777777777777,
581 +
        0x8888888888888888,
582 +
        0x9999999999999999,
583 +
        0xAAAAAAAAAAAAAAAA,
584 +
        0xBBBBBBBBBBBBBBBB,
585 +
        0xCCCCCCCCCCCCCCCC,
586 +
        0xDDDDDDDDDDDDDDDD,
587 +
        0xEEEEEEEEEEEEEEEE,
588 +
        0xFFFFFFFFFFFFFFFF,
589 +
        0x1010101010101010,
590 +
        0x2020202020202020,
591 +
        0x3030303030303030,
592 +
        0x4040404040404040,
593 +
        0x5050505050505050,
594 +
        0x6060606060606060,
595 +
        0x7070707070707070,
596 +
        0x8080808080808080,
597 +
    ];
598 +
    let storage = CrcKeysStorage::from_keys_fold_256(test_keys);
599 +
600 +
    let params = CrcParams {
601 +
        algorithm: CrcAlgorithm::Crc32Custom,
602 +
        name: "Performance Test",
603 +
        width: 32,
604 +
        poly: 0x1EDC6F41,
605 +
        init: 0xFFFFFFFF,
606 +
        init_algorithm: 0xFFFFFFFF,
607 +
        refin: true,
608 +
        refout: true,
609 +
        xorout: 0xFFFFFFFF,
610 +
        check: 0x12345678,
611 +
        keys: storage,
612 +
    };
613 +
614 +
    // Simulate intensive key access patterns that would reveal performance issues
615 +
    let iterations = 1000;
616 +
    let mut checksum = 0u64;
617 +
618 +
    // Pattern 1: Sequential access (most common in real algorithms)
619 +
    for iteration in 0..iterations {
620 +
        for i in 0..23 {
621 +
            checksum = checksum.wrapping_add(params.get_key(i).wrapping_mul(iteration as u64 + 1));
622 +
        }
623 +
    }
624 +
625 +
    // Pattern 2: Random access pattern
626 +
    let access_pattern = [
627 +
        0, 5, 12, 3, 18, 7, 22, 1, 15, 9, 20, 4, 11, 16, 2, 19, 8, 14, 6, 21, 10, 17, 13,
628 +
    ];
629 +
    for iteration in 0..iterations {
630 +
        for &i in &access_pattern {
631 +
            checksum = checksum.wrapping_add(params.get_key(i).wrapping_mul(iteration as u64 + 2));
632 +
        }
633 +
    }
634 +
635 +
    // Verify that we actually accessed the keys (checksum should be non-zero)
636 +
    assert_ne!(checksum, 0, "Performance test should have accessed keys");
637 +
638 +
    // Test that bounds checking doesn't significantly impact performance
639 +
    let mut bounds_checksum = 0u64;
640 +
    for iteration in 0..iterations {
641 +
        for i in 0..30 {
642 +
            // Include some out-of-bounds accesses
643 +
            bounds_checksum =
644 +
                bounds_checksum.wrapping_add(params.get_key(i).wrapping_mul(iteration as u64 + 3));
645 +
        }
646 +
    }
647 +
648 +
    // The bounds-checked version should still work correctly
649 +
    assert_ne!(
650 +
        bounds_checksum, 0,
651 +
        "Bounds checking performance test should work"
652 +
    );
653 +
}
654 +
655 +
#[test]
656 +
fn test_crc_calculation_performance_before_and_after_changes() {
657 +
    // Test that CRC calculation performance remains identical with the new key storage
658 +
    use crate::{checksum, CrcAlgorithm};
659 +
660 +
    // Test data of various sizes to ensure performance across different scenarios
661 +
    let test_data_small = b"123456789";
662 +
    let test_data_medium = vec![0xAAu8; 1024]; // 1KB
663 +
    let test_data_large = vec![0x55u8; 65536]; // 64KB
664 +
665 +
    // Test multiple CRC algorithms to ensure consistent performance
666 +
    let algorithms = [
667 +
        CrcAlgorithm::Crc32IsoHdlc,
668 +
        CrcAlgorithm::Crc32Iscsi,
669 +
        CrcAlgorithm::Crc64Nvme,
670 +
        CrcAlgorithm::Crc64Ecma182,
671 +
    ];
672 +
673 +
    for algorithm in algorithms {
674 +
        // Small data performance
675 +
        let result_small = checksum(algorithm, test_data_small);
676 +
        assert_ne!(
677 +
            result_small, 0,
678 +
            "Small data CRC should produce non-zero result"
679 +
        );
680 +
681 +
        // Medium data performance
682 +
        let result_medium = checksum(algorithm, &test_data_medium);
683 +
        assert_ne!(
684 +
            result_medium, 0,
685 +
            "Medium data CRC should produce non-zero result"
686 +
        );
687 +
688 +
        // Large data performance (this would reveal significant performance regressions)
689 +
        let result_large = checksum(algorithm, &test_data_large);
690 +
        assert_ne!(
691 +
            result_large, 0,
692 +
            "Large data CRC should produce non-zero result"
693 +
        );
694 +
695 +
        // Verify consistency across multiple runs (performance should be deterministic)
696 +
        let result_small_2 = checksum(algorithm, test_data_small);
697 +
        assert_eq!(
698 +
            result_small, result_small_2,
699 +
            "CRC results should be consistent"
700 +
        );
701 +
    }
702 +
}
703 +
704 +
#[test]
705 +
#[allow(deprecated)]
706 +
fn test_memory_usage_impact_of_enum_based_storage() {
707 +
    // Test that enum-based storage doesn't significantly increase memory usage
708 +
    use std::mem;
709 +
710 +
    // Test memory size of different storage variants
711 +
    let keys_23 = [0u64; 23];
712 +
    let keys_25 = [0u64; 25];
713 +
714 +
    let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23);
715 +
    let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25);
716 +
717 +
    // Verify that enum storage size is reasonable
718 +
    let storage_23_size = mem::size_of_val(&storage_23);
719 +
    let storage_25_size = mem::size_of_val(&storage_25);
720 +
    let _array_23_size = mem::size_of_val(&keys_23);
721 +
    let array_25_size = mem::size_of_val(&keys_25);
722 +
723 +
    // Rust enums use the size of the largest variant plus discriminant/alignment
724 +
    // Both variants will be the same size (size of largest variant)
725 +
    assert_eq!(
726 +
        storage_23_size, storage_25_size,
727 +
        "Both enum variants should have the same size"
728 +
    );
729 +
730 +
    // The enum size should be reasonable (largest variant + small overhead)
731 +
    assert!(
732 +
        storage_23_size >= array_25_size,
733 +
        "Enum should be at least as large as the largest variant"
734 +
    );
735 +
    assert!(
736 +
        storage_23_size <= array_25_size + 16,
737 +
        "Enum should not add excessive overhead beyond largest variant"
738 +
    );
739 +
740 +
    // Test CrcParams memory usage
741 +
    let params_23 = CrcParams {
742 +
        algorithm: CrcAlgorithm::Crc32Custom,
743 +
        name: "Memory Test 23",
744 +
        width: 32,
745 +
        poly: 0x1EDC6F41,
746 +
        init: 0xFFFFFFFF,
747 +
        init_algorithm: 0xFFFFFFFF,
748 +
        refin: true,
749 +
        refout: true,
750 +
        xorout: 0xFFFFFFFF,
751 +
        check: 0x12345678,
752 +
        keys: storage_23,
753 +
    };
754 +
755 +
    let params_25 = CrcParams {
756 +
        algorithm: CrcAlgorithm::Crc64Custom,
757 +
        name: "Memory Test 25",
758 +
        width: 64,
759 +
        poly: 0x42F0E1EBA9EA3693,
760 +
        init: 0xFFFFFFFFFFFFFFFF,
761 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
762 +
        refin: true,
763 +
        refout: true,
764 +
        xorout: 0xFFFFFFFFFFFFFFFF,
765 +
        check: 0x123456789ABCDEF0,
766 +
        keys: storage_25,
767 +
    };
768 +
769 +
    let params_23_size = mem::size_of_val(&params_23);
770 +
    let params_25_size = mem::size_of_val(&params_25);
771 +
772 +
    // CrcParams should have reasonable size differences based on key storage
773 +
    assert!(
774 +
        params_25_size >= params_23_size,
775 +
        "25-key params should be at least as large as 23-key params"
776 +
    );
777 +
    assert!(
778 +
        params_25_size - params_23_size <= 16,
779 +
        "Size difference should be reasonable (just the extra keys)"
780 +
    );
781 +
782 +
    // Verify that the structs are still reasonably sized
783 +
    assert!(
784 +
        params_23_size < 512,
785 +
        "CrcParams should not be excessively large"
786 +
    );
787 +
    assert!(
788 +
        params_25_size < 512,
789 +
        "CrcParams should not be excessively large"
790 +
    );
791 +
}
792 +
793 +
#[test]
794 +
fn test_compiler_optimizations_eliminate_enum_dispatch() {
795 +
    // This test verifies that compiler optimizations work correctly by testing
796 +
    // that enum dispatch doesn't introduce runtime branching in hot paths
797 +
798 +
    // Create different keys to avoid XOR cancellation
799 +
    let keys_23 = [
800 +
        0x1111111111111111,
801 +
        0x2222222222222222,
802 +
        0x3333333333333333,
803 +
        0x4444444444444444,
804 +
        0x5555555555555555,
805 +
        0x6666666666666666,
806 +
        0x7777777777777777,
807 +
        0x8888888888888888,
808 +
        0x9999999999999999,
809 +
        0xAAAAAAAAAAAAAAAA,
810 +
        0xBBBBBBBBBBBBBBBB,
811 +
        0xCCCCCCCCCCCCCCCC,
812 +
        0xDDDDDDDDDDDDDDDD,
813 +
        0xEEEEEEEEEEEEEEEE,
814 +
        0xFFFFFFFFFFFFFFFF,
815 +
        0x1010101010101010,
816 +
        0x2020202020202020,
817 +
        0x3030303030303030,
818 +
        0x4040404040404040,
819 +
        0x5050505050505050,
820 +
        0x6060606060606060,
821 +
        0x7070707070707070,
822 +
        0x8080808080808080,
823 +
    ];
824 +
    let keys_25 = [
825 +
        0x1111111111111111,
826 +
        0x2222222222222222,
827 +
        0x3333333333333333,
828 +
        0x4444444444444444,
829 +
        0x5555555555555555,
830 +
        0x6666666666666666,
831 +
        0x7777777777777777,
832 +
        0x8888888888888888,
833 +
        0x9999999999999999,
834 +
        0xAAAAAAAAAAAAAAAA,
835 +
        0xBBBBBBBBBBBBBBBB,
836 +
        0xCCCCCCCCCCCCCCCC,
837 +
        0xDDDDDDDDDDDDDDDD,
838 +
        0xEEEEEEEEEEEEEEEE,
839 +
        0xFFFFFFFFFFFFFFFF,
840 +
        0x1010101010101010,
841 +
        0x2020202020202020,
842 +
        0x3030303030303030,
843 +
        0x4040404040404040,
844 +
        0x5050505050505050,
845 +
        0x6060606060606060,
846 +
        0x7070707070707070,
847 +
        0x8080808080808080,
848 +
        0x9090909090909090,
849 +
        0xA0A0A0A0A0A0A0A0,
850 +
    ];
851 +
852 +
    let storage_23 = CrcKeysStorage::from_keys_fold_256(keys_23);
853 +
    let storage_25 = CrcKeysStorage::from_keys_fold_future_test(keys_25);
854 +
855 +
    // Test that repeated access to the same storage type is efficient
856 +
    // (compiler should optimize away the enum matching)
857 +
    let mut sum_23 = 0u64;
858 +
    for iteration in 0..100 {
859 +
        for i in 0..23 {
860 +
            sum_23 = sum_23.wrapping_add(storage_23.get_key(i).wrapping_mul(iteration + 1));
861 +
        }
862 +
    }
863 +
864 +
    let mut sum_25 = 0u64;
865 +
    for iteration in 0..100 {
866 +
        for i in 0..25 {
867 +
            sum_25 = sum_25.wrapping_add(storage_25.get_key(i).wrapping_mul(iteration + 1));
868 +
        }
869 +
    }
870 +
871 +
    // Verify that the operations actually happened
872 +
    assert_ne!(
873 +
        sum_23, 0,
874 +
        "23-key operations should produce non-zero result"
875 +
    );
876 +
    assert_ne!(
877 +
        sum_25, 0,
878 +
        "25-key operations should produce non-zero result"
879 +
    );
880 +
881 +
    // Test mixed access patterns (this would reveal optimization issues)
882 +
    let storages = [storage_23, storage_25];
883 +
    let mut mixed_sum = 0u64;
884 +
885 +
    for iteration in 0..100 {
886 +
        for (storage_idx, storage) in storages.iter().enumerate() {
887 +
            let key_count = storage.key_count();
888 +
            for i in 0..key_count {
889 +
                mixed_sum = mixed_sum.wrapping_add(
890 +
                    storage
891 +
                        .get_key(i)
892 +
                        .wrapping_mul((iteration + storage_idx + 1) as u64),
893 +
                );
894 +
            }
895 +
        }
896 +
    }
897 +
898 +
    assert_ne!(mixed_sum, 0, "Mixed access should produce non-zero result");
899 +
}
900 +
#[test]
901 +
#[allow(clippy::needless_range_loop)] // Intentionally testing indexed key access for future variant
902 +
#[allow(deprecated)]
903 +
fn test_create_crc_params_using_keys_future_test_variant() {
904 +
    // Create test CrcParams using KeysFutureTest variant with 25 keys
905 +
    let test_keys_25 = [
906 +
        0x1111111111111111,
907 +
        0x2222222222222222,
908 +
        0x3333333333333333,
909 +
        0x4444444444444444,
910 +
        0x5555555555555555,
911 +
        0x6666666666666666,
912 +
        0x7777777777777777,
913 +
        0x8888888888888888,
914 +
        0x9999999999999999,
915 +
        0xAAAAAAAAAAAAAAAA,
916 +
        0xBBBBBBBBBBBBBBBB,
917 +
        0xCCCCCCCCCCCCCCCC,
918 +
        0xDDDDDDDDDDDDDDDD,
919 +
        0xEEEEEEEEEEEEEEEE,
920 +
        0xFFFFFFFFFFFFFFFF,
921 +
        0x1010101010101010,
922 +
        0x2020202020202020,
923 +
        0x3030303030303030,
924 +
        0x4040404040404040,
925 +
        0x5050505050505050,
926 +
        0x6060606060606060,
927 +
        0x7070707070707070,
928 +
        0x8080808080808080,
929 +
        0x9090909090909090,
930 +
        0xA0A0A0A0A0A0A0A0,
931 +
    ];
932 +
933 +
    let future_params = CrcParams {
934 +
        algorithm: CrcAlgorithm::Crc64Custom,
935 +
        name: "Future Test CRC-64",
936 +
        width: 64,
937 +
        poly: 0x42F0E1EBA9EA3693,
938 +
        init: 0xFFFFFFFFFFFFFFFF,
939 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
940 +
        refin: true,
941 +
        refout: true,
942 +
        xorout: 0xFFFFFFFFFFFFFFFF,
943 +
        check: 0x123456789ABCDEF0,
944 +
        keys: CrcKeysStorage::from_keys_fold_future_test(test_keys_25),
945 +
    };
946 +
947 +
    // Verify that the future params work correctly
948 +
    assert_eq!(
949 +
        future_params.key_count(),
950 +
        25,
951 +
        "Future params should have 25 keys"
952 +
    );
953 +
954 +
    // Test access to all 25 keys
955 +
    for i in 0..25 {
956 +
        assert_eq!(
957 +
            future_params.get_key(i),
958 +
            test_keys_25[i],
959 +
            "Key {} should match expected value",
960 +
            i
961 +
        );
962 +
        assert_eq!(
963 +
            future_params.get_key_checked(i),
964 +
            Some(test_keys_25[i]),
965 +
            "Checked key {} should return Some(value)",
966 +
            i
967 +
        );
968 +
    }
969 +
970 +
    // Test out-of-bounds access
971 +
    assert_eq!(
972 +
        future_params.get_key(25),
973 +
        0,
974 +
        "Key 25 should return 0 (out of bounds)"
975 +
    );
976 +
    assert_eq!(
977 +
        future_params.get_key_checked(25),
978 +
        None,
979 +
        "Checked key 25 should return None"
980 +
    );
981 +
    assert_eq!(
982 +
        future_params.get_key(30),
983 +
        0,
984 +
        "Key 30 should return 0 (out of bounds)"
985 +
    );
986 +
    assert_eq!(
987 +
        future_params.get_key_checked(30),
988 +
        None,
989 +
        "Checked key 30 should return None"
990 +
    );
991 +
}
992 +
993 +
#[test]
994 +
#[allow(deprecated)]
995 +
fn test_code_gracefully_handles_different_key_array_sizes() {
996 +
    // Test that the same code can handle both 23-key and 25-key variants gracefully
997 +
998 +
    let keys_23 = [0x1234567890ABCDEFu64; 23];
999 +
    let keys_25 = [0xFEDCBA0987654321u64; 25];
1000 +
1001 +
    let params_23 = CrcParams {
1002 +
        algorithm: CrcAlgorithm::Crc32Custom,
1003 +
        name: "23-Key Test",
1004 +
        width: 32,
1005 +
        poly: 0x1EDC6F41,
1006 +
        init: 0xFFFFFFFF,
1007 +
        init_algorithm: 0xFFFFFFFF,
1008 +
        refin: true,
1009 +
        refout: true,
1010 +
        xorout: 0xFFFFFFFF,
1011 +
        check: 0x12345678,
1012 +
        keys: CrcKeysStorage::from_keys_fold_256(keys_23),
1013 +
    };
1014 +
1015 +
    let params_25 = CrcParams {
1016 +
        algorithm: CrcAlgorithm::Crc64Custom,
1017 +
        name: "25-Key Test",
1018 +
        width: 64,
1019 +
        poly: 0x42F0E1EBA9EA3693,
1020 +
        init: 0xFFFFFFFFFFFFFFFF,
1021 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
1022 +
        refin: true,
1023 +
        refout: true,
1024 +
        xorout: 0xFFFFFFFFFFFFFFFF,
1025 +
        check: 0x123456789ABCDEF0,
1026 +
        keys: CrcKeysStorage::from_keys_fold_future_test(keys_25),
1027 +
    };
1028 +
1029 +
    // Generic function that works with any CrcParams regardless of key count
1030 +
    fn process_crc_params(params: CrcParams) -> (usize, u64, u64) {
1031 +
        let key_count = params.key_count();
1032 +
        let first_key = params.get_key(0);
1033 +
        let last_valid_key = if key_count > 0 {
1034 +
            params.get_key(key_count - 1)
1035 +
        } else {
1036 +
            0
1037 +
        };
1038 +
        (key_count, first_key, last_valid_key)
1039 +
    }
1040 +
1041 +
    // Test that the same function works with both variants
1042 +
    let (count_23, first_23, last_23) = process_crc_params(params_23);
1043 +
    let (count_25, first_25, last_25) = process_crc_params(params_25);
1044 +
1045 +
    assert_eq!(count_23, 23, "23-key params should report 23 keys");
1046 +
    assert_eq!(count_25, 25, "25-key params should report 25 keys");
1047 +
1048 +
    assert_eq!(
1049 +
        first_23, 0x1234567890ABCDEF,
1050 +
        "23-key first key should match"
1051 +
    );
1052 +
    assert_eq!(
1053 +
        first_25, 0xFEDCBA0987654321,
1054 +
        "25-key first key should match"
1055 +
    );
1056 +
1057 +
    assert_eq!(last_23, 0x1234567890ABCDEF, "23-key last key should match");
1058 +
    assert_eq!(last_25, 0xFEDCBA0987654321, "25-key last key should match");
1059 +
1060 +
    // Test that bounds checking works consistently across variants
1061 +
    assert_eq!(
1062 +
        params_23.get_key(23),
1063 +
        0,
1064 +
        "23-key params should return 0 for index 23"
1065 +
    );
1066 +
    assert_eq!(
1067 +
        params_23.get_key(25),
1068 +
        0,
1069 +
        "23-key params should return 0 for index 25"
1070 +
    );
1071 +
1072 +
    assert_eq!(
1073 +
        params_25.get_key(25),
1074 +
        0,
1075 +
        "25-key params should return 0 for index 25"
1076 +
    );
1077 +
    assert_eq!(
1078 +
        params_25.get_key(30),
1079 +
        0,
1080 +
        "25-key params should return 0 for index 30"
1081 +
    );
1082 +
}
1083 +
1084 +
#[test]
1085 +
#[allow(deprecated)]
1086 +
fn test_expansion_to_larger_key_arrays_works_as_designed() {
1087 +
    // Test that the design supports expansion to larger key arrays
1088 +
1089 +
    // Simulate a migration scenario where we add more keys
1090 +
    let original_keys = [0x1111111111111111u64; 23];
1091 +
    let expanded_keys = [
1092 +
        // Original 23 keys
1093 +
        0x1111111111111111,
1094 +
        0x1111111111111111,
1095 +
        0x1111111111111111,
1096 +
        0x1111111111111111,
1097 +
        0x1111111111111111,
1098 +
        0x1111111111111111,
1099 +
        0x1111111111111111,
1100 +
        0x1111111111111111,
1101 +
        0x1111111111111111,
1102 +
        0x1111111111111111,
1103 +
        0x1111111111111111,
1104 +
        0x1111111111111111,
1105 +
        0x1111111111111111,
1106 +
        0x1111111111111111,
1107 +
        0x1111111111111111,
1108 +
        0x1111111111111111,
1109 +
        0x1111111111111111,
1110 +
        0x1111111111111111,
1111 +
        0x1111111111111111,
1112 +
        0x1111111111111111,
1113 +
        0x1111111111111111,
1114 +
        0x1111111111111111,
1115 +
        0x1111111111111111,
1116 +
        // Additional 2 keys for future expansion
1117 +
        0x2222222222222222,
1118 +
        0x3333333333333333,
1119 +
    ];
1120 +
1121 +
    let original_params = CrcParams {
1122 +
        algorithm: CrcAlgorithm::Crc32Custom,
1123 +
        name: "Original CRC",
1124 +
        width: 32,
1125 +
        poly: 0x1EDC6F41,
1126 +
        init: 0xFFFFFFFF,
1127 +
        init_algorithm: 0xFFFFFFFF,
1128 +
        refin: true,
1129 +
        refout: true,
1130 +
        xorout: 0xFFFFFFFF,
1131 +
        check: 0x12345678,
1132 +
        keys: CrcKeysStorage::from_keys_fold_256(original_keys),
1133 +
    };
1134 +
1135 +
    let expanded_params = CrcParams {
1136 +
        algorithm: CrcAlgorithm::Crc64Custom,
1137 +
        name: "Expanded CRC",
1138 +
        width: 64,
1139 +
        poly: 0x42F0E1EBA9EA3693,
1140 +
        init: 0xFFFFFFFFFFFFFFFF,
1141 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
1142 +
        refin: true,
1143 +
        refout: true,
1144 +
        xorout: 0xFFFFFFFFFFFFFFFF,
1145 +
        check: 0x123456789ABCDEF0,
1146 +
        keys: CrcKeysStorage::from_keys_fold_future_test(expanded_keys),
1147 +
    };
1148 +
1149 +
    // Test that existing key access patterns continue to work
1150 +
    for i in 0..23 {
1151 +
        assert_eq!(
1152 +
            original_params.get_key(i),
1153 +
            0x1111111111111111,
1154 +
            "Original key {} should match",
1155 +
            i
1156 +
        );
1157 +
        assert_eq!(
1158 +
            expanded_params.get_key(i),
1159 +
            0x1111111111111111,
1160 +
            "Expanded key {} should match original",
1161 +
            i
1162 +
        );
1163 +
    }
1164 +
1165 +
    // Test that new keys are accessible in expanded version
1166 +
    assert_eq!(
1167 +
        expanded_params.get_key(23),
1168 +
        0x2222222222222222,
1169 +
        "New key 23 should be accessible"
1170 +
    );
1171 +
    assert_eq!(
1172 +
        expanded_params.get_key(24),
1173 +
        0x3333333333333333,
1174 +
        "New key 24 should be accessible"
1175 +
    );
1176 +
1177 +
    // Test that original version handles new indices gracefully
1178 +
    assert_eq!(
1179 +
        original_params.get_key(23),
1180 +
        0,
1181 +
        "Original should return 0 for new key indices"
1182 +
    );
1183 +
    assert_eq!(
1184 +
        original_params.get_key(24),
1185 +
        0,
1186 +
        "Original should return 0 for new key indices"
1187 +
    );
1188 +
1189 +
    // Test that both versions handle out-of-bounds access consistently
1190 +
    assert_eq!(
1191 +
        original_params.get_key(30),
1192 +
        0,
1193 +
        "Original should return 0 for out-of-bounds"
1194 +
    );
1195 +
    assert_eq!(
1196 +
        expanded_params.get_key(30),
1197 +
        0,
1198 +
        "Expanded should return 0 for out-of-bounds"
1199 +
    );
1200 +
1201 +
    // Test key count differences
1202 +
    assert_eq!(
1203 +
        original_params.key_count(),
1204 +
        23,
1205 +
        "Original should have 23 keys"
1206 +
    );
1207 +
    assert_eq!(
1208 +
        expanded_params.key_count(),
1209 +
        25,
1210 +
        "Expanded should have 25 keys"
1211 +
    );
1212 +
1213 +
    // Test that checked access works correctly for both
1214 +
    assert_eq!(
1215 +
        original_params.get_key_checked(22),
1216 +
        Some(0x1111111111111111),
1217 +
        "Original last key should be accessible"
1218 +
    );
1219 +
    assert_eq!(
1220 +
        original_params.get_key_checked(23),
1221 +
        None,
1222 +
        "Original should return None for index 23"
1223 +
    );
1224 +
1225 +
    assert_eq!(
1226 +
        expanded_params.get_key_checked(22),
1227 +
        Some(0x1111111111111111),
1228 +
        "Expanded key 22 should be accessible"
1229 +
    );
1230 +
    assert_eq!(
1231 +
        expanded_params.get_key_checked(24),
1232 +
        Some(0x3333333333333333),
1233 +
        "Expanded last key should be accessible"
1234 +
    );
1235 +
    assert_eq!(
1236 +
        expanded_params.get_key_checked(25),
1237 +
        None,
1238 +
        "Expanded should return None for index 25"
1239 +
    );
1240 +
}
1241 +
1242 +
#[test]
1243 +
#[allow(deprecated)]
1244 +
fn test_future_expansion_backwards_compatibility() {
1245 +
    // Test that future expansion maintains backwards compatibility
1246 +
1247 +
    // This test simulates a scenario where:
1248 +
    // 1. Third-party code is written against 23-key CrcParams
1249 +
    // 2. Library is expanded to support 25-key CrcParams
1250 +
    // 3. Third-party code continues to work without modification
1251 +
1252 +
    // Mock third-party function that expects to work with any CrcParams
1253 +
    fn third_party_key_processor(params: CrcParams) -> Vec<u64> {
1254 +
        let mut result = Vec::new();
1255 +
1256 +
        // Third-party code might access keys in various patterns
1257 +
        // Pattern 1: Access first few keys
1258 +
        for i in 0..5 {
1259 +
            result.push(params.get_key(i));
1260 +
        }
1261 +
1262 +
        // Pattern 2: Access some middle keys
1263 +
        for i in 10..15 {
1264 +
            result.push(params.get_key(i));
1265 +
        }
1266 +
1267 +
        // Pattern 3: Access keys near the end (but within original 23-key range)
1268 +
        for i in 20..23 {
1269 +
            result.push(params.get_key(i));
1270 +
        }
1271 +
1272 +
        // Pattern 4: Attempt to access beyond both ranges (should return 0 for both)
1273 +
        result.push(params.get_key(30));
1274 +
        result.push(params.get_key(31));
1275 +
1276 +
        result
1277 +
    }
1278 +
1279 +
    // Test with original 23-key params
1280 +
    let keys_23 = [0xABCDEF0123456789u64; 23];
1281 +
    let params_23 = CrcParams {
1282 +
        algorithm: CrcAlgorithm::Crc32Custom,
1283 +
        name: "Backwards Compat Test 23",
1284 +
        width: 32,
1285 +
        poly: 0x1EDC6F41,
1286 +
        init: 0xFFFFFFFF,
1287 +
        init_algorithm: 0xFFFFFFFF,
1288 +
        refin: true,
1289 +
        refout: true,
1290 +
        xorout: 0xFFFFFFFF,
1291 +
        check: 0x12345678,
1292 +
        keys: CrcKeysStorage::from_keys_fold_256(keys_23),
1293 +
    };
1294 +
1295 +
    // Test with expanded 25-key params
1296 +
    let keys_25 = [0xABCDEF0123456789u64; 25];
1297 +
    let params_25 = CrcParams {
1298 +
        algorithm: CrcAlgorithm::Crc64Custom,
1299 +
        name: "Backwards Compat Test 25",
1300 +
        width: 64,
1301 +
        poly: 0x42F0E1EBA9EA3693,
1302 +
        init: 0xFFFFFFFFFFFFFFFF,
1303 +
        init_algorithm: 0xFFFFFFFFFFFFFFFF,
1304 +
        refin: true,
1305 +
        refout: true,
1306 +
        xorout: 0xFFFFFFFFFFFFFFFF,
1307 +
        check: 0x123456789ABCDEF0,
1308 +
        keys: CrcKeysStorage::from_keys_fold_future_test(keys_25),
1309 +
    };
1310 +
1311 +
    // Run third-party function with both variants
1312 +
    let result_23 = third_party_key_processor(params_23);
1313 +
    let result_25 = third_party_key_processor(params_25);
1314 +
1315 +
    // Results should be identical for the overlapping key ranges
1316 +
    assert_eq!(
1317 +
        result_23.len(),
1318 +
        result_25.len(),
1319 +
        "Results should have same length"
1320 +
    );
1321 +
1322 +
    // First 13 values should be identical (keys 0-4, 10-14, 20-22)
1323 +
    for i in 0..13 {
1324 +
        assert_eq!(
1325 +
            result_23[i], result_25[i],
1326 +
            "Result {} should be identical",
1327 +
            i
1328 +
        );
1329 +
        assert_eq!(
1330 +
            result_23[i], 0xABCDEF0123456789,
1331 +
            "Result {} should match key value",
1332 +
            i
1333 +
        );
1334 +
    }
1335 +
1336 +
    // Last 2 values should be 0 for both (out-of-bounds access to indices 30, 31)
1337 +
    assert_eq!(
1338 +
        result_23[13], 0,
1339 +
        "Out-of-bounds access should return 0 for 23-key"
1340 +
    );
1341 +
    assert_eq!(
1342 +
        result_23[14], 0,
1343 +
        "Out-of-bounds access should return 0 for 23-key"
1344 +
    );
1345 +
    assert_eq!(
1346 +
        result_25[13], 0,
1347 +
        "Out-of-bounds access should return 0 for 25-key"
1348 +
    );
1349 +
    assert_eq!(
1350 +
        result_25[14], 0,
1351 +
        "Out-of-bounds access should return 0 for 25-key"
1352 +
    );
1353 +
1354 +
    // This demonstrates that third-party code works identically with both variants
1355 +
    assert_eq!(
1356 +
        result_23, result_25,
1357 +
        "Third-party function should produce identical results"
1358 +
    );
1359 +
}
1360 +
// FFI Tests for future-proof CrcFastParams functionality
1361 +
1362 +
#[cfg(all(
1363 +
    feature = "ffi",
1364 +
    any(target_arch = "aarch64", target_arch = "x86_64", target_arch = "x86")
1365 +
))]
1366 +
mod ffi_tests {
1367 +
    use crate::ffi::CrcFastParams;
1368 +
    use crate::{CrcAlgorithm, CrcKeysStorage, CrcParams};
1369 +
1370 +
    #[test]
1371 +
    #[allow(deprecated)]
1372 +
    fn test_ffi_conversion_23_keys() {
1373 +
        // Test conversion between CrcParams and CrcFastParams for 23-key variant
1374 +
        let keys_23 = [0x1234567890ABCDEFu64; 23];
1375 +
        let original_params = CrcParams {
1376 +
            algorithm: CrcAlgorithm::Crc32Custom,
1377 +
            name: "FFI Test 23",
1378 +
            width: 32,
1379 +
            poly: 0x1EDC6F41,
1380 +
            init: 0xFFFFFFFF,
1381 +
            init_algorithm: 0xFFFFFFFF,
1382 +
            refin: true,
1383 +
            refout: true,
1384 +
            xorout: 0xFFFFFFFF,
1385 +
            check: 0x12345678,
1386 +
            keys: CrcKeysStorage::from_keys_fold_256(keys_23),
1387 +
        };
1388 +
1389 +
        // Convert to FFI struct
1390 +
        let ffi_params: CrcFastParams = original_params.into();
1391 +
1392 +
        // Verify FFI struct fields
1393 +
        assert_eq!(ffi_params.key_count, 23, "FFI params should have 23 keys");
1394 +
        assert!(
1395 +
            !ffi_params.keys.is_null(),
1396 +
            "Keys pointer should not be null"
1397 +
        );
1398 +
        assert_eq!(ffi_params.width, 32, "Width should match");
1399 +
        assert_eq!(ffi_params.poly, 0x1EDC6F41, "Poly should match");
1400 +
        assert_eq!(ffi_params.init, 0xFFFFFFFF, "Init should match");
1401 +
        assert!(ffi_params.refin, "Refin should match");
1402 +
        assert!(ffi_params.refout, "Refout should match");
1403 +
        assert_eq!(ffi_params.xorout, 0xFFFFFFFF, "Xorout should match");
1404 +
        assert_eq!(ffi_params.check, 0x12345678, "Check should match");
1405 +
1406 +
        // Test direct pointer access to keys
1407 +
        unsafe {
1408 +
            for i in 0..23 {
1409 +
                let key_value = *ffi_params.keys.add(i);
1410 +
                assert_eq!(
1411 +
                    key_value, 0x1234567890ABCDEF,
1412 +
                    "Key {} should match expected value",
1413 +
                    i
1414 +
                );
1415 +
            }
1416 +
        }
1417 +
1418 +
        // Convert back to CrcParams
1419 +
        let converted_params: CrcParams = ffi_params.into();
1420 +
1421 +
        // Verify round-trip conversion
1422 +
        assert_eq!(converted_params.algorithm, original_params.algorithm);
1423 +
        assert_eq!(converted_params.width, original_params.width);
1424 +
        assert_eq!(converted_params.poly, original_params.poly);
1425 +
        assert_eq!(converted_params.init, original_params.init);
1426 +
        assert_eq!(converted_params.refin, original_params.refin);
1427 +
        assert_eq!(converted_params.refout, original_params.refout);
1428 +
        assert_eq!(converted_params.xorout, original_params.xorout);
1429 +
        assert_eq!(converted_params.check, original_params.check);
1430 +
        assert_eq!(converted_params.key_count(), 23);
1431 +
1432 +
        // Verify all keys match
1433 +
        for i in 0..23 {
1434 +
            assert_eq!(
1435 +
                converted_params.get_key(i),
1436 +
                original_params.get_key(i),
1437 +
                "Converted key {} should match original",
1438 +
                i
1439 +
            );
1440 +
        }
1441 +
    }
1442 +
1443 +
    #[test]
1444 +
    #[allow(deprecated)]
1445 +
    fn test_ffi_conversion_25_keys() {
1446 +
        // Test conversion between CrcParams and CrcFastParams for 25-key variant
1447 +
        let keys_25 = [0xFEDCBA0987654321u64; 25];
1448 +
        let original_params = CrcParams {
1449 +
            algorithm: CrcAlgorithm::Crc64Custom,
1450 +
            name: "FFI Test 25",
1451 +
            width: 64,
1452 +
            poly: 0x42F0E1EBA9EA3693,
1453 +
            init: 0xFFFFFFFFFFFFFFFF,
1454 +
            init_algorithm: 0xFFFFFFFFFFFFFFFF,
1455 +
            refin: true,
1456 +
            refout: true,
1457 +
            xorout: 0xFFFFFFFFFFFFFFFF,
1458 +
            check: 0x123456789ABCDEF0,
1459 +
            keys: CrcKeysStorage::from_keys_fold_future_test(keys_25),
1460 +
        };
1461 +
1462 +
        // Convert to FFI struct
1463 +
        let ffi_params: CrcFastParams = original_params.into();
1464 +
1465 +
        // Verify FFI struct fields
1466 +
        assert_eq!(ffi_params.key_count, 25, "FFI params should have 25 keys");
1467 +
        assert!(
1468 +
            !ffi_params.keys.is_null(),
1469 +
            "Keys pointer should not be null"
1470 +
        );
1471 +
        assert_eq!(ffi_params.width, 64, "Width should match");
1472 +
        assert_eq!(ffi_params.poly, 0x42F0E1EBA9EA3693, "Poly should match");
1473 +
1474 +
        // Test direct pointer access to keys
1475 +
        unsafe {
1476 +
            for i in 0..25 {
1477 +
                let key_value = *ffi_params.keys.add(i);
1478 +
                assert_eq!(
1479 +
                    key_value, 0xFEDCBA0987654321,
1480 +
                    "Key {} should match expected value",
1481 +
                    i
1482 +
                );
1483 +
            }
1484 +
        }
1485 +
1486 +
        // Convert back to CrcParams
1487 +
        let converted_params: CrcParams = ffi_params.into();
1488 +
1489 +
        // Verify round-trip conversion
1490 +
        assert_eq!(converted_params.key_count(), 25);
1491 +
        for i in 0..25 {
1492 +
            assert_eq!(
1493 +
                converted_params.get_key(i),
1494 +
                original_params.get_key(i),
1495 +
                "Converted key {} should match original",
1496 +
                i
1497 +
            );
1498 +
        }
1499 +
    }
1500 +
1501 +
    #[test]
1502 +
    #[allow(deprecated)]
1503 +
    fn test_ffi_pointer_stability() {
1504 +
        // Test that key pointers remain stable across multiple conversions
1505 +
        let keys_23 = [0x1111111111111111u64; 23];
1506 +
        let params = CrcParams {
1507 +
            algorithm: CrcAlgorithm::Crc32Custom,
1508 +
            name: "Stability Test",
1509 +
            width: 32,
1510 +
            poly: 0x1EDC6F41,
1511 +
            init: 0xFFFFFFFF,
1512 +
            init_algorithm: 0xFFFFFFFF,
1513 +
            refin: true,
1514 +
            refout: true,
1515 +
            xorout: 0xFFFFFFFF,
1516 +
            check: 0x12345678,
1517 +
            keys: CrcKeysStorage::from_keys_fold_256(keys_23),
1518 +
        };
1519 +
1520 +
        // Convert to FFI multiple times
1521 +
        let ffi_params1: CrcFastParams = params.into();
1522 +
        let ffi_params2: CrcFastParams = params.into();
1523 +
1524 +
        // Pointers should be stable (same keys should get same pointer)
1525 +
        assert_eq!(
1526 +
            ffi_params1.keys, ffi_params2.keys,
1527 +
            "Identical key sets should get same stable pointer"
1528 +
        );
1529 +
        assert_eq!(
1530 +
            ffi_params1.key_count, ffi_params2.key_count,
1531 +
            "Key counts should match"
1532 +
        );
1533 +
1534 +
        // Test that different key sets get different pointers
1535 +
        let different_keys = [0x2222222222222222u64; 23];
1536 +
        let different_params = CrcParams {
1537 +
            algorithm: CrcAlgorithm::Crc32Custom,
1538 +
            name: "Different Test",
1539 +
            width: 32,
1540 +
            poly: 0x1EDC6F41,
1541 +
            init: 0xFFFFFFFF,
1542 +
            init_algorithm: 0xFFFFFFFF,
1543 +
            refin: true,
1544 +
            refout: true,
1545 +
            xorout: 0xFFFFFFFF,
1546 +
            check: 0x12345678,
1547 +
            keys: CrcKeysStorage::from_keys_fold_256(different_keys),
1548 +
        };
1549 +
1550 +
        let ffi_params3: CrcFastParams = different_params.into();
1551 +
        assert_ne!(
1552 +
            ffi_params1.keys, ffi_params3.keys,
1553 +
            "Different key sets should get different pointers"
1554 +
        );
1555 +
    }
1556 +
1557 +
    #[test]
1558 +
    #[allow(deprecated)]
1559 +
    fn test_ffi_memory_safety() {
1560 +
        // Test that FFI conversions are memory safe
1561 +
        let keys_23 = [0xAAAAAAAAAAAAAAAAu64; 23];
1562 +
        let params = CrcParams {
1563 +
            algorithm: CrcAlgorithm::Crc32Custom,
1564 +
            name: "Memory Safety Test",
1565 +
            width: 32,
1566 +
            poly: 0x1EDC6F41,
1567 +
            init: 0xFFFFFFFF,
1568 +
            init_algorithm: 0xFFFFFFFF,
1569 +
            refin: true,
1570 +
            refout: true,
1571 +
            xorout: 0xFFFFFFFF,
1572 +
            check: 0x12345678,
1573 +
            keys: CrcKeysStorage::from_keys_fold_256(keys_23),
1574 +
        };
1575 +
1576 +
        let ffi_params: CrcFastParams = params.into();
1577 +
1578 +
        // Test that we can safely access all keys through the pointer
1579 +
        unsafe {
1580 +
            let keys_slice =
1581 +
                std::slice::from_raw_parts(ffi_params.keys, ffi_params.key_count as usize);
1582 +
1583 +
            // Verify all keys are accessible and correct
1584 +
            for (i, &key) in keys_slice.iter().enumerate() {
1585 +
                assert_eq!(
1586 +
                    key, 0xAAAAAAAAAAAAAAAA,
1587 +
                    "Key {} should be accessible and correct",
1588 +
                    i
1589 +
                );
1590 +
            }
1591 +
1592 +
            // Test that we can create multiple slices from the same pointer
1593 +
            let keys_slice2 =
1594 +
                std::slice::from_raw_parts(ffi_params.keys, ffi_params.key_count as usize);
1595 +
            assert_eq!(
1596 +
                keys_slice, keys_slice2,
1597 +
                "Multiple slices should be identical"
1598 +
            );
1599 +
        }
1600 +
1601 +
        // Test conversion back to CrcParams
1602 +
        let converted: CrcParams = ffi_params.into();
1603 +
        assert_eq!(converted.key_count(), 23);
1604 +
1605 +
        for i in 0..23 {
1606 +
            assert_eq!(
1607 +
                converted.get_key(i),
1608 +
                0xAAAAAAAAAAAAAAAA,
1609 +
                "Converted key {} should match",
1610 +
                i
1611 +
            );
1612 +
        }
1613 +
    }
1614 +
1615 +
    #[test]
1616 +
    #[allow(deprecated)]
1617 +
    fn test_ffi_different_key_counts() {
1618 +
        // Test FFI with different key count scenarios
1619 +
1620 +
        // Test 23-key variant
1621 +
        let keys_23 = [0x1111111111111111u64; 23];
1622 +
        let params_23 = CrcParams {
1623 +
            algorithm: CrcAlgorithm::Crc32Custom,
1624 +
            name: "23-Key FFI Test",
1625 +
            width: 32,
1626 +
            poly: 0x1EDC6F41,
1627 +
            init: 0xFFFFFFFF,
1628 +
            init_algorithm: 0xFFFFFFFF,
1629 +
            refin: true,
1630 +
            refout: true,
1631 +
            xorout: 0xFFFFFFFF,
1632 +
            check: 0x12345678,
1633 +
            keys: CrcKeysStorage::from_keys_fold_256(keys_23),
1634 +
        };
1635 +
1636 +
        // Test 25-key variant
1637 +
        let keys_25 = [0x2222222222222222u64; 25];
1638 +
        let params_25 = CrcParams {
1639 +
            algorithm: CrcAlgorithm::Crc64Custom,
1640 +
            name: "25-Key FFI Test",
1641 +
            width: 64,
1642 +
            poly: 0x42F0E1EBA9EA3693,
1643 +
            init: 0xFFFFFFFFFFFFFFFF,
1644 +
            init_algorithm: 0xFFFFFFFFFFFFFFFF,
1645 +
            refin: true,
1646 +
            refout: true,
1647 +
            xorout: 0xFFFFFFFFFFFFFFFF,
1648 +
            check: 0x123456789ABCDEF0,
1649 +
            keys: CrcKeysStorage::from_keys_fold_future_test(keys_25),
1650 +
        };
1651 +
1652 +
        // Convert both to FFI
1653 +
        let ffi_23: CrcFastParams = params_23.into();
1654 +
        let ffi_25: CrcFastParams = params_25.into();
1655 +
1656 +
        // Verify key counts
1657 +
        assert_eq!(ffi_23.key_count, 23);
1658 +
        assert_eq!(ffi_25.key_count, 25);
1659 +
1660 +
        // Test C-style access patterns
1661 +
        unsafe {
1662 +
            // Access all keys in 23-key variant
1663 +
            for i in 0..23 {
1664 +
                let key = *ffi_23.keys.add(i);
1665 +
                assert_eq!(
1666 +
                    key, 0x1111111111111111,
1667 +
                    "23-key variant key {} should match",
1668 +
                    i
1669 +
                );
1670 +
            }
1671 +
1672 +
            // Access all keys in 25-key variant
1673 +
            for i in 0..25 {
1674 +
                let key = *ffi_25.keys.add(i);
1675 +
                assert_eq!(
1676 +
                    key, 0x2222222222222222,
1677 +
                    "25-key variant key {} should match",
1678 +
                    i
1679 +
                );
1680 +
            }
1681 +
1682 +
            // Test bounds-aware C code pattern
1683 +
            for ffi_params in [&ffi_23, &ffi_25] {
1684 +
                for i in 0..ffi_params.key_count {
1685 +
                    let key = *ffi_params.keys.add(i as usize);
1686 +
                    assert_ne!(key, 0, "Key {} should not be zero", i);
1687 +
                }
1688 +
            }
1689 +
        }
1690 +
1691 +
        // Test round-trip conversions
1692 +
        let converted_23: CrcParams = ffi_23.into();
1693 +
        let converted_25: CrcParams = ffi_25.into();
1694 +
1695 +
        assert_eq!(converted_23.key_count(), 23);
1696 +
        assert_eq!(converted_25.key_count(), 25);
1697 +
1698 +
        // Verify all keys survived round-trip
1699 +
        for i in 0..23 {
1700 +
            assert_eq!(converted_23.get_key(i), 0x1111111111111111);
1701 +
        }
1702 +
        for i in 0..25 {
1703 +
            assert_eq!(converted_25.get_key(i), 0x2222222222222222);
1704 +
        }
1705 +
    }
1706 +
1707 +
    #[test]
1708 +
    fn test_ffi_get_custom_params_function() {
1709 +
        // Test the crc_fast_get_custom_params FFI function
1710 +
        use std::ffi::CString;
1711 +
1712 +
        let name = CString::new("Test CRC").unwrap();
1713 +
        let ffi_params = crate::ffi::crc_fast_get_custom_params(
1714 +
            name.as_ptr(),
1715 +
            32,
1716 +
            0x1EDC6F41,
1717 +
            0xFFFFFFFF,
1718 +
            true,
1719 +
            0xFFFFFFFF,
1720 +
            0x12345678,
1721 +
        );
1722 +
1723 +
        // Verify the returned FFI params
1724 +
        assert_eq!(ffi_params.width, 32);
1725 +
        assert_eq!(ffi_params.poly, 0x1EDC6F41);
1726 +
        assert_eq!(ffi_params.init, 0xFFFFFFFF);
1727 +
        assert!(ffi_params.refin);
1728 +
        assert!(ffi_params.refout);
1729 +
        assert_eq!(ffi_params.xorout, 0xFFFFFFFF);
1730 +
        assert_eq!(ffi_params.check, 0x12345678);
1731 +
        assert!(
1732 +
            !ffi_params.keys.is_null(),
1733 +
            "Keys pointer should not be null"
1734 +
        );
1735 +
        assert!(ffi_params.key_count > 0, "Should have keys");
1736 +
1737 +
        // Test that we can access the keys
1738 +
        unsafe {
1739 +
            for i in 0..ffi_params.key_count {
1740 +
                let _key = *ffi_params.keys.add(i as usize);
1741 +
                // Keys should be accessible without crashing
1742 +
            }
1743 +
        }
1744 +
1745 +
        // Test conversion to CrcParams
1746 +
        let params: CrcParams = ffi_params.into();
1747 +
        assert_eq!(params.width, 32);
1748 +
        assert_eq!(params.poly, 0x1EDC6F41);
1749 +
        assert_eq!(params.init, 0xFFFFFFFF);
1750 +
        assert!(params.refin);
1751 +
        assert!(params.refout);
1752 +
        assert_eq!(params.xorout, 0xFFFFFFFF);
1753 +
        assert_eq!(params.check, 0x12345678);
1754 +
        assert!(params.key_count() > 0);
1755 +
    }
1756 +
}
added vendor/crc-fast/src/test/mod.rs +52 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
//! This module provides tests and utilities for the CRC library.
4 +
5 +
#![cfg(test)]
6 +
#![allow(dead_code)]
7 +
8 +
pub(crate) mod consts;
9 +
pub(crate) mod enums;
10 +
mod future_proof_tests;
11 +
mod structs;
12 +
13 +
use proptest::test_runner::Config as ProptestConfig;
14 +
15 +
/// Returns a proptest config that works under Miri by disabling file-based failure persistence.
16 +
/// Miri runs with isolation enabled by default, which blocks getcwd() calls that proptest
17 +
/// uses for its failure persistence feature.
18 +
pub(crate) fn miri_compatible_proptest_config() -> ProptestConfig {
19 +
    let mut config = ProptestConfig::with_cases(100);
20 +
21 +
    if cfg!(miri) {
22 +
        // don't let Miri spend too much time on these
23 +
        config.cases = 1;
24 +
25 +
        // disable file-based failure persistence to avoid getcwd() calls
26 +
        config.failure_persistence = None;
27 +
28 +
        return config;
29 +
    }
30 +
31 +
    config
32 +
}
33 +
34 +
/// Creates a new aligned data vector from the input slice for testing.
35 +
pub(crate) fn create_aligned_data(input: &[u8]) -> Vec<u8> {
36 +
    // Size of our target alignment structure
37 +
    let align_size = std::mem::size_of::<[[u64; 4]; 2]>(); // 64 bytes
38 +
39 +
    // Create a zero-filled vector with padding to ensure we can find a properly aligned position
40 +
    let mut padded = vec![0; input.len() + align_size];
41 +
42 +
    // Find the first address that satisfies our alignment
43 +
    let start_addr = padded.as_ptr() as usize;
44 +
    let align_offset = (align_size - (start_addr % align_size)) % align_size;
45 +
46 +
    // Copy the input into the aligned position
47 +
    let aligned_start = &mut padded[align_offset..];
48 +
    aligned_start[..input.len()].copy_from_slice(input);
49 +
50 +
    // Return the exact slice we need
51 +
    aligned_start[..input.len()].to_vec()
52 +
}
added vendor/crc-fast/src/test/structs.rs +18 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![cfg(test)]
4 +
#![allow(dead_code)]
5 +
6 +
use crate::CrcParams;
7 +
use crc::{Crc, Table};
8 +
9 +
pub struct CrcTestConfig<T: crc::Width, I: crc::Implementation + 'static> {
10 +
    pub params: CrcParams,
11 +
    pub reference_impl: &'static Crc<T, I>,
12 +
}
13 +
14 +
pub type Crc16TestConfig = CrcTestConfig<u16, Table<16>>;
15 +
16 +
pub type Crc32TestConfig = CrcTestConfig<u32, Table<16>>;
17 +
18 +
pub type Crc64TestConfig = CrcTestConfig<u64, Table<16>>;
added vendor/crc-fast/src/traits.rs +305 −0
1 +
// Copyright 2025 Don MacAskill. Licensed under MIT or Apache-2.0.
2 +
3 +
#![allow(dead_code)]
4 +
5 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
6 +
use crate::enums::Reflector;
7 +
8 +
use crate::CrcParams;
9 +
10 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
11 +
use crate::structs::CrcState;
12 +
13 +
use core::ops::BitXor;
14 +
15 +
/// Marker trait for CRC width
16 +
pub trait CrcWidth {
17 +
    /// The width in bits
18 +
    const WIDTH: u32;
19 +
    /// The natural value type for this width
20 +
    type Value: Copy + BitXor<Output = Self::Value>;
21 +
}
22 +
23 +
pub(crate) trait CrcCalculator {
24 +
    fn update(data: &[u8], state: u64, params: &CrcParams) -> u64 {
25 +
        Self::calculate(state, data, params)
26 +
    }
27 +
28 +
    fn checksum(data: &[u8], params: &CrcParams) -> u64 {
29 +
        Self::calculate(params.init, data, params) ^ params.xorout
30 +
    }
31 +
32 +
    fn calculate(state: u64, data: &[u8], params: &CrcParams) -> u64;
33 +
}
34 +
35 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
36 +
/// Trait defining architecture-specific SIMD operations for CRC calculation
37 +
pub trait ArchOps: Sized + Copy + Clone {
38 +
    /// The SIMD vector type used by this architecture
39 +
    type Vector;
40 +
41 +
    /// Process aligned blocks using potentially accelerated SIMD operations
42 +
    ///
43 +
    /// Returns true if the operation was handled by the accelerated path (for example,
44 +
    /// using VPCLMULQDQ)
45 +
    unsafe fn process_enhanced_simd_blocks<W: EnhancedCrcWidth>(
46 +
        &self,
47 +
        _state: &mut CrcState<Self::Vector>,
48 +
        _first: &[Self::Vector; 8],
49 +
        _rest: &[[Self::Vector; 8]],
50 +
        _reflector: &Reflector<Self::Vector>,
51 +
        _keys: &[u64; 23],
52 +
    ) -> bool
53 +
    where
54 +
        Self::Vector: Copy,
55 +
    {
56 +
        // Default implementation just returns false
57 +
        // indicating the non-enhanced algorithm should be used
58 +
        false
59 +
    }
60 +
61 +
    /// Create a SIMD vector from a u64 pair
62 +
    ///
63 +
    /// # Safety
64 +
    /// May use native CPU features
65 +
    unsafe fn create_vector_from_u64_pair(
66 +
        &self,
67 +
        high: u64,
68 +
        low: u64,
69 +
        reflected: bool,
70 +
    ) -> Self::Vector;
71 +
72 +
    /// Create a SIMD vector from a u64 pair without reflection
73 +
    ///
74 +
    /// TODO: I have no idea (yet) why CRC-32 doesn't use reflection, but CRC-64 does.
75 +
    ///
76 +
    /// # Safety
77 +
    /// May use native CPU features
78 +
    unsafe fn create_vector_from_u64_pair_non_reflected(&self, high: u64, low: u64)
79 +
        -> Self::Vector;
80 +
81 +
    /// Create a SIMD vector with a single u64 value
82 +
    ///
83 +
    /// # Safety
84 +
    /// May use native CPU features
85 +
    unsafe fn create_vector_from_u64(&self, value: u64, high: bool) -> Self::Vector;
86 +
87 +
    /// Extract two u64 values from a SIMD vector
88 +
    ///
89 +
    /// # Safety
90 +
    /// May use native CPU features
91 +
    unsafe fn extract_u64s(&self, vector: Self::Vector) -> [u64; 2];
92 +
93 +
    /// Extract two polynomial values (for carryless multiplication)
94 +
    ///
95 +
    /// # Safety
96 +
    /// May use native CPU features
97 +
    unsafe fn extract_poly64s(&self, vector: Self::Vector) -> [u64; 2];
98 +
99 +
    /// XOR two SIMD vectors
100 +
    ///
101 +
    /// # Safety
102 +
    /// May use native CPU features
103 +
    unsafe fn xor_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector;
104 +
105 +
    /// Load bytes from memory into a SIMD vector
106 +
    ///
107 +
    /// # Safety
108 +
    /// May use native CPU features
109 +
    unsafe fn load_bytes(&self, ptr: *const u8) -> Self::Vector;
110 +
111 +
    /// Load aligned bytes from memory
112 +
    ///
113 +
    /// # Safety
114 +
    /// May use native CPU features
115 +
    unsafe fn load_aligned(&self, ptr: *const [u64; 2]) -> Self::Vector;
116 +
117 +
    //unsafe fn load_aligned(&self, ptr: &[u64]) -> Self::Vector;
118 +
119 +
    //unsafe fn load_aligned_const(&self, ptr: *const [u64; 2]) -> Self::Vector;
120 +
121 +
    /// Shuffle/permute bytes according to a mask
122 +
    ///
123 +
    /// # Safety
124 +
    /// May use native CPU features
125 +
    unsafe fn shuffle_bytes(&self, data: Self::Vector, mask: Self::Vector) -> Self::Vector;
126 +
127 +
    /// Blend two vectors using a mask (select from a or b based on mask bits)
128 +
    ///
129 +
    /// # Safety
130 +
    /// May use native CPU features
131 +
    unsafe fn blend_vectors(
132 +
        &self,
133 +
        a: Self::Vector,
134 +
        b: Self::Vector,
135 +
        mask: Self::Vector,
136 +
    ) -> Self::Vector;
137 +
138 +
    /// Shift a vector left by 8 bytes
139 +
    ///
140 +
    /// # Safety
141 +
    /// May use native CPU features
142 +
    unsafe fn shift_left_8(&self, vector: Self::Vector) -> Self::Vector;
143 +
144 +
    /// Create a vector with all bytes set to the same value
145 +
    ///
146 +
    /// # Safety
147 +
    /// May use native CPU features
148 +
    unsafe fn set_all_bytes(&self, value: u8) -> Self::Vector;
149 +
150 +
    /// Create a comparison mask (for blending operations)
151 +
    ///
152 +
    /// # Safety
153 +
    /// May use native CPU features
154 +
    unsafe fn create_compare_mask(&self, vector: Self::Vector) -> Self::Vector;
155 +
156 +
    /// AND two vectors
157 +
    ///
158 +
    /// # Safety
159 +
    /// May use native CPU features
160 +
    unsafe fn and_vectors(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector;
161 +
162 +
    /// Shift a vector right by 32 bits (4 bytes)
163 +
    ///
164 +
    /// # Safety
165 +
    /// May use native CPU features
166 +
    unsafe fn shift_right_32(&self, vector: Self::Vector) -> Self::Vector;
167 +
168 +
    /// Shift a vector left by 32 bits (4 bytes)
169 +
    ///
170 +
    /// # Safety
171 +
    /// May use native CPU features
172 +
    unsafe fn shift_left_32(&self, vector: Self::Vector) -> Self::Vector;
173 +
174 +
    /// Create a SIMD vector with a single u32 value
175 +
    ///
176 +
    /// # Safety
177 +
    /// May use native CPU features
178 +
    unsafe fn create_vector_from_u32(&self, value: u32, high: bool) -> Self::Vector;
179 +
180 +
    /// Shift a vector left by 4 bytes (32 bits)
181 +
    ///
182 +
    /// # Safety
183 +
    /// May use native CPU features
184 +
    unsafe fn shift_left_4(&self, vector: Self::Vector) -> Self::Vector;
185 +
186 +
    /// Shift a vector right by 4 bytes (32 bits)
187 +
    ///
188 +
    /// # Safety
189 +
    /// May use native CPU features
190 +
    unsafe fn shift_right_4(&self, vector: Self::Vector) -> Self::Vector;
191 +
192 +
    /// Shift a vector right by 8 bytes (64 bits)
193 +
    ///
194 +
    /// # Safety
195 +
    /// May use native CPU features
196 +
    unsafe fn shift_right_8(&self, vector: Self::Vector) -> Self::Vector;
197 +
198 +
    /// Shift a vector right by 5 bytes
199 +
    unsafe fn shift_right_5(&self, vector: Self::Vector) -> Self::Vector;
200 +
201 +
    /// Shift a vector right by 6 bytes
202 +
    unsafe fn shift_right_6(&self, vector: Self::Vector) -> Self::Vector;
203 +
204 +
    /// Shift a vector right by 7 bytes
205 +
    unsafe fn shift_right_7(&self, vector: Self::Vector) -> Self::Vector;
206 +
207 +
    /// Shift a vector right by 12 bytes
208 +
    unsafe fn shift_right_12(&self, vector: Self::Vector) -> Self::Vector;
209 +
210 +
    /// Shift a vector left by 12 bytes
211 +
    unsafe fn shift_left_12(&self, vector: Self::Vector) -> Self::Vector;
212 +
213 +
    /// Perform carryless multiplication with immediate value 0x00 (low 64 bits of both vectors)
214 +
    unsafe fn carryless_mul_00(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector;
215 +
216 +
    /// Perform carryless multiplication with immediate value 0x01 (low 64 bits of a, high 64 bits of b)
217 +
    unsafe fn carryless_mul_01(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector;
218 +
219 +
    /// Perform carryless multiplication with immediate value 0x10 (high 64 bits of a, low 64 bits of b)
220 +
    unsafe fn carryless_mul_10(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector;
221 +
222 +
    /// Perform carryless multiplication with immediate value 0x11 (high 64 bits of both vectors)
223 +
    unsafe fn carryless_mul_11(&self, a: Self::Vector, b: Self::Vector) -> Self::Vector;
224 +
225 +
    /// XOR three vectors together: a XOR b XOR c
226 +
    /// Uses native XOR3 instructions when available, falls back to two XOR operations otherwise
227 +
    unsafe fn xor3_vectors(
228 +
        &self,
229 +
        a: Self::Vector,
230 +
        b: Self::Vector,
231 +
        c: Self::Vector,
232 +
    ) -> Self::Vector;
233 +
}
234 +
235 +
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
236 +
/// Enhanced CrcWidth trait with additional operations for generic CRC implementation
237 +
pub trait EnhancedCrcWidth: CrcWidth {
238 +
    /// Load constants specific to CRC width
239 +
    fn load_constants(reflected: bool) -> [[u64; 2]; 4];
240 +
241 +
    /// Create a CRC state with the initial value positioned correctly for the width
242 +
    unsafe fn create_state<T: ArchOps>(
243 +
        value: Self::Value,
244 +
        reflected: bool,
245 +
        ops: &T,
246 +
    ) -> CrcState<T::Vector>
247 +
    where
248 +
        T::Vector: Copy;
249 +
250 +
    /// Extract the final CRC result from a SIMD vector
251 +
    unsafe fn extract_result<T: ArchOps>(
252 +
        vector: T::Vector,
253 +
        reflected: bool,
254 +
        ops: &T,
255 +
    ) -> Self::Value
256 +
    where
257 +
        T::Vector: Copy;
258 +
259 +
    /// Perform width-specific folding operations using CLMUL and two XOR operations (or one XOR3)
260 +
    unsafe fn fold_16<T: ArchOps>(
261 +
        state: &mut CrcState<T::Vector>,
262 +
        coefficient: T::Vector,
263 +
        data_to_xor: T::Vector,
264 +
        ops: &T,
265 +
    ) where
266 +
        T::Vector: Copy;
267 +
268 +
    /// Fold width-specific number of bytes
269 +
    unsafe fn fold_width<T: ArchOps>(state: &mut CrcState<T::Vector>, high: u64, low: u64, ops: &T)
270 +
    where
271 +
        T::Vector: Copy;
272 +
273 +
    /// Width-specific Barrett reduction
274 +
    unsafe fn barrett_reduction<T: ArchOps>(
275 +
        state: &CrcState<T::Vector>,
276 +
        poly: u64,
277 +
        mu: u64,
278 +
        ops: &T,
279 +
    ) -> Self::Value
280 +
    where
281 +
        T::Vector: Copy;
282 +
283 +
    /// Create a coefficient vector for folding operations
284 +
    unsafe fn create_coefficient<T: ArchOps>(
285 +
        high: u64,
286 +
        low: u64,
287 +
        reflected: bool,
288 +
        ops: &T,
289 +
    ) -> T::Vector
290 +
    where
291 +
        T::Vector: Copy;
292 +
293 +
    /// Perform final reduction for the specific width
294 +
    unsafe fn perform_final_reduction<T: ArchOps>(
295 +
        state: T::Vector,
296 +
        reflected: bool,
297 +
        keys: &[u64; 23],
298 +
        ops: &T,
299 +
    ) -> Self::Value
300 +
    where
301 +
        T::Vector: Copy;
302 +
303 +
    /// Get the appropriate shuffle table pointer and offset for handling last bytes
304 +
    fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize);
305 +
}
added vendor/iana-time-zone/.clang-format +9 −0
1 +
---
2 +
BasedOnStyle: Google
3 +
IndentWidth: 4
4 +
ColumnLimit: 100
5 +
---
6 +
Language: Cpp
7 +
SortIncludes: false
8 +
TabWidth: 4
9 +
UseTab: Never
added vendor/iana-time-zone/.clippy.toml +2 −0
1 +
avoid-breaking-exported-api = true
2 +
msrv = "1.62.0"
added vendor/iana-time-zone/.github/dependabot.yml +11 −0
1 +
version: 2
2 +
updates:
3 +
  - package-ecosystem: cargo
4 +
    directory: "/"
5 +
    schedule:
6 +
      interval: daily
7 +
8 +
  - package-ecosystem: github-actions
9 +
    directory: "/"
10 +
    schedule:
11 +
      interval: "daily"
added vendor/iana-time-zone/.github/workflows/release.yml +17 −0
1 +
name: Publish to crates.io
2 +
on:
3 +
  push:
4 +
    tags: ['v*']  # Triggers when pushing tags starting with 'v'
5 +
jobs:
6 +
  publish:
7 +
    runs-on: ubuntu-latest
8 +
    environment: release  # Optional: for enhanced security
9 +
    permissions:
10 +
      id-token: write     # Required for OIDC token exchange
11 +
    steps:
12 +
    - uses: actions/checkout@v6
13 +
    - uses: rust-lang/crates-io-auth-action@v1
14 +
      id: auth
15 +
    - run: cargo publish
16 +
      env:
17 +
        CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
added vendor/iana-time-zone/.github/workflows/rust.yml +494 −0
1 +
name: build
2 +
3 +
on:
4 +
  push:
5 +
    branches:
6 +
      - main
7 +
  pull_request:
8 +
    branches: ["**"]
9 +
  schedule:
10 +
    # At 23:25 on Thursday.
11 +
    - cron: "25 23 * * 4"
12 +
  workflow_dispatch:
13 +
14 +
permissions: {}
15 +
16 +
jobs:
17 +
  test:
18 +
    strategy:
19 +
      fail-fast: false
20 +
      matrix:
21 +
        runs-on: [ubuntu-22.04, windows-2022, macos-latest]
22 +
        toolchain:
23 +
          - "1.62"
24 +
          - stable
25 +
          - nightly
26 +
        versions:
27 +
          - ""
28 +
          - -Zminimal-versions
29 +
        exclude:
30 +
          # package `regex v1.11.1` cannot be built because it requires rustc
31 +
          # 1.65 or newer, while the currently active rustc version is 1.62.0
32 +
          - toolchain: "1.62"
33 +
            versions: ""
34 +
          # Older proc-macro2 crates fail to compile on the latest nightly
35 +
          - toolchain: nightly
36 +
            versions: -Zminimal-versions
37 +
    runs-on: ${{ matrix.runs-on }}
38 +
    steps:
39 +
      - name: Checkout
40 +
        uses: actions/checkout@v6
41 +
        with:
42 +
          persist-credentials: false
43 +
      - name: Install Rust
44 +
        run: |
45 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update
46 +
          rustup default ${{ matrix.toolchain }}
47 +
      - name: Update lockfile
48 +
        run: cargo generate-lockfile ${{ matrix.versions }}
49 +
        env:
50 +
          RUSTC_BOOTSTRAP: 1
51 +
      - run: cargo test --all-targets
52 +
      - run: cargo run --example stress-test
53 +
54 +
  build-wasm:
55 +
    strategy:
56 +
      fail-fast: false
57 +
      matrix:
58 +
        versions:
59 +
          - ""
60 +
          - -Zminimal-versions
61 +
        toolchain:
62 +
          - stable
63 +
          - nightly
64 +
        include:
65 +
          # Without `-Zminimal-versions` a too recent bumpalo version is selected. Newer versions use `edition = "2021"`.
66 +
          - versions: -Zminimal-versions
67 +
          - toolchain: "1.62"
68 +
    runs-on: ubuntu-latest
69 +
    steps:
70 +
      - name: Checkout
71 +
        uses: actions/checkout@v6
72 +
        with:
73 +
          persist-credentials: false
74 +
      - name: Install Rust
75 +
        run: |
76 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-unknown-unknown
77 +
          rustup default ${{ matrix.toolchain }}
78 +
      - name: Update lockfile
79 +
        run: cargo generate-lockfile ${{ matrix.versions }}
80 +
        env:
81 +
          RUSTC_BOOTSTRAP: 1
82 +
      - run: cargo build --lib
83 +
84 +
  test-wasm:
85 +
    strategy:
86 +
      fail-fast: false
87 +
      matrix:
88 +
        toolchain:
89 +
          - stable
90 +
          - nightly
91 +
    runs-on: ubuntu-latest
92 +
    steps:
93 +
      - name: Checkout
94 +
        uses: actions/checkout@v6
95 +
        with:
96 +
          persist-credentials: false
97 +
      - name: Install Rust
98 +
        run: |
99 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-unknown-unknown
100 +
          rustup default ${{ matrix.toolchain }}
101 +
      - name: Install Node
102 +
        uses: actions/setup-node@v6
103 +
        with:
104 +
          node-version: "lts/*"
105 +
      - name: Install "wasm-pack"
106 +
        uses: taiki-e/install-action@v2
107 +
        with:
108 +
          tool: wasm-pack
109 +
      - run: wasm-pack test --node
110 +
111 +
  test-wasi:
112 +
    strategy:
113 +
      fail-fast: false
114 +
      matrix:
115 +
        toolchain:
116 +
          - stable
117 +
          - nightly
118 +
    runs-on: ubuntu-latest
119 +
    steps:
120 +
      - name: Checkout
121 +
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
122 +
        with:
123 +
          persist-credentials: false
124 +
      - name: Install Rust
125 +
        run: |
126 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-wasip1
127 +
          rustup default ${{ matrix.toolchain }}
128 +
      - env:
129 +
          CARGO_BUILD_TARGET: wasm32-wasip1
130 +
        run: cargo build --release --examples
131 +
      - name: Install wasmtime
132 +
        uses: bytecodealliance/actions/wasmtime/setup@6aecabac1eb1dcf7ed94ba9471974415ee2ebef2 # v1
133 +
      - name: Run example using wasmtime
134 +
        run: wasmtime ./target/wasm32-wasip1/release/examples/get_timezone.wasm
135 +
136 +
  test-emscripten:
137 +
    strategy:
138 +
      fail-fast: false
139 +
      matrix:
140 +
        toolchain:
141 +
          - stable
142 +
          - nightly
143 +
    runs-on: ubuntu-latest
144 +
    steps:
145 +
      - name: Checkout
146 +
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
147 +
        with:
148 +
          persist-credentials: false
149 +
      - name: Install Rust
150 +
        run: |
151 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-unknown-emscripten
152 +
          rustup default ${{ matrix.toolchain }}
153 +
      - uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14
154 +
      - env:
155 +
          CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_RUNNER: node
156 +
          CARGO_BUILD_TARGET: wasm32-unknown-emscripten
157 +
        run: cargo test
158 +
159 +
  build-cross:
160 +
    strategy:
161 +
      fail-fast: false
162 +
      matrix:
163 +
        target:
164 +
          - s390x-unknown-linux-gnu
165 +
          - x86_64-unknown-freebsd
166 +
          - x86_64-unknown-illumos
167 +
          # # NetBSD disabled waiting for release with fix from
168 +
          # # https://github.com/cross-rs/cross/issues/1345
169 +
          # - x86_64-unknown-netbsd
170 +
          # # Solaris disabled while https://github.com/cross-rs/cross/issues/1599 is open
171 +
          # - sparcv9-sun-solaris
172 +
        versions:
173 +
          - ""
174 +
          - -Zminimal-versions
175 +
    runs-on: ubuntu-latest
176 +
    steps:
177 +
      - name: Checkout
178 +
        uses: actions/checkout@v6
179 +
        with:
180 +
          persist-credentials: false
181 +
      - name: Install Rust
182 +
        run: |
183 +
          rustup toolchain install stable --profile minimal --no-self-update --target ${{ matrix.target }}
184 +
      - name: Update lockfile
185 +
        run: cargo generate-lockfile ${{ matrix.versions }}
186 +
        env:
187 +
          RUSTC_BOOTSTRAP: 1
188 +
189 +
      - name: Install "cross"
190 +
        uses: taiki-e/install-action@v2
191 +
        with:
192 +
          tool: cross
193 +
194 +
      - run: cross build --target ${{ matrix.target }} --examples
195 +
196 +
  build-android:
197 +
    runs-on: ubuntu-latest
198 +
    steps:
199 +
      - name: Checkout
200 +
        uses: actions/checkout@v6
201 +
        with:
202 +
          persist-credentials: false
203 +
      - name: Install Rust
204 +
        run: rustup toolchain install stable --profile minimal --no-self-update
205 +
      - name: Add Rust components
206 +
        run: rustup component add clippy rust-src
207 +
      - name: Add Rust toolchain
208 +
        run: rustup target add aarch64-linux-android armv7-linux-androideabi
209 +
      - name: Setup Android NDK
210 +
        uses: nttld/setup-ndk@v1
211 +
        id: setup-ndk
212 +
        with:
213 +
          ndk-version: r25b
214 +
          local-cache: true
215 +
216 +
      - name: Install "cargo ndk"
217 +
        uses: taiki-e/install-action@v2
218 +
        with:
219 +
          tool: cargo-ndk
220 +
221 +
      - name: Check
222 +
        run: cargo ndk check --lib
223 +
        env:
224 +
          ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
225 +
226 +
      - name: Clippy
227 +
        run: cargo ndk clippy --lib
228 +
        env:
229 +
          ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
230 +
231 +
      - name: Build library
232 +
        run: cargo ndk build --lib
233 +
        env:
234 +
          ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
235 +
236 +
  build-ios-cross:
237 +
    strategy:
238 +
      fail-fast: false
239 +
      matrix:
240 +
        toolchain:
241 +
          - "1.62"
242 +
          - stable
243 +
        target:
244 +
          - x86_64-apple-ios
245 +
        versions:
246 +
          - ""
247 +
          - -Zminimal-versions
248 +
        exclude:
249 +
          # package `regex v1.11.1` cannot be built because it requires rustc
250 +
          # 1.65 or newer, while the currently active rustc version is 1.62.0
251 +
          - toolchain: "1.62"
252 +
            versions: ""
253 +
    runs-on: macos-latest
254 +
    steps:
255 +
      - name: Checkout
256 +
        uses: actions/checkout@v6
257 +
        with:
258 +
          persist-credentials: false
259 +
      - name: Install Rust
260 +
        run: |
261 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target ${{ matrix.target }}
262 +
          rustup default ${{ matrix.toolchain }}
263 +
      - name: Update lockfile
264 +
        run: cargo generate-lockfile ${{ matrix.versions }}
265 +
        env:
266 +
          RUSTC_BOOTSTRAP: 1
267 +
      - name: Install "cross"
268 +
        run: curl --location --silent --show-error --fail https://github.com/cargo-bins/cargo-quickinstall/releases/download/cross-0.2.5/cross-0.2.5-x86_64-apple-darwin.tar.gz | tar -xzvvf - -C $HOME/.cargo/bin
269 +
      - run: cross build --target ${{ matrix.target }} --examples
270 +
271 +
  check:
272 +
    strategy:
273 +
      fail-fast: false
274 +
      matrix:
275 +
        toolchain:
276 +
          - "1.62"
277 +
          - stable
278 +
          - nightly
279 +
        versions:
280 +
          - ""
281 +
          - -Zminimal-versions
282 +
        exclude:
283 +
          # package `cc v1.2.17` cannot be built because it requires rustc 1.63
284 +
          # or newer, while the currently active rustc version is 1.62.0
285 +
          - toolchain: "1.62"
286 +
            versions: ""
287 +
    runs-on: ubuntu-latest
288 +
    env:
289 +
      RUSTFLAGS: -D warnings
290 +
      RUST_BACKTRACE: 1
291 +
    steps:
292 +
      - name: Checkout
293 +
        uses: actions/checkout@v6
294 +
        with:
295 +
          persist-credentials: false
296 +
      - name: Install Rust
297 +
        run: |
298 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --component clippy
299 +
          rustup default ${{ matrix.toolchain }}
300 +
      - name: Update lockfile
301 +
        run: cargo generate-lockfile ${{ matrix.versions }}
302 +
        env:
303 +
          RUSTC_BOOTSTRAP: 1
304 +
      - run: cargo check --all-targets --workspace
305 +
      - run: cargo clippy --all-targets --workspace -- -D warnings
306 +
307 +
  no-docker-image-check-only:
308 +
    runs-on: ubuntu-latest
309 +
    steps:
310 +
      - name: Checkout
311 +
        uses: actions/checkout@v6
312 +
        with:
313 +
          persist-credentials: false
314 +
      - name: Install Rust
315 +
        run: |
316 +
          rustup toolchain install nightly --profile minimal --no-self-update --component rust-src
317 +
          rustup default nightly
318 +
      - run: cargo check --target x86_64-unknown-haiku -Z build-std --examples
319 +
320 +
  doc:
321 +
    runs-on: ubuntu-latest
322 +
    steps:
323 +
      - name: Checkout
324 +
        uses: actions/checkout@v6
325 +
        with:
326 +
          persist-credentials: false
327 +
      - name: Install Rust
328 +
        run: |
329 +
          rustup toolchain install nightly --profile minimal --no-self-update
330 +
          rustup default nightly
331 +
      - run: RUSTDOCFLAGS="-D warnings" cargo doc --all-features
332 +
333 +
  audit:
334 +
    runs-on: ubuntu-latest
335 +
    steps:
336 +
      - name: Checkout
337 +
        uses: actions/checkout@v6
338 +
        with:
339 +
          persist-credentials: false
340 +
      - uses: EmbarkStudios/cargo-deny-action@v2
341 +
342 +
  fallback:
343 +
    runs-on: ubuntu-latest
344 +
    steps:
345 +
      - name: Checkout
346 +
        uses: actions/checkout@v6
347 +
        with:
348 +
          persist-credentials: false
349 +
      - name: Install Rust
350 +
        run: |
351 +
          rustup toolchain install stable --profile minimal --no-self-update --target x86_64-fortanix-unknown-sgx
352 +
      # Should fail (outcome is negated):
353 +
      - run: if cargo build --lib --target x86_64-fortanix-unknown-sgx; then exit 1; fi
354 +
      # Should succeed:
355 +
      - run: cargo build --lib --target x86_64-fortanix-unknown-sgx --features fallback
356 +
357 +
  c:
358 +
    name: Lint and format C
359 +
    runs-on: ubuntu-latest
360 +
    steps:
361 +
      - name: Checkout repository
362 +
        uses: actions/checkout@v6
363 +
        with:
364 +
          persist-credentials: false
365 +
366 +
      - name: Setup Node.js runtime
367 +
        uses: actions/setup-node@v6
368 +
        with:
369 +
          node-version: "lts/*"
370 +
      - name: Install npm
371 +
        run: npm i -f -g [email protected]
372 +
373 +
      - name: Lint and check formatting with clang-format
374 +
        run: npx github:artichoke/clang-format --check
375 +
376 +
  test-haiku:
377 +
    strategy:
378 +
      fail-fast: false
379 +
      matrix:
380 +
        runs-on: [ubuntu-22.04, windows-2022, macos-latest]
381 +
        toolchain:
382 +
          - stable
383 +
        versions:
384 +
          - ""
385 +
    runs-on: ${{ matrix.runs-on }}
386 +
    env:
387 +
      RUSTFLAGS: -D warnings
388 +
      RUST_BACKTRACE: 1
389 +
    steps:
390 +
      - name: Checkout
391 +
        uses: actions/checkout@v6
392 +
        with:
393 +
          persist-credentials: false
394 +
      - name: Install Rust
395 +
        run: |
396 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target x86_64-fortanix-unknown-sgx
397 +
          rustup default ${{ matrix.toolchain }}
398 +
      - name: Update lockfile
399 +
        run: cargo generate-lockfile ${{ matrix.versions }}
400 +
        working-directory: haiku
401 +
        env:
402 +
          RUSTC_BOOTSTRAP: 1
403 +
      - run: cargo test --all-targets
404 +
        working-directory: haiku
405 +
406 +
  check-haiku:
407 +
    strategy:
408 +
      fail-fast: false
409 +
      matrix:
410 +
        toolchain:
411 +
          - stable
412 +
        versions:
413 +
          - ""
414 +
    runs-on: ubuntu-latest
415 +
    env:
416 +
      RUSTFLAGS: -D warnings
417 +
      RUST_BACKTRACE: 1
418 +
    steps:
419 +
      - name: Checkout
420 +
        uses: actions/checkout@v6
421 +
        with:
422 +
          persist-credentials: false
423 +
      - name: Install Rust
424 +
        run: |
425 +
          rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --component clippy
426 +
          rustup default ${{ matrix.toolchain }}
427 +
      - name: Update lockfile
428 +
        run: cargo generate-lockfile ${{ matrix.versions }}
429 +
        working-directory: haiku
430 +
        env:
431 +
          RUSTC_BOOTSTRAP: 1
432 +
      - run: cargo check --all-targets
433 +
        working-directory: haiku
434 +
      - run: cargo clippy --all-targets -- -D warnings
435 +
        working-directory: haiku
436 +
437 +
  check-all-versions:
438 +
    runs-on: ubuntu-22.04
439 +
    steps:
440 +
      - name: Checkout
441 +
        uses: actions/checkout@v6
442 +
        with:
443 +
          persist-credentials: false
444 +
445 +
      - name: Install Rust
446 +
        run: |
447 +
          rustup toolchain install nightly --profile minimal --no-self-update
448 +
          rustup default nightly
449 +
450 +
      - name: Install "cargo hack"
451 +
        uses: taiki-e/install-action@v2
452 +
        with:
453 +
          tool: cargo-hack
454 +
455 +
      - run: cargo hack check --version-range .. --version-step 2 --clean-per-version --clean-per-run
456 +
457 +
  generate-windows-bindings:
458 +
    name: Generate windows-core bindings with windows-bindgen
459 +
    runs-on: ubuntu-latest
460 +
    steps:
461 +
      - uses: actions/checkout@v6
462 +
        with:
463 +
          persist-credentials: false
464 +
      - name: Clean
465 +
        run: rm -rf src/Windows.rs
466 +
      - name: Generate
467 +
        run: cargo r --manifest-path=api_gen/Cargo.toml
468 +
      - name: Diff generated Rust code
469 +
        run: test -z "$(git status --porcelain)" || (echo "::error::Generated files are different, please regenerate with cargo run --manifest-path=api_gen/Cargo.toml!"; git status; false)
470 +
471 +
  typos:
472 +
    runs-on: ubuntu-latest
473 +
    steps:
474 +
      - uses: actions/checkout@v6
475 +
        with:
476 +
          persist-credentials: false
477 +
      - uses: crate-ci/typos@master
478 +
479 +
  devskim:
480 +
    runs-on: ubuntu-latest
481 +
    permissions:
482 +
      actions: read
483 +
      contents: read
484 +
      security-events: write
485 +
    steps:
486 +
      - uses: actions/checkout@v6
487 +
        with:
488 +
          persist-credentials: false
489 +
      - name: Run DevSkim scanner
490 +
        uses: microsoft/DevSkim-Action@v1
491 +
      - name: Upload DevSkim scan results to GitHub Security tab
492 +
        uses: github/codeql-action/upload-sarif@v4
493 +
        with:
494 +
          sarif_file: devskim-results.sarif
added vendor/iana-time-zone/.github/workflows/zizmor.yaml +35 −0
1 +
name: GitHub Actions Security Analysis with zizmor 🌈
2 +
3 +
on:
4 +
  push:
5 +
    branches: ["main"]
6 +
  pull_request:
7 +
    branches: ["**"]
8 +
9 +
permissions: {}
10 +
11 +
jobs:
12 +
  zizmor:
13 +
    name: zizmor latest via PyPI
14 +
    runs-on: ubuntu-latest
15 +
    permissions:
16 +
      security-events: write
17 +
    steps:
18 +
      - name: Checkout repository
19 +
        uses: actions/checkout@v6
20 +
        with:
21 +
          persist-credentials: false
22 +
23 +
      - name: Install the latest version of uv
24 +
        uses: astral-sh/setup-uv@v7
25 +
26 +
      - name: Run zizmor 🌈
27 +
        run: uvx zizmor --format sarif . > results.sarif
28 +
        env:
29 +
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30 +
31 +
      - name: Upload SARIF file
32 +
        uses: github/codeql-action/upload-sarif@v4
33 +
        with:
34 +
          sarif_file: results.sarif
35 +
          category: zizmor
added vendor/iana-time-zone/.gitignore +2 −0
1 +
target
2 +
Cargo.lock
added vendor/iana-time-zone/CHANGELOG.md +365 −0
1 +
# Changelog
2 +
All notable changes to this project will be documented in this file.
3 +
4 +
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5 +
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6 +
7 +
## [0.1.65] - 2026-01-28
8 +
### Changed
9 +
- Add wasi support ([#190](https://github.com/strawlab/iana-time-zone/pull/190))
10 +
- Add support for emscripten ([#189](https://github.com/strawlab/iana-time-zone/pull/189))
11 +
- Add s390x target to Rust CI workflow ([#182](https://github.com/strawlab/iana-time-zone/pull/182))
12 +
13 +
## [0.1.64] - 2025-09-12
14 +
### Changed
15 +
- Bump `windows-core` to `0.56-0.62` range ([#177](https://github.com/strawlab/iana-time-zone/pull/177)
16 +
17 +
## [0.1.63] - 2025-03-31
18 +
### Changes
19 +
- Bump MSRV (minimum supported rust version) to 1.62 ([#131](https://github.com/strawlab/iana-time-zone/pull/131))
20 +
- Bump `windows-core` to `0.56-0.61` range ([#131](https://github.com/strawlab/iana-time-zone/pull/131), [#133](https://github.com/strawlab/iana-time-zone/pull/133))
21 +
22 +
## [0.1.62] - 2025-03-24
23 +
### Changed
24 +
- Bump MSRV (minimum supported rust version) to 1.61 ([#157](https://github.com/strawlab/iana-time-zone/pull/157))
25 +
- Update to rust edition 2021 ([#161](https://github.com/strawlab/iana-time-zone/pull/161))
26 +
- Address high and medium severity zizmor findings ([#163](https://github.com/strawlab/iana-time-zone/pull/163))
27 +
28 +
### Added
29 +
- Added support for tvOS, watchOS and visionOS ([#146](https://github.com/strawlab/iana-time-zone/pull/146)).
30 +
- implement OpenHarmony support ([#150](https://github.com/strawlab/iana-time-zone/pull/150))
31 +
32 +
## [0.1.61] - 2024-09-16
33 +
### Changed
34 +
35 +
- Depend on wasm-bindgen 0.2.89 or higher ([#134](https://github.com/strawlab/iana-time-zone/pull/134))
36 +
- Do not use wasm_bindgen in wasm32-unknown-emscripten environment ([#130](https://github.com/strawlab/iana-time-zone/pull/130))
37 +
38 +
## [0.1.60] - 2024-02-03
39 +
### Changed
40 +
- correct `windows-core` dependency version ([#127](https://github.com/strawlab/iana-time-zone/pull/127))
41 +
42 +
## [0.1.59] - 2023-12-30
43 +
### Changed
44 +
- update `windows` dependency ([#125](https://github.com/strawlab/iana-time-zone/pull/125))
45 +
46 +
## [0.1.58] - 2023-10-17
47 +
### Added
48 +
- use windows-core with embedded bindings via windows-bindgen ([#117](https://github.com/strawlab/iana-time-zone/pull/117))
49 +
- implement GNU Hurd support ([#121](https://github.com/strawlab/iana-time-zone/pull/121))
50 +
- implement AIX support ([#57](https://github.com/strawlab/iana-time-zone/pull/57))
51 +
52 +
## [0.1.57] - 2023-06-07
53 +
### Added
54 +
- implement OpenWRT support ([#109](https://github.com/strawlab/iana-time-zone/pull/109))
55 +
56 +
## [0.1.56] - 2023-04-03
57 +
### Changed
58 +
- update `windows` dependency ([#102](https://github.com/strawlab/iana-time-zone/pull/102))
59 +
60 +
## [0.1.55] - 2023-03-30
61 +
### Changed
62 +
- update `windows` dependency ([#101](https://github.com/strawlab/iana-time-zone/pull/101))
63 +
64 +
## [0.1.54] - 2023-03-21
65 +
### Changed
66 +
- replace `winapi` dependency with `windows` ([#97](https://github.com/strawlab/iana-time-zone/pull/97))
67 +
- bump msrv to 1.48 ([#91](https://github.com/strawlab/iana-time-zone/pull/91))
68 +
69 +
## [0.1.53] - 2022-10-28
70 +
### Fixed
71 +
- remove lint causing breakage on rust 1.45-1.51 ([#84](https://github.com/strawlab/iana-time-zone/pull/84))
72 +
73 +
## [0.1.52] - 2022-10-28
74 +
### Fixed
75 +
- fix for NixOS ([#81](https://github.com/strawlab/iana-time-zone/pull/81))
76 +
77 +
### Changed
78 +
- allow building the haiku crate on other hosts([#75](https://github.com/strawlab/iana-time-zone/pull/75))
79 +
- various improvements in continuous integration and source quality
80 +
  ([#76](https://github.com/strawlab/iana-time-zone/pull/76)),
81 +
  ([#77](https://github.com/strawlab/iana-time-zone/pull/77)),
82 +
  ([#78](https://github.com/strawlab/iana-time-zone/pull/78)),
83 +
  ([#81](https://github.com/strawlab/iana-time-zone/pull/81))
84 +
85 +
## [0.1.51] - 2022-10-08
86 +
### Changed
87 +
- bump MSRV to 1.38 ([#70](https://github.com/strawlab/iana-time-zone/pull/70))
88 +
- Refactor Android property key CStr construction to add tests ([#69](https://github.com/strawlab/iana-time-zone/pull/69))
89 +
- Refactor MacOS implementation a lot ([#67](https://github.com/strawlab/iana-time-zone/pull/67))
90 +
91 +
### Added
92 +
- Implement for Haiku ([#66](https://github.com/strawlab/iana-time-zone/pull/66))
93 +
94 +
### Fixed
95 +
- Fix spelling of 'initialized' in sync::Once statics ([#63](https://github.com/strawlab/iana-time-zone/pull/63))
96 +
97 +
## [0.1.50] - 2022-09-23
98 +
### Fixed
99 +
- Reduce MSRV for Android again ([#62](https://github.com/strawlab/iana-time-zone/pull/62))
100 +
101 +
## [0.1.49] - 2022-09-22
102 +
### Changed
103 +
- `once_cell` dependency is not needed ([#61](https://github.com/strawlab/iana-time-zone/pull/61))
104 +
105 +
## [0.1.48] - 2022-09-12
106 +
### Changed
107 +
- Downgrade requirements for WASM dependencies ([#58](https://github.com/strawlab/iana-time-zone/pull/58))
108 +
- Reduce MSRV for Tier 1 platforms to 1.31 ([#59](https://github.com/strawlab/iana-time-zone/pull/59))
109 +
110 +
## [0.1.47] - 2022-08-30
111 +
### Changed
112 +
- Update `android_system_properties` to v0.1.5 to run 9786% faster (YMMV) ([#56](https://github.com/strawlab/iana-time-zone/pull/56))
113 +
114 +
## [0.1.46] - 2022-08-18
115 +
### Added
116 +
- Implement for Solaris ([#55](https://github.com/strawlab/iana-time-zone/pull/55))
117 +
118 +
## [0.1.45] - 2022-08-16
119 +
### Fixed
120 +
- Fix potential use after free in MacOS / iOS ([#54](https://github.com/strawlab/iana-time-zone/pull/54), [RUSTSEC-2022-0049](https://rustsec.org/advisories/RUSTSEC-2022-0049.html))
121 +
- Fix typos in README ([#53](https://github.com/strawlab/iana-time-zone/pull/53))
122 +
123 +
## [0.1.44] - 2022-08-11
124 +
### Fixed
125 +
- "/etc/localtime" may be relative link ([#49](https://github.com/strawlab/iana-time-zone/pull/49))
126 +
127 +
## [0.1.43] - 2022-08-11
128 +
### Changed
129 +
- Use `core-foundation-sys` instead of `core-foundation` ([#50](https://github.com/strawlab/iana-time-zone/pull/50))
130 +
131 +
## [0.1.42] - 2022-08-10
132 +
### Fixed
133 +
- Fix implementation for Redhat based distros ([#48](https://github.com/strawlab/iana-time-zone/pull/48))
134 +
135 +
## [0.1.41] - 2022-08-02
136 +
### Added
137 +
- Add `fallback` feature ([#46](https://github.com/strawlab/iana-time-zone/pull/46))
138 +
139 +
## [0.1.40] - 2022-07-29
140 +
### Added
141 +
- Implement for Android ([#45](https://github.com/strawlab/iana-time-zone/pull/45))
142 +
143 +
## [0.1.38] - 2022-07-27
144 +
### Added
145 +
- Implement illumos ([#44](https://github.com/strawlab/iana-time-zone/pull/44))
146 +
### Changed
147 +
- Update examples in README
148 +
149 +
## [0.1.37] - 2022-07-23
150 +
### Added
151 +
- Support iOS ([#41](https://github.com/strawlab/iana-time-zone/pull/41))
152 +
### Changed
153 +
- Implement `std::err::source()`, format `IoError` ([#42](https://github.com/strawlab/iana-time-zone/pull/42))
154 +
155 +
## [0.1.36] - 2022-07-21
156 +
### Fixed
157 +
- Fail to compile for WASI ([#40](https://github.com/strawlab/iana-time-zone/pull/40))
158 +
159 +
## [0.1.35] - 2022-06-29
160 +
### Added
161 +
- Implement for FreeBSD, NetBSD, OpenBSD and Dragonfly ([#39](https://github.com/strawlab/iana-time-zone/pull/39))
162 +
163 +
## [0.1.34] - 2022-06-29
164 +
### Added
165 +
- Implement for wasm32 ([#38](https://github.com/strawlab/iana-time-zone/pull/38))
166 +
167 +
## [0.1.33] - 2022-04-15
168 +
### Changed
169 +
- Use `winapi` crate instead of `windows` crate ([#35](https://github.com/strawlab/iana-time-zone/pull/35))
170 +
171 +
## [0.1.32] - 2022-04-06
172 +
### Changed
173 +
- Update `windows` requirement from 0.34 to 0.35 ([#34](https://github.com/strawlab/iana-time-zone/pull/34))
174 +
175 +
## [0.1.31] - 2022-03-16
176 +
### Changed
177 +
- Update `windows` requirement from 0.33 to 0.34 ([#33](https://github.com/strawlab/iana-time-zone/pull/33))
178 +
179 +
## [0.1.30] - 2022-02-28
180 +
### Changed
181 +
- Fewer string allocations ([#32](https://github.com/strawlab/iana-time-zone/pull/32))
182 +
183 +
## [0.1.29] - 2022-02-25
184 +
### Changed
185 +
- Update `windows` requirement from 0.32 to 0.33 ([#31](https://github.com/strawlab/iana-time-zone/pull/31))
186 +
187 +
## [0.1.28] - 2022-02-04
188 +
### Changed
189 +
- Update `windows` requirement from 0.30 to 0.32 ([#30](https://github.com/strawlab/iana-time-zone/pull/30))
190 +
191 +
## [0.1.27] - 2022-01-14
192 +
### Changed
193 +
- Update `windows` requirement from 0.29 to 0.30 ([#29](https://github.com/strawlab/iana-time-zone/pull/29))
194 +
195 +
## [0.1.26] - 2021-12-23
196 +
### Changed
197 +
- Update `windows` requirement from 0.28 to 0.29 ([#28](https://github.com/strawlab/iana-time-zone/pull/28))
198 +
199 +
## [0.1.25] - 2021-11-18
200 +
### Changed
201 +
- Update `windows` requirement from 0.27 to 0.28 ([#27](https://github.com/strawlab/iana-time-zone/pull/27))
202 +
203 +
## [0.1.24] - 2021-11-16
204 +
### Changed
205 +
- Update `windows` requirement from 0.26 to 0.27 ([#26](https://github.com/strawlab/iana-time-zone/pull/26))
206 +
207 +
## [0.1.23] - 2021-11-12
208 +
### Changed
209 +
- Update `windows` requirement from 0.25 to 0.26 ([#25](https://github.com/strawlab/iana-time-zone/pull/25))
210 +
211 +
## [0.1.22] - 2021-11-08
212 +
### Changed
213 +
- Update `windows` requirement from 0.24 to 0.25 ([#24](https://github.com/strawlab/iana-time-zone/pull/24))
214 +
215 +
## [0.1.21] - 2021-11-02
216 +
### Changed
217 +
- Update `windows` requirement from 0.23 to 0.24 ([#23](https://github.com/strawlab/iana-time-zone/pull/23))
218 +
219 +
## [0.1.20] - 2021-10-29
220 +
### Changed
221 +
- Update `windows` requirement from 0.21 to 0.23 ([#22](https://github.com/strawlab/iana-time-zone/pull/22))
222 +
223 +
## [0.1.19] - 2021-09-27
224 +
### Changed
225 +
- Update `windows` requirement from 0.19 to 0.21 ([#18](https://github.com/strawlab/iana-time-zone/pull/18), [#20](https://github.com/strawlab/iana-time-zone/pull/20))
226 +
- Update `chrono-tz` requirement from 0.5 to 0.6 ([#19](https://github.com/strawlab/iana-time-zone/pull/19))
227 +
228 +
## [0.1.18] - 2021-08-23
229 +
### Changed
230 +
- Update `windows` requirement from 0.18 to 0.19 ([#17](https://github.com/strawlab/iana-time-zone/pull/17))
231 +
232 +
## [0.1.16] - 2021-07-26
233 +
### Changed
234 +
- Update `windows` requirement from 0.17 to 0.18 ([#16](https://github.com/strawlab/iana-time-zone/pull/16))
235 +
236 +
## [0.1.15] - 2021-07-08
237 +
### Changed
238 +
- Update `windows` requirement from 0.14 to 0.17 ([#15](https://github.com/strawlab/iana-time-zone/pull/15))
239 +
240 +
## [0.1.14] - 2021-07-07
241 +
### Changed
242 +
- Update `windows` requirement from 0.13 to 0.14 ([#14](https://github.com/strawlab/iana-time-zone/pull/14))
243 +
244 +
## [0.1.13] - 2021-06-28
245 +
### Changed
246 +
- Update `windows` requirement from 0.12 to 0.13 ([#13](https://github.com/strawlab/iana-time-zone/pull/13))
247 +
248 +
## [0.1.12] - 2021-06-28
249 +
### Changed
250 +
- Update `windows` requirement from 0.11 to 0.12 ([#12](https://github.com/strawlab/iana-time-zone/pull/12))
251 +
252 +
## [0.1.11] - 2021-06-12
253 +
### Changed
254 +
- Update `windows` requirement from 0.10 to 0.11 ([#11](https://github.com/strawlab/iana-time-zone/pull/11))
255 +
256 +
## [0.1.10] - 2021-05-13
257 +
### Changed
258 +
- Update `windows` requirement from 0.9 to 0.10 ([#10](https://github.com/strawlab/iana-time-zone/pull/10))
259 +
260 +
## [0.1.9] - 2021-04-28
261 +
### Changed
262 +
- Update `windows` requirement from 0.8 to 0.9 ([#8](https://github.com/strawlab/iana-time-zone/pull/8))
263 +
264 +
## [0.1.8] - 2021-04-13
265 +
### Changed
266 +
- Update `windows` requirement from 0.7 to 0.8 ([#7](https://github.com/strawlab/iana-time-zone/pull/7))
267 +
268 +
## [0.1.7] - 2021-03-30
269 +
### Changed
270 +
- Update `windows` requirement from 0.6 to 0.7 ([#6](https://github.com/strawlab/iana-time-zone/pull/6))
271 +
272 +
## [0.1.6] - 2021-03-24
273 +
### Changed
274 +
- Update `windows` requirement from 0.5 to 0.6 ([#5](https://github.com/strawlab/iana-time-zone/pull/5))
275 +
276 +
## [0.1.5] - 2021-03-20
277 +
### Changed
278 +
- Update `windows` requirement from 0.4 to 0.5 ([#4](https://github.com/strawlab/iana-time-zone/pull/4))
279 +
280 +
## [0.1.4] - 2021-03-11
281 +
### Changed
282 +
- Update `windows` requirement from 0.3 to 0.4 ([#3](https://github.com/strawlab/iana-time-zone/pull/3))
283 +
284 +
## [0.1.3] - 2021-02-22
285 +
### Changed
286 +
- Use `windows` crate instead of `winrt`
287 +
288 +
## [0.1.2] - 2020-10-09
289 +
### Changed
290 +
- Update `core-foundation` requirement from 0.7 to 0.9 ([#1](https://github.com/strawlab/iana-time-zone/pull/1))
291 +
292 +
## [0.1.1] - 2020-06-27
293 +
### Changed
294 +
- Update `core-foundation` requirement from 0.5 to 0.7
295 +
296 +
## [0.1.0] - 2020-06-27
297 +
### Added
298 +
- Implement for Linux, Windows, MacOS
299 +
300 +
[0.1.65]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.65
301 +
[0.1.64]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.64
302 +
[0.1.63]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.63
303 +
[0.1.62]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.62
304 +
[0.1.61]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.61
305 +
[0.1.60]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.60
306 +
[0.1.59]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.59
307 +
[0.1.58]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.58
308 +
[0.1.57]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.57
309 +
[0.1.56]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.56
310 +
[0.1.55]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.55
311 +
[0.1.54]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.54
312 +
[0.1.53]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.53
313 +
[0.1.52]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.52
314 +
[0.1.51]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.51
315 +
[0.1.50]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.50
316 +
[0.1.49]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.49
317 +
[0.1.48]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.48
318 +
[0.1.47]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.47
319 +
[0.1.46]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.46
320 +
[0.1.45]: https://github.com/strawlab/iana-time-zone/releases/tag/v0.1.45
321 +
[0.1.44]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.44
322 +
[0.1.43]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.43
323 +
[0.1.42]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.42
324 +
[0.1.41]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.41
325 +
[0.1.40]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.40
326 +
[0.1.39]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.39
327 +
[0.1.38]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.38
328 +
[0.1.37]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.37
329 +
[0.1.36]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.36
330 +
[0.1.35]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.35
331 +
[0.1.34]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.34
332 +
[0.1.33]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.33
333 +
[0.1.32]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.32
334 +
[0.1.31]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.31
335 +
[0.1.30]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.30
336 +
[0.1.29]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.29
337 +
[0.1.28]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.28
338 +
[0.1.27]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.27
339 +
[0.1.26]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.26
340 +
[0.1.25]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.25
341 +
[0.1.24]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.24
342 +
[0.1.23]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.23
343 +
[0.1.22]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.22
344 +
[0.1.21]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.21
345 +
[0.1.20]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.20
346 +
[0.1.19]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.19
347 +
[0.1.18]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.18
348 +
[0.1.17]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.17
349 +
[0.1.16]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.16
350 +
[0.1.15]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.15
351 +
[0.1.14]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.14
352 +
[0.1.13]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.13
353 +
[0.1.12]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.12
354 +
[0.1.11]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.11
355 +
[0.1.10]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.10
356 +
[0.1.9]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.9
357 +
[0.1.8]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.8
358 +
[0.1.7]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.7
359 +
[0.1.6]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.6
360 +
[0.1.5]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.5
361 +
[0.1.4]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.4
362 +
[0.1.3]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.3
363 +
[0.1.2]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.2
364 +
[0.1.1]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.1
365 +
[0.1.0]: https://github.com/strawlab/iana-time-zone/releases/tag/0.1.0
added vendor/iana-time-zone/Cargo.toml +91 −0
1 +
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
2 +
#
3 +
# When uploading crates to the registry Cargo will automatically
4 +
# "normalize" Cargo.toml files for maximal compatibility
5 +
# with all versions of Cargo and also rewrite `path` dependencies
6 +
# to registry (e.g., crates.io) dependencies.
7 +
#
8 +
# If you are reading this file be aware that the original Cargo.toml
9 +
# will likely look very different (and much more reasonable).
10 +
# See Cargo.toml.orig for the original contents.
11 +
12 +
[package]
13 +
edition = "2021"
14 +
rust-version = "1.62.0"
15 +
name = "iana-time-zone"
16 +
version = "0.1.65"
17 +
authors = [
18 +
    "Andrew Straw <[email protected]>",
19 +
    "René Kijewski <[email protected]>",
20 +
    "Ryan Lopopolo <[email protected]>",
21 +
]
22 +
build = false
23 +
autolib = false
24 +
autobins = false
25 +
autoexamples = false
26 +
autotests = false
27 +
autobenches = false
28 +
description = "get the IANA time zone for the current system"
29 +
readme = "README.md"
30 +
keywords = [
31 +
    "IANA",
32 +
    "time",
33 +
]
34 +
categories = [
35 +
    "date-and-time",
36 +
    "internationalization",
37 +
    "os",
38 +
]
39 +
license = "MIT OR Apache-2.0"
40 +
repository = "https://github.com/strawlab/iana-time-zone"
41 +
42 +
[features]
43 +
fallback = []
44 +
45 +
[lib]
46 +
name = "iana_time_zone"
47 +
path = "src/lib.rs"
48 +
49 +
[[example]]
50 +
name = "get_timezone"
51 +
path = "examples/get_timezone.rs"
52 +
53 +
[[example]]
54 +
name = "get_timezone_loop"
55 +
path = "examples/get_timezone_loop.rs"
56 +
57 +
[[example]]
58 +
name = "stress-test"
59 +
path = "examples/stress-test.rs"
60 +
61 +
[dev-dependencies.chrono-tz]
62 +
version = "0.10.1"
63 +
64 +
[dev-dependencies.getrandom]
65 +
version = "0.2.1"
66 +
67 +
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies.js-sys]
68 +
version = "0.3.66"
69 +
70 +
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies.log]
71 +
version = "0.4.14"
72 +
73 +
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies.wasm-bindgen]
74 +
version = "0.2.89"
75 +
76 +
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dev-dependencies.getrandom]
77 +
version = "0.2.1"
78 +
features = ["js"]
79 +
80 +
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dev-dependencies.wasm-bindgen-test]
81 +
version = "0.3.46"
82 +
83 +
[target.'cfg(target_os = "android")'.dependencies.android_system_properties]
84 +
version = "0.1.5"
85 +
86 +
[target.'cfg(target_os = "haiku")'.dependencies.iana-time-zone-haiku]
87 +
version = "0.1.1"
88 +
89 +
[target.'cfg(target_os = "windows")'.dependencies.windows-core]
90 +
version = ">=0.56, <=0.62"
91 +
added vendor/iana-time-zone/LICENSE-APACHE +201 −0
1 +
                              Apache License
2 +
                        Version 2.0, January 2004
3 +
                     http://www.apache.org/licenses/
4 +
5 +
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 +
7 +
1. Definitions.
8 +
9 +
   "License" shall mean the terms and conditions for use, reproduction,
10 +
   and distribution as defined by Sections 1 through 9 of this document.
11 +
12 +
   "Licensor" shall mean the copyright owner or entity authorized by
13 +
   the copyright owner that is granting the License.
14 +
15 +
   "Legal Entity" shall mean the union of the acting entity and all
16 +
   other entities that control, are controlled by, or are under common
17 +
   control with that entity. For the purposes of this definition,
18 +
   "control" means (i) the power, direct or indirect, to cause the
19 +
   direction or management of such entity, whether by contract or
20 +
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 +
   outstanding shares, or (iii) beneficial ownership of such entity.
22 +
23 +
   "You" (or "Your") shall mean an individual or Legal Entity
24 +
   exercising permissions granted by this License.
25 +
26 +
   "Source" form shall mean the preferred form for making modifications,
27 +
   including but not limited to software source code, documentation
28 +
   source, and configuration files.
29 +
30 +
   "Object" form shall mean any form resulting from mechanical
31 +
   transformation or translation of a Source form, including but
32 +
   not limited to compiled object code, generated documentation,
33 +
   and conversions to other media types.
34 +
35 +
   "Work" shall mean the work of authorship, whether in Source or
36 +
   Object form, made available under the License, as indicated by a
37 +
   copyright notice that is included in or attached to the work
38 +
   (an example is provided in the Appendix below).
39 +
40 +
   "Derivative Works" shall mean any work, whether in Source or Object
41 +
   form, that is based on (or derived from) the Work and for which the
42 +
   editorial revisions, annotations, elaborations, or other modifications
43 +
   represent, as a whole, an original work of authorship. For the purposes
44 +
   of this License, Derivative Works shall not include works that remain
45 +
   separable from, or merely link (or bind by name) to the interfaces of,
46 +
   the Work and Derivative Works thereof.
47 +
48 +
   "Contribution" shall mean any work of authorship, including
49 +
   the original version of the Work and any modifications or additions
50 +
   to that Work or Derivative Works thereof, that is intentionally
51 +
   submitted to Licensor for inclusion in the Work by the copyright owner
52 +
   or by an individual or Legal Entity authorized to submit on behalf of
53 +
   the copyright owner. For the purposes of this definition, "submitted"
54 +
   means any form of electronic, verbal, or written communication sent
55 +
   to the Licensor or its representatives, including but not limited to
56 +
   communication on electronic mailing lists, source code control systems,
57 +
   and issue tracking systems that are managed by, or on behalf of, the
58 +
   Licensor for the purpose of discussing and improving the Work, but
59 +
   excluding communication that is conspicuously marked or otherwise
60 +
   designated in writing by the copyright owner as "Not a Contribution."
61 +
62 +
   "Contributor" shall mean Licensor and any individual or Legal Entity
63 +
   on behalf of whom a Contribution has been received by Licensor and
64 +
   subsequently incorporated within the Work.
65 +
66 +
2. Grant of Copyright License. Subject to the terms and conditions of
67 +
   this License, each Contributor hereby grants to You a perpetual,
68 +
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 +
   copyright license to reproduce, prepare Derivative Works of,
70 +
   publicly display, publicly perform, sublicense, and distribute the
71 +
   Work and such Derivative Works in Source or Object form.
72 +
73 +
3. Grant of Patent License. Subject to the terms and conditions of
74 +
   this License, each Contributor hereby grants to You a perpetual,
75 +
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 +
   (except as stated in this section) patent license to make, have made,
77 +
   use, offer to sell, sell, import, and otherwise transfer the Work,
78 +
   where such license applies only to those patent claims licensable
79 +
   by such Contributor that are necessarily infringed by their
80 +
   Contribution(s) alone or by combination of their Contribution(s)
81 +
   with the Work to which such Contribution(s) was submitted. If You
82 +
   institute patent litigation against any entity (including a
83 +
   cross-claim or counterclaim in a lawsuit) alleging that the Work
84 +
   or a Contribution incorporated within the Work constitutes direct
85 +
   or contributory patent infringement, then any patent licenses
86 +
   granted to You under this License for that Work shall terminate
87 +
   as of the date such litigation is filed.
88 +
89 +
4. Redistribution. You may reproduce and distribute copies of the
90 +
   Work or Derivative Works thereof in any medium, with or without
91 +
   modifications, and in Source or Object form, provided that You
92 +
   meet the following conditions:
93 +
94 +
   (a) You must give any other recipients of the Work or
95 +
       Derivative Works a copy of this License; and
96 +
97 +
   (b) You must cause any modified files to carry prominent notices
98 +
       stating that You changed the files; and
99 +
100 +
   (c) You must retain, in the Source form of any Derivative Works
101 +
       that You distribute, all copyright, patent, trademark, and
102 +
       attribution notices from the Source form of the Work,
103 +
       excluding those notices that do not pertain to any part of
104 +
       the Derivative Works; and
105 +
106 +
   (d) If the Work includes a "NOTICE" text file as part of its
107 +
       distribution, then any Derivative Works that You distribute must
108 +
       include a readable copy of the attribution notices contained
109 +
       within such NOTICE file, excluding those notices that do not
110 +
       pertain to any part of the Derivative Works, in at least one
111 +
       of the following places: within a NOTICE text file distributed
112 +
       as part of the Derivative Works; within the Source form or
113 +
       documentation, if provided along with the Derivative Works; or,
114 +
       within a display generated by the Derivative Works, if and
115 +
       wherever such third-party notices normally appear. The contents
116 +
       of the NOTICE file are for informational purposes only and
117 +
       do not modify the License. You may add Your own attribution
118 +
       notices within Derivative Works that You distribute, alongside
119 +
       or as an addendum to the NOTICE text from the Work, provided
120 +
       that such additional attribution notices cannot be construed
121 +
       as modifying the License.
122 +
123 +
   You may add Your own copyright statement to Your modifications and
124 +
   may provide additional or different license terms and conditions
125 +
   for use, reproduction, or distribution of Your modifications, or
126 +
   for any such Derivative Works as a whole, provided Your use,
127 +
   reproduction, and distribution of the Work otherwise complies with
128 +
   the conditions stated in this License.
129 +
130 +
5. Submission of Contributions. Unless You explicitly state otherwise,
131 +
   any Contribution intentionally submitted for inclusion in the Work
132 +
   by You to the Licensor shall be under the terms and conditions of
133 +
   this License, without any additional terms or conditions.
134 +
   Notwithstanding the above, nothing herein shall supersede or modify
135 +
   the terms of any separate license agreement you may have executed
136 +
   with Licensor regarding such Contributions.
137 +
138 +
6. Trademarks. This License does not grant permission to use the trade
139 +
   names, trademarks, service marks, or product names of the Licensor,
140 +
   except as required for reasonable and customary use in describing the
141 +
   origin of the Work and reproducing the content of the NOTICE file.
142 +
143 +
7. Disclaimer of Warranty. Unless required by applicable law or
144 +
   agreed to in writing, Licensor provides the Work (and each
145 +
   Contributor provides its Contributions) on an "AS IS" BASIS,
146 +
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 +
   implied, including, without limitation, any warranties or conditions
148 +
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 +
   PARTICULAR PURPOSE. You are solely responsible for determining the
150 +
   appropriateness of using or redistributing the Work and assume any
151 +
   risks associated with Your exercise of permissions under this License.
152 +
153 +
8. Limitation of Liability. In no event and under no legal theory,
154 +
   whether in tort (including negligence), contract, or otherwise,
155 +
   unless required by applicable law (such as deliberate and grossly
156 +
   negligent acts) or agreed to in writing, shall any Contributor be
157 +
   liable to You for damages, including any direct, indirect, special,
158 +
   incidental, or consequential damages of any character arising as a
159 +
   result of this License or out of the use or inability to use the
160 +
   Work (including but not limited to damages for loss of goodwill,
161 +
   work stoppage, computer failure or malfunction, or any and all
162 +
   other commercial damages or losses), even if such Contributor
163 +
   has been advised of the possibility of such damages.
164 +
165 +
9. Accepting Warranty or Additional Liability. While redistributing
166 +
   the Work or Derivative Works thereof, You may choose to offer,
167 +
   and charge a fee for, acceptance of support, warranty, indemnity,
168 +
   or other liability obligations and/or rights consistent with this
169 +
   License. However, in accepting such obligations, You may act only
170 +
   on Your own behalf and on Your sole responsibility, not on behalf
171 +
   of any other Contributor, and only if You agree to indemnify,
172 +
   defend, and hold each Contributor harmless for any liability
173 +
   incurred by, or claims asserted against, such Contributor by reason
174 +
   of your accepting any such warranty or additional liability.
175 +
176 +
END OF TERMS AND CONDITIONS
177 +
178 +
APPENDIX: How to apply the Apache License to your work.
179 +
180 +
   To apply the Apache License to your work, attach the following
181 +
   boilerplate notice, with the fields enclosed by brackets "[]"
182 +
   replaced with your own identifying information. (Don't include
183 +
   the brackets!)  The text should be enclosed in the appropriate
184 +
   comment syntax for the file format. We also recommend that a
185 +
   file or class name and description of purpose be included on the
186 +
   same "printed page" as the copyright notice for easier
187 +
   identification within third-party archives.
188 +
189 +
Copyright 2020 Andrew Straw
190 +
191 +
Licensed under the Apache License, Version 2.0 (the "License");
192 +
you may not use this file except in compliance with the License.
193 +
You may obtain a copy of the License at
194 +
195 +
	http://www.apache.org/licenses/LICENSE-2.0
196 +
197 +
Unless required by applicable law or agreed to in writing, software
198 +
distributed under the License is distributed on an "AS IS" BASIS,
199 +
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 +
See the License for the specific language governing permissions and
201 +
limitations under the License.
added vendor/iana-time-zone/LICENSE-MIT +25 −0
1 +
Copyright (c) 2020 Andrew D. Straw
2 +
3 +
Permission is hereby granted, free of charge, to any
4 +
person obtaining a copy of this software and associated
5 +
documentation files (the "Software"), to deal in the
6 +
Software without restriction, including without
7 +
limitation the rights to use, copy, modify, merge,
8 +
publish, distribute, sublicense, and/or sell copies of
9 +
the Software, and to permit persons to whom the Software
10 +
is furnished to do so, subject to the following
11 +
conditions:
12 +
13 +
The above copyright notice and this permission notice
14 +
shall be included in all copies or substantial portions
15 +
of the Software.
16 +
17 +
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
18 +
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19 +
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
20 +
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
21 +
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22 +
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 +
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
24 +
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 +
DEALINGS IN THE SOFTWARE.
added vendor/iana-time-zone/PATCHED.md +9 −0
1 +
# iana-time-zone 0.1.65, patched for Oxygen
2 +
3 +
The crate as published on crates.io (MIT OR Apache-2.0, see LICENSE-*),
4 +
with one change: on Apple targets the time zone is read from
5 +
`/etc/localtime`, as on Linux, instead of through CoreFoundation, so the
6 +
crate needs no Apple framework and the macOS cross build links. It is
7 +
pulled in by `chrono`'s `clock` feature through `object_store`, which
8 +
only ever uses UTC. Used through `[patch.crates-io]` in the workspace
9 +
`Cargo.toml`.
added vendor/iana-time-zone/README.md +51 −0
1 +
# iana-time-zone - get the IANA time zone for the current system
2 +
3 +
[![Crates.io](https://img.shields.io/crates/v/iana-time-zone.svg)](https://crates.io/crates/iana-time-zone)
4 +
[![Documentation](https://docs.rs/iana-time-zone/badge.svg)](https://docs.rs/iana-time-zone/)
5 +
[![Crate License](https://img.shields.io/crates/l/iana-time-zone.svg)](https://crates.io/crates/iana-time-zone)
6 +
[![build](https://github.com/strawlab/iana-time-zone/actions/workflows/rust.yml/badge.svg)](https://github.com/strawlab/iana-time-zone/actions?query=branch%3Amain)
7 +
8 +
This small utility crate gets the IANA time zone for the current system. This is
9 +
also known as the [tz database], tzdata, the zoneinfo database, and the Olson
10 +
database.
11 +
12 +
[tz database]: https://en.wikipedia.org/wiki/Tz_database
13 +
14 +
Example:
15 +
16 +
```rust
17 +
// Get the current time zone as a string.
18 +
let tz_str = iana_time_zone::get_timezone()?;
19 +
println!("The current time zone is: {}", tz_str);
20 +
```
21 +
22 +
You can test this is working on your platform with:
23 +
24 +
```
25 +
cargo run --example get_timezone
26 +
```
27 +
28 +
## Minimum supported rust version policy
29 +
30 +
This crate has a minimum supported rust version (MSRV) of 1.62.0 for [Tier 1]
31 +
platforms.
32 +
33 +
[tier 1]: https://doc.rust-lang.org/1.62.0/rustc/platform-support.html
34 +
35 +
Updates to the MSRV are sometimes necessary due to the MSRV of dependencies.
36 +
MSRV updates will not be indicated as a breaking change to the semver version.
37 +
38 +
## License
39 +
40 +
Licensed under either of
41 +
42 +
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
43 +
  <http://www.apache.org/licenses/LICENSE-2.0>)
44 +
- MIT license ([LICENSE-MIT](LICENSE-MIT) or
45 +
  <http://opensource.org/licenses/MIT>)
46 +
47 +
at your option.
48 +
49 +
Unless you explicitly state otherwise, any contribution intentionally submitted
50 +
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
51 +
dual licensed as above, without any additional terms or conditions.
added vendor/iana-time-zone/src/ffi_utils.rs +718 −0
1 +
//! Cross platform FFI helpers.
2 +
3 +
#[cfg(any(test, target_os = "android"))]
4 +
use std::ffi::CStr;
5 +
6 +
/// A buffer to store the timezone name when calling the C API.
7 +
#[cfg(any(test, target_vendor = "apple", target_env = "ohos"))]
8 +
pub(crate) mod buffer {
9 +
    /// The longest name in the IANA time zone database is 32 ASCII characters long.
10 +
    pub const MAX_LEN: usize = 64;
11 +
12 +
    /// Return a buffer to store the timezone name.
13 +
    ///
14 +
    /// The buffer is used to store the timezone name when calling the C API.
15 +
    pub const fn tzname_buf() -> [u8; MAX_LEN] {
16 +
        [0; MAX_LEN]
17 +
    }
18 +
}
19 +
20 +
// The system property named 'persist.sys.timezone' contains the name of the
21 +
// current timezone.
22 +
//
23 +
// From https://android.googlesource.com/platform/bionic/+/gingerbread-release/libc/docs/OVERVIEW.TXT#79:
24 +
//
25 +
// > The name of the current timezone is taken from the TZ environment variable,
26 +
// > if defined. Otherwise, the system property named 'persist.sys.timezone' is
27 +
// > checked instead.
28 +
//
29 +
// TODO: Use a `c"..."` literal when MSRV is upgraded beyond 1.77.0.
30 +
// https://doc.rust-lang.org/edition-guide/rust-2021/c-string-literals.html
31 +
#[cfg(any(test, target_os = "android"))]
32 +
const ANDROID_TIMEZONE_PROPERTY_NAME: &[u8] = b"persist.sys.timezone\0";
33 +
34 +
/// Return a [`CStr`] to access the timezone from an Android system properties
35 +
/// environment.
36 +
#[cfg(any(test, target_os = "android"))]
37 +
pub(crate) fn android_timezone_property_name() -> &'static CStr {
38 +
    // In tests or debug mode, opt into extra runtime checks.
39 +
    if cfg!(any(test, debug_assertions)) {
40 +
        return CStr::from_bytes_with_nul(ANDROID_TIMEZONE_PROPERTY_NAME).unwrap();
41 +
    }
42 +
43 +
    // SAFETY: the key is NUL-terminated and there are no other NULs, this
44 +
    // invariant is checked in tests.
45 +
    unsafe { CStr::from_bytes_with_nul_unchecked(ANDROID_TIMEZONE_PROPERTY_NAME) }
46 +
}
47 +
48 +
#[cfg(test)]
49 +
mod tests {
50 +
    use core::mem::size_of_val;
51 +
    use std::ffi::CStr;
52 +
53 +
    use super::buffer::{tzname_buf, MAX_LEN};
54 +
    use super::{android_timezone_property_name, ANDROID_TIMEZONE_PROPERTY_NAME};
55 +
56 +
    #[test]
57 +
    fn test_android_timezone_property_name_is_valid_cstr() {
58 +
        CStr::from_bytes_with_nul(ANDROID_TIMEZONE_PROPERTY_NAME).unwrap();
59 +
60 +
        let mut invalid_property_name = ANDROID_TIMEZONE_PROPERTY_NAME.to_owned();
61 +
        invalid_property_name.push(b'\0');
62 +
        CStr::from_bytes_with_nul(&invalid_property_name).unwrap_err();
63 +
    }
64 +
65 +
    #[test]
66 +
    fn test_android_timezone_property_name_getter() {
67 +
        let key = android_timezone_property_name().to_bytes_with_nul();
68 +
        assert_eq!(key, ANDROID_TIMEZONE_PROPERTY_NAME);
69 +
        std::str::from_utf8(key).unwrap();
70 +
    }
71 +
72 +
    /// An exhaustive set of IANA timezone names for testing.
73 +
    ///
74 +
    /// Pulled from Wikipedia as of Sat March 22, 2025:
75 +
    ///
76 +
    /// - <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>
77 +
    /// - <https://en.wikipedia.org/w/index.php?title=List_of_tz_database_time_zones&oldid=1281103182>
78 +
    static KNOWN_TIMEZONE_NAMES: &[&str] = &[
79 +
        "Africa/Abidjan",
80 +
        "Africa/Accra",
81 +
        "Africa/Addis_Ababa",
82 +
        "Africa/Algiers",
83 +
        "Africa/Asmara",
84 +
        "Africa/Asmera",
85 +
        "Africa/Bamako",
86 +
        "Africa/Bangui",
87 +
        "Africa/Banjul",
88 +
        "Africa/Bissau",
89 +
        "Africa/Blantyre",
90 +
        "Africa/Brazzaville",
91 +
        "Africa/Bujumbura",
92 +
        "Africa/Cairo",
93 +
        "Africa/Casablanca",
94 +
        "Africa/Conakry",
95 +
        "Africa/Dakar",
96 +
        "Africa/Dar_es_Salaam",
97 +
        "Africa/Djibouti",
98 +
        "Africa/Douala",
99 +
        "Africa/El_Aaiun",
100 +
        "Africa/Freetown",
101 +
        "Africa/Gaborone",
102 +
        "Africa/Harare",
103 +
        "Africa/Johannesburg",
104 +
        "Africa/Juba",
105 +
        "Africa/Kampala",
106 +
        "Africa/Khartoum",
107 +
        "Africa/Kigali",
108 +
        "Africa/Libreville",
109 +
        "Africa/Lome",
110 +
        "Africa/Luanda",
111 +
        "Africa/Lusaka",
112 +
        "Africa/Malabo",
113 +
        "Africa/Maseru",
114 +
        "Africa/Mbabane",
115 +
        "Africa/Mogadishu",
116 +
        "Africa/Monrovia",
117 +
        "Africa/Nairobi",
118 +
        "Africa/Ndjamena",
119 +
        "Africa/Niamey",
120 +
        "Africa/Nouakchott",
121 +
        "Africa/Ouagadougou",
122 +
        "Africa/Porto-Novo",
123 +
        "Africa/Sao_Tome",
124 +
        "Africa/Timbuktu",
125 +
        "Africa/Tripoli",
126 +
        "Africa/Tunis",
127 +
        "Africa/Windhoek",
128 +
        "America/Anguilla",
129 +
        "America/Antigua",
130 +
        "America/Argentina/ComodRivadavia",
131 +
        "America/Aruba",
132 +
        "America/Asuncion",
133 +
        "America/Atka",
134 +
        "America/Barbados",
135 +
        "America/Belize",
136 +
        "America/Bogota",
137 +
        "America/Buenos_Aires",
138 +
        "America/Caracas",
139 +
        "America/Catamarca",
140 +
        "America/Cayenne",
141 +
        "America/Cayman",
142 +
        "America/Coral_Harbour",
143 +
        "America/Cordoba",
144 +
        "America/Costa_Rica",
145 +
        "America/Curacao",
146 +
        "America/Dominica",
147 +
        "America/El_Salvador",
148 +
        "America/Ensenada",
149 +
        "America/Fort_Wayne",
150 +
        "America/Godthab",
151 +
        "America/Grand_Turk",
152 +
        "America/Grenada",
153 +
        "America/Guadeloupe",
154 +
        "America/Guatemala",
155 +
        "America/Guyana",
156 +
        "America/Havana",
157 +
        "America/Indianapolis",
158 +
        "America/Jamaica",
159 +
        "America/Jujuy",
160 +
        "America/Knox_IN",
161 +
        "America/Kralendijk",
162 +
        "America/La_Paz",
163 +
        "America/Lima",
164 +
        "America/Louisville",
165 +
        "America/Lower_Princes",
166 +
        "America/Managua",
167 +
        "America/Marigot",
168 +
        "America/Martinique",
169 +
        "America/Mendoza",
170 +
        "America/Miquelon",
171 +
        "America/Montevideo",
172 +
        "America/Montreal",
173 +
        "America/Montserrat",
174 +
        "America/Nassau",
175 +
        "America/Nipigon",
176 +
        "America/Pangnirtung",
177 +
        "America/Paramaribo",
178 +
        "America/Port-au-Prince",
179 +
        "America/Port_of_Spain",
180 +
        "America/Porto_Acre",
181 +
        "America/Rainy_River",
182 +
        "America/Rosario",
183 +
        "America/Santa_Isabel",
184 +
        "America/Santo_Domingo",
185 +
        "America/Shiprock",
186 +
        "America/St_Barthelemy",
187 +
        "America/St_Kitts",
188 +
        "America/St_Lucia",
189 +
        "America/St_Thomas",
190 +
        "America/St_Vincent",
191 +
        "America/Tegucigalpa",
192 +
        "America/Thunder_Bay",
193 +
        "America/Tortola",
194 +
        "America/Virgin",
195 +
        "America/Yellowknife",
196 +
        "Antarctica/South_Pole",
197 +
        "Arctic/Longyearbyen",
198 +
        "Asia/Aden",
199 +
        "Asia/Amman",
200 +
        "Asia/Ashgabat",
201 +
        "Asia/Ashkhabad",
202 +
        "Asia/Baghdad",
203 +
        "Asia/Bahrain",
204 +
        "Asia/Baku",
205 +
        "Asia/Beirut",
206 +
        "Asia/Bishkek",
207 +
        "Asia/Brunei",
208 +
        "Asia/Calcutta",
209 +
        "Asia/Choibalsan",
210 +
        "Asia/Chongqing",
211 +
        "Asia/Chungking",
212 +
        "Asia/Colombo",
213 +
        "Asia/Dacca",
214 +
        "Asia/Damascus",
215 +
        "Asia/Dhaka",
216 +
        "Asia/Dili",
217 +
        "Asia/Dushanbe",
218 +
        "Asia/Harbin",
219 +
        "Asia/Hong_Kong",
220 +
        "Asia/Istanbul",
221 +
        "Asia/Jerusalem",
222 +
        "Asia/Kabul",
223 +
        "Asia/Karachi",
224 +
        "Asia/Kashgar",
225 +
        "Asia/Kathmandu",
226 +
        "Asia/Katmandu",
227 +
        "Asia/Kolkata",
228 +
        "Asia/Kuwait",
229 +
        "Asia/Macao",
230 +
        "Asia/Macau",
231 +
        "Asia/Manila",
232 +
        "Asia/Muscat",
233 +
        "Asia/Phnom_Penh",
234 +
        "Asia/Pyongyang",
235 +
        "Asia/Qatar",
236 +
        "Asia/Rangoon",
237 +
        "Asia/Saigon",
238 +
        "Asia/Seoul",
239 +
        "Asia/Taipei",
240 +
        "Asia/Tbilisi",
241 +
        "Asia/Tehran",
242 +
        "Asia/Tel_Aviv",
243 +
        "Asia/Thimbu",
244 +
        "Asia/Thimphu",
245 +
        "Asia/Ujung_Pandang",
246 +
        "Asia/Ulan_Bator",
247 +
        "Asia/Vientiane",
248 +
        "Asia/Yangon",
249 +
        "Asia/Yerevan",
250 +
        "Atlantic/Bermuda",
251 +
        "Atlantic/Cape_Verde",
252 +
        "Atlantic/Faeroe",
253 +
        "Atlantic/Faroe",
254 +
        "Atlantic/Jan_Mayen",
255 +
        "Atlantic/Reykjavik",
256 +
        "Atlantic/South_Georgia",
257 +
        "Atlantic/St_Helena",
258 +
        "Atlantic/Stanley",
259 +
        "Australia/ACT",
260 +
        "Australia/Canberra",
261 +
        "Australia/Currie",
262 +
        "Australia/LHI",
263 +
        "Australia/North",
264 +
        "Australia/NSW",
265 +
        "Australia/Queensland",
266 +
        "Australia/South",
267 +
        "Australia/Tasmania",
268 +
        "Australia/Victoria",
269 +
        "Australia/West",
270 +
        "Australia/Yancowinna",
271 +
        "Brazil/Acre",
272 +
        "Brazil/DeNoronha",
273 +
        "Brazil/East",
274 +
        "Brazil/West",
275 +
        "Canada/Atlantic",
276 +
        "Canada/Central",
277 +
        "Canada/Eastern",
278 +
        "Canada/Mountain",
279 +
        "Canada/Newfoundland",
280 +
        "Canada/Pacific",
281 +
        "Canada/Saskatchewan",
282 +
        "Canada/Yukon",
283 +
        "CET",
284 +
        "Chile/Continental",
285 +
        "Chile/EasterIsland",
286 +
        "CST6CDT",
287 +
        "Cuba",
288 +
        "EET",
289 +
        "Egypt",
290 +
        "Eire",
291 +
        "EST",
292 +
        "EST5EDT",
293 +
        "Etc/GMT",
294 +
        "Etc/GMT+0",
295 +
        "Etc/GMT+1",
296 +
        "Etc/GMT+10",
297 +
        "Etc/GMT+11",
298 +
        "Etc/GMT+12",
299 +
        "Etc/GMT+2",
300 +
        "Etc/GMT+3",
301 +
        "Etc/GMT+4",
302 +
        "Etc/GMT+5",
303 +
        "Etc/GMT+6",
304 +
        "Etc/GMT+7",
305 +
        "Etc/GMT+8",
306 +
        "Etc/GMT+9",
307 +
        "Etc/GMT-0",
308 +
        "Etc/GMT-1",
309 +
        "Etc/GMT-10",
310 +
        "Etc/GMT-11",
311 +
        "Etc/GMT-12",
312 +
        "Etc/GMT-13",
313 +
        "Etc/GMT-14",
314 +
        "Etc/GMT-2",
315 +
        "Etc/GMT-3",
316 +
        "Etc/GMT-4",
317 +
        "Etc/GMT-5",
318 +
        "Etc/GMT-6",
319 +
        "Etc/GMT-7",
320 +
        "Etc/GMT-8",
321 +
        "Etc/GMT-9",
322 +
        "Etc/GMT0",
323 +
        "Etc/Greenwich",
324 +
        "Etc/UCT",
325 +
        "Etc/Universal",
326 +
        "Etc/UTC",
327 +
        "Etc/Zulu",
328 +
        "Europe/Amsterdam",
329 +
        "Europe/Andorra",
330 +
        "Europe/Athens",
331 +
        "Europe/Belfast",
332 +
        "Europe/Belgrade",
333 +
        "Europe/Bratislava",
334 +
        "Europe/Brussels",
335 +
        "Europe/Bucharest",
336 +
        "Europe/Budapest",
337 +
        "Europe/Chisinau",
338 +
        "Europe/Copenhagen",
339 +
        "Europe/Dublin",
340 +
        "Europe/Gibraltar",
341 +
        "Europe/Guernsey",
342 +
        "Europe/Helsinki",
343 +
        "Europe/Isle_of_Man",
344 +
        "Europe/Istanbul",
345 +
        "Europe/Jersey",
346 +
        "Europe/Kiev",
347 +
        "Europe/Ljubljana",
348 +
        "Europe/London",
349 +
        "Europe/Luxembourg",
350 +
        "Europe/Malta",
351 +
        "Europe/Mariehamn",
352 +
        "Europe/Minsk",
353 +
        "Europe/Monaco",
354 +
        "Europe/Nicosia",
355 +
        "Europe/Oslo",
356 +
        "Europe/Paris",
357 +
        "Europe/Podgorica",
358 +
        "Europe/Prague",
359 +
        "Europe/Riga",
360 +
        "Europe/Rome",
361 +
        "Europe/San_Marino",
362 +
        "Europe/Sarajevo",
363 +
        "Europe/Skopje",
364 +
        "Europe/Sofia",
365 +
        "Europe/Stockholm",
366 +
        "Europe/Tallinn",
367 +
        "Europe/Tirane",
368 +
        "Europe/Tiraspol",
369 +
        "Europe/Uzhgorod",
370 +
        "Europe/Vaduz",
371 +
        "Europe/Vatican",
372 +
        "Europe/Vienna",
373 +
        "Europe/Vilnius",
374 +
        "Europe/Warsaw",
375 +
        "Europe/Zagreb",
376 +
        "Europe/Zaporozhye",
377 +
        "Factory",
378 +
        "GB",
379 +
        "GB-Eire",
380 +
        "GMT",
381 +
        "GMT+0",
382 +
        "GMT-0",
383 +
        "GMT0",
384 +
        "Greenwich",
385 +
        "Hongkong",
386 +
        "HST",
387 +
        "Iceland",
388 +
        "Indian/Antananarivo",
389 +
        "Indian/Chagos",
390 +
        "Indian/Christmas",
391 +
        "Indian/Cocos",
392 +
        "Indian/Comoro",
393 +
        "Indian/Kerguelen",
394 +
        "Indian/Mahe",
395 +
        "Indian/Mauritius",
396 +
        "Indian/Mayotte",
397 +
        "Indian/Reunion",
398 +
        "Iran",
399 +
        "Israel",
400 +
        "Jamaica",
401 +
        "Japan",
402 +
        "Kwajalein",
403 +
        "Libya",
404 +
        "MET",
405 +
        "Mexico/BajaNorte",
406 +
        "Mexico/BajaSur",
407 +
        "Mexico/General",
408 +
        "MST",
409 +
        "MST7MDT",
410 +
        "Navajo",
411 +
        "NZ",
412 +
        "NZ-CHAT",
413 +
        "Pacific/Apia",
414 +
        "Pacific/Efate",
415 +
        "Pacific/Enderbury",
416 +
        "Pacific/Fakaofo",
417 +
        "Pacific/Fiji",
418 +
        "Pacific/Funafuti",
419 +
        "Pacific/Guam",
420 +
        "Pacific/Johnston",
421 +
        "Pacific/Nauru",
422 +
        "Pacific/Niue",
423 +
        "Pacific/Norfolk",
424 +
        "Pacific/Noumea",
425 +
        "Pacific/Palau",
426 +
        "Pacific/Pitcairn",
427 +
        "Pacific/Ponape",
428 +
        "Pacific/Rarotonga",
429 +
        "Pacific/Saipan",
430 +
        "Pacific/Samoa",
431 +
        "Pacific/Tongatapu",
432 +
        "Pacific/Truk",
433 +
        "Pacific/Wallis",
434 +
        "Pacific/Yap",
435 +
        "Poland",
436 +
        "Portugal",
437 +
        "PRC",
438 +
        "PST8PDT",
439 +
        "ROC",
440 +
        "ROK",
441 +
        "Singapore",
442 +
        "Turkey",
443 +
        "UCT",
444 +
        "Universal",
445 +
        "US/Alaska",
446 +
        "US/Aleutian",
447 +
        "US/Arizona",
448 +
        "US/Central",
449 +
        "US/East-Indiana",
450 +
        "US/Eastern",
451 +
        "US/Hawaii",
452 +
        "US/Indiana-Starke",
453 +
        "US/Michigan",
454 +
        "US/Mountain",
455 +
        "US/Pacific",
456 +
        "US/Samoa",
457 +
        "UTC",
458 +
        "W-SU",
459 +
        "WET",
460 +
        "Zulu",
461 +
        "America/Rio_Branco",
462 +
        "America/Maceio",
463 +
        "America/Metlakatla",
464 +
        "America/Juneau",
465 +
        "America/Sitka",
466 +
        "America/Adak",
467 +
        "America/Yakutat",
468 +
        "America/Anchorage",
469 +
        "America/Nome",
470 +
        "America/Manaus",
471 +
        "America/Eirunepe",
472 +
        "Asia/Aqtobe",
473 +
        "America/Blanc-Sablon",
474 +
        "America/Puerto_Rico",
475 +
        "America/Goose_Bay",
476 +
        "America/Moncton",
477 +
        "America/Glace_Bay",
478 +
        "America/Halifax",
479 +
        "America/Noronha",
480 +
        "Asia/Atyrau",
481 +
        "Atlantic/Azores",
482 +
        "America/Bahia",
483 +
        "America/Bahia_Banderas",
484 +
        "America/Tijuana",
485 +
        "America/Mazatlan",
486 +
        "Asia/Hovd",
487 +
        "Asia/Shanghai",
488 +
        "Asia/Makassar",
489 +
        "Asia/Pontianak",
490 +
        "Pacific/Bougainville",
491 +
        "America/Fortaleza",
492 +
        "America/Sao_Paulo",
493 +
        "America/Argentina/Buenos_Aires",
494 +
        "Europe/Busingen",
495 +
        "Europe/Zurich",
496 +
        "America/Merida",
497 +
        "Atlantic/Canary",
498 +
        "Antarctica/Casey",
499 +
        "America/Argentina/Catamarca",
500 +
        "America/Indiana/Tell_City",
501 +
        "America/Indiana/Knox",
502 +
        "America/Menominee",
503 +
        "America/North_Dakota/Beulah",
504 +
        "America/North_Dakota/New_Salem",
505 +
        "America/North_Dakota/Center",
506 +
        "America/Rankin_Inlet",
507 +
        "America/Resolute",
508 +
        "America/Winnipeg",
509 +
        "America/Chicago",
510 +
        "Africa/Maputo",
511 +
        "America/Mexico_City",
512 +
        "Africa/Ceuta",
513 +
        "Pacific/Chatham",
514 +
        "America/Chihuahua",
515 +
        "America/Ojinaga",
516 +
        "America/Ciudad_Juarez",
517 +
        "Pacific/Chuuk",
518 +
        "America/Matamoros",
519 +
        "Europe/Simferopol",
520 +
        "Asia/Dubai",
521 +
        "America/Swift_Current",
522 +
        "America/Regina",
523 +
        "Antarctica/Davis",
524 +
        "Africa/Lubumbashi",
525 +
        "Africa/Kinshasa",
526 +
        "Antarctica/DumontDUrville",
527 +
        "America/Monterrey",
528 +
        "Pacific/Easter",
529 +
        "America/Indiana/Marengo",
530 +
        "America/Indiana/Vincennes",
531 +
        "America/Indiana/Indianapolis",
532 +
        "America/Indiana/Petersburg",
533 +
        "America/Indiana/Winamac",
534 +
        "America/Indiana/Vevay",
535 +
        "America/Kentucky/Louisville",
536 +
        "America/Kentucky/Monticello",
537 +
        "America/Detroit",
538 +
        "America/Iqaluit",
539 +
        "America/Toronto",
540 +
        "America/New_York",
541 +
        "America/Guayaquil",
542 +
        "America/Atikokan",
543 +
        "America/Panama",
544 +
        "Asia/Tokyo",
545 +
        "Pacific/Galapagos",
546 +
        "Pacific/Gambier",
547 +
        "Asia/Gaza",
548 +
        "Pacific/Tarawa",
549 +
        "Pacific/Honolulu",
550 +
        "Asia/Jakarta",
551 +
        "America/Argentina/Jujuy",
552 +
        "Indian/Maldives",
553 +
        "Pacific/Kosrae",
554 +
        "Pacific/Kwajalein",
555 +
        "America/Argentina/La_Rioja",
556 +
        "Pacific/Kiritimati",
557 +
        "Australia/Lord_Howe",
558 +
        "Antarctica/Macquarie",
559 +
        "Atlantic/Madeira",
560 +
        "Asia/Kuala_Lumpur",
561 +
        "Asia/Aqtau",
562 +
        "Pacific/Marquesas",
563 +
        "America/Cuiaba",
564 +
        "America/Campo_Grande",
565 +
        "Antarctica/Mawson",
566 +
        "America/Argentina/Mendoza",
567 +
        "Pacific/Pago_Pago",
568 +
        "Pacific/Midway",
569 +
        "America/Argentina/Cordoba",
570 +
        "America/Santiago",
571 +
        "Asia/Nicosia",
572 +
        "Europe/Berlin",
573 +
        "America/Nuuk",
574 +
        "Asia/Almaty",
575 +
        "Pacific/Majuro",
576 +
        "Asia/Ulaanbaatar",
577 +
        "Europe/Kyiv",
578 +
        "America/Edmonton",
579 +
        "America/Boise",
580 +
        "America/Inuvik",
581 +
        "America/Cambridge_Bay",
582 +
        "America/Denver",
583 +
        "Europe/Kaliningrad",
584 +
        "Europe/Kirov",
585 +
        "Europe/Moscow",
586 +
        "Europe/Volgograd",
587 +
        "Europe/Astrakhan",
588 +
        "Europe/Samara",
589 +
        "Europe/Saratov",
590 +
        "Europe/Ulyanovsk",
591 +
        "Asia/Yekaterinburg",
592 +
        "Asia/Omsk",
593 +
        "Asia/Barnaul",
594 +
        "Asia/Novokuznetsk",
595 +
        "Asia/Krasnoyarsk",
596 +
        "Asia/Novosibirsk",
597 +
        "Asia/Tomsk",
598 +
        "Asia/Irkutsk",
599 +
        "Asia/Yakutsk",
600 +
        "Asia/Khandyga",
601 +
        "Asia/Chita",
602 +
        "Asia/Vladivostok",
603 +
        "Asia/Ust-Nera",
604 +
        "Asia/Magadan",
605 +
        "Asia/Srednekolymsk",
606 +
        "Asia/Sakhalin",
607 +
        "Asia/Anadyr",
608 +
        "Asia/Kamchatka",
609 +
        "America/Phoenix",
610 +
        "America/Creston",
611 +
        "America/Dawson_Creek",
612 +
        "America/Fort_Nelson",
613 +
        "America/Whitehorse",
614 +
        "America/Dawson",
615 +
        "America/Danmarkshavn",
616 +
        "Asia/Jayapura",
617 +
        "Australia/Sydney",
618 +
        "Australia/Broken_Hill",
619 +
        "Pacific/Auckland",
620 +
        "Antarctica/McMurdo",
621 +
        "America/St_Johns",
622 +
        "Asia/Bangkok",
623 +
        "Asia/Famagusta",
624 +
        "Australia/Darwin",
625 +
        "America/Los_Angeles",
626 +
        "America/Vancouver",
627 +
        "Antarctica/Palmer",
628 +
        "Pacific/Port_Moresby",
629 +
        "America/Belem",
630 +
        "America/Santarem",
631 +
        "Asia/Singapore",
632 +
        "America/Recife",
633 +
        "Pacific/Kanton",
634 +
        "Pacific/Guadalcanal",
635 +
        "Pacific/Pohnpei",
636 +
        "Europe/Lisbon",
637 +
        "Asia/Qostanay",
638 +
        "Australia/Brisbane",
639 +
        "Australia/Lindeman",
640 +
        "America/Cancun",
641 +
        "Asia/Qyzylorda",
642 +
        "America/Punta_Arenas",
643 +
        "America/Porto_Velho",
644 +
        "America/Boa_Vista",
645 +
        "Antarctica/Rothera",
646 +
        "Asia/Kuching",
647 +
        "America/Argentina/Salta",
648 +
        "America/Argentina/San_Juan",
649 +
        "America/Argentina/San_Luis",
650 +
        "America/Argentina/Rio_Gallegos",
651 +
        "America/Scoresbysund",
652 +
        "Pacific/Tahiti",
653 +
        "America/Hermosillo",
654 +
        "Australia/Adelaide",
655 +
        "Asia/Ho_Chi_Minh",
656 +
        "Europe/Madrid",
657 +
        "Antarctica/Syowa",
658 +
        "Asia/Riyadh",
659 +
        "Australia/Hobart",
660 +
        "America/Thule",
661 +
        "America/Argentina/Ushuaia",
662 +
        "America/Araguaina",
663 +
        "Antarctica/Troll",
664 +
        "America/Argentina/Tucuman",
665 +
        "Asia/Tashkent",
666 +
        "Asia/Samarkand",
667 +
        "Australia/Melbourne",
668 +
        "Antarctica/Vostok",
669 +
        "Pacific/Wake",
670 +
        "Africa/Lagos",
671 +
        "Asia/Hebron",
672 +
        "Asia/Oral",
673 +
        "Australia/Eucla",
674 +
        "Australia/Perth",
675 +
        "Asia/Urumqi",
676 +
    ];
677 +
678 +
    #[test]
679 +
    fn test_tzname_buffer_fits_all_iana_names() {
680 +
        let buf = tzname_buf();
681 +
        let max_len = buf.len();
682 +
683 +
        let mut failed_tz_names = vec![];
684 +
685 +
        for &tz in KNOWN_TIMEZONE_NAMES {
686 +
            // Require max_len + 1 to account for an optional NUL terminator.
687 +
            if tz.len() >= max_len {
688 +
                failed_tz_names.push(tz);
689 +
            }
690 +
        }
691 +
692 +
        assert!(
693 +
            failed_tz_names.is_empty(),
694 +
            "One or more timezone names exceed the buffer length of {}. Max length of found timezone: {}\n{:?}",
695 +
            max_len,
696 +
            failed_tz_names.iter().map(|s| s.len()).max().unwrap(),
697 +
            failed_tz_names
698 +
        );
699 +
    }
700 +
701 +
    #[test]
702 +
    fn test_tzname_buffer_correct_size() {
703 +
        assert_eq!(
704 +
            MAX_LEN, 64,
705 +
            "Buffer length changed unexpectedly, ensure consistency with documented limit."
706 +
        );
707 +
        assert_eq!(
708 +
            tzname_buf().len(),
709 +
            MAX_LEN,
710 +
            "Buffer length changed unexpectedly, ensure consistency with documented limit."
711 +
        );
712 +
        assert_eq!(
713 +
            size_of_val(&tzname_buf()),
714 +
            MAX_LEN,
715 +
            "Buffer length changed unexpectedly, ensure consistency with documented limit."
716 +
        );
717 +
    }
718 +
}
added vendor/iana-time-zone/src/lib.rs +127 −0
1 +
#![warn(clippy::all)]
2 +
#![warn(clippy::cargo)]
3 +
#![warn(clippy::undocumented_unsafe_blocks)]
4 +
#![allow(unknown_lints)]
5 +
#![warn(missing_copy_implementations)]
6 +
#![warn(missing_debug_implementations)]
7 +
#![warn(missing_docs)]
8 +
#![warn(rust_2018_idioms)]
9 +
#![warn(trivial_casts, trivial_numeric_casts)]
10 +
#![warn(unused_qualifications)]
11 +
#![warn(variant_size_differences)]
12 +
13 +
//! get the IANA time zone for the current system
14 +
//!
15 +
//! This small utility crate provides the
16 +
//! [`get_timezone()`](fn.get_timezone.html) function.
17 +
//!
18 +
//! ```rust
19 +
//! // Get the current time zone as a string.
20 +
//! let tz_str = iana_time_zone::get_timezone()?;
21 +
//! println!("The current time zone is: {}", tz_str);
22 +
//! # Ok::<(), iana_time_zone::GetTimezoneError>(())
23 +
//! ```
24 +
//!
25 +
//! The resulting string can be parsed to a
26 +
//! [`chrono-tz::Tz`](https://docs.rs/chrono-tz/latest/chrono_tz/enum.Tz.html)
27 +
//! variant like this:
28 +
//! ```rust
29 +
//! let tz_str = iana_time_zone::get_timezone()?;
30 +
//! let tz: chrono_tz::Tz = tz_str.parse()?;
31 +
//! # Ok::<(), Box<dyn std::error::Error>>(())
32 +
//! ```
33 +
34 +
#[allow(dead_code)]
35 +
mod ffi_utils;
36 +
37 +
#[cfg_attr(
38 +
    any(all(target_os = "linux", not(target_env = "ohos")), target_os = "hurd"),
39 +
    path = "tz_linux.rs"
40 +
)]
41 +
#[cfg_attr(all(target_os = "linux", target_env = "ohos"), path = "tz_ohos.rs")]
42 +
#[cfg_attr(target_os = "windows", path = "tz_windows.rs")]
43 +
#[cfg_attr(target_vendor = "apple", path = "tz_linux.rs")]
44 +
#[cfg_attr(
45 +
    all(target_arch = "wasm32", target_os = "unknown"),
46 +
    path = "tz_wasm32_unknown.rs"
47 +
)]
48 +
#[cfg_attr(
49 +
    all(target_arch = "wasm32", target_os = "emscripten"),
50 +
    path = "tz_wasm32_emscripten.rs"
51 +
)]
52 +
#[cfg_attr(
53 +
    any(target_os = "freebsd", target_os = "dragonfly"),
54 +
    path = "tz_freebsd.rs"
55 +
)]
56 +
#[cfg_attr(
57 +
    any(target_os = "netbsd", target_os = "openbsd"),
58 +
    path = "tz_netbsd.rs"
59 +
)]
60 +
#[cfg_attr(
61 +
    any(target_os = "illumos", target_os = "solaris"),
62 +
    path = "tz_illumos.rs"
63 +
)]
64 +
#[cfg_attr(target_os = "aix", path = "tz_aix.rs")]
65 +
#[cfg_attr(target_os = "android", path = "tz_android.rs")]
66 +
#[cfg_attr(target_os = "haiku", path = "tz_haiku.rs")]
67 +
#[cfg_attr(
68 +
    all(target_arch = "wasm32", target_os = "wasi"),
69 +
    path = "tz_wasm32_wasi.rs"
70 +
)]
71 +
mod platform;
72 +
73 +
/// Error types
74 +
#[derive(Debug)]
75 +
pub enum GetTimezoneError {
76 +
    /// Failed to parse
77 +
    FailedParsingString,
78 +
    /// Wrapped IO error
79 +
    IoError(std::io::Error),
80 +
    /// Platform-specific error from the operating system
81 +
    OsError,
82 +
}
83 +
84 +
impl std::error::Error for GetTimezoneError {
85 +
    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
86 +
        match self {
87 +
            GetTimezoneError::FailedParsingString => None,
88 +
            GetTimezoneError::IoError(err) => Some(err),
89 +
            GetTimezoneError::OsError => None,
90 +
        }
91 +
    }
92 +
}
93 +
94 +
impl std::fmt::Display for GetTimezoneError {
95 +
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
96 +
        f.write_str(match self {
97 +
            GetTimezoneError::FailedParsingString => "GetTimezoneError::FailedParsingString",
98 +
            GetTimezoneError::IoError(err) => return err.fmt(f),
99 +
            GetTimezoneError::OsError => "OsError",
100 +
        })
101 +
    }
102 +
}
103 +
104 +
impl From<std::io::Error> for GetTimezoneError {
105 +
    fn from(orig: std::io::Error) -> Self {
106 +
        GetTimezoneError::IoError(orig)
107 +
    }
108 +
}
109 +
110 +
/// Get the current IANA time zone as a string.
111 +
///
112 +
/// See the module-level documentation for a usage example and more details
113 +
/// about this function.
114 +
#[inline]
115 +
pub fn get_timezone() -> Result<String, GetTimezoneError> {
116 +
    platform::get_timezone_inner()
117 +
}
118 +
119 +
#[cfg(test)]
120 +
mod tests {
121 +
    use super::*;
122 +
123 +
    #[test]
124 +
    fn get_current() {
125 +
        println!("current: {}", get_timezone().unwrap());
126 +
    }
127 +
}
added vendor/iana-time-zone/src/platform.rs +9 −0
1 +
pub fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
2 +
    Err(crate::GetTimezoneError::OsError)
3 +
}
4 +
5 +
#[cfg(not(feature = "fallback"))]
6 +
compile_error!(
7 +
    "iana-time-zone is currently implemented for Linux, Window, MacOS, FreeBSD, NetBSD, \
8 +
    OpenBSD, Dragonfly, WebAssembly (browser), wasip, emscripten, iOS, Illumos, Android, AIX, Solaris and Haiku.",
9 +
);
added vendor/iana-time-zone/src/tz_aix.rs +7 −0
1 +
use std::env;
2 +
use std::fs::OpenOptions;
3 +
use std::io::{BufRead, BufReader};
4 +
5 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
6 +
    env::var("TZ").map_err(|_| crate::GetTimezoneError::OsError)
7 +
}
added vendor/iana-time-zone/src/tz_android.rs +27 −0
1 +
use std::sync::Once;
2 +
3 +
use android_system_properties::AndroidSystemProperties;
4 +
5 +
use crate::ffi_utils::android_timezone_property_name;
6 +
7 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
8 +
    let key = android_timezone_property_name();
9 +
10 +
    get_properties()
11 +
        .and_then(|properties| properties.get_from_cstr(key))
12 +
        .ok_or(crate::GetTimezoneError::OsError)
13 +
}
14 +
15 +
fn get_properties() -> Option<&'static AndroidSystemProperties> {
16 +
    static INITIALIZED: Once = Once::new();
17 +
    static mut PROPERTIES: Option<AndroidSystemProperties> = None;
18 +
19 +
    INITIALIZED.call_once(|| {
20 +
        let properties = AndroidSystemProperties::new();
21 +
        // SAFETY: `INITIALIZED` is synchronizing. The variable is only assigned to once.
22 +
        unsafe { PROPERTIES = Some(properties) };
23 +
    });
24 +
25 +
    // SAFETY: `INITIALIZED` is synchronizing. The variable is only assigned to once.
26 +
    unsafe { PROPERTIES.as_ref() }
27 +
}
added vendor/iana-time-zone/src/tz_freebsd.rs +7 −0
1 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
2 +
    // see https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/19
3 +
    let mut contents = std::fs::read_to_string("/var/db/zoneinfo")?;
4 +
    // Trim to the correct length without allocating.
5 +
    contents.truncate(contents.trim_end().len());
6 +
    Ok(contents)
7 +
}
added vendor/iana-time-zone/src/tz_haiku.rs +3 −0
1 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
2 +
    iana_time_zone_haiku::get_timezone().ok_or(crate::GetTimezoneError::OsError)
3 +
}
added vendor/iana-time-zone/src/tz_illumos.rs +22 −0
1 +
use std::fs::OpenOptions;
2 +
use std::io::{BufRead, BufReader};
3 +
4 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
5 +
    // https://illumos.org/man/5/TIMEZONE
6 +
    // https://docs.oracle.com/cd/E23824_01/html/821-1473/uc-timezone-4.html
7 +
8 +
    let file = OpenOptions::new().read(true).open("/etc/default/init")?;
9 +
    let mut reader = BufReader::with_capacity(1536, file);
10 +
    let mut line = String::with_capacity(80);
11 +
    loop {
12 +
        line.clear();
13 +
        let count = reader.read_line(&mut line)?;
14 +
        if count == 0 {
15 +
            return Err(crate::GetTimezoneError::FailedParsingString);
16 +
        } else if line.starts_with("TZ=") {
17 +
            line.truncate(line.trim_end().len());
18 +
            line.replace_range(..3, "");
19 +
            return Ok(line);
20 +
        }
21 +
    }
22 +
}
added vendor/iana-time-zone/src/tz_linux.rs +184 −0
1 +
use std::fs::{read_link, read_to_string};
2 +
3 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
4 +
    etc_localtime()
5 +
        .or_else(|_| etc_timezone())
6 +
        .or_else(|_| openwrt::etc_config_system())
7 +
}
8 +
9 +
fn etc_timezone() -> Result<String, crate::GetTimezoneError> {
10 +
    // see https://stackoverflow.com/a/12523283
11 +
    let mut contents = read_to_string("/etc/timezone")?;
12 +
    // Trim to the correct length without allocating.
13 +
    contents.truncate(contents.trim_end().len());
14 +
    Ok(contents)
15 +
}
16 +
17 +
fn etc_localtime() -> Result<String, crate::GetTimezoneError> {
18 +
    // Per <https://www.man7.org/linux/man-pages/man5/localtime.5.html>:
19 +
    // “ The /etc/localtime file configures the system-wide timezone of the local system that is
20 +
    //   used by applications for presentation to the user. It should be an absolute or relative
21 +
    //   symbolic link pointing to /usr/share/zoneinfo/, followed by a timezone identifier such as
22 +
    //   "Europe/Berlin" or "Etc/UTC". The resulting link should lead to the corresponding binary
23 +
    //   tzfile(5) timezone data for the configured timezone. ”
24 +
25 +
    // Systemd does not canonicalize the link, but only checks if it is prefixed by
26 +
    // "/usr/share/zoneinfo/" or "../usr/share/zoneinfo/". So we do the same.
27 +
    // <https://github.com/systemd/systemd/blob/9102c625a673a3246d7e73d8737f3494446bad4e/src/basic/time-util.c#L1493>
28 +
29 +
    const PREFIXES: &[&str] = &[
30 +
        "/usr/share/zoneinfo/",   // absolute path
31 +
        "../usr/share/zoneinfo/", // relative path
32 +
        "/etc/zoneinfo/",         // absolute path for NixOS
33 +
        "../etc/zoneinfo/",       // relative path for NixOS
34 +
    ];
35 +
    let mut s = read_link("/etc/localtime")?
36 +
        .into_os_string()
37 +
        .into_string()
38 +
        .map_err(|_| crate::GetTimezoneError::FailedParsingString)?;
39 +
    for &prefix in PREFIXES {
40 +
        if s.starts_with(prefix) {
41 +
            // Trim to the correct length without allocating.
42 +
            s.replace_range(..prefix.len(), "");
43 +
            return Ok(s);
44 +
        }
45 +
    }
46 +
    Err(crate::GetTimezoneError::FailedParsingString)
47 +
}
48 +
49 +
mod openwrt {
50 +
    use std::io::BufRead;
51 +
    use std::{fs, io, iter};
52 +
53 +
    pub(crate) fn etc_config_system() -> Result<String, crate::GetTimezoneError> {
54 +
        let f = fs::OpenOptions::new()
55 +
            .read(true)
56 +
            .open("/etc/config/system")?;
57 +
        let mut f = io::BufReader::new(f);
58 +
        let mut in_system_section = false;
59 +
        let mut line = String::with_capacity(80);
60 +
61 +
        // prefer option "zonename" (IANA time zone) over option "timezone" (POSIX time zone)
62 +
        let mut timezone = None;
63 +
        loop {
64 +
            line.clear();
65 +
            f.read_line(&mut line)?;
66 +
            if line.is_empty() {
67 +
                break;
68 +
            }
69 +
70 +
            let mut iter = IterWords(&line);
71 +
            let mut next = || iter.next().transpose();
72 +
73 +
            if let Some(keyword) = next()? {
74 +
                if keyword == "config" {
75 +
                    in_system_section = next()? == Some("system") && next()?.is_none();
76 +
                } else if in_system_section && keyword == "option" {
77 +
                    if let Some(key) = next()? {
78 +
                        if key == "zonename" {
79 +
                            if let (Some(zonename), None) = (next()?, next()?) {
80 +
                                return Ok(zonename.to_owned());
81 +
                            }
82 +
                        } else if key == "timezone" {
83 +
                            if let (Some(value), None) = (next()?, next()?) {
84 +
                                timezone = Some(value.to_owned());
85 +
                            }
86 +
                        }
87 +
                    }
88 +
                }
89 +
            }
90 +
        }
91 +
92 +
        timezone.ok_or(crate::GetTimezoneError::OsError)
93 +
    }
94 +
95 +
    #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
96 +
    struct BrokenQuote;
97 +
98 +
    impl From<BrokenQuote> for crate::GetTimezoneError {
99 +
        fn from(_: BrokenQuote) -> Self {
100 +
            crate::GetTimezoneError::FailedParsingString
101 +
        }
102 +
    }
103 +
104 +
    /// Iterated over all words in a OpenWRT config line.
105 +
    struct IterWords<'a>(&'a str);
106 +
107 +
    impl<'a> Iterator for IterWords<'a> {
108 +
        type Item = Result<&'a str, BrokenQuote>;
109 +
110 +
        fn next(&mut self) -> Option<Self::Item> {
111 +
            match read_word(self.0) {
112 +
                Ok(Some((item, tail))) => {
113 +
                    self.0 = tail;
114 +
                    Some(Ok(item))
115 +
                }
116 +
                Ok(None) => {
117 +
                    self.0 = "";
118 +
                    None
119 +
                }
120 +
                Err(err) => {
121 +
                    self.0 = "";
122 +
                    Some(Err(err))
123 +
                }
124 +
            }
125 +
        }
126 +
    }
127 +
128 +
    impl iter::FusedIterator for IterWords<'_> {}
129 +
130 +
    /// Read the next word in a OpenWRT config line. Strip any surrounding quotation marks.
131 +
    ///
132 +
    /// Returns
133 +
    ///
134 +
    ///  * a tuple `Some((word, remaining_line))` if found,
135 +
    ///  * `None` if the line is exhausted, or
136 +
    ///  * `Err(BrokenQuote)` if the line could not be parsed.
137 +
    #[allow(clippy::manual_strip)] // needs to be compatile to 1.36
138 +
    fn read_word(s: &str) -> Result<Option<(&str, &str)>, BrokenQuote> {
139 +
        let s = s.trim_start();
140 +
        if s.is_empty() || s.starts_with('#') {
141 +
            Ok(None)
142 +
        } else if s.starts_with('\'') {
143 +
            let mut iter = s[1..].splitn(2, '\'');
144 +
            match (iter.next(), iter.next()) {
145 +
                (Some(item), Some(tail)) => Ok(Some((item, tail))),
146 +
                _ => Err(BrokenQuote),
147 +
            }
148 +
        } else if s.starts_with('"') {
149 +
            let mut iter = s[1..].splitn(2, '"');
150 +
            match (iter.next(), iter.next()) {
151 +
                (Some(item), Some(tail)) => Ok(Some((item, tail))),
152 +
                _ => Err(BrokenQuote),
153 +
            }
154 +
        } else {
155 +
            let mut iter = s.splitn(2, |c: char| c.is_whitespace());
156 +
            match (iter.next(), iter.next()) {
157 +
                (Some(item), Some(tail)) => Ok(Some((item, tail))),
158 +
                _ => Ok(Some((s, ""))),
159 +
            }
160 +
        }
161 +
    }
162 +
163 +
    #[cfg(test)]
164 +
    #[test]
165 +
    fn test_read_word() {
166 +
        assert_eq!(
167 +
            read_word("       option timezone 'CST-8'\n").unwrap(),
168 +
            Some(("option", "timezone 'CST-8'\n")),
169 +
        );
170 +
        assert_eq!(
171 +
            read_word("timezone 'CST-8'\n").unwrap(),
172 +
            Some(("timezone", "'CST-8'\n")),
173 +
        );
174 +
        assert_eq!(read_word("'CST-8'\n").unwrap(), Some(("CST-8", "\n")));
175 +
        assert_eq!(read_word("\n").unwrap(), None);
176 +
177 +
        assert_eq!(
178 +
            read_word(r#""time 'Zone'""#).unwrap(),
179 +
            Some(("time 'Zone'", "")),
180 +
        );
181 +
182 +
        assert_eq!(read_word("'CST-8").unwrap_err(), BrokenQuote);
183 +
    }
184 +
}
added vendor/iana-time-zone/src/tz_netbsd.rs +25 −0
1 +
use std::fs::read_link;
2 +
3 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
4 +
    // see https://www.cyberciti.biz/faq/openbsd-time-zone-howto/
5 +
6 +
    // This is a backport of the Linux implementation.
7 +
    // NetBSDs is less than thorough how the softlink should be set up.
8 +
9 +
    const PREFIXES: &[&str] = &[
10 +
        "/usr/share/zoneinfo/",   // absolute path
11 +
        "../usr/share/zoneinfo/", // relative path
12 +
    ];
13 +
    let mut s = read_link("/etc/localtime")?
14 +
        .into_os_string()
15 +
        .into_string()
16 +
        .map_err(|_| crate::GetTimezoneError::FailedParsingString)?;
17 +
    for &prefix in PREFIXES {
18 +
        if s.starts_with(prefix) {
19 +
            // Trim to the correct length without allocating.
20 +
            s.replace_range(..prefix.len(), "");
21 +
            return Ok(s);
22 +
        }
23 +
    }
24 +
    Err(crate::GetTimezoneError::FailedParsingString)
25 +
}
added vendor/iana-time-zone/src/tz_ohos.rs +47 −0
1 +
//! OpenHarmony doesn't have `/etc/localtime`, we have to use it's "Time Service" to get the timezone information:
2 +
//!
3 +
//! - [API Reference](https://gitee.com/openharmony/docs/blob/43726785b4033887cd1a838aaaca5e255897a71e/en/application-dev/reference/apis-basic-services-kit/_time_service.md#oh_timeservice_gettimezone)
4 +
5 +
use crate::ffi_utils::buffer::{tzname_buf, MAX_LEN};
6 +
use crate::GetTimezoneError;
7 +
use std::ffi::{c_char, CStr};
8 +
9 +
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
10 +
#[repr(C)]
11 +
#[allow(non_camel_case_types)]
12 +
#[allow(dead_code)]
13 +
enum TimeService_ErrCode {
14 +
    TIMESERVICE_ERR_OK = 0,
15 +
    TIMESERVICE_ERR_INTERNAL_ERROR = 13000001,
16 +
    TIMESERVICE_ERR_INVALID_PARAMETER = 13000002,
17 +
}
18 +
19 +
#[link(name = "time_service_ndk", kind = "dylib")]
20 +
extern "C" {
21 +
    fn OH_TimeService_GetTimeZone(timeZone: *mut c_char, len: u32) -> TimeService_ErrCode;
22 +
}
23 +
24 +
/// TODO: Change this `CStr::from_bytes_until_nul` once MSRV was bumped above 1.69.0
25 +
fn from_bytes_until_nul(bytes: &[u8]) -> Option<&CStr> {
26 +
    let nul_pos = bytes.iter().position(|&b| b == 0)?;
27 +
    // SAFETY:
28 +
    // 1. nul_pos + 1 <= bytes.len()
29 +
    // 2. We know there is a nul byte at nul_pos, so this slice (ending at the nul byte) is a well-formed C string.
30 +
    Some(unsafe { CStr::from_bytes_with_nul_unchecked(&bytes[..=nul_pos]) })
31 +
}
32 +
33 +
pub(crate) fn get_timezone_inner() -> Result<String, GetTimezoneError> {
34 +
    let mut time_zone = tzname_buf();
35 +
    // SAFETY:
36 +
    // `time_zone` is a valid buffer with a length of 40 bytes.
37 +
    let ret = unsafe {
38 +
        OH_TimeService_GetTimeZone(time_zone.as_mut_ptr().cast::<c_char>(), MAX_LEN as u32 - 1)
39 +
    };
40 +
    if ret != TimeService_ErrCode::TIMESERVICE_ERR_OK {
41 +
        return Err(GetTimezoneError::OsError);
42 +
    }
43 +
    from_bytes_until_nul(&time_zone)
44 +
        .and_then(|x| x.to_str().ok())
45 +
        .map(|x| x.to_owned())
46 +
        .ok_or(GetTimezoneError::OsError)
47 +
}
added vendor/iana-time-zone/src/tz_wasm32_emscripten.rs +30 −0
1 +
use crate::GetTimezoneError;
2 +
use std::ffi::CStr;
3 +
use std::os::raw::c_char;
4 +
use std::ptr::NonNull;
5 +
6 +
extern "C" {
7 +
    fn emscripten_run_script_string(script: *const c_char) -> *mut c_char;
8 +
}
9 +
10 +
pub(crate) fn get_timezone_inner() -> Result<String, GetTimezoneError> {
11 +
    const SCRIPT: &CStr = {
12 +
        match CStr::from_bytes_with_nul(
13 +
            "Intl.DateTimeFormat().resolvedOptions().timeZone\0".as_bytes(),
14 +
        ) {
15 +
            Ok(s) => s,
16 +
            Err(_) => panic!("Invalid UTF-8 data"),
17 +
        }
18 +
    };
19 +
20 +
    unsafe {
21 +
        NonNull::new(emscripten_run_script_string(SCRIPT.as_ptr()))
22 +
            .ok_or_else(|| GetTimezoneError::OsError)
23 +
            .and_then(|ptr| {
24 +
                CStr::from_ptr(ptr.as_ptr())
25 +
                    .to_owned()
26 +
                    .into_string()
27 +
                    .map_err(|_| GetTimezoneError::FailedParsingString)
28 +
            })
29 +
    }
30 +
}
added vendor/iana-time-zone/src/tz_wasm32_unknown.rs +21 −0
1 +
use js_sys::{Array, Intl, Object, Reflect};
2 +
use wasm_bindgen::JsValue;
3 +
4 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
5 +
    let intl = Intl::DateTimeFormat::new(&Array::new(), &Object::new()).resolved_options();
6 +
    Reflect::get(&intl, &JsValue::from_str("timeZone"))
7 +
        .ok()
8 +
        .and_then(|tz| tz.as_string())
9 +
        .ok_or(crate::GetTimezoneError::OsError)
10 +
}
11 +
12 +
#[cfg(test)]
13 +
mod tests {
14 +
    use wasm_bindgen_test::*;
15 +
16 +
    #[wasm_bindgen_test]
17 +
    fn pass() {
18 +
        let tz = super::get_timezone_inner().unwrap();
19 +
        console_log!("tz={:?}", tz);
20 +
    }
21 +
}
added vendor/iana-time-zone/src/tz_wasm32_wasi.rs +3 −0
1 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
2 +
    std::env::var("TZ").or_else(|_| Ok("Etc/UTC".to_owned()))
3 +
}
added vendor/iana-time-zone/src/tz_windows.rs +16 −0
1 +
#[path = "windows_bindings.rs"]
2 +
#[allow(missing_debug_implementations, clippy::undocumented_unsafe_blocks)]
3 +
mod windows_bindings;
4 +
use windows_bindings::Windows::Globalization::Calendar;
5 +
6 +
impl From<windows_core::Error> for crate::GetTimezoneError {
7 +
    fn from(orig: windows_core::Error) -> Self {
8 +
        crate::GetTimezoneError::IoError(std::io::Error::new(std::io::ErrorKind::Other, orig))
9 +
    }
10 +
}
11 +
12 +
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
13 +
    let cal = Calendar::new()?;
14 +
    let tz_hstring = cal.GetTimeZone()?;
15 +
    Ok(tz_hstring.to_string())
16 +
}
added vendor/iana-time-zone/src/windows_bindings.rs +1630 −0
1 +
// Bindings generated by `windows-bindgen` 0.59.0
2 +
3 +
#![allow(
4 +
    non_snake_case,
5 +
    non_upper_case_globals,
6 +
    non_camel_case_types,
7 +
    dead_code,
8 +
    clippy::all
9 +
)]
10 +
11 +
pub mod Windows {
12 +
    pub mod Globalization {
13 +
        #[repr(transparent)]
14 +
        #[derive(Clone, Debug, Eq, PartialEq)]
15 +
        pub struct Calendar(windows_core::IUnknown);
16 +
        windows_core::imp::interface_hierarchy!(
17 +
            Calendar,
18 +
            windows_core::IUnknown,
19 +
            windows_core::IInspectable
20 +
        );
21 +
        impl Calendar {
22 +
            pub fn new() -> windows_core::Result<Self> {
23 +
                Self::IActivationFactory(|f| f.ActivateInstance::<Self>())
24 +
            }
25 +
            fn IActivationFactory<
26 +
                R,
27 +
                F: FnOnce(&windows_core::imp::IGenericFactory) -> windows_core::Result<R>,
28 +
            >(
29 +
                callback: F,
30 +
            ) -> windows_core::Result<R> {
31 +
                static SHARED: windows_core::imp::FactoryCache<
32 +
                    Calendar,
33 +
                    windows_core::imp::IGenericFactory,
34 +
                > = windows_core::imp::FactoryCache::new();
35 +
                SHARED.call(callback)
36 +
            }
37 +
            pub fn Clone(&self) -> windows_core::Result<Calendar> {
38 +
                let this = self;
39 +
                unsafe {
40 +
                    let mut result__ = core::mem::zeroed();
41 +
                    (windows_core::Interface::vtable(this).Clone)(
42 +
                        windows_core::Interface::as_raw(this),
43 +
                        &mut result__,
44 +
                    )
45 +
                    .and_then(|| windows_core::Type::from_abi(result__))
46 +
                }
47 +
            }
48 +
            pub fn SetToMin(&self) -> windows_core::Result<()> {
49 +
                let this = self;
50 +
                unsafe {
51 +
                    (windows_core::Interface::vtable(this).SetToMin)(
52 +
                        windows_core::Interface::as_raw(this),
53 +
                    )
54 +
                    .ok()
55 +
                }
56 +
            }
57 +
            pub fn SetToMax(&self) -> windows_core::Result<()> {
58 +
                let this = self;
59 +
                unsafe {
60 +
                    (windows_core::Interface::vtable(this).SetToMax)(
61 +
                        windows_core::Interface::as_raw(this),
62 +
                    )
63 +
                    .ok()
64 +
                }
65 +
            }
66 +
            pub fn NumeralSystem(&self) -> windows_core::Result<windows_core::HSTRING> {
67 +
                let this = self;
68 +
                unsafe {
69 +
                    let mut result__ = core::mem::zeroed();
70 +
                    (windows_core::Interface::vtable(this).NumeralSystem)(
71 +
                        windows_core::Interface::as_raw(this),
72 +
                        &mut result__,
73 +
                    )
74 +
                    .map(|| core::mem::transmute(result__))
75 +
                }
76 +
            }
77 +
            pub fn SetNumeralSystem(
78 +
                &self,
79 +
                value: &windows_core::HSTRING,
80 +
            ) -> windows_core::Result<()> {
81 +
                let this = self;
82 +
                unsafe {
83 +
                    (windows_core::Interface::vtable(this).SetNumeralSystem)(
84 +
                        windows_core::Interface::as_raw(this),
85 +
                        core::mem::transmute_copy(value),
86 +
                    )
87 +
                    .ok()
88 +
                }
89 +
            }
90 +
            pub fn GetCalendarSystem(&self) -> windows_core::Result<windows_core::HSTRING> {
91 +
                let this = self;
92 +
                unsafe {
93 +
                    let mut result__ = core::mem::zeroed();
94 +
                    (windows_core::Interface::vtable(this).GetCalendarSystem)(
95 +
                        windows_core::Interface::as_raw(this),
96 +
                        &mut result__,
97 +
                    )
98 +
                    .map(|| core::mem::transmute(result__))
99 +
                }
100 +
            }
101 +
            pub fn ChangeCalendarSystem(
102 +
                &self,
103 +
                value: &windows_core::HSTRING,
104 +
            ) -> windows_core::Result<()> {
105 +
                let this = self;
106 +
                unsafe {
107 +
                    (windows_core::Interface::vtable(this).ChangeCalendarSystem)(
108 +
                        windows_core::Interface::as_raw(this),
109 +
                        core::mem::transmute_copy(value),
110 +
                    )
111 +
                    .ok()
112 +
                }
113 +
            }
114 +
            pub fn GetClock(&self) -> windows_core::Result<windows_core::HSTRING> {
115 +
                let this = self;
116 +
                unsafe {
117 +
                    let mut result__ = core::mem::zeroed();
118 +
                    (windows_core::Interface::vtable(this).GetClock)(
119 +
                        windows_core::Interface::as_raw(this),
120 +
                        &mut result__,
121 +
                    )
122 +
                    .map(|| core::mem::transmute(result__))
123 +
                }
124 +
            }
125 +
            pub fn ChangeClock(&self, value: &windows_core::HSTRING) -> windows_core::Result<()> {
126 +
                let this = self;
127 +
                unsafe {
128 +
                    (windows_core::Interface::vtable(this).ChangeClock)(
129 +
                        windows_core::Interface::as_raw(this),
130 +
                        core::mem::transmute_copy(value),
131 +
                    )
132 +
                    .ok()
133 +
                }
134 +
            }
135 +
            pub fn SetToNow(&self) -> windows_core::Result<()> {
136 +
                let this = self;
137 +
                unsafe {
138 +
                    (windows_core::Interface::vtable(this).SetToNow)(
139 +
                        windows_core::Interface::as_raw(this),
140 +
                    )
141 +
                    .ok()
142 +
                }
143 +
            }
144 +
            pub fn FirstEra(&self) -> windows_core::Result<i32> {
145 +
                let this = self;
146 +
                unsafe {
147 +
                    let mut result__ = core::mem::zeroed();
148 +
                    (windows_core::Interface::vtable(this).FirstEra)(
149 +
                        windows_core::Interface::as_raw(this),
150 +
                        &mut result__,
151 +
                    )
152 +
                    .map(|| result__)
153 +
                }
154 +
            }
155 +
            pub fn LastEra(&self) -> windows_core::Result<i32> {
156 +
                let this = self;
157 +
                unsafe {
158 +
                    let mut result__ = core::mem::zeroed();
159 +
                    (windows_core::Interface::vtable(this).LastEra)(
160 +
                        windows_core::Interface::as_raw(this),
161 +
                        &mut result__,
162 +
                    )
163 +
                    .map(|| result__)
164 +
                }
165 +
            }
166 +
            pub fn NumberOfEras(&self) -> windows_core::Result<i32> {
167 +
                let this = self;
168 +
                unsafe {
169 +
                    let mut result__ = core::mem::zeroed();
170 +
                    (windows_core::Interface::vtable(this).NumberOfEras)(
171 +
                        windows_core::Interface::as_raw(this),
172 +
                        &mut result__,
173 +
                    )
174 +
                    .map(|| result__)
175 +
                }
176 +
            }
177 +
            pub fn Era(&self) -> windows_core::Result<i32> {
178 +
                let this = self;
179 +
                unsafe {
180 +
                    let mut result__ = core::mem::zeroed();
181 +
                    (windows_core::Interface::vtable(this).Era)(
182 +
                        windows_core::Interface::as_raw(this),
183 +
                        &mut result__,
184 +
                    )
185 +
                    .map(|| result__)
186 +
                }
187 +
            }
188 +
            pub fn SetEra(&self, value: i32) -> windows_core::Result<()> {
189 +
                let this = self;
190 +
                unsafe {
191 +
                    (windows_core::Interface::vtable(this).SetEra)(
192 +
                        windows_core::Interface::as_raw(this),
193 +
                        value,
194 +
                    )
195 +
                    .ok()
196 +
                }
197 +
            }
198 +
            pub fn AddEras(&self, eras: i32) -> windows_core::Result<()> {
199 +
                let this = self;
200 +
                unsafe {
201 +
                    (windows_core::Interface::vtable(this).AddEras)(
202 +
                        windows_core::Interface::as_raw(this),
203 +
                        eras,
204 +
                    )
205 +
                    .ok()
206 +
                }
207 +
            }
208 +
            pub fn EraAsFullString(&self) -> windows_core::Result<windows_core::HSTRING> {
209 +
                let this = self;
210 +
                unsafe {
211 +
                    let mut result__ = core::mem::zeroed();
212 +
                    (windows_core::Interface::vtable(this).EraAsFullString)(
213 +
                        windows_core::Interface::as_raw(this),
214 +
                        &mut result__,
215 +
                    )
216 +
                    .map(|| core::mem::transmute(result__))
217 +
                }
218 +
            }
219 +
            pub fn EraAsString(
220 +
                &self,
221 +
                ideallength: i32,
222 +
            ) -> windows_core::Result<windows_core::HSTRING> {
223 +
                let this = self;
224 +
                unsafe {
225 +
                    let mut result__ = core::mem::zeroed();
226 +
                    (windows_core::Interface::vtable(this).EraAsString)(
227 +
                        windows_core::Interface::as_raw(this),
228 +
                        ideallength,
229 +
                        &mut result__,
230 +
                    )
231 +
                    .map(|| core::mem::transmute(result__))
232 +
                }
233 +
            }
234 +
            pub fn FirstYearInThisEra(&self) -> windows_core::Result<i32> {
235 +
                let this = self;
236 +
                unsafe {
237 +
                    let mut result__ = core::mem::zeroed();
238 +
                    (windows_core::Interface::vtable(this).FirstYearInThisEra)(
239 +
                        windows_core::Interface::as_raw(this),
240 +
                        &mut result__,
241 +
                    )
242 +
                    .map(|| result__)
243 +
                }
244 +
            }
245 +
            pub fn LastYearInThisEra(&self) -> windows_core::Result<i32> {
246 +
                let this = self;
247 +
                unsafe {
248 +
                    let mut result__ = core::mem::zeroed();
249 +
                    (windows_core::Interface::vtable(this).LastYearInThisEra)(
250 +
                        windows_core::Interface::as_raw(this),
251 +
                        &mut result__,
252 +
                    )
253 +
                    .map(|| result__)
254 +
                }
255 +
            }
256 +
            pub fn NumberOfYearsInThisEra(&self) -> windows_core::Result<i32> {
257 +
                let this = self;
258 +
                unsafe {
259 +
                    let mut result__ = core::mem::zeroed();
260 +
                    (windows_core::Interface::vtable(this).NumberOfYearsInThisEra)(
261 +
                        windows_core::Interface::as_raw(this),
262 +
                        &mut result__,
263 +
                    )
264 +
                    .map(|| result__)
265 +
                }
266 +
            }
267 +
            pub fn Year(&self) -> windows_core::Result<i32> {
268 +
                let this = self;
269 +
                unsafe {
270 +
                    let mut result__ = core::mem::zeroed();
271 +
                    (windows_core::Interface::vtable(this).Year)(
272 +
                        windows_core::Interface::as_raw(this),
273 +
                        &mut result__,
274 +
                    )
275 +
                    .map(|| result__)
276 +
                }
277 +
            }
278 +
            pub fn SetYear(&self, value: i32) -> windows_core::Result<()> {
279 +
                let this = self;
280 +
                unsafe {
281 +
                    (windows_core::Interface::vtable(this).SetYear)(
282 +
                        windows_core::Interface::as_raw(this),
283 +
                        value,
284 +
                    )
285 +
                    .ok()
286 +
                }
287 +
            }
288 +
            pub fn AddYears(&self, years: i32) -> windows_core::Result<()> {
289 +
                let this = self;
290 +
                unsafe {
291 +
                    (windows_core::Interface::vtable(this).AddYears)(
292 +
                        windows_core::Interface::as_raw(this),
293 +
                        years,
294 +
                    )
295 +
                    .ok()
296 +
                }
297 +
            }
298 +
            pub fn YearAsString(&self) -> windows_core::Result<windows_core::HSTRING> {
299 +
                let this = self;
300 +
                unsafe {
301 +
                    let mut result__ = core::mem::zeroed();
302 +
                    (windows_core::Interface::vtable(this).YearAsString)(
303 +
                        windows_core::Interface::as_raw(this),
304 +
                        &mut result__,
305 +
                    )
306 +
                    .map(|| core::mem::transmute(result__))
307 +
                }
308 +
            }
309 +
            pub fn YearAsTruncatedString(
310 +
                &self,
311 +
                remainingdigits: i32,
312 +
            ) -> windows_core::Result<windows_core::HSTRING> {
313 +
                let this = self;
314 +
                unsafe {
315 +
                    let mut result__ = core::mem::zeroed();
316 +
                    (windows_core::Interface::vtable(this).YearAsTruncatedString)(
317 +
                        windows_core::Interface::as_raw(this),
318 +
                        remainingdigits,
319 +
                        &mut result__,
320 +
                    )
321 +
                    .map(|| core::mem::transmute(result__))
322 +
                }
323 +
            }
324 +
            pub fn YearAsPaddedString(
325 +
                &self,
326 +
                mindigits: i32,
327 +
            ) -> windows_core::Result<windows_core::HSTRING> {
328 +
                let this = self;
329 +
                unsafe {
330 +
                    let mut result__ = core::mem::zeroed();
331 +
                    (windows_core::Interface::vtable(this).YearAsPaddedString)(
332 +
                        windows_core::Interface::as_raw(this),
333 +
                        mindigits,
334 +
                        &mut result__,
335 +
                    )
336 +
                    .map(|| core::mem::transmute(result__))
337 +
                }
338 +
            }
339 +
            pub fn FirstMonthInThisYear(&self) -> windows_core::Result<i32> {
340 +
                let this = self;
341 +
                unsafe {
342 +
                    let mut result__ = core::mem::zeroed();
343 +
                    (windows_core::Interface::vtable(this).FirstMonthInThisYear)(
344 +
                        windows_core::Interface::as_raw(this),
345 +
                        &mut result__,
346 +
                    )
347 +
                    .map(|| result__)
348 +
                }
349 +
            }
350 +
            pub fn LastMonthInThisYear(&self) -> windows_core::Result<i32> {
351 +
                let this = self;
352 +
                unsafe {
353 +
                    let mut result__ = core::mem::zeroed();
354 +
                    (windows_core::Interface::vtable(this).LastMonthInThisYear)(
355 +
                        windows_core::Interface::as_raw(this),
356 +
                        &mut result__,
357 +
                    )
358 +
                    .map(|| result__)
359 +
                }
360 +
            }
361 +
            pub fn NumberOfMonthsInThisYear(&self) -> windows_core::Result<i32> {
362 +
                let this = self;
363 +
                unsafe {
364 +
                    let mut result__ = core::mem::zeroed();
365 +
                    (windows_core::Interface::vtable(this).NumberOfMonthsInThisYear)(
366 +
                        windows_core::Interface::as_raw(this),
367 +
                        &mut result__,
368 +
                    )
369 +
                    .map(|| result__)
370 +
                }
371 +
            }
372 +
            pub fn Month(&self) -> windows_core::Result<i32> {
373 +
                let this = self;
374 +
                unsafe {
375 +
                    let mut result__ = core::mem::zeroed();
376 +
                    (windows_core::Interface::vtable(this).Month)(
377 +
                        windows_core::Interface::as_raw(this),
378 +
                        &mut result__,
379 +
                    )
380 +
                    .map(|| result__)
381 +
                }
382 +
            }
383 +
            pub fn SetMonth(&self, value: i32) -> windows_core::Result<()> {
384 +
                let this = self;
385 +
                unsafe {
386 +
                    (windows_core::Interface::vtable(this).SetMonth)(
387 +
                        windows_core::Interface::as_raw(this),
388 +
                        value,
389 +
                    )
390 +
                    .ok()
391 +
                }
392 +
            }
393 +
            pub fn AddMonths(&self, months: i32) -> windows_core::Result<()> {
394 +
                let this = self;
395 +
                unsafe {
396 +
                    (windows_core::Interface::vtable(this).AddMonths)(
397 +
                        windows_core::Interface::as_raw(this),
398 +
                        months,
399 +
                    )
400 +
                    .ok()
401 +
                }
402 +
            }
403 +
            pub fn MonthAsFullString(&self) -> windows_core::Result<windows_core::HSTRING> {
404 +
                let this = self;
405 +
                unsafe {
406 +
                    let mut result__ = core::mem::zeroed();
407 +
                    (windows_core::Interface::vtable(this).MonthAsFullString)(
408 +
                        windows_core::Interface::as_raw(this),
409 +
                        &mut result__,
410 +
                    )
411 +
                    .map(|| core::mem::transmute(result__))
412 +
                }
413 +
            }
414 +
            pub fn MonthAsString(
415 +
                &self,
416 +
                ideallength: i32,
417 +
            ) -> windows_core::Result<windows_core::HSTRING> {
418 +
                let this = self;
419 +
                unsafe {
420 +
                    let mut result__ = core::mem::zeroed();
421 +
                    (windows_core::Interface::vtable(this).MonthAsString)(
422 +
                        windows_core::Interface::as_raw(this),
423 +
                        ideallength,
424 +
                        &mut result__,
425 +
                    )
426 +
                    .map(|| core::mem::transmute(result__))
427 +
                }
428 +
            }
429 +
            pub fn MonthAsFullSoloString(&self) -> windows_core::Result<windows_core::HSTRING> {
430 +
                let this = self;
431 +
                unsafe {
432 +
                    let mut result__ = core::mem::zeroed();
433 +
                    (windows_core::Interface::vtable(this).MonthAsFullSoloString)(
434 +
                        windows_core::Interface::as_raw(this),
435 +
                        &mut result__,
436 +
                    )
437 +
                    .map(|| core::mem::transmute(result__))
438 +
                }
439 +
            }
440 +
            pub fn MonthAsSoloString(
441 +
                &self,
442 +
                ideallength: i32,
443 +
            ) -> windows_core::Result<windows_core::HSTRING> {
444 +
                let this = self;
445 +
                unsafe {
446 +
                    let mut result__ = core::mem::zeroed();
447 +
                    (windows_core::Interface::vtable(this).MonthAsSoloString)(
448 +
                        windows_core::Interface::as_raw(this),
449 +
                        ideallength,
450 +
                        &mut result__,
451 +
                    )
452 +
                    .map(|| core::mem::transmute(result__))
453 +
                }
454 +
            }
455 +
            pub fn MonthAsNumericString(&self) -> windows_core::Result<windows_core::HSTRING> {
456 +
                let this = self;
457 +
                unsafe {
458 +
                    let mut result__ = core::mem::zeroed();
459 +
                    (windows_core::Interface::vtable(this).MonthAsNumericString)(
460 +
                        windows_core::Interface::as_raw(this),
461 +
                        &mut result__,
462 +
                    )
463 +
                    .map(|| core::mem::transmute(result__))
464 +
                }
465 +
            }
466 +
            pub fn MonthAsPaddedNumericString(
467 +
                &self,
468 +
                mindigits: i32,
469 +
            ) -> windows_core::Result<windows_core::HSTRING> {
470 +
                let this = self;
471 +
                unsafe {
472 +
                    let mut result__ = core::mem::zeroed();
473 +
                    (windows_core::Interface::vtable(this).MonthAsPaddedNumericString)(
474 +
                        windows_core::Interface::as_raw(this),
475 +
                        mindigits,
476 +
                        &mut result__,
477 +
                    )
478 +
                    .map(|| core::mem::transmute(result__))
479 +
                }
480 +
            }
481 +
            pub fn AddWeeks(&self, weeks: i32) -> windows_core::Result<()> {
482 +
                let this = self;
483 +
                unsafe {
484 +
                    (windows_core::Interface::vtable(this).AddWeeks)(
485 +
                        windows_core::Interface::as_raw(this),
486 +
                        weeks,
487 +
                    )
488 +
                    .ok()
489 +
                }
490 +
            }
491 +
            pub fn FirstDayInThisMonth(&self) -> windows_core::Result<i32> {
492 +
                let this = self;
493 +
                unsafe {
494 +
                    let mut result__ = core::mem::zeroed();
495 +
                    (windows_core::Interface::vtable(this).FirstDayInThisMonth)(
496 +
                        windows_core::Interface::as_raw(this),
497 +
                        &mut result__,
498 +
                    )
499 +
                    .map(|| result__)
500 +
                }
501 +
            }
502 +
            pub fn LastDayInThisMonth(&self) -> windows_core::Result<i32> {
503 +
                let this = self;
504 +
                unsafe {
505 +
                    let mut result__ = core::mem::zeroed();
506 +
                    (windows_core::Interface::vtable(this).LastDayInThisMonth)(
507 +
                        windows_core::Interface::as_raw(this),
508 +
                        &mut result__,
509 +
                    )
510 +
                    .map(|| result__)
511 +
                }
512 +
            }
513 +
            pub fn NumberOfDaysInThisMonth(&self) -> windows_core::Result<i32> {
514 +
                let this = self;
515 +
                unsafe {
516 +
                    let mut result__ = core::mem::zeroed();
517 +
                    (windows_core::Interface::vtable(this).NumberOfDaysInThisMonth)(
518 +
                        windows_core::Interface::as_raw(this),
519 +
                        &mut result__,
520 +
                    )
521 +
                    .map(|| result__)
522 +
                }
523 +
            }
524 +
            pub fn Day(&self) -> windows_core::Result<i32> {
525 +
                let this = self;
526 +
                unsafe {
527 +
                    let mut result__ = core::mem::zeroed();
528 +
                    (windows_core::Interface::vtable(this).Day)(
529 +
                        windows_core::Interface::as_raw(this),
530 +
                        &mut result__,
531 +
                    )
532 +
                    .map(|| result__)
533 +
                }
534 +
            }
535 +
            pub fn SetDay(&self, value: i32) -> windows_core::Result<()> {
536 +
                let this = self;
537 +
                unsafe {
538 +
                    (windows_core::Interface::vtable(this).SetDay)(
539 +
                        windows_core::Interface::as_raw(this),
540 +
                        value,
541 +
                    )
542 +
                    .ok()
543 +
                }
544 +
            }
545 +
            pub fn AddDays(&self, days: i32) -> windows_core::Result<()> {
546 +
                let this = self;
547 +
                unsafe {
548 +
                    (windows_core::Interface::vtable(this).AddDays)(
549 +
                        windows_core::Interface::as_raw(this),
550 +
                        days,
551 +
                    )
552 +
                    .ok()
553 +
                }
554 +
            }
555 +
            pub fn DayAsString(&self) -> windows_core::Result<windows_core::HSTRING> {
556 +
                let this = self;
557 +
                unsafe {
558 +
                    let mut result__ = core::mem::zeroed();
559 +
                    (windows_core::Interface::vtable(this).DayAsString)(
560 +
                        windows_core::Interface::as_raw(this),
561 +
                        &mut result__,
562 +
                    )
563 +
                    .map(|| core::mem::transmute(result__))
564 +
                }
565 +
            }
566 +
            pub fn DayAsPaddedString(
567 +
                &self,
568 +
                mindigits: i32,
569 +
            ) -> windows_core::Result<windows_core::HSTRING> {
570 +
                let this = self;
571 +
                unsafe {
572 +
                    let mut result__ = core::mem::zeroed();
573 +
                    (windows_core::Interface::vtable(this).DayAsPaddedString)(
574 +
                        windows_core::Interface::as_raw(this),
575 +
                        mindigits,
576 +
                        &mut result__,
577 +
                    )
578 +
                    .map(|| core::mem::transmute(result__))
579 +
                }
580 +
            }
581 +
            pub fn DayOfWeekAsFullString(&self) -> windows_core::Result<windows_core::HSTRING> {
582 +
                let this = self;
583 +
                unsafe {
584 +
                    let mut result__ = core::mem::zeroed();
585 +
                    (windows_core::Interface::vtable(this).DayOfWeekAsFullString)(
586 +
                        windows_core::Interface::as_raw(this),
587 +
                        &mut result__,
588 +
                    )
589 +
                    .map(|| core::mem::transmute(result__))
590 +
                }
591 +
            }
592 +
            pub fn DayOfWeekAsString(
593 +
                &self,
594 +
                ideallength: i32,
595 +
            ) -> windows_core::Result<windows_core::HSTRING> {
596 +
                let this = self;
597 +
                unsafe {
598 +
                    let mut result__ = core::mem::zeroed();
599 +
                    (windows_core::Interface::vtable(this).DayOfWeekAsString)(
600 +
                        windows_core::Interface::as_raw(this),
601 +
                        ideallength,
602 +
                        &mut result__,
603 +
                    )
604 +
                    .map(|| core::mem::transmute(result__))
605 +
                }
606 +
            }
607 +
            pub fn DayOfWeekAsFullSoloString(&self) -> windows_core::Result<windows_core::HSTRING> {
608 +
                let this = self;
609 +
                unsafe {
610 +
                    let mut result__ = core::mem::zeroed();
611 +
                    (windows_core::Interface::vtable(this).DayOfWeekAsFullSoloString)(
612 +
                        windows_core::Interface::as_raw(this),
613 +
                        &mut result__,
614 +
                    )
615 +
                    .map(|| core::mem::transmute(result__))
616 +
                }
617 +
            }
618 +
            pub fn DayOfWeekAsSoloString(
619 +
                &self,
620 +
                ideallength: i32,
621 +
            ) -> windows_core::Result<windows_core::HSTRING> {
622 +
                let this = self;
623 +
                unsafe {
624 +
                    let mut result__ = core::mem::zeroed();
625 +
                    (windows_core::Interface::vtable(this).DayOfWeekAsSoloString)(
626 +
                        windows_core::Interface::as_raw(this),
627 +
                        ideallength,
628 +
                        &mut result__,
629 +
                    )
630 +
                    .map(|| core::mem::transmute(result__))
631 +
                }
632 +
            }
633 +
            pub fn FirstPeriodInThisDay(&self) -> windows_core::Result<i32> {
634 +
                let this = self;
635 +
                unsafe {
636 +
                    let mut result__ = core::mem::zeroed();
637 +
                    (windows_core::Interface::vtable(this).FirstPeriodInThisDay)(
638 +
                        windows_core::Interface::as_raw(this),
639 +
                        &mut result__,
640 +
                    )
641 +
                    .map(|| result__)
642 +
                }
643 +
            }
644 +
            pub fn LastPeriodInThisDay(&self) -> windows_core::Result<i32> {
645 +
                let this = self;
646 +
                unsafe {
647 +
                    let mut result__ = core::mem::zeroed();
648 +
                    (windows_core::Interface::vtable(this).LastPeriodInThisDay)(
649 +
                        windows_core::Interface::as_raw(this),
650 +
                        &mut result__,
651 +
                    )
652 +
                    .map(|| result__)
653 +
                }
654 +
            }
655 +
            pub fn NumberOfPeriodsInThisDay(&self) -> windows_core::Result<i32> {
656 +
                let this = self;
657 +
                unsafe {
658 +
                    let mut result__ = core::mem::zeroed();
659 +
                    (windows_core::Interface::vtable(this).NumberOfPeriodsInThisDay)(
660 +
                        windows_core::Interface::as_raw(this),
661 +
                        &mut result__,
662 +
                    )
663 +
                    .map(|| result__)
664 +
                }
665 +
            }
666 +
            pub fn Period(&self) -> windows_core::Result<i32> {
667 +
                let this = self;
668 +
                unsafe {
669 +
                    let mut result__ = core::mem::zeroed();
670 +
                    (windows_core::Interface::vtable(this).Period)(
671 +
                        windows_core::Interface::as_raw(this),
672 +
                        &mut result__,
673 +
                    )
674 +
                    .map(|| result__)
675 +
                }
676 +
            }
677 +
            pub fn SetPeriod(&self, value: i32) -> windows_core::Result<()> {
678 +
                let this = self;
679 +
                unsafe {
680 +
                    (windows_core::Interface::vtable(this).SetPeriod)(
681 +
                        windows_core::Interface::as_raw(this),
682 +
                        value,
683 +
                    )
684 +
                    .ok()
685 +
                }
686 +
            }
687 +
            pub fn AddPeriods(&self, periods: i32) -> windows_core::Result<()> {
688 +
                let this = self;
689 +
                unsafe {
690 +
                    (windows_core::Interface::vtable(this).AddPeriods)(
691 +
                        windows_core::Interface::as_raw(this),
692 +
                        periods,
693 +
                    )
694 +
                    .ok()
695 +
                }
696 +
            }
697 +
            pub fn PeriodAsFullString(&self) -> windows_core::Result<windows_core::HSTRING> {
698 +
                let this = self;
699 +
                unsafe {
700 +
                    let mut result__ = core::mem::zeroed();
701 +
                    (windows_core::Interface::vtable(this).PeriodAsFullString)(
702 +
                        windows_core::Interface::as_raw(this),
703 +
                        &mut result__,
704 +
                    )
705 +
                    .map(|| core::mem::transmute(result__))
706 +
                }
707 +
            }
708 +
            pub fn PeriodAsString(
709 +
                &self,
710 +
                ideallength: i32,
711 +
            ) -> windows_core::Result<windows_core::HSTRING> {
712 +
                let this = self;
713 +
                unsafe {
714 +
                    let mut result__ = core::mem::zeroed();
715 +
                    (windows_core::Interface::vtable(this).PeriodAsString)(
716 +
                        windows_core::Interface::as_raw(this),
717 +
                        ideallength,
718 +
                        &mut result__,
719 +
                    )
720 +
                    .map(|| core::mem::transmute(result__))
721 +
                }
722 +
            }
723 +
            pub fn FirstHourInThisPeriod(&self) -> windows_core::Result<i32> {
724 +
                let this = self;
725 +
                unsafe {
726 +
                    let mut result__ = core::mem::zeroed();
727 +
                    (windows_core::Interface::vtable(this).FirstHourInThisPeriod)(
728 +
                        windows_core::Interface::as_raw(this),
729 +
                        &mut result__,
730 +
                    )
731 +
                    .map(|| result__)
732 +
                }
733 +
            }
734 +
            pub fn LastHourInThisPeriod(&self) -> windows_core::Result<i32> {
735 +
                let this = self;
736 +
                unsafe {
737 +
                    let mut result__ = core::mem::zeroed();
738 +
                    (windows_core::Interface::vtable(this).LastHourInThisPeriod)(
739 +
                        windows_core::Interface::as_raw(this),
740 +
                        &mut result__,
741 +
                    )
742 +
                    .map(|| result__)
743 +
                }
744 +
            }
745 +
            pub fn NumberOfHoursInThisPeriod(&self) -> windows_core::Result<i32> {
746 +
                let this = self;
747 +
                unsafe {
748 +
                    let mut result__ = core::mem::zeroed();
749 +
                    (windows_core::Interface::vtable(this).NumberOfHoursInThisPeriod)(
750 +
                        windows_core::Interface::as_raw(this),
751 +
                        &mut result__,
752 +
                    )
753 +
                    .map(|| result__)
754 +
                }
755 +
            }
756 +
            pub fn Hour(&self) -> windows_core::Result<i32> {
757 +
                let this = self;
758 +
                unsafe {
759 +
                    let mut result__ = core::mem::zeroed();
760 +
                    (windows_core::Interface::vtable(this).Hour)(
761 +
                        windows_core::Interface::as_raw(this),
762 +
                        &mut result__,
763 +
                    )
764 +
                    .map(|| result__)
765 +
                }
766 +
            }
767 +
            pub fn SetHour(&self, value: i32) -> windows_core::Result<()> {
768 +
                let this = self;
769 +
                unsafe {
770 +
                    (windows_core::Interface::vtable(this).SetHour)(
771 +
                        windows_core::Interface::as_raw(this),
772 +
                        value,
773 +
                    )
774 +
                    .ok()
775 +
                }
776 +
            }
777 +
            pub fn AddHours(&self, hours: i32) -> windows_core::Result<()> {
778 +
                let this = self;
779 +
                unsafe {
780 +
                    (windows_core::Interface::vtable(this).AddHours)(
781 +
                        windows_core::Interface::as_raw(this),
782 +
                        hours,
783 +
                    )
784 +
                    .ok()
785 +
                }
786 +
            }
787 +
            pub fn HourAsString(&self) -> windows_core::Result<windows_core::HSTRING> {
788 +
                let this = self;
789 +
                unsafe {
790 +
                    let mut result__ = core::mem::zeroed();
791 +
                    (windows_core::Interface::vtable(this).HourAsString)(
792 +
                        windows_core::Interface::as_raw(this),
793 +
                        &mut result__,
794 +
                    )
795 +
                    .map(|| core::mem::transmute(result__))
796 +
                }
797 +
            }
798 +
            pub fn HourAsPaddedString(
799 +
                &self,
800 +
                mindigits: i32,
801 +
            ) -> windows_core::Result<windows_core::HSTRING> {
802 +
                let this = self;
803 +
                unsafe {
804 +
                    let mut result__ = core::mem::zeroed();
805 +
                    (windows_core::Interface::vtable(this).HourAsPaddedString)(
806 +
                        windows_core::Interface::as_raw(this),
807 +
                        mindigits,
808 +
                        &mut result__,
809 +
                    )
810 +
                    .map(|| core::mem::transmute(result__))
811 +
                }
812 +
            }
813 +
            pub fn Minute(&self) -> windows_core::Result<i32> {
814 +
                let this = self;
815 +
                unsafe {
816 +
                    let mut result__ = core::mem::zeroed();
817 +
                    (windows_core::Interface::vtable(this).Minute)(
818 +
                        windows_core::Interface::as_raw(this),
819 +
                        &mut result__,
820 +
                    )
821 +
                    .map(|| result__)
822 +
                }
823 +
            }
824 +
            pub fn SetMinute(&self, value: i32) -> windows_core::Result<()> {
825 +
                let this = self;
826 +
                unsafe {
827 +
                    (windows_core::Interface::vtable(this).SetMinute)(
828 +
                        windows_core::Interface::as_raw(this),
829 +
                        value,
830 +
                    )
831 +
                    .ok()
832 +
                }
833 +
            }
834 +
            pub fn AddMinutes(&self, minutes: i32) -> windows_core::Result<()> {
835 +
                let this = self;
836 +
                unsafe {
837 +
                    (windows_core::Interface::vtable(this).AddMinutes)(
838 +
                        windows_core::Interface::as_raw(this),
839 +
                        minutes,
840 +
                    )
841 +
                    .ok()
842 +
                }
843 +
            }
844 +
            pub fn MinuteAsString(&self) -> windows_core::Result<windows_core::HSTRING> {
845 +
                let this = self;
846 +
                unsafe {
847 +
                    let mut result__ = core::mem::zeroed();
848 +
                    (windows_core::Interface::vtable(this).MinuteAsString)(
849 +
                        windows_core::Interface::as_raw(this),
850 +
                        &mut result__,
851 +
                    )
852 +
                    .map(|| core::mem::transmute(result__))
853 +
                }
854 +
            }
855 +
            pub fn MinuteAsPaddedString(
856 +
                &self,
857 +
                mindigits: i32,
858 +
            ) -> windows_core::Result<windows_core::HSTRING> {
859 +
                let this = self;
860 +
                unsafe {
861 +
                    let mut result__ = core::mem::zeroed();
862 +
                    (windows_core::Interface::vtable(this).MinuteAsPaddedString)(
863 +
                        windows_core::Interface::as_raw(this),
864 +
                        mindigits,
865 +
                        &mut result__,
866 +
                    )
867 +
                    .map(|| core::mem::transmute(result__))
868 +
                }
869 +
            }
870 +
            pub fn Second(&self) -> windows_core::Result<i32> {
871 +
                let this = self;
872 +
                unsafe {
873 +
                    let mut result__ = core::mem::zeroed();
874 +
                    (windows_core::Interface::vtable(this).Second)(
875 +
                        windows_core::Interface::as_raw(this),
876 +
                        &mut result__,
877 +
                    )
878 +
                    .map(|| result__)
879 +
                }
880 +
            }
881 +
            pub fn SetSecond(&self, value: i32) -> windows_core::Result<()> {
882 +
                let this = self;
883 +
                unsafe {
884 +
                    (windows_core::Interface::vtable(this).SetSecond)(
885 +
                        windows_core::Interface::as_raw(this),
886 +
                        value,
887 +
                    )
888 +
                    .ok()
889 +
                }
890 +
            }
891 +
            pub fn AddSeconds(&self, seconds: i32) -> windows_core::Result<()> {
892 +
                let this = self;
893 +
                unsafe {
894 +
                    (windows_core::Interface::vtable(this).AddSeconds)(
895 +
                        windows_core::Interface::as_raw(this),
896 +
                        seconds,
897 +
                    )
898 +
                    .ok()
899 +
                }
900 +
            }
901 +
            pub fn SecondAsString(&self) -> windows_core::Result<windows_core::HSTRING> {
902 +
                let this = self;
903 +
                unsafe {
904 +
                    let mut result__ = core::mem::zeroed();
905 +
                    (windows_core::Interface::vtable(this).SecondAsString)(
906 +
                        windows_core::Interface::as_raw(this),
907 +
                        &mut result__,
908 +
                    )
909 +
                    .map(|| core::mem::transmute(result__))
910 +
                }
911 +
            }
912 +
            pub fn SecondAsPaddedString(
913 +
                &self,
914 +
                mindigits: i32,
915 +
            ) -> windows_core::Result<windows_core::HSTRING> {
916 +
                let this = self;
917 +
                unsafe {
918 +
                    let mut result__ = core::mem::zeroed();
919 +
                    (windows_core::Interface::vtable(this).SecondAsPaddedString)(
920 +
                        windows_core::Interface::as_raw(this),
921 +
                        mindigits,
922 +
                        &mut result__,
923 +
                    )
924 +
                    .map(|| core::mem::transmute(result__))
925 +
                }
926 +
            }
927 +
            pub fn Nanosecond(&self) -> windows_core::Result<i32> {
928 +
                let this = self;
929 +
                unsafe {
930 +
                    let mut result__ = core::mem::zeroed();
931 +
                    (windows_core::Interface::vtable(this).Nanosecond)(
932 +
                        windows_core::Interface::as_raw(this),
933 +
                        &mut result__,
934 +
                    )
935 +
                    .map(|| result__)
936 +
                }
937 +
            }
938 +
            pub fn SetNanosecond(&self, value: i32) -> windows_core::Result<()> {
939 +
                let this = self;
940 +
                unsafe {
941 +
                    (windows_core::Interface::vtable(this).SetNanosecond)(
942 +
                        windows_core::Interface::as_raw(this),
943 +
                        value,
944 +
                    )
945 +
                    .ok()
946 +
                }
947 +
            }
948 +
            pub fn AddNanoseconds(&self, nanoseconds: i32) -> windows_core::Result<()> {
949 +
                let this = self;
950 +
                unsafe {
951 +
                    (windows_core::Interface::vtable(this).AddNanoseconds)(
952 +
                        windows_core::Interface::as_raw(this),
953 +
                        nanoseconds,
954 +
                    )
955 +
                    .ok()
956 +
                }
957 +
            }
958 +
            pub fn NanosecondAsString(&self) -> windows_core::Result<windows_core::HSTRING> {
959 +
                let this = self;
960 +
                unsafe {
961 +
                    let mut result__ = core::mem::zeroed();
962 +
                    (windows_core::Interface::vtable(this).NanosecondAsString)(
963 +
                        windows_core::Interface::as_raw(this),
964 +
                        &mut result__,
965 +
                    )
966 +
                    .map(|| core::mem::transmute(result__))
967 +
                }
968 +
            }
969 +
            pub fn NanosecondAsPaddedString(
970 +
                &self,
971 +
                mindigits: i32,
972 +
            ) -> windows_core::Result<windows_core::HSTRING> {
973 +
                let this = self;
974 +
                unsafe {
975 +
                    let mut result__ = core::mem::zeroed();
976 +
                    (windows_core::Interface::vtable(this).NanosecondAsPaddedString)(
977 +
                        windows_core::Interface::as_raw(this),
978 +
                        mindigits,
979 +
                        &mut result__,
980 +
                    )
981 +
                    .map(|| core::mem::transmute(result__))
982 +
                }
983 +
            }
984 +
            pub fn Compare<P0>(&self, other: P0) -> windows_core::Result<i32>
985 +
            where
986 +
                P0: windows_core::Param<Calendar>,
987 +
            {
988 +
                let this = self;
989 +
                unsafe {
990 +
                    let mut result__ = core::mem::zeroed();
991 +
                    (windows_core::Interface::vtable(this).Compare)(
992 +
                        windows_core::Interface::as_raw(this),
993 +
                        other.param().abi(),
994 +
                        &mut result__,
995 +
                    )
996 +
                    .map(|| result__)
997 +
                }
998 +
            }
999 +
            pub fn CopyTo<P0>(&self, other: P0) -> windows_core::Result<()>
1000 +
            where
1001 +
                P0: windows_core::Param<Calendar>,
1002 +
            {
1003 +
                let this = self;
1004 +
                unsafe {
1005 +
                    (windows_core::Interface::vtable(this).CopyTo)(
1006 +
                        windows_core::Interface::as_raw(this),
1007 +
                        other.param().abi(),
1008 +
                    )
1009 +
                    .ok()
1010 +
                }
1011 +
            }
1012 +
            pub fn FirstMinuteInThisHour(&self) -> windows_core::Result<i32> {
1013 +
                let this = self;
1014 +
                unsafe {
1015 +
                    let mut result__ = core::mem::zeroed();
1016 +
                    (windows_core::Interface::vtable(this).FirstMinuteInThisHour)(
1017 +
                        windows_core::Interface::as_raw(this),
1018 +
                        &mut result__,
1019 +
                    )
1020 +
                    .map(|| result__)
1021 +
                }
1022 +
            }
1023 +
            pub fn LastMinuteInThisHour(&self) -> windows_core::Result<i32> {
1024 +
                let this = self;
1025 +
                unsafe {
1026 +
                    let mut result__ = core::mem::zeroed();
1027 +
                    (windows_core::Interface::vtable(this).LastMinuteInThisHour)(
1028 +
                        windows_core::Interface::as_raw(this),
1029 +
                        &mut result__,
1030 +
                    )
1031 +
                    .map(|| result__)
1032 +
                }
1033 +
            }
1034 +
            pub fn NumberOfMinutesInThisHour(&self) -> windows_core::Result<i32> {
1035 +
                let this = self;
1036 +
                unsafe {
1037 +
                    let mut result__ = core::mem::zeroed();
1038 +
                    (windows_core::Interface::vtable(this).NumberOfMinutesInThisHour)(
1039 +
                        windows_core::Interface::as_raw(this),
1040 +
                        &mut result__,
1041 +
                    )
1042 +
                    .map(|| result__)
1043 +
                }
1044 +
            }
1045 +
            pub fn FirstSecondInThisMinute(&self) -> windows_core::Result<i32> {
1046 +
                let this = self;
1047 +
                unsafe {
1048 +
                    let mut result__ = core::mem::zeroed();
1049 +
                    (windows_core::Interface::vtable(this).FirstSecondInThisMinute)(
1050 +
                        windows_core::Interface::as_raw(this),
1051 +
                        &mut result__,
1052 +
                    )
1053 +
                    .map(|| result__)
1054 +
                }
1055 +
            }
1056 +
            pub fn LastSecondInThisMinute(&self) -> windows_core::Result<i32> {
1057 +
                let this = self;
1058 +
                unsafe {
1059 +
                    let mut result__ = core::mem::zeroed();
1060 +
                    (windows_core::Interface::vtable(this).LastSecondInThisMinute)(
1061 +
                        windows_core::Interface::as_raw(this),
1062 +
                        &mut result__,
1063 +
                    )
1064 +
                    .map(|| result__)
1065 +
                }
1066 +
            }
1067 +
            pub fn NumberOfSecondsInThisMinute(&self) -> windows_core::Result<i32> {
1068 +
                let this = self;
1069 +
                unsafe {
1070 +
                    let mut result__ = core::mem::zeroed();
1071 +
                    (windows_core::Interface::vtable(this).NumberOfSecondsInThisMinute)(
1072 +
                        windows_core::Interface::as_raw(this),
1073 +
                        &mut result__,
1074 +
                    )
1075 +
                    .map(|| result__)
1076 +
                }
1077 +
            }
1078 +
            pub fn ResolvedLanguage(&self) -> windows_core::Result<windows_core::HSTRING> {
1079 +
                let this = self;
1080 +
                unsafe {
1081 +
                    let mut result__ = core::mem::zeroed();
1082 +
                    (windows_core::Interface::vtable(this).ResolvedLanguage)(
1083 +
                        windows_core::Interface::as_raw(this),
1084 +
                        &mut result__,
1085 +
                    )
1086 +
                    .map(|| core::mem::transmute(result__))
1087 +
                }
1088 +
            }
1089 +
            pub fn IsDaylightSavingTime(&self) -> windows_core::Result<bool> {
1090 +
                let this = self;
1091 +
                unsafe {
1092 +
                    let mut result__ = core::mem::zeroed();
1093 +
                    (windows_core::Interface::vtable(this).IsDaylightSavingTime)(
1094 +
                        windows_core::Interface::as_raw(this),
1095 +
                        &mut result__,
1096 +
                    )
1097 +
                    .map(|| result__)
1098 +
                }
1099 +
            }
1100 +
            pub fn GetTimeZone(&self) -> windows_core::Result<windows_core::HSTRING> {
1101 +
                let this = &windows_core::Interface::cast::<ITimeZoneOnCalendar>(self)?;
1102 +
                unsafe {
1103 +
                    let mut result__ = core::mem::zeroed();
1104 +
                    (windows_core::Interface::vtable(this).GetTimeZone)(
1105 +
                        windows_core::Interface::as_raw(this),
1106 +
                        &mut result__,
1107 +
                    )
1108 +
                    .map(|| core::mem::transmute(result__))
1109 +
                }
1110 +
            }
1111 +
            pub fn ChangeTimeZone(
1112 +
                &self,
1113 +
                timezoneid: &windows_core::HSTRING,
1114 +
            ) -> windows_core::Result<()> {
1115 +
                let this = &windows_core::Interface::cast::<ITimeZoneOnCalendar>(self)?;
1116 +
                unsafe {
1117 +
                    (windows_core::Interface::vtable(this).ChangeTimeZone)(
1118 +
                        windows_core::Interface::as_raw(this),
1119 +
                        core::mem::transmute_copy(timezoneid),
1120 +
                    )
1121 +
                    .ok()
1122 +
                }
1123 +
            }
1124 +
            pub fn TimeZoneAsFullString(&self) -> windows_core::Result<windows_core::HSTRING> {
1125 +
                let this = &windows_core::Interface::cast::<ITimeZoneOnCalendar>(self)?;
1126 +
                unsafe {
1127 +
                    let mut result__ = core::mem::zeroed();
1128 +
                    (windows_core::Interface::vtable(this).TimeZoneAsFullString)(
1129 +
                        windows_core::Interface::as_raw(this),
1130 +
                        &mut result__,
1131 +
                    )
1132 +
                    .map(|| core::mem::transmute(result__))
1133 +
                }
1134 +
            }
1135 +
            pub fn TimeZoneAsString(
1136 +
                &self,
1137 +
                ideallength: i32,
1138 +
            ) -> windows_core::Result<windows_core::HSTRING> {
1139 +
                let this = &windows_core::Interface::cast::<ITimeZoneOnCalendar>(self)?;
1140 +
                unsafe {
1141 +
                    let mut result__ = core::mem::zeroed();
1142 +
                    (windows_core::Interface::vtable(this).TimeZoneAsString)(
1143 +
                        windows_core::Interface::as_raw(this),
1144 +
                        ideallength,
1145 +
                        &mut result__,
1146 +
                    )
1147 +
                    .map(|| core::mem::transmute(result__))
1148 +
                }
1149 +
            }
1150 +
            fn ICalendarFactory<R, F: FnOnce(&ICalendarFactory) -> windows_core::Result<R>>(
1151 +
                callback: F,
1152 +
            ) -> windows_core::Result<R> {
1153 +
                static SHARED: windows_core::imp::FactoryCache<Calendar, ICalendarFactory> =
1154 +
                    windows_core::imp::FactoryCache::new();
1155 +
                SHARED.call(callback)
1156 +
            }
1157 +
            fn ICalendarFactory2<R, F: FnOnce(&ICalendarFactory2) -> windows_core::Result<R>>(
1158 +
                callback: F,
1159 +
            ) -> windows_core::Result<R> {
1160 +
                static SHARED: windows_core::imp::FactoryCache<Calendar, ICalendarFactory2> =
1161 +
                    windows_core::imp::FactoryCache::new();
1162 +
                SHARED.call(callback)
1163 +
            }
1164 +
        }
1165 +
        impl windows_core::RuntimeType for Calendar {
1166 +
            const SIGNATURE: windows_core::imp::ConstBuffer =
1167 +
                windows_core::imp::ConstBuffer::for_class::<Self, ICalendar>();
1168 +
        }
1169 +
        unsafe impl windows_core::Interface for Calendar {
1170 +
            type Vtable = <ICalendar as windows_core::Interface>::Vtable;
1171 +
            const IID: windows_core::GUID = <ICalendar as windows_core::Interface>::IID;
1172 +
        }
1173 +
        impl windows_core::RuntimeName for Calendar {
1174 +
            const NAME: &'static str = "Windows.Globalization.Calendar";
1175 +
        }
1176 +
        unsafe impl Send for Calendar {}
1177 +
        unsafe impl Sync for Calendar {}
1178 +
        windows_core::imp::define_interface!(
1179 +
            ICalendar,
1180 +
            ICalendar_Vtbl,
1181 +
            0xca30221d_86d9_40fb_a26b_d44eb7cf08ea
1182 +
        );
1183 +
        impl windows_core::RuntimeType for ICalendar {
1184 +
            const SIGNATURE: windows_core::imp::ConstBuffer =
1185 +
                windows_core::imp::ConstBuffer::for_interface::<Self>();
1186 +
        }
1187 +
        #[repr(C)]
1188 +
        pub struct ICalendar_Vtbl {
1189 +
            pub base__: windows_core::IInspectable_Vtbl,
1190 +
            pub Clone: unsafe extern "system" fn(
1191 +
                *mut core::ffi::c_void,
1192 +
                *mut *mut core::ffi::c_void,
1193 +
            ) -> windows_core::HRESULT,
1194 +
            pub SetToMin:
1195 +
                unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
1196 +
            pub SetToMax:
1197 +
                unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
1198 +
            get_Languages: usize,
1199 +
            pub NumeralSystem: unsafe extern "system" fn(
1200 +
                *mut core::ffi::c_void,
1201 +
                *mut *mut core::ffi::c_void,
1202 +
            ) -> windows_core::HRESULT,
1203 +
            pub SetNumeralSystem: unsafe extern "system" fn(
1204 +
                *mut core::ffi::c_void,
1205 +
                *mut core::ffi::c_void,
1206 +
            ) -> windows_core::HRESULT,
1207 +
            pub GetCalendarSystem: unsafe extern "system" fn(
1208 +
                *mut core::ffi::c_void,
1209 +
                *mut *mut core::ffi::c_void,
1210 +
            ) -> windows_core::HRESULT,
1211 +
            pub ChangeCalendarSystem: unsafe extern "system" fn(
1212 +
                *mut core::ffi::c_void,
1213 +
                *mut core::ffi::c_void,
1214 +
            )
1215 +
                -> windows_core::HRESULT,
1216 +
            pub GetClock: unsafe extern "system" fn(
1217 +
                *mut core::ffi::c_void,
1218 +
                *mut *mut core::ffi::c_void,
1219 +
            ) -> windows_core::HRESULT,
1220 +
            pub ChangeClock: unsafe extern "system" fn(
1221 +
                *mut core::ffi::c_void,
1222 +
                *mut core::ffi::c_void,
1223 +
            ) -> windows_core::HRESULT,
1224 +
            GetDateTime: usize,
1225 +
            SetDateTime: usize,
1226 +
            pub SetToNow:
1227 +
                unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
1228 +
            pub FirstEra: unsafe extern "system" fn(
1229 +
                *mut core::ffi::c_void,
1230 +
                *mut i32,
1231 +
            ) -> windows_core::HRESULT,
1232 +
            pub LastEra: unsafe extern "system" fn(
1233 +
                *mut core::ffi::c_void,
1234 +
                *mut i32,
1235 +
            ) -> windows_core::HRESULT,
1236 +
            pub NumberOfEras: unsafe extern "system" fn(
1237 +
                *mut core::ffi::c_void,
1238 +
                *mut i32,
1239 +
            ) -> windows_core::HRESULT,
1240 +
            pub Era: unsafe extern "system" fn(
1241 +
                *mut core::ffi::c_void,
1242 +
                *mut i32,
1243 +
            ) -> windows_core::HRESULT,
1244 +
            pub SetEra:
1245 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1246 +
            pub AddEras:
1247 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1248 +
            pub EraAsFullString: unsafe extern "system" fn(
1249 +
                *mut core::ffi::c_void,
1250 +
                *mut *mut core::ffi::c_void,
1251 +
            ) -> windows_core::HRESULT,
1252 +
            pub EraAsString: unsafe extern "system" fn(
1253 +
                *mut core::ffi::c_void,
1254 +
                i32,
1255 +
                *mut *mut core::ffi::c_void,
1256 +
            ) -> windows_core::HRESULT,
1257 +
            pub FirstYearInThisEra: unsafe extern "system" fn(
1258 +
                *mut core::ffi::c_void,
1259 +
                *mut i32,
1260 +
            ) -> windows_core::HRESULT,
1261 +
            pub LastYearInThisEra: unsafe extern "system" fn(
1262 +
                *mut core::ffi::c_void,
1263 +
                *mut i32,
1264 +
            ) -> windows_core::HRESULT,
1265 +
            pub NumberOfYearsInThisEra: unsafe extern "system" fn(
1266 +
                *mut core::ffi::c_void,
1267 +
                *mut i32,
1268 +
            )
1269 +
                -> windows_core::HRESULT,
1270 +
            pub Year: unsafe extern "system" fn(
1271 +
                *mut core::ffi::c_void,
1272 +
                *mut i32,
1273 +
            ) -> windows_core::HRESULT,
1274 +
            pub SetYear:
1275 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1276 +
            pub AddYears:
1277 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1278 +
            pub YearAsString: unsafe extern "system" fn(
1279 +
                *mut core::ffi::c_void,
1280 +
                *mut *mut core::ffi::c_void,
1281 +
            ) -> windows_core::HRESULT,
1282 +
            pub YearAsTruncatedString: unsafe extern "system" fn(
1283 +
                *mut core::ffi::c_void,
1284 +
                i32,
1285 +
                *mut *mut core::ffi::c_void,
1286 +
            )
1287 +
                -> windows_core::HRESULT,
1288 +
            pub YearAsPaddedString: unsafe extern "system" fn(
1289 +
                *mut core::ffi::c_void,
1290 +
                i32,
1291 +
                *mut *mut core::ffi::c_void,
1292 +
            ) -> windows_core::HRESULT,
1293 +
            pub FirstMonthInThisYear: unsafe extern "system" fn(
1294 +
                *mut core::ffi::c_void,
1295 +
                *mut i32,
1296 +
            )
1297 +
                -> windows_core::HRESULT,
1298 +
            pub LastMonthInThisYear: unsafe extern "system" fn(
1299 +
                *mut core::ffi::c_void,
1300 +
                *mut i32,
1301 +
            )
1302 +
                -> windows_core::HRESULT,
1303 +
            pub NumberOfMonthsInThisYear: unsafe extern "system" fn(
1304 +
                *mut core::ffi::c_void,
1305 +
                *mut i32,
1306 +
            )
1307 +
                -> windows_core::HRESULT,
1308 +
            pub Month: unsafe extern "system" fn(
1309 +
                *mut core::ffi::c_void,
1310 +
                *mut i32,
1311 +
            ) -> windows_core::HRESULT,
1312 +
            pub SetMonth:
1313 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1314 +
            pub AddMonths:
1315 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1316 +
            pub MonthAsFullString: unsafe extern "system" fn(
1317 +
                *mut core::ffi::c_void,
1318 +
                *mut *mut core::ffi::c_void,
1319 +
            ) -> windows_core::HRESULT,
1320 +
            pub MonthAsString: unsafe extern "system" fn(
1321 +
                *mut core::ffi::c_void,
1322 +
                i32,
1323 +
                *mut *mut core::ffi::c_void,
1324 +
            ) -> windows_core::HRESULT,
1325 +
            pub MonthAsFullSoloString: unsafe extern "system" fn(
1326 +
                *mut core::ffi::c_void,
1327 +
                *mut *mut core::ffi::c_void,
1328 +
            )
1329 +
                -> windows_core::HRESULT,
1330 +
            pub MonthAsSoloString: unsafe extern "system" fn(
1331 +
                *mut core::ffi::c_void,
1332 +
                i32,
1333 +
                *mut *mut core::ffi::c_void,
1334 +
            ) -> windows_core::HRESULT,
1335 +
            pub MonthAsNumericString: unsafe extern "system" fn(
1336 +
                *mut core::ffi::c_void,
1337 +
                *mut *mut core::ffi::c_void,
1338 +
            )
1339 +
                -> windows_core::HRESULT,
1340 +
            pub MonthAsPaddedNumericString: unsafe extern "system" fn(
1341 +
                *mut core::ffi::c_void,
1342 +
                i32,
1343 +
                *mut *mut core::ffi::c_void,
1344 +
            )
1345 +
                -> windows_core::HRESULT,
1346 +
            pub AddWeeks:
1347 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1348 +
            pub FirstDayInThisMonth: unsafe extern "system" fn(
1349 +
                *mut core::ffi::c_void,
1350 +
                *mut i32,
1351 +
            )
1352 +
                -> windows_core::HRESULT,
1353 +
            pub LastDayInThisMonth: unsafe extern "system" fn(
1354 +
                *mut core::ffi::c_void,
1355 +
                *mut i32,
1356 +
            ) -> windows_core::HRESULT,
1357 +
            pub NumberOfDaysInThisMonth: unsafe extern "system" fn(
1358 +
                *mut core::ffi::c_void,
1359 +
                *mut i32,
1360 +
            )
1361 +
                -> windows_core::HRESULT,
1362 +
            pub Day: unsafe extern "system" fn(
1363 +
                *mut core::ffi::c_void,
1364 +
                *mut i32,
1365 +
            ) -> windows_core::HRESULT,
1366 +
            pub SetDay:
1367 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1368 +
            pub AddDays:
1369 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1370 +
            pub DayAsString: unsafe extern "system" fn(
1371 +
                *mut core::ffi::c_void,
1372 +
                *mut *mut core::ffi::c_void,
1373 +
            ) -> windows_core::HRESULT,
1374 +
            pub DayAsPaddedString: unsafe extern "system" fn(
1375 +
                *mut core::ffi::c_void,
1376 +
                i32,
1377 +
                *mut *mut core::ffi::c_void,
1378 +
            ) -> windows_core::HRESULT,
1379 +
            get_DayOfWeek: usize,
1380 +
            pub DayOfWeekAsFullString: unsafe extern "system" fn(
1381 +
                *mut core::ffi::c_void,
1382 +
                *mut *mut core::ffi::c_void,
1383 +
            )
1384 +
                -> windows_core::HRESULT,
1385 +
            pub DayOfWeekAsString: unsafe extern "system" fn(
1386 +
                *mut core::ffi::c_void,
1387 +
                i32,
1388 +
                *mut *mut core::ffi::c_void,
1389 +
            ) -> windows_core::HRESULT,
1390 +
            pub DayOfWeekAsFullSoloString: unsafe extern "system" fn(
1391 +
                *mut core::ffi::c_void,
1392 +
                *mut *mut core::ffi::c_void,
1393 +
            )
1394 +
                -> windows_core::HRESULT,
1395 +
            pub DayOfWeekAsSoloString: unsafe extern "system" fn(
1396 +
                *mut core::ffi::c_void,
1397 +
                i32,
1398 +
                *mut *mut core::ffi::c_void,
1399 +
            )
1400 +
                -> windows_core::HRESULT,
1401 +
            pub FirstPeriodInThisDay: unsafe extern "system" fn(
1402 +
                *mut core::ffi::c_void,
1403 +
                *mut i32,
1404 +
            )
1405 +
                -> windows_core::HRESULT,
1406 +
            pub LastPeriodInThisDay: unsafe extern "system" fn(
1407 +
                *mut core::ffi::c_void,
1408 +
                *mut i32,
1409 +
            )
1410 +
                -> windows_core::HRESULT,
1411 +
            pub NumberOfPeriodsInThisDay: unsafe extern "system" fn(
1412 +
                *mut core::ffi::c_void,
1413 +
                *mut i32,
1414 +
            )
1415 +
                -> windows_core::HRESULT,
1416 +
            pub Period: unsafe extern "system" fn(
1417 +
                *mut core::ffi::c_void,
1418 +
                *mut i32,
1419 +
            ) -> windows_core::HRESULT,
1420 +
            pub SetPeriod:
1421 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1422 +
            pub AddPeriods:
1423 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1424 +
            pub PeriodAsFullString: unsafe extern "system" fn(
1425 +
                *mut core::ffi::c_void,
1426 +
                *mut *mut core::ffi::c_void,
1427 +
            ) -> windows_core::HRESULT,
1428 +
            pub PeriodAsString: unsafe extern "system" fn(
1429 +
                *mut core::ffi::c_void,
1430 +
                i32,
1431 +
                *mut *mut core::ffi::c_void,
1432 +
            ) -> windows_core::HRESULT,
1433 +
            pub FirstHourInThisPeriod: unsafe extern "system" fn(
1434 +
                *mut core::ffi::c_void,
1435 +
                *mut i32,
1436 +
            )
1437 +
                -> windows_core::HRESULT,
1438 +
            pub LastHourInThisPeriod: unsafe extern "system" fn(
1439 +
                *mut core::ffi::c_void,
1440 +
                *mut i32,
1441 +
            )
1442 +
                -> windows_core::HRESULT,
1443 +
            pub NumberOfHoursInThisPeriod: unsafe extern "system" fn(
1444 +
                *mut core::ffi::c_void,
1445 +
                *mut i32,
1446 +
            )
1447 +
                -> windows_core::HRESULT,
1448 +
            pub Hour: unsafe extern "system" fn(
1449 +
                *mut core::ffi::c_void,
1450 +
                *mut i32,
1451 +
            ) -> windows_core::HRESULT,
1452 +
            pub SetHour:
1453 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1454 +
            pub AddHours:
1455 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1456 +
            pub HourAsString: unsafe extern "system" fn(
1457 +
                *mut core::ffi::c_void,
1458 +
                *mut *mut core::ffi::c_void,
1459 +
            ) -> windows_core::HRESULT,
1460 +
            pub HourAsPaddedString: unsafe extern "system" fn(
1461 +
                *mut core::ffi::c_void,
1462 +
                i32,
1463 +
                *mut *mut core::ffi::c_void,
1464 +
            ) -> windows_core::HRESULT,
1465 +
            pub Minute: unsafe extern "system" fn(
1466 +
                *mut core::ffi::c_void,
1467 +
                *mut i32,
1468 +
            ) -> windows_core::HRESULT,
1469 +
            pub SetMinute:
1470 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1471 +
            pub AddMinutes:
1472 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1473 +
            pub MinuteAsString: unsafe extern "system" fn(
1474 +
                *mut core::ffi::c_void,
1475 +
                *mut *mut core::ffi::c_void,
1476 +
            ) -> windows_core::HRESULT,
1477 +
            pub MinuteAsPaddedString: unsafe extern "system" fn(
1478 +
                *mut core::ffi::c_void,
1479 +
                i32,
1480 +
                *mut *mut core::ffi::c_void,
1481 +
            )
1482 +
                -> windows_core::HRESULT,
1483 +
            pub Second: unsafe extern "system" fn(
1484 +
                *mut core::ffi::c_void,
1485 +
                *mut i32,
1486 +
            ) -> windows_core::HRESULT,
1487 +
            pub SetSecond:
1488 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1489 +
            pub AddSeconds:
1490 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1491 +
            pub SecondAsString: unsafe extern "system" fn(
1492 +
                *mut core::ffi::c_void,
1493 +
                *mut *mut core::ffi::c_void,
1494 +
            ) -> windows_core::HRESULT,
1495 +
            pub SecondAsPaddedString: unsafe extern "system" fn(
1496 +
                *mut core::ffi::c_void,
1497 +
                i32,
1498 +
                *mut *mut core::ffi::c_void,
1499 +
            )
1500 +
                -> windows_core::HRESULT,
1501 +
            pub Nanosecond: unsafe extern "system" fn(
1502 +
                *mut core::ffi::c_void,
1503 +
                *mut i32,
1504 +
            ) -> windows_core::HRESULT,
1505 +
            pub SetNanosecond:
1506 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1507 +
            pub AddNanoseconds:
1508 +
                unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
1509 +
            pub NanosecondAsString: unsafe extern "system" fn(
1510 +
                *mut core::ffi::c_void,
1511 +
                *mut *mut core::ffi::c_void,
1512 +
            ) -> windows_core::HRESULT,
1513 +
            pub NanosecondAsPaddedString: unsafe extern "system" fn(
1514 +
                *mut core::ffi::c_void,
1515 +
                i32,
1516 +
                *mut *mut core::ffi::c_void,
1517 +
            )
1518 +
                -> windows_core::HRESULT,
1519 +
            pub Compare: unsafe extern "system" fn(
1520 +
                *mut core::ffi::c_void,
1521 +
                *mut core::ffi::c_void,
1522 +
                *mut i32,
1523 +
            ) -> windows_core::HRESULT,
1524 +
            CompareDateTime: usize,
1525 +
            pub CopyTo: unsafe extern "system" fn(
1526 +
                *mut core::ffi::c_void,
1527 +
                *mut core::ffi::c_void,
1528 +
            ) -> windows_core::HRESULT,
1529 +
            pub FirstMinuteInThisHour: unsafe extern "system" fn(
1530 +
                *mut core::ffi::c_void,
1531 +
                *mut i32,
1532 +
            )
1533 +
                -> windows_core::HRESULT,
1534 +
            pub LastMinuteInThisHour: unsafe extern "system" fn(
1535 +
                *mut core::ffi::c_void,
1536 +
                *mut i32,
1537 +
            )
1538 +
                -> windows_core::HRESULT,
1539 +
            pub NumberOfMinutesInThisHour: unsafe extern "system" fn(
1540 +
                *mut core::ffi::c_void,
1541 +
                *mut i32,
1542 +
            )
1543 +
                -> windows_core::HRESULT,
1544 +
            pub FirstSecondInThisMinute: unsafe extern "system" fn(
1545 +
                *mut core::ffi::c_void,
1546 +
                *mut i32,
1547 +
            )
1548 +
                -> windows_core::HRESULT,
1549 +
            pub LastSecondInThisMinute: unsafe extern "system" fn(
1550 +
                *mut core::ffi::c_void,
1551 +
                *mut i32,
1552 +
            )
1553 +
                -> windows_core::HRESULT,
1554 +
            pub NumberOfSecondsInThisMinute: unsafe extern "system" fn(
1555 +
                *mut core::ffi::c_void,
1556 +
                *mut i32,
1557 +
            )
1558 +
                -> windows_core::HRESULT,
1559 +
            pub ResolvedLanguage: unsafe extern "system" fn(
1560 +
                *mut core::ffi::c_void,
1561 +
                *mut *mut core::ffi::c_void,
1562 +
            ) -> windows_core::HRESULT,
1563 +
            pub IsDaylightSavingTime: unsafe extern "system" fn(
1564 +
                *mut core::ffi::c_void,
1565 +
                *mut bool,
1566 +
            )
1567 +
                -> windows_core::HRESULT,
1568 +
        }
1569 +
        windows_core::imp::define_interface!(
1570 +
            ICalendarFactory,
1571 +
            ICalendarFactory_Vtbl,
1572 +
            0x83f58412_e56b_4c75_a66e_0f63d57758a6
1573 +
        );
1574 +
        impl windows_core::RuntimeType for ICalendarFactory {
1575 +
            const SIGNATURE: windows_core::imp::ConstBuffer =
1576 +
                windows_core::imp::ConstBuffer::for_interface::<Self>();
1577 +
        }
1578 +
        #[repr(C)]
1579 +
        pub struct ICalendarFactory_Vtbl {
1580 +
            pub base__: windows_core::IInspectable_Vtbl,
1581 +
            CreateCalendarDefaultCalendarAndClock: usize,
1582 +
            CreateCalendar: usize,
1583 +
        }
1584 +
        windows_core::imp::define_interface!(
1585 +
            ICalendarFactory2,
1586 +
            ICalendarFactory2_Vtbl,
1587 +
            0xb44b378c_ca7e_4590_9e72_ea2bec1a5115
1588 +
        );
1589 +
        impl windows_core::RuntimeType for ICalendarFactory2 {
1590 +
            const SIGNATURE: windows_core::imp::ConstBuffer =
1591 +
                windows_core::imp::ConstBuffer::for_interface::<Self>();
1592 +
        }
1593 +
        #[repr(C)]
1594 +
        pub struct ICalendarFactory2_Vtbl {
1595 +
            pub base__: windows_core::IInspectable_Vtbl,
1596 +
            CreateCalendarWithTimeZone: usize,
1597 +
        }
1598 +
        windows_core::imp::define_interface!(
1599 +
            ITimeZoneOnCalendar,
1600 +
            ITimeZoneOnCalendar_Vtbl,
1601 +
            0xbb3c25e5_46cf_4317_a3f5_02621ad54478
1602 +
        );
1603 +
        impl windows_core::RuntimeType for ITimeZoneOnCalendar {
1604 +
            const SIGNATURE: windows_core::imp::ConstBuffer =
1605 +
                windows_core::imp::ConstBuffer::for_interface::<Self>();
1606 +
        }
1607 +
        #[repr(C)]
1608 +
        pub struct ITimeZoneOnCalendar_Vtbl {
1609 +
            pub base__: windows_core::IInspectable_Vtbl,
1610 +
            pub GetTimeZone: unsafe extern "system" fn(
1611 +
                *mut core::ffi::c_void,
1612 +
                *mut *mut core::ffi::c_void,
1613 +
            ) -> windows_core::HRESULT,
1614 +
            pub ChangeTimeZone: unsafe extern "system" fn(
1615 +
                *mut core::ffi::c_void,
1616 +
                *mut core::ffi::c_void,
1617 +
            ) -> windows_core::HRESULT,
1618 +
            pub TimeZoneAsFullString: unsafe extern "system" fn(
1619 +
                *mut core::ffi::c_void,
1620 +
                *mut *mut core::ffi::c_void,
1621 +
            )
1622 +
                -> windows_core::HRESULT,
1623 +
            pub TimeZoneAsString: unsafe extern "system" fn(
1624 +
                *mut core::ffi::c_void,
1625 +
                i32,
1626 +
                *mut *mut core::ffi::c_void,
1627 +
            ) -> windows_core::HRESULT,
1628 +
        }
1629 +
    }
1630 +
}
modified Cargo.lock +34 −322
…
296 unchanged lines
297 297
298 298
[[package]]
299 299
name = "block-buffer"
300 -
version = "0.10.4"
301 -
source = "registry+https://github.com/rust-lang/crates.io-index"
302 -
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
303 -
dependencies = [
304 -
 "generic-array",
305 -
]
306 -
307 -
[[package]]
308 -
name = "block-buffer"
309 300
version = "0.12.1"
310 301
source = "registry+https://github.com/rust-lang/crates.io-index"
311 302
checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"
…
42 unchanged lines
354 345
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
355 346
356 347
[[package]]
357 -
name = "cfg_aliases"
358 -
version = "0.2.2"
359 -
source = "registry+https://github.com/rust-lang/crates.io-index"
360 -
checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
361 -
362 -
[[package]]
363 348
name = "chacha20"
364 349
version = "0.10.2"
365 350
source = "registry+https://github.com/rust-lang/crates.io-index"
…
113 unchanged lines
479 464
checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b"
480 465
481 466
[[package]]
482 -
name = "core-foundation"
483 -
version = "0.10.1"
467 +
name = "cpufeatures"
468 +
version = "0.3.1"
484 469
source = "registry+https://github.com/rust-lang/crates.io-index"
485 -
checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
470 +
checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566"
486 471
dependencies = [
487 -
 "core-foundation-sys",
488 472
 "libc",
489 473
]
490 474
491 475
[[package]]
492 -
name = "core-foundation-sys"
493 -
version = "0.8.7"
494 -
source = "registry+https://github.com/rust-lang/crates.io-index"
495 -
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
496 -
497 -
[[package]]
498 -
name = "cpufeatures"
499 -
version = "0.3.1"
500 -
source = "registry+https://github.com/rust-lang/crates.io-index"
501 -
checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566"
476 +
name = "crc-fast"
477 +
version = "1.10.0"
502 478
dependencies = [
503 -
 "libc",
479 +
 "digest 0.10.7",
480 +
 "spin",
504 481
]
505 482
506 483
[[package]]
…
129 unchanged lines
636 613
source = "registry+https://github.com/rust-lang/crates.io-index"
637 614
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
638 615
dependencies = [
639 -
 "block-buffer 0.10.4",
640 616
 "crypto-common 0.1.7",
641 617
]
642 618
…
3 unchanged lines
646 622
source = "registry+https://github.com/rust-lang/crates.io-index"
647 623
checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
648 624
dependencies = [
649 -
 "block-buffer 0.12.1",
625 +
 "block-buffer",
650 626
 "crypto-common 0.2.2",
651 627
]
652 628
…
217 unchanged lines
870 846
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
871 847
dependencies = [
872 848
 "cfg-if",
873 -
 "js-sys",
874 849
 "libc",
875 850
 "wasi",
876 -
 "wasm-bindgen",
877 851
]
878 852
879 853
[[package]]
…
15 unchanged lines
895 869
checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
896 870
dependencies = [
897 871
 "cfg-if",
898 -
 "js-sys",
899 872
 "libc",
900 873
 "r-efi 6.0.0",
901 874
 "rand_core 0.10.1",
902 -
 "wasm-bindgen",
903 875
]
904 876
905 877
[[package]]
…
125 unchanged lines
1031 1003
 "itoa",
1032 1004
 "pin-project-lite",
1033 1005
 "smallvec",
1034 -
 "tokio",
1035 -
 "want",
1036 -
]
1037 -
1038 -
[[package]]
1039 -
name = "hyper-rustls"
1040 -
version = "0.27.10"
1041 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1042 -
checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53"
1043 -
dependencies = [
1044 -
 "http",
1045 -
 "hyper",
1046 -
 "hyper-util",
1047 -
 "rustls",
1048 -
 "rustls-native-certs",
1049 1006
 "tokio",
1050 -
 "tokio-rustls",
1051 -
 "tower-service",
1052 -
 "webpki-roots 1.0.9",
1053 1007
]
1054 1008
1055 1009
[[package]]
…
2 unchanged lines
1058 1012
source = "registry+https://github.com/rust-lang/crates.io-index"
1059 1013
checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff"
1060 1014
dependencies = [
1061 -
 "base64 0.23.1",
1062 1015
 "bytes",
1063 -
 "futures-channel",
1064 -
 "futures-util",
1065 1016
 "http",
1066 1017
 "http-body",
1067 -
 "httparse",
1068 1018
 "hyper",
1069 -
 "ipnet",
1070 -
 "libc",
1071 -
 "percent-encoding",
1072 1019
 "pin-project-lite",
1073 -
 "socket2",
1074 1020
 "tokio",
1075 1021
 "tower-service",
1076 -
 "tracing",
1077 1022
]
1078 1023
1079 1024
[[package]]
1080 1025
name = "iana-time-zone"
1081 1026
version = "0.1.65"
1082 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1083 -
checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
1084 1027
dependencies = [
1085 1028
 "android_system_properties",
1086 -
 "core-foundation-sys",
1087 1029
 "iana-time-zone-haiku",
1088 1030
 "js-sys",
1089 1031
 "log",
…
152 unchanged lines
1242 1184
 "unicode-width",
1243 1185
 "web-time",
1244 1186
]
1245 -
1246 -
[[package]]
1247 -
name = "ipnet"
1248 -
version = "2.12.2"
1249 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1250 -
checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0"
1251 1187
1252 1188
[[package]]
1253 1189
name = "is_terminal_polyfill"
…
3 unchanged lines
1257 1193
1258 1194
[[package]]
1259 1195
name = "itertools"
1260 -
version = "0.14.0"
1196 +
version = "0.15.0"
1261 1197
source = "registry+https://github.com/rust-lang/crates.io-index"
1262 -
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
1198 +
checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc"
1263 1199
dependencies = [
1264 1200
 "either",
1265 1201
]
…
73 unchanged lines
1339 1275
version = "0.4.34"
1340 1276
source = "registry+https://github.com/rust-lang/crates.io-index"
1341 1277
checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
1342 -
1343 -
[[package]]
1344 -
name = "lru-slab"
1345 -
version = "0.1.3"
1346 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1347 -
checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f"
1348 1278
1349 1279
[[package]]
1350 1280
name = "matchit"
…
3 unchanged lines
1354 1284
1355 1285
[[package]]
1356 1286
name = "md-5"
1357 -
version = "0.10.6"
1287 +
version = "0.11.0"
1358 1288
source = "registry+https://github.com/rust-lang/crates.io-index"
1359 -
checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
1289 +
checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98"
1360 1290
dependencies = [
1361 1291
 "cfg-if",
1362 -
 "digest 0.10.7",
1292 +
 "digest 0.11.3",
1363 1293
]
1364 1294
1365 1295
[[package]]
…
114 unchanged lines
1480 1410
1481 1411
[[package]]
1482 1412
name = "object_store"
1483 -
version = "0.13.1"
1413 +
version = "0.14.2"
1484 1414
source = "registry+https://github.com/rust-lang/crates.io-index"
1485 -
checksum = "c2858065e55c148d294a9f3aae3b0fa9458edadb41a108397094566f4e3c0dfb"
1415 +
checksum = "f1796bc93603f78c5760a69f2d58badc9618d22adade0a95385bb2adbae4eb94"
1486 1416
dependencies = [
1487 1417
 "async-trait",
1488 -
 "base64 0.22.1",
1418 +
 "base64 0.23.1",
1489 1419
 "bytes",
1490 1420
 "chrono",
1421 +
 "crc-fast",
1491 1422
 "form_urlencoded",
1492 -
 "futures",
1423 +
 "futures-channel",
1424 +
 "futures-core",
1425 +
 "futures-util",
1493 1426
 "http",
1494 1427
 "http-body-util",
1495 1428
 "httparse",
…
4 unchanged lines
1500 1433
 "parking_lot",
1501 1434
 "percent-encoding",
1502 1435
 "quick-xml",
1503 -
 "rand 0.9.5",
1504 -
 "reqwest",
1436 +
 "rand 0.10.3",
1505 1437
 "ring",
1506 1438
 "rustls-pki-types",
1507 1439
 "serde",
…
29 unchanged lines
1537 1469
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
1538 1470
1539 1471
[[package]]
1540 -
name = "openssl-probe"
1541 -
version = "0.2.1"
1542 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1543 -
checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
1544 -
1545 -
[[package]]
1546 1472
name = "oxy"
1547 1473
version = "0.2.0"
1548 1474
dependencies = [
…
52 unchanged lines
1601 1527
name = "oxy-strata"
1602 1528
version = "0.3.1"
1603 1529
dependencies = [
1530 +
 "async-trait",
1531 +
 "bytes",
1604 1532
 "futures",
1533 +
 "http",
1534 +
 "http-body-util",
1605 1535
 "object_store",
1606 1536
 "oxy-core",
1607 -
 "reqwest",
1608 1537
 "rustls",
1609 1538
 "serde_json",
1610 1539
 "tempfile",
1611 1540
 "tokio",
1541 +
 "ureq",
1612 1542
]
1613 1543
1614 1544
[[package]]
…
123 unchanged lines
1738 1668
1739 1669
[[package]]
1740 1670
name = "quick-xml"
1741 -
version = "0.38.4"
1671 +
version = "0.41.0"
1742 1672
source = "registry+https://github.com/rust-lang/crates.io-index"
1743 -
checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
1673 +
checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1"
1744 1674
dependencies = [
1745 1675
 "memchr",
1746 1676
 "serde",
1747 -
]
1748 -
1749 -
[[package]]
1750 -
name = "quinn"
1751 -
version = "0.11.12"
1752 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1753 -
checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11"
1754 -
dependencies = [
1755 -
 "bytes",
1756 -
 "cfg_aliases",
1757 -
 "pin-project-lite",
1758 -
 "quinn-proto",
1759 -
 "quinn-udp",
1760 -
 "rustc-hash",
1761 -
 "rustls",
1762 -
 "socket2",
1763 -
 "thiserror 2.0.21",
1764 -
 "tokio",
1765 -
 "tracing",
1766 -
 "web-time",
1767 1677
]
1768 1678
1769 1679
[[package]]
1770 -
name = "quinn-proto"
1771 -
version = "0.11.19"
1772 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1773 -
checksum = "0e750cca55fe4f0439a15d0bb529da9651e79993e8e72c61a899a36d462befbe"
1774 -
dependencies = [
1775 -
 "bytes",
1776 -
 "getrandom 0.4.3",
1777 -
 "lru-slab",
1778 -
 "rand 0.10.3",
1779 -
 "rand_pcg",
1780 -
 "ring",
1781 -
 "rustc-hash",
1782 -
 "rustls",
1783 -
 "rustls-pki-types",
1784 -
 "slab",
1785 -
 "thiserror 2.0.21",
1786 -
 "tinyvec",
1787 -
 "tracing",
1788 -
 "web-time",
1789 -
]
1790 -
1791 -
[[package]]
1792 -
name = "quinn-udp"
1793 -
version = "0.5.16"
1794 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1795 -
checksum = "af66907df18639dcf4db56ca65490cabc4b27a97dbadd96f2926cca73298f016"
1796 -
dependencies = [
1797 -
 "cfg_aliases",
1798 -
 "libc",
1799 -
 "once_cell",
1800 -
 "socket2",
1801 -
 "tracing",
1802 -
 "windows-sys 0.61.2",
1803 -
]
1804 -
1805 -
[[package]]
1806 1680
name = "quote"
1807 1681
version = "1.0.47"
1808 1682
source = "registry+https://github.com/rust-lang/crates.io-index"
…
91 unchanged lines
1900 1774
checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
1901 1775
1902 1776
[[package]]
1903 -
name = "rand_pcg"
1904 -
version = "0.10.2"
1905 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1906 -
checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
1907 -
dependencies = [
1908 -
 "rand_core 0.10.1",
1909 -
]
1910 -
1911 -
[[package]]
1912 1777
name = "rand_xorshift"
1913 1778
version = "0.4.0"
1914 1779
source = "registry+https://github.com/rust-lang/crates.io-index"
…
61 unchanged lines
1976 1841
version = "0.8.11"
1977 1842
source = "registry+https://github.com/rust-lang/crates.io-index"
1978 1843
checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
1979 -
1980 -
[[package]]
1981 -
name = "reqwest"
1982 -
version = "0.12.28"
1983 -
source = "registry+https://github.com/rust-lang/crates.io-index"
1984 -
checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
1985 -
dependencies = [
1986 -
 "base64 0.22.1",
1987 -
 "bytes",
1988 -
 "futures-core",
1989 -
 "futures-util",
1990 -
 "h2",
1991 -
 "http",
1992 -
 "http-body",
1993 -
 "http-body-util",
1994 -
 "hyper",
1995 -
 "hyper-rustls",
1996 -
 "hyper-util",
1997 -
 "js-sys",
1998 -
 "log",
1999 -
 "percent-encoding",
2000 -
 "pin-project-lite",
2001 -
 "quinn",
2002 -
 "rustls",
2003 -
 "rustls-native-certs",
2004 -
 "rustls-pki-types",
2005 -
 "serde",
2006 -
 "serde_json",
2007 -
 "serde_urlencoded",
2008 -
 "sync_wrapper",
2009 -
 "tokio",
2010 -
 "tokio-rustls",
2011 -
 "tokio-util",
2012 -
 "tower",
2013 -
 "tower-http",
2014 -
 "tower-service",
2015 -
 "url",
2016 -
 "wasm-bindgen",
2017 -
 "wasm-bindgen-futures",
2018 -
 "wasm-streams",
2019 -
 "web-sys",
2020 -
 "webpki-roots 1.0.9",
2021 -
]
2022 1844
2023 1845
[[package]]
2024 1846
name = "ring"
…
16 unchanged lines
2041 1863
checksum = "323c417e1d9665a65b263ec744ba09030cfb277e9daa0b018a4ab62e57bc8189"
2042 1864
2043 1865
[[package]]
2044 -
name = "rustc-hash"
2045 -
version = "2.1.3"
2046 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2047 -
checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
2048 -
2049 -
[[package]]
2050 1866
name = "rustc_version"
2051 1867
version = "0.4.1"
2052 1868
source = "registry+https://github.com/rust-lang/crates.io-index"
…
37 unchanged lines
2090 1906
 "rustls-webpki",
2091 1907
 "subtle",
2092 1908
 "zeroize",
2093 -
]
2094 -
2095 -
[[package]]
2096 -
name = "rustls-native-certs"
2097 -
version = "0.8.4"
2098 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2099 -
checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d"
2100 -
dependencies = [
2101 -
 "openssl-probe",
2102 -
 "rustls-pki-types",
2103 -
 "schannel",
2104 -
 "security-framework",
2105 1909
]
2106 1910
2107 1911
[[package]]
…
11 unchanged lines
2119 1923
source = "registry+https://github.com/rust-lang/crates.io-index"
2120 1924
checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96"
2121 1925
dependencies = [
2122 -
 "web-time",
2123 1926
 "zeroize",
2124 1927
]
2125 1928
…
39 unchanged lines
2165 1968
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2166 1969
dependencies = [
2167 1970
 "winapi-util",
2168 -
]
2169 -
2170 -
[[package]]
2171 -
name = "schannel"
2172 -
version = "0.1.29"
2173 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2174 -
checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
2175 -
dependencies = [
2176 -
 "windows-sys 0.61.2",
2177 1971
]
2178 1972
2179 1973
[[package]]
…
1 unchanged lines
2181 1975
version = "1.2.0"
2182 1976
source = "registry+https://github.com/rust-lang/crates.io-index"
2183 1977
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2184 -
2185 -
[[package]]
2186 -
name = "security-framework"
2187 -
version = "3.7.0"
2188 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2189 -
checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
2190 -
dependencies = [
2191 -
 "bitflags",
2192 -
 "core-foundation",
2193 -
 "core-foundation-sys",
2194 -
 "libc",
2195 -
 "security-framework-sys",
2196 -
]
2197 1978
2198 1979
[[package]]
2199 -
name = "security-framework-sys"
2200 -
version = "2.17.0"
2201 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2202 -
checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
2203 -
dependencies = [
2204 -
 "core-foundation-sys",
2205 -
 "libc",
2206 -
]
2207 -
2208 -
[[package]]
2209 1980
name = "semver"
2210 1981
version = "1.0.28"
2211 1982
source = "registry+https://github.com/rust-lang/crates.io-index"
…
138 unchanged lines
2350 2121
]
2351 2122
2352 2123
[[package]]
2124 +
name = "spin"
2125 +
version = "0.10.1"
2126 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2127 +
checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3"
2128 +
2129 +
[[package]]
2353 2130
name = "spki"
2354 2131
version = "0.8.0"
2355 2132
source = "registry+https://github.com/rust-lang/crates.io-index"
…
54 unchanged lines
2410 2187
version = "1.0.2"
2411 2188
source = "registry+https://github.com/rust-lang/crates.io-index"
2412 2189
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
2413 -
dependencies = [
2414 -
 "futures-core",
2415 -
]
2416 2190
2417 2191
[[package]]
2418 2192
name = "synstructure"
…
109 unchanged lines
2528 2302
 "displaydoc",
2529 2303
 "zerovec",
2530 2304
]
2531 -
2532 -
[[package]]
2533 -
name = "tinyvec"
2534 -
version = "1.13.3"
2535 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2536 -
checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee"
2537 2305
2538 2306
[[package]]
2539 2307
name = "tokio"
…
62 unchanged lines
2602 2370
]
2603 2371
2604 2372
[[package]]
2605 -
name = "tower-http"
2606 -
version = "0.6.11"
2607 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2608 -
checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840"
2609 -
dependencies = [
2610 -
 "bitflags",
2611 -
 "bytes",
2612 -
 "futures-util",
2613 -
 "http",
2614 -
 "http-body",
2615 -
 "pin-project-lite",
2616 -
 "tower",
2617 -
 "tower-layer",
2618 -
 "tower-service",
2619 -
 "url",
2620 -
]
2621 -
2622 -
[[package]]
2623 2373
name = "tower-layer"
2624 2374
version = "0.3.3"
2625 2375
source = "registry+https://github.com/rust-lang/crates.io-index"
…
36 unchanged lines
2662 2412
dependencies = [
2663 2413
 "once_cell",
2664 2414
]
2665 -
2666 -
[[package]]
2667 -
name = "try-lock"
2668 -
version = "0.2.5"
2669 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2670 -
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
2671 2415
2672 2416
[[package]]
2673 2417
name = "typenum"
…
91 unchanged lines
2765 2509
]
2766 2510
2767 2511
[[package]]
2768 -
name = "want"
2769 -
version = "0.3.1"
2770 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2771 -
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
2772 -
dependencies = [
2773 -
 "try-lock",
2774 -
]
2775 -
2776 -
[[package]]
2777 2512
name = "wasi"
2778 2513
version = "0.11.1+wasi-snapshot-preview1"
2779 2514
source = "registry+https://github.com/rust-lang/crates.io-index"
…
62 unchanged lines
2842 2577
checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6"
2843 2578
dependencies = [
2844 2579
 "unicode-ident",
2845 -
]
2846 -
2847 -
[[package]]
2848 -
name = "wasm-streams"
2849 -
version = "0.4.2"
2850 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2851 -
checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
2852 -
dependencies = [
2853 -
 "futures-util",
2854 -
 "js-sys",
2855 -
 "wasm-bindgen",
2856 -
 "wasm-bindgen-futures",
2857 -
 "web-sys",
2858 -
]
2859 -
2860 -
[[package]]
2861 -
name = "web-sys"
2862 -
version = "0.3.106"
2863 -
source = "registry+https://github.com/rust-lang/crates.io-index"
2864 -
checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4"
2865 -
dependencies = [
2866 -
 "js-sys",
2867 -
 "wasm-bindgen",
2868 2580
]
2869 2581
2870 2582
[[package]]
…
368 unchanged lines
modified Cargo.toml +6 −0
…
33 unchanged lines
34 34
35 35
[dev-dependencies]
36 36
tempfile = "3"
37 +
38 +
# Two dependencies of the cloud stores, patched so the macOS cross build
39 +
# links: see vendor/*/PATCHED.md.
40 +
[patch.crates-io]
41 +
crc-fast = { path = "vendor/crc-fast" }
42 +
iana-time-zone = { path = "vendor/iana-time-zone" }
modified crates/oxy-strata/Cargo.toml +11 −7
…
6 unchanged lines
7 7
8 8
[dependencies]
9 9
oxy-core = { path = "../oxy-core" }
10 -
# The cloud stores. 0.13: its cloud feature signs with ring, as the rest
11 -
# of oxy does. 0.14 brought in aws-lc-rs (a C toolchain to build) and
12 -
# crc-fast, whose cdylib the macOS cross build cannot link.
13 -
object_store = { version = "=0.13.1", default-features = false, features = ["aws", "gcp", "azure"] }
14 -
# object_store's reqwest needs a TLS stack: rustls on ring, with the web
15 -
# roots, as oxy-core's own client uses.
16 -
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls-webpki-roots"] }
10 +
# The cloud stores without their built-in HTTP client: requests go
11 +
# through ureq on rustls with the web roots, as oxy-core's own client
12 +
# does, which cross-compiles for every release target. (reqwest's rustls
13 +
# verifies through the platform, which on macOS means Apple frameworks
14 +
# the cross build cannot link.) Signing is with ring, not aws-lc-rs.
15 +
object_store = { version = "=0.14.2", default-features = false, features = ["aws-base", "gcp-base", "azure-base", "ring"] }
16 +
ureq = "2"
17 17
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
18 +
async-trait = "0.1"
19 +
http = "1"
20 +
http-body-util = "0.1"
21 +
bytes = "1"
18 22
tokio = { version = "1", default-features = false, features = ["rt"] }
19 23
futures = "0.3"
20 24
serde_json = "1"
…
3 unchanged lines
modified crates/oxy-strata/src/aws.rs +8 −10
…
19 unchanged lines
20 20
use crate::ini;
21 21
use crate::StoreUrl;
22 22
use object_store::aws::{AmazonS3, AmazonS3Builder, S3ConditionalPut};
23 -
use object_store::ClientOptions;
24 23
use oxy_core::strata::{Error, Result};
25 24
use std::path::PathBuf;
26 25
…
69 unchanged lines
96 95
    })
97 96
}
98 97
99 -
pub fn open(url: &StoreUrl, runtime: &tokio::runtime::Runtime) -> Result<AmazonS3> {
98 +
pub fn open(url: &StoreUrl) -> Result<AmazonS3> {
100 99
    let bucket = url.host.clone();
101 100
    let explicit_profile = url.param("profile").map(str::to_string);
102 101
    let profile = explicit_profile
…
9 unchanged lines
112 111
    // container and instance roles; what follows fills in or overrides.
113 112
    let mut b = AmazonS3Builder::from_env()
114 113
        .with_bucket_name(&bucket)
114 +
        .with_http_connector(crate::http::UreqConnector)
115 115
        .with_conditional_put(S3ConditionalPut::ETagMatch);
116 116
117 117
    let env_keys = match (env("AWS_ACCESS_KEY_ID"), env("AWS_SECRET_ACCESS_KEY")) {
…
62 unchanged lines
180 180
    let region = match region {
181 181
        Some(r) => r,
182 182
        None if endpoint.is_some() => "us-east-1".into(),
183 -
        None => runtime
184 -
            .block_on(object_store::aws::resolve_bucket_region(&bucket, &ClientOptions::new()))
185 -
            .map_err(|e| {
186 -
                Error::Backend(format!(
187 -
                    "{}: no region was given and S3 did not say which region holds the bucket ({e}): add ?region=NAME to the remote URL, set AWS_REGION, or put region in the profile",
188 -
                    url.plain()
189 -
                ))
190 -
            })?,
183 +
        None => crate::http::bucket_region(&bucket).ok_or_else(|| {
184 +
            Error::Backend(format!(
185 +
                "{}: no region was given and S3 did not say which region holds the bucket: add ?region=NAME to the remote URL, set AWS_REGION, or put region in the profile",
186 +
                url.plain()
187 +
            ))
188 +
        })?,
191 189
    };
192 190
    b = b.with_region(region);
193 191
…
18 unchanged lines
modified crates/oxy-strata/src/azure.rs +2 −1
…
30 unchanged lines
31 31
    };
32 32
    let mut b = MicrosoftAzureBuilder::from_env()
33 33
        .with_account(&url.host)
34 -
        .with_container_name(&container);
34 +
        .with_container_name(&container)
35 +
        .with_http_connector(crate::http::UreqConnector);
35 36
    let principal = (
36 37
        env("AZURE_CLIENT_ID").or_else(|| env("AZURE_STORAGE_CLIENT_ID")),
37 38
        env("AZURE_CLIENT_SECRET").or_else(|| env("AZURE_STORAGE_CLIENT_SECRET")),
…
28 unchanged lines
modified crates/oxy-strata/src/gcp.rs +3 −1
…
28 unchanged lines
29 29
}
30 30
31 31
pub fn open(url: &StoreUrl) -> Result<GoogleCloudStorage> {
32 -
    let mut b = GoogleCloudStorageBuilder::from_env().with_bucket_name(&url.host);
32 +
    let mut b = GoogleCloudStorageBuilder::from_env()
33 +
        .with_bucket_name(&url.host)
34 +
        .with_http_connector(crate::http::UreqConnector);
33 35
    let file = url.param("credentials").map(str::to_string).or_else(|| {
34 36
        std::env::var("GOOGLE_APPLICATION_CREDENTIALS")
35 37
            .ok()
…
21 unchanged lines
modified crates/oxy-strata/src/lib.rs +2 −1
…
14 unchanged lines
15 15
mod aws;
16 16
mod azure;
17 17
mod gcp;
18 +
mod http;
18 19
mod ini;
19 20
20 21
use futures::TryStreamExt;
…
123 unchanged lines
144 145
        let (inner, prefix, hint): (Arc<dyn ObjectStore>, String, &'static str) =
145 146
            match parsed.scheme.as_str() {
146 147
                "s3" => (
147 -
                    Arc::new(aws::open(&parsed, &runtime)?),
148 +
                    Arc::new(aws::open(&parsed)?),
148 149
                    parsed.path.clone(),
149 150
                    aws::HINT,
150 151
                ),
…
286 unchanged lines