From 2daaee20e9c9694d4cc91b16ff1ffa7b33659d67 Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Sat, 25 Oct 2025 11:36:39 +0100 Subject: [PATCH 01/14] Add targeted tests for ModernCompactStringHash and DualHashFunction --- .mvn/wrapper/MavenWrapperDownloader.java | 116 --------- .mvn/wrapper/maven-wrapper.properties | 2 - AGENTS.md | 161 ++++++++++++ LICENSE.adoc | 14 ++ pom.xml | 8 +- src/main/java/net/openhft/hashing/Access.java | 2 +- .../net/openhft/hashing/ByteBufferAccess.java | 2 +- .../openhft/hashing/CharSequenceAccess.java | 2 +- .../openhft/hashing/CityAndFarmHash_1_1.java | 2 +- .../hashing/HotSpotPrior7u6StringHash.java | 2 +- .../net/openhft/hashing/LongHashFunction.java | 2 +- .../hashing/ModernHotSpotStringHash.java | 2 +- .../net/openhft/hashing/MurmurHash_3.java | 2 +- .../java/net/openhft/hashing/Primitives.java | 2 +- .../java/net/openhft/hashing/StringHash.java | 2 +- .../openhft/hashing/UnknownJvmStringHash.java | 2 +- .../net/openhft/hashing/UnsafeAccess.java | 2 +- src/main/java/net/openhft/hashing/XXH3.java | 2 +- src/main/java/net/openhft/hashing/XxHash.java | 2 +- .../net/openhft/hashing/package-info.java | 2 +- .../net/openhft/hashing/City64_1_1_Test.java | 2 +- .../openhft/hashing/DualHashFunctionTest.java | 29 +++ .../net/openhft/hashing/FarmHashTest.java | 2 +- .../openhft/hashing/LongHashFunctionTest.java | 2 +- .../hashing/ModernCompactStringHashTest.java | 237 ++++++++++++++++++ .../net/openhft/hashing/MurmurHash3Test.java | 2 +- .../openhft/hashing/OriginalFarmHashTest.java | 2 +- .../java/net/openhft/hashing/XXH128Test.java | 2 +- .../java/net/openhft/hashing/XXH3Test.java | 2 +- .../openhft/hashing/XxHashCollisionTest.java | 2 +- .../java/net/openhft/hashing/XxHashTest.java | 2 +- 31 files changed, 469 insertions(+), 146 deletions(-) delete mode 100644 .mvn/wrapper/MavenWrapperDownloader.java delete mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 AGENTS.md create mode 100644 LICENSE.adoc create mode 100644 src/test/java/net/openhft/hashing/DualHashFunctionTest.java create mode 100644 src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index 4630de8..0000000 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } -} diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572..0000000 --- a/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..8e1995a --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,161 @@ +# Guidance for AI agents, bots, and humans contributing to Chronicle Software's OpenHFT projects. + +LLM-based agents can accelerate development only if they respect our house rules. This file tells you: + +* how to run and verify the build; +* what *not* to comment; +* when to open pull requests. + +## Language & character-set policy + +| Requirement | Rationale | +|--------------|-----------| +| **British English** spelling (`organisation`, `licence`, *not* `organization`, `license`) except technical US spellings like `synchronized` | Keeps wording consistent with Chronicle's London HQ and existing docs. See the University of Oxford style guide for reference. | +| **ASCII-7 only** (code-points 0-127). Avoid smart quotes, non-breaking spaces and accented characters. | ASCII-7 survives every toolchain Chronicle uses, incl. low-latency binary wire formats that expect the 8th bit to be 0. | +| If a symbol is not available in ASCII-7, use a textual form such as `micro-second`, `>=`, `:alpha:`, `:yes:`. This is the preferred approach and Unicode must not be inserted. | Extended or '8-bit ASCII' variants are *not* portable and are therefore disallowed. | + +## Javadoc guidelines + +**Goal:** Every Javadoc block should add information you cannot glean from the method signature alone. Anything else is +noise and slows readers down. + +| Do | Don't | +|----|-------| +| State *behavioural contracts*, edge-cases, thread-safety guarantees, units, performance characteristics and checked exceptions. | Restate the obvious ("Gets the value", "Sets the name"). | +| Keep the first sentence short; it becomes the summary line in aggregated docs. | Duplicate parameter names/ types unless more explanation is needed. | +| Prefer `@param` for *constraints* and `@throws` for *conditions*, following Oracle's style guide. | Pad comments to reach a line-length target. | +| Remove or rewrite autogenerated Javadoc for trivial getters/setters. | Leave stale comments that now contradict the code. | + +The principle that Javadoc should only explain what is *not* manifest from the signature is well-established in the +wider Java community. + +## Build & test commands + +Agents must verify that the project still compiles and all unit tests pass before opening a PR: + +```bash +# From repo root +mvn -q verify +``` + +## Commit-message & PR etiquette + +1. **Subject line <= 72 chars**, imperative mood: "Fix roll-cycle offset in `ExcerptAppender`". +2. Reference the JIRA/GitHub issue if it exists. +3. In *body*: *root cause -> fix -> measurable impact* (latency, allocation, etc.). Use ASCII bullet points. +4. **Run `mvn verify`** again after rebasing. + +## What to ask the reviewers + +* *Is this AsciiDoc documentation precise enough for a clean-room re-implementation?* +* Does the Javadoc explain the code's *why* and *how* that a junior developer would not be expected to work out? +* Are the documentation, tests and code updated together so the change is clear? +* Does the commit point back to the relevant requirement or decision tag? +* Would an example or small diagram help future maintainers? + +## Project requirements + +See the [Decision Log](src/main/adoc/decision-log.adoc) for the latest project decisions. +See the [Project Requirements](src/main/adoc/project-requirements.adoc) for details on project requirements. + +## Elevating the Workflow with Real-Time Documentation + +Building upon our existing Iterative Workflow, the newest recommendation is to emphasise *real-time updates* to documentation. +Ensure the relevant `.adoc` files are updated when features, requirements, implementation details, or tests change. +This tight loop informs the AI accurately and creates immediate clarity for all team members. + +### Benefits of Real-Time Documentation + +* **Confidence in documentation**: Accurate docs prevent miscommunications that derail real-world outcomes. +* **Reduced drift**: Real-time updates keep requirements, tests and code aligned. +* **Faster feedback**: AI can quickly highlight inconsistencies when everything is in sync. +* **Better quality**: Frequent checks align the implementation with the specified behaviour. +* **Smoother onboarding**: Up-to-date AsciiDoc clarifies the system for new developers. +* **Incremental changes**: AIDE flags newly updated files so you can keep the documentation synchronised. + +### Best Practices + +* **Maintain Sync**: Keep documentation (AsciiDoc), tests, and code synchronised in version control. Changes in one area should prompt reviews and potential updates in the others. +* **Doc-First for New Work**: For *new* features or requirements, aim to update documentation first, then use AI to help produce or refine corresponding code and tests. For refactoring or initial bootstrapping, updates might flow from code/tests back to documentation, which should then be reviewed and finalised. +* **Small Commits**: Each commit should ideally relate to a single requirement or coherent change, making reviews easier for humans and AI analysis tools. +- **Team Buy-In**: Encourage everyone to review AI outputs critically and contribute to maintaining the synchronicity of all artefacts. + +## AI Agent Guidelines + +When using AI agents to assist with development, please adhere to the following guidelines: + +* **Respect the Language & Character-set Policy**: Ensure all AI-generated content follows the British English and ASCII-7 guidelines outlined above. + Focus on Clarity: AI-generated documentation should be clear and concise and add value beyond what is already present in the code or existing documentation. +* **Avoid Redundancy**: Do not generate content that duplicates existing documentation or code comments unless it provides additional context or clarification. +* **Review AI Outputs**: Always review AI-generated content for accuracy, relevance, and adherence to the project's documentation standards before committing it to the repository. + +## Company-Wide Tagging + +This section records **company-wide** decisions that apply to *all* Chronicle projects. All identifiers use the --xxx prefix. The `xxx` are unique across in the same Scope even if the tags are different. Component-specific decisions live in their xxx-decision-log.adoc files. + +### Tag Taxonomy (Nine-Box Framework) + +To improve traceability, we adopt the Nine-Box taxonomy for requirement and decision identifiers. These tags are used in addition to the existing ALL prefix, which remains reserved for global decisions across every project. + +.Adopt a Nine-Box Requirement Taxonomy + +|Tag | Scope | Typical examples | +|----|-------|------------------| +|FN |Functional user-visible behaviour | Message routing, business rules | +|NF-P |Non-functional - Performance | Latency budgets, throughput targets | +|NF-S |Non-functional - Security | Authentication method, TLS version | +|NF-O |Non-functional - Operability | Logging, monitoring, health checks | +|TEST |Test / QA obligations | Chaos scenarios, benchmarking rigs | +|DOC |Documentation obligations | Sequence diagrams, user guides | +|OPS |Operational / DevOps concerns | Helm values, deployment checklist | +|UX |Operator or end-user experience | CLI ergonomics, dashboard layouts | +|RISK |Compliance / risk controls | GDPR retention, audit trail | + +`ALL-*` stays global, case-exact tags. Pick one primary tag if multiple apply. + +### Decision Record Template + +```asciidoc +=== [Identifier] Title of Decision + +Date:: YYYY-MM-DD +Context:: +* What is the issue that this decision addresses? +* What are the driving forces, constraints, and requirements? +Decision Statement:: +* What is the change that is being proposed or was decided? +Alternatives Considered:: +* [Alternative 1 Name/Type]: +** *Description:* Brief description of the alternative. +** *Pros:* ... +** *Cons:* ... +* [Alternative 2 Name/Type]: +** *Description:* Brief description of the alternative. +** *Pros:* ... +** *Cons:* ... +Rationale for Decision:: +* Why was the chosen decision selected? +* How does it address the context and outweigh the cons of alternatives? +Impact & Consequences:: +* What are the positive and negative consequences of this decision? +* How does this decision affect the system, developers, users, or operations? +- What are the trade-offs made? +Notes/Links:: +** (Optional: Links to relevant issues, discussions, documentation, proof-of-concepts) +``` + +## Asciidoc formatting guidelines + +### List Indentation + +Do not rely on indentation for list items in AsciiDoc documents. Use the following pattern instead: + +```asciidoc +section:: Top Level Section +* first level + ** nested level +``` + +### Emphasis and Bold Text + +In AsciiDoc, an underscore `_` is _emphasis_; `*text*` is *bold*. diff --git a/LICENSE.adoc b/LICENSE.adoc new file mode 100644 index 0000000..4c32dfd --- /dev/null +++ b/LICENSE.adoc @@ -0,0 +1,14 @@ + +== Copyright 2016-2025 chronicle.software + +Licensed under the *Apache License, Version 2.0* (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/pom.xml b/pom.xml index 66c113a..4b64dc3 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a0092c5e8b4493529baf834829b5a1b708aaba00 Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Mon, 27 Oct 2025 14:39:56 +0000 Subject: [PATCH 05/14] Align Checkstyle config with plugin 3.6 --- src/main/config/checkstyle.xml | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/main/config/checkstyle.xml diff --git a/src/main/config/checkstyle.xml b/src/main/config/checkstyle.xml new file mode 100644 index 0000000..5dc41c1 --- /dev/null +++ b/src/main/config/checkstyle.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 6694a46c9541ccc91950d4ccc2e14ac5be55f477 Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Mon, 27 Oct 2025 15:25:20 +0000 Subject: [PATCH 06/14] Align code-review configs in Zero-Allocation-Hashing --- AGENTS.md | 4 +- README.adoc | 16 +-- pom.xml | 122 ++++++++++++++++-- src/main/config/pmd-exclude.properties | 5 + src/main/config/pmd-ruleset.xml | 15 +++ src/main/config/spotbugs-exclude.xml | 122 ++++++++++++++++++ .../{adoc => docs}/algorithm-profiles.adoc | 0 .../{adoc => docs}/architecture-overview.adoc | 0 .../{adoc => docs}/change-log-template.adoc | 0 .../invariants-and-contracts.adoc | 0 .../performance-benchmarks.adoc | 0 src/main/{adoc => docs}/specifications.adoc | 0 src/main/{adoc => docs}/testing-strategy.adoc | 0 .../unsafe-and-platform-notes.adoc | 0 src/main/resources/spotbugs-exclude.xml | 68 ---------- 15 files changed, 261 insertions(+), 91 deletions(-) create mode 100644 src/main/config/pmd-exclude.properties create mode 100644 src/main/config/pmd-ruleset.xml create mode 100644 src/main/config/spotbugs-exclude.xml rename src/main/{adoc => docs}/algorithm-profiles.adoc (100%) rename src/main/{adoc => docs}/architecture-overview.adoc (100%) rename src/main/{adoc => docs}/change-log-template.adoc (100%) rename src/main/{adoc => docs}/invariants-and-contracts.adoc (100%) rename src/main/{adoc => docs}/performance-benchmarks.adoc (100%) rename src/main/{adoc => docs}/specifications.adoc (100%) rename src/main/{adoc => docs}/testing-strategy.adoc (100%) rename src/main/{adoc => docs}/unsafe-and-platform-notes.adoc (100%) delete mode 100644 src/main/resources/spotbugs-exclude.xml diff --git a/AGENTS.md b/AGENTS.md index 8e1995a..34f3d25 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -55,8 +55,8 @@ mvn -q verify ## Project requirements -See the [Decision Log](src/main/adoc/decision-log.adoc) for the latest project decisions. -See the [Project Requirements](src/main/adoc/project-requirements.adoc) for details on project requirements. +See the [Decision Log](src/main/docs/decision-log.adoc) for the latest project decisions. +See the [Project Requirements](src/main/docs/project-requirements.adoc) for details on project requirements. ## Elevating the Workflow with Real-Time Documentation diff --git a/README.adoc b/README.adoc index 5a46db5..012c780 100644 --- a/README.adoc +++ b/README.adoc @@ -95,14 +95,14 @@ To sum up, See http://javadoc.io/doc/net.openhft/zero-allocation-hashing/latest ==== Internal documentation -* link:src/main/adoc/specifications.adoc[Requirements overview] -* link:src/main/adoc/architecture-overview.adoc[Architecture overview] -* link:src/main/adoc/invariants-and-contracts.adoc[Invariants and contracts] -* link:src/main/adoc/algorithm-profiles.adoc[Algorithm profiles] -* link:src/main/adoc/testing-strategy.adoc[Testing strategy] -* link:src/main/adoc/performance-benchmarks.adoc[Performance benchmarks] -* link:src/main/adoc/unsafe-and-platform-notes.adoc[Unsafe and platform notes] -* link:src/main/adoc/change-log-template.adoc[Change-log template] +* link:src/main/docs/specifications.adoc[Requirements overview] +* link:src/main/docs/architecture-overview.adoc[Architecture overview] +* link:src/main/docs/invariants-and-contracts.adoc[Invariants and contracts] +* link:src/main/docs/algorithm-profiles.adoc[Algorithm profiles] +* link:src/main/docs/testing-strategy.adoc[Testing strategy] +* link:src/main/docs/performance-benchmarks.adoc[Performance benchmarks] +* link:src/main/docs/unsafe-and-platform-notes.adoc[Unsafe and platform notes] +* link:src/main/docs/change-log-template.adoc[Change-log template] == Quick start diff --git a/pom.xml b/pom.xml index e0d82c1..6057662 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,15 @@ all,-missing openhft https://sonarcloud.io + + 3.6.0 + 10.26.1 + 4.9.8.1 + 1.14.0 + 3.28.0 + 0.8.14 + 0.80 + 0.70 @@ -421,58 +430,95 @@ - quality + code-review false + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.version} + + + com.puppycrawl.tools + checkstyle + ${puppycrawl.version} + + + + + checkstyle + + check + + verify + + + + src/main/config/checkstyle.xml + true + true + warning + + + com.github.spotbugs spotbugs-maven-plugin - 4.8.6.4 + ${spotbugs.version} + + + com.h3xstream.findsecbugs + findsecbugs-plugin + ${findsecbugs.version} + + spotbugs check + verify - max + Max Low - src/main/resources/spotbugs-exclude.xml + true + src/main/config/spotbugs-exclude.xml + org.apache.maven.plugins maven-pmd-plugin - 3.21.0 + ${maven-pmd-plugin.version} pmd check + verify - true true + true - category/java/errorprone.xml + src/main/config/pmd-ruleset.xml - - src/main/java-stub - src/main/java/sun - + src/main/config/pmd-exclude.properties + org.jacoco jacoco-maven-plugin - 0.8.11 + ${jacoco-maven-plugin.version} prepare-agent @@ -482,10 +528,60 @@ report - verify report + verify + + + check + + check + + verify + + + + BUNDLE + + + LINE + COVEREDRATIO + ${jacoco.line.coverage} + + + BRANCH + COVEREDRATIO + ${jacoco.branch.coverage} + + + + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.5.0 + + + enforce + + enforce + + + + + [${project.jdk.min-version},) + + + [${project.maven.min-version},) + + + diff --git a/src/main/config/pmd-exclude.properties b/src/main/config/pmd-exclude.properties new file mode 100644 index 0000000..98eeb06 --- /dev/null +++ b/src/main/config/pmd-exclude.properties @@ -0,0 +1,5 @@ +# PMD exclusions with justifications +# Format: filepath=rule1,rule2 +# +# Example: +# net/openhft/hashing/LegacyParser.java=AvoidReassigningParameters,TooManyFields diff --git a/src/main/config/pmd-ruleset.xml b/src/main/config/pmd-ruleset.xml new file mode 100644 index 0000000..b635cde --- /dev/null +++ b/src/main/config/pmd-ruleset.xml @@ -0,0 +1,15 @@ + + + + Baseline Chronicle rule selections used during the code-review profile. + + + + + + + + diff --git a/src/main/config/spotbugs-exclude.xml b/src/main/config/spotbugs-exclude.xml new file mode 100644 index 0000000..f7f79a6 --- /dev/null +++ b/src/main/config/spotbugs-exclude.xml @@ -0,0 +1,122 @@ + + + + + + + HASH-SER-101: Wrapper relies on readResolve to keep singleton reference for cache reuse; revisit after HASH-127 factory refactor. + + + + + + + HASH-SER-102: Seed value regenerated by constructor; serialization compatibility required with 0.26 clients. + + + + + + + HASH-SER-103: readResolve maintains static NA instance contract documented in invariants.adoc §3; removal tracked under HASH-128. + + + + + + + HASH-SER-104: Seed restored via custom constructor to avoid leaking internal mixing array; verify once HASH-128 migrates to records. + + + + + + + HASH-SER-105: Dual hash seeds rehydrate lazily to keep compatibility with legacy hashing; constructor delegates to shared initializer by design. + + + + + + + HASH-SER-106: Anonymous inner class wraps functional interface for backwards serialization shape; revisit when converting to lambda in HASH-204. + + + + + + + HASH-SER-107: Serialization keeps static singleton to protect direct byte buffer backing; tracked in HASH-205 Metro clean-up. + + + + + + + HASH-SER-108: Seeded wrapper recreates transient metro state during deserialization; compatibility retained for on-disk caches. + + + + + + + HASH-FN-109: Switch fallthrough implements Murmur reference mixing step; modifying would change published hash outputs. + + + + + + + HASH-SER-110: Tuple adapter remains singleton for performance; remove once tuple hashing migrates to service loader (HASH-210). + + + + + + + HASH-SER-111: Seeded tuple variant rebuilds transient state after deserialization; constructor delegation retains reference constants from spec. + + + + + + + HASH-PLAT-112: Privileged block required for Unsafe acquisition on Java 8; catch clause records platform availability per testing strategy doc. + + + + + + + HASH-SER-113: Singleton ensures stateless wyhash adapter remains cache-friendly; revisit after wyhash v5 migration HASH-211. + + + + + + + HASH-FN-114: Local variables kept for JIT-bound inlining per upstream implementation notes; integer multiply cast is intentional widening. + + + + + + + HASH-SEC-201: Secret bytes are defined by the xxHash reference implementation; Chronicle exposes the same constant for interoperability. + + + + + + + HASH-SER-115: Singleton maintains compatibility with native xxHash wrappers; change deferred until XXHash dropping in HASH-215. + + + + + + + HASH-SER-116: Seed field recomputed post-deserialization to avoid leaking seeds from serialized stream; tracked for redesign in HASH-215. + + + diff --git a/src/main/adoc/algorithm-profiles.adoc b/src/main/docs/algorithm-profiles.adoc similarity index 100% rename from src/main/adoc/algorithm-profiles.adoc rename to src/main/docs/algorithm-profiles.adoc diff --git a/src/main/adoc/architecture-overview.adoc b/src/main/docs/architecture-overview.adoc similarity index 100% rename from src/main/adoc/architecture-overview.adoc rename to src/main/docs/architecture-overview.adoc diff --git a/src/main/adoc/change-log-template.adoc b/src/main/docs/change-log-template.adoc similarity index 100% rename from src/main/adoc/change-log-template.adoc rename to src/main/docs/change-log-template.adoc diff --git a/src/main/adoc/invariants-and-contracts.adoc b/src/main/docs/invariants-and-contracts.adoc similarity index 100% rename from src/main/adoc/invariants-and-contracts.adoc rename to src/main/docs/invariants-and-contracts.adoc diff --git a/src/main/adoc/performance-benchmarks.adoc b/src/main/docs/performance-benchmarks.adoc similarity index 100% rename from src/main/adoc/performance-benchmarks.adoc rename to src/main/docs/performance-benchmarks.adoc diff --git a/src/main/adoc/specifications.adoc b/src/main/docs/specifications.adoc similarity index 100% rename from src/main/adoc/specifications.adoc rename to src/main/docs/specifications.adoc diff --git a/src/main/adoc/testing-strategy.adoc b/src/main/docs/testing-strategy.adoc similarity index 100% rename from src/main/adoc/testing-strategy.adoc rename to src/main/docs/testing-strategy.adoc diff --git a/src/main/adoc/unsafe-and-platform-notes.adoc b/src/main/docs/unsafe-and-platform-notes.adoc similarity index 100% rename from src/main/adoc/unsafe-and-platform-notes.adoc rename to src/main/docs/unsafe-and-platform-notes.adoc diff --git a/src/main/resources/spotbugs-exclude.xml b/src/main/resources/spotbugs-exclude.xml deleted file mode 100644 index c5565b7..0000000 --- a/src/main/resources/spotbugs-exclude.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 32a66a0f30248f1fcc878b5cc5ff3f1e00449073 Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Mon, 27 Oct 2025 15:30:17 +0000 Subject: [PATCH 07/14] Update hashing utilities and tests --- LICENSE.adoc | 1 - pom.xml | 2 +- src/main/java/net/openhft/hashing/Util.java | 2 -- src/test/java/net/openhft/hashing/ByteBufferAccessTest.java | 3 +++ src/test/java/net/openhft/hashing/DualHashFunctionTest.java | 3 +++ .../java/net/openhft/hashing/ModernCompactStringHashTest.java | 3 +++ 6 files changed, 10 insertions(+), 4 deletions(-) diff --git a/LICENSE.adoc b/LICENSE.adoc index 4c32dfd..1d338cb 100644 --- a/LICENSE.adoc +++ b/LICENSE.adoc @@ -1,4 +1,3 @@ - == Copyright 2016-2025 chronicle.software Licensed under the *Apache License, Version 2.0* (the "License"); diff --git a/pom.xml b/pom.xml index 6057662..b6149b4 100644 --- a/pom.xml +++ b/pom.xml @@ -410,7 +410,7 @@ org.jacoco jacoco-maven-plugin - 0.8.14 + ${jacoco-maven-plugin.version} diff --git a/src/main/java/net/openhft/hashing/Util.java b/src/main/java/net/openhft/hashing/Util.java index 99bc0e5..bfa204b 100644 --- a/src/main/java/net/openhft/hashing/Util.java +++ b/src/main/java/net/openhft/hashing/Util.java @@ -5,8 +5,6 @@ import org.jetbrains.annotations.NotNull; - - final class Util { /* Known java.vm.name list: diff --git a/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java b/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java index 83c7a9b..e18c6da 100644 --- a/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java +++ b/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java @@ -1,3 +1,6 @@ +/* + * Copyright 2014-2025 chronicle.software + */ package net.openhft.hashing; import java.nio.ByteBuffer; diff --git a/src/test/java/net/openhft/hashing/DualHashFunctionTest.java b/src/test/java/net/openhft/hashing/DualHashFunctionTest.java index 382f002..c22e04a 100644 --- a/src/test/java/net/openhft/hashing/DualHashFunctionTest.java +++ b/src/test/java/net/openhft/hashing/DualHashFunctionTest.java @@ -1,3 +1,6 @@ +/* + * Copyright 2014-2025 chronicle.software + */ package net.openhft.hashing; import org.junit.Test; diff --git a/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java b/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java index 7c2a63f..3a26c7e 100644 --- a/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java +++ b/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java @@ -1,3 +1,6 @@ +/* + * Copyright 2014-2025 chronicle.software + */ package net.openhft.hashing; import org.junit.Assume; From c7da7232a14d9dc8ed3294911b58a456e3030eca Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Tue, 28 Oct 2025 09:29:15 +0000 Subject: [PATCH 08/14] Raise Jacoco coverage gates to observed levels --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index b6149b4..35ecaf2 100644 --- a/pom.xml +++ b/pom.xml @@ -57,8 +57,8 @@ 1.14.0 3.28.0 0.8.14 - 0.80 - 0.70 + 0.918 + 0.854 From 82f2bd53afcb750114f95af304e1e67b793cdb89 Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Tue, 28 Oct 2025 10:21:38 +0000 Subject: [PATCH 09/14] Refactor code comments and formatting for clarity and consistency --- .github/workflows/build.yml | 2 +- .travis.yml | 20 +- AGENTS.md | 80 +- LICENSE.adoc | 10 +- README.adoc | 68 +- pom.xml | 17 +- src/main/config/spotbugs-exclude.xml | 272 +- src/main/docs/algorithm-profiles.adoc | 60 +- src/main/docs/architecture-overview.adoc | 15 +- src/main/docs/change-log-template.adoc | 4 +- src/main/docs/invariants-and-contracts.adoc | 57 +- src/main/docs/performance-benchmarks.adoc | 17 +- src/main/docs/specifications.adoc | 8 + src/main/docs/testing-strategy.adoc | 12 +- src/main/docs/unsafe-and-platform-notes.adoc | 34 +- src/main/java-stub/java/lang/Math.java | 8 +- src/main/java-stub/sun/misc/Unsafe.java | 23 +- src/main/java/net/openhft/hashing/Access.java | 85 +- .../net/openhft/hashing/ByteBufferAccess.java | 3 +- .../openhft/hashing/CharSequenceAccess.java | 19 +- .../openhft/hashing/CityAndFarmHash_1_1.java | 2 +- .../CompactLatin1CharSequenceAccess.java | 47 +- .../net/openhft/hashing/DualHashFunction.java | 12 +- .../hashing/HotSpotPrior7u6StringHash.java | 4 +- .../net/openhft/hashing/LongHashFunction.java | 122 +- .../hashing/LongTupleHashFunction.java | 122 +- src/main/java/net/openhft/hashing/Maths.java | 2 + .../hashing/ModernCompactStringHash.java | 19 +- .../hashing/ModernHotSpotStringHash.java | 4 +- .../net/openhft/hashing/MurmurHash_3.java | 4 + .../java/net/openhft/hashing/Primitives.java | 80 +- .../java/net/openhft/hashing/StringHash.java | 1 + .../openhft/hashing/UnknownJvmStringHash.java | 2 +- .../net/openhft/hashing/UnsafeAccess.java | 22 +- src/main/java/net/openhft/hashing/Util.java | 10 +- src/main/java/net/openhft/hashing/WyHash.java | 135 +- src/main/java/net/openhft/hashing/XXH3.java | 394 +- src/main/java/net/openhft/hashing/XxHash.java | 6 +- src/main/java/sun/nio/ch/DirectBuffer.java | 6 +- .../openhft/hashing/ByteBufferAccessTest.java | 4 +- .../hashing/CharSequenceAccessTest.java | 78 +- .../net/openhft/hashing/City64_1_1_Test.java | 2 +- .../CompactLatin1CharSequenceAccessTest.java | 45 +- .../openhft/hashing/LongHashFunctionTest.java | 26 +- .../hashing/LongTupleHashFunctionTest.java | 26 +- .../net/openhft/hashing/MetroHashTest.java | 52 +- .../hashing/ModernCompactStringHashTest.java | 4 +- .../net/openhft/hashing/MurmurHash3Test.java | 3 +- .../openhft/hashing/OriginalFarmHashTest.java | 11 +- .../net/openhft/hashing/PrimitivesTest.java | 4 +- .../net/openhft/hashing/UnsafeAccessTest.java | 12 +- .../java/net/openhft/hashing/WyHashTest.java | 4102 ++++---- .../java/net/openhft/hashing/XXH128Test.java | 5185 ++++++----- .../java/net/openhft/hashing/XXH3Test.java | 8257 ++++++++--------- .../java/net/openhft/hashing/XxHashTest.java | 4152 ++++----- 55 files changed, 12001 insertions(+), 11770 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a0e98de..130c8b3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ on: - ea - develop pull_request: - types: [opened, synchronize, reopened] + types: [ opened, synchronize, reopened ] jobs: build: name: Build diff --git a/.travis.yml b/.travis.yml index c14e3a5..632009f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,16 +32,16 @@ jobs: - arch: s390x jdk: openjdk7 # target release on big-endian machine install: - - wget -O ibmjdk7.bin -q -T 10 -t 5 https://public.dhe.ibm.com/ibmdl/export/pub/systems/cloud/runtimes/java/7.1.4.85/linux/s390x/ibm-java-sdk-7.1-4.85-s390x-archive.bin - - echo "6a901bc0b713582a323481d5b41d0c289cbd6fbb265eefb4962080240fe59ff2 ibmjdk7.bin" | sha256sum -c - - - chmod +x ibmjdk7.bin - - echo "INSTALLER_UI=silent" > response.properties - - echo "USER_INSTALL_DIR=$PWD/ibmjdk7" >> response.properties - - echo "LICENSE_ACCEPTED=TRUE" >> response.properties - - ./ibmjdk7.bin -i silent -f response.properties - - export PATH="$PWD/ibmjdk7/bin:$PATH" - - export JAVA_HOME="$PWD/ibmjdk7" - - java -version + - wget -O ibmjdk7.bin -q -T 10 -t 5 https://public.dhe.ibm.com/ibmdl/export/pub/systems/cloud/runtimes/java/7.1.4.85/linux/s390x/ibm-java-sdk-7.1-4.85-s390x-archive.bin + - echo "6a901bc0b713582a323481d5b41d0c289cbd6fbb265eefb4962080240fe59ff2 ibmjdk7.bin" | sha256sum -c - + - chmod +x ibmjdk7.bin + - echo "INSTALLER_UI=silent" > response.properties + - echo "USER_INSTALL_DIR=$PWD/ibmjdk7" >> response.properties + - echo "LICENSE_ACCEPTED=TRUE" >> response.properties + - ./ibmjdk7.bin -i silent -f response.properties + - export PATH="$PWD/ibmjdk7/bin:$PATH" + - export JAVA_HOME="$PWD/ibmjdk7" + - java -version cache: directories: diff --git a/AGENTS.md b/AGENTS.md index 34f3d25..e125d8e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,23 +8,23 @@ LLM-based agents can accelerate development only if they respect our house rules ## Language & character-set policy -| Requirement | Rationale | -|--------------|-----------| -| **British English** spelling (`organisation`, `licence`, *not* `organization`, `license`) except technical US spellings like `synchronized` | Keeps wording consistent with Chronicle's London HQ and existing docs. See the University of Oxford style guide for reference. | -| **ASCII-7 only** (code-points 0-127). Avoid smart quotes, non-breaking spaces and accented characters. | ASCII-7 survives every toolchain Chronicle uses, incl. low-latency binary wire formats that expect the 8th bit to be 0. | -| If a symbol is not available in ASCII-7, use a textual form such as `micro-second`, `>=`, `:alpha:`, `:yes:`. This is the preferred approach and Unicode must not be inserted. | Extended or '8-bit ASCII' variants are *not* portable and are therefore disallowed. | +| Requirement | Rationale | +|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| **British English** spelling (`organisation`, `licence`, *not* `organization`, `license`) except technical US spellings like `synchronized` | Keeps wording consistent with Chronicle's London HQ and existing docs. See the University of Oxford style guide for reference. | +| **ASCII-7 only** (code-points 0-127). Avoid smart quotes, non-breaking spaces and accented characters. | ASCII-7 survives every toolchain Chronicle uses, incl. low-latency binary wire formats that expect the 8th bit to be 0. | +| If a symbol is not available in ASCII-7, use a textual form such as `micro-second`, `>=`, `:alpha:`, `:yes:`. This is the preferred approach and Unicode must not be inserted. | Extended or '8-bit ASCII' variants are *not* portable and are therefore disallowed. | ## Javadoc guidelines **Goal:** Every Javadoc block should add information you cannot glean from the method signature alone. Anything else is noise and slows readers down. -| Do | Don't | -|----|-------| -| State *behavioural contracts*, edge-cases, thread-safety guarantees, units, performance characteristics and checked exceptions. | Restate the obvious ("Gets the value", "Sets the name"). | -| Keep the first sentence short; it becomes the summary line in aggregated docs. | Duplicate parameter names/ types unless more explanation is needed. | -| Prefer `@param` for *constraints* and `@throws` for *conditions*, following Oracle's style guide. | Pad comments to reach a line-length target. | -| Remove or rewrite autogenerated Javadoc for trivial getters/setters. | Leave stale comments that now contradict the code. | +| Do | Don't | +|---------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------| +| State *behavioural contracts*, edge-cases, thread-safety guarantees, units, performance characteristics and checked exceptions. | Restate the obvious ("Gets the value", "Sets the name"). | +| Keep the first sentence short; it becomes the summary line in aggregated docs. | Duplicate parameter names/ types unless more explanation is needed. | +| Prefer `@param` for *constraints* and `@throws` for *conditions*, following Oracle's style guide. | Pad comments to reach a line-length target. | +| Remove or rewrite autogenerated Javadoc for trivial getters/setters. | Leave stale comments that now contradict the code. | The principle that Javadoc should only explain what is *not* manifest from the signature is well-established in the wider Java community. @@ -60,7 +60,8 @@ See the [Project Requirements](src/main/docs/project-requirements.adoc) for deta ## Elevating the Workflow with Real-Time Documentation -Building upon our existing Iterative Workflow, the newest recommendation is to emphasise *real-time updates* to documentation. +Building upon our existing Iterative Workflow, the newest recommendation is to emphasise *real-time updates* to +documentation. Ensure the relevant `.adoc` files are updated when features, requirements, implementation details, or tests change. This tight loop informs the AI accurately and creates immediate clarity for all team members. @@ -75,41 +76,54 @@ This tight loop informs the AI accurately and creates immediate clarity for all ### Best Practices -* **Maintain Sync**: Keep documentation (AsciiDoc), tests, and code synchronised in version control. Changes in one area should prompt reviews and potential updates in the others. -* **Doc-First for New Work**: For *new* features or requirements, aim to update documentation first, then use AI to help produce or refine corresponding code and tests. For refactoring or initial bootstrapping, updates might flow from code/tests back to documentation, which should then be reviewed and finalised. -* **Small Commits**: Each commit should ideally relate to a single requirement or coherent change, making reviews easier for humans and AI analysis tools. -- **Team Buy-In**: Encourage everyone to review AI outputs critically and contribute to maintaining the synchronicity of all artefacts. +* **Maintain Sync**: Keep documentation (AsciiDoc), tests, and code synchronised in version control. Changes in one area + should prompt reviews and potential updates in the others. +* **Doc-First for New Work**: For *new* features or requirements, aim to update documentation first, then use AI to help + produce or refine corresponding code and tests. For refactoring or initial bootstrapping, updates might flow from + code/tests back to documentation, which should then be reviewed and finalised. +* **Small Commits**: Each commit should ideally relate to a single requirement or coherent change, making reviews easier + for humans and AI analysis tools. + +- **Team Buy-In**: Encourage everyone to review AI outputs critically and contribute to maintaining the synchronicity of + all artefacts. ## AI Agent Guidelines When using AI agents to assist with development, please adhere to the following guidelines: -* **Respect the Language & Character-set Policy**: Ensure all AI-generated content follows the British English and ASCII-7 guidelines outlined above. - Focus on Clarity: AI-generated documentation should be clear and concise and add value beyond what is already present in the code or existing documentation. -* **Avoid Redundancy**: Do not generate content that duplicates existing documentation or code comments unless it provides additional context or clarification. -* **Review AI Outputs**: Always review AI-generated content for accuracy, relevance, and adherence to the project's documentation standards before committing it to the repository. +* **Respect the Language & Character-set Policy**: Ensure all AI-generated content follows the British English and + ASCII-7 guidelines outlined above. + Focus on Clarity: AI-generated documentation should be clear and concise and add value beyond what is already present + in the code or existing documentation. +* **Avoid Redundancy**: Do not generate content that duplicates existing documentation or code comments unless it + provides additional context or clarification. +* **Review AI Outputs**: Always review AI-generated content for accuracy, relevance, and adherence to the project's + documentation standards before committing it to the repository. ## Company-Wide Tagging -This section records **company-wide** decisions that apply to *all* Chronicle projects. All identifiers use the --xxx prefix. The `xxx` are unique across in the same Scope even if the tags are different. Component-specific decisions live in their xxx-decision-log.adoc files. +This section records **company-wide** decisions that apply to *all* Chronicle projects. All identifiers use +the --xxx prefix. The `xxx` are unique across in the same Scope even if the tags are different. +Component-specific decisions live in their xxx-decision-log.adoc files. ### Tag Taxonomy (Nine-Box Framework) -To improve traceability, we adopt the Nine-Box taxonomy for requirement and decision identifiers. These tags are used in addition to the existing ALL prefix, which remains reserved for global decisions across every project. +To improve traceability, we adopt the Nine-Box taxonomy for requirement and decision identifiers. These tags are used in +addition to the existing ALL prefix, which remains reserved for global decisions across every project. .Adopt a Nine-Box Requirement Taxonomy -|Tag | Scope | Typical examples | -|----|-------|------------------| -|FN |Functional user-visible behaviour | Message routing, business rules | -|NF-P |Non-functional - Performance | Latency budgets, throughput targets | -|NF-S |Non-functional - Security | Authentication method, TLS version | -|NF-O |Non-functional - Operability | Logging, monitoring, health checks | -|TEST |Test / QA obligations | Chaos scenarios, benchmarking rigs | -|DOC |Documentation obligations | Sequence diagrams, user guides | -|OPS |Operational / DevOps concerns | Helm values, deployment checklist | -|UX |Operator or end-user experience | CLI ergonomics, dashboard layouts | -|RISK |Compliance / risk controls | GDPR retention, audit trail | +| Tag | Scope | Typical examples | +|------|-----------------------------------|-------------------------------------| +| FN | Functional user-visible behaviour | Message routing, business rules | +| NF-P | Non-functional - Performance | Latency budgets, throughput targets | +| NF-S | Non-functional - Security | Authentication method, TLS version | +| NF-O | Non-functional - Operability | Logging, monitoring, health checks | +| TEST | Test / QA obligations | Chaos scenarios, benchmarking rigs | +| DOC | Documentation obligations | Sequence diagrams, user guides | +| OPS | Operational / DevOps concerns | Helm values, deployment checklist | +| UX | Operator or end-user experience | CLI ergonomics, dashboard layouts | +| RISK | Compliance / risk controls | GDPR retention, audit trail | `ALL-*` stays global, case-exact tags. Pick one primary tag if multiple apply. diff --git a/LICENSE.adoc b/LICENSE.adoc index 1d338cb..5c5c264 100644 --- a/LICENSE.adoc +++ b/LICENSE.adoc @@ -1,13 +1,9 @@ == Copyright 2016-2025 chronicle.software -Licensed under the *Apache License, Version 2.0* (the "License"); -you may not use this file except in compliance with the License. +Licensed under the *Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. \ No newline at end of file +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and limitations under the License. \ No newline at end of file diff --git a/README.adoc b/README.adoc index 012c780..6afc2a5 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,5 @@ == Zero-Allocation Hashing + Chronicle Software image:https://maven-badges.herokuapp.com/maven-central/net.openhft/zero-allocation-hashing/badge.svg[caption="",link=https://maven-badges.herokuapp.com/maven-central/net.openhft/zero-allocation-hashing] @@ -12,38 +13,31 @@ toc::[] == About -This project provides a Java API for hashing any sequence of bytes in Java, including all kinds of -primitive arrays, buffers, `CharSequence` and more. +This project provides a Java API for hashing any sequence of bytes in Java, including all kinds of primitive arrays, buffers, `CharSequence` and more. Written for Java 8+ under Apache 2.0 licence. The key difference compared to other similar projects, e.g. -https://guava.dev/releases/28.1-jre/api/docs/com/google/common/hash/package-summary.html[Guava hashing], -is that this has no object allocation during the hash computation and does not use `ThreadLocal`. +https://guava.dev/releases/28.1-jre/api/docs/com/google/common/hash/package-summary.html[Guava hashing], is that this has no object allocation during the hash computation and does not use `ThreadLocal`. The implementation utilises native access where possible, but is also platform-endianness-agnostic. -This provides consistent results whatever the byte order, while only moderately affecting -performance. +This provides consistent results whatever the byte order, while only moderately affecting performance. + +Currently `long`-valued hash function interface is defined for 64-bit hash, and `long[]`-valued hash function interface for more than 64-bit hash, with the following implementations (in alphabetical order): -Currently `long`-valued hash function interface is defined for 64-bit hash, and `long[]`-valued hash -function interface for more than 64-bit hash, with the following implementations (in alphabetical -order): +- *https://github.com/google/cityhash[CityHash], version 1.1* (latest; 1.1.1 is a C++ language-specific maintenance release). - - *https://github.com/google/cityhash[CityHash], version 1.1* (latest; 1.1.1 is a C++ - language-specific maintenance release). +- Two algorithms from *https://github.com/google/farmhash[FarmHash]*: `farmhashna` (introduced in FarmHash 1.0) and `farmhashuo` (introduced in FarmHash 1.1). - - Two algorithms from *https://github.com/google/farmhash[FarmHash]*: `farmhashna` (introduced - in FarmHash 1.0) and `farmhashuo` (introduced in FarmHash 1.1). +- *https://github.com/jandrewrogers/MetroHash[MetroHash]* (using the metrohash64_2 initialization vector). - - *https://github.com/jandrewrogers/MetroHash[MetroHash]* (using the metrohash64_2 initialization vector). +- *https://github.com/aappleby/smhasher/wiki/MurmurHash3[MurmurHash3]* 128-bit and low 64-bit. - - *https://github.com/aappleby/smhasher/wiki/MurmurHash3[MurmurHash3]* 128-bit and low 64-bit. +- *https://github.com/wangyi-fudan/wyhash[wyHash]*, version 3. - - *https://github.com/wangyi-fudan/wyhash[wyHash]*, version 3. +- *https://github.com/Cyan4973/xxHash[xxHash]*. - - *https://github.com/Cyan4973/xxHash[xxHash]*. - - - *https://github.com/Cyan4973/xxHash[xxh3, xxh128]*, 128-bit and 64 bit. +- *https://github.com/Cyan4973/xxHash[xxh3, xxh128]*, 128-bit and 64 bit. These are thoroughly tested with *https://www.oracle.com/java/technologies/java-se-support-roadmap.html[LTS JDKs]* @@ -53,6 +47,7 @@ Other non-LTS JDKs from 9 should also work, but they will not be tested from hal ==== Performance Tested on Intel Core i7-4870HQ CPU @ 2.50GHz + |=== |Algorithm |Speed, GB/s |Bootstrap, ns @@ -69,15 +64,17 @@ Tested on Intel Core i7-4870HQ CPU @ 2.50GHz To sum up, ==== When to use Zero-Allocation Hashing - * You need to hash plain byte sequences, memory blocks or "flat" objects. - * You want zero-allocation and good performance (at Java scale). - * You need hashing to be agile with regards to byte ordering. + +* You need to hash plain byte sequences, memory blocks or "flat" objects. +* You want zero-allocation and good performance (at Java scale). +* You need hashing to be agile with regards to byte ordering. ==== When _not_ to use Zero-Allocation Hashing - * You need to hash POJOs whose actual data is scattered in memory between managed objects. - There is no simple way to hash these using this project, for example, classes such as: + +* You need to hash POJOs whose actual data is scattered in memory between managed objects. +There is no simple way to hash these using this project, for example, classes such as: + -[source, Java] +[source,Java] ---- class Person { String givenName, surName; @@ -85,16 +82,17 @@ To sum up, } ---- - * You need to hash byte sequences of unknown length, for the simplest example, - `Iterator`. +* You need to hash byte sequences of unknown length, for the simplest example, +`Iterator`. - * You need to transform the byte sequence (e.g. encode or decode it with a specific coding), - and hash the resulting byte sequence on the way without dumping it to memory. +* You need to transform the byte sequence (e.g. encode or decode it with a specific coding), and hash the resulting byte sequence on the way without dumping it to memory. ==== Javadoc + See http://javadoc.io/doc/net.openhft/zero-allocation-hashing/latest ==== Internal documentation + * link:src/main/docs/specifications.adoc[Requirements overview] * link:src/main/docs/architecture-overview.adoc[Architecture overview] * link:src/main/docs/invariants-and-contracts.adoc[Invariants and contracts] @@ -107,7 +105,8 @@ See http://javadoc.io/doc/net.openhft/zero-allocation-hashing/latest == Quick start Gradle: -[source, groovy] + +[source,groovy] ---- dependencies { implementation 'net.openhft:zero-allocation-hashing:0.27ea1' @@ -115,7 +114,8 @@ dependencies { ---- Or Maven: -[source, xml] + +[source,xml] ---- net.openhft @@ -125,13 +125,13 @@ Or Maven: ---- In Java: -[source, Java] + +[source,Java] ---- long hash = LongHashFunction.wy_3().hashChars("hello"); ---- -See *http://javadoc.io/doc/net.openhft/zero-allocation-hashing/latest[JavaDocs]* for more -information. +See *http://javadoc.io/doc/net.openhft/zero-allocation-hashing/latest[JavaDocs]* for more information. == Contributions are most welcome! diff --git a/pom.xml b/pom.xml index 35ecaf2..57dc0c5 100644 --- a/pom.xml +++ b/pom.xml @@ -15,13 +15,14 @@ ~ limitations under the License. --> - + net.openhft java-parent-pom 1.27ea0 - + 4.0.0 @@ -29,7 +30,8 @@ 0.27ea2-SNAPSHOT Zero-allocation Hashing Zero-allocation implementations of fast non-cryptographic hash functions - for byte sequences or blocks of memory + for byte sequences or blocks of memory + 2014 https://github.com/OpenHFT/Zero-Allocation-Hashing bundle @@ -246,7 +248,7 @@ - + maven-release-plugin 3.0.0-M4 @@ -254,7 +256,8 @@ org.apache.maven.scm maven-scm-provider-gitexe - 1.11.2 + 1.11.2 + @@ -273,7 +276,7 @@ - + org.apache.felix maven-bundle-plugin ${maven.bundle.plugin.version} @@ -326,7 +329,7 @@ 1.${project.target.release} 3.5.1 - + diff --git a/src/main/config/spotbugs-exclude.xml b/src/main/config/spotbugs-exclude.xml index f7f79a6..c437e3d 100644 --- a/src/main/config/spotbugs-exclude.xml +++ b/src/main/config/spotbugs-exclude.xml @@ -1,122 +1,156 @@ - - - - - HASH-SER-101: Wrapper relies on readResolve to keep singleton reference for cache reuse; revisit after HASH-127 factory refactor. - - - - - - - HASH-SER-102: Seed value regenerated by constructor; serialization compatibility required with 0.26 clients. - - - - - - - HASH-SER-103: readResolve maintains static NA instance contract documented in invariants.adoc §3; removal tracked under HASH-128. - - - - - - - HASH-SER-104: Seed restored via custom constructor to avoid leaking internal mixing array; verify once HASH-128 migrates to records. - - - - - - - HASH-SER-105: Dual hash seeds rehydrate lazily to keep compatibility with legacy hashing; constructor delegates to shared initializer by design. - - - - - - - HASH-SER-106: Anonymous inner class wraps functional interface for backwards serialization shape; revisit when converting to lambda in HASH-204. - - - - - - - HASH-SER-107: Serialization keeps static singleton to protect direct byte buffer backing; tracked in HASH-205 Metro clean-up. - - - - - - - HASH-SER-108: Seeded wrapper recreates transient metro state during deserialization; compatibility retained for on-disk caches. - - - - - - - HASH-FN-109: Switch fallthrough implements Murmur reference mixing step; modifying would change published hash outputs. - - - - - - - HASH-SER-110: Tuple adapter remains singleton for performance; remove once tuple hashing migrates to service loader (HASH-210). - - - - - - - HASH-SER-111: Seeded tuple variant rebuilds transient state after deserialization; constructor delegation retains reference constants from spec. - - - - - - - HASH-PLAT-112: Privileged block required for Unsafe acquisition on Java 8; catch clause records platform availability per testing strategy doc. - - - - - - - HASH-SER-113: Singleton ensures stateless wyhash adapter remains cache-friendly; revisit after wyhash v5 migration HASH-211. - - - - - - - HASH-FN-114: Local variables kept for JIT-bound inlining per upstream implementation notes; integer multiply cast is intentional widening. - - - - - - - HASH-SEC-201: Secret bytes are defined by the xxHash reference implementation; Chronicle exposes the same constant for interoperability. - - - - - - - HASH-SER-115: Singleton maintains compatibility with native xxHash wrappers; change deferred until XXHash dropping in HASH-215. - - - - - - - HASH-SER-116: Seed field recomputed post-deserialization to avoid leaking seeds from serialized stream; tracked for redesign in HASH-215. - - + + + + + HASH-SER-101: Wrapper relies on readResolve to keep singleton reference for cache reuse; revisit + after HASH-127 factory refactor. + + + + + + + + HASH-SER-102: Seed value regenerated by constructor; serialization compatibility required with 0.26 + clients. + + + + + + + + HASH-SER-103: readResolve maintains static NA instance contract documented in invariants.adoc §3; + removal tracked under HASH-128. + + + + + + + + HASH-SER-104: Seed restored via custom constructor to avoid leaking internal mixing array; verify + once HASH-128 migrates to records. + + + + + + + + HASH-SER-105: Dual hash seeds rehydrate lazily to keep compatibility with legacy hashing; + constructor delegates to shared initializer by design. + + + + + + + + HASH-SER-106: Anonymous inner class wraps functional interface for backwards serialization shape; + revisit when converting to lambda in HASH-204. + + + + + + + + HASH-SER-107: Serialization keeps static singleton to protect direct byte buffer backing; tracked + in HASH-205 Metro clean-up. + + + + + + + + HASH-SER-108: Seeded wrapper recreates transient metro state during deserialization; compatibility + retained for on-disk caches. + + + + + + + + HASH-FN-109: Switch fallthrough implements Murmur reference mixing step; modifying would change + published hash outputs. + + + + + + + + HASH-SER-110: Tuple adapter remains singleton for performance; remove once tuple hashing migrates + to service loader (HASH-210). + + + + + + + + HASH-SER-111: Seeded tuple variant rebuilds transient state after deserialization; constructor + delegation retains reference constants from spec. + + + + + + + + HASH-PLAT-112: Privileged block required for Unsafe acquisition on Java 8; catch clause records + platform availability per testing strategy doc. + + + + + + + + HASH-SER-113: Singleton ensures stateless wyhash adapter remains cache-friendly; revisit after + wyhash v5 migration HASH-211. + + + + + + + + HASH-FN-114: Local variables kept for JIT-bound inlining per upstream implementation notes; integer + multiply cast is intentional widening. + + + + + + + + HASH-SEC-201: Secret bytes are defined by the xxHash reference implementation; Chronicle exposes + the same constant for interoperability. + + + + + + + + HASH-SER-115: Singleton maintains compatibility with native xxHash wrappers; change deferred until + XXHash dropping in HASH-215. + + + + + + + + HASH-SER-116: Seed field recomputed post-deserialization to avoid leaking seeds from serialized + stream; tracked for redesign in HASH-215. + + + diff --git a/src/main/docs/algorithm-profiles.adoc b/src/main/docs/algorithm-profiles.adoc index c231db5..3096c98 100644 --- a/src/main/docs/algorithm-profiles.adoc +++ b/src/main/docs/algorithm-profiles.adoc @@ -1,65 +1,77 @@ == Algorithm Profiles + Chronicle Software toc::[] === CityHash 1.1 + * **Factories:** `LongHashFunction.city_1_1()`, `.city_1_1(long)`, `.city_1_1(long, long)` (`LongHashFunction.java:53-115`). * **Implementation:** `net.openhft.hashing.CityAndFarmHash_1_1` ports Google’s CityHash64 v1.1 (`CityAndFarmHash_1_1.java`). * **Key traits:** - - Normalises inputs to little-endian and forwards short-length cases to specialised mix routines (1–3, 4–7, 8–16 byte fast paths). - - Produces identical output across host endianness; big-endian incurs the expected byte swapping cost. - - Provides seedless, single-seed, and dual-seed variants mirroring the upstream API. +- Normalises inputs to little-endian and forwards short-length cases to specialised mix routines (1–3, 4–7, 8–16 byte fast paths). +- Produces identical output across host endianness; big-endian incurs the expected byte swapping cost. +- Provides seedless, single-seed, and dual-seed variants mirroring the upstream API. === FarmHash NA (1.0) + * **Factories:** `LongHashFunction.farmNa()`, `.farmNa(long)`, `.farmNa(long, long)` (`LongHashFunction.java:117-179`). * **Implementation:** Shares `CityAndFarmHash_1_1` with CityHash; the class carries the `farmhashna` logic, including the <32 byte shortcut to CityHash output. * **Key traits:** - - Deterministic across endianness; the mixing rounds assume little-endian inputs and convert when necessary. - - Seeds map directly onto the upstream `farmhashna` parameters. +- Deterministic across endianness; the mixing rounds assume little-endian inputs and convert when necessary. +- Seeds map directly onto the upstream `farmhashna` parameters. === FarmHash UO (1.1) + * **Factories:** `LongHashFunction.farmUo()`, `.farmUo(long)`, `.farmUo(long, long)` (`LongHashFunction.java:181-243`). * **Implementation:** Also hosted in `CityAndFarmHash_1_1`, which covers the 1.1 update’s longer pipelines. * **Key traits:** - - Maintains parity with Google’s C++ release for test vectors. - - Endianness neutral: always routes through an `Access` view that matches the algorithm’s little-endian assumptions. +- Maintains parity with Google’s C++ release for test vectors. +- Endianness neutral: always routes through an `Access` view that matches the algorithm’s little-endian assumptions. === MurmurHash3 + * **Factories:** `LongHashFunction.murmur_3()`, `.murmur_3(long)` for 64-bit (`LongHashFunction.java:245-268`); `LongTupleHashFunction.murmur_3()`, `.murmur_3(long)` for 128-bit (`LongTupleHashFunction.java:35-69`). -* **Implementation:** `net.openhft.hashing.MurmurHash_3` adapts Austin Appleby’s x64 variants. It extends `DualHashFunction` so the 128-bit engine also exposes the low 64 bits through `LongHashFunction`. +* **Implementation:** `net.openhft.hashing.MurmurHash_3` adapts Austin Appleby’s x64 variants. +It extends `DualHashFunction` so the 128-bit engine also exposes the low 64 bits through `LongHashFunction`. * **Key traits:** - - Little-endian canonicalisation via `Access.byteOrder`. - - Supports zero-length hashing through pre-computed constants to keep `hashVoid()` stable. +- Little-endian canonicalisation via `Access.byteOrder`. +- Supports zero-length hashing through pre-computed constants to keep `hashVoid()` stable. === xxHash (XXH64) + * **Factories:** `LongHashFunction.xx()`, `.xx(long)` (`LongHashFunction.java:270-298`). * **Implementation:** `net.openhft.hashing.XxHash` ports the official XXH64 reference and keeps the unsigned prime constants as signed Java longs. * **Key traits:** - - Uses four-lane accumulation for ≥32 byte inputs, matching upstream behaviour bit-for-bit. - - Applies the canonical avalanche round in `XxHash.finalize` for all lengths. - - Seeded and seedless instances differ only by the stored `seed()` override; serialisation preserves both forms. +- Uses four-lane accumulation for ≥32 byte inputs, matching upstream behaviour bit-for-bit. +- Applies the canonical avalanche round in `XxHash.finalize` for all lengths. +- Seeded and seedless instances differ only by the stored `seed()` override; serialisation preserves both forms. === XXH3 / XXH128 -* **Factories:** `LongHashFunction.xx3()`, `.xx3(long)` for 64-bit, plus `.xx128low()` / `.xx128low(long)` for the low 64 bits of XXH128 (`LongHashFunction.java:300-341`). Full 128-bit results live behind `LongTupleHashFunction.xx128()` and `.xx128(long)` (`LongTupleHashFunction.java:71-104`). -* **Implementation:** `net.openhft.hashing.XXH3` keeps the FARSH-derived 192 byte secret and streaming logic. It defines distinct entry points for 64-bit, 128-bit, and low-64-bit projections. + +* **Factories:** `LongHashFunction.xx3()`, `.xx3(long)` for 64-bit, plus `.xx128low()` / `.xx128low(long)` for the low 64 bits of XXH128 (`LongHashFunction.java:300-341`). +Full 128-bit results live behind `LongTupleHashFunction.xx128()` and `.xx128(long)` (`LongTupleHashFunction.java:71-104`). +* **Implementation:** `net.openhft.hashing.XXH3` keeps the FARSH-derived 192 byte secret and streaming logic. +It defines distinct entry points for 64-bit, 128-bit, and low-64-bit projections. * **Key traits:** - - Optimises for short messages with dedicated 1–3, 4–8, 9–16, 17–128, and 129–240 byte paths. - - Uses `UnsafeAccess.INSTANCE.byteOrder(null, LITTLE_ENDIAN)` once to avoid per-call adapter allocation. - - The 128-bit variant reuses the same mixing core; exposing the low 64 bits avoids extra copies for callers that only need a single `long`. +- Optimises for short messages with dedicated 1–3, 4–8, 9–16, 17–128, and 129–240 byte paths. +- Uses `UnsafeAccess.INSTANCE.byteOrder(null, LITTLE_ENDIAN)` once to avoid per-call adapter allocation. +- The 128-bit variant reuses the same mixing core; exposing the low 64 bits avoids extra copies for callers that only need a single `long`. === wyHash v3 + * **Factories:** `LongHashFunction.wy_3()`, `.wy_3(long)` (`LongHashFunction.java:343-369`). * **Implementation:** `net.openhft.hashing.WyHash` mirrors Wang Yi’s version 3 reference, including the `_wymum` 128-bit multiply-fold helper built on `Maths.unsignedLongMulXorFold`. * **Key traits:** - - Supports streaming chunks up to 256 bytes per loop iteration; beyond that it accumulates in 32 byte strides. - - Handles ≤3, ≤8, ≤16, ≤24, ≤32 byte inputs with the same branching as the C code. - - Maintains deterministic output across architectures while acknowledging the performance hit on big-endian systems. +- Supports streaming chunks up to 256 bytes per loop iteration; beyond that it accumulates in 32 byte strides. +- Handles ≤3, ≤8, ≤16, ≤24, ≤32 byte inputs with the same branching as the C code. +- Maintains deterministic output across architectures while acknowledging the performance hit on big-endian systems. === MetroHash (metrohash64_2) + * **Factories:** `LongHashFunction.metro()`, `.metro(long)` (`LongHashFunction.java:371-389`). * **Implementation:** `net.openhft.hashing.MetroHash` implements the 64-bit metrohash variant with the `_2` initialisation vector, matching the original author’s reference. * **Key traits:** - - Performs four-lane unrolled mixing for ≥32 byte inputs and cascades down to 16, 8, 4, 2, and 1 byte tails. - - Uses deterministic finalisation (`MetroHash.finalize`) shared by scalar and streaming paths. - - Seeded instances override `seed()` and cache the pre-hashed `hashVoid()` constant to avoid re-computation. +- Performs four-lane unrolled mixing for ≥32 byte inputs and cascades down to 16, 8, 4, 2, and 1 byte tails. +- Uses deterministic finalisation (`MetroHash.finalize`) shared by scalar and streaming paths. +- Seeded instances override `seed()` and cache the pre-hashed `hashVoid()` constant to avoid re-computation. diff --git a/src/main/docs/architecture-overview.adoc b/src/main/docs/architecture-overview.adoc index 0e17eb7..0eed745 100644 --- a/src/main/docs/architecture-overview.adoc +++ b/src/main/docs/architecture-overview.adoc @@ -1,20 +1,26 @@ == Zero-Allocation Hashing Architecture Overview + Chronicle Software toc::[] === Entry Points -* `net.openhft.hashing.LongHashFunction` is the primary façade for 64-bit hashes. It exposes factory methods for CityHash 1.1, FarmHash (NA and UO variants), MurmurHash3, xxHash, XXH3 (64-bit), wyHash v3, and MetroHash (`LongHashFunction.java`). -* `net.openhft.hashing.LongTupleHashFunction` provides multi-word hash results. It currently delivers 128-bit MurmurHash3 and XXH3 outputs and mirrors the single-word API with reusable `long[]` buffers (`LongTupleHashFunction.java`). + +* `net.openhft.hashing.LongHashFunction` is the primary façade for 64-bit hashes. +It exposes factory methods for CityHash 1.1, FarmHash (NA and UO variants), MurmurHash3, xxHash, XXH3 (64-bit), wyHash v3, and MetroHash (`LongHashFunction.java`). +* `net.openhft.hashing.LongTupleHashFunction` provides multi-word hash results. +It currently delivers 128-bit MurmurHash3 and XXH3 outputs and mirrors the single-word API with reusable `long[]` buffers (`LongTupleHashFunction.java`). * `net.openhft.hashing.DualHashFunction` bridges tuple implementations back into the `LongHashFunction` contract, ensuring seeded XXH128 and similar algorithms can expose both 64-bit and 128-bit variants without duplicating logic (`DualHashFunction.java`). === Memory Access Abstractions + * All hashing flows rely on `net.openhft.hashing.Access` to read primitive values from arrays, direct buffers, off-heap memory, or custom structures. `Access.byteOrder(input, desiredOrder)` returns a view that matches the algorithm’s expected endianness (`Access.java:273-308`). * Concrete strategies cover heap arrays (`UnsafeAccess.INSTANCE`), `ByteBuffer` (`ByteBufferAccess`), `CharSequence` in native or explicit byte order (`CharSequenceAccess`), and compact Latin-1 backed strings (`CompactLatin1CharSequenceAccess`). * `UnsafeAccess` wraps `sun.misc.Unsafe` for zero-copy reads, falling back to legacy helpers when `getByte` or `getShort` are absent (e.g., pre-Nougat Android) (`UnsafeAccess.java:40-118`). * Reverse-order wrappers are generated automatically through `Access.newDefaultReverseAccess`, allowing algorithms to treat every source as little-endian while still accepting big-endian buffers (`Access.java:295-344`). === Algorithm Implementations + * Each upstream hash family lives in its own package-private class and exposes seed-aware factories back to the public façade. ** `CityAndFarmHash_1_1` adapts CityHash64 1.1 plus FarmHash NA/UO variants, including the short-input specialisations from the original C++ sources. ** `MurmurHash_3` contains both 64-bit and 128-bit variants, reusing `DualHashFunction` to provide `LongHashFunction` and `LongTupleHashFunction` accessors. @@ -24,11 +30,14 @@ toc::[] ** `MetroHash` implements the metrohash64_2 variant using four-lane accumulation and deterministic finalisation (`MetroHash.java`). === Runtime Adaptation + * `net.openhft.hashing.Util.VALID_STRING_HASH` selects the correct `StringHash` strategy at JVM initialisation time by inspecting `java.vm.name` and `java.version`, covering HotSpot, OpenJ9, Zing, and unknown VMs (`Util.java:29-63`). -* `ModernHotSpotStringHash`, `ModernCompactStringHash`, and `HotSpotPrior7u6StringHash` encode the memory layout differences between pre-compact, compact-string, and legacy HotSpot builds. When the VM cannot be recognised, `UnknownJvmStringHash` provides a defensive fallback. +* `ModernHotSpotStringHash`, `ModernCompactStringHash`, and `HotSpotPrior7u6StringHash` encode the memory layout differences between pre-compact, compact-string, and legacy HotSpot builds. +When the VM cannot be recognised, `UnknownJvmStringHash` provides a defensive fallback. * Direct buffer hashing uses `sun.nio.ch.DirectBuffer` addresses pulled via `LongHashFunction.hashBytes(ByteBuffer)` and `LongHashFunction.hashMemory(long, long)`; `Util.getDirectBufferAddress` centralises the address extraction (`Util.java:65-68`). === Supporting Utilities + * `net.openhft.hashing.Primitives` houses byte-order normalisation helpers and unsigned conversions so algorithms can expect canonical little-endian operands even on big-endian hardware (`Primitives.java`). * `net.openhft.hashing.Maths` provides low-level arithmetic helpers such as `unsignedLongMulXorFold` used by wyHash and XXH3 for 128-bit cross-products (`Maths.java`). * Tests under `src/test/java/net/openhft/hashing` validate the API contract across arrays, primitives, buffers, and custom access strategies, and serve as reference snippets for typical `Access` usage. diff --git a/src/main/docs/change-log-template.adoc b/src/main/docs/change-log-template.adoc index f8efebe..da67691 100644 --- a/src/main/docs/change-log-template.adoc +++ b/src/main/docs/change-log-template.adoc @@ -1,7 +1,9 @@ == Change Log Template + Chronicle Software -Use this skeleton when documenting repository changes, whether in commit messages, pull-request descriptions, or the decision log. Keep the tone factual, favour British English, and ensure every item links back to a requirement tag where possible. +Use this skeleton when documenting repository changes, whether in commit messages, pull-request descriptions, or the decision log. +Keep the tone factual, favour British English, and ensure every item links back to a requirement tag where possible. ---- Subject: diff --git a/src/main/docs/invariants-and-contracts.adoc b/src/main/docs/invariants-and-contracts.adoc index 96253fd..57697e9 100644 --- a/src/main/docs/invariants-and-contracts.adoc +++ b/src/main/docs/invariants-and-contracts.adoc @@ -1,35 +1,60 @@ == Invariants and Contracts + Chronicle Software toc::[] === Hash Interface Guarantees + * Every `LongHashFunction` and `LongTupleHashFunction` implementation treats primitives as if they were written to memory using the platform’s native byte order; the API therefore guarantees that `hashLong(v)` equals `hashLongs(new long[] {v})` and similar array forms (`LongHashFunction.java`, `LongTupleHashFunction.java`). -* All bundled algorithms normalise multi-byte reads to little-endian before mixing, so the same input bytes produce identical hashes on big- and little-endian machines. Performance may differ, but results must not (`CityAndFarmHash_1_1.java`, `XxHash.java`, `XXH3.java`, `WyHash.java`, `MetroHash.java`, `MurmurHash_3.java`). -* `hash(Object, Access, long off, long len)` assumes the addressed region is contiguous and valid for the requested byte count. Implementations do not insert bounds checks beyond those provided by the chosen `Access` strategy, so callers must uphold the contract (`LongHashFunction.java:548-612`). -* `hashMemory(long address, long length)` treats the `address` as an absolute memory pointer. Passing invalid or unmapped addresses is undefined behaviour and will surface as JVM crashes or segmentation faults rather than managed exceptions (`LongHashFunction.java:619-643`). -* `hashVoid()` returns the deterministic hash for an empty byte sequence. Tests rely on this to confirm consistency, so new algorithms must define a stable zero-length value (`LongHashFunction.java`, `LongHashFunctionTest.java:36-45`). +* All bundled algorithms normalise multi-byte reads to little-endian before mixing, so the same input bytes produce identical hashes on big- and little-endian machines. +Performance may differ, but results must not (`CityAndFarmHash_1_1.java`, `XxHash.java`, `XXH3.java`, `WyHash.java`, `MetroHash.java`, `MurmurHash_3.java`). +* `hash(Object, Access, long off, long len)` assumes the addressed region is contiguous and valid for the requested byte count. +Implementations do not insert bounds checks beyond those provided by the chosen `Access` strategy, so callers must uphold the contract (`LongHashFunction.java:548-612`). +* `hashMemory(long address, long length)` treats the `address` as an absolute memory pointer. +Passing invalid or unmapped addresses is undefined behaviour and will surface as JVM crashes or segmentation faults rather than managed exceptions (`LongHashFunction.java:619-643`). +* `hashVoid()` returns the deterministic hash for an empty byte sequence. +Tests rely on this to confirm consistency, so new algorithms must define a stable zero-length value (`LongHashFunction.java`, `LongHashFunctionTest.java:36-45`). === Access Strategy Requirements -* Custom `Access` implementations must keep `getLong`, `getUnsignedInt`, `getUnsignedShort`, and related methods mutually consistent under the reported `byteOrder`. If the order is wrong or inconsistent the algorithm will observe incoherent data (`Access.java:21-71`). -* `Access.byteOrder(input, desiredOrder)` may return the same instance or a cached reverse-order delegate. Implementations should avoid allocating per call; use `reverseAccess()` to supply a singleton for the opposite endianness (`Access.java:273-344`). -* `UnsafeAccess` exposes heap arrays, off-heap memory, and even raw addresses when passed a `null` base plus an absolute offset. Alternative `Access` implementations should document whether they permit null bases or require range checks (`UnsafeAccess.java:50-111`). + +* Custom `Access` implementations must keep `getLong`, `getUnsignedInt`, `getUnsignedShort`, and related methods mutually consistent under the reported `byteOrder`. +If the order is wrong or inconsistent the algorithm will observe incoherent data (`Access.java:21-71`). +* `Access.byteOrder(input, desiredOrder)` may return the same instance or a cached reverse-order delegate. +Implementations should avoid allocating per call; use `reverseAccess()` to supply a singleton for the opposite endianness (`Access.java:273-344`). +* `UnsafeAccess` exposes heap arrays, off-heap memory, and even raw addresses when passed a `null` base plus an absolute offset. +Alternative `Access` implementations should document whether they permit null bases or require range checks (`UnsafeAccess.java:50-111`). === Result Buffer Handling -* `LongTupleHashFunction.hash*(…, long[] result)` requires a pre-sized buffer created via `newResultArray()`. The method throws `NullPointerException` for null buffers and `IllegalArgumentException` for undersized buffers; the helper checks are centralised in `DualHashFunction` (`DualHashFunction.java:12-74`). -* The allocation-free path is only honoured when callers reuse buffers. The overloads that return `long[]` will always allocate exactly one new array per call by design (`LongTupleHashFunction.java:70-118`). + +* `LongTupleHashFunction.hash*(…, long[] result)` requires a pre-sized buffer created via `newResultArray()`. +The method throws `NullPointerException` for null buffers and `IllegalArgumentException` for undersized buffers; the helper checks are centralised in `DualHashFunction` (`DualHashFunction.java:12-74`). +* The allocation-free path is only honoured when callers reuse buffers. +The overloads that return `long[]` will always allocate exactly one new array per call by design (`LongTupleHashFunction.java:70-118`). === Seed and Determinism Rules -* Seeded factory methods (for example `LongHashFunction.xx(long seed)`) embed the seed inside immutable instances. The seed influences the entire mixing pipeline, so equality tests must compare the resulting hash values rather than object identity (`LongHashFunction.java:199-282`, `XxHash.java:117-196`). -* Serialization preserves the chosen algorithm and seed. Several implementations expose singleton seedless instances via `readResolve`, ensuring deserialisation maintains canonical objects where applicable (`XxHash.java:104-116`, `MetroHash.java:95-114`, `WyHash.java:116-138`). + +* Seeded factory methods (for example `LongHashFunction.xx(long seed)`) embed the seed inside immutable instances. +The seed influences the entire mixing pipeline, so equality tests must compare the resulting hash values rather than object identity (`LongHashFunction.java:199-282`, `XxHash.java:117-196`). +* Serialization preserves the chosen algorithm and seed. +Several implementations expose singleton seedless instances via `readResolve`, ensuring deserialisation maintains canonical objects where applicable (`XxHash.java:104-116`, `MetroHash.java:95-114`, `WyHash.java:116-138`). === String Handling -* `hashChars` and `hash(CharSequence…)` delegate to `Util.VALID_STRING_HASH`, which inspects the running JVM to choose the correct memory layout strategy. Altering char sequence hashing must preserve this runtime detection, or mixed HotSpot/OpenJ9 estates will diverge (`Util.java:29-63`, `ModernCompactStringHash.java`, `ModernHotSpotStringHash.java`, `HotSpotPrior7u6StringHash.java`). -* Latin-1 compact strings are read through `CompactLatin1CharSequenceAccess`, which reinterprets the backing `byte[]` without allocating. Any change to string support must maintain zero-allocation access for both UTF-16 and compact encodings (`CompactLatin1CharSequenceAccess.java`). + +* `hashChars` and `hash(CharSequence…)` delegate to `Util.VALID_STRING_HASH`, which inspects the running JVM to choose the correct memory layout strategy. +Altering char sequence hashing must preserve this runtime detection, or mixed HotSpot/OpenJ9 estates will diverge (`Util.java:29-63`, `ModernCompactStringHash.java`, `ModernHotSpotStringHash.java`, `HotSpotPrior7u6StringHash.java`). +* Latin-1 compact strings are read through `CompactLatin1CharSequenceAccess`, which reinterprets the backing `byte[]` without allocating. +Any change to string support must maintain zero-allocation access for both UTF-16 and compact encodings (`CompactLatin1CharSequenceAccess.java`). === Array and Buffer Offsets -* Methods that accept `byte[]` plus `off` and `len` use `Util.checkArrayOffs` for bounds validation. Negative lengths or offsets, or slices that extend past the array end, raise `IndexOutOfBoundsException` immediately (`Util.java:70-77`, `LongHashFunction.java:480-547`). -* ByteBuffer hashing honours the buffer’s position, limit, and order. The implementation temporarily adjusts `Buffer` state to satisfy IBM JDK 7 quirks, then restores the original markers (`LongHashFunction.java:392-470`, `LongHashFunctionTest.java:120-176`). + +* Methods that accept `byte[]` plus `off` and `len` use `Util.checkArrayOffs` for bounds validation. +Negative lengths or offsets, or slices that extend past the array end, raise `IndexOutOfBoundsException` immediately (`Util.java:70-77`, `LongHashFunction.java:480-547`). +* ByteBuffer hashing honours the buffer’s position, limit, and order. +The implementation temporarily adjusts `Buffer` state to satisfy IBM JDK 7 quirks, then restores the original markers (`LongHashFunction.java:392-470`, `LongHashFunctionTest.java:120-176`). === Thread Safety -* All public hash function instances are effectively stateless after construction. Concurrent calls share read-only tables (for example, the XXH3 secret) and do not mutate internal fields, so the objects are safe to reuse across threads. Callers remain responsible for protecting the input they provide (`XXH3.java`, `XxHash.java`, `CityAndFarmHash_1_1.java`). + +* All public hash function instances are effectively stateless after construction. +Concurrent calls share read-only tables (for example, the XXH3 secret) and do not mutate internal fields, so the objects are safe to reuse across threads. +Callers remain responsible for protecting the input they provide (`XXH3.java`, `XxHash.java`, `CityAndFarmHash_1_1.java`). diff --git a/src/main/docs/performance-benchmarks.adoc b/src/main/docs/performance-benchmarks.adoc index 537246c..7bc6901 100644 --- a/src/main/docs/performance-benchmarks.adoc +++ b/src/main/docs/performance-benchmarks.adoc @@ -1,22 +1,29 @@ == Performance Benchmarks + Chronicle Software toc::[] === Current Baseline -* The published README table reports throughput (GB/s) and bootstrap latency (ns) per algorithm. MetroHash and wyHash entries are currently marked TODO pending refreshed measurements (`README.adoc:53-66`). -* No automated benchmarking harness ships with the repository today. Bench figures are captured offline and copied into the documentation. + +* The published README table reports throughput (GB/s) and bootstrap latency (ns) per algorithm. +MetroHash and wyHash entries are currently marked TODO pending refreshed measurements (`README.adoc:53-66`). +* No automated benchmarking harness ships with the repository today. +Bench figures are captured offline and copied into the documentation. === Measurement Protocol + * Build the library in release mode (`mvn -q verify`) before running any benchmarks to ensure all classes are compiled and tests have passed. * Pin tests to an isolated core and disable extraneous system load; past measurements targeted Intel Core i7-4870HQ @ 2.50 GHz, and new numbers should quote the exact CPU model and frequency. -* Use a harness that exercises each `LongHashFunction` via the public API (for example, `hashBytes(byte[])`) over representative buffer sizes. Warm up the JVM until results stabilise before sampling throughput. +* Use a harness that exercises each `LongHashFunction` via the public API (for example, `hashBytes(byte[])`) over representative buffer sizes. +Warm up the JVM until results stabilise before sampling throughput. * Record: - - **Speed (GB/s):** sustained throughput while hashing large buffers in steady state. - - **Bootstrap (ns):** per-call overhead measured on very small inputs (e.g., empty or sub-cache-line data). +- **Speed (GB/s):** sustained throughput while hashing large buffers in steady state. +- **Bootstrap (ns):** per-call overhead measured on very small inputs (e.g., empty or sub-cache-line data). * Capture both native and non-native endianness where practical; conversion overhead on big-endian systems should be noted if it materially deviates from little-endian results. === Reporting Guidelines + * Update `README.adoc` with the latest benchmark table, noting the hardware, JVM version, and any JVM flags used during the run. * Flag missing data as TODO (as done for MetroHash and wyHash) rather than leaving stale values in place. * When an optimisation changes algorithm behaviour or memory access, include before/after data in the pull request description so reviewers can confirm the impact. diff --git a/src/main/docs/specifications.adoc b/src/main/docs/specifications.adoc index c63eef4..2b00814 100644 --- a/src/main/docs/specifications.adoc +++ b/src/main/docs/specifications.adoc @@ -1,41 +1,49 @@ == Zero-Allocation Hashing Specification + Chronicle Software toc::[] === DOC-001 Scope + * Provides zero-allocation hashing utilities for byte-oriented inputs in Java. * Focuses on deterministic, cross-platform hash outputs across little- and big-endian architectures. * Excludes POJO graph hashing and streaming transforms that require reallocating data. === FN-101 Functional Requirements + * Expose hashing entry points for `long` and `long[]` return types covering 64-bit and 128-bit output families. * Support primitive arrays, `ByteBuffer`, direct memory regions, and `CharSequence` inputs without intermediate object creation. * Offer algorithm selectors that remain stable across releases to preserve backward compatibility for stored digests. * Provide predictable hashing irrespective of JVM byte order; the API must normalise endianness internally. === NF-P-201 Performance Characteristics + * Hashing calls must avoid heap allocations during steady-state use; initial static initialisation may allocate. * Hot-path hashing should remain branch-light to minimise CPU misprediction on modern x86 and ARM cores. * Benchmark coverage to include `xxHash`, `FarmHash na`, `FarmHash uo`, `CityHash`, `MurmurHash3`, `MetroHash`, and `wyHash`. * TODO Gather refreshed MetroHash and wyHash throughput and bootstrap metrics (tracked in https://github.com/OpenHFT/Zero-Allocation-Hashing/issues/28[]). === NF-O-301 Operability Expectations + * Library compiles with Maven using `mvn -q verify` on JDK 8 through JDK 21. * Maintain Apache 2.0 licencing headers across source and documentation artefacts. * Provide published Javadoc via https://javadoc.io/doc/net.openhft/zero-allocation-hashing/latest[] that reflects the released API surface. === TEST-401 Quality Assurance + * Unit tests must validate hashing consistency against known-good vectors for each algorithm. * Cross-endian verification to compare outputs between little-endian and big-endian environments. * Regression suites should cover null handling, bounds checking, and alignment-sensitive code paths. === DOC-501 Documentation Obligations + * Keep `README.adoc` aligned with the latest release version and supported JDK matrix. * Update this specification whenever algorithms, performance guarantees, or platform support change. * Record notable decisions in the project decision log with appropriate Nine-Box tags. === OPS-601 Release Checklist + * Confirm `mvn -q verify` passes on the targeted JDK matrix prior to tagging a release. * Ensure SonarCloud analysis is green before publishing artefacts. * Publish release notes summarising changes, performance impacts, and compatibility considerations. diff --git a/src/main/docs/testing-strategy.adoc b/src/main/docs/testing-strategy.adoc index 4ec4c61..d4723c7 100644 --- a/src/main/docs/testing-strategy.adoc +++ b/src/main/docs/testing-strategy.adoc @@ -1,28 +1,36 @@ == Testing Strategy + Chronicle Software toc::[] === Regression Coverage -* `LongHashFunctionTest.test` is the canonical harness for verifying that an algorithm produces identical values across the entire API surface (primitives, arrays, buffers, `Access`-backed inputs, and direct memory). All algorithm-specific tests delegate to this helper when checking new vectors (`LongHashFunctionTest.java:23-189`). + +* `LongHashFunctionTest.test` is the canonical harness for verifying that an algorithm produces identical values across the entire API surface (primitives, arrays, buffers, `Access`-backed inputs, and direct memory). +All algorithm-specific tests delegate to this helper when checking new vectors (`LongHashFunctionTest.java:23-189`). * Tuple variants reuse the same assertions through `LongTupleHashFunctionTest` (invoked transitively), ensuring the 128-bit paths remain aligned with their 64-bit projections. === Reference Vectors -* CityHash and FarmHash tests (`City64_1_1_Test`, `FarmHashTest`, `OriginalFarmHashTest`) replay the official C++ outputs for inputs up to 1024 bytes with deterministic seeds. The source programs used to generate those vectors are embedded in each test for reproducibility. + +* CityHash and FarmHash tests (`City64_1_1_Test`, `FarmHashTest`, `OriginalFarmHashTest`) replay the official C++ outputs for inputs up to 1024 bytes with deterministic seeds. +The source programs used to generate those vectors are embedded in each test for reproducibility. * XXH64 (`XxHashTest`), XXH3 (`XXH3Test`), and XXH128 (`XXH128Test`) load tables generated by the upstream xxHash project, covering lengths up to two full XXH3 blocks. * MetroHash (`MetroHashTest`) and wyHash (`WyHashTest`) follow the same pattern with public reference implementations, ensuring the adapted Java code remains bit-for-bit compatible. * Collision and edge case tests (`XxHashCollisionTest`, `OriginalFarmHashTest`) target previously reported defects and must continue to pass to guard against regressions. === Endianness Validation + * Every algorithm test is executed under both native and non-native byte orders by virtue of the `LongHashFunctionTest` helper, which rewrites `ByteBuffer` order and exercises the `Access.byteOrder` adaptation code paths. * Dedicated tests such as `LongHashFunctionTest.testNegativePrimitives` confirm that signed primitive hashes match the equivalent unsigned byte sequences, catching regressions in `Primitives.nativeToLittleEndian`. === Adding or Modifying Algorithms + 1. Generate authoritative reference hashes using the upstream implementation (the existing tests include example C or C++ snippets). 2. Create or extend a parameterised JUnit test that iterates over message lengths (the standard pattern covers lengths `[0, N]` with `N` at least 1024). 3. Feed the new vectors through `LongHashFunctionTest.test` (or the tuple equivalent) to validate all API entry points. 4. Augment `LongHashFunctionTest` if the algorithm exposes new surface area (for example, additional primitive types or new `Access` strategies). === Build and Verification + * Run `mvn -q verify` from the repository root before publishing changes; the goal invokes unit tests under the appropriate JVM profiles and ensures multi-version compatibility. * Include new regression cases alongside the code change so future automated runs catch behavioural drift without manual intervention. diff --git a/src/main/docs/unsafe-and-platform-notes.adoc b/src/main/docs/unsafe-and-platform-notes.adoc index 71a8a3e..8180ad7 100644 --- a/src/main/docs/unsafe-and-platform-notes.adoc +++ b/src/main/docs/unsafe-and-platform-notes.adoc @@ -1,21 +1,33 @@ == Unsafe and Platform Notes + Chronicle Software toc::[] === Internal API Usage -* `UnsafeAccess` reflects on `sun.misc.Unsafe.theUnsafe` to obtain the singleton and uses it for raw array access, field offsets, and direct memory loads (`UnsafeAccess.java:40-118`). This keeps hashing allocation-free but depends on the `jdk.unsupported` module. -* Direct buffer handling casts to `sun.nio.ch.DirectBuffer` to retrieve native addresses for `hashBytes(ByteBuffer)` and `hashMemory` (`Util.java:65-68`, `LongHashFunction.java:430-470`). The code path assumes the buffer is direct; heap buffers are copied through array access instead. -* String hashing inspects `java.lang.String.value` and, on compact-string VMs, treats the backing `byte[]` as Latin-1 using `CompactLatin1CharSequenceAccess` (`ModernCompactStringHash.java:10-62`). Older HotSpot builds and other JVMs fall back to UTF-16 behaviour through `ModernHotSpotStringHash` or `HotSpotPrior7u6StringHash`. + +* `UnsafeAccess` reflects on `sun.misc.Unsafe.theUnsafe` to obtain the singleton and uses it for raw array access, field offsets, and direct memory loads (`UnsafeAccess.java:40-118`). +This keeps hashing allocation-free but depends on the `jdk.unsupported` module. +* Direct buffer handling casts to `sun.nio.ch.DirectBuffer` to retrieve native addresses for `hashBytes(ByteBuffer)` and `hashMemory` (`Util.java:65-68`, `LongHashFunction.java:430-470`). +The code path assumes the buffer is direct; heap buffers are copied through array access instead. +* String hashing inspects `java.lang.String.value` and, on compact-string VMs, treats the backing `byte[]` as Latin-1 using `CompactLatin1CharSequenceAccess` (`ModernCompactStringHash.java:10-62`). +Older HotSpot builds and other JVMs fall back to UTF-16 behaviour through `ModernHotSpotStringHash` or `HotSpotPrior7u6StringHash`. === JVM Configuration -* On Java 9 and newer, strong encapsulation may block reflective access to the JDK internals above. Add the following opens/exports when running with a strict module layer: - - `--add-opens java.base/sun.misc=ALL-UNNAMED` (access to `Unsafe.theUnsafe`). - - `--add-exports java.base/sun.nio.ch=ALL-UNNAMED` (casts to `DirectBuffer`). - - `--add-opens java.base/java.lang=ALL-UNNAMED` (reading `String.value` for compact strings). -* The library does not automatically request these permissions. Applications embedding Zero-Allocation Hashing must configure the JVM command line or module descriptors accordingly. + +* On Java 9 and newer, strong encapsulation may block reflective access to the JDK internals above. +Add the following opens/exports when running with a strict module layer: +- `--add-opens java.base/sun.misc=ALL-UNNAMED` (access to `Unsafe.theUnsafe`). +- `--add-exports java.base/sun.nio.ch=ALL-UNNAMED` (casts to `DirectBuffer`). +- `--add-opens java.base/java.lang=ALL-UNNAMED` (reading `String.value` for compact strings). +* The library does not automatically request these permissions. +Applications embedding Zero-Allocation Hashing must configure the JVM command line or module descriptors accordingly. === Platform Behaviour -* All algorithms canonicalise multi-byte reads to little-endian using `Access.byteOrder` and `Primitives.nativeToLittleEndian`. Hash outputs therefore match across architectures, but big-endian CPUs incur additional byte swap overhead (see `XxHash.java:14-19`, `XXH3.java:23-28`, `WyHash.java:9-15`). -* When targeting non-HotSpot JVMs, `Util.VALID_STRING_HASH` falls back to a conservative implementation (`UnknownJvmStringHash`) if the VM name or version is unrecognised. This ensures correctness at the cost of potential performance; review the decision log before altering the detection logic (`Util.java:29-63`). -* Passing invalid pointers to `hashMemory` or misreporting `Access` byte order is undefined and can crash the JVM. Always validate foreign memory addresses and keep access strategies consistent with the underlying storage layout. + +* All algorithms canonicalise multi-byte reads to little-endian using `Access.byteOrder` and `Primitives.nativeToLittleEndian`. +Hash outputs therefore match across architectures, but big-endian CPUs incur additional byte swap overhead (see `XxHash.java:14-19`, `XXH3.java:23-28`, `WyHash.java:9-15`). +* When targeting non-HotSpot JVMs, `Util.VALID_STRING_HASH` falls back to a conservative implementation (`UnknownJvmStringHash`) if the VM name or version is unrecognised. +This ensures correctness at the cost of potential performance; review the decision log before altering the detection logic (`Util.java:29-63`). +* Passing invalid pointers to `hashMemory` or misreporting `Access` byte order is undefined and can crash the JVM. +Always validate foreign memory addresses and keep access strategies consistent with the underlying storage layout. diff --git a/src/main/java-stub/java/lang/Math.java b/src/main/java-stub/java/lang/Math.java index b7b4cda..31dcda0 100644 --- a/src/main/java-stub/java/lang/Math.java +++ b/src/main/java-stub/java/lang/Math.java @@ -2,13 +2,15 @@ /** * Stub for JDK internal ckass java.lang.Math. - * + *

* - When crossing compiling for Java SE 7 and 8, this stub class can be used for detecting - * Math#multiplyHigh() method at runtime. + * Math#multiplyHigh() method at runtime. * - Only used methods are exported. * - In test and production runtime, the real class is loaded from boot classpath. */ public class Math { - public static long multiplyHigh(long x, long y) { throw new UnsupportedOperationException(); } + public static long multiplyHigh(long x, long y) { + throw new UnsupportedOperationException(); + } } diff --git a/src/main/java-stub/sun/misc/Unsafe.java b/src/main/java-stub/sun/misc/Unsafe.java index 14fc37e..c45a476 100644 --- a/src/main/java-stub/sun/misc/Unsafe.java +++ b/src/main/java-stub/sun/misc/Unsafe.java @@ -2,22 +2,29 @@ /** * Stub for JDK internal ckass sun.misc.Unsafe. - * + *

* - When crossing compiling for Java SE 7 and 8, this stub class can bypass compiler sun-api - * warnings. + * warnings. * - Only used methods are exported. * - In test and production runtime, the real class is loaded from boot classpath. */ public final class Unsafe { - public native Object getObject( Object o, long offset); - public native int getInt( Object o, long offset); + public native Object getObject(Object o, long offset); + + public native int getInt(Object o, long offset); + public native boolean getBoolean(Object o, long offset); - public native byte getByte( Object o, long offset); - public native short getShort( Object o, long offset); - public native char getChar( Object o, long offset); - public native long getLong( Object o, long offset); + + public native byte getByte(Object o, long offset); + + public native short getShort(Object o, long offset); + + public native char getChar(Object o, long offset); + + public native long getLong(Object o, long offset); public native long objectFieldOffset(java.lang.reflect.Field f); + public native int arrayBaseOffset(Class arrayClass); } diff --git a/src/main/java/net/openhft/hashing/Access.java b/src/main/java/net/openhft/hashing/Access.java index a8e103a..7fcc5d9 100644 --- a/src/main/java/net/openhft/hashing/Access.java +++ b/src/main/java/net/openhft/hashing/Access.java @@ -131,10 +131,10 @@ public static Access toNativeCharSequence() { * }} * * @param backingOrder the byte order of {@code char} reads backing - * {@code CharSequences} to access + * {@code CharSequences} to access + * @param the {@code CharSequence} subtype to access * @return the {@code Access} to {@link CharSequence}s backed by {@code char} reads made in * the specified byte order - * @param the {@code CharSequence} subtype to access * @see #toNativeCharSequence() */ @SuppressWarnings("unchecked") @@ -145,15 +145,16 @@ public static Access toCharSequence(ByteOrder backin /** * Constructor for use in subclasses. */ - protected Access() {} + protected Access() { + } /** * Reads {@code [offset, offset + 7]} bytes of the byte sequence represented by the given * {@code input} as a single {@code long} value. * - * @param input the object to access + * @param input the object to access * @param offset offset to the first byte to read within the byte sequence represented - * by the given object + * by the given object * @return eight bytes as a {@code long} value, in {@linkplain #byteOrder(Object) the expected * order} */ @@ -169,9 +170,9 @@ public long getLong(T input, long offset) { * Shortcut for {@code getInt(input, offset) & 0xFFFFFFFFL}. Could be implemented more * efficiently. * - * @param input the object to access + * @param input the object to access * @param offset offset to the first byte to read within the byte sequence represented - * by the given object + * by the given object * @return four bytes as an unsigned int value, in {@linkplain #byteOrder(Object) the expected * order} */ @@ -183,9 +184,9 @@ public long getUnsignedInt(T input, long offset) { * Reads {@code [offset, offset + 3]} bytes of the byte sequence represented by the given * {@code input} as a single {@code int} value. * - * @param input the object to access + * @param input the object to access * @param offset offset to the first byte to read within the byte sequence represented - * by the given object + * by the given object * @return four bytes as an {@code int} value, in {@linkplain #byteOrder(Object) the expected * order} */ @@ -201,9 +202,9 @@ public int getInt(T input, long offset) { * Shortcut for {@code getShort(input, offset) & 0xFFFF}. Could be implemented more * efficiently. * - * @param input the object to access + * @param input the object to access * @param offset offset to the first byte to read within the byte sequence represented - * by the given object + * by the given object * @return two bytes as an unsigned short value, in {@linkplain #byteOrder(Object) the expected * order} */ @@ -219,9 +220,9 @@ public int getUnsignedShort(T input, long offset) { * Reads {@code [offset, offset + 1]} bytes of the byte sequence represented by the given * {@code input} as a single {@code short} value, returned widened to {@code int}. * - * @param input the object to access + * @param input the object to access * @param offset offset to the first byte to read within the byte sequence represented - * by the given object + * by the given object * @return two bytes as a {@code short} value, in {@linkplain #byteOrder(Object) the expected * order}, widened to {@code int} */ @@ -232,9 +233,9 @@ public int getShort(T input, long offset) { /** * Shortcut for {@code getByte(input, offset) & 0xFF}. Could be implemented more efficiently. * - * @param input the object to access + * @param input the object to access * @param offset offset to the byte to read within the byte sequence represented - * by the given object + * by the given object * @return a byte by the given {@code offset}, interpreted as unsigned */ public int getUnsignedByte(T input, long offset) { @@ -245,21 +246,41 @@ public int getUnsignedByte(T input, long offset) { * Reads a single byte at the given {@code offset} in the byte sequence represented by the given * {@code input}, returned widened to {@code int}. * - * @param input the object to access + * @param input the object to access * @param offset offset to the byte to read within the byte sequence represented - * by the given object + * by the given object * @return a byte by the given {@code offset}, widened to {@code int} */ public abstract int getByte(T input, long offset); // short names - public long i64(final T input, final long offset) { return getLong(input, offset); } - public long u32(final T input, final long offset) { return getUnsignedInt(input, offset); } - public int i32(final T input, final long offset) { return getInt(input, offset); } - public int u16(final T input, final long offset) { return getUnsignedShort(input, offset); } - public int i16(final T input, final long offset) { return getShort(input, offset); } - public int u8(final T input, final long offset) { return getUnsignedByte(input, offset); } - public int i8(final T input, final long offset) { return getByte(input, offset); } + public long i64(final T input, final long offset) { + return getLong(input, offset); + } + + public long u32(final T input, final long offset) { + return getUnsignedInt(input, offset); + } + + public int i32(final T input, final long offset) { + return getInt(input, offset); + } + + public int u16(final T input, final long offset) { + return getUnsignedShort(input, offset); + } + + public int i16(final T input, final long offset) { + return getShort(input, offset); + } + + public int u8(final T input, final long offset) { + return getUnsignedByte(input, offset); + } + + public int i8(final T input, final long offset) { + return getByte(input, offset); + } /** * The byte order in which all multi-byte {@code getXXX()} reads from the given {@code input} @@ -274,7 +295,7 @@ public int getUnsignedByte(T input, long offset) { * Get {@code this} or the reversed access object for reading the input as fixed * byte order of {@code byteOrder}. * - * @param input the accessed object + * @param input the accessed object * @param byteOrder the byte order to be used for reading the {@code input} * @return a {@code Access} object which will read the {@code input} with the * byte order of {@code byteOrder}. @@ -294,8 +315,8 @@ public Access byteOrder(final T input, final ByteOrder byteOrder) { */ static Access newDefaultReverseAccess(final Access access) { return access instanceof ReverseAccess - ? access.reverseAccess() - : new ReverseAccess(access); + ? access.reverseAccess() + : new ReverseAccess(access); } /** @@ -303,41 +324,51 @@ static Access newDefaultReverseAccess(final Access access) { */ private static class ReverseAccess extends Access { final Access access; + private ReverseAccess(final Access access) { this.access = access; } + @Override public long getLong(final T input, final long offset) { return Long.reverseBytes(access.getLong(input, offset)); } + @Override public long getUnsignedInt(final T input, final long offset) { return Long.reverseBytes(access.getUnsignedInt(input, offset)) >>> 32; } + @Override public int getInt(final T input, final long offset) { return Integer.reverseBytes(access.getInt(input, offset)); } + @Override public int getUnsignedShort(final T input, final long offset) { return Integer.reverseBytes(access.getUnsignedShort(input, offset)) >>> 16; } + @Override public int getShort(final T input, final long offset) { return Integer.reverseBytes(access.getShort(input, offset)) >> 16; } + @Override public int getUnsignedByte(final T input, final long offset) { return access.getUnsignedByte(input, offset); } + @Override public int getByte(final T input, final long offset) { return access.getByte(input, offset); } + @Override public ByteOrder byteOrder(final T input) { return LITTLE_ENDIAN == access.byteOrder(input) ? BIG_ENDIAN : LITTLE_ENDIAN; } + @Override protected Access reverseAccess() { return access; diff --git a/src/main/java/net/openhft/hashing/ByteBufferAccess.java b/src/main/java/net/openhft/hashing/ByteBufferAccess.java index 0425598..4e726d6 100644 --- a/src/main/java/net/openhft/hashing/ByteBufferAccess.java +++ b/src/main/java/net/openhft/hashing/ByteBufferAccess.java @@ -23,7 +23,8 @@ public final class ByteBufferAccess extends Access { public static final ByteBufferAccess INSTANCE = new ByteBufferAccess(); private static final Access INSTANCE_REVERSE = Access.newDefaultReverseAccess(INSTANCE); - private ByteBufferAccess() {} + private ByteBufferAccess() { + } @Override public long getLong(ByteBuffer input, long offset) { diff --git a/src/main/java/net/openhft/hashing/CharSequenceAccess.java b/src/main/java/net/openhft/hashing/CharSequenceAccess.java index 3d3ad5b..81660a7 100644 --- a/src/main/java/net/openhft/hashing/CharSequenceAccess.java +++ b/src/main/java/net/openhft/hashing/CharSequenceAccess.java @@ -41,7 +41,7 @@ protected static long getLong(CharSequence input, long offset, int char0Off, int char1Off, int char2Off, int char3Off, int char4Off, int delta) { final int base = ix(offset); - if (0 == ((int)offset & 1)) { + if (0 == ((int) offset & 1)) { final long char0 = input.charAt(base + char0Off); final long char1 = input.charAt(base + char1Off); final long char2 = input.charAt(base + char2Off); @@ -60,7 +60,7 @@ protected static long getLong(CharSequence input, long offset, protected static long getUnsignedInt(CharSequence input, long offset, int char0Off, int char1Off, int char2Off, int delta) { final int base = ix(offset); - if (0 == ((int)offset & 1)) { + if (0 == ((int) offset & 1)) { final long char0 = input.charAt(base + char0Off); final long char1 = input.charAt(base + char1Off); return char0 | (char1 << 16); @@ -74,13 +74,13 @@ protected static long getUnsignedInt(CharSequence input, long offset, protected static char getUnsignedShort(CharSequence input, long offset, int char1Off, int delta) { - if (0 == ((int)offset & 1)) { + if (0 == ((int) offset & 1)) { return input.charAt(ix(offset)); } else { final int base = ix(offset); final int char0 = input.charAt(base + delta) >>> 8; final int char1 = input.charAt(base + char1Off); - return (char)(char0 | (char1 << 8)); + return (char) (char0 | (char1 << 8)); } } @@ -88,7 +88,8 @@ protected static int getUnsignedByte(CharSequence input, long offset, int shift) return Primitives.unsignedByte(input.charAt(ix(offset)) >> shift); } - private CharSequenceAccess() {} + private CharSequenceAccess() { + } @Override public int getInt(CharSequence input, long offset) { @@ -97,7 +98,7 @@ public int getInt(CharSequence input, long offset) { @Override public int getShort(CharSequence input, long offset) { - return (int)(short)getUnsignedShort(input, offset); + return (int) (short) getUnsignedShort(input, offset); } @Override @@ -109,7 +110,8 @@ private static class LittleEndianCharSequenceAccess extends CharSequenceAccess { private static final CharSequenceAccess INSTANCE = new LittleEndianCharSequenceAccess(); private static final Access INSTANCE_REVERSE = Access.newDefaultReverseAccess(INSTANCE); - private LittleEndianCharSequenceAccess() {} + private LittleEndianCharSequenceAccess() { + } @Override public long getLong(CharSequence input, long offset) { @@ -146,7 +148,8 @@ private static class BigEndianCharSequenceAccess extends CharSequenceAccess { private static final CharSequenceAccess INSTANCE = new BigEndianCharSequenceAccess(); private static final Access INSTANCE_REVERSE = Access.newDefaultReverseAccess(INSTANCE); - private BigEndianCharSequenceAccess() {} + private BigEndianCharSequenceAccess() { + } @Override public long getLong(CharSequence input, long offset) { diff --git a/src/main/java/net/openhft/hashing/CityAndFarmHash_1_1.java b/src/main/java/net/openhft/hashing/CityAndFarmHash_1_1.java index 3a1095d..1d16b5a 100644 --- a/src/main/java/net/openhft/hashing/CityAndFarmHash_1_1.java +++ b/src/main/java/net/openhft/hashing/CityAndFarmHash_1_1.java @@ -551,7 +551,7 @@ static long uoHash64WithSeeds(Access access, T in, long off, long len, lo a += access.i64(in, off + 8); a += access.i64(in, off + 16); b += rotateRight(a, 44); - v0 = a + z1; + v0 = a + z1; v1 = b + c; long a1 = z + w1; diff --git a/src/main/java/net/openhft/hashing/CompactLatin1CharSequenceAccess.java b/src/main/java/net/openhft/hashing/CompactLatin1CharSequenceAccess.java index ab24c06..b917941 100644 --- a/src/main/java/net/openhft/hashing/CompactLatin1CharSequenceAccess.java +++ b/src/main/java/net/openhft/hashing/CompactLatin1CharSequenceAccess.java @@ -1,9 +1,9 @@ package net.openhft.hashing; -import java.nio.ByteOrder; - import org.jetbrains.annotations.NotNull; + import javax.annotation.ParametersAreNonnullByDefault; +import java.nio.ByteOrder; import static java.nio.ByteOrder.LITTLE_ENDIAN; import static net.openhft.hashing.UnsafeAccess.BYTE_BASE; @@ -84,11 +84,12 @@ public class CompactLatin1CharSequenceAccess extends Access { private static final UnsafeAccess UNSAFE = UnsafeAccess.INSTANCE; private static final long UNSAFE_IDX_ADJUST - = BYTE_BASE * 2L + (ByteOrder.nativeOrder() == LITTLE_ENDIAN ? 1 : 0); + = BYTE_BASE * 2L + (ByteOrder.nativeOrder() == LITTLE_ENDIAN ? 1 : 0); private static final long ARRAY_IDX_ADJUST - = ByteOrder.nativeOrder() == LITTLE_ENDIAN ? 1 : 0; + = ByteOrder.nativeOrder() == LITTLE_ENDIAN ? 1 : 0; - private CompactLatin1CharSequenceAccess() {} + private CompactLatin1CharSequenceAccess() { + } @Override public long getLong(final byte[] input, final long offset) { @@ -96,7 +97,7 @@ public long getLong(final byte[] input, final long offset) { final long compact = UNSAFE.getUnsignedInt(input, byteIdx); long expanded = ((compact << 16) | compact) & 0xFFFF0000FFFFL; expanded = ((expanded << 8) | expanded) & 0xFF00FF00FF00FFL; - if (((int)offset & 1) == 1) { + if (((int) offset & 1) == 1) { return expanded << 8; } return expanded; @@ -107,7 +108,7 @@ public int getInt(final byte[] input, final long offset) { final long byteIdx = (offset + UNSAFE_IDX_ADJUST) >> 1; final int compact = UNSAFE.getShort(input, byteIdx) & 0xFFFF; final int expanded = ((compact << 8) | compact) & 0xFF00FF; - if (((int)offset & 1) == 1) { + if (((int) offset & 1) == 1) { return expanded << 8; } return expanded; @@ -117,8 +118,8 @@ public int getInt(final byte[] input, final long offset) { public long getUnsignedInt(final byte[] input, final long offset) { final long byteIdx = (offset + UNSAFE_IDX_ADJUST) >> 1; final int compact = UNSAFE.getShort(input, byteIdx) & 0xFFFF; - final long expanded = (long)(((compact << 8) | compact) & 0xFF00FF); - if (((int)offset & 1) == 1) { + final long expanded = (long) (((compact << 8) | compact) & 0xFF00FF); + if (((int) offset & 1) == 1) { return expanded << 8; } return expanded; @@ -126,41 +127,41 @@ public long getUnsignedInt(final byte[] input, final long offset) { @Override public int getShort(final byte[] input, final long offset) { - if (((int)offset & 1) == 0) { - final int byteIdx = (int)(offset >> 1); - return (int)input[byteIdx] & 0xFF; + if (((int) offset & 1) == 0) { + final int byteIdx = (int) (offset >> 1); + return (int) input[byteIdx] & 0xFF; } else { - final int byteIdx = (int)((offset + ARRAY_IDX_ADJUST) >> 1); - return (int)input[byteIdx] << 8; + final int byteIdx = (int) ((offset + ARRAY_IDX_ADJUST) >> 1); + return (int) input[byteIdx] << 8; } } @Override public int getUnsignedShort(final byte[] input, final long offset) { - if (((int)offset & 1) == 0) { - final int byteIdx = (int)(offset >> 1); - return (int)input[byteIdx] & 0xFF; + if (((int) offset & 1) == 0) { + final int byteIdx = (int) (offset >> 1); + return (int) input[byteIdx] & 0xFF; } else { - final int byteIdx = (int)((offset + ARRAY_IDX_ADJUST) >> 1); - return ((int)input[byteIdx] & 0xFF) << 8; + final int byteIdx = (int) ((offset + ARRAY_IDX_ADJUST) >> 1); + return ((int) input[byteIdx] & 0xFF) << 8; } } @Override public int getByte(final byte[] input, final long offset) { - if (ARRAY_IDX_ADJUST == ((int)offset & 1)) { + if (ARRAY_IDX_ADJUST == ((int) offset & 1)) { return 0; } else { - return (int)input[(int)(offset >> 1)]; + return (int) input[(int) (offset >> 1)]; } } @Override public int getUnsignedByte(final byte[] input, final long offset) { - if (ARRAY_IDX_ADJUST == ((int)offset & 1)) { + if (ARRAY_IDX_ADJUST == ((int) offset & 1)) { return 0; } else { - return (int)input[(int)(offset >> 1)] & 0xFF; + return (int) input[(int) (offset >> 1)] & 0xFF; } } diff --git a/src/main/java/net/openhft/hashing/DualHashFunction.java b/src/main/java/net/openhft/hashing/DualHashFunction.java index b628348..12484f8 100644 --- a/src/main/java/net/openhft/hashing/DualHashFunction.java +++ b/src/main/java/net/openhft/hashing/DualHashFunction.java @@ -1,7 +1,8 @@ package net.openhft.hashing; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import javax.annotation.ParametersAreNonnullByDefault; // An internal helper class for casting LongTupleHashFunction as LongHashFunction @@ -11,6 +12,7 @@ abstract class DualHashFunction extends LongTupleHashFunction { private static final long serialVersionUID = 0L; private transient final int resultLength = newResultArray().length; + private void checkResult(final long[] result) { if (null == result) { throw new NullPointerException(); @@ -21,6 +23,7 @@ private void checkResult(final long[] result) { } protected abstract long dualHashLong(long input, @Nullable long[] result); + @Override public void hashLong(final long input, final long[] result) { checkResult(result); @@ -28,6 +31,7 @@ public void hashLong(final long input, final long[] result) { } protected abstract long dualHashInt(int input, @Nullable long[] result); + @Override public void hashInt(final int input, final long[] result) { checkResult(result); @@ -35,6 +39,7 @@ public void hashInt(final int input, final long[] result) { } protected abstract long dualHashShort(short input, @Nullable long[] result); + @Override public void hashShort(final short input, final long[] result) { checkResult(result); @@ -42,6 +47,7 @@ public void hashShort(final short input, final long[] result) { } protected abstract long dualHashChar(char input, @Nullable long[] result); + @Override public void hashChar(final char input, final long[] result) { checkResult(result); @@ -49,6 +55,7 @@ public void hashChar(final char input, final long[] result) { } protected abstract long dualHashByte(byte input, @Nullable long[] result); + @Override public void hashByte(final byte input, final long[] result) { checkResult(result); @@ -56,6 +63,7 @@ public void hashByte(final byte input, final long[] result) { } protected abstract long dualHashVoid(@Nullable long[] result); + @Override public void hashVoid(final long[] result) { checkResult(result); @@ -63,11 +71,13 @@ public void hashVoid(final long[] result) { } protected abstract long dualHash(@Nullable T input, Access access, long off, long len, @Nullable long[] result); + @Override public void hash(@Nullable final T input, final Access access, final long off, final long len, final long[] result) { checkResult(result); dualHash(input, access, off, len, result); } + @Override public long[] hash(@Nullable final T input, final Access access, final long off, final long len) { final long[] result = newResultArray(); diff --git a/src/main/java/net/openhft/hashing/HotSpotPrior7u6StringHash.java b/src/main/java/net/openhft/hashing/HotSpotPrior7u6StringHash.java index 09e0848..3473a3b 100644 --- a/src/main/java/net/openhft/hashing/HotSpotPrior7u6StringHash.java +++ b/src/main/java/net/openhft/hashing/HotSpotPrior7u6StringHash.java @@ -16,8 +16,8 @@ package net.openhft.hashing; -import java.lang.reflect.Field; import javax.annotation.ParametersAreNonnullByDefault; +import java.lang.reflect.Field; @ParametersAreNonnullByDefault enum HotSpotPrior7u6StringHash implements StringHash { @@ -47,7 +47,7 @@ public long longHash(String s, LongHashFunction hashFunction, int off, int len) @Override public void hash(final String s, final LongTupleHashFunction hashFunction, - final int off, final int len, final long[] result) { + final int off, final int len, final long[] result) { final char[] value = (char[]) UnsafeAccess.UNSAFE.getObject(s, valueOffset); final int offset = UnsafeAccess.UNSAFE.getInt(s, offsetOffset); hashFunction.hashChars(value, offset + off, len, result); diff --git a/src/main/java/net/openhft/hashing/LongHashFunction.java b/src/main/java/net/openhft/hashing/LongHashFunction.java index 8cd2c3f..2ffe73b 100644 --- a/src/main/java/net/openhft/hashing/LongHashFunction.java +++ b/src/main/java/net/openhft/hashing/LongHashFunction.java @@ -408,9 +408,9 @@ protected LongHashFunction() { * value is interpreted in {@linkplain ByteOrder#nativeOrder() native} byte order. For example, * the result of {@code hashLong(v)} call is identical to the result of * {@code hashLongs(new long[] {v})} call for any {@code long} value. - * - * @param input the long value to be hashed - * @return the hash code for the given long value + * + * @param input the long value to be hashed + * @return the hash code for the given long value */ public abstract long hashLong(long input); @@ -420,9 +420,9 @@ protected LongHashFunction() { * value is interpreted in {@linkplain ByteOrder#nativeOrder() native} byte order. For example, * the result of {@code hashInt(v)} call is identical to the result of * {@code hashInts(new int[] {v})} call for any {@code int} value. - * - * @param input the int value to be hashed - * @return the hash code for the given int value + * + * @param input the int value to be hashed + * @return the hash code for the given int value */ public abstract long hashInt(int input); @@ -434,9 +434,9 @@ protected LongHashFunction() { * {@code hashShorts(new short[] {v})} call for any {@code short} value. * As a consequence, {@code hashShort(v)} call produce always the same result as {@code * hashChar((char) v)}. - * - * @param input the short value to be hashed - * @return the hash code for the given short value + * + * @param input the short value to be hashed + * @return the hash code for the given short value */ public abstract long hashShort(short input); @@ -448,9 +448,9 @@ protected LongHashFunction() { * {@code hashChars(new char[] {v})} call for any {@code char} value. * As a consequence, {@code hashChar(v)} call produce always the same result as {@code * hashShort((short) v)}. - * - * @param input the char value to be hashed - * @return the hash code for the given char value + * + * @param input the char value to be hashed + * @return the hash code for the given char value */ public abstract long hashChar(char input); @@ -459,17 +459,17 @@ protected LongHashFunction() { * {@code LongHashFunction} methods that accept sequences of bytes. For example, the result of * {@code hashByte(v)} call is identical to the result of * {@code hashBytes(new byte[] {v})} call for any {@code byte} value. - * - * @param input the byte value to be hashed - * @return the hash code for the given byte value + * + * @param input the byte value to be hashed + * @return the hash code for the given byte value */ public abstract long hashByte(byte input); /** * Returns the hash code for the empty (zero-length) bytes sequence, * for example {@code hashBytes(new byte[0])}. - * - * @return the hash code for the empty bytes sequence + * + * @return the hash code for the empty bytes sequence */ public abstract long hashVoid(); @@ -500,9 +500,9 @@ private long unsafeHash(Object input, long off, long len) { * Shortcut for {@link #hashBooleans(boolean[]) hashBooleans(new boolean[] {input})}. * Note that this is not necessarily equal to {@code hashByte(input ? (byte) 1 : (byte) 0)}, * because booleans could be stored differently in this JVM. - * - * @param input the boolean value to be hashed - * @return the hash code for the given boolean value + * + * @param input the boolean value to be hashed + * @return the hash code for the given boolean value */ public long hashBoolean(boolean input) { return hashByte(input ? TRUE_BYTE_VALUE : FALSE_BYTE_VALUE); @@ -510,9 +510,9 @@ public long hashBoolean(boolean input) { /** * Shortcut for {@link #hashBooleans(boolean[], int, int) hashBooleans(input, 0, input.length)}. - * - * @param input the boolean array to be hashed - * @return the hash code for the given boolean array + * + * @param input the boolean array to be hashed + * @return the hash code for the given boolean array */ public long hashBooleans(@NotNull boolean[] input) { return unsafeHash(input, BOOLEAN_BASE, input.length); @@ -538,9 +538,9 @@ public long hashBooleans(@NotNull boolean[] input, int off, int len) { /** * Shortcut for {@link #hashBytes(byte[], int, int) hashBytes(input, 0, input.length)}. - * - * @param input the byte array to be hashed - * @return the hash code for the given byte array + * + * @param input the byte array to be hashed + * @return the hash code for the given byte array */ public long hashBytes(@NotNull byte[] input) { return unsafeHash(input, BYTE_BASE, input.length); @@ -567,9 +567,9 @@ public long hashBytes(@NotNull byte[] input, int off, int len) { /** * Shortcut for {@link #hashBytes(ByteBuffer, int, int) * hashBytes(input, input.position(), input.remaining())}. - * - * @param input the ByteBuffer to be hashed - * @return the hash code for the given ByteBuffer + * + * @param input the ByteBuffer to be hashed + * @return the hash code for the given ByteBuffer */ public long hashBytes(ByteBuffer input) { return hashByteBuffer(input, input.position(), input.remaining()); @@ -622,9 +622,9 @@ public long hashMemory(long address, long len) { /** * Shortcut for {@link #hashChars(char[], int, int) hashChars(input, 0, input.length)}. - * - * @param input the char array to be hashed - * @return the hash code for the given char array + * + * @param input the char array to be hashed + * @return the hash code for the given char array */ public long hashChars(@NotNull char[] input) { return unsafeHash(input, CHAR_BASE, input.length * 2L); @@ -652,9 +652,9 @@ public long hashChars(@NotNull char[] input, int off, int len) { /** * Shortcut for {@link #hashChars(String, int, int) hashChars(input, 0, input.length())}. - * - * @param input the String to be hashed - * @return the hash code for the given String + * + * @param input the String to be hashed + * @return the hash code for the given String */ public long hashChars(@NotNull String input) { return VALID_STRING_HASH.longHash(input, this, 0, input.length()); @@ -682,9 +682,9 @@ public long hashChars(@NotNull String input, int off, int len) { /** * Shortcut for {@link #hashChars(StringBuilder, int, int) hashChars(input, 0, input.length())}. - * - * @param input the StringBuilder to be hashed - * @return the hash code for the given StringBuilder + * + * @param input the StringBuilder to be hashed + * @return the hash code for the given StringBuilder */ public long hashChars(@NotNull StringBuilder input) { return hashNativeChars(input); @@ -710,33 +710,33 @@ public long hashChars(@NotNull StringBuilder input, int off, int len) { return hashNativeChars(input, off, len); } -/** - * Returns the hash code for the entire CharSequence. - * - * @param input the CharSequence to be hashed - * @return the hash code for the given CharSequence - */ + /** + * Returns the hash code for the entire CharSequence. + * + * @param input the CharSequence to be hashed + * @return the hash code for the given CharSequence + */ long hashNativeChars(CharSequence input) { return hashNativeChars(input, 0, input.length()); } -/** - * Returns the hash code for a subsequence of the given CharSequence. - * - * @param input the CharSequence to be hashed - * @param off the index of the first char in the subsequence - * @param len the length of the subsequence - * @return the hash code for the specified subsequence of the given CharSequence - */ + /** + * Returns the hash code for a subsequence of the given CharSequence. + * + * @param input the CharSequence to be hashed + * @param off the index of the first char in the subsequence + * @param len the length of the subsequence + * @return the hash code for the specified subsequence of the given CharSequence + */ long hashNativeChars(CharSequence input, int off, int len) { return hash(input, nativeCharSequenceAccess(), off * 2L, len * 2L); } /** * Shortcut for {@link #hashShorts(short[], int, int) hashShorts(input, 0, input.length)}. - * - * @param input the short array to be hashed - * @return the hash code for the given short array + * + * @param input the short array to be hashed + * @return the hash code for the given short array */ public long hashShorts(@NotNull short[] input) { return unsafeHash(input, SHORT_BASE, input.length * 2L); @@ -764,9 +764,9 @@ public long hashShorts(@NotNull short[] input, int off, int len) { /** * Shortcut for {@link #hashInts(int[], int, int) hashInts(input, 0, input.length)}. - * - * @param input the integer array to be hashed - * @return the hash code for the given integer array + * + * @param input the integer array to be hashed + * @return the hash code for the given integer array */ public long hashInts(@NotNull int[] input) { return unsafeHash(input, INT_BASE, input.length * 4L); @@ -794,9 +794,9 @@ public long hashInts(@NotNull int[] input, int off, int len) { /** * Shortcut for {@link #hashLongs(long[], int, int) hashLongs(input, 0, input.length)}. - * - * @param input the long array to be hashed - * @return the hash code for the given long array + * + * @param input the long array to be hashed + * @return the hash code for the given long array */ public long hashLongs(@NotNull long[] input) { return unsafeHash(input, LONG_BASE, input.length * 8L); diff --git a/src/main/java/net/openhft/hashing/LongTupleHashFunction.java b/src/main/java/net/openhft/hashing/LongTupleHashFunction.java index faf0ef6..6b1b6f3 100644 --- a/src/main/java/net/openhft/hashing/LongTupleHashFunction.java +++ b/src/main/java/net/openhft/hashing/LongTupleHashFunction.java @@ -2,16 +2,17 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; import sun.nio.ch.DirectBuffer; +import javax.annotation.ParametersAreNonnullByDefault; import java.io.Serializable; import java.nio.ByteBuffer; import java.nio.ByteOrder; import static net.openhft.hashing.CharSequenceAccess.nativeCharSequenceAccess; import static net.openhft.hashing.UnsafeAccess.*; -import static net.openhft.hashing.Util.*; +import static net.openhft.hashing.Util.VALID_STRING_HASH; +import static net.openhft.hashing.Util.checkArrayOffs; /** * Tuple hash function producing more than 64-bit hash code into a result array of type @@ -121,7 +122,8 @@ public static LongTupleHashFunction xx128(final long seed) { /** * Constructor for use in subclasses. */ - protected LongTupleHashFunction() {} + protected LongTupleHashFunction() { + } // Public API // @@ -155,7 +157,7 @@ public long[] newResultArray() { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} */ public abstract void hashLong(long input, long[] result); @@ -185,7 +187,7 @@ public long[] hashLong(final long input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} */ public abstract void hashInt(int input, long[] result); @@ -215,7 +217,7 @@ public long[] hashInt(final int input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} */ public abstract void hashShort(short input, long[] result); @@ -245,7 +247,7 @@ public long[] hashShort(final short input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} */ public abstract void hashChar(char input, long[] result); @@ -274,7 +276,7 @@ public long[] hashChar(final char input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} */ public abstract void hashByte(byte input, long[] result); @@ -301,7 +303,7 @@ public long[] hashByte(final byte input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} */ public abstract void hashVoid(long[] result); @@ -332,15 +334,15 @@ public long[] hashVoid() { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the object to read bytes from + * @param input the object to read bytes from * @param access access which defines the abstraction of the given input * as ordered byte sequence - * @param off offset to the first byte of the subsequence to hash - * @param len length of the subsequence to hash + * @param off offset to the first byte of the subsequence to hash + * @param len length of the subsequence to hash * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @param the type of the input - * @throws NullPointerException if {@code result == null} + * @param the type of the input + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} */ public abstract void hash(@Nullable T input, Access access, @@ -413,12 +415,12 @@ public long[] hashBooleans(final boolean[] input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the array to read data from - * @param off index of the first {@code boolean} in the subsequence to hash - * @param len length of the subsequence to hash + * @param input the array to read data from + * @param off index of the first {@code boolean} in the subsequence to hash + * @param len length of the subsequence to hash * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -473,12 +475,12 @@ public long[] hashBytes(final byte[] input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the array to read data from - * @param off index of the first {@code byte} in the subsequence to hash - * @param len length of the subsequence to hash + * @param input the array to read data from + * @param off index of the first {@code byte} in the subsequence to hash + * @param len length of the subsequence to hash * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -536,12 +538,12 @@ public long[] hashBytes(final ByteBuffer input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the buffer to read bytes from - * @param off index of the first {@code byte} in the subsequence to hash - * @param len length of the subsequence to hash + * @param input the buffer to read bytes from + * @param off index of the first {@code byte} in the subsequence to hash + * @param len length of the subsequence to hash * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -577,10 +579,10 @@ public long[] hashBytes(final ByteBuffer input, final int off, final int len) { * {@code result.length > newResultArray().length]}. * * @param address the address of the first byte to hash - * @param len length of the byte sequence to hash - * @param result the container array for storing the hash results, - * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @param len length of the byte sequence to hash + * @param result the container array for storing the hash results, + * should be alloced by {@link #newResultArray} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -633,13 +635,13 @@ public long[] hashChars(final char[] input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the array to read data from - * @param off index of the first {@code char} in the subsequence to hash - * @param len length of the subsequence to hash, in chars (i.e. the length of the bytes sequence - * to hash is {@code len * 2L}) + * @param input the array to read data from + * @param off index of the first {@code char} in the subsequence to hash + * @param len length of the subsequence to hash, in chars (i.e. the length of the bytes sequence + * to hash is {@code len * 2L}) * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -695,13 +697,13 @@ public long[] hashChars(final String input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the string which bytes to hash - * @param off index of the first {@code char} in the subsequence to hash - * @param len length of the subsequence to hash, in chars (i.e. the length of the bytes sequence - * to hash is {@code len * 2L}) + * @param input the string which bytes to hash + * @param off index of the first {@code char} in the subsequence to hash + * @param len length of the subsequence to hash, in chars (i.e. the length of the bytes sequence + * to hash is {@code len * 2L}) * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -756,13 +758,13 @@ public long[] hashChars(final T input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the char sequence which bytes to hash - * @param off index of the first {@code char} in the subsequence to hash - * @param len length of the subsequence to hash, in chars (i.e. the length of the bytes sequence - * to hash is {@code len * 2L}) + * @param input the char sequence which bytes to hash + * @param off index of the first {@code char} in the subsequence to hash + * @param len length of the subsequence to hash, in chars (i.e. the length of the bytes sequence + * to hash is {@code len * 2L}) * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -818,13 +820,13 @@ public long[] hashShorts(final short[] input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the array to read data from - * @param off index of the first {@code short} in the subsequence to hash - * @param len length of the subsequence to hash, in shorts (i.e. the length of the bytes - * sequence to hash is {@code len * 2L}) + * @param input the array to read data from + * @param off index of the first {@code short} in the subsequence to hash + * @param len length of the subsequence to hash, in shorts (i.e. the length of the bytes + * sequence to hash is {@code len * 2L}) * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -879,13 +881,13 @@ public long[] hashInts(final int[] input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the array to read data from - * @param off index of the first {@code int} in the subsequence to hash - * @param len length of the subsequence to hash, in ints (i.e. the length of the bytes sequence - * to hash is {@code len * 4L}) + * @param input the array to read data from + * @param off index of the first {@code int} in the subsequence to hash + * @param len length of the subsequence to hash, in ints (i.e. the length of the bytes sequence + * to hash is {@code len * 4L}) * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} @@ -940,13 +942,13 @@ public long[] hashLongs(final long[] input) { * elements of the array will not be touched when * {@code result.length > newResultArray().length]}. * - * @param input the array to read data from - * @param off index of the first {@code long} in the subsequence to hash - * @param len length of the subsequence to hash, in longs (i.e. the length of the bytes sequence - * to hash is {@code len * 8L}) + * @param input the array to read data from + * @param off index of the first {@code long} in the subsequence to hash + * @param len length of the subsequence to hash, in longs (i.e. the length of the bytes sequence + * to hash is {@code len * 8L}) * @param result the container array for storing the hash results, * should be alloced by {@link #newResultArray} - * @throws NullPointerException if {@code result == null} + * @throws NullPointerException if {@code result == null} * @throws IllegalArgumentException if {@code result.length < newResultArray().length} * @throws IllegalArgumentException if {@code off < 0} or {@code off + len > input.length} * or {@code len < 0} diff --git a/src/main/java/net/openhft/hashing/Maths.java b/src/main/java/net/openhft/hashing/Maths.java index 673494f..a588bfa 100644 --- a/src/main/java/net/openhft/hashing/Maths.java +++ b/src/main/java/net/openhft/hashing/Maths.java @@ -25,6 +25,7 @@ class Maths { public static long unsignedLongMulXorFold(final long lhs, final long rhs) { return INSTANCE.unsignedLongMulXorFoldImp(lhs, rhs); } + public static long unsignedLongMulHigh(final long lhs, final long rhs) { return INSTANCE.unsignedLongMulHighImp(lhs, rhs); } @@ -82,6 +83,7 @@ long unsignedLongMulXorFoldImp(final long lhs, final long rhs) { final long lower = lhs * rhs; return lower ^ upper; } + @Override long unsignedLongMulHighImp(final long lhs, final long rhs) { return invokeExact(lhs, rhs) + ((lhs >> 63) & rhs) + ((rhs >> 63) & lhs); diff --git a/src/main/java/net/openhft/hashing/ModernCompactStringHash.java b/src/main/java/net/openhft/hashing/ModernCompactStringHash.java index 8b656e7..de613b7 100644 --- a/src/main/java/net/openhft/hashing/ModernCompactStringHash.java +++ b/src/main/java/net/openhft/hashing/ModernCompactStringHash.java @@ -1,8 +1,9 @@ package net.openhft.hashing; -import java.lang.reflect.Field; import javax.annotation.ParametersAreNonnullByDefault; -import static net.openhft.hashing.Util.*; +import java.lang.reflect.Field; + +import static net.openhft.hashing.Util.checkArrayOffs; @ParametersAreNonnullByDefault enum ModernCompactStringHash implements StringHash { @@ -11,7 +12,7 @@ enum ModernCompactStringHash implements StringHash { private static final long valueOffset; private static final boolean enableCompactStrings; private static final Access compactLatin1Access - = CompactLatin1CharSequenceAccess.INSTANCE; + = CompactLatin1CharSequenceAccess.INSTANCE; static { try { @@ -27,7 +28,7 @@ enum ModernCompactStringHash implements StringHash { @Override public long longHash(final String s, final LongHashFunction hashFunction, - final int off, final int len) { + final int off, final int len) { final int sl = s.length(); if (len <= 0 || sl <= 0) { checkArrayOffs(sl, off, len); // check as chars @@ -37,16 +38,16 @@ public long longHash(final String s, final LongHashFunction hashFunction, if (enableCompactStrings && sl == value.length) { checkArrayOffs(sl, off, len); // check as chars // 'off' and 'len' are passed as bytes - return hashFunction.hash(value, compactLatin1Access, (long)off*2L, (long)len*2L); + return hashFunction.hash(value, compactLatin1Access, (long) off * 2L, (long) len * 2L); } else { - return hashFunction.hashBytes(value, off*2, len*2); // hash as bytes + return hashFunction.hashBytes(value, off * 2, len * 2); // hash as bytes } } } @Override public void hash(final String s, final LongTupleHashFunction hashFunction, - final int off, final int len, final long[] result) { + final int off, final int len, final long[] result) { final int sl = s.length(); if (len <= 0 || sl <= 0) { checkArrayOffs(sl, off, len); // check as chars @@ -56,9 +57,9 @@ public void hash(final String s, final LongTupleHashFunction hashFunction, if (enableCompactStrings && sl == value.length) { checkArrayOffs(sl, off, len); // check as chars // 'off' and 'len' are passed as bytes - hashFunction.hash(value, compactLatin1Access, (long)off*2L, (long)len*2L, result); + hashFunction.hash(value, compactLatin1Access, (long) off * 2L, (long) len * 2L, result); } else { - hashFunction.hashBytes(value, off*2, len*2, result); // hash as bytes + hashFunction.hashBytes(value, off * 2, len * 2, result); // hash as bytes } } } diff --git a/src/main/java/net/openhft/hashing/ModernHotSpotStringHash.java b/src/main/java/net/openhft/hashing/ModernHotSpotStringHash.java index bf89e9d..250431c 100644 --- a/src/main/java/net/openhft/hashing/ModernHotSpotStringHash.java +++ b/src/main/java/net/openhft/hashing/ModernHotSpotStringHash.java @@ -16,8 +16,8 @@ package net.openhft.hashing; -import java.lang.reflect.Field; import javax.annotation.ParametersAreNonnullByDefault; +import java.lang.reflect.Field; @ParametersAreNonnullByDefault enum ModernHotSpotStringHash implements StringHash { @@ -42,7 +42,7 @@ public long longHash(String s, LongHashFunction hashFunction, int off, int len) @Override public void hash(final String s, final LongTupleHashFunction hashFunction, - final int off, final int len, final long[] result) { + final int off, final int len, final long[] result) { final char[] value = (char[]) UnsafeAccess.UNSAFE.getObject(s, valueOffset); hashFunction.hashChars(value, off, len, result); } diff --git a/src/main/java/net/openhft/hashing/MurmurHash_3.java b/src/main/java/net/openhft/hashing/MurmurHash_3.java index 3e715a9..359923a 100644 --- a/src/main/java/net/openhft/hashing/MurmurHash_3.java +++ b/src/main/java/net/openhft/hashing/MurmurHash_3.java @@ -18,6 +18,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; + import javax.annotation.ParametersAreNonnullByDefault; import static java.nio.ByteOrder.LITTLE_ENDIAN; @@ -230,6 +231,7 @@ private Object readResolve() { public int bitsLength() { return 128; } + @Override @NotNull public long[] newResultArray() { @@ -291,6 +293,7 @@ public long dualHash(@Nullable T input, Access access, long off, long len static LongTupleHashFunction asLongTupleHashFunctionWithoutSeed() { return AsLongTupleHashFunction.SEEDLESS_INSTANCE; } + @NotNull static LongHashFunction asLongHashFunctionWithoutSeed() { return AsLongTupleHashFunction.SEEDLESS_INSTANCE_LONG; @@ -335,6 +338,7 @@ public long dualHashVoid(@Nullable long[] result) { static LongTupleHashFunction asLongTupleHashFunctionWithSeed(long seed) { return new AsLongTupleHashFunctionSeeded(seed); } + @NotNull static LongHashFunction asLongHashFunctionWithSeed(long seed) { return new AsLongTupleHashFunctionSeeded(seed).asLongHashFunction(); diff --git a/src/main/java/net/openhft/hashing/Primitives.java b/src/main/java/net/openhft/hashing/Primitives.java index 46f3386..6d0146c 100644 --- a/src/main/java/net/openhft/hashing/Primitives.java +++ b/src/main/java/net/openhft/hashing/Primitives.java @@ -21,7 +21,8 @@ final class Primitives { - private Primitives() {} + private Primitives() { + } static final boolean NATIVE_LITTLE_ENDIAN = nativeOrder() == LITTLE_ENDIAN; @@ -40,26 +41,71 @@ static int unsignedByte(int b) { private static final ByteOrderHelper H2LE = NATIVE_LITTLE_ENDIAN ? new ByteOrderHelper() : new ByteOrderHelperReverse(); private static final ByteOrderHelper H2BE = NATIVE_LITTLE_ENDIAN ? new ByteOrderHelperReverse() : new ByteOrderHelper(); - static long nativeToLittleEndian(final long v) { return H2LE.adjustByteOrder(v); } - static int nativeToLittleEndian(final int v) { return H2LE.adjustByteOrder(v); } - static short nativeToLittleEndian(final short v) { return H2LE.adjustByteOrder(v); } - static char nativeToLittleEndian(final char v) { return H2LE.adjustByteOrder(v); } + static long nativeToLittleEndian(final long v) { + return H2LE.adjustByteOrder(v); + } + + static int nativeToLittleEndian(final int v) { + return H2LE.adjustByteOrder(v); + } + + static short nativeToLittleEndian(final short v) { + return H2LE.adjustByteOrder(v); + } + + static char nativeToLittleEndian(final char v) { + return H2LE.adjustByteOrder(v); + } + + static long nativeToBigEndian(final long v) { + return H2BE.adjustByteOrder(v); + } + + static int nativeToBigEndian(final int v) { + return H2BE.adjustByteOrder(v); + } + + static short nativeToBigEndian(final short v) { + return H2BE.adjustByteOrder(v); + } - static long nativeToBigEndian(final long v) { return H2BE.adjustByteOrder(v); } - static int nativeToBigEndian(final int v) { return H2BE.adjustByteOrder(v); } - static short nativeToBigEndian(final short v) { return H2BE.adjustByteOrder(v); } - static char nativeToBigEndian(final char v) { return H2BE.adjustByteOrder(v); } + static char nativeToBigEndian(final char v) { + return H2BE.adjustByteOrder(v); + } private static class ByteOrderHelper { - long adjustByteOrder(final long v) { return v; } - int adjustByteOrder(final int v) { return v; } - short adjustByteOrder(final short v) { return v; } - char adjustByteOrder(final char v) { return v; } + long adjustByteOrder(final long v) { + return v; + } + + int adjustByteOrder(final int v) { + return v; + } + + short adjustByteOrder(final short v) { + return v; + } + + char adjustByteOrder(final char v) { + return v; + } } + private static class ByteOrderHelperReverse extends ByteOrderHelper { - long adjustByteOrder(final long v) { return Long.reverseBytes(v); } - int adjustByteOrder(final int v) { return Integer.reverseBytes(v); } - short adjustByteOrder(final short v) { return Short.reverseBytes(v); } - char adjustByteOrder(final char v) { return Character.reverseBytes(v); } + long adjustByteOrder(final long v) { + return Long.reverseBytes(v); + } + + int adjustByteOrder(final int v) { + return Integer.reverseBytes(v); + } + + short adjustByteOrder(final short v) { + return Short.reverseBytes(v); + } + + char adjustByteOrder(final char v) { + return Character.reverseBytes(v); + } } } diff --git a/src/main/java/net/openhft/hashing/StringHash.java b/src/main/java/net/openhft/hashing/StringHash.java index 600adda..12e8e54 100644 --- a/src/main/java/net/openhft/hashing/StringHash.java +++ b/src/main/java/net/openhft/hashing/StringHash.java @@ -21,5 +21,6 @@ @ParametersAreNonnullByDefault interface StringHash { long longHash(String s, LongHashFunction hashFunction, int off, int len); + void hash(String s, LongTupleHashFunction hashFunction, int off, int len, long[] result); } diff --git a/src/main/java/net/openhft/hashing/UnknownJvmStringHash.java b/src/main/java/net/openhft/hashing/UnknownJvmStringHash.java index 0970d2e..86b9762 100644 --- a/src/main/java/net/openhft/hashing/UnknownJvmStringHash.java +++ b/src/main/java/net/openhft/hashing/UnknownJvmStringHash.java @@ -29,7 +29,7 @@ public long longHash(String s, LongHashFunction hashFunction, int off, int len) @Override public void hash(final String s, final LongTupleHashFunction hashFunction, - final int off, final int len, final long[] result) { + final int off, final int len, final long[] result) { LongTupleHashFunction.hashNativeChars(hashFunction, s, off, len, result); } } diff --git a/src/main/java/net/openhft/hashing/UnsafeAccess.java b/src/main/java/net/openhft/hashing/UnsafeAccess.java index 4eecb86..b0a9566 100644 --- a/src/main/java/net/openhft/hashing/UnsafeAccess.java +++ b/src/main/java/net/openhft/hashing/UnsafeAccess.java @@ -16,9 +16,10 @@ package net.openhft.hashing; +import sun.misc.Unsafe; + import java.lang.reflect.Field; import java.nio.ByteOrder; -import sun.misc.Unsafe; import static net.openhft.hashing.Primitives.*; @@ -28,8 +29,8 @@ public class UnsafeAccess extends Access { // for test only static final UnsafeAccess OLD_INSTANCE = NATIVE_LITTLE_ENDIAN - ? new OldUnsafeAccessLittleEndian() - : new OldUnsafeAccessBigEndian(); + ? new OldUnsafeAccessLittleEndian() + : new OldUnsafeAccessBigEndian(); static final Unsafe UNSAFE; @@ -56,10 +57,10 @@ public class UnsafeAccess extends Access { INT_BASE = UNSAFE.arrayBaseOffset(int[].class); LONG_BASE = UNSAFE.arrayBaseOffset(long[].class); - TRUE_BYTE_VALUE = (byte)UNSAFE.getInt(new boolean[] {true, true, true, true}, - BOOLEAN_BASE); - FALSE_BYTE_VALUE = (byte)UNSAFE.getInt(new boolean[] {false, false, false, false}, - BOOLEAN_BASE); + TRUE_BYTE_VALUE = (byte) UNSAFE.getInt(new boolean[]{true, true, true, true}, + BOOLEAN_BASE); + FALSE_BYTE_VALUE = (byte) UNSAFE.getInt(new boolean[]{false, false, false, false}, + BOOLEAN_BASE); } catch (final Exception e) { throw new AssertionError(e); } @@ -76,7 +77,8 @@ public class UnsafeAccess extends Access { INSTANCE_NON_NATIVE = Access.newDefaultReverseAccess(INSTANCE); } - private UnsafeAccess() {} + private UnsafeAccess() { + } @Override public long getLong(Object input, long offset) { @@ -138,12 +140,12 @@ public int getByte(final Object input, final long offset) { private static class OldUnsafeAccessBigEndian extends UnsafeAccess { @Override public int getShort(final Object input, final long offset) { - return (int)(short)UNSAFE.getInt(input, offset - 2); + return (int) (short) UNSAFE.getInt(input, offset - 2); } @Override public int getByte(final Object input, final long offset) { - return (int)(byte)UNSAFE.getInt(input, offset - 3); + return (int) (byte) UNSAFE.getInt(input, offset - 3); } } } diff --git a/src/main/java/net/openhft/hashing/Util.java b/src/main/java/net/openhft/hashing/Util.java index bfa204b..7dc5ea9 100644 --- a/src/main/java/net/openhft/hashing/Util.java +++ b/src/main/java/net/openhft/hashing/Util.java @@ -1,9 +1,9 @@ package net.openhft.hashing; -import java.nio.ByteBuffer; +import org.jetbrains.annotations.NotNull; import sun.nio.ch.DirectBuffer; -import org.jetbrains.annotations.NotNull; +import java.nio.ByteBuffer; final class Util { @@ -20,6 +20,7 @@ final class Util { static private boolean isHotSpotVM(@NotNull final String name) { return name.contains("HotSpot") || name.contains("OpenJDK"); } + static private boolean isJ9VM(@NotNull final String name) { return name.contains("Eclipse OpenJ9") || name.contains("IBM J9"); } @@ -30,7 +31,8 @@ static private boolean isZing(@NotNull final String name) { @NotNull static final StringHash VALID_STRING_HASH; - static { + + static { StringHash stringHash = null; try { final String vmName = System.getProperty("java.vm.name"); @@ -69,6 +71,6 @@ static void checkArrayOffs(final int arrayLength, final int off, final int len) } static long getDirectBufferAddress(@NotNull final ByteBuffer buff) { - return ((DirectBuffer)buff).address(); + return ((DirectBuffer) buff).address(); } } diff --git a/src/main/java/net/openhft/hashing/WyHash.java b/src/main/java/net/openhft/hashing/WyHash.java index 3b35f6c..c99850b 100644 --- a/src/main/java/net/openhft/hashing/WyHash.java +++ b/src/main/java/net/openhft/hashing/WyHash.java @@ -24,8 +24,8 @@ private static long _wymum(final long lhs, final long rhs) { private static long _wyr3(final Access access, T in, final long index, long k) { return ((long) access.u8(in, index) << 16) | - ((long) access.u8(in, index + (k >>> 1)) << 8) | - ((long) access.u8(in, index + k - 1)); + ((long) access.u8(in, index + (k >>> 1)) << 8) | + ((long) access.u8(in, index + k - 1)); } private static long u64Rorate32(final Access access, T in, final long index) { @@ -34,96 +34,97 @@ private static long u64Rorate32(final Access access, T in, final long ind /** * - * @param seed seed for the hash - * @param input the type wrapped by the Access, ex. byte[], ByteBuffer, etc. + * @param seed seed for the hash + * @param input the type wrapped by the Access, ex. byte[], ByteBuffer, etc. * @param access class wrapping optimized access pattern to the input - * @param off offset to the input + * @param off offset to the input * @param length length to read from input - * @param byte[], ByteBuffer, etc. + * @param byte[], ByteBuffer, etc. * @return hash result */ static long wyHash64(long seed, T input, Access access, long off, long length) { - if(length <= 0) + if (length <= 0) return 0; - else if(length<4) - return _wymum(_wymum(_wyr3(access, input,off,length)^seed^_wyp0, - seed^_wyp1)^seed,length^_wyp4); - else if(length<=8) + else if (length < 4) + return _wymum(_wymum(_wyr3(access, input, off, length) ^ seed ^ _wyp0, + seed ^ _wyp1) ^ seed, length ^ _wyp4); + else if (length <= 8) return _wymum(_wymum(access.u32(input, off) ^ seed ^ _wyp0, - access.u32(input, off + length - 4) ^ seed ^ _wyp1) - ^ seed, length ^ _wyp4); - else if(length<=16) - return _wymum(_wymum(u64Rorate32(access, input,off)^seed^_wyp0, - u64Rorate32(access, input,off+length-8)^seed^_wyp1) - ^seed,length^_wyp4); - else if(length<=24) - return _wymum(_wymum(u64Rorate32(access, input,off)^seed^_wyp0, - u64Rorate32(access, input,off+8)^seed^_wyp1)^ - _wymum(u64Rorate32(access, input,off+length-8) - ^seed^_wyp2,seed^_wyp3),length^_wyp4); - else if(length<=32) - return _wymum(_wymum(u64Rorate32(access, input,off)^seed^_wyp0, - u64Rorate32(access, input,off+8)^seed^_wyp1) - ^_wymum(u64Rorate32(access, input,off+16)^seed^_wyp2, - u64Rorate32(access, input,off+length-8)^seed^_wyp3),length^_wyp4); - long see1=seed; long i=length, p=off; - for(;i>256;i-=256,p+=256){ + access.u32(input, off + length - 4) ^ seed ^ _wyp1) + ^ seed, length ^ _wyp4); + else if (length <= 16) + return _wymum(_wymum(u64Rorate32(access, input, off) ^ seed ^ _wyp0, + u64Rorate32(access, input, off + length - 8) ^ seed ^ _wyp1) + ^ seed, length ^ _wyp4); + else if (length <= 24) + return _wymum(_wymum(u64Rorate32(access, input, off) ^ seed ^ _wyp0, + u64Rorate32(access, input, off + 8) ^ seed ^ _wyp1) ^ + _wymum(u64Rorate32(access, input, off + length - 8) + ^ seed ^ _wyp2, seed ^ _wyp3), length ^ _wyp4); + else if (length <= 32) + return _wymum(_wymum(u64Rorate32(access, input, off) ^ seed ^ _wyp0, + u64Rorate32(access, input, off + 8) ^ seed ^ _wyp1) + ^ _wymum(u64Rorate32(access, input, off + 16) ^ seed ^ _wyp2, + u64Rorate32(access, input, off + length - 8) ^ seed ^ _wyp3), length ^ _wyp4); + long see1 = seed; + long i = length, p = off; + for (; i > 256; i -= 256, p += 256) { seed = _wymum(access.i64(input, p) ^ seed ^ _wyp0, - access.i64(input, p + 8) ^ seed ^ _wyp1) ^ - _wymum(access.i64(input, p + 16) ^ seed ^ _wyp2, - access.i64(input, p + 24) ^ seed ^ _wyp3); + access.i64(input, p + 8) ^ seed ^ _wyp1) ^ + _wymum(access.i64(input, p + 16) ^ seed ^ _wyp2, + access.i64(input, p + 24) ^ seed ^ _wyp3); see1 = _wymum(access.i64(input, p + 32) ^ see1 ^ _wyp1, - access.i64(input, p + 40) ^ see1 ^ _wyp2) ^ - _wymum(access.i64(input, p + 48) ^ see1 ^ _wyp3, - access.i64(input, p + 56) ^ see1 ^ _wyp0); + access.i64(input, p + 40) ^ see1 ^ _wyp2) ^ + _wymum(access.i64(input, p + 48) ^ see1 ^ _wyp3, + access.i64(input, p + 56) ^ see1 ^ _wyp0); seed = _wymum(access.i64(input, p + 64) ^ seed ^ _wyp0, - access.i64(input, p + 72) ^ seed ^ _wyp1) ^ - _wymum(access.i64(input, p + 80) ^ seed ^ _wyp2, - access.i64(input, p + 88) ^ seed ^ _wyp3); + access.i64(input, p + 72) ^ seed ^ _wyp1) ^ + _wymum(access.i64(input, p + 80) ^ seed ^ _wyp2, + access.i64(input, p + 88) ^ seed ^ _wyp3); see1 = _wymum(access.i64(input, p + 96) ^ see1 ^ _wyp1, - access.i64(input, p + 104) ^ see1 ^ _wyp2) ^ - _wymum(access.i64(input, p + 112) ^ see1 ^ _wyp3, - access.i64(input, p + 120) ^ see1 ^ _wyp0); + access.i64(input, p + 104) ^ see1 ^ _wyp2) ^ + _wymum(access.i64(input, p + 112) ^ see1 ^ _wyp3, + access.i64(input, p + 120) ^ see1 ^ _wyp0); seed = _wymum(access.i64(input, p + 128) ^ seed ^ _wyp0, - access.i64(input, p + 136) ^ seed ^ _wyp1) ^ - _wymum(access.i64(input, p + 144) ^ seed ^ _wyp2, - access.i64(input, p + 152) ^ seed ^ _wyp3); + access.i64(input, p + 136) ^ seed ^ _wyp1) ^ + _wymum(access.i64(input, p + 144) ^ seed ^ _wyp2, + access.i64(input, p + 152) ^ seed ^ _wyp3); see1 = _wymum(access.i64(input, p + 160) ^ see1 ^ _wyp1, - access.i64(input, p + 168) ^ see1 ^ _wyp2) ^ - _wymum(access.i64(input, p + 176) ^ see1 ^ _wyp3, - access.i64(input, p + 184) ^ see1 ^ _wyp0); + access.i64(input, p + 168) ^ see1 ^ _wyp2) ^ + _wymum(access.i64(input, p + 176) ^ see1 ^ _wyp3, + access.i64(input, p + 184) ^ see1 ^ _wyp0); seed = _wymum(access.i64(input, p + 192) ^ seed ^ _wyp0, - access.i64(input, p + 200) ^ seed ^ _wyp1) ^ - _wymum(access.i64(input, p + 208) ^ seed ^ _wyp2, - access.i64(input, p + 216) ^ seed ^ _wyp3); + access.i64(input, p + 200) ^ seed ^ _wyp1) ^ + _wymum(access.i64(input, p + 208) ^ seed ^ _wyp2, + access.i64(input, p + 216) ^ seed ^ _wyp3); see1 = _wymum(access.i64(input, p + 224) ^ see1 ^ _wyp1, - access.i64(input, p + 232) ^ see1 ^ _wyp2) ^ - _wymum(access.i64(input, p + 240) ^ see1 ^ _wyp3, - access.i64(input, p + 248) ^ see1 ^ _wyp0); + access.i64(input, p + 232) ^ see1 ^ _wyp2) ^ + _wymum(access.i64(input, p + 240) ^ see1 ^ _wyp3, + access.i64(input, p + 248) ^ see1 ^ _wyp0); } for (; i > 32; i -= 32, p += 32) { seed = _wymum(access.i64(input, p) ^ seed ^ _wyp0, - access.i64(input, p + 8) ^ seed ^ _wyp1); + access.i64(input, p + 8) ^ seed ^ _wyp1); see1 = _wymum(access.i64(input, p + 16) ^ see1 ^ _wyp2, - access.i64(input, p + 24) ^ see1 ^ _wyp3); + access.i64(input, p + 24) ^ see1 ^ _wyp3); } if (i < 4) { seed = _wymum(_wyr3(access, input, p, i) ^ seed ^ _wyp0, seed ^ _wyp1); } else if (i <= 8) { seed = _wymum(access.u32(input, p) ^ seed ^ _wyp0, - access.u32(input, p + i - 4) ^ seed ^ _wyp1); + access.u32(input, p + i - 4) ^ seed ^ _wyp1); } else if (i <= 16) { seed = _wymum(u64Rorate32(access, input, p) ^ seed ^ _wyp0, - u64Rorate32(access, input, p + i - 8) ^ seed ^ _wyp1); + u64Rorate32(access, input, p + i - 8) ^ seed ^ _wyp1); } else if (i <= 24) { seed = _wymum(u64Rorate32(access, input, p) ^ seed ^ _wyp0, - u64Rorate32(access, input, p + 8) ^ seed ^ _wyp1); + u64Rorate32(access, input, p + 8) ^ seed ^ _wyp1); see1 = _wymum(u64Rorate32(access, input, p + i - 8) ^ see1 ^ _wyp2, see1 ^ _wyp3); } else { seed = _wymum(u64Rorate32(access, input, p) ^ seed ^ _wyp0, - u64Rorate32(access, input, p + 8) ^ seed ^ _wyp1); + u64Rorate32(access, input, p + 8) ^ seed ^ _wyp1); see1 = _wymum(u64Rorate32(access, input, p + 16) ^ see1 ^ _wyp2, - u64Rorate32(access, input, p + i - 8) ^ see1 ^ _wyp3); + u64Rorate32(access, input, p + i - 8) ^ see1 ^ _wyp3); } return _wymum(seed ^ see1, length ^ _wyp4); } @@ -150,8 +151,8 @@ public long hashLong(long input) { long hi = input & 0xFFFFFFFFL; long lo = (input >>> 32) & 0xFFFFFFFFL; return _wymum(_wymum(hi ^ seed() ^ _wyp0, - lo ^ seed() ^ _wyp1) - ^ seed(), 8 ^ _wyp4); + lo ^ seed() ^ _wyp1) + ^ seed(), 8 ^ _wyp4); } @Override @@ -159,8 +160,8 @@ public long hashInt(int input) { input = Primitives.nativeToLittleEndian(input); long longInput = input & 0xFFFFFFFFL; return _wymum(_wymum(longInput ^ seed() ^ _wyp0, - longInput ^ seed() ^ _wyp1) - ^ seed(), 4 ^ _wyp4); + longInput ^ seed() ^ _wyp1) + ^ seed(), 4 ^ _wyp4); } @Override @@ -169,12 +170,12 @@ public long hashShort(short input) { long hi = (input >>> 8) & 0xFFL; long wyr3 = hi | hi << 8 | (input & 0xFFL) << 16; return _wymum(_wymum(wyr3 ^ seed() ^ _wyp0, - seed() ^ _wyp1) ^ seed(), 2 ^ _wyp4); + seed() ^ _wyp1) ^ seed(), 2 ^ _wyp4); } @Override public long hashChar(final char input) { - return hashShort((short)input); + return hashShort((short) input); } @Override @@ -182,7 +183,7 @@ public long hashByte(final byte input) { long hi = input & 0xFFL; long wyr3 = hi | hi << 8 | hi << 16; return _wymum(_wymum(wyr3 ^ seed() ^ _wyp0, - seed() ^ _wyp1) ^ seed(), 1 ^ _wyp4); + seed() ^ _wyp1) ^ seed(), 1 ^ _wyp4); } @Override diff --git a/src/main/java/net/openhft/hashing/XXH3.java b/src/main/java/net/openhft/hashing/XXH3.java index 35dc256..d1dab87 100644 --- a/src/main/java/net/openhft/hashing/XXH3.java +++ b/src/main/java/net/openhft/hashing/XXH3.java @@ -20,7 +20,7 @@ import static java.nio.ByteOrder.LITTLE_ENDIAN; import static net.openhft.hashing.Maths.unsignedLongMulXorFold; -import static net.openhft.hashing.UnsafeAccess.*; +import static net.openhft.hashing.UnsafeAccess.BYTE_BASE; /** * Adapted version of XXH3 implementation from https://github.com/Cyan4973/xxHash. @@ -31,18 +31,18 @@ class XXH3 { /*! Pseudorandom secret taken directly from FARSH. */ private static final byte[] XXH3_kSecret = { - (byte)0xb8, (byte)0xfe, (byte)0x6c, (byte)0x39, (byte)0x23, (byte)0xa4, (byte)0x4b, (byte)0xbe, (byte)0x7c, (byte)0x01, (byte)0x81, (byte)0x2c, (byte)0xf7, (byte)0x21, (byte)0xad, (byte)0x1c, - (byte)0xde, (byte)0xd4, (byte)0x6d, (byte)0xe9, (byte)0x83, (byte)0x90, (byte)0x97, (byte)0xdb, (byte)0x72, (byte)0x40, (byte)0xa4, (byte)0xa4, (byte)0xb7, (byte)0xb3, (byte)0x67, (byte)0x1f, - (byte)0xcb, (byte)0x79, (byte)0xe6, (byte)0x4e, (byte)0xcc, (byte)0xc0, (byte)0xe5, (byte)0x78, (byte)0x82, (byte)0x5a, (byte)0xd0, (byte)0x7d, (byte)0xcc, (byte)0xff, (byte)0x72, (byte)0x21, - (byte)0xb8, (byte)0x08, (byte)0x46, (byte)0x74, (byte)0xf7, (byte)0x43, (byte)0x24, (byte)0x8e, (byte)0xe0, (byte)0x35, (byte)0x90, (byte)0xe6, (byte)0x81, (byte)0x3a, (byte)0x26, (byte)0x4c, - (byte)0x3c, (byte)0x28, (byte)0x52, (byte)0xbb, (byte)0x91, (byte)0xc3, (byte)0x00, (byte)0xcb, (byte)0x88, (byte)0xd0, (byte)0x65, (byte)0x8b, (byte)0x1b, (byte)0x53, (byte)0x2e, (byte)0xa3, - (byte)0x71, (byte)0x64, (byte)0x48, (byte)0x97, (byte)0xa2, (byte)0x0d, (byte)0xf9, (byte)0x4e, (byte)0x38, (byte)0x19, (byte)0xef, (byte)0x46, (byte)0xa9, (byte)0xde, (byte)0xac, (byte)0xd8, - (byte)0xa8, (byte)0xfa, (byte)0x76, (byte)0x3f, (byte)0xe3, (byte)0x9c, (byte)0x34, (byte)0x3f, (byte)0xf9, (byte)0xdc, (byte)0xbb, (byte)0xc7, (byte)0xc7, (byte)0x0b, (byte)0x4f, (byte)0x1d, - (byte)0x8a, (byte)0x51, (byte)0xe0, (byte)0x4b, (byte)0xcd, (byte)0xb4, (byte)0x59, (byte)0x31, (byte)0xc8, (byte)0x9f, (byte)0x7e, (byte)0xc9, (byte)0xd9, (byte)0x78, (byte)0x73, (byte)0x64, - (byte)0xea, (byte)0xc5, (byte)0xac, (byte)0x83, (byte)0x34, (byte)0xd3, (byte)0xeb, (byte)0xc3, (byte)0xc5, (byte)0x81, (byte)0xa0, (byte)0xff, (byte)0xfa, (byte)0x13, (byte)0x63, (byte)0xeb, - (byte)0x17, (byte)0x0d, (byte)0xdd, (byte)0x51, (byte)0xb7, (byte)0xf0, (byte)0xda, (byte)0x49, (byte)0xd3, (byte)0x16, (byte)0x55, (byte)0x26, (byte)0x29, (byte)0xd4, (byte)0x68, (byte)0x9e, - (byte)0x2b, (byte)0x16, (byte)0xbe, (byte)0x58, (byte)0x7d, (byte)0x47, (byte)0xa1, (byte)0xfc, (byte)0x8f, (byte)0xf8, (byte)0xb8, (byte)0xd1, (byte)0x7a, (byte)0xd0, (byte)0x31, (byte)0xce, - (byte)0x45, (byte)0xcb, (byte)0x3a, (byte)0x8f, (byte)0x95, (byte)0x16, (byte)0x04, (byte)0x28, (byte)0xaf, (byte)0xd7, (byte)0xfb, (byte)0xca, (byte)0xbb, (byte)0x4b, (byte)0x40, (byte)0x7e, + (byte) 0xb8, (byte) 0xfe, (byte) 0x6c, (byte) 0x39, (byte) 0x23, (byte) 0xa4, (byte) 0x4b, (byte) 0xbe, (byte) 0x7c, (byte) 0x01, (byte) 0x81, (byte) 0x2c, (byte) 0xf7, (byte) 0x21, (byte) 0xad, (byte) 0x1c, + (byte) 0xde, (byte) 0xd4, (byte) 0x6d, (byte) 0xe9, (byte) 0x83, (byte) 0x90, (byte) 0x97, (byte) 0xdb, (byte) 0x72, (byte) 0x40, (byte) 0xa4, (byte) 0xa4, (byte) 0xb7, (byte) 0xb3, (byte) 0x67, (byte) 0x1f, + (byte) 0xcb, (byte) 0x79, (byte) 0xe6, (byte) 0x4e, (byte) 0xcc, (byte) 0xc0, (byte) 0xe5, (byte) 0x78, (byte) 0x82, (byte) 0x5a, (byte) 0xd0, (byte) 0x7d, (byte) 0xcc, (byte) 0xff, (byte) 0x72, (byte) 0x21, + (byte) 0xb8, (byte) 0x08, (byte) 0x46, (byte) 0x74, (byte) 0xf7, (byte) 0x43, (byte) 0x24, (byte) 0x8e, (byte) 0xe0, (byte) 0x35, (byte) 0x90, (byte) 0xe6, (byte) 0x81, (byte) 0x3a, (byte) 0x26, (byte) 0x4c, + (byte) 0x3c, (byte) 0x28, (byte) 0x52, (byte) 0xbb, (byte) 0x91, (byte) 0xc3, (byte) 0x00, (byte) 0xcb, (byte) 0x88, (byte) 0xd0, (byte) 0x65, (byte) 0x8b, (byte) 0x1b, (byte) 0x53, (byte) 0x2e, (byte) 0xa3, + (byte) 0x71, (byte) 0x64, (byte) 0x48, (byte) 0x97, (byte) 0xa2, (byte) 0x0d, (byte) 0xf9, (byte) 0x4e, (byte) 0x38, (byte) 0x19, (byte) 0xef, (byte) 0x46, (byte) 0xa9, (byte) 0xde, (byte) 0xac, (byte) 0xd8, + (byte) 0xa8, (byte) 0xfa, (byte) 0x76, (byte) 0x3f, (byte) 0xe3, (byte) 0x9c, (byte) 0x34, (byte) 0x3f, (byte) 0xf9, (byte) 0xdc, (byte) 0xbb, (byte) 0xc7, (byte) 0xc7, (byte) 0x0b, (byte) 0x4f, (byte) 0x1d, + (byte) 0x8a, (byte) 0x51, (byte) 0xe0, (byte) 0x4b, (byte) 0xcd, (byte) 0xb4, (byte) 0x59, (byte) 0x31, (byte) 0xc8, (byte) 0x9f, (byte) 0x7e, (byte) 0xc9, (byte) 0xd9, (byte) 0x78, (byte) 0x73, (byte) 0x64, + (byte) 0xea, (byte) 0xc5, (byte) 0xac, (byte) 0x83, (byte) 0x34, (byte) 0xd3, (byte) 0xeb, (byte) 0xc3, (byte) 0xc5, (byte) 0x81, (byte) 0xa0, (byte) 0xff, (byte) 0xfa, (byte) 0x13, (byte) 0x63, (byte) 0xeb, + (byte) 0x17, (byte) 0x0d, (byte) 0xdd, (byte) 0x51, (byte) 0xb7, (byte) 0xf0, (byte) 0xda, (byte) 0x49, (byte) 0xd3, (byte) 0x16, (byte) 0x55, (byte) 0x26, (byte) 0x29, (byte) 0xd4, (byte) 0x68, (byte) 0x9e, + (byte) 0x2b, (byte) 0x16, (byte) 0xbe, (byte) 0x58, (byte) 0x7d, (byte) 0x47, (byte) 0xa1, (byte) 0xfc, (byte) 0x8f, (byte) 0xf8, (byte) 0xb8, (byte) 0xd1, (byte) 0x7a, (byte) 0xd0, (byte) 0x31, (byte) 0xce, + (byte) 0x45, (byte) 0xcb, (byte) 0x3a, (byte) 0x8f, (byte) 0x95, (byte) 0x16, (byte) 0x04, (byte) 0x28, (byte) 0xaf, (byte) 0xd7, (byte) 0xfb, (byte) 0xca, (byte) 0xbb, (byte) 0x4b, (byte) 0x40, (byte) 0x7e, }; // Primes @@ -67,11 +67,13 @@ private static long XXH64_avalanche(long h64) { h64 *= XXH_PRIME64_3; return h64 ^ (h64 >>> 32); } + private static long XXH3_avalanche(long h64) { h64 ^= h64 >>> 37; h64 *= 0x165667919E3779F9L; return h64 ^ (h64 >>> 32); } + private static long XXH3_rrmxmx(long h64, final long length) { h64 ^= Long.rotateLeft(h64, 49) ^ Long.rotateLeft(h64, 24); h64 *= 0x9FB21C651E98DF25L; @@ -84,8 +86,8 @@ private static long XXH3_mix16B(final long seed, final T input, final Access final long input_lo = access.i64(input, offIn); final long input_hi = access.i64(input, offIn + 8); return unsignedLongMulXorFold( - input_lo ^ (unsafeLE.i64(XXH3_kSecret, offSec) + seed), - input_hi ^ (unsafeLE.i64(XXH3_kSecret, offSec+8) - seed) + input_lo ^ (unsafeLE.i64(XXH3_kSecret, offSec) + seed), + input_hi ^ (unsafeLE.i64(XXH3_kSecret, offSec + 8) - seed) ); } @@ -94,15 +96,15 @@ private static long XXH3_mix16B(final long seed, final T input, final Access */ private static long XXH128_mix32B_once(final long seed, final long offSec, long acc, final long input0, final long input1, final long input2, final long input3) { acc += unsignedLongMulXorFold( - input0 ^ (unsafeLE.i64(XXH3_kSecret, offSec ) + seed), - input1 ^ (unsafeLE.i64(XXH3_kSecret, offSec + 8) - seed)); + input0 ^ (unsafeLE.i64(XXH3_kSecret, offSec) + seed), + input1 ^ (unsafeLE.i64(XXH3_kSecret, offSec + 8) - seed)); return acc ^ (input2 + input3); } private static long XXH3_mix2Accs(final long acc_lh, final long acc_rh, final byte[] secret, final long offSec) { return unsignedLongMulXorFold( - acc_lh ^ unsafeLE.i64(secret, offSec), - acc_rh ^ unsafeLE.i64(secret, offSec+8) ); + acc_lh ^ unsafeLE.i64(secret, offSec), + acc_rh ^ unsafeLE.i64(secret, offSec + 8)); } private static long XXH3_64bits_internal(final long seed, final byte[] secret, final T input, final Access access, final long off, final long length) { @@ -110,8 +112,8 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre // XXH3_len_0to16_64b if (length > 8) { // XXH3_len_9to16_64b - final long bitflip1 = (unsafeLE.i64(XXH3_kSecret, 24+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 32+BYTE_BASE)) + seed; - final long bitflip2 = (unsafeLE.i64(XXH3_kSecret, 40+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 48+BYTE_BASE)) - seed; + final long bitflip1 = (unsafeLE.i64(XXH3_kSecret, 24 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 32 + BYTE_BASE)) + seed; + final long bitflip2 = (unsafeLE.i64(XXH3_kSecret, 40 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 48 + BYTE_BASE)) - seed; final long input_lo = access.i64(input, off) ^ bitflip1; final long input_hi = access.i64(input, off + length - 8) ^ bitflip2; final long acc = length + Long.reverseBytes(input_lo) + input_hi + unsignedLongMulXorFold(input_lo, input_hi); @@ -120,9 +122,9 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre if (length >= 4) { // XXH3_len_4to8_64b long s = seed ^ Long.reverseBytes(seed & 0xFFFFFFFFL); - final long input1 = (long)access.i32(input, off); // high int will be shifted + final long input1 = (long) access.i32(input, off); // high int will be shifted final long input2 = access.u32(input, off + length - 4); - final long bitflip = (unsafeLE.i64(XXH3_kSecret, 8+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 16+BYTE_BASE)) - s; + final long bitflip = (unsafeLE.i64(XXH3_kSecret, 8 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 16 + BYTE_BASE)) - s; final long keyed = (input2 + (input1 << 32)) ^ bitflip; return XXH3_rrmxmx(keyed, length); } @@ -131,11 +133,11 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre final int c1 = access.u8(input, off + 0); final int c2 = access.i8(input, off + (length >> 1)); // high 3 bytes will be shifted final int c3 = access.u8(input, off + length - 1); - final long combined = Primitives.unsignedInt((c1 << 16) | (c2 << 24) | c3 | ((int)length << 8)); - final long bitflip = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, 4+BYTE_BASE)) + seed; + final long combined = Primitives.unsignedInt((c1 << 16) | (c2 << 24) | c3 | ((int) length << 8)); + final long bitflip = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, 4 + BYTE_BASE)) + seed; return XXH64_avalanche(combined ^ bitflip); } - return XXH64_avalanche(seed ^ unsafeLE.i64(XXH3_kSecret, 56+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 64+BYTE_BASE)); + return XXH64_avalanche(seed ^ unsafeLE.i64(XXH3_kSecret, 56 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 64 + BYTE_BASE)); } if (length <= 128) { // XXH3_len_17to128_64b @@ -161,15 +163,15 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre if (length <= 240) { // XXH3_len_129to240_64b long acc = length * XXH_PRIME64_1; - final int nbRounds = (int)length / 16; + final int nbRounds = (int) length / 16; int i = 0; for (; i < 8; ++i) { - acc += XXH3_mix16B(seed, input, access, off + 16*i, BYTE_BASE + 16*i); + acc += XXH3_mix16B(seed, input, access, off + 16 * i, BYTE_BASE + 16 * i); } acc = XXH3_avalanche(acc); for (; i < nbRounds; ++i) { - acc += XXH3_mix16B(seed, input, access, off + 16*i, BYTE_BASE + 16*(i-8) + 3); + acc += XXH3_mix16B(seed, input, access, off + 16 * i, BYTE_BASE + 16 * (i - 8) + 3); } /* last bytes */ @@ -192,42 +194,42 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre for (long n = 0; n < nb_blocks; n++) { // XXH3_accumulate final long offBlock = off + n * block_len; - for (long s = 0; s < nbStripesPerBlock; s++ ) { + for (long s = 0; s < nbStripesPerBlock; s++) { // XXH3_accumulate_512 final long offStripe = offBlock + s * 64; final long offSec = s * 8; { - final long data_val_0 = access.i64(input, offStripe + 8*0); - final long data_val_1 = access.i64(input, offStripe + 8*1); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*0); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*1); + final long data_val_0 = access.i64(input, offStripe + 8 * 0); + final long data_val_1 = access.i64(input, offStripe + 8 * 1); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 0); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 1); /* swap adjacent lanes */ acc_0 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_1 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*2); - final long data_val_1 = access.i64(input, offStripe + 8*3); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*2); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*3); + final long data_val_0 = access.i64(input, offStripe + 8 * 2); + final long data_val_1 = access.i64(input, offStripe + 8 * 3); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 2); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 3); /* swap adjacent lanes */ acc_2 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_3 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*4); - final long data_val_1 = access.i64(input, offStripe + 8*5); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*4); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*5); + final long data_val_0 = access.i64(input, offStripe + 8 * 4); + final long data_val_1 = access.i64(input, offStripe + 8 * 5); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 4); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 5); /* swap adjacent lanes */ acc_4 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_5 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*6); - final long data_val_1 = access.i64(input, offStripe + 8*7); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*6); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*7); + final long data_val_0 = access.i64(input, offStripe + 8 * 6); + final long data_val_1 = access.i64(input, offStripe + 8 * 7); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 6); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 7); /* swap adjacent lanes */ acc_6 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_7 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); @@ -236,14 +238,14 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre // XXH3_scrambleAcc_scalar final long offSec = BYTE_BASE + 192 - 64; - acc_0 = (acc_0 ^ (acc_0 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*0)) * XXH_PRIME32_1; - acc_1 = (acc_1 ^ (acc_1 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*1)) * XXH_PRIME32_1; - acc_2 = (acc_2 ^ (acc_2 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*2)) * XXH_PRIME32_1; - acc_3 = (acc_3 ^ (acc_3 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*3)) * XXH_PRIME32_1; - acc_4 = (acc_4 ^ (acc_4 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*4)) * XXH_PRIME32_1; - acc_5 = (acc_5 ^ (acc_5 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*5)) * XXH_PRIME32_1; - acc_6 = (acc_6 ^ (acc_6 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*6)) * XXH_PRIME32_1; - acc_7 = (acc_7 ^ (acc_7 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*7)) * XXH_PRIME32_1; + acc_0 = (acc_0 ^ (acc_0 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 0)) * XXH_PRIME32_1; + acc_1 = (acc_1 ^ (acc_1 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 1)) * XXH_PRIME32_1; + acc_2 = (acc_2 ^ (acc_2 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 2)) * XXH_PRIME32_1; + acc_3 = (acc_3 ^ (acc_3 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 3)) * XXH_PRIME32_1; + acc_4 = (acc_4 ^ (acc_4 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 4)) * XXH_PRIME32_1; + acc_5 = (acc_5 ^ (acc_5 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 5)) * XXH_PRIME32_1; + acc_6 = (acc_6 ^ (acc_6 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 6)) * XXH_PRIME32_1; + acc_7 = (acc_7 ^ (acc_7 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 7)) * XXH_PRIME32_1; } /* last partial block */ @@ -254,37 +256,37 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre final long offStripe = offBlock + s * 64; final long offSec = s * 8; { - final long data_val_0 = access.i64(input, offStripe + 8*0); - final long data_val_1 = access.i64(input, offStripe + 8*1); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*0); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*1); + final long data_val_0 = access.i64(input, offStripe + 8 * 0); + final long data_val_1 = access.i64(input, offStripe + 8 * 1); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 0); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 1); /* swap adjacent lanes */ acc_0 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_1 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*2); - final long data_val_1 = access.i64(input, offStripe + 8*3); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*2); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*3); + final long data_val_0 = access.i64(input, offStripe + 8 * 2); + final long data_val_1 = access.i64(input, offStripe + 8 * 3); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 2); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 3); /* swap adjacent lanes */ acc_2 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_3 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*4); - final long data_val_1 = access.i64(input, offStripe + 8*5); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*4); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*5); + final long data_val_0 = access.i64(input, offStripe + 8 * 4); + final long data_val_1 = access.i64(input, offStripe + 8 * 5); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 4); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 5); /* swap adjacent lanes */ acc_4 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_5 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*6); - final long data_val_1 = access.i64(input, offStripe + 8*7); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*6); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*7); + final long data_val_0 = access.i64(input, offStripe + 8 * 6); + final long data_val_1 = access.i64(input, offStripe + 8 * 7); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 6); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 7); /* swap adjacent lanes */ acc_6 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_7 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); @@ -296,37 +298,37 @@ private static long XXH3_64bits_internal(final long seed, final byte[] secre final long offStripe = off + length - 64; final long offSec = 192 - 64 - 7; { - final long data_val_0 = access.i64(input, offStripe + 8*0); - final long data_val_1 = access.i64(input, offStripe + 8*1); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*0); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*1); + final long data_val_0 = access.i64(input, offStripe + 8 * 0); + final long data_val_1 = access.i64(input, offStripe + 8 * 1); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 0); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 1); /* swap adjacent lanes */ acc_0 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_1 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*2); - final long data_val_1 = access.i64(input, offStripe + 8*3); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*2); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*3); + final long data_val_0 = access.i64(input, offStripe + 8 * 2); + final long data_val_1 = access.i64(input, offStripe + 8 * 3); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 2); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 3); /* swap adjacent lanes */ acc_2 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_3 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*4); - final long data_val_1 = access.i64(input, offStripe + 8*5); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*4); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*5); + final long data_val_0 = access.i64(input, offStripe + 8 * 4); + final long data_val_1 = access.i64(input, offStripe + 8 * 5); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 4); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 5); /* swap adjacent lanes */ acc_4 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_5 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*6); - final long data_val_1 = access.i64(input, offStripe + 8*7); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*6); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*7); + final long data_val_0 = access.i64(input, offStripe + 8 * 6); + final long data_val_1 = access.i64(input, offStripe + 8 * 7); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 6); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 7); /* swap adjacent lanes */ acc_6 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_7 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); @@ -347,15 +349,15 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr // XXH3_len_0to16_128b if (length > 8) { // XXH3_len_9to16_128b - final long bitflipl = (unsafeLE.i64(XXH3_kSecret, 32+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 40+BYTE_BASE)) - seed; - final long bitfliph = (unsafeLE.i64(XXH3_kSecret, 48+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 56+BYTE_BASE)) + seed; + final long bitflipl = (unsafeLE.i64(XXH3_kSecret, 32 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 40 + BYTE_BASE)) - seed; + final long bitfliph = (unsafeLE.i64(XXH3_kSecret, 48 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 56 + BYTE_BASE)) + seed; long input_hi = access.i64(input, off + length - 8); final long input_lo = access.i64(input, off) ^ input_hi ^ bitflipl; long m128_lo = input_lo * XXH_PRIME64_1; long m128_hi = Maths.unsignedLongMulHigh(input_lo, XXH_PRIME64_1); m128_lo += (length - 1) << 54; input_hi ^= bitfliph; - m128_hi += input_hi + Primitives.unsignedInt((int)input_hi) * (XXH_PRIME32_2 - 1); + m128_hi += input_hi + Primitives.unsignedInt((int) input_hi) * (XXH_PRIME32_2 - 1); m128_lo ^= Long.reverseBytes(m128_hi); final long low = XXH3_avalanche(m128_lo * XXH_PRIME64_2); @@ -369,9 +371,9 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr // XXH3_len_4to8_128b long s = seed ^ Long.reverseBytes(seed & 0xFFFFFFFFL); final long input_lo = access.u32(input, off); - final long input_hi = (long)access.i32(input, off + length - 4); // high int will be shifted + final long input_hi = (long) access.i32(input, off + length - 4); // high int will be shifted - final long bitflip = (unsafeLE.i64(XXH3_kSecret, 16+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 24+BYTE_BASE)) + s; + final long bitflip = (unsafeLE.i64(XXH3_kSecret, 16 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 24 + BYTE_BASE)) + s; final long keyed = (input_lo + (input_hi << 32)) ^ bitflip; final long pl = XXH_PRIME64_1 + (length << 2); /* Shift len to the left to ensure it is even, this avoids even multiplies. */ long m128_lo = keyed * pl; @@ -394,10 +396,10 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr final int c1 = access.u8(input, off + 0); final int c2 = access.i8(input, off + (length >> 1)); // high 3 bytes will be shifted final int c3 = access.u8(input, off + length - 1); - final int combinedl = (c1 << 16) | (c2 << 24) | c3 | ((int)length << 8); + final int combinedl = (c1 << 16) | (c2 << 24) | c3 | ((int) length << 8); final int combinedh = Integer.rotateLeft(Integer.reverseBytes(combinedl), 13); - final long bitflipl = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE+4)) + seed; - final long bitfliph = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE+8) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE+12)) - seed; + final long bitflipl = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 4)) + seed; + final long bitfliph = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 8) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 12)) - seed; final long low = XXH64_avalanche(Primitives.unsignedInt(combinedl) ^ bitflipl); if (null != result) { @@ -406,10 +408,10 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr } return low; } - final long low = XXH64_avalanche(seed ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+64) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+72)); + final long low = XXH64_avalanche(seed ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 64) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 72)); if (null != result) { result[0] = low; - result[1] = XXH64_avalanche(seed ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+80) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+88)); + result[1] = XXH64_avalanche(seed ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 80) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 88)); } return low; } @@ -424,62 +426,62 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr final long input1 = access.i64(input, off + 48 + 8); final long input2 = access.i64(input, off + length - 64); final long input3 = access.i64(input, off + length - 64 + 8); - acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 96, acc0, input0, input1, input2, input3); + acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 96, acc0, input0, input1, input2, input3); acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 96 + 16, acc1, input2, input3, input0, input1); } final long input0 = access.i64(input, off + 32); final long input1 = access.i64(input, off + 32 + 8); final long input2 = access.i64(input, off + length - 48); final long input3 = access.i64(input, off + length - 48 + 8); - acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 64, acc0, input0, input1, input2, input3); + acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 64, acc0, input0, input1, input2, input3); acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 64 + 16, acc1, input2, input3, input0, input1); } final long input0 = access.i64(input, off + 16); final long input1 = access.i64(input, off + 16 + 8); final long input2 = access.i64(input, off + length - 32); final long input3 = access.i64(input, off + length - 32 + 8); - acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 32, acc0, input0, input1, input2, input3); + acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 32, acc0, input0, input1, input2, input3); acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 32 + 16, acc1, input2, input3, input0, input1); } final long input0 = access.i64(input, off + 0); final long input1 = access.i64(input, off + 0 + 8); final long input2 = access.i64(input, off + length - 16); final long input3 = access.i64(input, off + length - 16 + 8); - acc0 = XXH128_mix32B_once(seed, BYTE_BASE, acc0, input0, input1, input2, input3); + acc0 = XXH128_mix32B_once(seed, BYTE_BASE, acc0, input0, input1, input2, input3); acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 16, acc1, input2, input3, input0, input1); final long low = XXH3_avalanche(acc0 + acc1); if (null != result) { result[0] = low; - result[1] = -XXH3_avalanche(acc0*XXH_PRIME64_1 + acc1*XXH_PRIME64_4 + (length - seed)*XXH_PRIME64_2); + result[1] = -XXH3_avalanche(acc0 * XXH_PRIME64_1 + acc1 * XXH_PRIME64_4 + (length - seed) * XXH_PRIME64_2); } return low; } if (length <= 240) { // XXH3_len_129to240_128b - final int nbRounds = (int)length / 32; + final int nbRounds = (int) length / 32; long acc0 = length * XXH_PRIME64_1; long acc1 = 0; int i = 0; for (; i < 4; ++i) { - final long input0 = access.i64(input, off + 32*i); - final long input1 = access.i64(input, off + 32*i + 8); - final long input2 = access.i64(input, off + 32*i + 16); - final long input3 = access.i64(input, off + 32*i + 24); - acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 32*i, acc0, input0, input1, input2, input3); - acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 32*i + 16, acc1, input2, input3, input0, input1); + final long input0 = access.i64(input, off + 32 * i); + final long input1 = access.i64(input, off + 32 * i + 8); + final long input2 = access.i64(input, off + 32 * i + 16); + final long input3 = access.i64(input, off + 32 * i + 24); + acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 32 * i, acc0, input0, input1, input2, input3); + acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 32 * i + 16, acc1, input2, input3, input0, input1); } acc0 = XXH3_avalanche(acc0); acc1 = XXH3_avalanche(acc1); for (; i < nbRounds; ++i) { - final long input0 = access.i64(input, off + 32*i); - final long input1 = access.i64(input, off + 32*i + 8); - final long input2 = access.i64(input, off + 32*i + 16); - final long input3 = access.i64(input, off + 32*i + 24); - acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 3 + 32*(i-4), acc0, input0, input1, input2, input3); - acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 3 + 32*(i-4) + 16, acc1, input2, input3, input0, input1); + final long input0 = access.i64(input, off + 32 * i); + final long input1 = access.i64(input, off + 32 * i + 8); + final long input2 = access.i64(input, off + 32 * i + 16); + final long input3 = access.i64(input, off + 32 * i + 24); + acc0 = XXH128_mix32B_once(seed, BYTE_BASE + 3 + 32 * (i - 4), acc0, input0, input1, input2, input3); + acc1 = XXH128_mix32B_once(seed, BYTE_BASE + 3 + 32 * (i - 4) + 16, acc1, input2, input3, input0, input1); } /* last bytes */ @@ -488,12 +490,12 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr final long input2 = access.i64(input, off + length - 32); final long input3 = access.i64(input, off + length - 32 + 8); acc0 = XXH128_mix32B_once(-seed, BYTE_BASE + 136 - 17 - 16, acc0, input0, input1, input2, input3); - acc1 = XXH128_mix32B_once(-seed, BYTE_BASE + 136 - 17 , acc1, input2, input3, input0, input1); + acc1 = XXH128_mix32B_once(-seed, BYTE_BASE + 136 - 17, acc1, input2, input3, input0, input1); final long low = XXH3_avalanche(acc0 + acc1); if (null != result) { result[0] = low; - result[1] = -XXH3_avalanche(acc0*XXH_PRIME64_1 + acc1*XXH_PRIME64_4 + (length - seed)*XXH_PRIME64_2); + result[1] = -XXH3_avalanche(acc0 * XXH_PRIME64_1 + acc1 * XXH_PRIME64_4 + (length - seed) * XXH_PRIME64_2); } return low; } @@ -513,42 +515,42 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr for (long n = 0; n < nb_blocks; n++) { // XXH3_accumulate final long offBlock = off + n * block_len; - for (long s = 0; s < nbStripesPerBlock; s++ ) { + for (long s = 0; s < nbStripesPerBlock; s++) { // XXH3_accumulate_512 final long offStripe = offBlock + s * 64; final long offSec = s * 8; { - final long data_val_0 = access.i64(input, offStripe + 8*0); - final long data_val_1 = access.i64(input, offStripe + 8*1); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*0); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*1); + final long data_val_0 = access.i64(input, offStripe + 8 * 0); + final long data_val_1 = access.i64(input, offStripe + 8 * 1); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 0); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 1); /* swap adjacent lanes */ acc_0 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_1 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*2); - final long data_val_1 = access.i64(input, offStripe + 8*3); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*2); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*3); + final long data_val_0 = access.i64(input, offStripe + 8 * 2); + final long data_val_1 = access.i64(input, offStripe + 8 * 3); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 2); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 3); /* swap adjacent lanes */ acc_2 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_3 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*4); - final long data_val_1 = access.i64(input, offStripe + 8*5); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*4); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*5); + final long data_val_0 = access.i64(input, offStripe + 8 * 4); + final long data_val_1 = access.i64(input, offStripe + 8 * 5); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 4); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 5); /* swap adjacent lanes */ acc_4 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_5 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*6); - final long data_val_1 = access.i64(input, offStripe + 8*7); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*6); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*7); + final long data_val_0 = access.i64(input, offStripe + 8 * 6); + final long data_val_1 = access.i64(input, offStripe + 8 * 7); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 6); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 7); /* swap adjacent lanes */ acc_6 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_7 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); @@ -557,14 +559,14 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr // XXH3_scrambleAcc_scalar final long offSec = BYTE_BASE + 192 - 64; - acc_0 = (acc_0 ^ (acc_0 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*0)) * XXH_PRIME32_1; - acc_1 = (acc_1 ^ (acc_1 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*1)) * XXH_PRIME32_1; - acc_2 = (acc_2 ^ (acc_2 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*2)) * XXH_PRIME32_1; - acc_3 = (acc_3 ^ (acc_3 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*3)) * XXH_PRIME32_1; - acc_4 = (acc_4 ^ (acc_4 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*4)) * XXH_PRIME32_1; - acc_5 = (acc_5 ^ (acc_5 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*5)) * XXH_PRIME32_1; - acc_6 = (acc_6 ^ (acc_6 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*6)) * XXH_PRIME32_1; - acc_7 = (acc_7 ^ (acc_7 >>> 47) ^ unsafeLE.i64(secret, offSec + 8*7)) * XXH_PRIME32_1; + acc_0 = (acc_0 ^ (acc_0 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 0)) * XXH_PRIME32_1; + acc_1 = (acc_1 ^ (acc_1 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 1)) * XXH_PRIME32_1; + acc_2 = (acc_2 ^ (acc_2 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 2)) * XXH_PRIME32_1; + acc_3 = (acc_3 ^ (acc_3 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 3)) * XXH_PRIME32_1; + acc_4 = (acc_4 ^ (acc_4 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 4)) * XXH_PRIME32_1; + acc_5 = (acc_5 ^ (acc_5 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 5)) * XXH_PRIME32_1; + acc_6 = (acc_6 ^ (acc_6 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 6)) * XXH_PRIME32_1; + acc_7 = (acc_7 ^ (acc_7 >>> 47) ^ unsafeLE.i64(secret, offSec + 8 * 7)) * XXH_PRIME32_1; } /* last partial block */ @@ -575,37 +577,37 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr final long offStripe = offBlock + s * 64; final long offSec = s * 8; { - final long data_val_0 = access.i64(input, offStripe + 8*0); - final long data_val_1 = access.i64(input, offStripe + 8*1); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*0); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*1); + final long data_val_0 = access.i64(input, offStripe + 8 * 0); + final long data_val_1 = access.i64(input, offStripe + 8 * 1); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 0); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 1); /* swap adjacent lanes */ acc_0 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_1 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*2); - final long data_val_1 = access.i64(input, offStripe + 8*3); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*2); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*3); + final long data_val_0 = access.i64(input, offStripe + 8 * 2); + final long data_val_1 = access.i64(input, offStripe + 8 * 3); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 2); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 3); /* swap adjacent lanes */ acc_2 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_3 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*4); - final long data_val_1 = access.i64(input, offStripe + 8*5); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*4); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*5); + final long data_val_0 = access.i64(input, offStripe + 8 * 4); + final long data_val_1 = access.i64(input, offStripe + 8 * 5); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 4); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 5); /* swap adjacent lanes */ acc_4 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_5 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*6); - final long data_val_1 = access.i64(input, offStripe + 8*7); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*6); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*7); + final long data_val_0 = access.i64(input, offStripe + 8 * 6); + final long data_val_1 = access.i64(input, offStripe + 8 * 7); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 6); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 7); /* swap adjacent lanes */ acc_6 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_7 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); @@ -617,37 +619,37 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr final long offStripe = off + length - 64; final long offSec = 192 - 64 - 7; { - final long data_val_0 = access.i64(input, offStripe + 8*0); - final long data_val_1 = access.i64(input, offStripe + 8*1); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*0); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*1); + final long data_val_0 = access.i64(input, offStripe + 8 * 0); + final long data_val_1 = access.i64(input, offStripe + 8 * 1); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 0); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 1); /* swap adjacent lanes */ acc_0 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_1 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*2); - final long data_val_1 = access.i64(input, offStripe + 8*3); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*2); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*3); + final long data_val_0 = access.i64(input, offStripe + 8 * 2); + final long data_val_1 = access.i64(input, offStripe + 8 * 3); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 2); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 3); /* swap adjacent lanes */ acc_2 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_3 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*4); - final long data_val_1 = access.i64(input, offStripe + 8*5); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*4); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*5); + final long data_val_0 = access.i64(input, offStripe + 8 * 4); + final long data_val_1 = access.i64(input, offStripe + 8 * 5); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 4); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 5); /* swap adjacent lanes */ acc_4 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_5 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); } { - final long data_val_0 = access.i64(input, offStripe + 8*6); - final long data_val_1 = access.i64(input, offStripe + 8*7); - final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*6); - final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8*7); + final long data_val_0 = access.i64(input, offStripe + 8 * 6); + final long data_val_1 = access.i64(input, offStripe + 8 * 7); + final long data_key_0 = data_val_0 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 6); + final long data_key_1 = data_val_1 ^ unsafeLE.i64(secret, BYTE_BASE + offSec + 8 * 7); /* swap adjacent lanes */ acc_6 += data_val_1 + (0xFFFFFFFFL & data_key_0) * (data_key_0 >>> 32); acc_7 += data_val_0 + (0xFFFFFFFFL & data_key_1) * (data_key_1 >>> 32); @@ -673,9 +675,9 @@ private static long XXH3_128bits_internal(final long seed, final byte[] secr private static void XXH3_initCustomSecret(final byte[] customSecret, final long seed64) { final int nbRounds = 192 / 16; final ByteBuffer bb = ByteBuffer.wrap(customSecret).order(LITTLE_ENDIAN); - for (int i=0; i < nbRounds; i++) { - final long lo = unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 16*i) + seed64; - final long hi = unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 16*i + 8) - seed64; + for (int i = 0; i < nbRounds; i++) { + final long lo = unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 16 * i) + seed64; + final long hi = unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 16 * i + 8) - seed64; bb.putLong(16 * i + 0, lo); bb.putLong(16 * i + 8, hi); } @@ -697,7 +699,7 @@ public long seed() { public long hashLong(long input) { input = Primitives.nativeToLittleEndian(input); final long s = seed() ^ Long.reverseBytes(seed() & 0xFFFFFFFFL); - final long bitflip = (unsafeLE.i64(XXH3.XXH3_kSecret, 8+BYTE_BASE) ^ unsafeLE.i64(XXH3.XXH3_kSecret, 16+BYTE_BASE)) - s; + final long bitflip = (unsafeLE.i64(XXH3.XXH3_kSecret, 8 + BYTE_BASE) ^ unsafeLE.i64(XXH3.XXH3_kSecret, 16 + BYTE_BASE)) - s; final long keyed = Long.rotateLeft(input, 32) ^ bitflip; return XXH3_rrmxmx(keyed, 8); } @@ -706,19 +708,19 @@ public long hashLong(long input) { public long hashInt(int input) { input = Primitives.nativeToLittleEndian(input); long s = seed() ^ Long.reverseBytes(seed() & 0xFFFFFFFFL); - final long bitflip = (unsafeLE.i64(XXH3.XXH3_kSecret, 8+BYTE_BASE) ^ unsafeLE.i64(XXH3.XXH3_kSecret, 16+BYTE_BASE)) - s; - final long keyed = (Primitives.unsignedInt(input) + (((long)input) << 32)) ^ bitflip; + final long bitflip = (unsafeLE.i64(XXH3.XXH3_kSecret, 8 + BYTE_BASE) ^ unsafeLE.i64(XXH3.XXH3_kSecret, 16 + BYTE_BASE)) - s; + final long keyed = (Primitives.unsignedInt(input) + (((long) input) << 32)) ^ bitflip; return XXH3_rrmxmx(keyed, 4); } @Override public long hashShort(short input) { input = Primitives.nativeToLittleEndian(input); - final int c1 = Primitives.unsignedByte((byte)input); + final int c1 = Primitives.unsignedByte((byte) input); final int c2 = Primitives.unsignedShort(input) >>> 8; final int c3 = c2; final long combined = Primitives.unsignedInt((c1 << 16) | (c2 << 24) | c3 | (2 << 8)); - final long bitflip = (unsafeLE.u32(XXH3.XXH3_kSecret, BYTE_BASE) ^ unsafeLE.u32(XXH3.XXH3_kSecret, 4+BYTE_BASE)) + seed(); + final long bitflip = (unsafeLE.u32(XXH3.XXH3_kSecret, BYTE_BASE) ^ unsafeLE.u32(XXH3.XXH3_kSecret, 4 + BYTE_BASE)) + seed(); return XXH64_avalanche(combined ^ bitflip); } @@ -733,13 +735,13 @@ public long hashByte(byte input) { final int c2 = c1; final int c3 = c1; final long combined = Primitives.unsignedInt((c1 << 16) | (c2 << 24) | c3 | (1 << 8)); - final long bitflip = (unsafeLE.u32(XXH3.XXH3_kSecret, BYTE_BASE) ^ unsafeLE.u32(XXH3.XXH3_kSecret, 4+BYTE_BASE)) + seed(); + final long bitflip = (unsafeLE.u32(XXH3.XXH3_kSecret, BYTE_BASE) ^ unsafeLE.u32(XXH3.XXH3_kSecret, 4 + BYTE_BASE)) + seed(); return XXH64_avalanche(combined ^ bitflip); } @Override public long hashVoid() { - return XXH64_avalanche(seed() ^ unsafeLE.i64(XXH3.XXH3_kSecret, 56+BYTE_BASE) ^ unsafeLE.i64(XXH3.XXH3_kSecret, 64+BYTE_BASE)); + return XXH64_avalanche(seed() ^ unsafeLE.i64(XXH3.XXH3_kSecret, 56 + BYTE_BASE) ^ unsafeLE.i64(XXH3.XXH3_kSecret, 64 + BYTE_BASE)); } @Override @@ -777,6 +779,7 @@ public long hash(final T input, final Access access, final long off, fina static LongTupleHashFunction asLongTupleHashFunctionWithoutSeed() { return AsLongTupleHashFunction.SEEDLESS_INSTANCE; } + static LongHashFunction asLongTupleLowHashFunctionWithoutSeed() { return AsLongTupleHashFunction.SEEDLESS_INSTANCE.asLongHashFunction(); } @@ -803,7 +806,7 @@ public long[] newResultArray() { public long dualHashLong(long input, final long[] result) { input = Primitives.nativeToLittleEndian(input); long s = seed() ^ Long.reverseBytes(seed() & 0xFFFFFFFFL); - final long bitflip = (unsafeLE.i64(XXH3_kSecret, 16+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 24+BYTE_BASE)) + s; + final long bitflip = (unsafeLE.i64(XXH3_kSecret, 16 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 24 + BYTE_BASE)) + s; final long keyed = input ^ bitflip; final long pl = XXH_PRIME64_1 + (8 << 2); /* Shift len to the left to ensure it is even, this avoids even multiplies. */ long m128_lo = keyed * pl; @@ -826,7 +829,7 @@ public long dualHashLong(long input, final long[] result) { public long dualHashInt(final int input, final long[] result) { final long inputU = Primitives.unsignedInt(Primitives.nativeToLittleEndian(input)); long s = seed() ^ Long.reverseBytes(seed() & 0xFFFFFFFFL); - final long bitflip = (unsafeLE.i64(XXH3_kSecret, 16+BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 24+BYTE_BASE)) + s; + final long bitflip = (unsafeLE.i64(XXH3_kSecret, 16 + BYTE_BASE) ^ unsafeLE.i64(XXH3_kSecret, 24 + BYTE_BASE)) + s; final long keyed = (inputU + (inputU << 32)) ^ bitflip; final long pl = XXH_PRIME64_1 + (4 << 2); /* Shift len to the left to ensure it is even, this avoids even multiplies. */ long m128_lo = keyed * pl; @@ -849,13 +852,13 @@ public long dualHashInt(final int input, final long[] result) { @Override public long dualHashShort(short input, final long[] result) { input = Primitives.nativeToLittleEndian(input); - final int c1 = Primitives.unsignedByte((byte)input); + final int c1 = Primitives.unsignedByte((byte) input); final int c2 = Primitives.unsignedShort(input) >>> 8; final int c3 = c2; - final int combinedl = (c1 << 16) | (c2 << 24) | c3 | (2 << 8); + final int combinedl = (c1 << 16) | (c2 << 24) | c3 | (2 << 8); final int combinedh = Integer.rotateLeft(Integer.reverseBytes(combinedl), 13); - final long bitflipl = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE+4)) + seed(); - final long bitfliph = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE+8) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE+12)) - seed(); + final long bitflipl = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 4)) + seed(); + final long bitfliph = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 8) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 12)) - seed(); final long low = XXH64_avalanche(Primitives.unsignedInt(combinedl) ^ bitflipl); if (null != result) { @@ -874,12 +877,12 @@ public long dualHashChar(char input, final long[] result) { public long dualHashByte(byte input, final long[] result) { final int c1 = Primitives.unsignedByte(input); //final int c2 = c1; - final int c2 = (byte)input; + final int c2 = (byte) input; final int c3 = c1; - final int combinedl = (c1 << 16) | (c2 << 24) | c3 | (1 << 8); + final int combinedl = (c1 << 16) | (c2 << 24) | c3 | (1 << 8); final int combinedh = Integer.rotateLeft(Integer.reverseBytes(combinedl), 13); - final long bitflipl = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE+4)) + seed(); - final long bitfliph = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE+8) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE+12)) - seed(); + final long bitflipl = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 4)) + seed(); + final long bitfliph = Primitives.unsignedInt(unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 8) ^ unsafeLE.i32(XXH3_kSecret, BYTE_BASE + 12)) - seed(); final long low = XXH64_avalanche(Primitives.unsignedInt(combinedl) ^ bitflipl); if (null != result) { @@ -891,10 +894,10 @@ public long dualHashByte(byte input, final long[] result) { @Override public long dualHashVoid(final long[] result) { - final long low = XXH64_avalanche(seed() ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+64) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+72)); + final long low = XXH64_avalanche(seed() ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 64) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 72)); if (null != result) { result[0] = low; - result[1] = XXH64_avalanche(seed() ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+80) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE+88)); + result[1] = XXH64_avalanche(seed() ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 80) ^ unsafeLE.i64(XXH3_kSecret, BYTE_BASE + 88)); } return low; } @@ -908,6 +911,7 @@ public long dualHash(final T input, final Access access, final long off, static LongTupleHashFunction asLongTupleHashFunctionWithSeed(final long seed) { return 0 == seed ? AsLongTupleHashFunction.SEEDLESS_INSTANCE : new AsLongTupleHashFunctionSeeded(seed); } + static LongHashFunction asLongTupleLowHashFunctionWithSeed(long seed) { return new AsLongTupleHashFunctionSeeded(seed).asLongHashFunction(); } diff --git a/src/main/java/net/openhft/hashing/XxHash.java b/src/main/java/net/openhft/hashing/XxHash.java index a4b84d1..60f9399 100644 --- a/src/main/java/net/openhft/hashing/XxHash.java +++ b/src/main/java/net/openhft/hashing/XxHash.java @@ -62,9 +62,9 @@ static long xxHash64(long seed, T input, Access access, long off, long le } while (remaining >= 32); hash = Long.rotateLeft(v1, 1) - + Long.rotateLeft(v2, 7) - + Long.rotateLeft(v3, 12) - + Long.rotateLeft(v4, 18); + + Long.rotateLeft(v2, 7) + + Long.rotateLeft(v3, 12) + + Long.rotateLeft(v4, 18); v1 *= P2; v1 = Long.rotateLeft(v1, 31); diff --git a/src/main/java/sun/nio/ch/DirectBuffer.java b/src/main/java/sun/nio/ch/DirectBuffer.java index e9c16d6..eb07e5f 100644 --- a/src/main/java/sun/nio/ch/DirectBuffer.java +++ b/src/main/java/sun/nio/ch/DirectBuffer.java @@ -4,10 +4,10 @@ * Stub for JDK internal ckass sun.nio.ch.DirectBuffer. *

* - When crossing compiling for Java SE 7 and 8, this stub class bypasses compiler sun-api - * warnings. + * warnings. * - When crossing compiling for Java SE 9+, the package 'sun.nio.ch' is not exported from - * 'java.base' module. This stub class helps to access the class in compile-time without - * '--add-export' arguments and bypasses sun-api warnings. + * 'java.base' module. This stub class helps to access the class in compile-time without + * '--add-export' arguments and bypasses sun-api warnings. * - Only used methods are exported. * - In test and production runtime, the real class is loaded from boot classpath. */ diff --git a/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java b/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java index e18c6da..0ffb673 100644 --- a/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java +++ b/src/test/java/net/openhft/hashing/ByteBufferAccessTest.java @@ -3,11 +3,11 @@ */ package net.openhft.hashing; +import org.junit.Test; + import java.nio.ByteBuffer; import java.nio.ByteOrder; -import org.junit.Test; - import static java.nio.ByteOrder.BIG_ENDIAN; import static java.nio.ByteOrder.LITTLE_ENDIAN; import static org.junit.Assert.assertEquals; diff --git a/src/test/java/net/openhft/hashing/CharSequenceAccessTest.java b/src/test/java/net/openhft/hashing/CharSequenceAccessTest.java index d180992..ed07b5f 100644 --- a/src/test/java/net/openhft/hashing/CharSequenceAccessTest.java +++ b/src/test/java/net/openhft/hashing/CharSequenceAccessTest.java @@ -2,15 +2,13 @@ import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertSame; -import static org.junit.Assume.assumeTrue; import static java.nio.ByteOrder.*; import static net.openhft.hashing.Primitives.*; +import static org.junit.Assert.*; +import static org.junit.Assume.assumeTrue; public class CharSequenceAccessTest { - static String TEST_STRING = new String(new char[] {0xF0E1,0xD2C3,0xB4A5,0x9687,0xC8E9}); + static String TEST_STRING = new String(new char[]{0xF0E1, 0xD2C3, 0xB4A5, 0x9687, 0xC8E9}); @Test public void testInstanceLE() { @@ -54,37 +52,37 @@ public void testLittleEndian() { final Access access = CharSequenceAccess.charSequenceAccess(LITTLE_ENDIAN); final Access accessR = access.reverseAccess(); - assertEquals( 0x9687B4A5D2C3F0E1L, access.getLong(TEST_STRING, 0)); - assertEquals(0xE99687B4A5D2C3F0L , access.getLong(TEST_STRING, 1)); - assertEquals(0xE1F0C3D2A5B48796L , accessR.getLong(TEST_STRING, 0)); - assertEquals( 0xF0C3D2A5B48796E9L, accessR.getLong(TEST_STRING, 1)); - - assertEquals(unsignedInt( 0xD2C3F0E1), access.getUnsignedInt(TEST_STRING, 0)); - assertEquals(unsignedInt(0xA5D2C3F0 ), access.getUnsignedInt(TEST_STRING, 1)); - assertEquals( 0xD2C3F0E1, access.getInt(TEST_STRING, 0)); - assertEquals(0xA5D2C3F0 , access.getInt(TEST_STRING, 1)); - assertEquals(unsignedInt(0xE1F0C3D2) , accessR.getUnsignedInt(TEST_STRING, 0)); - assertEquals(unsignedInt( 0xF0C3D2A5), accessR.getUnsignedInt(TEST_STRING, 1)); - assertEquals(0xE1F0C3D2 , accessR.getInt(TEST_STRING, 0)); - assertEquals( 0xF0C3D2A5, accessR.getInt(TEST_STRING, 1)); - - assertEquals(unsignedShort( 0xF0E1), access.getUnsignedShort(TEST_STRING, 0)); - assertEquals(unsignedShort(0xC3F0 ), access.getUnsignedShort(TEST_STRING, 1)); - assertEquals((int)(short) 0xF0E1, access.getShort(TEST_STRING, 0)); - assertEquals((int)(short)0xC3F0 , access.getShort(TEST_STRING, 1)); - assertEquals(unsignedShort(0xE1F0 ), accessR.getUnsignedShort(TEST_STRING, 0)); - assertEquals(unsignedShort( 0xF0C3), accessR.getUnsignedShort(TEST_STRING, 1)); - assertEquals((int)(short)0xE1F0 , accessR.getShort(TEST_STRING, 0)); - assertEquals((int)(short) 0xF0C3, accessR.getShort(TEST_STRING, 1)); + assertEquals(0x9687B4A5D2C3F0E1L, access.getLong(TEST_STRING, 0)); + assertEquals(0xE99687B4A5D2C3F0L, access.getLong(TEST_STRING, 1)); + assertEquals(0xE1F0C3D2A5B48796L, accessR.getLong(TEST_STRING, 0)); + assertEquals(0xF0C3D2A5B48796E9L, accessR.getLong(TEST_STRING, 1)); + + assertEquals(unsignedInt(0xD2C3F0E1), access.getUnsignedInt(TEST_STRING, 0)); + assertEquals(unsignedInt(0xA5D2C3F0), access.getUnsignedInt(TEST_STRING, 1)); + assertEquals(0xD2C3F0E1, access.getInt(TEST_STRING, 0)); + assertEquals(0xA5D2C3F0, access.getInt(TEST_STRING, 1)); + assertEquals(unsignedInt(0xE1F0C3D2), accessR.getUnsignedInt(TEST_STRING, 0)); + assertEquals(unsignedInt(0xF0C3D2A5), accessR.getUnsignedInt(TEST_STRING, 1)); + assertEquals(0xE1F0C3D2, accessR.getInt(TEST_STRING, 0)); + assertEquals(0xF0C3D2A5, accessR.getInt(TEST_STRING, 1)); + + assertEquals(unsignedShort(0xF0E1), access.getUnsignedShort(TEST_STRING, 0)); + assertEquals(unsignedShort(0xC3F0), access.getUnsignedShort(TEST_STRING, 1)); + assertEquals((int) (short) 0xF0E1, access.getShort(TEST_STRING, 0)); + assertEquals((int) (short) 0xC3F0, access.getShort(TEST_STRING, 1)); + assertEquals(unsignedShort(0xE1F0), accessR.getUnsignedShort(TEST_STRING, 0)); + assertEquals(unsignedShort(0xF0C3), accessR.getUnsignedShort(TEST_STRING, 1)); + assertEquals((int) (short) 0xE1F0, accessR.getShort(TEST_STRING, 0)); + assertEquals((int) (short) 0xF0C3, accessR.getShort(TEST_STRING, 1)); assertEquals(unsignedByte(0xE1), access.getUnsignedByte(TEST_STRING, 0)); assertEquals(unsignedByte(0xF0), access.getUnsignedByte(TEST_STRING, 1)); - assertEquals((int)(byte)0xE1, access.getByte(TEST_STRING, 0)); - assertEquals((int)(byte)0xF0, access.getByte(TEST_STRING, 1)); + assertEquals((int) (byte) 0xE1, access.getByte(TEST_STRING, 0)); + assertEquals((int) (byte) 0xF0, access.getByte(TEST_STRING, 1)); assertEquals(unsignedByte(0xE1), accessR.getUnsignedByte(TEST_STRING, 0)); assertEquals(unsignedByte(0xF0), accessR.getUnsignedByte(TEST_STRING, 1)); - assertEquals((int)(byte)0xE1, accessR.getByte(TEST_STRING, 0)); - assertEquals((int)(byte)0xF0, accessR.getByte(TEST_STRING, 1)); + assertEquals((int) (byte) 0xE1, accessR.getByte(TEST_STRING, 0)); + assertEquals((int) (byte) 0xF0, accessR.getByte(TEST_STRING, 1)); } @Test @@ -93,22 +91,22 @@ public void testBigEndian() { final Access access = CharSequenceAccess.charSequenceAccess(BIG_ENDIAN); - assertEquals(0xF0E1D2C3B4A59687L , access.getLong(TEST_STRING, 0)); - assertEquals( 0xE1D2C3B4A59687C8L, access.getLong(TEST_STRING, 1)); + assertEquals(0xF0E1D2C3B4A59687L, access.getLong(TEST_STRING, 0)); + assertEquals(0xE1D2C3B4A59687C8L, access.getLong(TEST_STRING, 1)); assertEquals(unsignedInt(0xF0E1D2C3), access.getUnsignedInt(TEST_STRING, 0)); - assertEquals(unsignedInt( 0xE1D2C3B4), access.getUnsignedInt(TEST_STRING, 1)); + assertEquals(unsignedInt(0xE1D2C3B4), access.getUnsignedInt(TEST_STRING, 1)); assertEquals(0xF0E1D2C3, access.getInt(TEST_STRING, 0)); - assertEquals( 0xE1D2C3B4, access.getInt(TEST_STRING, 1)); + assertEquals(0xE1D2C3B4, access.getInt(TEST_STRING, 1)); assertEquals(unsignedShort(0xF0E1), access.getUnsignedShort(TEST_STRING, 0)); - assertEquals(unsignedShort( 0xE1D2), access.getUnsignedShort(TEST_STRING, 1)); - assertEquals((int)(short)0xF0E1, access.getShort(TEST_STRING, 0)); - assertEquals((int)(short) 0xE1D2, access.getShort(TEST_STRING, 1)); + assertEquals(unsignedShort(0xE1D2), access.getUnsignedShort(TEST_STRING, 1)); + assertEquals((int) (short) 0xF0E1, access.getShort(TEST_STRING, 0)); + assertEquals((int) (short) 0xE1D2, access.getShort(TEST_STRING, 1)); assertEquals(unsignedByte(0xF0), access.getUnsignedByte(TEST_STRING, 0)); assertEquals(unsignedByte(0xE1), access.getUnsignedByte(TEST_STRING, 1)); - assertEquals((int)(byte)0xF0, access.getByte(TEST_STRING, 0)); - assertEquals((int)(byte)0xE1, access.getByte(TEST_STRING, 1)); + assertEquals((int) (byte) 0xF0, access.getByte(TEST_STRING, 0)); + assertEquals((int) (byte) 0xE1, access.getByte(TEST_STRING, 1)); } } diff --git a/src/test/java/net/openhft/hashing/City64_1_1_Test.java b/src/test/java/net/openhft/hashing/City64_1_1_Test.java index cf7d50a..d13e751 100644 --- a/src/test/java/net/openhft/hashing/City64_1_1_Test.java +++ b/src/test/java/net/openhft/hashing/City64_1_1_Test.java @@ -33,7 +33,7 @@ public class City64_1_1_Test { public static Collection data() { ArrayList data = new ArrayList(); for (int len = 0; len < 1025; len++) { - data.add(new Object[] {len}); + data.add(new Object[]{len}); } return data; } diff --git a/src/test/java/net/openhft/hashing/CompactLatin1CharSequenceAccessTest.java b/src/test/java/net/openhft/hashing/CompactLatin1CharSequenceAccessTest.java index d3bfdf3..b2a4b72 100644 --- a/src/test/java/net/openhft/hashing/CompactLatin1CharSequenceAccessTest.java +++ b/src/test/java/net/openhft/hashing/CompactLatin1CharSequenceAccessTest.java @@ -1,6 +1,7 @@ package net.openhft.hashing; import org.junit.Test; + import java.nio.ByteOrder; import static java.nio.ByteOrder.BIG_ENDIAN; @@ -10,51 +11,51 @@ public class CompactLatin1CharSequenceAccessTest { static private final Access access = CompactLatin1CharSequenceAccess.INSTANCE; - static private final byte[] b = { (byte)0xF1, (byte)0xE2, (byte)0xD3, (byte)0xC4, (byte)0xB5 }; + static private final byte[] b = {(byte) 0xF1, (byte) 0xE2, (byte) 0xD3, (byte) 0xC4, (byte) 0xB5}; @Test public void testLE() { assumeTrue(ByteOrder.nativeOrder() == LITTLE_ENDIAN); - assertEquals( 0xC400D300E200F1L, access.getLong(b, 0)); - assertEquals(0xB500C400D300E200L, access.getLong(b, 1)); + assertEquals(0xC400D300E200F1L, access.getLong(b, 0)); + assertEquals(0xB500C400D300E200L, access.getLong(b, 1)); - assertEquals( 0xE200F1, access.getInt(b, 0)); - assertEquals( 0xD300E200, access.getInt(b, 1)); - assertEquals(Primitives.unsignedInt(0xE200F1), access.getUnsignedInt(b, 0)); + assertEquals(0xE200F1, access.getInt(b, 0)); + assertEquals(0xD300E200, access.getInt(b, 1)); + assertEquals(Primitives.unsignedInt(0xE200F1), access.getUnsignedInt(b, 0)); assertEquals(Primitives.unsignedInt(0xD300E200), access.getUnsignedInt(b, 1)); - assertEquals( 0xF1, access.getShort(b, 0)); - assertEquals( (int)(short)0xE200, access.getShort(b, 1)); - assertEquals(Primitives.unsignedShort(0xF1), access.getUnsignedShort(b, 0)); + assertEquals(0xF1, access.getShort(b, 0)); + assertEquals((int) (short) 0xE200, access.getShort(b, 1)); + assertEquals(Primitives.unsignedShort(0xF1), access.getUnsignedShort(b, 0)); assertEquals(Primitives.unsignedShort(0xE200), access.getUnsignedShort(b, 1)); - assertEquals( (int)(byte)0xF1, access.getByte(b, 0)); - assertEquals( 0, access.getByte(b, 1)); + assertEquals((int) (byte) 0xF1, access.getByte(b, 0)); + assertEquals(0, access.getByte(b, 1)); assertEquals(Primitives.unsignedByte(0xF1), access.getUnsignedByte(b, 0)); - assertEquals( 0, access.getUnsignedByte(b, 1)); + assertEquals(0, access.getUnsignedByte(b, 1)); } @Test public void testBE() { assumeTrue(ByteOrder.nativeOrder() == BIG_ENDIAN); - assertEquals(0xF100E200D300C4L, access.getLong(b, 0)); + assertEquals(0xF100E200D300C4L, access.getLong(b, 0)); assertEquals(0xF100E200D300C400L, access.getLong(b, 1)); - assertEquals( 0xF100E2, access.getInt(b, 0)); - assertEquals( 0xF100E200, access.getInt(b, 1)); - assertEquals(Primitives.unsignedInt(0xF100E2), access.getUnsignedInt(b, 0)); + assertEquals(0xF100E2, access.getInt(b, 0)); + assertEquals(0xF100E200, access.getInt(b, 1)); + assertEquals(Primitives.unsignedInt(0xF100E2), access.getUnsignedInt(b, 0)); assertEquals(Primitives.unsignedInt(0xF100E200), access.getUnsignedInt(b, 1)); - assertEquals( 0xF1, access.getShort(b, 0)); - assertEquals( (int)(short)0xF100, access.getShort(b, 1)); - assertEquals(Primitives.unsignedShort(0xF1), access.getUnsignedShort(b, 0)); + assertEquals(0xF1, access.getShort(b, 0)); + assertEquals((int) (short) 0xF100, access.getShort(b, 1)); + assertEquals(Primitives.unsignedShort(0xF1), access.getUnsignedShort(b, 0)); assertEquals(Primitives.unsignedShort(0xF100), access.getUnsignedShort(b, 1)); - assertEquals( 0, access.getByte(b, 0)); - assertEquals( (int)(byte)0xF1, access.getByte(b, 1)); - assertEquals( 0, access.getUnsignedByte(b, 0)); + assertEquals(0, access.getByte(b, 0)); + assertEquals((int) (byte) 0xF1, access.getByte(b, 1)); + assertEquals(0, access.getUnsignedByte(b, 0)); assertEquals(Primitives.unsignedByte(0xF1), access.getUnsignedByte(b, 1)); } } diff --git a/src/test/java/net/openhft/hashing/LongHashFunctionTest.java b/src/test/java/net/openhft/hashing/LongHashFunctionTest.java index 7a81587..45d1bce 100644 --- a/src/test/java/net/openhft/hashing/LongHashFunctionTest.java +++ b/src/test/java/net/openhft/hashing/LongHashFunctionTest.java @@ -16,19 +16,15 @@ package net.openhft.hashing; +import org.junit.Test; + import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; -import org.junit.Test; - -import static java.nio.ByteOrder.BIG_ENDIAN; -import static java.nio.ByteOrder.LITTLE_ENDIAN; -import static java.nio.ByteOrder.nativeOrder; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.fail; +import static java.nio.ByteOrder.*; +import static org.junit.Assert.*; public class LongHashFunctionTest { @@ -58,7 +54,7 @@ private static void testVoid(LongHashFunction f, long eh, int len) { public static void testBoolean(LongHashFunction f, int len) { if (len != 1) return; - for (boolean b : new boolean[] {true, false}) { + for (boolean b : new boolean[]{true, false}) { boolean[] a = {b}; long single = f.hashBoolean(b); long array = f.hashBooleans(a); @@ -163,17 +159,17 @@ private static void testByteBuffers(LongHashFunction f, long eh, int len, ByteBu bb.order(LITTLE_ENDIAN); assertEquals("byte buffer little endian", eh, f.hashBytes(bb)); ByteBuffer bb2 = ByteBuffer.allocate(len + 2).order(LITTLE_ENDIAN); - ((Buffer)bb2).position(1); + ((Buffer) bb2).position(1); bb2.put(bb); assertEquals("byte buffer little endian off len", eh, f.hashBytes(bb2, 1, len)); - ((Buffer)bb.order(BIG_ENDIAN)).clear(); + ((Buffer) bb.order(BIG_ENDIAN)).clear(); assertEquals("byte buffer big endian", eh, f.hashBytes(bb)); bb2.order(BIG_ENDIAN); assertEquals("byte buffer big endian off len", eh, f.hashBytes(bb2, 1, len)); - ((Buffer)bb.order(nativeOrder())).clear(); + ((Buffer) bb.order(nativeOrder())).clear(); } private static void testCharSequences(LongHashFunction f, long eh, int len, ByteBuffer bb) { @@ -203,7 +199,7 @@ private static void testCharSequences(LongHashFunction f, long eh, int len, Byte long toCharSequenceActual = f.hash(s2, Access.toCharSequence(nonNativeOrder()), 0, len); assertEquals("string wrong order fixed", eh, toCharSequenceActual); - ((Buffer)bb.order(nativeOrder())).clear(); + ((Buffer) bb.order(nativeOrder())).clear(); } } } @@ -212,7 +208,7 @@ private static void testMemory(LongHashFunction f, long eh, int len, ByteBuffer ByteBuffer directBB = ByteBuffer.allocateDirect(len); directBB.put(bb); assertEquals("memory", eh, f.hashMemory(Util.getDirectBufferAddress(directBB), len)); - ((Buffer)bb).clear(); + ((Buffer) bb).clear(); } private static void testLatin1String(LongHashFunction f, byte[] data) { @@ -221,7 +217,7 @@ private static void testLatin1String(LongHashFunction f, byte[] data) { String inputStr = new String(data, "ISO-8859-1"); char[] inputCharArray = new char[data.length]; for (int i = 0; i < data.length; ++i) { - inputCharArray[i] = (char)(data[i]&0xFF); + inputCharArray[i] = (char) (data[i] & 0xFF); } assertEquals(f.hashChars(inputStr), f.hashChars(inputCharArray)); } catch (Exception e) { diff --git a/src/test/java/net/openhft/hashing/LongTupleHashFunctionTest.java b/src/test/java/net/openhft/hashing/LongTupleHashFunctionTest.java index a30e1e0..ec662a1 100644 --- a/src/test/java/net/openhft/hashing/LongTupleHashFunctionTest.java +++ b/src/test/java/net/openhft/hashing/LongTupleHashFunctionTest.java @@ -5,17 +5,11 @@ import java.nio.ByteOrder; import java.util.Arrays; -import static java.nio.ByteOrder.BIG_ENDIAN; -import static java.nio.ByteOrder.LITTLE_ENDIAN; -import static java.nio.ByteOrder.nativeOrder; +import static java.nio.ByteOrder.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; import static org.hamcrest.core.IsNot.not; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; public class LongTupleHashFunctionTest { @@ -92,7 +86,7 @@ private static void testVoid(LongTupleHashFunction f, long[] eh, int len) { public static void testBoolean(LongTupleHashFunction f, int len) { if (len != 1) return; - for (boolean b : new boolean[] {true, false}) { + for (boolean b : new boolean[]{true, false}) { boolean[] a = {b}; long[] single = f.hashBoolean(b); long[] array = f.hashBooleans(a); @@ -197,17 +191,17 @@ private static void testByteBuffers(LongTupleHashFunction f, long[] eh, int len, bb.order(LITTLE_ENDIAN); assertArrayEquals("byte buffer little endian", eh, f.hashBytes(bb)); ByteBuffer bb2 = ByteBuffer.allocate(len + 2).order(LITTLE_ENDIAN); - ((Buffer)bb2).position(1); + ((Buffer) bb2).position(1); bb2.put(bb); assertArrayEquals("byte buffer little endian off len", eh, f.hashBytes(bb2, 1, len)); - ((Buffer)bb.order(BIG_ENDIAN)).clear(); + ((Buffer) bb.order(BIG_ENDIAN)).clear(); assertArrayEquals("byte buffer big endian", eh, f.hashBytes(bb)); bb2.order(BIG_ENDIAN); assertArrayEquals("byte buffer big endian off len", eh, f.hashBytes(bb2, 1, len)); - ((Buffer)bb.order(nativeOrder())).clear(); + ((Buffer) bb.order(nativeOrder())).clear(); } private static void testCharSequences(LongTupleHashFunction f, long[] eh, int len, ByteBuffer bb) { @@ -237,7 +231,7 @@ private static void testCharSequences(LongTupleHashFunction f, long[] eh, int le long[] toCharSequenceActual = f.hash(s2, Access.toCharSequence(nonNativeOrder()), 0, len); assertArrayEquals("string wrong order fixed", eh, toCharSequenceActual); - ((Buffer)bb.order(nativeOrder())).clear(); + ((Buffer) bb.order(nativeOrder())).clear(); } } } @@ -246,7 +240,7 @@ private static void testMemory(LongTupleHashFunction f, long[] eh, int len, Byte ByteBuffer directBB = ByteBuffer.allocateDirect(len); directBB.put(bb); assertArrayEquals("memory", eh, f.hashMemory(Util.getDirectBufferAddress(directBB), len)); - ((Buffer)bb).clear(); + ((Buffer) bb).clear(); } private static void testLatin1String(LongTupleHashFunction f, byte[] data) { @@ -255,11 +249,11 @@ private static void testLatin1String(LongTupleHashFunction f, byte[] data) { String inputStr = new String(data, "ISO-8859-1"); char[] inputCharArray = new char[data.length]; for (int i = 0; i < data.length; ++i) { - inputCharArray[i] = (char)(data[i]&0xFF); + inputCharArray[i] = (char) (data[i] & 0xFF); } char[] inputCharArray2 = new char[data.length]; for (int i = 0; i < data.length; ++i) { - inputCharArray2[i] = (char)(data[i]&0xFF); + inputCharArray2[i] = (char) (data[i] & 0xFF); } assertArrayEquals(f.hashChars(inputStr), f.hashChars(inputCharArray)); } catch (Exception e) { diff --git a/src/test/java/net/openhft/hashing/MetroHashTest.java b/src/test/java/net/openhft/hashing/MetroHashTest.java index 70dc196..ae90aa9 100644 --- a/src/test/java/net/openhft/hashing/MetroHashTest.java +++ b/src/test/java/net/openhft/hashing/MetroHashTest.java @@ -40,32 +40,32 @@ public void test(LongHashFunction metro, long[] hashesOfLoopingBytes) { LongHashFunctionTest.test(metro, data, hashesOfLoopingBytes[len]); } -/** - * Test data is output of the following program with metrohash implementation - * from https://github.com/jandrewrogers/MetroHash - * - * #include "metrohash64.h" - * #include - * #include - * - * int main() { - * uint8_t* x = (uint8_t*) malloc(8); - * uint8_t* src = (uint8_t*) malloc(1024); - * for (int i = 0; i < 1024; i++) { - * src[i] = (uint8_t) i; - * } - * printf("without seeds\n"); - * for (int i = 0; i <= 1024; i++) { - * MetroHash64::Hash(src, i, x); - * printf("%lldL,\n", *((long long *)x)); - * } - * printf("with seed 42\n"); - * for (int i = 0; i <= 1024; i++) { - * MetroHash64::Hash(src, i, x, 42); - * printf("%lldL,\n", *((long long *)x)); - * } - * } - */ + /** + * Test data is output of the following program with metrohash implementation + * from https://github.com/jandrewrogers/MetroHash + *

+ * #include "metrohash64.h" + * #include + * #include + *

+ * int main() { + * uint8_t* x = (uint8_t*) malloc(8); + * uint8_t* src = (uint8_t*) malloc(1024); + * for (int i = 0; i < 1024; i++) { + * src[i] = (uint8_t) i; + * } + * printf("without seeds\n"); + * for (int i = 0; i <= 1024; i++) { + * MetroHash64::Hash(src, i, x); + * printf("%lldL,\n", *((long long *)x)); + * } + * printf("with seed 42\n"); + * for (int i = 0; i <= 1024; i++) { + * MetroHash64::Hash(src, i, x, 42); + * printf("%lldL,\n", *((long long *)x)); + * } + * } + */ public static final long[] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = { 8097384203561113213L, diff --git a/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java b/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java index 3a26c7e..ec516f1 100644 --- a/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java +++ b/src/test/java/net/openhft/hashing/ModernCompactStringHashTest.java @@ -6,9 +6,7 @@ import org.junit.Assume; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; public class ModernCompactStringHashTest { diff --git a/src/test/java/net/openhft/hashing/MurmurHash3Test.java b/src/test/java/net/openhft/hashing/MurmurHash3Test.java index 453ab64..f91d34e 100644 --- a/src/test/java/net/openhft/hashing/MurmurHash3Test.java +++ b/src/test/java/net/openhft/hashing/MurmurHash3Test.java @@ -20,10 +20,9 @@ import com.google.common.hash.Hashing; import org.junit.Test; -import java.util.Arrays; -import java.util.Random; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.Arrays; public class MurmurHash3Test { diff --git a/src/test/java/net/openhft/hashing/OriginalFarmHashTest.java b/src/test/java/net/openhft/hashing/OriginalFarmHashTest.java index eacc32e..2f09c8d 100644 --- a/src/test/java/net/openhft/hashing/OriginalFarmHashTest.java +++ b/src/test/java/net/openhft/hashing/OriginalFarmHashTest.java @@ -31,6 +31,7 @@ public class OriginalFarmHashTest { static final int kDataSize = 1 << 20; static final int kTestSize = 300; static final byte[] data = new byte[kDataSize]; + static { long a = 9; long b = 777; @@ -79,10 +80,10 @@ static long SEED1(int offset) { @Test public void testNa() { int expectedIndex = 0, i = 0; - for ( ; i < kTestSize - 1; i++) { + for (; i < kTestSize - 1; i++) { expectedIndex = testNa(i * i, i, expectedIndex); } - for ( ; i < kDataSize; i += i / 7) { + for (; i < kDataSize; i += i / 7) { expectedIndex = testNa(0, i, expectedIndex); } testNa(0, kDataSize, expectedIndex); @@ -110,10 +111,10 @@ static int testNa(int offset, int len, int expectedIndex) { @Test public void testUo() { int expectedIndex = 0, i = 0; - for ( ; i < kTestSize - 1; i++) { + for (; i < kTestSize - 1; i++) { expectedIndex = testUo(i * i, i, expectedIndex); } - for ( ; i < kDataSize; i += i / 7) { + for (; i < kDataSize; i += i / 7) { expectedIndex = testUo(0, i, expectedIndex); } testUo(0, kDataSize, expectedIndex); @@ -138,7 +139,7 @@ public void testUoGo() { for (Object[] g : GOLDEN_64) { long hash = (Long) g[0]; try { - byte[] s = ((String)g[1]).getBytes("US-ASCII"); + byte[] s = ((String) g[1]).getBytes("US-ASCII"); Assert.assertEquals(hash, LongHashFunction.farmUo().hashBytes(s)); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); diff --git a/src/test/java/net/openhft/hashing/PrimitivesTest.java b/src/test/java/net/openhft/hashing/PrimitivesTest.java index 4563479..102d8b7 100644 --- a/src/test/java/net/openhft/hashing/PrimitivesTest.java +++ b/src/test/java/net/openhft/hashing/PrimitivesTest.java @@ -2,9 +2,7 @@ import org.junit.Test; -import static java.nio.ByteOrder.BIG_ENDIAN; -import static java.nio.ByteOrder.LITTLE_ENDIAN; -import static java.nio.ByteOrder.nativeOrder; +import static java.nio.ByteOrder.*; import static org.junit.Assert.assertEquals; import static org.junit.Assume.assumeTrue; diff --git a/src/test/java/net/openhft/hashing/UnsafeAccessTest.java b/src/test/java/net/openhft/hashing/UnsafeAccessTest.java index dcd7f36..a91e696 100644 --- a/src/test/java/net/openhft/hashing/UnsafeAccessTest.java +++ b/src/test/java/net/openhft/hashing/UnsafeAccessTest.java @@ -6,9 +6,7 @@ import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; -import static java.nio.ByteOrder.BIG_ENDIAN; -import static java.nio.ByteOrder.LITTLE_ENDIAN; -import static java.nio.ByteOrder.nativeOrder; +import static java.nio.ByteOrder.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assume.assumeTrue; @@ -18,7 +16,7 @@ public class UnsafeAccessTest { @Parameters public static Object[] data() { - return new Object[] { UnsafeAccess.INSTANCE, UnsafeAccess.OLD_INSTANCE }; + return new Object[]{UnsafeAccess.INSTANCE, UnsafeAccess.OLD_INSTANCE}; } @Parameter @@ -54,7 +52,7 @@ public void testUnsafeAccess() { } { - final byte[] b = new byte[]{(byte)0xF4, 0x5D}; + final byte[] b = new byte[]{(byte) 0xF4, 0x5D}; assertEquals((int) b[0], unsafe.getByte(b, UnsafeAccess.BYTE_BASE)); assertEquals((int) b[1], unsafe.getByte(b, UnsafeAccess.BYTE_BASE + 1)); assertEquals(Primitives.unsignedByte(b[0]), unsafe.getUnsignedByte(b, UnsafeAccess.BYTE_BASE)); @@ -84,7 +82,7 @@ public void testUnsafeAccessUnalignLE() { } { - final byte[] b = new byte[]{(byte)0xF4, 0x5D}; + final byte[] b = new byte[]{(byte) 0xF4, 0x5D}; assertEquals((int) 0x5D, unsafe.getByte(b, UnsafeAccess.BYTE_BASE + 1)); assertEquals(Primitives.unsignedByte(0x5D), unsafe.getUnsignedByte(b, UnsafeAccess.BYTE_BASE + 1)); } @@ -112,7 +110,7 @@ public void testUnsafeAccessUnalignBE() { } { - final byte[] b = new byte[]{(byte)0xF4, 0x5D}; + final byte[] b = new byte[]{(byte) 0xF4, 0x5D}; assertEquals((int) 0x5D, unsafe.getByte(b, UnsafeAccess.BYTE_BASE + 1)); assertEquals(Primitives.unsignedByte(0x5D), unsafe.getUnsignedByte(b, UnsafeAccess.BYTE_BASE + 1)); } diff --git a/src/test/java/net/openhft/hashing/WyHashTest.java b/src/test/java/net/openhft/hashing/WyHashTest.java index b56a8ed..e6bbb6e 100644 --- a/src/test/java/net/openhft/hashing/WyHashTest.java +++ b/src/test/java/net/openhft/hashing/WyHashTest.java @@ -36,7 +36,7 @@ public void test(LongHashFunction wyHash, long[] hashesOfLoopingBytes) { for (int j = 0; j < data.length; j++) { data[j] = (byte) j; } - LongHashFunctionTest .test(wyHash, data, hashesOfLoopingBytes[len]); + LongHashFunctionTest.test(wyHash, data, hashesOfLoopingBytes[len]); } /** @@ -67,2058 +67,2058 @@ public void test(LongHashFunction wyHash, long[] hashesOfLoopingBytes) { * <\pre> */ public static final long[] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = { - 0L, - -1498634010482895780L, - 6867524088326895660L, - 269206059098007870L, - -4886887581681798391L, - 3928433339794945779L, - 4316332308770427980L, - 2615655046588972881L, - 1900500844844731087L, - -937305021312369991L, - -8876585030919011822L, - -8568794208905766378L, - -7560937143015008723L, - 8498693544545256400L, - -2419449035530425220L, - 3329598615825088111L, - 1210853880152044769L, - 8924597104910535362L, - -3295737048979845383L, - -2077067637562286605L, - -1011034785208955521L, - -7140824109018505684L, - 1461819519553440317L, - 6436392319919688449L, - 9118839121464630705L, - -2917786468093466294L, - 504959295268162643L, - 6865609001872362604L, - 1331148763751586565L, - 5194938495997054762L, - 2665520052525504553L, - 276933320889118143L, - 4905118367340856460L, - 2074482748007873417L, - 33988220393155982L, - -1886632289327107396L, - 1961403923654424835L, - -2534868615627330587L, - 3462266467782463357L, - 7919120157912374187L, - -89126594710480197L, - -7042017916137112880L, - -7849604837443256405L, - 7183458575501572456L, - 5774439312980039315L, - -6565296715949686971L, - 8732951222530004068L, - 1900291206658974389L, - 7866927889483112715L, - 7328496947698938651L, - -8414002129273563525L, - -7507611883654277681L, - 1048916663450809742L, - 2886294206178088467L, - -8219721567024751529L, - 7725050882468238784L, - 3754847308658349557L, - -8413245846548203550L, - -3076479495605594465L, - -3121134529382168760L, - -8550177436169846333L, - -7635987039377529922L, - -5313723440094816160L, - -4177524123888580462L, - -1094315098609866806L, - 6577764665351221181L, - -7451684539960092493L, - 7061343558406187853L, - 871230336086645006L, - 6267395254690800101L, - 3141612453381470612L, - -8952205469861911532L, - 4767899395611465842L, - 7630515440353450329L, - -4985889236947520435L, - 4353614766406020339L, - 6903511086527962847L, - -4820634093847096378L, - 6452963341373240239L, - 8594720565063264398L, - -299303866433612643L, - 5948128939845193681L, - -6327319179549631842L, - 1661386658896970098L, - -387220913420000811L, - -9142963141159743830L, - -3957881162477548163L, - 7835579812652104509L, - -2179101728939025569L, - 1409259865195553628L, - 3329985067144149794L, - -4622006820323901246L, - -5489854929168527846L, - -4192684064311628792L, - -5930581590656743655L, - -8741322520672067800L, - -2532269067473596306L, - 2794660858881925622L, - -1660759460598522315L, - 4890293817527089205L, - 5011673154728255657L, - -2422404023490478452L, - -5823317675052947328L, - -1972153552478886407L, - 855875383009846790L, - 4539038924804919368L, - -3429781972296775524L, - -933120655172824074L, - 5340485644774899680L, - 1224352437979479512L, - -4247440279147522491L, - -2847066616858361472L, - 7303140713793758036L, - 177699726658531463L, - 7295117342573216781L, - -4960156472424071480L, - 8110395551125556627L, - 4814552517606903675L, - -5765636104388650769L, - -6413724172541333072L, - 8304733428601507939L, - 143869199545215598L, - -3363348007324106812L, - 778524423687782971L, - -3153748338449493859L, - 4072736150578731467L, - 2759867216020429817L, - 2328407206204809068L, - 3183594959296292673L, - 4716260652336579034L, - -2306094442378564227L, - 1612703725746980307L, - 9169273487926974528L, - 1221567220993136926L, - -1580158544177522978L, - -7978689145799920414L, - -8935536723451615449L, - -5386522443941349619L, - -2260007907190275450L, - -6109689112492865066L, - -7269857258080875354L, - 120767029125806560L, - 8179378742614718442L, - -1054596932535254740L, - -4819959080878920419L, - 6750654725339344085L, - 839742699455186248L, - 6590957420819328903L, - -8962195670723273636L, - 2970575532853857622L, - -2914121199343336253L, - -4719180678962776867L, - -3866803542764213986L, - 7340712279894103874L, - 665981095963825401L, - -7610703223561970702L, - -2285269148746390312L, - -7903336846335812333L, - 7602163920871488336L, - -2475707530835373762L, - 6488428233646685175L, - 781770467078860396L, - -1896921154761119070L, - 3650082028082002274L, - 1859676323486474137L, - -9056242232568275385L, - -1916274702525507105L, - -3359763315783254668L, - -6899438582509090070L, - -7391229595698815015L, - 7793799255007638001L, - -4654796168571058118L, - -9069457371238954514L, - -9079499580790007240L, - -2167538533996933224L, - -5375580275118212442L, - 1932479471587420530L, - 463274931357170593L, - -3434738247190694006L, - 8225681262889934868L, - 670972606916628978L, - -7016577201793262587L, - 9186141629236930525L, - -7494961908382494386L, - 6018069173542321620L, - 3178094810629815034L, - 4206446522733994268L, - -6087839594407260931L, - 3028792124204271051L, - -5992000926787926144L, - -6045285586180402268L, - -2566939030601076745L, - -6419778085488192839L, - -5937870815253811034L, - 3037623662402648617L, - 8475134681257527331L, - 7525467631675910914L, - -2155136652979576665L, - -8863297785379055796L, - -3708604617726301534L, - -1690991326769386459L, - -4914650490954752560L, - -3651000998051367684L, - 2310224359054007710L, - 6467643434506892008L, - -4675387411483580919L, - 1539479589290018260L, - -1317482399971130537L, - 4787089544028336616L, - -817342235353043974L, - 9005897661744065787L, - 1698757063019545437L, - -7450744880655832349L, - 941242980692041666L, - 3855717121175377711L, - 1838418961320954867L, - 7906600640157184104L, - 143774240320811355L, - -5033235558726049955L, - -3733441418159723230L, - 6322249537999722411L, - -3599749198660319070L, - 7881889296519703891L, - 8772851375938262713L, - -3694154014800677764L, - 5483806649985491869L, - 7467568598910778939L, - -839413141520398979L, - 1922118942992405635L, - 5178389178007203495L, - -2131625735310863702L, - -5210713408719608360L, - 969214743442701574L, - -6694519095627761288L, - -3987528749564960054L, - 6145126602437587352L, - -3312790047326848561L, - -5928158217897491190L, - -163692375920080658L, - -4638104573766795427L, - -8806888994476878747L, - -5569512305780637370L, - 1905174746960402451L, - -8994865683955938409L, - 6363190415094303315L, - -819892343899481166L, - 4997088889036354237L, - 7165251770996374856L, - 2252387190424353838L, - 3749847241214246299L, - 7255309255472237037L, - 4672295531818402039L, - -2560356144353793581L, - -2883403067265782436L, - 1079945501265719009L, - -4510676817588967577L, - 373333767776611969L, - -5012601232582215618L, - 2359976143593903713L, - -219011861965226894L, - 76910311444724969L, - 2854997659137560722L, - -6663673552428958663L, - 1647372533507817437L, - -3677652995772257250L, - 1062322309494793766L, - 3997004911860361768L, - -6239801180306730115L, - 7679085503289673770L, - 1937634364969511157L, - 5848969401602626006L, - 6881011614306732306L, - -1181711090074996330L, - 9115958678061403357L, - -4697019334186712846L, - -7555505080733309776L, - 833987302221784302L, - 5435944218394230630L, - 6255423471362246568L, - -4754437678222079801L, - 4816793278931948413L, - 1100877215282697461L, - -8016274804264066913L, - -7426166309912307238L, - 4954658046266531508L, - -4883068330523614006L, - 7317707222197692142L, - -132182832923876333L, - -8068825386408665062L, - 4223343479296349312L, - -8975167582022794209L, - 121044807630038334L, - -6383751162555570203L, - -8622829604115563764L, - -5344448720560932522L, - -5623514837754212750L, - 5730174855784677314L, - 3652462989937797830L, - 4478407032758117542L, - 2265833848570320784L, - 6271663588896592981L, - -8981268861954876981L, - 2199940822940402275L, - -3590335709696386659L, - -6646866007057749522L, - 933450190390074330L, - -1705940515687714841L, - 884927789464592510L, - 7732852775367821028L, - -1725008633709952850L, - 3394484383328726796L, - 6799292447107791901L, - 4773322126911057201L, - -8847524026119006559L, - 1601292087637309633L, - 9085231169106063244L, - -1810226490203477297L, - 3740885817651637744L, - -7385020022373289763L, - 2121348550441645292L, - -8934827205753906340L, - 2329866036041432354L, - -227251566650479794L, - 778635064663790602L, - -5472060023053535116L, - -321365152251518886L, - 3413015614360083800L, - 6854233750120825103L, - -8179957420127792439L, - 7639860843374003692L, - -3294365432579777001L, - 7552965644538813699L, - -6829073195148823177L, - -6544243814787582018L, - 3276872521860349837L, - 1262482336572979429L, - -6035485817914735217L, - 7123327863090630643L, - -1419575113783159041L, - 4628009131887144546L, - 2592000227149193793L, - -5446709712701171970L, - -4786623131259234045L, - -2209160773748122650L, - 8047313604406463713L, - 2928998992221512765L, - 8881744382098607154L, - 5910178969134356556L, - 2892684451843776864L, - -7070070413419488908L, - 1140959062136881244L, - -8078877408786009860L, - 5222805670098495052L, - 1324778166912833091L, - 7845644310752162054L, - 6958124637538105999L, - -1400888392648874523L, - 2109573135688128455L, - -7865948962736451119L, - 4676890351917403373L, - 3174741654796657218L, - 514620636603694596L, - -5843197233618027131L, - -8822533246164651619L, - 7073040785885419375L, - -2228372994944279357L, - -979163503523055821L, - -6159677857222198592L, - 8520855780725828084L, - 4467908031177966524L, - 4623181254618087867L, - -7383960780180519764L, - 239794897939583881L, - -2449501378631335133L, - -9114494545950113117L, - -8576114508943907464L, - 7504752277411331892L, - -7009950139050754470L, - -7202878339609803777L, - 3502505583014180224L, - 3951294951154157069L, - 7576089410756827288L, - -4992190452267503827L, - 3759298924972701902L, - 5361054523231489156L, - 211310386754363706L, - -6228856565314106146L, - 680474239388747542L, - 2183261167073018417L, - 3717345151222475163L, - 8772076500587548312L, - 4345221692547451466L, - 1138257226251182865L, - -2662436603566678639L, - -4926523876409822165L, - -3678204040905789269L, - 8860732609728455709L, - 6897346961138467370L, - -1338981596745710341L, - -8468953950219880235L, - 486233297899205409L, - 6673618507643695244L, - 1938737376496949348L, - 2507410887406001878L, - -3144439725476898055L, - -636790656650957308L, - 4344459600416585073L, - 8802289277757075229L, - -1379964110832028405L, - 3060435899170352150L, - -2801307070927302409L, - -7124182447926601667L, - -7426433529387563337L, - 7001977894058124773L, - 3831629918356470166L, - -7304530994934688959L, - 7754766126986449104L, - -46130394912060400L, - -8185025239564030663L, - -6956120752394147061L, - 4788947004304391335L, - -1735188894957188142L, - 9113463202794835297L, - 9061503384633795978L, - 3807163083218760203L, - -2329524236876369592L, - 8363142198304187431L, - 4935678682189220391L, - -6502593394044097632L, - 9064904356860480362L, - -2044134484905048187L, - 8567519794665060422L, - 3904525302336061297L, - -1494404137865570930L, - -5818134796948330499L, - 8916224465542753907L, - -6810040832909920013L, - 7300268571307893571L, - 8665822462022449768L, - -130646649469545334L, - 8931475468018250160L, - -2817889287241953373L, - -2752837956949520680L, - -1276654552752920573L, - -2251442540884890384L, - -839799567481138562L, - 2986595498063065529L, - 7592128662766254437L, - 5065431482109049471L, - 3052000465060381141L, - 8064475279897785235L, - 7316665605154791806L, - -7296124855087242119L, - -1068075826697136964L, - 1770213836059184427L, - 6802179540194069850L, - 5235498833141060330L, - -8408647861923123811L, - -8554824869230440474L, - 7743295190330547469L, - 6188344344114106969L, - 8228222936284833122L, - 3344247964190287149L, - 414458000971249569L, - -2223421794494123215L, - 119196072452533464L, - 1767473452281958193L, - 5414804141160961127L, - -6164986093592204309L, - -6945097172273522587L, - 7543678863267970809L, - 5972029304048115321L, - 7964352772558153769L, - -8031602489285468891L, - 4513387372558218399L, - -4317501704056493461L, - -274621052405989180L, - 7357459993975469423L, - -1045104405025437444L, - 8789089337669501295L, - -1542665393152510095L, - -5503352729676411061L, - 454066729485099003L, - -4605997634839849907L, - 7986133233466526795L, - 7797356799500954521L, - -9136756413477760050L, - -3352377497517747454L, - -7663557526205276831L, - -1525996382926367358L, - 6802076880476427490L, - -6954802694827637538L, - -8255048613760674037L, - -5526865146075990207L, - -8041208983843583602L, - -2876214926964143851L, - -4567575438614223896L, - 8420564950974772325L, - -4468508733028315993L, - 2158430745359670554L, - -5782727846185414792L, - -3874464451992878487L, - -8557153996715396413L, - -8661029592684774411L, - -4150741558733167704L, - 4770959381850533581L, - -1372013076694700751L, - 7324757985668456281L, - 5602798167879679886L, - 7096916745991890202L, - 3359546006805092444L, - -5934158002733550535L, - 3518079055124118324L, - 3891916644964858524L, - -784545090218957019L, - 8609087702173814141L, - -4214391733469045745L, - -2044858518039349251L, - -3293020846953619138L, - -7669901992597447071L, - -5672416569520217737L, - -3662648759277482540L, - 7169982674540677627L, - -5034338530874716914L, - -4364910862609957183L, - 7039463956727691070L, - 4376009824957522714L, - 313781735218274235L, - -8374050652661964404L, - 245866763156781213L, - 7728750319168662084L, - 594262726005822013L, - 7249071001552727284L, - 6347219246484821270L, - 6926202384981930971L, - 412730668885611257L, - 462335472710927109L, - -348263357460866746L, - 2609062719003263340L, - 1486600821422386160L, - 4132108509971674644L, - 8030540528138614735L, - 4390114767626197726L, - 910347911083267698L, - 4296150444361133712L, - 5908327276875316267L, - 6462269834278773298L, - 1022138366617103631L, - 5383154957747795010L, - 5699575167827705734L, - -2652265514146457472L, - 2238012648012330901L, - -5288285844452580653L, - -2216751023690323971L, - -1798254526639229052L, - 8315911965214904362L, - -563311534821832764L, - -1984298076611665046L, - 7341064198541676544L, - 3795556264919263871L, - -881121796727972887L, - -2490810657935140123L, - 6330994053097077495L, - 1735731862607083753L, - 1821412119760767989L, - -4980141494405310L, - -5081188792462627828L, - -968905527778495175L, - 8787413501897229149L, - 6443042663738607800L, - 3692053332344295218L, - -2382648731027216801L, - 5921028055250520509L, - -4441446372395233901L, - 8057250897470973794L, - -2179625882359143302L, - -4585983332243873847L, - 2947899043243289973L, - -3598625264816669494L, - 7399975594911733454L, - 8846907058100841405L, - 8603925306148488337L, - 8723738803991223798L, - 5322899334586289468L, - 980873212211856324L, - 1004635762793822977L, - -2140100049088182929L, - -3651897446664191337L, - -1874000194611339405L, - 583292569907066994L, - 1976990985958368945L, - -9218950396095831894L, - -3373076707808283751L, - -5833521315607870794L, - 3429301542190478141L, - -5779101479993755753L, - -3292515863222404618L, - -734356228269251634L, - -1419711834445978806L, - 4791895985462274442L, - 558659404424630665L, - 4275995064472140735L, - 7226750437651616111L, - 5615235292948993742L, - 4861367471360311948L, - 4049264481777356211L, - -1835014487079257912L, - 4979204155403334102L, - 1560749888033433035L, - 905000432154591788L, - 2652083709010751184L, - -434390227817650528L, - -3344931822017511339L, - -4822779910956367280L, - 5882026350853463756L, - 5891977867625769091L, - 2576050208155010377L, - -6619518348855378096L, - -5742844076219814181L, - -1914025252482891199L, - 5421866639996215069L, - 7835065614735292470L, - 6475952342457673167L, - 4955638233787312652L, - 1871081664582907788L, - -7245345286793459755L, - -3526808804006913310L, - 8344018619352798022L, - 5358291849312032011L, - -6703839318935180537L, - -6055000653146022613L, - -4547726197375295714L, - -2022691831043772930L, - 6905477133149069142L, - 5578750882894839351L, - -2144291497652708501L, - 4762703426605093736L, - -5891027977685165043L, - -4718456023150759710L, - 2043414443352475790L, - -4859905028662199142L, - -5557172942093408989L, - 4188007248401731314L, - -2942301800843817532L, - -7954850101179530301L, - 4495970396795510187L, - 6186348734301669790L, - -3001408455591637606L, - -8982053599214642216L, - 3206742202353249401L, - -313214205344900099L, - 4889646506758624956L, - -8388345116324930401L, - -7881544699619548038L, - 1635696647773999186L, - 7402207885754426706L, - 4891433307203901702L, - -4902077413549687845L, - -5143362415788346631L, - -4439682815321989946L, - -9042829490377265502L, - -4792104448908161508L, - -6627704780170319053L, - -5929099532414229375L, - -2106815749065875905L, - 7153802770224100626L, - 6823686413158082729L, - 1694613412884784670L, - -4006378366105720051L, - 3578159103226821407L, - -1734412197339646213L, - -7830870208911511566L, - -5772771500325183897L, - -6370961521433155442L, - -441749519334552646L, - 1412754462081697221L, - 8641432394145297452L, - -4975119815461720445L, - 3065463668829511567L, - -1417732062874945313L, - -8665490603267793267L, - 7087497419346604712L, - -1054219113545905941L, - -1315389530554573357L, - 7307121779722859187L, - 2145881449095507057L, - -1356311243412327435L, - -1586722954636622149L, - -2596336211110400075L, - -3215891778864924520L, - 2985606461750734808L, - 4692985241349436947L, - -7071521356811106236L, - 987506433534876222L, - 742743288878802279L, - -7582066902960079495L, - -2199576919602302097L, - -4292471260346290085L, - 7557016375506342717L, - -174092040409188492L, - 6491426317028063034L, - 8822682594036660801L, - 7173417784955207190L, - 8551647075273107302L, - -7644205156880731114L, - 2369403682692200990L, - -6106179001069207874L, - 4406129042862978293L, - -5294299708922784965L, - 4517194244669198236L, - 5935865739771554409L, - -148579357454083417L, - -5274315200034319889L, - -5097950017153595353L, - -3022334830850024229L, - -6777482830421353059L, - -2313967150562967720L, - -1391991890442893937L, - -868882361960329098L, - -4058598280032086693L, - -2072498290023372165L, - -2078524543685149712L, - -8995602191301155697L, - -9177698560918006329L, - -3896826154277082645L, - -4805811619774811701L, - 4704091919527581969L, - -8267745047895479775L, - 8851711941947232288L, - -7190173558292582252L, - 2840928875881838186L, - -4726327121612974966L, - 4739308903198773507L, - 3567219622550820947L, - 7071819841015279071L, - 1838081917409050236L, - 5764863108848455953L, - -4900908742261783725L, - -9214052328693993926L, - -3738104023508183695L, - 9075020475259263468L, - 2384031765345940148L, - -5444918603598131168L, - -2882755332293334170L, - -5876017912667903002L, - 1468518394398751688L, - -94624357829376694L, - 1502968325367457055L, - 3212228973304759982L, - -6076409951803744617L, - -689621575143754807L, - -7544663587107097008L, - -8464517018621156157L, - -9197647440671761342L, - -1138277308728785000L, - 7911450175654362014L, - -2846463762797468283L, - -5779655457569633261L, - 1229156604453014638L, - -5248062133487718488L, - 1945087454960389231L, - 2291489842271385397L, - 4548491699913654765L, - 4776530359090895890L, - -2392184633655107718L, - -1866462256049641298L, - 3379059210862389839L, - 1324602936428062030L, - 4537114827125131113L, - 952752288945823129L, - 3565038799689635380L, - -4943156879148090116L, - -620677278985252287L, - -5343479831206832325L, - -5942934304939405391L, - -7430408163129035969L, - -8536378671288512743L, - -630422435482211312L, - -4059263730309361295L, - 8362955714824710045L, - 6715535958794722463L, - -4944093219667507205L, - 4750238213300021794L, - -8834529272883383766L, - 928202066153864099L, - 4277678786869773289L, - 5803777088958198033L, - 2532770551571706676L, - 8937228681131524098L, - -4349917458712392154L, - 3600518091981945868L, - 3641253327732529861L, - 2269352593538301269L, - 269968982007354668L, - -9126734426165655944L, - 299251652927012593L, - -2622198051228209602L, - -8324653355422469245L, - -390691951434421313L, - -2377466392094607664L, - -7705538047856565009L, - 4335372426529707859L, - -2498731359403232390L, - 2813626900624072081L, - -4153400007749091122L, - 7328219555534666722L, - -7039010207561583485L, - -7451340093255351815L, - 8300978712927459521L, - 7991017147293573613L, - 7339614609177704490L, - -5125145048677445929L, - -1538654431949953813L, - -3305023236591253586L, - -6649451688833693508L, - -5820953574235680980L, - -912420997561859658L, - -3902860965130038472L, - -4703516784403936152L, - 3949690979346927322L, - -5528618711335454103L, - -2895138419635669572L, - 6284706264052186570L, - 3181053554338548547L, - 8917972201915064935L, - 75545390955492453L, - 6617851455758380376L, - -8707286283526343202L, - 6458946651764889185L, - 2987210920096501853L, - -3929693201880566946L, - -7311177148068531782L, - 4694554226910788398L, - -328680149836377578L, - -6188879516160944336L, - -1439844932334130992L, - 7708794174024674351L, - -4972006945073432467L, - -3162414061439364796L, - 7611809776816354031L, - 7254917564661254243L, - 3667622699015156399L, - -4913423608887015660L, - -6406987107635608389L, - 7035993050305636880L, - 1916243288799539554L, - -6879510021825536938L, - -2337637717379887008L, - 2467748304124499564L, - -3927108882927586500L, - -2369728608878680941L, - 342563431112818562L, - -5912585188049034482L, - -407795551560657970L, - -903691070858875362L, - -2971339966384799256L, - -650451997911266170L, - 5242710773034780732L, - -1758576207105628707L, - -1470978453124678938L, - 2028635970527834903L, - 6815510071666420375L, - -7234436760336244906L, - 6292192056464010286L, - 1442992781227112073L, - 741439802185251252L, - 8259834200418148233L, - -8169078357231916499L, - -1797363372045868164L, - -3466386712830748319L, - 553979734832180798L, - 2513380028887544649L, - 2661079907020837034L, - -5749043704832338332L, - -4746726654147920522L, - 4037149160512845688L, - 8783332493545543365L, - 6975966824887269880L, - 2414109369471474312L, - 5221641322938052740L, - 1045377610832006372L, - 8220190173269826766L, - -4267642609168870565L, - -6726832047984956997L, - 4915477332941388735L, - 6608423042031786987L, - 6581279335256275269L, - -1248042010437529483L, - 2938297630330955554L, - 4806385874000231762L, - -2426409043681964977L, - -3104809890914424604L, - 3239277469128944935L, - -3228874498793910978L, - -5342097497391211924L, - -5044251361276447963L, - 6207287572362362872L, - 6453529115456288086L, - -7761442273817439921L, - -1313531713770046715L, - 8881673399342129140L, - 4733296612672962576L, - -3473666608340546150L, - 8218487469845557336L, - 4700027778130567975L, - -5543249054637254074L, - -1139018312153423389L, - -2628885986060279174L, - -962753284069616419L, - -1977142032804526516L, - 6646177420565083192L, - 8016625832549598730L, - -1342495141337498297L, - 3211076661681150725L, - 7846691090184096603L, - -5609697763635391879L, - 2769843206190578001L, - -5672542928916786367L, - 4598226438051963770L, - -3227148609660772768L, - -3607859173825103520L, - 5670249508182208346L, - -6032039770208777467L, - 2614105956519160427L, - 5083815977140776067L, - -3296597605117180179L, - -7021640596217776934L, - 4650797426085619966L, - 6823311525616632062L, - 7318563146604289182L, - -3249092227795437062L, - -151150995477552393L, - 153136448819291758L, - 443418003145395916L, - 330893611106491728L, - -8176197849722920156L, - -5799839357743111551L, - 2867443686326337937L, - 5834608113617061904L, - -5527344088399014587L, - 1370666271993552626L, - -9013120144216259368L, - 1830815874448486738L, - -3091499273874627758L, - 2439461791078633880L, - -1604733478398884862L, - -2833138167354744622L, - -8845858068800398866L, - 3394332891858442031L, - 3777164890336719073L, - -2607231551899902562L, - 2739493825272673913L, - 6829159159418711593L, - -2509633811118610608L, - 4359413808008559480L, - 8154016792499406661L, - 1004971369233421951L, - -3608591463620078287L, - 4138095872882887017L, - -2603875175400857352L, - -8405872505069427520L, - 1602648447388078826L, - -8268213664821963029L, - -7851183899871800583L, - 7988099858367774014L, - 5236015171155823561L, - -7662486771050598416L, - -892959823376427763L, - -9172278347517696397L, - -3334552067210399222L, - 1963387851673972629L, - 366925093822958196L, - -8737871286507690286L, - -4059561536773198338L, - 5578357435587801257L, - -4737036380408504897L, - -2389650777043999775L, - 4340566577553274925L, - 87873442854751345L, - 4155340801507615439L, - -2055658632596291829L, - 6753511476349576327L, - 6452063849292950509L, - -1603688271352032940L, - 1697703077026901826L, - 5824711473055577279L, - 1379237507098137739L, - -1685127774222319703L, - -3439406616052314190L, - -1744663886940391594L, - -7216395177905133758L, - 8010452920400446284L, - 4766353280757415234L, - 5289169306825991429L, - 8447139631505072923L, - 321854408757186899L, - 3617266287300740708L, - -4787302239589324619L, - -4363130050517248733L, - 7132767988848188413L, - -5874421566019315237L, - -1493418467779572102L, - -1040767190340986459L, - -5719181448516381271L, - 945641378172265342L, - 4317786055883622899L, - -3043053328324478777L, - 7736235059159196619L, - 100300833538974478L, - -3101949869641724204L, - -5639485198324936982L, - -8593145909773483082L, - -7461619124932989195L, - 7184437998425110153L, - 2326528031076754258L, - 6398542587063881263L, - 5121771660090392362L, - 2305396835393933680L, - -1749007542647542275L, - -8460868976489643710L, - 2812416063972701080L, - 7906577727755007976L, - 6878465050504315500L, - -3674658411106758781L, - -1455749094773635190L + 0L, + -1498634010482895780L, + 6867524088326895660L, + 269206059098007870L, + -4886887581681798391L, + 3928433339794945779L, + 4316332308770427980L, + 2615655046588972881L, + 1900500844844731087L, + -937305021312369991L, + -8876585030919011822L, + -8568794208905766378L, + -7560937143015008723L, + 8498693544545256400L, + -2419449035530425220L, + 3329598615825088111L, + 1210853880152044769L, + 8924597104910535362L, + -3295737048979845383L, + -2077067637562286605L, + -1011034785208955521L, + -7140824109018505684L, + 1461819519553440317L, + 6436392319919688449L, + 9118839121464630705L, + -2917786468093466294L, + 504959295268162643L, + 6865609001872362604L, + 1331148763751586565L, + 5194938495997054762L, + 2665520052525504553L, + 276933320889118143L, + 4905118367340856460L, + 2074482748007873417L, + 33988220393155982L, + -1886632289327107396L, + 1961403923654424835L, + -2534868615627330587L, + 3462266467782463357L, + 7919120157912374187L, + -89126594710480197L, + -7042017916137112880L, + -7849604837443256405L, + 7183458575501572456L, + 5774439312980039315L, + -6565296715949686971L, + 8732951222530004068L, + 1900291206658974389L, + 7866927889483112715L, + 7328496947698938651L, + -8414002129273563525L, + -7507611883654277681L, + 1048916663450809742L, + 2886294206178088467L, + -8219721567024751529L, + 7725050882468238784L, + 3754847308658349557L, + -8413245846548203550L, + -3076479495605594465L, + -3121134529382168760L, + -8550177436169846333L, + -7635987039377529922L, + -5313723440094816160L, + -4177524123888580462L, + -1094315098609866806L, + 6577764665351221181L, + -7451684539960092493L, + 7061343558406187853L, + 871230336086645006L, + 6267395254690800101L, + 3141612453381470612L, + -8952205469861911532L, + 4767899395611465842L, + 7630515440353450329L, + -4985889236947520435L, + 4353614766406020339L, + 6903511086527962847L, + -4820634093847096378L, + 6452963341373240239L, + 8594720565063264398L, + -299303866433612643L, + 5948128939845193681L, + -6327319179549631842L, + 1661386658896970098L, + -387220913420000811L, + -9142963141159743830L, + -3957881162477548163L, + 7835579812652104509L, + -2179101728939025569L, + 1409259865195553628L, + 3329985067144149794L, + -4622006820323901246L, + -5489854929168527846L, + -4192684064311628792L, + -5930581590656743655L, + -8741322520672067800L, + -2532269067473596306L, + 2794660858881925622L, + -1660759460598522315L, + 4890293817527089205L, + 5011673154728255657L, + -2422404023490478452L, + -5823317675052947328L, + -1972153552478886407L, + 855875383009846790L, + 4539038924804919368L, + -3429781972296775524L, + -933120655172824074L, + 5340485644774899680L, + 1224352437979479512L, + -4247440279147522491L, + -2847066616858361472L, + 7303140713793758036L, + 177699726658531463L, + 7295117342573216781L, + -4960156472424071480L, + 8110395551125556627L, + 4814552517606903675L, + -5765636104388650769L, + -6413724172541333072L, + 8304733428601507939L, + 143869199545215598L, + -3363348007324106812L, + 778524423687782971L, + -3153748338449493859L, + 4072736150578731467L, + 2759867216020429817L, + 2328407206204809068L, + 3183594959296292673L, + 4716260652336579034L, + -2306094442378564227L, + 1612703725746980307L, + 9169273487926974528L, + 1221567220993136926L, + -1580158544177522978L, + -7978689145799920414L, + -8935536723451615449L, + -5386522443941349619L, + -2260007907190275450L, + -6109689112492865066L, + -7269857258080875354L, + 120767029125806560L, + 8179378742614718442L, + -1054596932535254740L, + -4819959080878920419L, + 6750654725339344085L, + 839742699455186248L, + 6590957420819328903L, + -8962195670723273636L, + 2970575532853857622L, + -2914121199343336253L, + -4719180678962776867L, + -3866803542764213986L, + 7340712279894103874L, + 665981095963825401L, + -7610703223561970702L, + -2285269148746390312L, + -7903336846335812333L, + 7602163920871488336L, + -2475707530835373762L, + 6488428233646685175L, + 781770467078860396L, + -1896921154761119070L, + 3650082028082002274L, + 1859676323486474137L, + -9056242232568275385L, + -1916274702525507105L, + -3359763315783254668L, + -6899438582509090070L, + -7391229595698815015L, + 7793799255007638001L, + -4654796168571058118L, + -9069457371238954514L, + -9079499580790007240L, + -2167538533996933224L, + -5375580275118212442L, + 1932479471587420530L, + 463274931357170593L, + -3434738247190694006L, + 8225681262889934868L, + 670972606916628978L, + -7016577201793262587L, + 9186141629236930525L, + -7494961908382494386L, + 6018069173542321620L, + 3178094810629815034L, + 4206446522733994268L, + -6087839594407260931L, + 3028792124204271051L, + -5992000926787926144L, + -6045285586180402268L, + -2566939030601076745L, + -6419778085488192839L, + -5937870815253811034L, + 3037623662402648617L, + 8475134681257527331L, + 7525467631675910914L, + -2155136652979576665L, + -8863297785379055796L, + -3708604617726301534L, + -1690991326769386459L, + -4914650490954752560L, + -3651000998051367684L, + 2310224359054007710L, + 6467643434506892008L, + -4675387411483580919L, + 1539479589290018260L, + -1317482399971130537L, + 4787089544028336616L, + -817342235353043974L, + 9005897661744065787L, + 1698757063019545437L, + -7450744880655832349L, + 941242980692041666L, + 3855717121175377711L, + 1838418961320954867L, + 7906600640157184104L, + 143774240320811355L, + -5033235558726049955L, + -3733441418159723230L, + 6322249537999722411L, + -3599749198660319070L, + 7881889296519703891L, + 8772851375938262713L, + -3694154014800677764L, + 5483806649985491869L, + 7467568598910778939L, + -839413141520398979L, + 1922118942992405635L, + 5178389178007203495L, + -2131625735310863702L, + -5210713408719608360L, + 969214743442701574L, + -6694519095627761288L, + -3987528749564960054L, + 6145126602437587352L, + -3312790047326848561L, + -5928158217897491190L, + -163692375920080658L, + -4638104573766795427L, + -8806888994476878747L, + -5569512305780637370L, + 1905174746960402451L, + -8994865683955938409L, + 6363190415094303315L, + -819892343899481166L, + 4997088889036354237L, + 7165251770996374856L, + 2252387190424353838L, + 3749847241214246299L, + 7255309255472237037L, + 4672295531818402039L, + -2560356144353793581L, + -2883403067265782436L, + 1079945501265719009L, + -4510676817588967577L, + 373333767776611969L, + -5012601232582215618L, + 2359976143593903713L, + -219011861965226894L, + 76910311444724969L, + 2854997659137560722L, + -6663673552428958663L, + 1647372533507817437L, + -3677652995772257250L, + 1062322309494793766L, + 3997004911860361768L, + -6239801180306730115L, + 7679085503289673770L, + 1937634364969511157L, + 5848969401602626006L, + 6881011614306732306L, + -1181711090074996330L, + 9115958678061403357L, + -4697019334186712846L, + -7555505080733309776L, + 833987302221784302L, + 5435944218394230630L, + 6255423471362246568L, + -4754437678222079801L, + 4816793278931948413L, + 1100877215282697461L, + -8016274804264066913L, + -7426166309912307238L, + 4954658046266531508L, + -4883068330523614006L, + 7317707222197692142L, + -132182832923876333L, + -8068825386408665062L, + 4223343479296349312L, + -8975167582022794209L, + 121044807630038334L, + -6383751162555570203L, + -8622829604115563764L, + -5344448720560932522L, + -5623514837754212750L, + 5730174855784677314L, + 3652462989937797830L, + 4478407032758117542L, + 2265833848570320784L, + 6271663588896592981L, + -8981268861954876981L, + 2199940822940402275L, + -3590335709696386659L, + -6646866007057749522L, + 933450190390074330L, + -1705940515687714841L, + 884927789464592510L, + 7732852775367821028L, + -1725008633709952850L, + 3394484383328726796L, + 6799292447107791901L, + 4773322126911057201L, + -8847524026119006559L, + 1601292087637309633L, + 9085231169106063244L, + -1810226490203477297L, + 3740885817651637744L, + -7385020022373289763L, + 2121348550441645292L, + -8934827205753906340L, + 2329866036041432354L, + -227251566650479794L, + 778635064663790602L, + -5472060023053535116L, + -321365152251518886L, + 3413015614360083800L, + 6854233750120825103L, + -8179957420127792439L, + 7639860843374003692L, + -3294365432579777001L, + 7552965644538813699L, + -6829073195148823177L, + -6544243814787582018L, + 3276872521860349837L, + 1262482336572979429L, + -6035485817914735217L, + 7123327863090630643L, + -1419575113783159041L, + 4628009131887144546L, + 2592000227149193793L, + -5446709712701171970L, + -4786623131259234045L, + -2209160773748122650L, + 8047313604406463713L, + 2928998992221512765L, + 8881744382098607154L, + 5910178969134356556L, + 2892684451843776864L, + -7070070413419488908L, + 1140959062136881244L, + -8078877408786009860L, + 5222805670098495052L, + 1324778166912833091L, + 7845644310752162054L, + 6958124637538105999L, + -1400888392648874523L, + 2109573135688128455L, + -7865948962736451119L, + 4676890351917403373L, + 3174741654796657218L, + 514620636603694596L, + -5843197233618027131L, + -8822533246164651619L, + 7073040785885419375L, + -2228372994944279357L, + -979163503523055821L, + -6159677857222198592L, + 8520855780725828084L, + 4467908031177966524L, + 4623181254618087867L, + -7383960780180519764L, + 239794897939583881L, + -2449501378631335133L, + -9114494545950113117L, + -8576114508943907464L, + 7504752277411331892L, + -7009950139050754470L, + -7202878339609803777L, + 3502505583014180224L, + 3951294951154157069L, + 7576089410756827288L, + -4992190452267503827L, + 3759298924972701902L, + 5361054523231489156L, + 211310386754363706L, + -6228856565314106146L, + 680474239388747542L, + 2183261167073018417L, + 3717345151222475163L, + 8772076500587548312L, + 4345221692547451466L, + 1138257226251182865L, + -2662436603566678639L, + -4926523876409822165L, + -3678204040905789269L, + 8860732609728455709L, + 6897346961138467370L, + -1338981596745710341L, + -8468953950219880235L, + 486233297899205409L, + 6673618507643695244L, + 1938737376496949348L, + 2507410887406001878L, + -3144439725476898055L, + -636790656650957308L, + 4344459600416585073L, + 8802289277757075229L, + -1379964110832028405L, + 3060435899170352150L, + -2801307070927302409L, + -7124182447926601667L, + -7426433529387563337L, + 7001977894058124773L, + 3831629918356470166L, + -7304530994934688959L, + 7754766126986449104L, + -46130394912060400L, + -8185025239564030663L, + -6956120752394147061L, + 4788947004304391335L, + -1735188894957188142L, + 9113463202794835297L, + 9061503384633795978L, + 3807163083218760203L, + -2329524236876369592L, + 8363142198304187431L, + 4935678682189220391L, + -6502593394044097632L, + 9064904356860480362L, + -2044134484905048187L, + 8567519794665060422L, + 3904525302336061297L, + -1494404137865570930L, + -5818134796948330499L, + 8916224465542753907L, + -6810040832909920013L, + 7300268571307893571L, + 8665822462022449768L, + -130646649469545334L, + 8931475468018250160L, + -2817889287241953373L, + -2752837956949520680L, + -1276654552752920573L, + -2251442540884890384L, + -839799567481138562L, + 2986595498063065529L, + 7592128662766254437L, + 5065431482109049471L, + 3052000465060381141L, + 8064475279897785235L, + 7316665605154791806L, + -7296124855087242119L, + -1068075826697136964L, + 1770213836059184427L, + 6802179540194069850L, + 5235498833141060330L, + -8408647861923123811L, + -8554824869230440474L, + 7743295190330547469L, + 6188344344114106969L, + 8228222936284833122L, + 3344247964190287149L, + 414458000971249569L, + -2223421794494123215L, + 119196072452533464L, + 1767473452281958193L, + 5414804141160961127L, + -6164986093592204309L, + -6945097172273522587L, + 7543678863267970809L, + 5972029304048115321L, + 7964352772558153769L, + -8031602489285468891L, + 4513387372558218399L, + -4317501704056493461L, + -274621052405989180L, + 7357459993975469423L, + -1045104405025437444L, + 8789089337669501295L, + -1542665393152510095L, + -5503352729676411061L, + 454066729485099003L, + -4605997634839849907L, + 7986133233466526795L, + 7797356799500954521L, + -9136756413477760050L, + -3352377497517747454L, + -7663557526205276831L, + -1525996382926367358L, + 6802076880476427490L, + -6954802694827637538L, + -8255048613760674037L, + -5526865146075990207L, + -8041208983843583602L, + -2876214926964143851L, + -4567575438614223896L, + 8420564950974772325L, + -4468508733028315993L, + 2158430745359670554L, + -5782727846185414792L, + -3874464451992878487L, + -8557153996715396413L, + -8661029592684774411L, + -4150741558733167704L, + 4770959381850533581L, + -1372013076694700751L, + 7324757985668456281L, + 5602798167879679886L, + 7096916745991890202L, + 3359546006805092444L, + -5934158002733550535L, + 3518079055124118324L, + 3891916644964858524L, + -784545090218957019L, + 8609087702173814141L, + -4214391733469045745L, + -2044858518039349251L, + -3293020846953619138L, + -7669901992597447071L, + -5672416569520217737L, + -3662648759277482540L, + 7169982674540677627L, + -5034338530874716914L, + -4364910862609957183L, + 7039463956727691070L, + 4376009824957522714L, + 313781735218274235L, + -8374050652661964404L, + 245866763156781213L, + 7728750319168662084L, + 594262726005822013L, + 7249071001552727284L, + 6347219246484821270L, + 6926202384981930971L, + 412730668885611257L, + 462335472710927109L, + -348263357460866746L, + 2609062719003263340L, + 1486600821422386160L, + 4132108509971674644L, + 8030540528138614735L, + 4390114767626197726L, + 910347911083267698L, + 4296150444361133712L, + 5908327276875316267L, + 6462269834278773298L, + 1022138366617103631L, + 5383154957747795010L, + 5699575167827705734L, + -2652265514146457472L, + 2238012648012330901L, + -5288285844452580653L, + -2216751023690323971L, + -1798254526639229052L, + 8315911965214904362L, + -563311534821832764L, + -1984298076611665046L, + 7341064198541676544L, + 3795556264919263871L, + -881121796727972887L, + -2490810657935140123L, + 6330994053097077495L, + 1735731862607083753L, + 1821412119760767989L, + -4980141494405310L, + -5081188792462627828L, + -968905527778495175L, + 8787413501897229149L, + 6443042663738607800L, + 3692053332344295218L, + -2382648731027216801L, + 5921028055250520509L, + -4441446372395233901L, + 8057250897470973794L, + -2179625882359143302L, + -4585983332243873847L, + 2947899043243289973L, + -3598625264816669494L, + 7399975594911733454L, + 8846907058100841405L, + 8603925306148488337L, + 8723738803991223798L, + 5322899334586289468L, + 980873212211856324L, + 1004635762793822977L, + -2140100049088182929L, + -3651897446664191337L, + -1874000194611339405L, + 583292569907066994L, + 1976990985958368945L, + -9218950396095831894L, + -3373076707808283751L, + -5833521315607870794L, + 3429301542190478141L, + -5779101479993755753L, + -3292515863222404618L, + -734356228269251634L, + -1419711834445978806L, + 4791895985462274442L, + 558659404424630665L, + 4275995064472140735L, + 7226750437651616111L, + 5615235292948993742L, + 4861367471360311948L, + 4049264481777356211L, + -1835014487079257912L, + 4979204155403334102L, + 1560749888033433035L, + 905000432154591788L, + 2652083709010751184L, + -434390227817650528L, + -3344931822017511339L, + -4822779910956367280L, + 5882026350853463756L, + 5891977867625769091L, + 2576050208155010377L, + -6619518348855378096L, + -5742844076219814181L, + -1914025252482891199L, + 5421866639996215069L, + 7835065614735292470L, + 6475952342457673167L, + 4955638233787312652L, + 1871081664582907788L, + -7245345286793459755L, + -3526808804006913310L, + 8344018619352798022L, + 5358291849312032011L, + -6703839318935180537L, + -6055000653146022613L, + -4547726197375295714L, + -2022691831043772930L, + 6905477133149069142L, + 5578750882894839351L, + -2144291497652708501L, + 4762703426605093736L, + -5891027977685165043L, + -4718456023150759710L, + 2043414443352475790L, + -4859905028662199142L, + -5557172942093408989L, + 4188007248401731314L, + -2942301800843817532L, + -7954850101179530301L, + 4495970396795510187L, + 6186348734301669790L, + -3001408455591637606L, + -8982053599214642216L, + 3206742202353249401L, + -313214205344900099L, + 4889646506758624956L, + -8388345116324930401L, + -7881544699619548038L, + 1635696647773999186L, + 7402207885754426706L, + 4891433307203901702L, + -4902077413549687845L, + -5143362415788346631L, + -4439682815321989946L, + -9042829490377265502L, + -4792104448908161508L, + -6627704780170319053L, + -5929099532414229375L, + -2106815749065875905L, + 7153802770224100626L, + 6823686413158082729L, + 1694613412884784670L, + -4006378366105720051L, + 3578159103226821407L, + -1734412197339646213L, + -7830870208911511566L, + -5772771500325183897L, + -6370961521433155442L, + -441749519334552646L, + 1412754462081697221L, + 8641432394145297452L, + -4975119815461720445L, + 3065463668829511567L, + -1417732062874945313L, + -8665490603267793267L, + 7087497419346604712L, + -1054219113545905941L, + -1315389530554573357L, + 7307121779722859187L, + 2145881449095507057L, + -1356311243412327435L, + -1586722954636622149L, + -2596336211110400075L, + -3215891778864924520L, + 2985606461750734808L, + 4692985241349436947L, + -7071521356811106236L, + 987506433534876222L, + 742743288878802279L, + -7582066902960079495L, + -2199576919602302097L, + -4292471260346290085L, + 7557016375506342717L, + -174092040409188492L, + 6491426317028063034L, + 8822682594036660801L, + 7173417784955207190L, + 8551647075273107302L, + -7644205156880731114L, + 2369403682692200990L, + -6106179001069207874L, + 4406129042862978293L, + -5294299708922784965L, + 4517194244669198236L, + 5935865739771554409L, + -148579357454083417L, + -5274315200034319889L, + -5097950017153595353L, + -3022334830850024229L, + -6777482830421353059L, + -2313967150562967720L, + -1391991890442893937L, + -868882361960329098L, + -4058598280032086693L, + -2072498290023372165L, + -2078524543685149712L, + -8995602191301155697L, + -9177698560918006329L, + -3896826154277082645L, + -4805811619774811701L, + 4704091919527581969L, + -8267745047895479775L, + 8851711941947232288L, + -7190173558292582252L, + 2840928875881838186L, + -4726327121612974966L, + 4739308903198773507L, + 3567219622550820947L, + 7071819841015279071L, + 1838081917409050236L, + 5764863108848455953L, + -4900908742261783725L, + -9214052328693993926L, + -3738104023508183695L, + 9075020475259263468L, + 2384031765345940148L, + -5444918603598131168L, + -2882755332293334170L, + -5876017912667903002L, + 1468518394398751688L, + -94624357829376694L, + 1502968325367457055L, + 3212228973304759982L, + -6076409951803744617L, + -689621575143754807L, + -7544663587107097008L, + -8464517018621156157L, + -9197647440671761342L, + -1138277308728785000L, + 7911450175654362014L, + -2846463762797468283L, + -5779655457569633261L, + 1229156604453014638L, + -5248062133487718488L, + 1945087454960389231L, + 2291489842271385397L, + 4548491699913654765L, + 4776530359090895890L, + -2392184633655107718L, + -1866462256049641298L, + 3379059210862389839L, + 1324602936428062030L, + 4537114827125131113L, + 952752288945823129L, + 3565038799689635380L, + -4943156879148090116L, + -620677278985252287L, + -5343479831206832325L, + -5942934304939405391L, + -7430408163129035969L, + -8536378671288512743L, + -630422435482211312L, + -4059263730309361295L, + 8362955714824710045L, + 6715535958794722463L, + -4944093219667507205L, + 4750238213300021794L, + -8834529272883383766L, + 928202066153864099L, + 4277678786869773289L, + 5803777088958198033L, + 2532770551571706676L, + 8937228681131524098L, + -4349917458712392154L, + 3600518091981945868L, + 3641253327732529861L, + 2269352593538301269L, + 269968982007354668L, + -9126734426165655944L, + 299251652927012593L, + -2622198051228209602L, + -8324653355422469245L, + -390691951434421313L, + -2377466392094607664L, + -7705538047856565009L, + 4335372426529707859L, + -2498731359403232390L, + 2813626900624072081L, + -4153400007749091122L, + 7328219555534666722L, + -7039010207561583485L, + -7451340093255351815L, + 8300978712927459521L, + 7991017147293573613L, + 7339614609177704490L, + -5125145048677445929L, + -1538654431949953813L, + -3305023236591253586L, + -6649451688833693508L, + -5820953574235680980L, + -912420997561859658L, + -3902860965130038472L, + -4703516784403936152L, + 3949690979346927322L, + -5528618711335454103L, + -2895138419635669572L, + 6284706264052186570L, + 3181053554338548547L, + 8917972201915064935L, + 75545390955492453L, + 6617851455758380376L, + -8707286283526343202L, + 6458946651764889185L, + 2987210920096501853L, + -3929693201880566946L, + -7311177148068531782L, + 4694554226910788398L, + -328680149836377578L, + -6188879516160944336L, + -1439844932334130992L, + 7708794174024674351L, + -4972006945073432467L, + -3162414061439364796L, + 7611809776816354031L, + 7254917564661254243L, + 3667622699015156399L, + -4913423608887015660L, + -6406987107635608389L, + 7035993050305636880L, + 1916243288799539554L, + -6879510021825536938L, + -2337637717379887008L, + 2467748304124499564L, + -3927108882927586500L, + -2369728608878680941L, + 342563431112818562L, + -5912585188049034482L, + -407795551560657970L, + -903691070858875362L, + -2971339966384799256L, + -650451997911266170L, + 5242710773034780732L, + -1758576207105628707L, + -1470978453124678938L, + 2028635970527834903L, + 6815510071666420375L, + -7234436760336244906L, + 6292192056464010286L, + 1442992781227112073L, + 741439802185251252L, + 8259834200418148233L, + -8169078357231916499L, + -1797363372045868164L, + -3466386712830748319L, + 553979734832180798L, + 2513380028887544649L, + 2661079907020837034L, + -5749043704832338332L, + -4746726654147920522L, + 4037149160512845688L, + 8783332493545543365L, + 6975966824887269880L, + 2414109369471474312L, + 5221641322938052740L, + 1045377610832006372L, + 8220190173269826766L, + -4267642609168870565L, + -6726832047984956997L, + 4915477332941388735L, + 6608423042031786987L, + 6581279335256275269L, + -1248042010437529483L, + 2938297630330955554L, + 4806385874000231762L, + -2426409043681964977L, + -3104809890914424604L, + 3239277469128944935L, + -3228874498793910978L, + -5342097497391211924L, + -5044251361276447963L, + 6207287572362362872L, + 6453529115456288086L, + -7761442273817439921L, + -1313531713770046715L, + 8881673399342129140L, + 4733296612672962576L, + -3473666608340546150L, + 8218487469845557336L, + 4700027778130567975L, + -5543249054637254074L, + -1139018312153423389L, + -2628885986060279174L, + -962753284069616419L, + -1977142032804526516L, + 6646177420565083192L, + 8016625832549598730L, + -1342495141337498297L, + 3211076661681150725L, + 7846691090184096603L, + -5609697763635391879L, + 2769843206190578001L, + -5672542928916786367L, + 4598226438051963770L, + -3227148609660772768L, + -3607859173825103520L, + 5670249508182208346L, + -6032039770208777467L, + 2614105956519160427L, + 5083815977140776067L, + -3296597605117180179L, + -7021640596217776934L, + 4650797426085619966L, + 6823311525616632062L, + 7318563146604289182L, + -3249092227795437062L, + -151150995477552393L, + 153136448819291758L, + 443418003145395916L, + 330893611106491728L, + -8176197849722920156L, + -5799839357743111551L, + 2867443686326337937L, + 5834608113617061904L, + -5527344088399014587L, + 1370666271993552626L, + -9013120144216259368L, + 1830815874448486738L, + -3091499273874627758L, + 2439461791078633880L, + -1604733478398884862L, + -2833138167354744622L, + -8845858068800398866L, + 3394332891858442031L, + 3777164890336719073L, + -2607231551899902562L, + 2739493825272673913L, + 6829159159418711593L, + -2509633811118610608L, + 4359413808008559480L, + 8154016792499406661L, + 1004971369233421951L, + -3608591463620078287L, + 4138095872882887017L, + -2603875175400857352L, + -8405872505069427520L, + 1602648447388078826L, + -8268213664821963029L, + -7851183899871800583L, + 7988099858367774014L, + 5236015171155823561L, + -7662486771050598416L, + -892959823376427763L, + -9172278347517696397L, + -3334552067210399222L, + 1963387851673972629L, + 366925093822958196L, + -8737871286507690286L, + -4059561536773198338L, + 5578357435587801257L, + -4737036380408504897L, + -2389650777043999775L, + 4340566577553274925L, + 87873442854751345L, + 4155340801507615439L, + -2055658632596291829L, + 6753511476349576327L, + 6452063849292950509L, + -1603688271352032940L, + 1697703077026901826L, + 5824711473055577279L, + 1379237507098137739L, + -1685127774222319703L, + -3439406616052314190L, + -1744663886940391594L, + -7216395177905133758L, + 8010452920400446284L, + 4766353280757415234L, + 5289169306825991429L, + 8447139631505072923L, + 321854408757186899L, + 3617266287300740708L, + -4787302239589324619L, + -4363130050517248733L, + 7132767988848188413L, + -5874421566019315237L, + -1493418467779572102L, + -1040767190340986459L, + -5719181448516381271L, + 945641378172265342L, + 4317786055883622899L, + -3043053328324478777L, + 7736235059159196619L, + 100300833538974478L, + -3101949869641724204L, + -5639485198324936982L, + -8593145909773483082L, + -7461619124932989195L, + 7184437998425110153L, + 2326528031076754258L, + 6398542587063881263L, + 5121771660090392362L, + 2305396835393933680L, + -1749007542647542275L, + -8460868976489643710L, + 2812416063972701080L, + 7906577727755007976L, + 6878465050504315500L, + -3674658411106758781L, + -1455749094773635190L }; public static final long[] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = { - 0L, - -5489459004343878315L, - 7503380622199085724L, - 2441079805732305625L, - 8819902077857493254L, - -7239504485102480291L, - -9103724217032567499L, - 7826741851900927935L, - 7861549010645900695L, - -4129502239425616770L, - 4078461785955388090L, - 1489179179228483555L, - -6880302114450925784L, - -1359221788845957867L, - 3262871501411962535L, - 33112984866957419L, - 100800524801407501L, - -3943434617574838336L, - -5567763290832289441L, - -6049917652519314692L, - 3409418409813158633L, - -2513363768495658276L, - 4729321061686624929L, - 5115271314646777786L, - -1775717939635903349L, - -8985310044214288169L, - -5289981668663347291L, - 2657445282762234064L, - 1658189325818139403L, - 7040959815147060996L, - -8236343544564189629L, - -6468423844022575750L, - -1734633079588783454L, - -8679472524235675133L, - 8623155328902958458L, - 8266452376374499416L, - -7986536660276263608L, - -38125844968838697L, - 3921548615006566009L, - 4167944986113577315L, - 7096373300544578406L, - -560467948694959375L, - -850973896622675114L, - 6041177228348470283L, - -7420438933559505984L, - -7157017808797228913L, - 9217073653386571039L, - -7925541759804601833L, - -4487790335997352328L, - 2187762356575143872L, - -5206697366103859618L, - 8288284347584621435L, - 6423483699864562311L, - -1301663738927719460L, - 5991822234757129975L, - 8484285492972108171L, - 311551427639324312L, - 8099673191736882495L, - 4653698799511358644L, - 4648482686787053407L, - -4597597110260670199L, - 1984036580098860995L, - 3448207916911718973L, - -2419012589431525517L, - 8388910627173913596L, - 189931510972302233L, - 3424055321741735739L, - -945841679237989100L, - 2168309080935198613L, - 3930831257313125476L, - 5077730010723338083L, - 5376103945202976111L, - 7108178613986510272L, - -9053383358889392039L, - -2078618651987341503L, - 8653340598805107048L, - 8828877028299898393L, - -8807324610935730640L, - -5999341882281512306L, - -4455338180650516077L, - -2009585294493958968L, - 7588673118342431490L, - -6389009730910810602L, - -8947948912760624317L, - -202446748676143218L, - -6162519566164064386L, - -4803722494667158367L, - -8605895565747471606L, - 5066687539085198609L, - 4310933084750715996L, - -4304304530429964114L, - 7737891570612803812L, - -3921768646472251957L, - -773766867734108857L, - 1818530881116628286L, - -9067673379583734262L, - -6823589291299652903L, - 776981371466262375L, - -4725670966108995L, - -8569242227636325585L, - 7909516787010450443L, - -5409862721314071515L, - 1913390982618688260L, - 6633081673493660503L, - -3605710376875214656L, - -8651943069220377447L, - -3425208691350179262L, - 2023446091470969965L, - -2468046963501962333L, - -8040451662076760690L, - 6158975019111504792L, - 6451542295099535005L, - 1802801579248303870L, - 2903003428319375652L, - 2834890810006302360L, - -6999968617065854757L, - -5369183269958550280L, - -6215225450449404642L, - -4073062335503587325L, - 456244319192879701L, - -24866508719391059L, - 743755516945687656L, - 7224143490658054462L, - -3977052728265338488L, - 6697206251899645381L, - -1994430781487194731L, - -212878833179631937L, - -3790446480600918357L, - -8511592301089770863L, - 1219524981576986810L, - 4205669984974194347L, - -9209991568622991160L, - -8128478767060283641L, - -2076540995963994161L, - -2831442865177886383L, - -1554323285239301165L, - 1155483303982507802L, - 5625007334328700567L, - 7506810827241318270L, - 4850815999417875788L, - -8326271238555403498L, - -3594934673556658753L, - 9130555384341207831L, - -1636079010828843126L, - -5064854279878768025L, - 6320681008229340321L, - -7870114218944117341L, - 459008888574399930L, - -9220264964593181895L, - 6941777480363861135L, - 1923797770202213346L, - -7993097353081304854L, - -7062721428278188440L, - 4641857350677613467L, - -1122321128205157978L, - -3526624090474535074L, - 4944983273040270843L, - 2063583183742948633L, - 3655700015999632472L, - -5913958156741267094L, - 8613461621342346429L, - 3728928562759850702L, - 6241947623237199216L, - 3774760249391115825L, - 6588067708543859113L, - -315068792768811173L, - -5773745174066109816L, - -3452596043397112080L, - 7177068584300707868L, - 4097817609960514365L, - -5523936337054287311L, - 5444453562100935555L, - 3539268898986090748L, - 7209639972437712982L, - 8208887215850721310L, - -7584003436803008027L, - -586284534101862111L, - -6581923378985929195L, - -1292149830675494156L, - 8697160487577903529L, - 5250575745761625176L, - 8289951302281058324L, - 9086201969492098206L, - -9184690972075930116L, - -2558748134131757348L, - -9201085943428059583L, - -1203051916666479257L, - 1834444962634487203L, - 3751251954263485890L, - -9131637525800107438L, - -8564897964388077031L, - -4014235661520374127L, - 7772145975456897696L, - 7355322558781294763L, - 1785796348137315143L, - -1810503426695106112L, - -7963306922570812555L, - 8368320991787406185L, - 7378068988124953771L, - 3490895360405304927L, - -2006181578179635491L, - -5275131505037815605L, - 6086715123177826637L, - 1009907222295997078L, - -189851063854443982L, - -7046763987694627132L, - 4056906261431690499L, - 4216346710909753402L, - 8183939407068939669L, - 2208727954886688050L, - -1634098797909572318L, - 540308152596731090L, - -1727304011169135128L, - -6242236677749002446L, - 6755106734652766002L, - 9202496665027870588L, - 3145991544544797692L, - -6269373509996933125L, - 4266947436916246907L, - -3398567844975915797L, - 8384588213561617608L, - 5989354874425809092L, - -153343096544690395L, - 9134497380995453092L, - -6788300148488988381L, - -1072244206525774929L, - 2731859015443790841L, - -3870727816981171328L, - 3166678867327320482L, - 1782381207784406192L, - 582296485367088592L, - 1924609876720457074L, - 2020031065269578886L, - 8699089776427025205L, - -8250138664796740621L, - -8999944208955163022L, - -7762984786287364139L, - -7261637070280909069L, - 8156604099628561139L, - 1927922010019336920L, - -1965484533023120730L, - -7378358867965860473L, - 6664442544791033212L, - 8081003240836167908L, - -4972927228442651371L, - 7037220157993345548L, - -4215239911770630248L, - -5424767419067785938L, - -5015387983382506291L, - 3753298110869126767L, - 8912454012440748855L, - 6246157925622615315L, - -4131608429474620379L, - -8866364110645726391L, - -4098704456672758799L, - 6667152953392950525L, - -2762608273732169437L, - 3667940640226771520L, - 5470356938562609842L, - 244296890800468507L, - 7856373341189773146L, - 3177289659856312500L, - 4580751320975678335L, - 5452034875875902693L, - -6459973872666569214L, - 8625227864473625727L, - -9052197575017583830L, - -7608813006404804371L, - 9124264055991041910L, - -4100497818513510737L, - 2980793238691227316L, - 6575852184122601786L, - 2996374119615737222L, - -5870513842846624786L, - -8762559588158401352L, - -6912312183162430280L, - -8032694211707482067L, - -4215194693068873060L, - -8105263246073793266L, - -8307710354093860627L, - -2478197063796008569L, - 6680336333415266706L, - -3911773407997852436L, - -7238133989410260247L, - 8137218262646498370L, - 7578266702219259398L, - 4984246736570911861L, - 5740916903194578939L, - 4650616964627618168L, - 930361122203084377L, - -6713840012306591264L, - -6351841364919936067L, - -2925823570763349733L, - 2325060427136132089L, - 5274176558463348026L, - -1818816163370336308L, - 4226120637281533162L, - -8207986865454475590L, - -6725133576876609787L, - -1600898310239203030L, - 1696982907642760280L, - 3217068829621413413L, - 5726899844622119885L, - -5334923571927126756L, - 2497036294033639132L, - 735344340727198341L, - -8578481740421909478L, - 5911424493524947756L, - -2237081032372483426L, - -1561034557541861451L, - -7693466035562951498L, - -8752739978025721151L, - -3280877235853016561L, - -335598525248223652L, - -8083858348383020986L, - 6627393503177414372L, - -3295140360722222876L, - 4582776009525319397L, - -5331509940479931877L, - 7726342923596696881L, - 5192783923588484563L, - 5568191868601892365L, - -4393837608149654125L, - 1618228693783883350L, - 1865907879575939327L, - -6187340976863502879L, - -7405067505368332090L, - 8443777486378865412L, - 310723497241167764L, - -5731861018710458545L, - -5188200524108388224L, - -5634297329175284953L, - -7899478064688965957L, - 7020598068122504891L, - -4174871225816409135L, - 7104858324370686207L, - 1001810694886929241L, - 4733684478957873906L, - 1798707327797267468L, - 752841691753555520L, - -3603149832862524798L, - 1130977238495142718L, - 6955284253225269412L, - 2247585991738722824L, - 5340594336749478221L, - 3633355463323711913L, - 8199061420280246379L, - -9034722840567119949L, - -490757115109600212L, - 7729314659586557941L, - -7671659041667731989L, - 8094072612753317160L, - -1759769045835117937L, - -6152365461952206160L, - 3606911680259234419L, - 6955318748746854408L, - -1011200841397882883L, - 5519324885444860877L, - 639515187583097557L, - -8137297682181162942L, - 2539677958872014602L, - 8313575916214347743L, - -7407936988953985656L, - 2917949547560244958L, - -4496138768486595800L, - -333949342684348960L, - -4317613540520387633L, - 3175626083058125320L, - 3148487542664978970L, - 739198439328606230L, - -198883737414807980L, - 8353961470331151973L, - 311945919273194245L, - -7052740176726980689L, - 5254438376261024030L, - -7550828065282849515L, - -34611043042402666L, - -9223367429051483136L, - -3370299527924413091L, - -3126722705768731979L, - -7163303945559650746L, - 6785247517465168600L, - -7406637645862089930L, - 3385765690609235233L, - -2811478167849833354L, - 867164096842195609L, - -4105629147992376513L, - 3062984161819352214L, - -9109105071124058400L, - 6860897610277413293L, - -188188174565377756L, - 7884790815752132293L, - 6738195176410269361L, - 4393541369181811113L, - -4968060783295630360L, - 1281959927064810831L, - 7544219152372891202L, - -3139356250465507412L, - -4662764301598305279L, - -5309739957670290877L, - -2335698040008447736L, - -5063258188578883170L, - -6060472572881319296L, - 8510043957998376964L, - 8054425688228121580L, - 467181640856973250L, - -8554733707863771098L, - 3945436629188897073L, - -4648027966578763700L, - 1436821870625146671L, - -6039021841572044396L, - -162916729795043698L, - 1387478937752001176L, - -5009376788980435331L, - -427324746652961365L, - 9045326031349144872L, - -6571167574055307665L, - -7420045062343802233L, - -8281911816922916681L, - 4447883374750578122L, - 8857646523249955246L, - -5267905974004184533L, - -6586019939801565413L, - 7267509981674277869L, - -1730011012540783294L, - -3361327884510257968L, - 3153991252302571831L, - -8310723694192823368L, - 7365064041171947240L, - -7013288395764077337L, - 4424660961017823126L, - 7969284775663103753L, - -4673682312621214884L, - 2388177300282901685L, - 6610519624906161503L, - 8382367186870347676L, - 8011820517530369081L, - -3416914590527734423L, - -4432873885847563136L, - -1241220595388288096L, - 3560316095147026509L, - -1797075113553514394L, - 6552677553429396356L, - 6246332708352927155L, - 3861438072358225949L, - -8565290136579594910L, - -8002406576632498243L, - -6412781196438208222L, - -9047876088717010136L, - -8568000574169975921L, - 5244941923904200088L, - 1628817165486138289L, - 5749777718311982230L, - -8611048104500552826L, - -6407884750949781504L, - -8282995989967171744L, - -6031458083272026720L, - -1472077105364514517L, - 4504451286765383015L, - -418652306528352371L, - -4257356316730897484L, - -2957389181041677312L, - -1145720335115263201L, - -3091972849220173524L, - 8005939599601764433L, - -3417016708987198366L, - -6247258224636787950L, - -472464393458793289L, - 1487875631970459019L, - 4893795040625314681L, - 2729581410182440515L, - -5405273280140448608L, - 1452154199208270257L, - 4883843472429258182L, - -8796762596319773668L, - -5429154805367510111L, - 4426909737432342245L, - 7056415113393668414L, - 8774883135212925637L, - 8450999418184998816L, - 3820763711897833468L, - 3300743371144621367L, - -1630173808856631543L, - -8553736113528269822L, - -1370002862968307889L, - 9214585244396484676L, - 1427686269336175185L, - -3598631782642855473L, - -5269185928615394541L, - 216499523242669211L, - 7102788753870316442L, - 5649046266779873829L, - -4035565318503894376L, - -1855507138875094206L, - -5459594227201815570L, - -7410474841354966828L, - 6975082282771211247L, - -6353323886182944803L, - 646100630104660099L, - 7745081824763595518L, - 1579836547749948481L, - 7479608073819635972L, - -988819659251472110L, - 3121457552118354542L, - 1867337923564303955L, - 9039210151448164075L, - -6005672592365502974L, - 6809724817190798332L, - -8247807826434556808L, - 8599378181039531724L, - -8714366537708795385L, - 6194756214969034120L, - 1931855937995972224L, - 7780282029507594520L, - 3768324591352426949L, - 4770908273445282121L, - -5412117564459724461L, - -6910299206138527089L, - -750571165687777551L, - -3467143436546008630L, - -8778968277750614352L, - 4618269006460421671L, - 3784770542544192149L, - -6555035917940220116L, - 8763137794052904168L, - 2160001599658800708L, - 6579628917216038693L, - 7486800118422365343L, - -4727709771709935935L, - 9187028796349560592L, - -7646323237657128497L, - -7748151792724558120L, - -6629529116619603711L, - -3614919661598905131L, - -8926765781889646711L, - 4895079662109541742L, - 2313039280851327331L, - 8353059951121245572L, - -4361790301612843227L, - 878233584623997873L, - -5808341064891365335L, - 4957901996955185469L, - 722227598467337170L, - -8083855043640093449L, - 6296815072878721220L, - 3074098970376702630L, - 6487949451261677276L, - -8230337956949714079L, - 1227684096490474594L, - 3317131110226161460L, - 2781726232095396341L, - -9035241125603661424L, - 1004655391950987227L, - 757196511985132878L, - -4972385379979135932L, - 377837633918307403L, - -1837164923183207790L, - -5200366587699061855L, - 5619426661630165722L, - 9149546739708634949L, - -2161224822270988047L, - -8498758122904002877L, - -1903606037752461125L, - 4004956335353186480L, - 5899754692366277712L, - -8569895455403315824L, - 951203285725380985L, - -724485898478246754L, - -2310191424936462146L, - -1054133327199042402L, - -4761860002343924045L, - 2144188224512375766L, - -8618252392915479178L, - 562427488463506661L, - 4069612511580576356L, - 2846217274335476972L, - -5321770005300190195L, - -2665939903796278305L, - -225615242036287371L, - 8340124049763317532L, - -39328151188901959L, - -7704128105896373508L, - -6608889722744029365L, - 6847177601802070732L, - 5406538445625075780L, - 6056004216550410553L, - -6388427415087871994L, - -8510724109624398612L, - 1448506476683617231L, - 7013188100856212082L, - -6841370342344231710L, - -7996960406936053822L, - 5644557457158245692L, - -3296152646650497129L, - 3536461329613452151L, - -437075207063513146L, - -2301050489557934983L, - 7033064488351122705L, - 3720571868910950941L, - -8581343467023390064L, - -4996282238270355618L, - -4434808715189273218L, - -405745463035508082L, - 277285441155208541L, - 3640603191696429655L, - -6364389291678904211L, - 9077697777962306790L, - -4001601843892243802L, - 4036732856234956705L, - 5248392274720098326L, - 1116847972047877816L, - 4922394575619327211L, - -6285322752897148435L, - 7067487638261530629L, - 3473525332456520606L, - 1575187083569040662L, - -7670017995359806441L, - -6787510510738894320L, - 2880618714956167265L, - -5120445290790388729L, - -1947917760777447734L, - -7623296073694422101L, - 3252361779690367994L, - -8216056055022359562L, - 7525264382031021147L, - 2009893625701158286L, - -3406258625692336241L, - -2113315207827000149L, - -915671322135664152L, - -682373916879109470L, - 1102410309220747041L, - -3371660099417710298L, - 1284384932118496184L, - -7899332066557362531L, - 6082326747969637807L, - 6505116014978799418L, - -6638025017400409848L, - 8709456587813780355L, - 1040637469205493394L, - 7527200228140193048L, - -8009477968838239749L, - -7823164037283850971L, - -219876523001630476L, - -848139362896608550L, - 1659572939496253703L, - 8161950828762262292L, - -5426744617505876369L, - -6207765518458666734L, - 1330209524194208987L, - 312506988145426657L, - -8129873431497496113L, - 2982679062731022510L, - -5042254163968603642L, - 7189511553154561296L, - -7590604770017947250L, - 120767234548166783L, - 3585968789169172934L, - 2487430371362637909L, - -2117477977959815963L, - 6421046597883904862L, - 1915941733899660405L, - 7900047779862894999L, - -7543931826611217049L, - -4916952521775291426L, - -2868801994144941951L, - 6651512411349747168L, - 5311738336671629395L, - 1306146344435585753L, - 2360381402797636290L, - -7691226452323755207L, - -7944284715220814174L, - -278406581618280958L, - 1353480834890980580L, - -649067407317035048L, - -3147933535381057618L, - 8567698068491364114L, - 2639644310821531916L, - -2152161395283566770L, - -4888814748855310545L, - -6303207358154211232L, - -5099131870614196461L, - 1424098929808643092L, - -7162716687949255953L, - 2211086469787899963L, - 2852072241831923863L, - 4450856661460487818L, - 1332130522000219486L, - 4147251563283461874L, - 1207043674339706873L, - 5443671922124706933L, - 1900093839190289799L, - 7347503945522504540L, - 731422176531392690L, - -6899700774889484649L, - 7348057852476419965L, - 4763308267257593468L, - 70257218879991846L, - -739514492116955951L, - 7591767932477900284L, - -7791579872430789094L, - -5400779832289360193L, - -5360582829574801216L, - 6569971639852448678L, - 6160828497878986046L, - -1727168098652705184L, - 2168846004878378381L, - 3297327696375153959L, - 6816148183875835322L, - 6384670180559749639L, - 5098012111875182199L, - -8698209070789796773L, - 7063131632249681588L, - -994727287627957439L, - -8454912490309479278L, - -1616686461984094239L, - 1344308255896663208L, - -8614195194739181643L, - 3663344734731025818L, - 1074555005632296286L, - -891663858889754871L, - 7659504325229552894L, - 7916780674786126372L, - 8131132452406873222L, - -8409366302969284111L, - -7706327771470710338L, - -6629724794338812712L, - 4368055399977230653L, - -7898426087691236094L, - -8547784929920600040L, - -3916622571725474306L, - -4989308590637893844L, - -4255097229406935303L, - -8312609963939033197L, - 6449019140953263140L, - 5157342915532938711L, - 2114971170894382906L, - -3301242078535642691L, - -8424713197061111009L, - -4112134632049136236L, - 6249939489475102785L, - -6545073932128498060L, - -7043982864808573077L, - 6372613537930878573L, - 3190762373477289654L, - -2561239600356400775L, - 5207465341857679769L, - -6030085238141555836L, - 1973763449748050094L, - -2775325371903939992L, - 5477072914568061968L, - -8020494920018725702L, - -6778226228458777374L, - -2143361845827059097L, - -322386110818436422L, - 8486418337526930389L, - 5809129796682159464L, - -229942269923625040L, - -2016398216082799086L, - 4390670686371535226L, - -2276539331110400014L, - 8774439736263797799L, - 2316161663149901044L, - -5179580561974546556L, - -2396133401944865178L, - 3993962098659830835L, - 5629462452797886102L, - -5192061905328685380L, - 5410941996746617173L, - -3413195609621963464L, - -3061527928424392689L, - -3054113352229014259L, - -6424671610054662331L, - 9078610721616192048L, - -8898368096446875621L, - -8847632839009160349L, - -2332831971225170476L, - 3877449624663826166L, - -1998707448586751868L, - 5429087783572068454L, - 7505803154815651797L, - -6830143293644567388L, - 9027942884466367570L, - -5480807710956981276L, - 6168732146645754047L, - 8449301918694745548L, - 8778131551317466896L, - -1532492605199755867L, - -5391910637120789750L, - -5181509335176571510L, - 4222261527096078209L, - -68830318451459248L, - 8424841595605316764L, - -1190497481446057488L, - -5111948271985560837L, - 6030679480752773280L, - 7083507386503347300L, - -7935292289390985767L, - 8633627957234765752L, - 3577142810841159035L, - -250643146821978960L, - -4509721932431137882L, - 1505984612542211946L, - -6225351760438749240L, - 2182044745474903681L, - 7360081805774852071L, - -6980851881719350610L, - 606607963933040411L, - -5770107456508471265L, - 6205171527781848205L, - -3033545694812095937L, - 3583699718972282357L, - -7909170363462215258L, - -7171285223522587462L, - -1732747624639492792L, - 1139035341695075787L, - -293770954049652554L, - 8082120553607704108L, - -1767102175355955963L, - 7028133695751489509L, - 8595468330969519695L, - -4137307279143322835L, - -1088171437960554838L, - -4259340386446889998L, - 21294966289363633L, - -591949962374694703L, - -8837800592081259554L, - 7601644682819323767L, - -982502680195313135L, - 4181853267649918079L, - -5294003730853637099L, - -9158462991451185546L, - 7714670871787985179L, - -2721092666693913595L, - -720896668009511516L, - 4921838985018879422L, - -5038198705157071079L, - 7630728150546004158L, - 161966667436904740L, - -6529489221033141970L, - -483227329696642903L, - 2849537400103054469L, - -5932420765747592953L, - 3979533979134217316L, - -4049239836784843381L, - 5757146880398784254L, - 5806736286865906304L, - -8474302415960396385L, - -7391831815026906062L, - 8483126874968724489L, - 5557012499729359067L, - 4450718684927895135L, - 45335272732612289L, - -3785965163879210184L, - -1898242962714602224L, - -3364618253842484328L, - 7668403852309119835L, - 2092013133434607977L, - -1792300051264582572L, - 4204792673868607151L, - 4506602674596874571L, - -2561418149393223402L, - 7840286404246905129L, - -1035302472383225621L, - 2052650440950159550L, - 3385198385403224840L, - 7801853565618136124L, - 8158750483397835365L, - -7255481277968854565L, - -9050796656268415729L, - 7872874903061363846L, - -6332810502682885990L, - 4195093936537787159L, - 4140384146136775979L, - -3176676578208440523L, - -23527475436056846L, - 4821243657012565340L, - 2886979330017289487L, - 7170512846071359835L, - -6693771254646812923L, - 2266839597848142710L, - 3688056798561584424L, - 7956035795239686169L, - 4088975310233216058L, - -8662929922277559505L, - 4700022330330092123L, - 1044087464966463501L, - -3346284225769510392L, - -1166910579445681945L, - 3872703144237011548L, - 8501175525170010672L, - -6207437985662953078L, - -8733361112153680184L, - -3983180467171621870L, - 2283374194446411819L, - -6768484891471740518L, - 8044328097415285480L, - 1443377185537854020L, - 6803666844639402915L, - 8720154422929864332L, - -2537061102409854144L, - -515858108659325765L, - -1158565680316859334L, - -663545770006278500L, - 5112621109506791791L, - -3092170124310912387L, - 7889395149687448634L, - 3388633789092670761L, - -4176247842082877688L, - 8523663650288415701L, - 8461829646589019728L, - 4476120923918733118L, - 4955138021944824086L, - -8201820083387949902L, - -5150243375844302061L, - -6574687189541337134L, - 1813511165037620728L, - -6609152628982158385L, - 8442952354678524497L, - -7676351795757159272L, - -8444140555968619192L, - -6601786601773499005L, - 2179080756673506193L, - -3666129723434408178L, - -6776769795366302107L, - 4171664079486791081L, - -5452069571377540094L, - 359346427326135662L, - 2943062004262958454L, - -3921968176415799286L, - -134281347921607697L, - -8484249901958594015L, - 2812222074991563409L, - 6633639557063290973L, - -592722373574704367L, - 3584411287925175652L, - 354153167171955028L, - 5447276746665911196L, - -8076348065615557008L, - 7731333241037517938L, - 3253442384900678998L, - -5522359985224379236L, - -6208482024641614158L, - -7364261433707360458L, - -5906718475206754288L, - -2204545928435159171L, - -2795996564005833532L, - 2349222489800990019L, - -2358167389589298636L, - -1617861920532466248L, - -5097493153019151553L, - 898922054995315500L, - 3869670625351897503L, - -6636810950712802069L, - 5490098271052481169L, - -6176774370284978063L, - 6938938509865848385L, - -4161311926638539187L, - 3014272433254839403L, - 9058504699799497601L, - 8524360852674201045L, - -740764664775712722L, - -5679661123465313250L, - -5211931178887212388L, - -7017041889364832492L, - -3265178850476174256L, - -1499900928604101474L, - -4067493147979900667L, - 7299368378152484612L, - -7198659177748600436L, - -2979171190660530337L, - -2762966740484030759L, - -7465049739128224935L, - 3612078396397763590L, - 266194042468197276L, - 5473972901094176230L, - 1189281358884994281L, - -1442205020880436346L, - 2879820564038232304L, - 43850317677405067L, - -4454333694153391476L, - 2645494799086526410L, - 3524717291729262494L, - -1894484565386325644L, - 4470670853232773914L, - 3053558524768124235L, - -6378696765233153672L, - 1358648698333278216L, - 8016007574038246972L, - 1967787619451912192L, - -7471676932864790027L, - 8977236026465107675L, - -2387834721762557666L, - 3231705025344572693L, - -4855075972961874506L, - -4885183281004063488L, - 8097441972752472290L, - -5620463229031782622L, - 7574868212737343521L, - 8681941269840717726L, - -3486423124456001000L, - 5744244643650494004L, - 1014205046998613439L, - -3068068226567078353L, - -6908549673521465879L, - -1963051143946794321L, - -7035572219116690072L, - 1540941112525663170L, - -6001520532777183018L, - -6097551378241760053L, - 2960057374064581400L, - 3321150298365188778L, - 6355960073926449062L, - -7405638803189110774L, - 3687349663678072492L, - 7457820208992039828L, - 4506866448636890209L, - -4654784871604524478L, - -6973401381709164081L, - 3047431536639897259L, - 3083474008161625734L, - 7390801469345280746L, - -8119102525062060290L, - -2941186586599229109L, - 6543095150723391014L, - 1289924509787893294L + 0L, + -5489459004343878315L, + 7503380622199085724L, + 2441079805732305625L, + 8819902077857493254L, + -7239504485102480291L, + -9103724217032567499L, + 7826741851900927935L, + 7861549010645900695L, + -4129502239425616770L, + 4078461785955388090L, + 1489179179228483555L, + -6880302114450925784L, + -1359221788845957867L, + 3262871501411962535L, + 33112984866957419L, + 100800524801407501L, + -3943434617574838336L, + -5567763290832289441L, + -6049917652519314692L, + 3409418409813158633L, + -2513363768495658276L, + 4729321061686624929L, + 5115271314646777786L, + -1775717939635903349L, + -8985310044214288169L, + -5289981668663347291L, + 2657445282762234064L, + 1658189325818139403L, + 7040959815147060996L, + -8236343544564189629L, + -6468423844022575750L, + -1734633079588783454L, + -8679472524235675133L, + 8623155328902958458L, + 8266452376374499416L, + -7986536660276263608L, + -38125844968838697L, + 3921548615006566009L, + 4167944986113577315L, + 7096373300544578406L, + -560467948694959375L, + -850973896622675114L, + 6041177228348470283L, + -7420438933559505984L, + -7157017808797228913L, + 9217073653386571039L, + -7925541759804601833L, + -4487790335997352328L, + 2187762356575143872L, + -5206697366103859618L, + 8288284347584621435L, + 6423483699864562311L, + -1301663738927719460L, + 5991822234757129975L, + 8484285492972108171L, + 311551427639324312L, + 8099673191736882495L, + 4653698799511358644L, + 4648482686787053407L, + -4597597110260670199L, + 1984036580098860995L, + 3448207916911718973L, + -2419012589431525517L, + 8388910627173913596L, + 189931510972302233L, + 3424055321741735739L, + -945841679237989100L, + 2168309080935198613L, + 3930831257313125476L, + 5077730010723338083L, + 5376103945202976111L, + 7108178613986510272L, + -9053383358889392039L, + -2078618651987341503L, + 8653340598805107048L, + 8828877028299898393L, + -8807324610935730640L, + -5999341882281512306L, + -4455338180650516077L, + -2009585294493958968L, + 7588673118342431490L, + -6389009730910810602L, + -8947948912760624317L, + -202446748676143218L, + -6162519566164064386L, + -4803722494667158367L, + -8605895565747471606L, + 5066687539085198609L, + 4310933084750715996L, + -4304304530429964114L, + 7737891570612803812L, + -3921768646472251957L, + -773766867734108857L, + 1818530881116628286L, + -9067673379583734262L, + -6823589291299652903L, + 776981371466262375L, + -4725670966108995L, + -8569242227636325585L, + 7909516787010450443L, + -5409862721314071515L, + 1913390982618688260L, + 6633081673493660503L, + -3605710376875214656L, + -8651943069220377447L, + -3425208691350179262L, + 2023446091470969965L, + -2468046963501962333L, + -8040451662076760690L, + 6158975019111504792L, + 6451542295099535005L, + 1802801579248303870L, + 2903003428319375652L, + 2834890810006302360L, + -6999968617065854757L, + -5369183269958550280L, + -6215225450449404642L, + -4073062335503587325L, + 456244319192879701L, + -24866508719391059L, + 743755516945687656L, + 7224143490658054462L, + -3977052728265338488L, + 6697206251899645381L, + -1994430781487194731L, + -212878833179631937L, + -3790446480600918357L, + -8511592301089770863L, + 1219524981576986810L, + 4205669984974194347L, + -9209991568622991160L, + -8128478767060283641L, + -2076540995963994161L, + -2831442865177886383L, + -1554323285239301165L, + 1155483303982507802L, + 5625007334328700567L, + 7506810827241318270L, + 4850815999417875788L, + -8326271238555403498L, + -3594934673556658753L, + 9130555384341207831L, + -1636079010828843126L, + -5064854279878768025L, + 6320681008229340321L, + -7870114218944117341L, + 459008888574399930L, + -9220264964593181895L, + 6941777480363861135L, + 1923797770202213346L, + -7993097353081304854L, + -7062721428278188440L, + 4641857350677613467L, + -1122321128205157978L, + -3526624090474535074L, + 4944983273040270843L, + 2063583183742948633L, + 3655700015999632472L, + -5913958156741267094L, + 8613461621342346429L, + 3728928562759850702L, + 6241947623237199216L, + 3774760249391115825L, + 6588067708543859113L, + -315068792768811173L, + -5773745174066109816L, + -3452596043397112080L, + 7177068584300707868L, + 4097817609960514365L, + -5523936337054287311L, + 5444453562100935555L, + 3539268898986090748L, + 7209639972437712982L, + 8208887215850721310L, + -7584003436803008027L, + -586284534101862111L, + -6581923378985929195L, + -1292149830675494156L, + 8697160487577903529L, + 5250575745761625176L, + 8289951302281058324L, + 9086201969492098206L, + -9184690972075930116L, + -2558748134131757348L, + -9201085943428059583L, + -1203051916666479257L, + 1834444962634487203L, + 3751251954263485890L, + -9131637525800107438L, + -8564897964388077031L, + -4014235661520374127L, + 7772145975456897696L, + 7355322558781294763L, + 1785796348137315143L, + -1810503426695106112L, + -7963306922570812555L, + 8368320991787406185L, + 7378068988124953771L, + 3490895360405304927L, + -2006181578179635491L, + -5275131505037815605L, + 6086715123177826637L, + 1009907222295997078L, + -189851063854443982L, + -7046763987694627132L, + 4056906261431690499L, + 4216346710909753402L, + 8183939407068939669L, + 2208727954886688050L, + -1634098797909572318L, + 540308152596731090L, + -1727304011169135128L, + -6242236677749002446L, + 6755106734652766002L, + 9202496665027870588L, + 3145991544544797692L, + -6269373509996933125L, + 4266947436916246907L, + -3398567844975915797L, + 8384588213561617608L, + 5989354874425809092L, + -153343096544690395L, + 9134497380995453092L, + -6788300148488988381L, + -1072244206525774929L, + 2731859015443790841L, + -3870727816981171328L, + 3166678867327320482L, + 1782381207784406192L, + 582296485367088592L, + 1924609876720457074L, + 2020031065269578886L, + 8699089776427025205L, + -8250138664796740621L, + -8999944208955163022L, + -7762984786287364139L, + -7261637070280909069L, + 8156604099628561139L, + 1927922010019336920L, + -1965484533023120730L, + -7378358867965860473L, + 6664442544791033212L, + 8081003240836167908L, + -4972927228442651371L, + 7037220157993345548L, + -4215239911770630248L, + -5424767419067785938L, + -5015387983382506291L, + 3753298110869126767L, + 8912454012440748855L, + 6246157925622615315L, + -4131608429474620379L, + -8866364110645726391L, + -4098704456672758799L, + 6667152953392950525L, + -2762608273732169437L, + 3667940640226771520L, + 5470356938562609842L, + 244296890800468507L, + 7856373341189773146L, + 3177289659856312500L, + 4580751320975678335L, + 5452034875875902693L, + -6459973872666569214L, + 8625227864473625727L, + -9052197575017583830L, + -7608813006404804371L, + 9124264055991041910L, + -4100497818513510737L, + 2980793238691227316L, + 6575852184122601786L, + 2996374119615737222L, + -5870513842846624786L, + -8762559588158401352L, + -6912312183162430280L, + -8032694211707482067L, + -4215194693068873060L, + -8105263246073793266L, + -8307710354093860627L, + -2478197063796008569L, + 6680336333415266706L, + -3911773407997852436L, + -7238133989410260247L, + 8137218262646498370L, + 7578266702219259398L, + 4984246736570911861L, + 5740916903194578939L, + 4650616964627618168L, + 930361122203084377L, + -6713840012306591264L, + -6351841364919936067L, + -2925823570763349733L, + 2325060427136132089L, + 5274176558463348026L, + -1818816163370336308L, + 4226120637281533162L, + -8207986865454475590L, + -6725133576876609787L, + -1600898310239203030L, + 1696982907642760280L, + 3217068829621413413L, + 5726899844622119885L, + -5334923571927126756L, + 2497036294033639132L, + 735344340727198341L, + -8578481740421909478L, + 5911424493524947756L, + -2237081032372483426L, + -1561034557541861451L, + -7693466035562951498L, + -8752739978025721151L, + -3280877235853016561L, + -335598525248223652L, + -8083858348383020986L, + 6627393503177414372L, + -3295140360722222876L, + 4582776009525319397L, + -5331509940479931877L, + 7726342923596696881L, + 5192783923588484563L, + 5568191868601892365L, + -4393837608149654125L, + 1618228693783883350L, + 1865907879575939327L, + -6187340976863502879L, + -7405067505368332090L, + 8443777486378865412L, + 310723497241167764L, + -5731861018710458545L, + -5188200524108388224L, + -5634297329175284953L, + -7899478064688965957L, + 7020598068122504891L, + -4174871225816409135L, + 7104858324370686207L, + 1001810694886929241L, + 4733684478957873906L, + 1798707327797267468L, + 752841691753555520L, + -3603149832862524798L, + 1130977238495142718L, + 6955284253225269412L, + 2247585991738722824L, + 5340594336749478221L, + 3633355463323711913L, + 8199061420280246379L, + -9034722840567119949L, + -490757115109600212L, + 7729314659586557941L, + -7671659041667731989L, + 8094072612753317160L, + -1759769045835117937L, + -6152365461952206160L, + 3606911680259234419L, + 6955318748746854408L, + -1011200841397882883L, + 5519324885444860877L, + 639515187583097557L, + -8137297682181162942L, + 2539677958872014602L, + 8313575916214347743L, + -7407936988953985656L, + 2917949547560244958L, + -4496138768486595800L, + -333949342684348960L, + -4317613540520387633L, + 3175626083058125320L, + 3148487542664978970L, + 739198439328606230L, + -198883737414807980L, + 8353961470331151973L, + 311945919273194245L, + -7052740176726980689L, + 5254438376261024030L, + -7550828065282849515L, + -34611043042402666L, + -9223367429051483136L, + -3370299527924413091L, + -3126722705768731979L, + -7163303945559650746L, + 6785247517465168600L, + -7406637645862089930L, + 3385765690609235233L, + -2811478167849833354L, + 867164096842195609L, + -4105629147992376513L, + 3062984161819352214L, + -9109105071124058400L, + 6860897610277413293L, + -188188174565377756L, + 7884790815752132293L, + 6738195176410269361L, + 4393541369181811113L, + -4968060783295630360L, + 1281959927064810831L, + 7544219152372891202L, + -3139356250465507412L, + -4662764301598305279L, + -5309739957670290877L, + -2335698040008447736L, + -5063258188578883170L, + -6060472572881319296L, + 8510043957998376964L, + 8054425688228121580L, + 467181640856973250L, + -8554733707863771098L, + 3945436629188897073L, + -4648027966578763700L, + 1436821870625146671L, + -6039021841572044396L, + -162916729795043698L, + 1387478937752001176L, + -5009376788980435331L, + -427324746652961365L, + 9045326031349144872L, + -6571167574055307665L, + -7420045062343802233L, + -8281911816922916681L, + 4447883374750578122L, + 8857646523249955246L, + -5267905974004184533L, + -6586019939801565413L, + 7267509981674277869L, + -1730011012540783294L, + -3361327884510257968L, + 3153991252302571831L, + -8310723694192823368L, + 7365064041171947240L, + -7013288395764077337L, + 4424660961017823126L, + 7969284775663103753L, + -4673682312621214884L, + 2388177300282901685L, + 6610519624906161503L, + 8382367186870347676L, + 8011820517530369081L, + -3416914590527734423L, + -4432873885847563136L, + -1241220595388288096L, + 3560316095147026509L, + -1797075113553514394L, + 6552677553429396356L, + 6246332708352927155L, + 3861438072358225949L, + -8565290136579594910L, + -8002406576632498243L, + -6412781196438208222L, + -9047876088717010136L, + -8568000574169975921L, + 5244941923904200088L, + 1628817165486138289L, + 5749777718311982230L, + -8611048104500552826L, + -6407884750949781504L, + -8282995989967171744L, + -6031458083272026720L, + -1472077105364514517L, + 4504451286765383015L, + -418652306528352371L, + -4257356316730897484L, + -2957389181041677312L, + -1145720335115263201L, + -3091972849220173524L, + 8005939599601764433L, + -3417016708987198366L, + -6247258224636787950L, + -472464393458793289L, + 1487875631970459019L, + 4893795040625314681L, + 2729581410182440515L, + -5405273280140448608L, + 1452154199208270257L, + 4883843472429258182L, + -8796762596319773668L, + -5429154805367510111L, + 4426909737432342245L, + 7056415113393668414L, + 8774883135212925637L, + 8450999418184998816L, + 3820763711897833468L, + 3300743371144621367L, + -1630173808856631543L, + -8553736113528269822L, + -1370002862968307889L, + 9214585244396484676L, + 1427686269336175185L, + -3598631782642855473L, + -5269185928615394541L, + 216499523242669211L, + 7102788753870316442L, + 5649046266779873829L, + -4035565318503894376L, + -1855507138875094206L, + -5459594227201815570L, + -7410474841354966828L, + 6975082282771211247L, + -6353323886182944803L, + 646100630104660099L, + 7745081824763595518L, + 1579836547749948481L, + 7479608073819635972L, + -988819659251472110L, + 3121457552118354542L, + 1867337923564303955L, + 9039210151448164075L, + -6005672592365502974L, + 6809724817190798332L, + -8247807826434556808L, + 8599378181039531724L, + -8714366537708795385L, + 6194756214969034120L, + 1931855937995972224L, + 7780282029507594520L, + 3768324591352426949L, + 4770908273445282121L, + -5412117564459724461L, + -6910299206138527089L, + -750571165687777551L, + -3467143436546008630L, + -8778968277750614352L, + 4618269006460421671L, + 3784770542544192149L, + -6555035917940220116L, + 8763137794052904168L, + 2160001599658800708L, + 6579628917216038693L, + 7486800118422365343L, + -4727709771709935935L, + 9187028796349560592L, + -7646323237657128497L, + -7748151792724558120L, + -6629529116619603711L, + -3614919661598905131L, + -8926765781889646711L, + 4895079662109541742L, + 2313039280851327331L, + 8353059951121245572L, + -4361790301612843227L, + 878233584623997873L, + -5808341064891365335L, + 4957901996955185469L, + 722227598467337170L, + -8083855043640093449L, + 6296815072878721220L, + 3074098970376702630L, + 6487949451261677276L, + -8230337956949714079L, + 1227684096490474594L, + 3317131110226161460L, + 2781726232095396341L, + -9035241125603661424L, + 1004655391950987227L, + 757196511985132878L, + -4972385379979135932L, + 377837633918307403L, + -1837164923183207790L, + -5200366587699061855L, + 5619426661630165722L, + 9149546739708634949L, + -2161224822270988047L, + -8498758122904002877L, + -1903606037752461125L, + 4004956335353186480L, + 5899754692366277712L, + -8569895455403315824L, + 951203285725380985L, + -724485898478246754L, + -2310191424936462146L, + -1054133327199042402L, + -4761860002343924045L, + 2144188224512375766L, + -8618252392915479178L, + 562427488463506661L, + 4069612511580576356L, + 2846217274335476972L, + -5321770005300190195L, + -2665939903796278305L, + -225615242036287371L, + 8340124049763317532L, + -39328151188901959L, + -7704128105896373508L, + -6608889722744029365L, + 6847177601802070732L, + 5406538445625075780L, + 6056004216550410553L, + -6388427415087871994L, + -8510724109624398612L, + 1448506476683617231L, + 7013188100856212082L, + -6841370342344231710L, + -7996960406936053822L, + 5644557457158245692L, + -3296152646650497129L, + 3536461329613452151L, + -437075207063513146L, + -2301050489557934983L, + 7033064488351122705L, + 3720571868910950941L, + -8581343467023390064L, + -4996282238270355618L, + -4434808715189273218L, + -405745463035508082L, + 277285441155208541L, + 3640603191696429655L, + -6364389291678904211L, + 9077697777962306790L, + -4001601843892243802L, + 4036732856234956705L, + 5248392274720098326L, + 1116847972047877816L, + 4922394575619327211L, + -6285322752897148435L, + 7067487638261530629L, + 3473525332456520606L, + 1575187083569040662L, + -7670017995359806441L, + -6787510510738894320L, + 2880618714956167265L, + -5120445290790388729L, + -1947917760777447734L, + -7623296073694422101L, + 3252361779690367994L, + -8216056055022359562L, + 7525264382031021147L, + 2009893625701158286L, + -3406258625692336241L, + -2113315207827000149L, + -915671322135664152L, + -682373916879109470L, + 1102410309220747041L, + -3371660099417710298L, + 1284384932118496184L, + -7899332066557362531L, + 6082326747969637807L, + 6505116014978799418L, + -6638025017400409848L, + 8709456587813780355L, + 1040637469205493394L, + 7527200228140193048L, + -8009477968838239749L, + -7823164037283850971L, + -219876523001630476L, + -848139362896608550L, + 1659572939496253703L, + 8161950828762262292L, + -5426744617505876369L, + -6207765518458666734L, + 1330209524194208987L, + 312506988145426657L, + -8129873431497496113L, + 2982679062731022510L, + -5042254163968603642L, + 7189511553154561296L, + -7590604770017947250L, + 120767234548166783L, + 3585968789169172934L, + 2487430371362637909L, + -2117477977959815963L, + 6421046597883904862L, + 1915941733899660405L, + 7900047779862894999L, + -7543931826611217049L, + -4916952521775291426L, + -2868801994144941951L, + 6651512411349747168L, + 5311738336671629395L, + 1306146344435585753L, + 2360381402797636290L, + -7691226452323755207L, + -7944284715220814174L, + -278406581618280958L, + 1353480834890980580L, + -649067407317035048L, + -3147933535381057618L, + 8567698068491364114L, + 2639644310821531916L, + -2152161395283566770L, + -4888814748855310545L, + -6303207358154211232L, + -5099131870614196461L, + 1424098929808643092L, + -7162716687949255953L, + 2211086469787899963L, + 2852072241831923863L, + 4450856661460487818L, + 1332130522000219486L, + 4147251563283461874L, + 1207043674339706873L, + 5443671922124706933L, + 1900093839190289799L, + 7347503945522504540L, + 731422176531392690L, + -6899700774889484649L, + 7348057852476419965L, + 4763308267257593468L, + 70257218879991846L, + -739514492116955951L, + 7591767932477900284L, + -7791579872430789094L, + -5400779832289360193L, + -5360582829574801216L, + 6569971639852448678L, + 6160828497878986046L, + -1727168098652705184L, + 2168846004878378381L, + 3297327696375153959L, + 6816148183875835322L, + 6384670180559749639L, + 5098012111875182199L, + -8698209070789796773L, + 7063131632249681588L, + -994727287627957439L, + -8454912490309479278L, + -1616686461984094239L, + 1344308255896663208L, + -8614195194739181643L, + 3663344734731025818L, + 1074555005632296286L, + -891663858889754871L, + 7659504325229552894L, + 7916780674786126372L, + 8131132452406873222L, + -8409366302969284111L, + -7706327771470710338L, + -6629724794338812712L, + 4368055399977230653L, + -7898426087691236094L, + -8547784929920600040L, + -3916622571725474306L, + -4989308590637893844L, + -4255097229406935303L, + -8312609963939033197L, + 6449019140953263140L, + 5157342915532938711L, + 2114971170894382906L, + -3301242078535642691L, + -8424713197061111009L, + -4112134632049136236L, + 6249939489475102785L, + -6545073932128498060L, + -7043982864808573077L, + 6372613537930878573L, + 3190762373477289654L, + -2561239600356400775L, + 5207465341857679769L, + -6030085238141555836L, + 1973763449748050094L, + -2775325371903939992L, + 5477072914568061968L, + -8020494920018725702L, + -6778226228458777374L, + -2143361845827059097L, + -322386110818436422L, + 8486418337526930389L, + 5809129796682159464L, + -229942269923625040L, + -2016398216082799086L, + 4390670686371535226L, + -2276539331110400014L, + 8774439736263797799L, + 2316161663149901044L, + -5179580561974546556L, + -2396133401944865178L, + 3993962098659830835L, + 5629462452797886102L, + -5192061905328685380L, + 5410941996746617173L, + -3413195609621963464L, + -3061527928424392689L, + -3054113352229014259L, + -6424671610054662331L, + 9078610721616192048L, + -8898368096446875621L, + -8847632839009160349L, + -2332831971225170476L, + 3877449624663826166L, + -1998707448586751868L, + 5429087783572068454L, + 7505803154815651797L, + -6830143293644567388L, + 9027942884466367570L, + -5480807710956981276L, + 6168732146645754047L, + 8449301918694745548L, + 8778131551317466896L, + -1532492605199755867L, + -5391910637120789750L, + -5181509335176571510L, + 4222261527096078209L, + -68830318451459248L, + 8424841595605316764L, + -1190497481446057488L, + -5111948271985560837L, + 6030679480752773280L, + 7083507386503347300L, + -7935292289390985767L, + 8633627957234765752L, + 3577142810841159035L, + -250643146821978960L, + -4509721932431137882L, + 1505984612542211946L, + -6225351760438749240L, + 2182044745474903681L, + 7360081805774852071L, + -6980851881719350610L, + 606607963933040411L, + -5770107456508471265L, + 6205171527781848205L, + -3033545694812095937L, + 3583699718972282357L, + -7909170363462215258L, + -7171285223522587462L, + -1732747624639492792L, + 1139035341695075787L, + -293770954049652554L, + 8082120553607704108L, + -1767102175355955963L, + 7028133695751489509L, + 8595468330969519695L, + -4137307279143322835L, + -1088171437960554838L, + -4259340386446889998L, + 21294966289363633L, + -591949962374694703L, + -8837800592081259554L, + 7601644682819323767L, + -982502680195313135L, + 4181853267649918079L, + -5294003730853637099L, + -9158462991451185546L, + 7714670871787985179L, + -2721092666693913595L, + -720896668009511516L, + 4921838985018879422L, + -5038198705157071079L, + 7630728150546004158L, + 161966667436904740L, + -6529489221033141970L, + -483227329696642903L, + 2849537400103054469L, + -5932420765747592953L, + 3979533979134217316L, + -4049239836784843381L, + 5757146880398784254L, + 5806736286865906304L, + -8474302415960396385L, + -7391831815026906062L, + 8483126874968724489L, + 5557012499729359067L, + 4450718684927895135L, + 45335272732612289L, + -3785965163879210184L, + -1898242962714602224L, + -3364618253842484328L, + 7668403852309119835L, + 2092013133434607977L, + -1792300051264582572L, + 4204792673868607151L, + 4506602674596874571L, + -2561418149393223402L, + 7840286404246905129L, + -1035302472383225621L, + 2052650440950159550L, + 3385198385403224840L, + 7801853565618136124L, + 8158750483397835365L, + -7255481277968854565L, + -9050796656268415729L, + 7872874903061363846L, + -6332810502682885990L, + 4195093936537787159L, + 4140384146136775979L, + -3176676578208440523L, + -23527475436056846L, + 4821243657012565340L, + 2886979330017289487L, + 7170512846071359835L, + -6693771254646812923L, + 2266839597848142710L, + 3688056798561584424L, + 7956035795239686169L, + 4088975310233216058L, + -8662929922277559505L, + 4700022330330092123L, + 1044087464966463501L, + -3346284225769510392L, + -1166910579445681945L, + 3872703144237011548L, + 8501175525170010672L, + -6207437985662953078L, + -8733361112153680184L, + -3983180467171621870L, + 2283374194446411819L, + -6768484891471740518L, + 8044328097415285480L, + 1443377185537854020L, + 6803666844639402915L, + 8720154422929864332L, + -2537061102409854144L, + -515858108659325765L, + -1158565680316859334L, + -663545770006278500L, + 5112621109506791791L, + -3092170124310912387L, + 7889395149687448634L, + 3388633789092670761L, + -4176247842082877688L, + 8523663650288415701L, + 8461829646589019728L, + 4476120923918733118L, + 4955138021944824086L, + -8201820083387949902L, + -5150243375844302061L, + -6574687189541337134L, + 1813511165037620728L, + -6609152628982158385L, + 8442952354678524497L, + -7676351795757159272L, + -8444140555968619192L, + -6601786601773499005L, + 2179080756673506193L, + -3666129723434408178L, + -6776769795366302107L, + 4171664079486791081L, + -5452069571377540094L, + 359346427326135662L, + 2943062004262958454L, + -3921968176415799286L, + -134281347921607697L, + -8484249901958594015L, + 2812222074991563409L, + 6633639557063290973L, + -592722373574704367L, + 3584411287925175652L, + 354153167171955028L, + 5447276746665911196L, + -8076348065615557008L, + 7731333241037517938L, + 3253442384900678998L, + -5522359985224379236L, + -6208482024641614158L, + -7364261433707360458L, + -5906718475206754288L, + -2204545928435159171L, + -2795996564005833532L, + 2349222489800990019L, + -2358167389589298636L, + -1617861920532466248L, + -5097493153019151553L, + 898922054995315500L, + 3869670625351897503L, + -6636810950712802069L, + 5490098271052481169L, + -6176774370284978063L, + 6938938509865848385L, + -4161311926638539187L, + 3014272433254839403L, + 9058504699799497601L, + 8524360852674201045L, + -740764664775712722L, + -5679661123465313250L, + -5211931178887212388L, + -7017041889364832492L, + -3265178850476174256L, + -1499900928604101474L, + -4067493147979900667L, + 7299368378152484612L, + -7198659177748600436L, + -2979171190660530337L, + -2762966740484030759L, + -7465049739128224935L, + 3612078396397763590L, + 266194042468197276L, + 5473972901094176230L, + 1189281358884994281L, + -1442205020880436346L, + 2879820564038232304L, + 43850317677405067L, + -4454333694153391476L, + 2645494799086526410L, + 3524717291729262494L, + -1894484565386325644L, + 4470670853232773914L, + 3053558524768124235L, + -6378696765233153672L, + 1358648698333278216L, + 8016007574038246972L, + 1967787619451912192L, + -7471676932864790027L, + 8977236026465107675L, + -2387834721762557666L, + 3231705025344572693L, + -4855075972961874506L, + -4885183281004063488L, + 8097441972752472290L, + -5620463229031782622L, + 7574868212737343521L, + 8681941269840717726L, + -3486423124456001000L, + 5744244643650494004L, + 1014205046998613439L, + -3068068226567078353L, + -6908549673521465879L, + -1963051143946794321L, + -7035572219116690072L, + 1540941112525663170L, + -6001520532777183018L, + -6097551378241760053L, + 2960057374064581400L, + 3321150298365188778L, + 6355960073926449062L, + -7405638803189110774L, + 3687349663678072492L, + 7457820208992039828L, + 4506866448636890209L, + -4654784871604524478L, + -6973401381709164081L, + 3047431536639897259L, + 3083474008161625734L, + 7390801469345280746L, + -8119102525062060290L, + -2941186586599229109L, + 6543095150723391014L, + 1289924509787893294L }; } diff --git a/src/test/java/net/openhft/hashing/XXH128Test.java b/src/test/java/net/openhft/hashing/XXH128Test.java index 00f16dc..cdaec4b 100644 --- a/src/test/java/net/openhft/hashing/XXH128Test.java +++ b/src/test/java/net/openhft/hashing/XXH128Test.java @@ -23,15 +23,13 @@ import java.util.ArrayList; import java.util.Collection; -import static org.junit.Assert.assertEquals; - @RunWith(Parameterized.class) public class XXH128Test { @Parameterized.Parameters public static Collection data() { final int maxLen = Math.min(XXH128Test_HASHES.HASHES_OF_LOOPING_BYTES_WITHOUT_SEED.length, - XXH128Test_HASHES.HASHES_OF_LOOPING_BYTES_WITH_SEED_42.length); + XXH128Test_HASHES.HASHES_OF_LOOPING_BYTES_WITH_SEED_42.length); ArrayList data = new ArrayList(); for (int len = 0; len < maxLen; len++) { data.add(new Object[]{len}); @@ -61,2604 +59,2605 @@ public void test(LongTupleHashFunction h, LongHashFunction hl, long[][] hashesOf LongHashFunctionTest.test(hl, data, hashesOfLoopingBytes[len][0]); } } + /** * Test data is output of the following program with xxh3 implementation * from https://github.com/Cyan4973/xxHash - -#include "xxhash.c" -#include -#include -int main() -{ - const int N = 1024 + 256; // at least one full blocks - char* src = (char*) malloc(N); - for (int i = 0; i < N; i++) { - src[i] = (char) i; - } - - printf("class XXH128Test_HASHES {\n"); - printf(" public static final long[][] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = {\n"); - for (int i = 0; i <= N; i++) { - const XXH128_hash_t result = XXH3_128bits(src, i); - printf(" { %lldL, %lldL },\n", (long long)result.low64, (long long)result.high64); - } - printf(" };\n"); - - printf(" public static final long[][] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = {\n"); - for (int i = 0; i <= N; i++) { - const XXH128_hash_t result = XXH3_128bits_withSeed(src, i, 42); - printf(" { %lldL, %lldL },\n", (long long)result.low64, (long long)result.high64); - } - printf(" };\n"); - printf("}\n"); -} + *

+ * #include "xxhash.c" + * #include + * #include + * int main() + * { + * const int N = 1024 + 256; // at least one full blocks + * char* src = (char*) malloc(N); + * for (int i = 0; i < N; i++) { + * src[i] = (char) i; + * } + *

+ * printf("class XXH128Test_HASHES {\n"); + * printf(" public static final long[][] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = {\n"); + * for (int i = 0; i <= N; i++) { + * const XXH128_hash_t result = XXH3_128bits(src, i); + * printf(" { %lldL, %lldL },\n", (long long)result.low64, (long long)result.high64); + * } + * printf(" };\n"); + *

+ * printf(" public static final long[][] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = {\n"); + * for (int i = 0; i <= N; i++) { + * const XXH128_hash_t result = XXH3_128bits_withSeed(src, i, 42); + * printf(" { %lldL, %lldL },\n", (long long)result.low64, (long long)result.high64); + * } + * printf(" };\n"); + * printf("}\n"); + * } */ class XXH128Test_HASHES { public static final long[][] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = { - { 6918025063187695999L, -7374073936536430376L }, - { -4302098779834749733L, -6427377105285148822L }, - { -2998166160713018281L, 7659024777716224941L }, - { 6864218090047839419L, -2038618426559555633L }, - { -6480366142596956747L, -1481473859315439130L }, - { -3953929349995588965L, -7767492055996579519L }, - { -6434184480940321117L, 6079588180421601534L }, - { -2616020178111209730L, 7047615666104579453L }, - { -3470854323700000575L, -2169535271171686428L }, - { -8036337532808841402L, 1641396966678784974L }, - { -1838610295139896408L, -4786474928096720073L }, - { 9036419607108199075L, -6004001502991493996L }, - { 8611141083647120330L, 4105350226480938181L }, - { -4793706706242476352L, -5867379820156476408L }, - { 6185226889748380721L, 6886539015187124138L }, - { 6731536092874631L, 3466258189393024666L }, - { -8923861991986181406L, 8256512301565609954L }, - { -4580685021937757673L, 7519819888072656255L }, - { -2043568341533119453L, -8660816345503928947L }, - { -4288028997403044897L, 8510040706351439064L }, - { -3641643329425012519L, 2411460379579264364L }, - { -6817119268007077771L, -8484709459460756717L }, - { -8321648494418841644L, 1039740944917575917L }, - { 3538050101539897582L, 2362743675522042414L }, - { 5258435933086838188L, -4848199824445801375L }, - { -6362280687837106391L, -6773951973449392900L }, - { 4361114911410139889L, 7972785452136460766L }, - { -1076301070271465131L, 8384558886439123465L }, - { -4260306398241836702L, -4749396038389899603L }, - { 7705536077211324767L, 7065275513754572192L }, - { 8848360094546279194L, 4251126870462033189L }, - { -5382395732421186272L, 5680046751876868219L }, - { 5007322629095085719L, 2731373470772162258L }, - { -2266009261689938298L, 150690519598499383L }, - { 5654476833875738032L, -2061690640343340129L }, - { -1954811291194740257L, -5419036513975901981L }, - { -6890789870811920961L, 2325998689782383239L }, - { 524837945339210726L, -3715887750118223357L }, - { -1133972665109461700L, 8834173286146294154L }, - { -4865757570688729898L, -6727182884028692069L }, - { -5911952424608985308L, -6049127781180242975L }, - { -6304772494633596832L, 4470293576424874190L }, - { 2836199333566295238L, 8864173708278309166L }, - { 3102360108557900747L, -3733512248908528829L }, - { 5510180088237800518L, 4123807595437003297L }, - { -8414952918150047989L, 4522684623950545953L }, - { 5518787400664681885L, 2205797938276248879L }, - { -4455668116525212265L, 1731227964152171874L }, - { -669789427027077066L, -2931659152274064678L }, - { -5683078161783893371L, -3845762003302041006L }, - { 6680667259477693981L, 6292675962771587338L }, - { -4632250858732682011L, 6003962969507266903L }, - { 4901952080618105871L, -4810616663349653181L }, - { -4868621977036224471L, -613718830978964302L }, - { -8549747210893534701L, -7652856120690185923L }, - { 5559482992819465126L, -2935778481022073662L }, - { 5338789689922860629L, -7042626160273499760L }, - { 1932600112628823928L, 6801794573522504318L }, - { 416099586592393932L, 6439908650131601962L }, - { 7024137889223187025L, -2290925491907122061L }, - { 1045082728260193951L, 6309788576958218843L }, - { 6002976951327322033L, 2207846278132305118L }, - { -8528919693413636608L, 2135399881265353259L }, - { 216915620139749202L, -4932202155253948654L }, - { -8015959707258401164L, -7174775121992399387L }, - { 1940599133729319055L, -1446235614858172175L }, - { 2459358417139019246L, -8654965189671283179L }, - { -7818955503663384729L, -3934147459468506343L }, - { 1042851174159079970L, -1979910437861944855L }, - { -7917252407765639829L, -4633245311428649467L }, - { -7720303362404590874L, -6295287635440345944L }, - { -4157762089433661655L, 6496007637698701064L }, - { 7715936428342659469L, -1469964384035074732L }, - { 4195235191127312039L, 899631082723122736L }, - { 5215159923805118598L, -6545879335313020661L }, - { 7616735844785551706L, -7041352949020998262L }, - { -8947005412578780411L, -8900196105579670687L }, - { 2608419102060352937L, 2291692068482575428L }, - { 2932246401534482789L, -808561230173772212L }, - { -5972416795070818118L, -6748248077446108801L }, - { -5022910438308829379L, 9072885020094111509L }, - { -1910630276390364207L, -9174830524950881316L }, - { 8023252197284180464L, 8037539466518319583L }, - { 3380163176409638595L, -4855957689303967113L }, - { 9039213805856064871L, 1650794118333894986L }, - { -2271629174168076410L, 1347251894944291291L }, - { -4820143586371341417L, -3594063807503715367L }, - { -4959944807440428194L, 5383365720172155085L }, - { 7003928884444229348L, 676120417416765368L }, - { 859489746443979827L, -7833483946396960669L }, - { 9102710007397480162L, -8584324320197179283L }, - { -4175348964434949086L, 5647267223701886330L }, - { -8008637466668367969L, -6055429896007822421L }, - { 108482635692190168L, 2968129854880531728L }, - { -9011339488466116365L, 8434635880912750808L }, - { -4004467558640862965L, -2442649750845279594L }, - { 7949886151835604363L, -4218369913800524038L }, - { 6571460655316068733L, -7275245798374398558L }, - { 3933351809358110799L, -6947442526623576080L }, - { 7530035428683392997L, 2445755963621946807L }, - { 3004476708737695774L, -2695985919888627981L }, - { -6839738311238403945L, -5007277885229986319L }, - { -2115438695015824267L, 8793986460873025460L }, - { -6122328203320968341L, -1039312793807793706L }, - { -5548421559246888919L, -5432599954223186038L }, - { 3128331988620583536L, 9069025730792010839L }, - { -8643493112127109679L, 1331229929640790962L }, - { 8814314992955228960L, 3847902944293450150L }, - { -4787601413732006112L, 8900584343805263383L }, - { -7388222168387984808L, -9082309407529645857L }, - { 131518593310830564L, 2590646000392089354L }, - { -6324750245753466159L, -2802698424622117505L }, - { -8649508569357882764L, -354092374739121335L }, - { -5132193229074755277L, 5349864399629044838L }, - { -1406233318133878829L, -7778322178019776638L }, - { -1351642603059584651L, 5905272679963588442L }, - { 4703467631404861482L, -1412638527591654637L }, - { -143562322856237972L, 246782552965118392L }, - { 4729655314786007157L, -6812953036143724656L }, - { 1143435340240345532L, -671788510726657486L }, - { 4142673406702890802L, -5618565448224292259L }, - { -386385592979460209L, -3300708192346055254L }, - { -968019894004968401L, -8047458695647085054L }, - { 7431201141513763234L, -1398860770070745887L }, - { -8435079361655022794L, -7645011917469248859L }, - { 4882503199526148408L, 4410126282669136718L }, - { 5872988456826904838L, 773528843558202110L }, - { 435774107218292665L, -3049543393726570481L }, - { 374390355263912769L, 1475262870450658412L }, - { -4886205263344788933L, -2495428859633732274L }, - { 4523286614199751311L, 7841582144919037703L }, - { 6199714818303858941L, 7901445636911613076L }, - { 4303994841625385970L, 2937718694375539717L }, - { 814757341681862090L, -6478582819189379036L }, - { -5700445004887010774L, -8455858509054528766L }, - { -407790974857570816L, -8859596179726191766L }, - { -5805754751830269767L, -152275305346719872L }, - { 1598196252757994963L, -3928731748771019828L }, - { -6934713071114934765L, 3826064854799786237L }, - { 2185603020959026426L, 4940136396487362160L }, - { -2709341181476883011L, -3919124922665860644L }, - { -3382770288363519601L, 6073097037575507405L }, - { 2971838200308166371L, -7934498192931647428L }, - { -6368589310665521963L, 6154526145046318539L }, - { 6353042450513427021L, 2744250502633008273L }, - { -2886123871504743256L, -208572599238022818L }, - { -1624168552941053619L, -3913047860997752862L }, - { 7320019149991831488L, -6407203038559925672L }, - { -7826562494167066071L, 3656950149331658711L }, - { 3032358658826888909L, 8478297990310817113L }, - { 6635552159941043305L, 2369935842067964507L }, - { -7730726826982994831L, 2814934766308141432L }, - { -3283541548043086026L, -5626755390737090180L }, - { 4756392346740163255L, -1618854092540178479L }, - { -954514304963761905L, 1120375285910469551L }, - { -2677127018316745041L, 4533997389224788953L }, - { -6498470148726531477L, 4211221291483652077L }, - { 3703731056182724504L, -1291375588013924342L }, - { 8390865458275667313L, -111721904773166244L }, - { -5861077228742736805L, -2070386036672698890L }, - { -4143367647396165132L, 5662645194542529413L }, - { 3940052427164582775L, -8034322082658011232L }, - { 7449120853716556570L, 5233008944754805539L }, - { 4707315860283250027L, -2735344620674927100L }, - { -6483773415321497379L, -8801767122342998918L }, - { 372467878783610102L, -6728271425602167056L }, - { 421540060564964849L, 6814719141747896598L }, - { -2932751110479442880L, 2620333485388819159L }, - { 8138296947263184633L, 3186892836605521521L }, - { -8443166457721319544L, -295561944926731323L }, - { -3484858775294549484L, 999377954767431452L }, - { -3825165428097955770L, -5266530330876878010L }, - { -6113875314365935219L, -8700518321068076907L }, - { -5236044337855094887L, 4166279963844450417L }, - { -7689418202059025630L, 2745081882899556912L }, - { -5994295218119667616L, -7200741691189504631L }, - { -1019731893393738021L, 42985972231797947L }, - { 7964057313498750371L, 8468135790260799298L }, - { 4350973314535291960L, -96363394771300893L }, - { 3374846342506204851L, 8183621324647001307L }, - { -147780277660396961L, -2020465953003062925L }, - { 8087892087579153542L, 2081576827994983699L }, - { 3656634502747737496L, -9188914506833434747L }, - { 4352397869817031502L, 3608087870457978178L }, - { -5463203683033862729L, 4794961360367615558L }, - { -5829826499110216168L, -2966406905602723212L }, - { -6224968695182446745L, -5757313901190477182L }, - { -162412897360955265L, 4602851342136911659L }, - { -313093481501038119L, 726082021515462476L }, - { -2394654531394959372L, 6077061020288043189L }, - { 7129356685384777594L, -242956320069229460L }, - { -5610165828587809576L, -528970810714251548L }, - { 364583333953451656L, 1209647354565391723L }, - { 7770189435264039886L, 4432114537846063450L }, - { -5378637197958159683L, -3569583594959549373L }, - { -4245901361761642000L, -4908415462875986721L }, - { -4163321130952495919L, -8783734595860148591L }, - { -8760784759435664042L, -4001594145043032047L }, - { 3811531583056254939L, 7138061436855517595L }, - { 8328872328718915031L, -4681101102915066754L }, - { -2479256131109004811L, -3818044021289010674L }, - { -2564801102635362682L, -7621503644046974425L }, - { -2549390396843178245L, -1355036253044087129L }, - { -8447951661202617313L, 7367005715843213070L }, - { -7223721101136301216L, 5932237518320039024L }, - { -4579553338717938002L, -1415752620502773376L }, - { 4739886663385123868L, 6842423570713214542L }, - { 8761999406836444027L, 5431773349801366084L }, - { 6275926421168556271L, -6741136388070930457L }, - { -5553742881209813652L, -7463405596637494313L }, - { -5466140015739861861L, 7090908124796334951L }, - { 5086336981243921643L, 620608991523776456L }, - { -8583190303195622879L, -2528844698405021565L }, - { 8136795285908184024L, 7834757658823892326L }, - { -6251123780956813536L, -2362184439993799450L }, - { -7029587377954900822L, -457385112617225992L }, - { 3992372666585781254L, -3425505215948273419L }, - { -8934415453060377171L, 2889516969299688088L }, - { 2171086741014253062L, 8747101652358416539L }, - { -8138586755841972043L, -5230807087849230444L }, - { 1593528759643563657L, 25684661437075760L }, - { -313864667208179242L, -3034251152967214837L }, - { -3266427946201164069L, -7205525509099849070L }, - { 1393676534450976148L, 1600133987975139142L }, - { -5699612540743270476L, 2411808686028794220L }, - { 3643737955198081018L, 3624719045997588137L }, - { 179868577584127337L, -2425054572247905446L }, - { -1202636047919483341L, 1008426614634206792L }, - { 76328973038141475L, -6532258192268933884L }, - { 7815448976579876396L, -5793434878495490438L }, - { -2551332906614530185L, 4894172006704360878L }, - { 7897839487727186038L, -115287274417874605L }, - { 6782385125028425703L, -3521765042231025350L }, - { 2366096266549575004L, 1600704175490725006L }, - { 2646330593616093333L, -9112186430548909433L }, - { -5734352638286816291L, -7935930112754314515L }, - { 205990945300406766L, 6482328665055844390L }, - { -4107074334265298499L, -3655747932822203685L }, - { 3070291460260888908L, 8334448736154584008L }, - { -134765739369511623L, -7474942726871719713L }, - { -3950948930639643722L, 7328973455013265639L }, - { 209643423615708418L, 2135211318988808865L }, - { -2464819451665246158L, 1595264701587118086L }, - { -8631718977760664612L, -4814735239273499159L }, - { -4893221336143393409L, 4608470873153960630L }, - { 2390264798730683615L, -2505079969232422515L }, - { -8300749389255144164L, -4091945713696362506L }, - { -3549775289570958064L, 4711670840533830052L }, - { 6514441262456966668L, 1033420383904761807L }, - { -7301663820335638615L, 1786260203217802269L }, - { 4181559756778549411L, 1887690114220705884L }, - { 6215253578855337690L, 5107740194043393909L }, - { -7323335092456459405L, -7054773565482904481L }, - { -1860577032441476467L, 3268456599417932306L }, - { 3644299936077808538L, 6853477546599029409L }, - { -5161174126835724701L, 6418903298992325081L }, - { -7779787747613135503L, -1010872026945774909L }, - { -3446338450597548406L, -172855764288287246L }, - { -2662609220502962318L, -8015039012110903940L }, - { 208946340318274486L, 2793507753767981995L }, - { 922869894074454969L, 4440830233961398693L }, - { -8428909140908329623L, 2106468816516885040L }, - { -6875524699939418906L, 3742616954716811326L }, - { 5154230294972327697L, 6150997880677494555L }, - { -5868880138852165350L, 7468379017433552164L }, - { -2697155020815738737L, 4313139001296146702L }, - { 6278899766774254324L, 1368605690955846609L }, - { -6124877505863871039L, 1078518665221359628L }, - { 6113186870348198684L, 4141878510658134343L }, - { 1328797232741421065L, -3543059961120850079L }, - { 8936960355443139766L, -6946112468654970433L }, - { 9069883653377839816L, 5148075934725699275L }, - { -6698244186639407697L, -9162869098327881138L }, - { 6633988379507542818L, 5549765864648998779L }, - { 4243888593320380368L, 2997246184917475828L }, - { 1299920470993756698L, -166510666501194299L }, - { 2315187937474071861L, 7661746883847328813L }, - { 806120923801759332L, -7371352627644098700L }, - { -8537792935927015380L, 8121135036776652016L }, - { -751623313460664870L, -1684827436846980131L }, - { 2455098182130434513L, -5117312998044745719L }, - { -3041072155357054618L, -6972979759059535816L }, - { -5209258140949481980L, -2850141282674081949L }, - { -7784651030341623624L, 8999636098565609468L }, - { -8624281235662545565L, 2802906109949156906L }, - { -5185374153462168974L, 4042442480817740884L }, - { -8728622305551122108L, 5363590029784421735L }, - { 3633316488676598179L, 4925791459461278180L }, - { 2341850275669250720L, -4459999769175253936L }, - { 8998800880957295269L, -4343678313183227809L }, - { -2791108801739767859L, 4636488046527593561L }, - { 4207716787796156879L, 4231756216975414682L }, - { -4083554261407892809L, -8262406562901842787L }, - { 2977762250156739855L, 8049673030862839736L }, - { -6066243213313847782L, -7613157457395411777L }, - { -3134677742513834402L, 5369087783798165525L }, - { -5231660756514911289L, -558789175821081719L }, - { -7916346081138370244L, -7638955099780654605L }, - { 9105509708951212631L, 8857680368853459781L }, - { -3071680532260795719L, 7548887970352736530L }, - { -3152428524199455707L, -6442114135533810709L }, - { -5276930195233923125L, 1364963280258649846L }, - { 1981446637702558747L, -7751173762713374236L }, - { -8822786060285469479L, -187974834805915694L }, - { -3086453182842996354L, 9107364158514537855L }, - { -7521798164704108718L, 2384045956629947261L }, - { -7460429880600038351L, 4800095578910651073L }, - { -5031515429775225415L, -2055654337088316962L }, - { 5662627828449328757L, 7046721834457541245L }, - { 2804157867790593789L, -1341792999416601132L }, - { -6183934836359652529L, -657594756031460913L }, - { 2425310972806241292L, 1258033866943800792L }, - { -7877162957672040682L, 7635167739849781937L }, - { -4575453773921540745L, -3355393194943055905L }, - { -6152892230011262930L, -9193001981013880312L }, - { -1554429781063399588L, 3405969670011375161L }, - { 6395550633581619922L, -7583323290006007445L }, - { 948199150697514149L, 4111589110219820951L }, - { 4123518706442132507L, -8438953137254330460L }, - { -8620024481834864148L, -6636388327463820199L }, - { -4627311960537433998L, -915962921757457254L }, - { -1517263476517287336L, 4046174639048253801L }, - { 3087156144310177979L, 391565409154016317L }, - { 802387854806242344L, 1031677631873271699L }, - { -8223164854162179626L, -443891348496457499L }, - { -8876883825341271093L, 5762028792245015141L }, - { 6189924694943538938L, -7169703049494390501L }, - { -558048344469199000L, 5981321487249463887L }, - { -6388815497071843014L, 3273238115129858121L }, - { 7970082794223216108L, 2973205891766662972L }, - { 8943146030443257086L, 5791248506749113385L }, - { 1919558538884824162L, 3150174799334525665L }, - { -5413821296846136841L, 8082825464958206177L }, - { 8482255996292420949L, -7115778512034379502L }, - { -2059351044571046226L, -4782846315945295244L }, - { 8122315934009425936L, 462528816707067945L }, - { -6002133579485340781L, -3975376714763954783L }, - { 6439465961707132723L, -756936500656028513L }, - { 2763117897158909339L, 1091745287377893475L }, - { 4241846593057682886L, 1081100136763965880L }, - { -3156374353704014890L, -3581775682588778942L }, - { 3611310604513156987L, 8348262968344472468L }, - { 2539868227324188707L, -4712857164920834878L }, - { -3160603853021599046L, -8654224927278936599L }, - { -6694565052629228305L, -971528287258097624L }, - { -2829087677596299075L, -1534581713432222723L }, - { -3855421753196086451L, -8760600350092291439L }, - { 8353874633819013271L, 5978997520871435617L }, - { -2485914493713180581L, -977211097680535312L }, - { 2924901647540244351L, 3960491378165335258L }, - { 140830235769158231L, 4133918999398648450L }, - { 8924525771772034372L, -726044173977679325L }, - { 1991645829771754924L, -2067381390897988577L }, - { -6409133430531739321L, -6175415710899927619L }, - { -2477349252564343349L, 3988670256167231709L }, - { 7592298137540200578L, -5726518256936929851L }, - { -8706120837264950112L, -5760350640517553208L }, - { 2330049856518978017L, -4092773931089397265L }, - { -1333715564956417750L, -2231452272587190724L }, - { 5321303278236129003L, -6746469835008817808L }, - { 1316603583801631000L, 1137804323520560994L }, - { -2052093890021786856L, -3783187984532267053L }, - { -2212919092132307727L, 7186765338995597614L }, - { -1138248150179747101L, -2184981677146577517L }, - { -7297574785915472699L, 5009477804126403419L }, - { 3159392081609537393L, 7309719615409023592L }, - { 5438969032594710113L, -5123802317331232347L }, - { -1117946266762888661L, 1492594410329911808L }, - { -3513962250060316650L, 4906439631063318446L }, - { -95470470775096400L, -8272067922919754322L }, - { -928547845419412355L, -11702280433339640L }, - { 3064209748165139149L, 5541367980759525384L }, - { 5570740544374382296L, 5321829123710270068L }, - { -4848606292970499536L, -96910214182218274L }, - { 1249733847255258336L, 629248191606577595L }, - { -9081876379081045111L, 5443102257014841765L }, - { -3178350430540128617L, 2432498732626009926L }, - { 4580722282117591455L, -7643528894779295786L }, - { 4910338723691444614L, 6967629769055776438L }, - { -3861107435455294057L, -9205931005525733053L }, - { 2455351552393139588L, -2953211184067244974L }, - { -3098045343671378301L, -3817179460848825357L }, - { 1276702104227748441L, 137325564846715403L }, - { -8725606894849543465L, 2905193080015222394L }, - { -7043526197674754455L, 5559996365359216967L }, - { 2543751490914779898L, -1370174742699523774L }, - { 1111188191726666289L, 5295334064948911884L }, - { 3299681536744686092L, 9040207948700213390L }, - { -4968407975804173061L, 6424222583290688109L }, - { -8443232222924958642L, -7778388515977146250L }, - { 2692856020311995538L, 2968383219838059276L }, - { -7295992543900831720L, -4457539035332779798L }, - { -835426980056055153L, -6325659580231608755L }, - { -7189216512060259212L, 2131181344124063164L }, - { 1546667140862204220L, -239160549067820612L }, - { -5157738526808785307L, 9115760354926169094L }, - { -8400112152363165211L, 5857402912101139691L }, - { -2562446629278342489L, -6148111590522678005L }, - { -3984312152746163924L, 7844800256926351421L }, - { 263973571859894620L, 594261227115607566L }, - { 5863738959863392730L, 4867956032043813886L }, - { -3750469576779228200L, 7192121623829732387L }, - { 2859093520615066384L, 913297396549536029L }, - { 239574671716835044L, 3087819404448657542L }, - { 1758244848125395099L, -9078334339121564235L }, - { 4692926060224877180L, 5116375739982667956L }, - { 2328985435627410056L, 3709473589115479198L }, - { -712944964417726519L, -6007503027678389854L }, - { 7575628018175957835L, -7383688701150280008L }, - { -6461647485226712981L, 6750569702211012204L }, - { -9175844658802936237L, 8399161365461331759L }, - { -1791894645853433273L, 7124236302180108571L }, - { -3209291319104719345L, 3052940112246927168L }, - { 8435774909159574457L, 6041127832456521507L }, - { 3068904622159492539L, 715670353716033395L }, - { 6405574310234631665L, 6291430988703679177L }, - { -7236310029621050895L, 5100784183499609393L }, - { 1939741827857698370L, -3177132287591049454L }, - { -2711876483320863546L, 1524168983814198921L }, - { -5191337944005182792L, 1387248765441775509L }, - { 851301927202074099L, -1263258347843133972L }, - { 7817558216393575797L, -5162993824073352503L }, - { -924173671401578135L, -5108957871026680251L }, - { -8870424728276452684L, -2321064657647312260L }, - { -5612135981154918473L, -3273558579175712345L }, - { 5352840780989627332L, -6783535534084823449L }, - { 3115501649750915797L, -4387292192090486464L }, - { -7282764488136203731L, 6453482773752879162L }, - { -4410122159075968274L, 4725424300607610937L }, - { -5112841868993719465L, -8779015554522488103L }, - { 1606611627835962209L, -5590171830014603568L }, - { -2564625118517656156L, 7741285374849676494L }, - { -7347999176364584697L, -3065690164342722400L }, - { -7520586016175454443L, -6390387248180888651L }, - { -3582872246453049220L, -9203340940844140689L }, - { -7208670274224679141L, 6037856226854376075L }, - { 1407185043226639926L, -8963249490810952056L }, - { 5548472899324259498L, 7197773686811339894L }, - { -3424704481698318306L, -3228267337906479612L }, - { -8898045228081312865L, 7299625475871751770L }, - { -5032961205984329240L, 1080670899373428777L }, - { 2319704565344125424L, 6271105296589611136L }, - { -1858090959206557106L, -7189583006151098162L }, - { -1847512527385111193L, 8502130611969952629L }, - { -218817722784924760L, 5246262405009713204L }, - { -4644538017574761086L, 3272921218846794606L }, - { 527762499588866419L, 866014286715394507L }, - { 7682925460546142196L, -9023754876300785684L }, - { 2618673582975102782L, -3841047495859134001L }, - { -8339358073633623035L, 6392875486843295666L }, - { 4632344075623474881L, 1582641584198542259L }, - { -2634725682046056737L, 459419838955507648L }, - { 3264353773883015103L, -1523378724173083514L }, - { 3450256920483368564L, 4975188291142344612L }, - { -8453373497678191816L, -3839576070757390241L }, - { 4324811352547234228L, 580873531256814001L }, - { 5231611966727557421L, 1244921297520573100L }, - { 3935063678731059941L, -6192996608723472660L }, - { 6338309551930394802L, -6490545382515146086L }, - { 6622686033142507173L, -8428752124385041158L }, - { -5278373537512798709L, -7666003634852458753L }, - { -9063940204441257539L, -3060099377907561092L }, - { -6333833756325058415L, -5029009158854294732L }, - { 3799491381076234981L, 4200533976809289087L }, - { 5050905817684546674L, -2743556952975018462L }, - { -796624655126841621L, 8394910217060245525L }, - { 8334872366472578300L, -4013169907403888314L }, - { -5288752267258476166L, 1615789454281352829L }, - { 4335956913966038392L, 3669603612307880087L }, - { -2247074774901543705L, 384186682932301514L }, - { 8474035569080943503L, -2072617956194576812L }, - { -3170167932314701995L, -4996126312151911632L }, - { 6999756768956410897L, -1222840955640726138L }, - { -4451078577344071588L, -4574301927676188432L }, - { -8433054951584831409L, 2019896101789516324L }, - { -2640652121643463448L, -6207648221610624100L }, - { -7045594934288710931L, 6907612079776695168L }, - { -4036935141669708886L, 8337968798845695874L }, - { -7734407512972194081L, -352014965188200686L }, - { 2053541054148333962L, -786335970157264827L }, - { -566653752431971002L, -8089305180282021945L }, - { 1898804146829115409L, 1490169990672309460L }, - { 8507984725723339263L, -4741793772956239321L }, - { -3742788731083462619L, 4530848119791548171L }, - { -614166854038590657L, 4495302806552748358L }, - { 8147682807535759575L, -186502124698730499L }, - { 2813322236228401990L, 8130069379689580810L }, - { -7697111451322995338L, 8936991586964556806L }, - { 8023578719528819358L, 846744111432227894L }, - { -1666048881205334172L, 2007039852402613406L }, - { 2861705383918865808L, 5712283346400961499L }, - { -2067264870309406817L, -8080281899293212696L }, - { 1544932780962992751L, 6732646774857284315L }, - { 5752963315823730718L, -6680909940508528513L }, - { 5563418456763501584L, -4108919598993076052L }, - { -956763705026909993L, 782815035938451649L }, - { -6723021793890249884L, 6375973421868888415L }, - { 8199491799885937348L, -2824046112291289709L }, - { 8254326245904567972L, -4939591038817699096L }, - { 696534455436688862L, 57855698877748437L }, - { -4526166123204455007L, 6259254177722304651L }, - { -1244479971115743946L, 5213539213896354419L }, - { -4712028527008594695L, -7017914521199006226L }, - { 3845317619056596538L, 7090203329717532364L }, - { 1397508695414938292L, -8490878741424764802L }, - { 5199778266100306999L, 7458354268561924417L }, - { 7649610185133409821L, 5850524304651887209L }, - { -7736979936936405855L, -1688565444532845272L }, - { -1871499676764587199L, 3567966374680431242L }, - { 4089210433244498057L, -6849207453391081019L }, - { -5319342193649020117L, 6300983384645314585L }, - { 6510328602034064204L, 674936610022286330L }, - { 1177990759783856649L, 1233238019560229835L }, - { -6211536889696831922L, 3269771882547594708L }, - { -2806444732697667079L, -8472679256324341139L }, - { -5534324430749159010L, 7385757552452744804L }, - { -6189402282341917673L, -7597189316618548656L }, - { 6327177260956086170L, 387354508794102949L }, - { -8199327532062722025L, 8781866512582180355L }, - { 1757637089703623521L, -2439557373159907653L }, - { -1083020196125888231L, 4898229079940792683L }, - { -4027554827881183115L, 5854278118107827495L }, - { 2536452110533397141L, 5053032057586689294L }, - { -5283309880767903892L, -4036089771501382471L }, - { -8726185014741079280L, 6371918861414578337L }, - { 5870565960746070417L, -1755043487049372432L }, - { -5981985584772708231L, -5464038684710305016L }, - { -1932877698882443840L, 8643536265538303114L }, - { -1002343255004640521L, -9183473069245370007L }, - { 4369245457815499473L, -7541238362330640360L }, - { 574307157338267836L, -4775059289639379617L }, - { -9022123090729501652L, -6281514868145333731L }, - { 289683520338718123L, 2796625540449362421L }, - { -5791631171477648402L, -4653014207048774900L }, - { -7088072188409060385L, -4095346481442481243L }, - { -4659987534525277948L, 1840919610151012736L }, - { -6573587402478059370L, -394799095862107646L }, - { -9147189283662432041L, 2780457115891390435L }, - { -4621406226758810332L, 4650621948282825212L }, - { 3827992897413425855L, -3470503642777527388L }, - { 8237187128340177815L, 8338050922877292449L }, - { -2575127860924571660L, 8053904449338331049L }, - { -5807831166865245102L, -4329977027836990705L }, - { -5362714198312494492L, -241660454500896017L }, - { 4800564949032048849L, -991028768001584039L }, - { 6232971559544384156L, -4931085162898819233L }, - { 5346264270546834545L, 4735211348383074864L }, - { 4418021854956695145L, -4054404223178521239L }, - { -2503709442294180811L, -2937345847603751564L }, - { -6705525727229877941L, -186811788738397153L }, - { 2807916716409994404L, 6999030087777771607L }, - { -140901784876025870L, 1998821964393989519L }, - { 8341454749980902529L, 4006910961641213665L }, - { -1877846120130857988L, 7136842530212354406L }, - { -5151008775080326365L, -1658405690903715224L }, - { 4141948371168606708L, 8905521338649282325L }, - { -2991396496641036974L, -8951844492612797162L }, - { -8231846204849830109L, -7788963254099816781L }, - { 8817247101288954387L, -6748712299598005804L }, - { 8987037987198023072L, 9070734453008799529L }, - { -3653961272252403667L, -1706174462105691367L }, - { -5540876112254432380L, 1685272653566639268L }, - { 6630760576601451124L, -1097030590189693240L }, - { 3952853764187760519L, 5155412125205404325L }, - { -2752207231177565438L, 435598937197933569L }, - { -8990910782429153994L, 8975085101947256973L }, - { 275029084438740989L, 1594853272392894824L }, - { 4377008995333363792L, -9203724735327026090L }, - { 7821963094129670639L, 6001202347774222234L }, - { 5910345261804604591L, -6530910287713746869L }, - { -4676534586425310858L, -2447999183969902895L }, - { -893427896035022872L, -9110096049863714398L }, - { -5107326322974521170L, 6912129560394449872L }, - { 5928147272454832468L, 2068430724750870080L }, - { -6838714257802993131L, 1280800236191378302L }, - { 3828181535474040080L, 5912525367873976485L }, - { 108432455104664877L, 1008792111792728167L }, - { 6134860905554719891L, 3736157740631835042L }, - { -9006906057728028416L, 2291031958410264788L }, - { -8785087250130628623L, 1747369706716307880L }, - { 5107258923997586783L, 4842462885753407158L }, - { -4184502077870950738L, -5221774457734574279L }, - { -4196994343382319067L, -4731152976876941564L }, - { -3602525630290645804L, -7438604867872016130L }, - { -721602986806918388L, 7380942477862322044L }, - { -685749048932716724L, 8558621156455130463L }, - { -2226124441764103982L, -5753212050844017972L }, - { -8444470437189672337L, 682780176504188457L }, - { 5967905323104782609L, 872456529921347237L }, - { -774529365691330376L, 2906334255950757352L }, - { 5317411683068394421L, -108367910517051649L }, - { 8753729036148149823L, -876697494682167248L }, - { -2600284926580864832L, 1079293674000123963L }, - { 1501264369203023713L, 4772271458149794627L }, - { -5589106565383836539L, -7585724482444194890L }, - { 2671769607792597675L, -8643480525195244990L }, - { -571916257780128106L, 596916564516236145L }, - { -466398102722097434L, 3470290204352195571L }, - { -8668321984643614166L, -453629747624458261L }, - { 7631202114905008803L, -4821135673180277868L }, - { -8647922451448787023L, -8485380845549008746L }, - { 8025381490498356948L, 3913777583556485172L }, - { 6049280950696679244L, -7121925732817649938L }, - { -7696482417187458362L, -8601187295544785855L }, - { 7140438358861456746L, -4279316057093339253L }, - { -4921885565559803566L, 6325512175579207375L }, - { -7027307783313071980L, -7680809212541810824L }, - { 4879598629629415952L, 8150769622291187304L }, - { -7342155744245645378L, -6215685187110669442L }, - { -2263378697656156016L, 8343706095650682031L }, - { 3707257119850556629L, -2120810639767885498L }, - { 2267112971575522392L, -826262663858867910L }, - { 4213162373130191016L, 4461280045821316392L }, - { 8934898250536865564L, 359231887739760556L }, - { -2149765792894599153L, 4707860023048648731L }, - { -5375160376931751557L, -786047454211312701L }, - { 2196544121130659101L, -867932101728609316L }, - { 1698916734136113996L, -2204779643027651944L }, - { 3433172695894846834L, 7596525181878611400L }, - { -2849259564218003615L, 6623954713336976951L }, - { 3254138956861413927L, -1133558231039979412L }, - { 1285929622626453198L, 5890024885621260165L }, - { -2349127797610817522L, 1562179804252080095L }, - { -1191286947825336074L, 2468833460111911838L }, - { -9055971338481310193L, 345979595229756636L }, - { -3525928115330914396L, -6596590613894843229L }, - { -3227633136719463166L, 5915785628644168423L }, - { -133501853014392460L, -8741758672003862228L }, - { 1099153576792978915L, -2742417900988504166L }, - { -648473507797745243L, -1129954793722235908L }, - { -8947946509829984393L, -4829402018135157767L }, - { -183277647411867477L, -288109513781082853L }, - { -8972836557830117056L, -2372987808358806473L }, - { 7599024178448012477L, -4273183649325398119L }, - { -4558685557381095142L, 8836884243173336023L }, - { 4767843848744584145L, 5190086288935651378L }, - { -1522308275842184404L, -6580417704257825326L }, - { -8584574042672861403L, 92823380696470869L }, - { -1734332735592240813L, -4860675540725285320L }, - { -5832090116698921823L, 6760714595207081195L }, - { -8717779938268738600L, 3229735988985744701L }, - { -1881355893097809021L, 1149009410476147075L }, - { 7715529933819950784L, -8766744506878170376L }, - { -2289162375063823266L, 8785343280324053248L }, - { 5628801095532857454L, -6766400014785301219L }, - { 4961594313236250573L, -7969158326987751251L }, - { 4618832900030681591L, -1590199595674682989L }, - { -2860026598356511432L, -4804664899406105836L }, - { 1961029532371905567L, -4232908783774954600L }, - { -7427116119564073711L, 7457295679793377814L }, - { -7663272674507523073L, -5262217384322722743L }, - { -1432342159197328837L, 4771708562585944643L }, - { -6656742466964663442L, -976564846383552887L }, - { 1884610673731472834L, -785174449433559508L }, - { -3810094228658892044L, 1994759940275525679L }, - { -6616291605664442115L, 3795543339876571956L }, - { -6089433736056798518L, -7266978573829534613L }, - { -7473225570871869756L, 5261130192092551093L }, - { -2962461410122376636L, -5000607733090565805L }, - { -7732736326487208707L, -3693026679333504313L }, - { -4443012182604465346L, 6100440042934878383L }, - { -6157220788020380465L, -2860438289567923884L }, - { 4600227015044805999L, 4989400139419054213L }, - { 4469639125734518912L, -6122627204883036341L }, - { -7792518910888390519L, 4129047140733643848L }, - { 1994555386333163764L, -3844189245157007278L }, - { 4369373061497876631L, 343822057089163157L }, - { -4738249058452865067L, 2329646226948660665L }, - { -5995135073617675417L, -4255461102943936723L }, - { 8575145712582277328L, 1413910585849998254L }, - { -3326852669647946366L, 2121198412256615037L }, - { -2007891227481667403L, 7221453514528963511L }, - { 7761466597038557448L, -6581310753540884344L }, - { -7224144129768088459L, -6327002969543063078L }, - { -6066361559768252258L, 1784238609618085587L }, - { -4068105427650671702L, 7479972997631999286L }, - { -5560889521429203904L, 2898253573510616692L }, - { -4762527649365520713L, 2604657580604116324L }, - { 2694767757294725688L, -621761717733876220L }, - { -98412761475871782L, 2779314879118693087L }, - { -1686751510820366009L, -5956651577100715550L }, - { -8638747288926132295L, 1038333600319247631L }, - { -3606421426295459375L, 8477836939368819043L }, - { 703911580424568845L, 7030948256080124036L }, - { 3806874684410471199L, 469379621331982300L }, - { -5118211203482914183L, -5305374868543386096L }, - { 3783835693585708905L, 6654716033399934609L }, - { -4147496567901501893L, 7586049031853109067L }, - { 4328139758484363106L, 381917650928462968L }, - { 3028068134370267202L, 776322465585926454L }, - { -5966389813687232408L, 3686423315817746584L }, - { 2195469898148267913L, -7533513970647659535L }, - { -3080166474377317430L, -8140738602141354389L }, - { 6412533502918649688L, -1703582505372665809L }, - { -4801061500654703956L, -4201543830696595479L }, - { -554194900129906123L, -5939632826608146381L }, - { 1486000469436139740L, 7831050577063499982L }, - { -6971589411333019409L, 5357835973747361473L }, - { 2647463349908157318L, 7085011541975929989L }, - { -6754094203714628854L, -3850873520054179131L }, - { 2314399046579224435L, 3216792862731027976L }, - { -6177383374280917075L, 8760408975864465377L }, - { -5619632493646738964L, 2241632268315301578L }, - { -7301831206207675015L, -1821451086573881135L }, - { -5527516975398904813L, 4968354678684490072L }, - { -7206298956882517419L, 2279041835604861410L }, - { -1535337994919517848L, -8761446866156246742L }, - { 725107219148423471L, 4750860717864763778L }, - { 1938195538047669437L, -5869782778289132135L }, - { 1028829726878266547L, 7197029508183468862L }, - { 3981352596771855719L, 4996127899543829429L }, - { 4637441575637536278L, -6389995039174519370L }, - { -567364300216533096L, 19863152138574099L }, - { 4215820779392244698L, 888457597427087114L }, - { 5791138156269639416L, 6853760322626114995L }, - { 527001488112788484L, -2110465445257708858L }, - { -4390338125863921979L, -2134580087205909557L }, - { 5557055272452535368L, 2866065276453045221L }, - { -205316410586789577L, 4480269606588918401L }, - { 6952133288635206796L, 2015037502635776574L }, - { -7457518070084443694L, 2263308604979136810L }, - { 2002018537802900078L, 7552360032993184271L }, - { 1561023860546606398L, 3866818685532368479L }, - { 3006183850758749007L, -2336461709355555028L }, - { -1361037422909233361L, -9144929386769396303L }, - { -4203933835330884180L, 4220615295609720220L }, - { 7500988945823273736L, 3572390891093078325L }, - { -3010872765453549672L, 6632197017693971191L }, - { -3781827987408697259L, -4030709294737296947L }, - { 7460277383018710734L, 3383215657257964557L }, - { 5250710645655626569L, -3007683880002548954L }, - { 1109553850343924028L, 9126342159911243074L }, - { -6498085059809326090L, -6420733693986859740L }, - { -5879222670885240061L, 442921388511227265L }, - { 6210613100795379620L, -1514159259364407425L }, - { -5759675374559290972L, -8245819781762092155L }, - { 2824738880545011656L, 3999019159821229194L }, - { 3213468672819532759L, -6840569939386909113L }, - { 514328750496380347L, 969657192227097933L }, - { 4470285007717204101L, -668030492010532480L }, - { 2269240343629252129L, -4576239629892938120L }, - { 8714859525098129755L, -2826680146207272878L }, - { -6932578361476642118L, -4666717289125206755L }, - { 3219949239213817308L, 3712651019435159979L }, - { -974585298959970878L, -1944037411135401627L }, - { 6482527911604968876L, 6263685975715881314L }, - { 889153561428168470L, -1692016738149208411L }, - { -8207616222981108363L, -491537029006685810L }, - { 2386860797138412452L, -8312622730184110241L }, - { -6749686321997906685L, 4061453222465983121L }, - { -1105424552884318985L, 4383295431011890299L }, - { -3137963539903752699L, -8004907349965180516L }, - { -5296550634024189868L, -701828900076753577L }, - { 2919221292190747486L, -3730402551719687544L }, - { -3991521756182858814L, -8245448390492788466L }, - { 3802413126716557908L, -345388522944700330L }, - { 4556158013211621930L, 4837029469954119100L }, - { -1956520472596138305L, 3774560559204626526L }, - { -1667618395239727751L, -8642889400813503572L }, - { -4948155010712448139L, -4045291183536374219L }, - { -2667546434479018044L, 370703145466617430L }, - { -5192951416537530780L, -21955828113889540L }, - { 4474564860866849514L, 827322199368359858L }, - { 6795504197096101870L, -7090967928316662587L }, - { 348555520492747776L, -3642605601802123384L }, - { -9152654684800879935L, 3609495880796821187L }, - { -139520144005307559L, -5156829220828151100L }, - { 8655115078308054377L, 6824472990762665216L }, - { 4640578432082008138L, -6202001168681068572L }, - { 8526214307008571064L, -842893985616753436L }, - { -7079091919397494753L, 8339596036464430100L }, - { -4852301075482608956L, 6187407979941379905L }, - { -6726381834527599283L, 801991602387712085L }, - { -467175742480032731L, -4596941950635352144L }, - { 5092513639393893997L, -8012169512241368869L }, - { -916781769295487406L, 4932904650409381585L }, - { -3306005301217276910L, -5501027874234474547L }, - { 5711239369216246603L, 6191254119870515104L }, - { 7411369067342514714L, -3304087475657526094L }, - { -137089609471843551L, -456007077646664136L }, - { 2197853544547148264L, 5840431983889477671L }, - { 6994895994975015585L, -7130703368147034100L }, - { -3993584670641567357L, 874766092887871964L }, - { 7324113989979846776L, 2238932798202795857L }, - { 4848201612974985071L, 4462081907647625486L }, - { -2319141888027790806L, -515485080810423104L }, - { -7727572350242351429L, -1128955356889746097L }, - { 3611228677421118756L, -8629406378387284186L }, - { 3254031939911056022L, 5981817082841287883L }, - { 1315862663037871882L, -4846048396088499736L }, - { 2762719496333050774L, 3984785182381619936L }, - { 2441476684596910583L, 4447837245869346861L }, - { -1751985778109806355L, -5449837400474558988L }, - { 3156518557955714028L, 6585800508293259358L }, - { -7474525109128332157L, 4191565513182283182L }, - { -402634945481420093L, 1145607902421986507L }, - { 3711042493776857096L, 2083850151603736019L }, - { -526618219268616930L, 8506153718458047088L }, - { -8956423818433397438L, 337802762069315243L }, - { 3318951429850234648L, 2081621265536757163L }, - { -4065748355754556535L, -7239810839294391198L }, - { -2974465318794034149L, -4594332206328367008L }, - { 9156201933336414671L, 8488676128423554222L }, - { -1224004278953882958L, 5451979806028482452L }, - { -5567810197150710613L, 6919209359995815805L }, - { 7645667176564158039L, -6364331595927960173L }, - { 7437954892140634061L, 6193769906536854642L }, - { 8595047667824297631L, 5596599227739861071L }, - { -4227841629446459104L, -1381816196560241190L }, - { -4073313779073810355L, -1100784080146793337L }, - { 764623093768368301L, -2826222786337395694L }, - { 4502563456929761688L, 1522444965027476312L }, - { 1027370723462817766L, -6744570457086361510L }, - { 7668869338814612684L, 4430603710584195978L }, - { -4780350365503382825L, -1669306996283361332L }, - { -6389061999435806787L, -6048382522434823780L }, - { -2133237830821026919L, 3019116079627478016L }, - { -618977682776693149L, -5595283007067987776L }, - { 467656057704319257L, 3340252194762699251L }, - { -6754479852919060751L, -7463769590197660662L }, - { -121796624546305099L, -3251872792366792553L }, - { -6164861615484187016L, -6122786778522267003L }, - { -8568598162483564153L, -7141238264795350159L }, - { -8182644091745100549L, -3046128695748774162L }, - { -3989631051916738549L, 2520402197254872075L }, - { -3812515520109109155L, -1052959236992591515L }, - { 5458479505950940580L, 5049901156611941154L }, - { -4068063356781230185L, -6931312104494850376L }, - { -2830766632873229698L, 4798159326705638849L }, - { -7592354330098913572L, -7738117602772322434L }, - { 5323147076973602219L, -2197090908151937767L }, - { 462800867816435413L, -8465892264165433250L }, - { 4002154584204048905L, -6343838674759451204L }, - { -803837213195276249L, -7987366341250351358L }, - { 270846859760410932L, 3184418117964900027L }, - { 339186719055655409L, -7127601895783159724L }, - { -1681073433226249949L, -5136145993285919552L }, - { -3172364168133842187L, 5692701350597281770L }, - { 4471576722877991666L, 7336578103784155071L }, - { 5796602822306813285L, -4343030338723817984L }, - { -7918394505018135767L, 945395198631021154L }, - { -8099706435104488972L, -1543491225353143256L }, - { 3225305587851029418L, 1333690785007789042L }, - { -4366886220054887809L, -3805519626113819282L }, - { 7732358946751522729L, -3514173094342856229L }, - { -228816160482375387L, 7384891550204744673L }, - { -6429545033940023762L, 1845280019375987556L }, - { -4874531170284168803L, 2520265631372728029L }, - { -7919754354938613725L, -1920613329185200100L }, - { 4818550076091948962L, 4007439941177190899L }, - { 3907701057522316102L, 8115698842586570458L }, - { -2162109673539899314L, -6362182245437049350L }, - { -6296577330837677905L, 4719157127069353305L }, - { -5038523314786213767L, 70331235006715892L }, - { -4182256071671167089L, -5164070196885436699L }, - { 2347804671767305901L, 6890490985369083991L }, - { 8781747195783722684L, -830329723931541835L }, - { 5464112250608435856L, -1927457777938790688L }, - { 270499223000052613L, 3675803965927755072L }, - { 5387476652934255975L, -6395450047775553575L }, - { -2665753069813354951L, -4080814832687079840L }, - { -6640316903187366435L, -2606831033508573171L }, - { 5182130073111288069L, 7783191129863644770L }, - { 3324630100168604545L, 9095696793714934253L }, - { 6092224834024861844L, -286084573848786709L }, - { -7314979478990434840L, -6890507861998146207L }, - { 2475323565628074124L, -4029447883164980292L }, - { 3744881942029260381L, 3299671597926388309L }, - { -4468245448047387416L, -4345821869343888643L }, - { -2514532843437356755L, -5136858393253322995L }, - { -8460931029051770120L, -766778949005394803L }, - { 6058982121000846509L, 3481461461609071838L }, - { -5771467892492359246L, -4759906717287388472L }, - { 4284427580292476574L, 6567648321559840989L }, - { -4502826197302040607L, -884928098330744829L }, - { -8909965133023702444L, -598600634803733804L }, - { -5152825667036557377L, 4060129298892129136L }, - { -9001319942906464381L, 8881985935379199325L }, - { 8783326653870239059L, -2206839120202500049L }, - { 7169538748654303504L, -3760964465816388168L }, - { -7206711339673245443L, -4408205839339337277L }, - { -959892259265562431L, 7053151831906485899L }, - { -1673323329893911437L, -4266304761003565025L }, - { -5827914418805049723L, 3887362082768648751L }, - { -820830695253715046L, 3506786828941982744L }, - { -5782181341435499931L, -513904845096444765L }, - { 2663734005752892035L, -128005322426179870L }, - { 6987511185271585413L, -7874168125153003313L }, - { 1292089443730939651L, -628053432962923666L }, - { 5587170596809636807L, -2613417850126827556L }, - { 8237809229146017083L, 8084633225427135915L }, - { -2235781308356196513L, -2827636188226841116L }, - { 5423273201690025713L, 5516220885776174723L }, - { -827014178432784464L, 6712876247104625930L }, - { 4410575469603649344L, -7034242775638553169L }, - { -4472642034035214939L, -2034015765295524502L }, - { 5360193252716249224L, 5081471891122198741L }, - { -4572235983836835323L, 7451697056844602164L }, - { -5433653902594010857L, 3434435237836646075L }, - { 4134790485921001466L, -834212517906731898L }, - { 4485288889906709425L, -1712294958510249491L }, - { 1685824402735587758L, 6343065064147664744L }, - { 6091818520229922279L, 1108625331300764354L }, - { -212523426857309616L, -4053352983179692768L }, - { 8873690209863775893L, -2171715089304193225L }, - { -8812432523459654235L, 7211091108192522268L }, - { 8103047819338531286L, 3711940572100389263L }, - { 4614534509558570387L, 5444031939093833792L }, - { 4229082172984667846L, -187259441036600327L }, - { 5484460792243331111L, 3829189205530873306L }, - { -2385763800014084246L, -6039720700812665895L }, - { 7030455160712580607L, 6382913871702743864L }, - { -4237997225503760625L, -1922458832613918767L }, - { -8124291737715145061L, -4527631494483919871L }, - { 6327782024255912635L, 2809957004087136653L }, - { -1059957986215325879L, -2420735678896220106L }, - { -4603394046555224246L, 8601361276132080486L }, - { -412280426794415941L, 3234625889254726291L }, - { -3912022758691365061L, -7583905311611097645L }, - { 8274283857906326279L, 2184666272143163901L }, - { -6679687570538459747L, -1449850152673288419L }, - { -6155809572519276859L, -1979751836203826716L }, - { -341344339192464824L, 3018394569217164771L }, - { 4137861550441588415L, -5754764276232000291L }, - { -6618940267671493988L, 1914198431867340287L }, - { -7291675023689911653L, 1607477724244498217L }, - { -7953871974818004574L, -2599486547593093280L }, - { -397153165830243551L, 6139117266404059459L }, - { 4399741193484513820L, -4274767466794993785L }, - { -7321827371527026850L, -2333449639160768202L }, - { 1338155597001139997L, -2548173382440401300L }, - { -7945100475342274903L, 8020110768851902224L }, - { 4522579580699730675L, -6875195919910217236L }, - { -1777997817650119183L, -403892898634974893L }, - { -5064101783437092203L, -1401240413820955912L }, - { 1113553310062801693L, -3995214081458919524L }, - { -5709720543205442481L, 927381695298466657L }, - { 772882345518435045L, -3147890619821539813L }, - { 8903336589907078605L, -6699858563678390112L }, - { -8789465120959251318L, -1189645965180491835L }, - { -7834044567177051539L, 1676372503530702213L }, - { 1770279151425541006L, -6398305042157421951L }, - { -4941283968572768930L, 3162695053295271273L }, - { -8127231558741248281L, 7942267134725934901L }, - { 737747628416269099L, 520551528520897480L }, - { 1574449851957266285L, 8754535681980459173L }, - { -471282776174276539L, 8242818857795592321L }, - { 6739952936193376447L, -1946621864275407187L }, - { -2424982200476312714L, 3812356397318296401L }, - { 176022186483763915L, -709740258783380911L }, - { 347356729555692814L, 4480055311182965320L }, - { 7550980861784622262L, -7976605459581456325L }, - { -6474882761637742162L, 864430267918049210L }, - { 6769254801287215843L, -2567621002890372062L }, - { -7346044586598503820L, 3212842589322747836L }, - { 1815045574884249754L, 4277372518483154396L }, - { -4240219227462571370L, 439915893382050539L }, - { -649819224919779208L, -1111682246597412639L }, - { -3697860834931443057L, 8490404538930416915L }, - { 4209607762757612835L, 3651293147183772096L }, - { 5512379227441488333L, 1047566282088978950L }, - { 2554702396243693813L, 394345515667168248L }, - { -33063197416101018L, -7242273122516823999L }, - { 6204387436027047110L, -2486013089072936897L }, - { 1121696558750946811L, -981625281791640302L }, - { -67713675745955613L, -9147432709665441552L }, - { 2900236341998750711L, -3242894057113096546L }, - { 4072627124871947361L, 2568923051531765618L }, - { 3411250942283240973L, -3794534011481282225L }, - { 3459019187218245290L, 4975406156688201052L }, - { -4931935198846519054L, 7746420830231423069L }, - { 8420402881327935528L, -9137776997333750418L }, - { -2700073972687127894L, 7440926613678198288L }, - { 4135622085465759778L, 1922177824387806658L }, - { 3115364578959809417L, -39062662364695498L }, - { 7905907040079822152L, 1652221253552164825L }, - { 3117202331600018366L, -6352534687564691907L }, - { -6912405766950946927L, 664843781442374790L }, - { -4526890208931001416L, -6736625070925799980L }, - { -8362196017109360491L, -1402801909960855613L }, - { 7990163642449120866L, 2406982952217461208L }, - { 8921333090931858791L, -4099534793476161857L }, - { -7835160532401884454L, -6581739995481489291L }, - { 2597345228860385242L, 7606102447237383994L }, - { -2019901582135813985L, -8270782380997806585L }, - { -734731610197007345L, -377734071426125465L }, - { -4478738615320414333L, -5521141880370424976L }, - { -7971363857175568029L, -6039235291455986157L }, - { -4550695664824391599L, 1387891693133629815L }, - { 7004896942426055925L, -7263582847205455039L }, - { 3243444764663891458L, -1561779634771247681L }, - { 8221182849925835178L, 284616156990708392L }, - { 8413639868002181795L, -3417011274147731084L }, - { -7599742913553767497L, 6735403778117774387L }, - { -4861871033227348667L, -3342667103008656516L }, - { 7180813616057727196L, -130573597887794775L }, - { 4110358466985293134L, 8412194900106960305L }, - { -9163301540202343656L, 7441551524528441254L }, - { 7407431836530456233L, -4965816325150483505L }, - { 7168833492994704184L, -9066751607323653514L }, - { -3225184215180636592L, 535785430806826282L }, - { 8550286352383434501L, 3641342818619034585L }, - { -4037242040051553894L, -7777861270948397331L }, - { -7019860459089371337L, 1059174507624850078L }, - { 6499568859919656194L, 3031741024498209628L }, - { -6517870390876058597L, -5171583494332061357L }, - { -8816903563531564452L, 2500915269629225596L }, - { -5488567103311833696L, -8369938414214715017L }, - { 7162975208461021799L, -3741661550798250786L }, - { 3231150263108104601L, 5489430759658693665L }, - { -6472825090155306196L, -5229190418016637501L }, - { -7112727281349161724L, 8638207742440339295L }, - { -8908480908774446053L, 1135397788772172543L }, - { -162138742916032914L, -9157670355820390217L }, - { -4934765719133081654L, 5264770544051296674L }, - { -5383597847234182085L, -8622588421575346549L }, - { -1457750799424768103L, 2900589679751304212L }, - { 2062788467226997042L, 6934402819579476339L }, - { 5195212083662151172L, -4993043678018816500L }, - { -7086725269988157115L, 5165632918103528746L }, - { 3216790230270684188L, -1498081570553112883L }, - { -6772983200597124262L, 5323428267774554312L }, - { 2139536380152189149L, -2123846892813368415L }, - { 2783400616608816134L, 2640993991844476928L }, - { -6309269121238725342L, -8968814731582872564L }, - { 8703327852945446994L, -2169317814052701370L }, - { 5986578967392046329L, 8988225347013839366L }, - { -8686234791137218952L, -1293815802100229147L }, - { 7147175926193618258L, 8961828719037336812L }, - { 2812520130705527307L, -244690421709006577L }, - { 1012516456501023939L, 5782308992605392643L }, - { 7796658848573086967L, 5954450867936080446L }, - { 2642184550087192362L, 2918994474340013448L }, - { 2521303561751617614L, 1827340240292302525L }, - { -2372355039844318123L, 3067390826707986478L }, - { -7982908463432899233L, -7688424486870428680L }, - { -4773586301827797121L, -8957053550728164265L }, - { 4040904044293393487L, 2826062411708434021L }, - { -142670900232845920L, -7897084558815522344L }, - { -10691804562559377L, -2234946696504510507L }, - { 8453630879397574208L, 5221283089826208428L }, - { 5612078661433375152L, -5827827668460398004L }, - { -3592401183831123809L, -925198903278624285L }, - { -1194636486876965628L, 1773996642463132256L }, - { 7144612844993582305L, 3804996741813028381L }, - { 5952025594559102453L, -2833062603703238128L }, - { 7768859735998504182L, 2017446387476411629L }, - { -9046596974248194873L, 3950090712041650564L }, - { -6171084369920910835L, 3290438712182319518L }, - { 1781418400960307869L, 1867158814203969428L }, - { 5081999630281512875L, -2037971351242799267L }, - { -5147831879244994539L, 7584142773325361699L }, - { -6245492622672631422L, 4218402275190977020L }, - { -8665204890652827995L, 631176852120721281L }, - { -1175718303513980672L, 3584072626690154612L }, - { 8885449897820005156L, 9136594867492618470L }, - { -328163209321586593L, -3184598578381106244L }, - { -1445525508305375763L, 5152237349583818010L }, - { -2100999238041350502L, -5528588035009373442L }, - { 7410786050561217868L, -8329610059860877786L }, - { -7914164711220348362L, -8575660962837876685L }, - { -2906200250494490361L, -5595724376864178814L }, - { -867790952312765711L, -8796607059715677925L }, - { 5887767909251264450L, -2886161295052843437L }, - { -5789450489200739242L, -8648773361803380858L }, - { 1662159886119924244L, -3498141174490735224L }, - { 5012361370472355454L, 5637973419645599298L }, - { 3429745384914079292L, -9095994212145066587L }, - { -4445208736020219814L, 1969046699177550355L }, - { -5413763295704138557L, -559955330032103584L }, - { 839374495111075513L, 6529524391959302548L }, - { -7648977736915073173L, -1003589388967555446L }, - { -3664832624688924839L, -1936172468666972698L }, - { 7158412277573249226L, -7956802618942656016L }, - { 7779305491962558566L, -4843241120730501684L }, - { 8039313349173431072L, -7999087482161649872L }, - { -4220847824862505833L, -7596054202827084588L }, - { -1939839155925934724L, -4913883888222467553L }, - { -8034010027834756500L, 2813017045387334571L }, - { 8475758752811450501L, -1613769428216243240L }, - { 1099214246266343746L, -2807494640498805644L }, - { 9186354033975902114L, -5197162245251778905L }, - { 2335697942068596836L, 8495832137497385808L }, - { 5125601667360226370L, -2587705732341378662L }, - { 6606318187238773479L, 2430230045828080098L }, - { -1182364933194642155L, 7501505225324109667L }, - { -1282696136769309305L, 3965216814875100263L }, - { 1154559731683162717L, -6044142788611156010L }, - { 2886049233756462774L, 282833821358901737L }, - { 4825677492212933300L, -3505216937575005480L }, - { -9121350732551109877L, -3988694319279921100L }, - { -877752678277742358L, 2128030531232165648L }, - { -3266764465431864389L, -1383775789144281321L }, - { -1914199636241277795L, 3172927205861865522L }, - { -4687907120417383299L, 906209675925715648L }, - { -474253911596715394L, -2676977326907041001L }, - { -7075290400477487025L, -3777175211466737205L }, - { 8134957124130148548L, 3995726904947096316L }, - { -2992238854808660187L, 7288621377035663598L }, - { 5996516183600836003L, 7996323395017882596L }, - { -371549095799671162L, -1963723397664742141L }, - { 3902975175457565825L, -2096359685759558164L }, - { 6605036583318392521L, 88737143141685448L }, - { 1891100275270423451L, -1745981040411221219L }, - { 2119245665259072674L, -8638991354136966831L }, - { -834774890825819923L, -2471622230063928436L }, - { -231771124221128734L, -6259176704025750253L }, - { 3133196876747178672L, -8434923388925317687L }, - { 7298692169226203885L, 3209300628873906858L }, - { 7126455091552696586L, 1374898972361753100L }, - { -2143648506542037333L, -1300918538344005110L }, - { 2865309216991778464L, -4741984767119458210L }, - { -582169278536046195L, -595021088316172951L }, - { 8080177625773872889L, 5605701634825149343L }, - { -2641866597771089394L, 7968669847987563730L }, - { -4210759777426999986L, -8597023424475589165L }, - { 8940623302154716559L, -5059512967836662675L }, - { 8753678355208533280L, 7535049518488467454L }, - { -6281297936039038456L, 7457909342608693553L }, - { -4466014453281785565L, 6248139512270887953L }, - { 6273362062923197148L, 3871429116281885402L }, - { 2333217083667471091L, 193753548221085829L }, - { -2134695293413683177L, -5181203095625161285L }, - { 1638282373040657672L, -6368003890771549617L }, - { 3200622258378038793L, -3326095973277466097L }, - { -8777912174432066160L, -650529619692776996L }, - { 4509402067996738269L, 4817027167761014779L }, - { -5444623700171973227L, 5528512453315198768L }, - { -4861257960719874399L, -3622276494377371155L }, - { -2931845644152220868L, 2153074555510703652L }, - { -2415035074251453041L, -1006946510571967488L }, - { -3415608992526650142L, -7840424641444647872L }, - { -1100060277548286709L, -2271450031970914418L }, - { -7950756431533405941L, 5441868159791814728L }, - { 2529778543681983619L, -8854951009938006713L }, - { -2509511542105356611L, 7853654232309547016L }, - { 25235701976844069L, 3517855992525250730L }, - { 3512243450460933893L, 3972430887397192492L }, - { 5497081699936367558L, 8383940244504833083L }, - { 8834833749235004269L, -7334675479385357802L }, - { -8786955172657476976L, 225166460691346798L }, - { -2806229680204644453L, 740198459796101590L }, - { -5310949673572257587L, -379186807769692471L }, - { 7180989110601385791L, -6432354723404698372L }, - { 4574812998786692932L, -6039313492850770833L }, - { -7191136183375597108L, 9110930278055289403L }, - { 7817612065160053901L, -8258693647460211987L }, - { 4092147258927215079L, 8293168384517520663L }, - { -916694886327147203L, -454314143918346215L }, - { -8155481011317235899L, 2292426029549420190L }, - { -6577214469178899288L, -1924115905005123142L }, - { -4704682976594284594L, -3476799468679251934L }, - { -970000750564611255L, 2791886232557467235L }, - { 6392037803435901919L, -5315497557080833696L }, - { 4653466442162924160L, -4133878190287801900L }, - { -4217569099833350175L, 4839504582831160901L }, - { -7494295064988163591L, 285188759198988857L }, - { 268071204677339466L, -7292395415962103265L }, - { -3128139626778549626L, -1174396804280713279L }, - { -8490295735340959824L, 3060015218167934818L }, - { -5162368829222403127L, -3393984135225595684L }, - { -4379157681365371219L, 6657143563587679125L }, - { -4505869932044746193L, 6319966515037375738L }, - { -7725004848904746158L, 936557326289189579L }, - { -1077347489733049759L, -1247066987861982979L }, - { 4372692724364737369L, -3256637161950359616L }, - { -6095523387109702205L, -1290870227696084252L }, - { 866555760732064401L, 8351687362397734775L }, - { -6043383891507219565L, -8719495801073949943L }, - { -5064298145687783678L, 8068427516165501654L }, - { -8284554766413268444L, -5044265653521567680L }, - { 4358509246174021158L, -8826147307297954564L }, - { -314402459279271878L, -5933542775446256478L }, - { 4534052702364464050L, 9082121576264326126L }, - { -5069975264209271430L, -2280561666567702498L }, - { 7618881160105474363L, -4794858632711295348L }, - { 4167592104901771551L, -5018298706610926606L }, - { 2277499839812963141L, 4242448307766779616L }, - { -5797737740917833733L, 264493678146677010L }, - { 5386843611229288306L, -819526727917515385L }, - { 322032948055534721L, 1736760202411262747L }, - { 8623908495470433985L, 5436650610054812536L }, - { 1464656873108399270L, -5202587803213018241L }, - { -143110847782655873L, -8510401654127848035L }, - { -3683505493125515417L, -8668734897929026338L }, - { 5263884653798534228L, -1131791277133219585L }, - { -5596816932431872850L, -7650966445894865682L }, - { 449263668055475580L, 5943833600560494318L }, - { -8209880385374160761L, 5433449067757110313L }, - { -6160876842633556933L, 2106036607754168591L }, - { -2822510119276015598L, -1169309301398832317L }, - { -1867833971803598158L, -5215126721010895403L }, - { -2743011208375680513L, -1334137156024540894L }, - { -562758870972224424L, -8858736479960857044L }, - { 5241707884356795802L, -404549239240361305L }, - { 3044382044884310303L, -2578848030062168952L }, - { 4240643424518839454L, 2009743695925300205L }, - { -7202731734581844883L, 3560548372442035725L }, - { -8098501199143125283L, 270444074204918235L }, - { -2550459180607677020L, 9122097925106566372L }, - { -1776717083783659251L, -5066722509244044276L }, - { -2343369089757631624L, -8570356075106548461L }, - { -6293279254462751659L, -3762530309367743723L }, - { -9100627021059872276L, 3178453993421526858L }, - { -1298100985130924363L, 1942143010909260088L }, - { 3390116780901102550L, -334576415657279307L }, - { -4663999614093100429L, 770277787515502772L }, - { 6916372370306791572L, 7435605989219979813L }, - { 1488349423055656442L, 2113647012381226787L }, - { 6773020852755024150L, -852366200604922241L }, - { -7005014351468554871L, 7485133827588013786L }, - { -4753926923183579314L, -2312386844690556698L }, - { 5415870192658316069L, 463479081020224407L }, - { -2670881940811475410L, 3507169512028760304L }, - { -7225213211793183097L, 3981958135443174761L }, - { -5703028807893997804L, 1264194096693403893L }, - { 6561444537664669662L, -1954354266407705042L }, - { 8939981796276591301L, -4733058470244221471L }, - { 6017910964940092953L, 124625799714735872L }, - { 4500890776998912544L, -470688000960484088L }, - { -1835018042586347444L, 7653403345510987769L }, - { -4191687948466793374L, 7139837548565246758L }, - { 4106435482907441086L, -2126413898085076347L }, - { -6130167349217050086L, -3959969099349735016L }, - { 620129892796426300L, -62209784009239054L }, - { -6144158488464216798L, -8173934466594508364L }, - { -625006850515938527L, -5809518885326364398L }, - { -6682172611475406987L, -1714940790350536113L }, - { 1220842624016183584L, 8269949841236476393L }, - { -7098540157067814615L, 3531738600537340144L }, - { -4378743347226734130L, -7327441054828053137L }, - { -6508042393772984279L, -1840909133921621497L }, - { 5289282493574993598L, -6455879780378370298L }, - { -6781000719696595982L, 5177178370843840548L }, - { 3322666381578332368L, 3134586237016402769L }, - { -8173363279507413324L, -6524402652348374595L }, - { -3603049973704190207L, -8475965567552946377L }, - { -4316988796658196446L, 8866378184082028533L }, - { 914989291445423876L, 272931860159225473L }, - { -305370752767861151L, -7996913970986439765L }, - { -6987550192802158001L, 3191979351473290494L }, - { -942676483343861967L, -2153209479961610339L }, - { 539036846465448158L, -5955756213951094362L }, - { 1605373100913987077L, 8903900718100188013L }, - { 7713068526230669637L, 5191047107663767366L }, - { 7241900405827926293L, 3287960505839783884L }, - { 186408038263119881L, -725098263159168344L }, - { -2429472274603752977L, 5905214161924496910L }, - { -5720789098334319209L, -8856816197357357489L }, - { -6674769505767916301L, -2005822193174095488L }, - { -581393540490176967L, 2751755671060133347L }, - { 3124744789645879825L, -4243941635080647386L }, - { -5602915602343937931L, 4501087988245599909L }, - { 3263507419526132695L, 3560352323108238394L }, - { 6937077332985554718L, 8731941696760140572L }, - { -7919624999578199393L, -2867710728097054893L }, - { 6556190618267765484L, -8112004817108418177L }, - { 5682381095734864238L, 589618283089403862L }, - { 7614251273120089370L, 5724958541163307665L }, - { 3395157685499349978L, 3613526290468317309L }, - { -6398328093992251036L, 7596033768669695677L }, - { -2651093395236575804L, -8014022518016193809L }, - { -2097470820892650054L, 4842033680917117547L }, - { -7267148748500151232L, 4770828425873813766L }, - { 5507274834982481157L, 5091231856170754714L }, - { -2194323672581532616L, -9144268390755820585L }, - { 2269493654210886217L, -5259401698591517179L }, - { -4216275761811372636L, 5086789201000199700L }, - { 7228709978053803804L, 583987105370029162L }, - { 1544682503099095700L, -3570389176034465400L }, - { -8135200911288478327L, -2626445514253500075L }, - { 7339704802803690870L, -306444582707945130L }, - { -9063598666954112733L, -2616502440081045224L }, - { 4249185982522288588L, -1295355602551546303L }, - { -4695745996091883154L, 6444320363226433806L }, - { 2627137268581003083L, 3621089752612839029L }, - { -2578238879441406084L, 1208907918137575489L }, - { 2429552460105156204L, 8195465270198839978L }, - { -5016405662860787559L, 7224902700860526388L }, - { 1213685060600888916L, 4648386381705116369L }, - { 5207480625629771054L, -2798226710980115801L }, + {6918025063187695999L, -7374073936536430376L}, + {-4302098779834749733L, -6427377105285148822L}, + {-2998166160713018281L, 7659024777716224941L}, + {6864218090047839419L, -2038618426559555633L}, + {-6480366142596956747L, -1481473859315439130L}, + {-3953929349995588965L, -7767492055996579519L}, + {-6434184480940321117L, 6079588180421601534L}, + {-2616020178111209730L, 7047615666104579453L}, + {-3470854323700000575L, -2169535271171686428L}, + {-8036337532808841402L, 1641396966678784974L}, + {-1838610295139896408L, -4786474928096720073L}, + {9036419607108199075L, -6004001502991493996L}, + {8611141083647120330L, 4105350226480938181L}, + {-4793706706242476352L, -5867379820156476408L}, + {6185226889748380721L, 6886539015187124138L}, + {6731536092874631L, 3466258189393024666L}, + {-8923861991986181406L, 8256512301565609954L}, + {-4580685021937757673L, 7519819888072656255L}, + {-2043568341533119453L, -8660816345503928947L}, + {-4288028997403044897L, 8510040706351439064L}, + {-3641643329425012519L, 2411460379579264364L}, + {-6817119268007077771L, -8484709459460756717L}, + {-8321648494418841644L, 1039740944917575917L}, + {3538050101539897582L, 2362743675522042414L}, + {5258435933086838188L, -4848199824445801375L}, + {-6362280687837106391L, -6773951973449392900L}, + {4361114911410139889L, 7972785452136460766L}, + {-1076301070271465131L, 8384558886439123465L}, + {-4260306398241836702L, -4749396038389899603L}, + {7705536077211324767L, 7065275513754572192L}, + {8848360094546279194L, 4251126870462033189L}, + {-5382395732421186272L, 5680046751876868219L}, + {5007322629095085719L, 2731373470772162258L}, + {-2266009261689938298L, 150690519598499383L}, + {5654476833875738032L, -2061690640343340129L}, + {-1954811291194740257L, -5419036513975901981L}, + {-6890789870811920961L, 2325998689782383239L}, + {524837945339210726L, -3715887750118223357L}, + {-1133972665109461700L, 8834173286146294154L}, + {-4865757570688729898L, -6727182884028692069L}, + {-5911952424608985308L, -6049127781180242975L}, + {-6304772494633596832L, 4470293576424874190L}, + {2836199333566295238L, 8864173708278309166L}, + {3102360108557900747L, -3733512248908528829L}, + {5510180088237800518L, 4123807595437003297L}, + {-8414952918150047989L, 4522684623950545953L}, + {5518787400664681885L, 2205797938276248879L}, + {-4455668116525212265L, 1731227964152171874L}, + {-669789427027077066L, -2931659152274064678L}, + {-5683078161783893371L, -3845762003302041006L}, + {6680667259477693981L, 6292675962771587338L}, + {-4632250858732682011L, 6003962969507266903L}, + {4901952080618105871L, -4810616663349653181L}, + {-4868621977036224471L, -613718830978964302L}, + {-8549747210893534701L, -7652856120690185923L}, + {5559482992819465126L, -2935778481022073662L}, + {5338789689922860629L, -7042626160273499760L}, + {1932600112628823928L, 6801794573522504318L}, + {416099586592393932L, 6439908650131601962L}, + {7024137889223187025L, -2290925491907122061L}, + {1045082728260193951L, 6309788576958218843L}, + {6002976951327322033L, 2207846278132305118L}, + {-8528919693413636608L, 2135399881265353259L}, + {216915620139749202L, -4932202155253948654L}, + {-8015959707258401164L, -7174775121992399387L}, + {1940599133729319055L, -1446235614858172175L}, + {2459358417139019246L, -8654965189671283179L}, + {-7818955503663384729L, -3934147459468506343L}, + {1042851174159079970L, -1979910437861944855L}, + {-7917252407765639829L, -4633245311428649467L}, + {-7720303362404590874L, -6295287635440345944L}, + {-4157762089433661655L, 6496007637698701064L}, + {7715936428342659469L, -1469964384035074732L}, + {4195235191127312039L, 899631082723122736L}, + {5215159923805118598L, -6545879335313020661L}, + {7616735844785551706L, -7041352949020998262L}, + {-8947005412578780411L, -8900196105579670687L}, + {2608419102060352937L, 2291692068482575428L}, + {2932246401534482789L, -808561230173772212L}, + {-5972416795070818118L, -6748248077446108801L}, + {-5022910438308829379L, 9072885020094111509L}, + {-1910630276390364207L, -9174830524950881316L}, + {8023252197284180464L, 8037539466518319583L}, + {3380163176409638595L, -4855957689303967113L}, + {9039213805856064871L, 1650794118333894986L}, + {-2271629174168076410L, 1347251894944291291L}, + {-4820143586371341417L, -3594063807503715367L}, + {-4959944807440428194L, 5383365720172155085L}, + {7003928884444229348L, 676120417416765368L}, + {859489746443979827L, -7833483946396960669L}, + {9102710007397480162L, -8584324320197179283L}, + {-4175348964434949086L, 5647267223701886330L}, + {-8008637466668367969L, -6055429896007822421L}, + {108482635692190168L, 2968129854880531728L}, + {-9011339488466116365L, 8434635880912750808L}, + {-4004467558640862965L, -2442649750845279594L}, + {7949886151835604363L, -4218369913800524038L}, + {6571460655316068733L, -7275245798374398558L}, + {3933351809358110799L, -6947442526623576080L}, + {7530035428683392997L, 2445755963621946807L}, + {3004476708737695774L, -2695985919888627981L}, + {-6839738311238403945L, -5007277885229986319L}, + {-2115438695015824267L, 8793986460873025460L}, + {-6122328203320968341L, -1039312793807793706L}, + {-5548421559246888919L, -5432599954223186038L}, + {3128331988620583536L, 9069025730792010839L}, + {-8643493112127109679L, 1331229929640790962L}, + {8814314992955228960L, 3847902944293450150L}, + {-4787601413732006112L, 8900584343805263383L}, + {-7388222168387984808L, -9082309407529645857L}, + {131518593310830564L, 2590646000392089354L}, + {-6324750245753466159L, -2802698424622117505L}, + {-8649508569357882764L, -354092374739121335L}, + {-5132193229074755277L, 5349864399629044838L}, + {-1406233318133878829L, -7778322178019776638L}, + {-1351642603059584651L, 5905272679963588442L}, + {4703467631404861482L, -1412638527591654637L}, + {-143562322856237972L, 246782552965118392L}, + {4729655314786007157L, -6812953036143724656L}, + {1143435340240345532L, -671788510726657486L}, + {4142673406702890802L, -5618565448224292259L}, + {-386385592979460209L, -3300708192346055254L}, + {-968019894004968401L, -8047458695647085054L}, + {7431201141513763234L, -1398860770070745887L}, + {-8435079361655022794L, -7645011917469248859L}, + {4882503199526148408L, 4410126282669136718L}, + {5872988456826904838L, 773528843558202110L}, + {435774107218292665L, -3049543393726570481L}, + {374390355263912769L, 1475262870450658412L}, + {-4886205263344788933L, -2495428859633732274L}, + {4523286614199751311L, 7841582144919037703L}, + {6199714818303858941L, 7901445636911613076L}, + {4303994841625385970L, 2937718694375539717L}, + {814757341681862090L, -6478582819189379036L}, + {-5700445004887010774L, -8455858509054528766L}, + {-407790974857570816L, -8859596179726191766L}, + {-5805754751830269767L, -152275305346719872L}, + {1598196252757994963L, -3928731748771019828L}, + {-6934713071114934765L, 3826064854799786237L}, + {2185603020959026426L, 4940136396487362160L}, + {-2709341181476883011L, -3919124922665860644L}, + {-3382770288363519601L, 6073097037575507405L}, + {2971838200308166371L, -7934498192931647428L}, + {-6368589310665521963L, 6154526145046318539L}, + {6353042450513427021L, 2744250502633008273L}, + {-2886123871504743256L, -208572599238022818L}, + {-1624168552941053619L, -3913047860997752862L}, + {7320019149991831488L, -6407203038559925672L}, + {-7826562494167066071L, 3656950149331658711L}, + {3032358658826888909L, 8478297990310817113L}, + {6635552159941043305L, 2369935842067964507L}, + {-7730726826982994831L, 2814934766308141432L}, + {-3283541548043086026L, -5626755390737090180L}, + {4756392346740163255L, -1618854092540178479L}, + {-954514304963761905L, 1120375285910469551L}, + {-2677127018316745041L, 4533997389224788953L}, + {-6498470148726531477L, 4211221291483652077L}, + {3703731056182724504L, -1291375588013924342L}, + {8390865458275667313L, -111721904773166244L}, + {-5861077228742736805L, -2070386036672698890L}, + {-4143367647396165132L, 5662645194542529413L}, + {3940052427164582775L, -8034322082658011232L}, + {7449120853716556570L, 5233008944754805539L}, + {4707315860283250027L, -2735344620674927100L}, + {-6483773415321497379L, -8801767122342998918L}, + {372467878783610102L, -6728271425602167056L}, + {421540060564964849L, 6814719141747896598L}, + {-2932751110479442880L, 2620333485388819159L}, + {8138296947263184633L, 3186892836605521521L}, + {-8443166457721319544L, -295561944926731323L}, + {-3484858775294549484L, 999377954767431452L}, + {-3825165428097955770L, -5266530330876878010L}, + {-6113875314365935219L, -8700518321068076907L}, + {-5236044337855094887L, 4166279963844450417L}, + {-7689418202059025630L, 2745081882899556912L}, + {-5994295218119667616L, -7200741691189504631L}, + {-1019731893393738021L, 42985972231797947L}, + {7964057313498750371L, 8468135790260799298L}, + {4350973314535291960L, -96363394771300893L}, + {3374846342506204851L, 8183621324647001307L}, + {-147780277660396961L, -2020465953003062925L}, + {8087892087579153542L, 2081576827994983699L}, + {3656634502747737496L, -9188914506833434747L}, + {4352397869817031502L, 3608087870457978178L}, + {-5463203683033862729L, 4794961360367615558L}, + {-5829826499110216168L, -2966406905602723212L}, + {-6224968695182446745L, -5757313901190477182L}, + {-162412897360955265L, 4602851342136911659L}, + {-313093481501038119L, 726082021515462476L}, + {-2394654531394959372L, 6077061020288043189L}, + {7129356685384777594L, -242956320069229460L}, + {-5610165828587809576L, -528970810714251548L}, + {364583333953451656L, 1209647354565391723L}, + {7770189435264039886L, 4432114537846063450L}, + {-5378637197958159683L, -3569583594959549373L}, + {-4245901361761642000L, -4908415462875986721L}, + {-4163321130952495919L, -8783734595860148591L}, + {-8760784759435664042L, -4001594145043032047L}, + {3811531583056254939L, 7138061436855517595L}, + {8328872328718915031L, -4681101102915066754L}, + {-2479256131109004811L, -3818044021289010674L}, + {-2564801102635362682L, -7621503644046974425L}, + {-2549390396843178245L, -1355036253044087129L}, + {-8447951661202617313L, 7367005715843213070L}, + {-7223721101136301216L, 5932237518320039024L}, + {-4579553338717938002L, -1415752620502773376L}, + {4739886663385123868L, 6842423570713214542L}, + {8761999406836444027L, 5431773349801366084L}, + {6275926421168556271L, -6741136388070930457L}, + {-5553742881209813652L, -7463405596637494313L}, + {-5466140015739861861L, 7090908124796334951L}, + {5086336981243921643L, 620608991523776456L}, + {-8583190303195622879L, -2528844698405021565L}, + {8136795285908184024L, 7834757658823892326L}, + {-6251123780956813536L, -2362184439993799450L}, + {-7029587377954900822L, -457385112617225992L}, + {3992372666585781254L, -3425505215948273419L}, + {-8934415453060377171L, 2889516969299688088L}, + {2171086741014253062L, 8747101652358416539L}, + {-8138586755841972043L, -5230807087849230444L}, + {1593528759643563657L, 25684661437075760L}, + {-313864667208179242L, -3034251152967214837L}, + {-3266427946201164069L, -7205525509099849070L}, + {1393676534450976148L, 1600133987975139142L}, + {-5699612540743270476L, 2411808686028794220L}, + {3643737955198081018L, 3624719045997588137L}, + {179868577584127337L, -2425054572247905446L}, + {-1202636047919483341L, 1008426614634206792L}, + {76328973038141475L, -6532258192268933884L}, + {7815448976579876396L, -5793434878495490438L}, + {-2551332906614530185L, 4894172006704360878L}, + {7897839487727186038L, -115287274417874605L}, + {6782385125028425703L, -3521765042231025350L}, + {2366096266549575004L, 1600704175490725006L}, + {2646330593616093333L, -9112186430548909433L}, + {-5734352638286816291L, -7935930112754314515L}, + {205990945300406766L, 6482328665055844390L}, + {-4107074334265298499L, -3655747932822203685L}, + {3070291460260888908L, 8334448736154584008L}, + {-134765739369511623L, -7474942726871719713L}, + {-3950948930639643722L, 7328973455013265639L}, + {209643423615708418L, 2135211318988808865L}, + {-2464819451665246158L, 1595264701587118086L}, + {-8631718977760664612L, -4814735239273499159L}, + {-4893221336143393409L, 4608470873153960630L}, + {2390264798730683615L, -2505079969232422515L}, + {-8300749389255144164L, -4091945713696362506L}, + {-3549775289570958064L, 4711670840533830052L}, + {6514441262456966668L, 1033420383904761807L}, + {-7301663820335638615L, 1786260203217802269L}, + {4181559756778549411L, 1887690114220705884L}, + {6215253578855337690L, 5107740194043393909L}, + {-7323335092456459405L, -7054773565482904481L}, + {-1860577032441476467L, 3268456599417932306L}, + {3644299936077808538L, 6853477546599029409L}, + {-5161174126835724701L, 6418903298992325081L}, + {-7779787747613135503L, -1010872026945774909L}, + {-3446338450597548406L, -172855764288287246L}, + {-2662609220502962318L, -8015039012110903940L}, + {208946340318274486L, 2793507753767981995L}, + {922869894074454969L, 4440830233961398693L}, + {-8428909140908329623L, 2106468816516885040L}, + {-6875524699939418906L, 3742616954716811326L}, + {5154230294972327697L, 6150997880677494555L}, + {-5868880138852165350L, 7468379017433552164L}, + {-2697155020815738737L, 4313139001296146702L}, + {6278899766774254324L, 1368605690955846609L}, + {-6124877505863871039L, 1078518665221359628L}, + {6113186870348198684L, 4141878510658134343L}, + {1328797232741421065L, -3543059961120850079L}, + {8936960355443139766L, -6946112468654970433L}, + {9069883653377839816L, 5148075934725699275L}, + {-6698244186639407697L, -9162869098327881138L}, + {6633988379507542818L, 5549765864648998779L}, + {4243888593320380368L, 2997246184917475828L}, + {1299920470993756698L, -166510666501194299L}, + {2315187937474071861L, 7661746883847328813L}, + {806120923801759332L, -7371352627644098700L}, + {-8537792935927015380L, 8121135036776652016L}, + {-751623313460664870L, -1684827436846980131L}, + {2455098182130434513L, -5117312998044745719L}, + {-3041072155357054618L, -6972979759059535816L}, + {-5209258140949481980L, -2850141282674081949L}, + {-7784651030341623624L, 8999636098565609468L}, + {-8624281235662545565L, 2802906109949156906L}, + {-5185374153462168974L, 4042442480817740884L}, + {-8728622305551122108L, 5363590029784421735L}, + {3633316488676598179L, 4925791459461278180L}, + {2341850275669250720L, -4459999769175253936L}, + {8998800880957295269L, -4343678313183227809L}, + {-2791108801739767859L, 4636488046527593561L}, + {4207716787796156879L, 4231756216975414682L}, + {-4083554261407892809L, -8262406562901842787L}, + {2977762250156739855L, 8049673030862839736L}, + {-6066243213313847782L, -7613157457395411777L}, + {-3134677742513834402L, 5369087783798165525L}, + {-5231660756514911289L, -558789175821081719L}, + {-7916346081138370244L, -7638955099780654605L}, + {9105509708951212631L, 8857680368853459781L}, + {-3071680532260795719L, 7548887970352736530L}, + {-3152428524199455707L, -6442114135533810709L}, + {-5276930195233923125L, 1364963280258649846L}, + {1981446637702558747L, -7751173762713374236L}, + {-8822786060285469479L, -187974834805915694L}, + {-3086453182842996354L, 9107364158514537855L}, + {-7521798164704108718L, 2384045956629947261L}, + {-7460429880600038351L, 4800095578910651073L}, + {-5031515429775225415L, -2055654337088316962L}, + {5662627828449328757L, 7046721834457541245L}, + {2804157867790593789L, -1341792999416601132L}, + {-6183934836359652529L, -657594756031460913L}, + {2425310972806241292L, 1258033866943800792L}, + {-7877162957672040682L, 7635167739849781937L}, + {-4575453773921540745L, -3355393194943055905L}, + {-6152892230011262930L, -9193001981013880312L}, + {-1554429781063399588L, 3405969670011375161L}, + {6395550633581619922L, -7583323290006007445L}, + {948199150697514149L, 4111589110219820951L}, + {4123518706442132507L, -8438953137254330460L}, + {-8620024481834864148L, -6636388327463820199L}, + {-4627311960537433998L, -915962921757457254L}, + {-1517263476517287336L, 4046174639048253801L}, + {3087156144310177979L, 391565409154016317L}, + {802387854806242344L, 1031677631873271699L}, + {-8223164854162179626L, -443891348496457499L}, + {-8876883825341271093L, 5762028792245015141L}, + {6189924694943538938L, -7169703049494390501L}, + {-558048344469199000L, 5981321487249463887L}, + {-6388815497071843014L, 3273238115129858121L}, + {7970082794223216108L, 2973205891766662972L}, + {8943146030443257086L, 5791248506749113385L}, + {1919558538884824162L, 3150174799334525665L}, + {-5413821296846136841L, 8082825464958206177L}, + {8482255996292420949L, -7115778512034379502L}, + {-2059351044571046226L, -4782846315945295244L}, + {8122315934009425936L, 462528816707067945L}, + {-6002133579485340781L, -3975376714763954783L}, + {6439465961707132723L, -756936500656028513L}, + {2763117897158909339L, 1091745287377893475L}, + {4241846593057682886L, 1081100136763965880L}, + {-3156374353704014890L, -3581775682588778942L}, + {3611310604513156987L, 8348262968344472468L}, + {2539868227324188707L, -4712857164920834878L}, + {-3160603853021599046L, -8654224927278936599L}, + {-6694565052629228305L, -971528287258097624L}, + {-2829087677596299075L, -1534581713432222723L}, + {-3855421753196086451L, -8760600350092291439L}, + {8353874633819013271L, 5978997520871435617L}, + {-2485914493713180581L, -977211097680535312L}, + {2924901647540244351L, 3960491378165335258L}, + {140830235769158231L, 4133918999398648450L}, + {8924525771772034372L, -726044173977679325L}, + {1991645829771754924L, -2067381390897988577L}, + {-6409133430531739321L, -6175415710899927619L}, + {-2477349252564343349L, 3988670256167231709L}, + {7592298137540200578L, -5726518256936929851L}, + {-8706120837264950112L, -5760350640517553208L}, + {2330049856518978017L, -4092773931089397265L}, + {-1333715564956417750L, -2231452272587190724L}, + {5321303278236129003L, -6746469835008817808L}, + {1316603583801631000L, 1137804323520560994L}, + {-2052093890021786856L, -3783187984532267053L}, + {-2212919092132307727L, 7186765338995597614L}, + {-1138248150179747101L, -2184981677146577517L}, + {-7297574785915472699L, 5009477804126403419L}, + {3159392081609537393L, 7309719615409023592L}, + {5438969032594710113L, -5123802317331232347L}, + {-1117946266762888661L, 1492594410329911808L}, + {-3513962250060316650L, 4906439631063318446L}, + {-95470470775096400L, -8272067922919754322L}, + {-928547845419412355L, -11702280433339640L}, + {3064209748165139149L, 5541367980759525384L}, + {5570740544374382296L, 5321829123710270068L}, + {-4848606292970499536L, -96910214182218274L}, + {1249733847255258336L, 629248191606577595L}, + {-9081876379081045111L, 5443102257014841765L}, + {-3178350430540128617L, 2432498732626009926L}, + {4580722282117591455L, -7643528894779295786L}, + {4910338723691444614L, 6967629769055776438L}, + {-3861107435455294057L, -9205931005525733053L}, + {2455351552393139588L, -2953211184067244974L}, + {-3098045343671378301L, -3817179460848825357L}, + {1276702104227748441L, 137325564846715403L}, + {-8725606894849543465L, 2905193080015222394L}, + {-7043526197674754455L, 5559996365359216967L}, + {2543751490914779898L, -1370174742699523774L}, + {1111188191726666289L, 5295334064948911884L}, + {3299681536744686092L, 9040207948700213390L}, + {-4968407975804173061L, 6424222583290688109L}, + {-8443232222924958642L, -7778388515977146250L}, + {2692856020311995538L, 2968383219838059276L}, + {-7295992543900831720L, -4457539035332779798L}, + {-835426980056055153L, -6325659580231608755L}, + {-7189216512060259212L, 2131181344124063164L}, + {1546667140862204220L, -239160549067820612L}, + {-5157738526808785307L, 9115760354926169094L}, + {-8400112152363165211L, 5857402912101139691L}, + {-2562446629278342489L, -6148111590522678005L}, + {-3984312152746163924L, 7844800256926351421L}, + {263973571859894620L, 594261227115607566L}, + {5863738959863392730L, 4867956032043813886L}, + {-3750469576779228200L, 7192121623829732387L}, + {2859093520615066384L, 913297396549536029L}, + {239574671716835044L, 3087819404448657542L}, + {1758244848125395099L, -9078334339121564235L}, + {4692926060224877180L, 5116375739982667956L}, + {2328985435627410056L, 3709473589115479198L}, + {-712944964417726519L, -6007503027678389854L}, + {7575628018175957835L, -7383688701150280008L}, + {-6461647485226712981L, 6750569702211012204L}, + {-9175844658802936237L, 8399161365461331759L}, + {-1791894645853433273L, 7124236302180108571L}, + {-3209291319104719345L, 3052940112246927168L}, + {8435774909159574457L, 6041127832456521507L}, + {3068904622159492539L, 715670353716033395L}, + {6405574310234631665L, 6291430988703679177L}, + {-7236310029621050895L, 5100784183499609393L}, + {1939741827857698370L, -3177132287591049454L}, + {-2711876483320863546L, 1524168983814198921L}, + {-5191337944005182792L, 1387248765441775509L}, + {851301927202074099L, -1263258347843133972L}, + {7817558216393575797L, -5162993824073352503L}, + {-924173671401578135L, -5108957871026680251L}, + {-8870424728276452684L, -2321064657647312260L}, + {-5612135981154918473L, -3273558579175712345L}, + {5352840780989627332L, -6783535534084823449L}, + {3115501649750915797L, -4387292192090486464L}, + {-7282764488136203731L, 6453482773752879162L}, + {-4410122159075968274L, 4725424300607610937L}, + {-5112841868993719465L, -8779015554522488103L}, + {1606611627835962209L, -5590171830014603568L}, + {-2564625118517656156L, 7741285374849676494L}, + {-7347999176364584697L, -3065690164342722400L}, + {-7520586016175454443L, -6390387248180888651L}, + {-3582872246453049220L, -9203340940844140689L}, + {-7208670274224679141L, 6037856226854376075L}, + {1407185043226639926L, -8963249490810952056L}, + {5548472899324259498L, 7197773686811339894L}, + {-3424704481698318306L, -3228267337906479612L}, + {-8898045228081312865L, 7299625475871751770L}, + {-5032961205984329240L, 1080670899373428777L}, + {2319704565344125424L, 6271105296589611136L}, + {-1858090959206557106L, -7189583006151098162L}, + {-1847512527385111193L, 8502130611969952629L}, + {-218817722784924760L, 5246262405009713204L}, + {-4644538017574761086L, 3272921218846794606L}, + {527762499588866419L, 866014286715394507L}, + {7682925460546142196L, -9023754876300785684L}, + {2618673582975102782L, -3841047495859134001L}, + {-8339358073633623035L, 6392875486843295666L}, + {4632344075623474881L, 1582641584198542259L}, + {-2634725682046056737L, 459419838955507648L}, + {3264353773883015103L, -1523378724173083514L}, + {3450256920483368564L, 4975188291142344612L}, + {-8453373497678191816L, -3839576070757390241L}, + {4324811352547234228L, 580873531256814001L}, + {5231611966727557421L, 1244921297520573100L}, + {3935063678731059941L, -6192996608723472660L}, + {6338309551930394802L, -6490545382515146086L}, + {6622686033142507173L, -8428752124385041158L}, + {-5278373537512798709L, -7666003634852458753L}, + {-9063940204441257539L, -3060099377907561092L}, + {-6333833756325058415L, -5029009158854294732L}, + {3799491381076234981L, 4200533976809289087L}, + {5050905817684546674L, -2743556952975018462L}, + {-796624655126841621L, 8394910217060245525L}, + {8334872366472578300L, -4013169907403888314L}, + {-5288752267258476166L, 1615789454281352829L}, + {4335956913966038392L, 3669603612307880087L}, + {-2247074774901543705L, 384186682932301514L}, + {8474035569080943503L, -2072617956194576812L}, + {-3170167932314701995L, -4996126312151911632L}, + {6999756768956410897L, -1222840955640726138L}, + {-4451078577344071588L, -4574301927676188432L}, + {-8433054951584831409L, 2019896101789516324L}, + {-2640652121643463448L, -6207648221610624100L}, + {-7045594934288710931L, 6907612079776695168L}, + {-4036935141669708886L, 8337968798845695874L}, + {-7734407512972194081L, -352014965188200686L}, + {2053541054148333962L, -786335970157264827L}, + {-566653752431971002L, -8089305180282021945L}, + {1898804146829115409L, 1490169990672309460L}, + {8507984725723339263L, -4741793772956239321L}, + {-3742788731083462619L, 4530848119791548171L}, + {-614166854038590657L, 4495302806552748358L}, + {8147682807535759575L, -186502124698730499L}, + {2813322236228401990L, 8130069379689580810L}, + {-7697111451322995338L, 8936991586964556806L}, + {8023578719528819358L, 846744111432227894L}, + {-1666048881205334172L, 2007039852402613406L}, + {2861705383918865808L, 5712283346400961499L}, + {-2067264870309406817L, -8080281899293212696L}, + {1544932780962992751L, 6732646774857284315L}, + {5752963315823730718L, -6680909940508528513L}, + {5563418456763501584L, -4108919598993076052L}, + {-956763705026909993L, 782815035938451649L}, + {-6723021793890249884L, 6375973421868888415L}, + {8199491799885937348L, -2824046112291289709L}, + {8254326245904567972L, -4939591038817699096L}, + {696534455436688862L, 57855698877748437L}, + {-4526166123204455007L, 6259254177722304651L}, + {-1244479971115743946L, 5213539213896354419L}, + {-4712028527008594695L, -7017914521199006226L}, + {3845317619056596538L, 7090203329717532364L}, + {1397508695414938292L, -8490878741424764802L}, + {5199778266100306999L, 7458354268561924417L}, + {7649610185133409821L, 5850524304651887209L}, + {-7736979936936405855L, -1688565444532845272L}, + {-1871499676764587199L, 3567966374680431242L}, + {4089210433244498057L, -6849207453391081019L}, + {-5319342193649020117L, 6300983384645314585L}, + {6510328602034064204L, 674936610022286330L}, + {1177990759783856649L, 1233238019560229835L}, + {-6211536889696831922L, 3269771882547594708L}, + {-2806444732697667079L, -8472679256324341139L}, + {-5534324430749159010L, 7385757552452744804L}, + {-6189402282341917673L, -7597189316618548656L}, + {6327177260956086170L, 387354508794102949L}, + {-8199327532062722025L, 8781866512582180355L}, + {1757637089703623521L, -2439557373159907653L}, + {-1083020196125888231L, 4898229079940792683L}, + {-4027554827881183115L, 5854278118107827495L}, + {2536452110533397141L, 5053032057586689294L}, + {-5283309880767903892L, -4036089771501382471L}, + {-8726185014741079280L, 6371918861414578337L}, + {5870565960746070417L, -1755043487049372432L}, + {-5981985584772708231L, -5464038684710305016L}, + {-1932877698882443840L, 8643536265538303114L}, + {-1002343255004640521L, -9183473069245370007L}, + {4369245457815499473L, -7541238362330640360L}, + {574307157338267836L, -4775059289639379617L}, + {-9022123090729501652L, -6281514868145333731L}, + {289683520338718123L, 2796625540449362421L}, + {-5791631171477648402L, -4653014207048774900L}, + {-7088072188409060385L, -4095346481442481243L}, + {-4659987534525277948L, 1840919610151012736L}, + {-6573587402478059370L, -394799095862107646L}, + {-9147189283662432041L, 2780457115891390435L}, + {-4621406226758810332L, 4650621948282825212L}, + {3827992897413425855L, -3470503642777527388L}, + {8237187128340177815L, 8338050922877292449L}, + {-2575127860924571660L, 8053904449338331049L}, + {-5807831166865245102L, -4329977027836990705L}, + {-5362714198312494492L, -241660454500896017L}, + {4800564949032048849L, -991028768001584039L}, + {6232971559544384156L, -4931085162898819233L}, + {5346264270546834545L, 4735211348383074864L}, + {4418021854956695145L, -4054404223178521239L}, + {-2503709442294180811L, -2937345847603751564L}, + {-6705525727229877941L, -186811788738397153L}, + {2807916716409994404L, 6999030087777771607L}, + {-140901784876025870L, 1998821964393989519L}, + {8341454749980902529L, 4006910961641213665L}, + {-1877846120130857988L, 7136842530212354406L}, + {-5151008775080326365L, -1658405690903715224L}, + {4141948371168606708L, 8905521338649282325L}, + {-2991396496641036974L, -8951844492612797162L}, + {-8231846204849830109L, -7788963254099816781L}, + {8817247101288954387L, -6748712299598005804L}, + {8987037987198023072L, 9070734453008799529L}, + {-3653961272252403667L, -1706174462105691367L}, + {-5540876112254432380L, 1685272653566639268L}, + {6630760576601451124L, -1097030590189693240L}, + {3952853764187760519L, 5155412125205404325L}, + {-2752207231177565438L, 435598937197933569L}, + {-8990910782429153994L, 8975085101947256973L}, + {275029084438740989L, 1594853272392894824L}, + {4377008995333363792L, -9203724735327026090L}, + {7821963094129670639L, 6001202347774222234L}, + {5910345261804604591L, -6530910287713746869L}, + {-4676534586425310858L, -2447999183969902895L}, + {-893427896035022872L, -9110096049863714398L}, + {-5107326322974521170L, 6912129560394449872L}, + {5928147272454832468L, 2068430724750870080L}, + {-6838714257802993131L, 1280800236191378302L}, + {3828181535474040080L, 5912525367873976485L}, + {108432455104664877L, 1008792111792728167L}, + {6134860905554719891L, 3736157740631835042L}, + {-9006906057728028416L, 2291031958410264788L}, + {-8785087250130628623L, 1747369706716307880L}, + {5107258923997586783L, 4842462885753407158L}, + {-4184502077870950738L, -5221774457734574279L}, + {-4196994343382319067L, -4731152976876941564L}, + {-3602525630290645804L, -7438604867872016130L}, + {-721602986806918388L, 7380942477862322044L}, + {-685749048932716724L, 8558621156455130463L}, + {-2226124441764103982L, -5753212050844017972L}, + {-8444470437189672337L, 682780176504188457L}, + {5967905323104782609L, 872456529921347237L}, + {-774529365691330376L, 2906334255950757352L}, + {5317411683068394421L, -108367910517051649L}, + {8753729036148149823L, -876697494682167248L}, + {-2600284926580864832L, 1079293674000123963L}, + {1501264369203023713L, 4772271458149794627L}, + {-5589106565383836539L, -7585724482444194890L}, + {2671769607792597675L, -8643480525195244990L}, + {-571916257780128106L, 596916564516236145L}, + {-466398102722097434L, 3470290204352195571L}, + {-8668321984643614166L, -453629747624458261L}, + {7631202114905008803L, -4821135673180277868L}, + {-8647922451448787023L, -8485380845549008746L}, + {8025381490498356948L, 3913777583556485172L}, + {6049280950696679244L, -7121925732817649938L}, + {-7696482417187458362L, -8601187295544785855L}, + {7140438358861456746L, -4279316057093339253L}, + {-4921885565559803566L, 6325512175579207375L}, + {-7027307783313071980L, -7680809212541810824L}, + {4879598629629415952L, 8150769622291187304L}, + {-7342155744245645378L, -6215685187110669442L}, + {-2263378697656156016L, 8343706095650682031L}, + {3707257119850556629L, -2120810639767885498L}, + {2267112971575522392L, -826262663858867910L}, + {4213162373130191016L, 4461280045821316392L}, + {8934898250536865564L, 359231887739760556L}, + {-2149765792894599153L, 4707860023048648731L}, + {-5375160376931751557L, -786047454211312701L}, + {2196544121130659101L, -867932101728609316L}, + {1698916734136113996L, -2204779643027651944L}, + {3433172695894846834L, 7596525181878611400L}, + {-2849259564218003615L, 6623954713336976951L}, + {3254138956861413927L, -1133558231039979412L}, + {1285929622626453198L, 5890024885621260165L}, + {-2349127797610817522L, 1562179804252080095L}, + {-1191286947825336074L, 2468833460111911838L}, + {-9055971338481310193L, 345979595229756636L}, + {-3525928115330914396L, -6596590613894843229L}, + {-3227633136719463166L, 5915785628644168423L}, + {-133501853014392460L, -8741758672003862228L}, + {1099153576792978915L, -2742417900988504166L}, + {-648473507797745243L, -1129954793722235908L}, + {-8947946509829984393L, -4829402018135157767L}, + {-183277647411867477L, -288109513781082853L}, + {-8972836557830117056L, -2372987808358806473L}, + {7599024178448012477L, -4273183649325398119L}, + {-4558685557381095142L, 8836884243173336023L}, + {4767843848744584145L, 5190086288935651378L}, + {-1522308275842184404L, -6580417704257825326L}, + {-8584574042672861403L, 92823380696470869L}, + {-1734332735592240813L, -4860675540725285320L}, + {-5832090116698921823L, 6760714595207081195L}, + {-8717779938268738600L, 3229735988985744701L}, + {-1881355893097809021L, 1149009410476147075L}, + {7715529933819950784L, -8766744506878170376L}, + {-2289162375063823266L, 8785343280324053248L}, + {5628801095532857454L, -6766400014785301219L}, + {4961594313236250573L, -7969158326987751251L}, + {4618832900030681591L, -1590199595674682989L}, + {-2860026598356511432L, -4804664899406105836L}, + {1961029532371905567L, -4232908783774954600L}, + {-7427116119564073711L, 7457295679793377814L}, + {-7663272674507523073L, -5262217384322722743L}, + {-1432342159197328837L, 4771708562585944643L}, + {-6656742466964663442L, -976564846383552887L}, + {1884610673731472834L, -785174449433559508L}, + {-3810094228658892044L, 1994759940275525679L}, + {-6616291605664442115L, 3795543339876571956L}, + {-6089433736056798518L, -7266978573829534613L}, + {-7473225570871869756L, 5261130192092551093L}, + {-2962461410122376636L, -5000607733090565805L}, + {-7732736326487208707L, -3693026679333504313L}, + {-4443012182604465346L, 6100440042934878383L}, + {-6157220788020380465L, -2860438289567923884L}, + {4600227015044805999L, 4989400139419054213L}, + {4469639125734518912L, -6122627204883036341L}, + {-7792518910888390519L, 4129047140733643848L}, + {1994555386333163764L, -3844189245157007278L}, + {4369373061497876631L, 343822057089163157L}, + {-4738249058452865067L, 2329646226948660665L}, + {-5995135073617675417L, -4255461102943936723L}, + {8575145712582277328L, 1413910585849998254L}, + {-3326852669647946366L, 2121198412256615037L}, + {-2007891227481667403L, 7221453514528963511L}, + {7761466597038557448L, -6581310753540884344L}, + {-7224144129768088459L, -6327002969543063078L}, + {-6066361559768252258L, 1784238609618085587L}, + {-4068105427650671702L, 7479972997631999286L}, + {-5560889521429203904L, 2898253573510616692L}, + {-4762527649365520713L, 2604657580604116324L}, + {2694767757294725688L, -621761717733876220L}, + {-98412761475871782L, 2779314879118693087L}, + {-1686751510820366009L, -5956651577100715550L}, + {-8638747288926132295L, 1038333600319247631L}, + {-3606421426295459375L, 8477836939368819043L}, + {703911580424568845L, 7030948256080124036L}, + {3806874684410471199L, 469379621331982300L}, + {-5118211203482914183L, -5305374868543386096L}, + {3783835693585708905L, 6654716033399934609L}, + {-4147496567901501893L, 7586049031853109067L}, + {4328139758484363106L, 381917650928462968L}, + {3028068134370267202L, 776322465585926454L}, + {-5966389813687232408L, 3686423315817746584L}, + {2195469898148267913L, -7533513970647659535L}, + {-3080166474377317430L, -8140738602141354389L}, + {6412533502918649688L, -1703582505372665809L}, + {-4801061500654703956L, -4201543830696595479L}, + {-554194900129906123L, -5939632826608146381L}, + {1486000469436139740L, 7831050577063499982L}, + {-6971589411333019409L, 5357835973747361473L}, + {2647463349908157318L, 7085011541975929989L}, + {-6754094203714628854L, -3850873520054179131L}, + {2314399046579224435L, 3216792862731027976L}, + {-6177383374280917075L, 8760408975864465377L}, + {-5619632493646738964L, 2241632268315301578L}, + {-7301831206207675015L, -1821451086573881135L}, + {-5527516975398904813L, 4968354678684490072L}, + {-7206298956882517419L, 2279041835604861410L}, + {-1535337994919517848L, -8761446866156246742L}, + {725107219148423471L, 4750860717864763778L}, + {1938195538047669437L, -5869782778289132135L}, + {1028829726878266547L, 7197029508183468862L}, + {3981352596771855719L, 4996127899543829429L}, + {4637441575637536278L, -6389995039174519370L}, + {-567364300216533096L, 19863152138574099L}, + {4215820779392244698L, 888457597427087114L}, + {5791138156269639416L, 6853760322626114995L}, + {527001488112788484L, -2110465445257708858L}, + {-4390338125863921979L, -2134580087205909557L}, + {5557055272452535368L, 2866065276453045221L}, + {-205316410586789577L, 4480269606588918401L}, + {6952133288635206796L, 2015037502635776574L}, + {-7457518070084443694L, 2263308604979136810L}, + {2002018537802900078L, 7552360032993184271L}, + {1561023860546606398L, 3866818685532368479L}, + {3006183850758749007L, -2336461709355555028L}, + {-1361037422909233361L, -9144929386769396303L}, + {-4203933835330884180L, 4220615295609720220L}, + {7500988945823273736L, 3572390891093078325L}, + {-3010872765453549672L, 6632197017693971191L}, + {-3781827987408697259L, -4030709294737296947L}, + {7460277383018710734L, 3383215657257964557L}, + {5250710645655626569L, -3007683880002548954L}, + {1109553850343924028L, 9126342159911243074L}, + {-6498085059809326090L, -6420733693986859740L}, + {-5879222670885240061L, 442921388511227265L}, + {6210613100795379620L, -1514159259364407425L}, + {-5759675374559290972L, -8245819781762092155L}, + {2824738880545011656L, 3999019159821229194L}, + {3213468672819532759L, -6840569939386909113L}, + {514328750496380347L, 969657192227097933L}, + {4470285007717204101L, -668030492010532480L}, + {2269240343629252129L, -4576239629892938120L}, + {8714859525098129755L, -2826680146207272878L}, + {-6932578361476642118L, -4666717289125206755L}, + {3219949239213817308L, 3712651019435159979L}, + {-974585298959970878L, -1944037411135401627L}, + {6482527911604968876L, 6263685975715881314L}, + {889153561428168470L, -1692016738149208411L}, + {-8207616222981108363L, -491537029006685810L}, + {2386860797138412452L, -8312622730184110241L}, + {-6749686321997906685L, 4061453222465983121L}, + {-1105424552884318985L, 4383295431011890299L}, + {-3137963539903752699L, -8004907349965180516L}, + {-5296550634024189868L, -701828900076753577L}, + {2919221292190747486L, -3730402551719687544L}, + {-3991521756182858814L, -8245448390492788466L}, + {3802413126716557908L, -345388522944700330L}, + {4556158013211621930L, 4837029469954119100L}, + {-1956520472596138305L, 3774560559204626526L}, + {-1667618395239727751L, -8642889400813503572L}, + {-4948155010712448139L, -4045291183536374219L}, + {-2667546434479018044L, 370703145466617430L}, + {-5192951416537530780L, -21955828113889540L}, + {4474564860866849514L, 827322199368359858L}, + {6795504197096101870L, -7090967928316662587L}, + {348555520492747776L, -3642605601802123384L}, + {-9152654684800879935L, 3609495880796821187L}, + {-139520144005307559L, -5156829220828151100L}, + {8655115078308054377L, 6824472990762665216L}, + {4640578432082008138L, -6202001168681068572L}, + {8526214307008571064L, -842893985616753436L}, + {-7079091919397494753L, 8339596036464430100L}, + {-4852301075482608956L, 6187407979941379905L}, + {-6726381834527599283L, 801991602387712085L}, + {-467175742480032731L, -4596941950635352144L}, + {5092513639393893997L, -8012169512241368869L}, + {-916781769295487406L, 4932904650409381585L}, + {-3306005301217276910L, -5501027874234474547L}, + {5711239369216246603L, 6191254119870515104L}, + {7411369067342514714L, -3304087475657526094L}, + {-137089609471843551L, -456007077646664136L}, + {2197853544547148264L, 5840431983889477671L}, + {6994895994975015585L, -7130703368147034100L}, + {-3993584670641567357L, 874766092887871964L}, + {7324113989979846776L, 2238932798202795857L}, + {4848201612974985071L, 4462081907647625486L}, + {-2319141888027790806L, -515485080810423104L}, + {-7727572350242351429L, -1128955356889746097L}, + {3611228677421118756L, -8629406378387284186L}, + {3254031939911056022L, 5981817082841287883L}, + {1315862663037871882L, -4846048396088499736L}, + {2762719496333050774L, 3984785182381619936L}, + {2441476684596910583L, 4447837245869346861L}, + {-1751985778109806355L, -5449837400474558988L}, + {3156518557955714028L, 6585800508293259358L}, + {-7474525109128332157L, 4191565513182283182L}, + {-402634945481420093L, 1145607902421986507L}, + {3711042493776857096L, 2083850151603736019L}, + {-526618219268616930L, 8506153718458047088L}, + {-8956423818433397438L, 337802762069315243L}, + {3318951429850234648L, 2081621265536757163L}, + {-4065748355754556535L, -7239810839294391198L}, + {-2974465318794034149L, -4594332206328367008L}, + {9156201933336414671L, 8488676128423554222L}, + {-1224004278953882958L, 5451979806028482452L}, + {-5567810197150710613L, 6919209359995815805L}, + {7645667176564158039L, -6364331595927960173L}, + {7437954892140634061L, 6193769906536854642L}, + {8595047667824297631L, 5596599227739861071L}, + {-4227841629446459104L, -1381816196560241190L}, + {-4073313779073810355L, -1100784080146793337L}, + {764623093768368301L, -2826222786337395694L}, + {4502563456929761688L, 1522444965027476312L}, + {1027370723462817766L, -6744570457086361510L}, + {7668869338814612684L, 4430603710584195978L}, + {-4780350365503382825L, -1669306996283361332L}, + {-6389061999435806787L, -6048382522434823780L}, + {-2133237830821026919L, 3019116079627478016L}, + {-618977682776693149L, -5595283007067987776L}, + {467656057704319257L, 3340252194762699251L}, + {-6754479852919060751L, -7463769590197660662L}, + {-121796624546305099L, -3251872792366792553L}, + {-6164861615484187016L, -6122786778522267003L}, + {-8568598162483564153L, -7141238264795350159L}, + {-8182644091745100549L, -3046128695748774162L}, + {-3989631051916738549L, 2520402197254872075L}, + {-3812515520109109155L, -1052959236992591515L}, + {5458479505950940580L, 5049901156611941154L}, + {-4068063356781230185L, -6931312104494850376L}, + {-2830766632873229698L, 4798159326705638849L}, + {-7592354330098913572L, -7738117602772322434L}, + {5323147076973602219L, -2197090908151937767L}, + {462800867816435413L, -8465892264165433250L}, + {4002154584204048905L, -6343838674759451204L}, + {-803837213195276249L, -7987366341250351358L}, + {270846859760410932L, 3184418117964900027L}, + {339186719055655409L, -7127601895783159724L}, + {-1681073433226249949L, -5136145993285919552L}, + {-3172364168133842187L, 5692701350597281770L}, + {4471576722877991666L, 7336578103784155071L}, + {5796602822306813285L, -4343030338723817984L}, + {-7918394505018135767L, 945395198631021154L}, + {-8099706435104488972L, -1543491225353143256L}, + {3225305587851029418L, 1333690785007789042L}, + {-4366886220054887809L, -3805519626113819282L}, + {7732358946751522729L, -3514173094342856229L}, + {-228816160482375387L, 7384891550204744673L}, + {-6429545033940023762L, 1845280019375987556L}, + {-4874531170284168803L, 2520265631372728029L}, + {-7919754354938613725L, -1920613329185200100L}, + {4818550076091948962L, 4007439941177190899L}, + {3907701057522316102L, 8115698842586570458L}, + {-2162109673539899314L, -6362182245437049350L}, + {-6296577330837677905L, 4719157127069353305L}, + {-5038523314786213767L, 70331235006715892L}, + {-4182256071671167089L, -5164070196885436699L}, + {2347804671767305901L, 6890490985369083991L}, + {8781747195783722684L, -830329723931541835L}, + {5464112250608435856L, -1927457777938790688L}, + {270499223000052613L, 3675803965927755072L}, + {5387476652934255975L, -6395450047775553575L}, + {-2665753069813354951L, -4080814832687079840L}, + {-6640316903187366435L, -2606831033508573171L}, + {5182130073111288069L, 7783191129863644770L}, + {3324630100168604545L, 9095696793714934253L}, + {6092224834024861844L, -286084573848786709L}, + {-7314979478990434840L, -6890507861998146207L}, + {2475323565628074124L, -4029447883164980292L}, + {3744881942029260381L, 3299671597926388309L}, + {-4468245448047387416L, -4345821869343888643L}, + {-2514532843437356755L, -5136858393253322995L}, + {-8460931029051770120L, -766778949005394803L}, + {6058982121000846509L, 3481461461609071838L}, + {-5771467892492359246L, -4759906717287388472L}, + {4284427580292476574L, 6567648321559840989L}, + {-4502826197302040607L, -884928098330744829L}, + {-8909965133023702444L, -598600634803733804L}, + {-5152825667036557377L, 4060129298892129136L}, + {-9001319942906464381L, 8881985935379199325L}, + {8783326653870239059L, -2206839120202500049L}, + {7169538748654303504L, -3760964465816388168L}, + {-7206711339673245443L, -4408205839339337277L}, + {-959892259265562431L, 7053151831906485899L}, + {-1673323329893911437L, -4266304761003565025L}, + {-5827914418805049723L, 3887362082768648751L}, + {-820830695253715046L, 3506786828941982744L}, + {-5782181341435499931L, -513904845096444765L}, + {2663734005752892035L, -128005322426179870L}, + {6987511185271585413L, -7874168125153003313L}, + {1292089443730939651L, -628053432962923666L}, + {5587170596809636807L, -2613417850126827556L}, + {8237809229146017083L, 8084633225427135915L}, + {-2235781308356196513L, -2827636188226841116L}, + {5423273201690025713L, 5516220885776174723L}, + {-827014178432784464L, 6712876247104625930L}, + {4410575469603649344L, -7034242775638553169L}, + {-4472642034035214939L, -2034015765295524502L}, + {5360193252716249224L, 5081471891122198741L}, + {-4572235983836835323L, 7451697056844602164L}, + {-5433653902594010857L, 3434435237836646075L}, + {4134790485921001466L, -834212517906731898L}, + {4485288889906709425L, -1712294958510249491L}, + {1685824402735587758L, 6343065064147664744L}, + {6091818520229922279L, 1108625331300764354L}, + {-212523426857309616L, -4053352983179692768L}, + {8873690209863775893L, -2171715089304193225L}, + {-8812432523459654235L, 7211091108192522268L}, + {8103047819338531286L, 3711940572100389263L}, + {4614534509558570387L, 5444031939093833792L}, + {4229082172984667846L, -187259441036600327L}, + {5484460792243331111L, 3829189205530873306L}, + {-2385763800014084246L, -6039720700812665895L}, + {7030455160712580607L, 6382913871702743864L}, + {-4237997225503760625L, -1922458832613918767L}, + {-8124291737715145061L, -4527631494483919871L}, + {6327782024255912635L, 2809957004087136653L}, + {-1059957986215325879L, -2420735678896220106L}, + {-4603394046555224246L, 8601361276132080486L}, + {-412280426794415941L, 3234625889254726291L}, + {-3912022758691365061L, -7583905311611097645L}, + {8274283857906326279L, 2184666272143163901L}, + {-6679687570538459747L, -1449850152673288419L}, + {-6155809572519276859L, -1979751836203826716L}, + {-341344339192464824L, 3018394569217164771L}, + {4137861550441588415L, -5754764276232000291L}, + {-6618940267671493988L, 1914198431867340287L}, + {-7291675023689911653L, 1607477724244498217L}, + {-7953871974818004574L, -2599486547593093280L}, + {-397153165830243551L, 6139117266404059459L}, + {4399741193484513820L, -4274767466794993785L}, + {-7321827371527026850L, -2333449639160768202L}, + {1338155597001139997L, -2548173382440401300L}, + {-7945100475342274903L, 8020110768851902224L}, + {4522579580699730675L, -6875195919910217236L}, + {-1777997817650119183L, -403892898634974893L}, + {-5064101783437092203L, -1401240413820955912L}, + {1113553310062801693L, -3995214081458919524L}, + {-5709720543205442481L, 927381695298466657L}, + {772882345518435045L, -3147890619821539813L}, + {8903336589907078605L, -6699858563678390112L}, + {-8789465120959251318L, -1189645965180491835L}, + {-7834044567177051539L, 1676372503530702213L}, + {1770279151425541006L, -6398305042157421951L}, + {-4941283968572768930L, 3162695053295271273L}, + {-8127231558741248281L, 7942267134725934901L}, + {737747628416269099L, 520551528520897480L}, + {1574449851957266285L, 8754535681980459173L}, + {-471282776174276539L, 8242818857795592321L}, + {6739952936193376447L, -1946621864275407187L}, + {-2424982200476312714L, 3812356397318296401L}, + {176022186483763915L, -709740258783380911L}, + {347356729555692814L, 4480055311182965320L}, + {7550980861784622262L, -7976605459581456325L}, + {-6474882761637742162L, 864430267918049210L}, + {6769254801287215843L, -2567621002890372062L}, + {-7346044586598503820L, 3212842589322747836L}, + {1815045574884249754L, 4277372518483154396L}, + {-4240219227462571370L, 439915893382050539L}, + {-649819224919779208L, -1111682246597412639L}, + {-3697860834931443057L, 8490404538930416915L}, + {4209607762757612835L, 3651293147183772096L}, + {5512379227441488333L, 1047566282088978950L}, + {2554702396243693813L, 394345515667168248L}, + {-33063197416101018L, -7242273122516823999L}, + {6204387436027047110L, -2486013089072936897L}, + {1121696558750946811L, -981625281791640302L}, + {-67713675745955613L, -9147432709665441552L}, + {2900236341998750711L, -3242894057113096546L}, + {4072627124871947361L, 2568923051531765618L}, + {3411250942283240973L, -3794534011481282225L}, + {3459019187218245290L, 4975406156688201052L}, + {-4931935198846519054L, 7746420830231423069L}, + {8420402881327935528L, -9137776997333750418L}, + {-2700073972687127894L, 7440926613678198288L}, + {4135622085465759778L, 1922177824387806658L}, + {3115364578959809417L, -39062662364695498L}, + {7905907040079822152L, 1652221253552164825L}, + {3117202331600018366L, -6352534687564691907L}, + {-6912405766950946927L, 664843781442374790L}, + {-4526890208931001416L, -6736625070925799980L}, + {-8362196017109360491L, -1402801909960855613L}, + {7990163642449120866L, 2406982952217461208L}, + {8921333090931858791L, -4099534793476161857L}, + {-7835160532401884454L, -6581739995481489291L}, + {2597345228860385242L, 7606102447237383994L}, + {-2019901582135813985L, -8270782380997806585L}, + {-734731610197007345L, -377734071426125465L}, + {-4478738615320414333L, -5521141880370424976L}, + {-7971363857175568029L, -6039235291455986157L}, + {-4550695664824391599L, 1387891693133629815L}, + {7004896942426055925L, -7263582847205455039L}, + {3243444764663891458L, -1561779634771247681L}, + {8221182849925835178L, 284616156990708392L}, + {8413639868002181795L, -3417011274147731084L}, + {-7599742913553767497L, 6735403778117774387L}, + {-4861871033227348667L, -3342667103008656516L}, + {7180813616057727196L, -130573597887794775L}, + {4110358466985293134L, 8412194900106960305L}, + {-9163301540202343656L, 7441551524528441254L}, + {7407431836530456233L, -4965816325150483505L}, + {7168833492994704184L, -9066751607323653514L}, + {-3225184215180636592L, 535785430806826282L}, + {8550286352383434501L, 3641342818619034585L}, + {-4037242040051553894L, -7777861270948397331L}, + {-7019860459089371337L, 1059174507624850078L}, + {6499568859919656194L, 3031741024498209628L}, + {-6517870390876058597L, -5171583494332061357L}, + {-8816903563531564452L, 2500915269629225596L}, + {-5488567103311833696L, -8369938414214715017L}, + {7162975208461021799L, -3741661550798250786L}, + {3231150263108104601L, 5489430759658693665L}, + {-6472825090155306196L, -5229190418016637501L}, + {-7112727281349161724L, 8638207742440339295L}, + {-8908480908774446053L, 1135397788772172543L}, + {-162138742916032914L, -9157670355820390217L}, + {-4934765719133081654L, 5264770544051296674L}, + {-5383597847234182085L, -8622588421575346549L}, + {-1457750799424768103L, 2900589679751304212L}, + {2062788467226997042L, 6934402819579476339L}, + {5195212083662151172L, -4993043678018816500L}, + {-7086725269988157115L, 5165632918103528746L}, + {3216790230270684188L, -1498081570553112883L}, + {-6772983200597124262L, 5323428267774554312L}, + {2139536380152189149L, -2123846892813368415L}, + {2783400616608816134L, 2640993991844476928L}, + {-6309269121238725342L, -8968814731582872564L}, + {8703327852945446994L, -2169317814052701370L}, + {5986578967392046329L, 8988225347013839366L}, + {-8686234791137218952L, -1293815802100229147L}, + {7147175926193618258L, 8961828719037336812L}, + {2812520130705527307L, -244690421709006577L}, + {1012516456501023939L, 5782308992605392643L}, + {7796658848573086967L, 5954450867936080446L}, + {2642184550087192362L, 2918994474340013448L}, + {2521303561751617614L, 1827340240292302525L}, + {-2372355039844318123L, 3067390826707986478L}, + {-7982908463432899233L, -7688424486870428680L}, + {-4773586301827797121L, -8957053550728164265L}, + {4040904044293393487L, 2826062411708434021L}, + {-142670900232845920L, -7897084558815522344L}, + {-10691804562559377L, -2234946696504510507L}, + {8453630879397574208L, 5221283089826208428L}, + {5612078661433375152L, -5827827668460398004L}, + {-3592401183831123809L, -925198903278624285L}, + {-1194636486876965628L, 1773996642463132256L}, + {7144612844993582305L, 3804996741813028381L}, + {5952025594559102453L, -2833062603703238128L}, + {7768859735998504182L, 2017446387476411629L}, + {-9046596974248194873L, 3950090712041650564L}, + {-6171084369920910835L, 3290438712182319518L}, + {1781418400960307869L, 1867158814203969428L}, + {5081999630281512875L, -2037971351242799267L}, + {-5147831879244994539L, 7584142773325361699L}, + {-6245492622672631422L, 4218402275190977020L}, + {-8665204890652827995L, 631176852120721281L}, + {-1175718303513980672L, 3584072626690154612L}, + {8885449897820005156L, 9136594867492618470L}, + {-328163209321586593L, -3184598578381106244L}, + {-1445525508305375763L, 5152237349583818010L}, + {-2100999238041350502L, -5528588035009373442L}, + {7410786050561217868L, -8329610059860877786L}, + {-7914164711220348362L, -8575660962837876685L}, + {-2906200250494490361L, -5595724376864178814L}, + {-867790952312765711L, -8796607059715677925L}, + {5887767909251264450L, -2886161295052843437L}, + {-5789450489200739242L, -8648773361803380858L}, + {1662159886119924244L, -3498141174490735224L}, + {5012361370472355454L, 5637973419645599298L}, + {3429745384914079292L, -9095994212145066587L}, + {-4445208736020219814L, 1969046699177550355L}, + {-5413763295704138557L, -559955330032103584L}, + {839374495111075513L, 6529524391959302548L}, + {-7648977736915073173L, -1003589388967555446L}, + {-3664832624688924839L, -1936172468666972698L}, + {7158412277573249226L, -7956802618942656016L}, + {7779305491962558566L, -4843241120730501684L}, + {8039313349173431072L, -7999087482161649872L}, + {-4220847824862505833L, -7596054202827084588L}, + {-1939839155925934724L, -4913883888222467553L}, + {-8034010027834756500L, 2813017045387334571L}, + {8475758752811450501L, -1613769428216243240L}, + {1099214246266343746L, -2807494640498805644L}, + {9186354033975902114L, -5197162245251778905L}, + {2335697942068596836L, 8495832137497385808L}, + {5125601667360226370L, -2587705732341378662L}, + {6606318187238773479L, 2430230045828080098L}, + {-1182364933194642155L, 7501505225324109667L}, + {-1282696136769309305L, 3965216814875100263L}, + {1154559731683162717L, -6044142788611156010L}, + {2886049233756462774L, 282833821358901737L}, + {4825677492212933300L, -3505216937575005480L}, + {-9121350732551109877L, -3988694319279921100L}, + {-877752678277742358L, 2128030531232165648L}, + {-3266764465431864389L, -1383775789144281321L}, + {-1914199636241277795L, 3172927205861865522L}, + {-4687907120417383299L, 906209675925715648L}, + {-474253911596715394L, -2676977326907041001L}, + {-7075290400477487025L, -3777175211466737205L}, + {8134957124130148548L, 3995726904947096316L}, + {-2992238854808660187L, 7288621377035663598L}, + {5996516183600836003L, 7996323395017882596L}, + {-371549095799671162L, -1963723397664742141L}, + {3902975175457565825L, -2096359685759558164L}, + {6605036583318392521L, 88737143141685448L}, + {1891100275270423451L, -1745981040411221219L}, + {2119245665259072674L, -8638991354136966831L}, + {-834774890825819923L, -2471622230063928436L}, + {-231771124221128734L, -6259176704025750253L}, + {3133196876747178672L, -8434923388925317687L}, + {7298692169226203885L, 3209300628873906858L}, + {7126455091552696586L, 1374898972361753100L}, + {-2143648506542037333L, -1300918538344005110L}, + {2865309216991778464L, -4741984767119458210L}, + {-582169278536046195L, -595021088316172951L}, + {8080177625773872889L, 5605701634825149343L}, + {-2641866597771089394L, 7968669847987563730L}, + {-4210759777426999986L, -8597023424475589165L}, + {8940623302154716559L, -5059512967836662675L}, + {8753678355208533280L, 7535049518488467454L}, + {-6281297936039038456L, 7457909342608693553L}, + {-4466014453281785565L, 6248139512270887953L}, + {6273362062923197148L, 3871429116281885402L}, + {2333217083667471091L, 193753548221085829L}, + {-2134695293413683177L, -5181203095625161285L}, + {1638282373040657672L, -6368003890771549617L}, + {3200622258378038793L, -3326095973277466097L}, + {-8777912174432066160L, -650529619692776996L}, + {4509402067996738269L, 4817027167761014779L}, + {-5444623700171973227L, 5528512453315198768L}, + {-4861257960719874399L, -3622276494377371155L}, + {-2931845644152220868L, 2153074555510703652L}, + {-2415035074251453041L, -1006946510571967488L}, + {-3415608992526650142L, -7840424641444647872L}, + {-1100060277548286709L, -2271450031970914418L}, + {-7950756431533405941L, 5441868159791814728L}, + {2529778543681983619L, -8854951009938006713L}, + {-2509511542105356611L, 7853654232309547016L}, + {25235701976844069L, 3517855992525250730L}, + {3512243450460933893L, 3972430887397192492L}, + {5497081699936367558L, 8383940244504833083L}, + {8834833749235004269L, -7334675479385357802L}, + {-8786955172657476976L, 225166460691346798L}, + {-2806229680204644453L, 740198459796101590L}, + {-5310949673572257587L, -379186807769692471L}, + {7180989110601385791L, -6432354723404698372L}, + {4574812998786692932L, -6039313492850770833L}, + {-7191136183375597108L, 9110930278055289403L}, + {7817612065160053901L, -8258693647460211987L}, + {4092147258927215079L, 8293168384517520663L}, + {-916694886327147203L, -454314143918346215L}, + {-8155481011317235899L, 2292426029549420190L}, + {-6577214469178899288L, -1924115905005123142L}, + {-4704682976594284594L, -3476799468679251934L}, + {-970000750564611255L, 2791886232557467235L}, + {6392037803435901919L, -5315497557080833696L}, + {4653466442162924160L, -4133878190287801900L}, + {-4217569099833350175L, 4839504582831160901L}, + {-7494295064988163591L, 285188759198988857L}, + {268071204677339466L, -7292395415962103265L}, + {-3128139626778549626L, -1174396804280713279L}, + {-8490295735340959824L, 3060015218167934818L}, + {-5162368829222403127L, -3393984135225595684L}, + {-4379157681365371219L, 6657143563587679125L}, + {-4505869932044746193L, 6319966515037375738L}, + {-7725004848904746158L, 936557326289189579L}, + {-1077347489733049759L, -1247066987861982979L}, + {4372692724364737369L, -3256637161950359616L}, + {-6095523387109702205L, -1290870227696084252L}, + {866555760732064401L, 8351687362397734775L}, + {-6043383891507219565L, -8719495801073949943L}, + {-5064298145687783678L, 8068427516165501654L}, + {-8284554766413268444L, -5044265653521567680L}, + {4358509246174021158L, -8826147307297954564L}, + {-314402459279271878L, -5933542775446256478L}, + {4534052702364464050L, 9082121576264326126L}, + {-5069975264209271430L, -2280561666567702498L}, + {7618881160105474363L, -4794858632711295348L}, + {4167592104901771551L, -5018298706610926606L}, + {2277499839812963141L, 4242448307766779616L}, + {-5797737740917833733L, 264493678146677010L}, + {5386843611229288306L, -819526727917515385L}, + {322032948055534721L, 1736760202411262747L}, + {8623908495470433985L, 5436650610054812536L}, + {1464656873108399270L, -5202587803213018241L}, + {-143110847782655873L, -8510401654127848035L}, + {-3683505493125515417L, -8668734897929026338L}, + {5263884653798534228L, -1131791277133219585L}, + {-5596816932431872850L, -7650966445894865682L}, + {449263668055475580L, 5943833600560494318L}, + {-8209880385374160761L, 5433449067757110313L}, + {-6160876842633556933L, 2106036607754168591L}, + {-2822510119276015598L, -1169309301398832317L}, + {-1867833971803598158L, -5215126721010895403L}, + {-2743011208375680513L, -1334137156024540894L}, + {-562758870972224424L, -8858736479960857044L}, + {5241707884356795802L, -404549239240361305L}, + {3044382044884310303L, -2578848030062168952L}, + {4240643424518839454L, 2009743695925300205L}, + {-7202731734581844883L, 3560548372442035725L}, + {-8098501199143125283L, 270444074204918235L}, + {-2550459180607677020L, 9122097925106566372L}, + {-1776717083783659251L, -5066722509244044276L}, + {-2343369089757631624L, -8570356075106548461L}, + {-6293279254462751659L, -3762530309367743723L}, + {-9100627021059872276L, 3178453993421526858L}, + {-1298100985130924363L, 1942143010909260088L}, + {3390116780901102550L, -334576415657279307L}, + {-4663999614093100429L, 770277787515502772L}, + {6916372370306791572L, 7435605989219979813L}, + {1488349423055656442L, 2113647012381226787L}, + {6773020852755024150L, -852366200604922241L}, + {-7005014351468554871L, 7485133827588013786L}, + {-4753926923183579314L, -2312386844690556698L}, + {5415870192658316069L, 463479081020224407L}, + {-2670881940811475410L, 3507169512028760304L}, + {-7225213211793183097L, 3981958135443174761L}, + {-5703028807893997804L, 1264194096693403893L}, + {6561444537664669662L, -1954354266407705042L}, + {8939981796276591301L, -4733058470244221471L}, + {6017910964940092953L, 124625799714735872L}, + {4500890776998912544L, -470688000960484088L}, + {-1835018042586347444L, 7653403345510987769L}, + {-4191687948466793374L, 7139837548565246758L}, + {4106435482907441086L, -2126413898085076347L}, + {-6130167349217050086L, -3959969099349735016L}, + {620129892796426300L, -62209784009239054L}, + {-6144158488464216798L, -8173934466594508364L}, + {-625006850515938527L, -5809518885326364398L}, + {-6682172611475406987L, -1714940790350536113L}, + {1220842624016183584L, 8269949841236476393L}, + {-7098540157067814615L, 3531738600537340144L}, + {-4378743347226734130L, -7327441054828053137L}, + {-6508042393772984279L, -1840909133921621497L}, + {5289282493574993598L, -6455879780378370298L}, + {-6781000719696595982L, 5177178370843840548L}, + {3322666381578332368L, 3134586237016402769L}, + {-8173363279507413324L, -6524402652348374595L}, + {-3603049973704190207L, -8475965567552946377L}, + {-4316988796658196446L, 8866378184082028533L}, + {914989291445423876L, 272931860159225473L}, + {-305370752767861151L, -7996913970986439765L}, + {-6987550192802158001L, 3191979351473290494L}, + {-942676483343861967L, -2153209479961610339L}, + {539036846465448158L, -5955756213951094362L}, + {1605373100913987077L, 8903900718100188013L}, + {7713068526230669637L, 5191047107663767366L}, + {7241900405827926293L, 3287960505839783884L}, + {186408038263119881L, -725098263159168344L}, + {-2429472274603752977L, 5905214161924496910L}, + {-5720789098334319209L, -8856816197357357489L}, + {-6674769505767916301L, -2005822193174095488L}, + {-581393540490176967L, 2751755671060133347L}, + {3124744789645879825L, -4243941635080647386L}, + {-5602915602343937931L, 4501087988245599909L}, + {3263507419526132695L, 3560352323108238394L}, + {6937077332985554718L, 8731941696760140572L}, + {-7919624999578199393L, -2867710728097054893L}, + {6556190618267765484L, -8112004817108418177L}, + {5682381095734864238L, 589618283089403862L}, + {7614251273120089370L, 5724958541163307665L}, + {3395157685499349978L, 3613526290468317309L}, + {-6398328093992251036L, 7596033768669695677L}, + {-2651093395236575804L, -8014022518016193809L}, + {-2097470820892650054L, 4842033680917117547L}, + {-7267148748500151232L, 4770828425873813766L}, + {5507274834982481157L, 5091231856170754714L}, + {-2194323672581532616L, -9144268390755820585L}, + {2269493654210886217L, -5259401698591517179L}, + {-4216275761811372636L, 5086789201000199700L}, + {7228709978053803804L, 583987105370029162L}, + {1544682503099095700L, -3570389176034465400L}, + {-8135200911288478327L, -2626445514253500075L}, + {7339704802803690870L, -306444582707945130L}, + {-9063598666954112733L, -2616502440081045224L}, + {4249185982522288588L, -1295355602551546303L}, + {-4695745996091883154L, 6444320363226433806L}, + {2627137268581003083L, 3621089752612839029L}, + {-2578238879441406084L, 1208907918137575489L}, + {2429552460105156204L, 8195465270198839978L}, + {-5016405662860787559L, 7224902700860526388L}, + {1213685060600888916L, 4648386381705116369L}, + {5207480625629771054L, -2798226710980115801L}, }; public static final long[][] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = { - { 4331629317196124516L, 1639885090772725551L }, - { 6697150685477982789L, -1583908083060253398L }, - { -8292226578951944721L, 4476804508315987292L }, - { 8469039529317823308L, -4636474853694258398L }, - { -2848870975062246556L, 5233816596372106824L }, - { -4847447143719480019L, -2687604445613537347L }, - { 7545677836808206678L, 8332429470403026021L }, - { 3540211138895396408L, 3992459923157840628L }, - { 1285813610291173716L, 8233152553044849459L }, - { -7784481855774059403L, -8096273352407245883L }, - { -2714345854300347086L, -1562905338847105568L }, - { 6925684980325533267L, -3117242072537376104L }, - { -9112643559117885900L, 2771189218553273490L }, - { 1882756241765347250L, 3134678319768795724L }, - { 3701001212619307056L, 4694823574419600457L }, - { -8419102115735858709L, 1167505134600559530L }, - { -8964415716902764417L, 7665362522302890520L }, - { -65484870057070163L, -2154863037755560524L }, - { -954938640704679474L, 6388877495784709814L }, - { -979562365498527144L, 5481887351687388723L }, - { -7382239783186871562L, -7733943340511654057L }, - { 5251153271619350814L, -5357392133568419518L }, - { 3564854195161521021L, -2021636742340634953L }, - { -74312886167345484L, 6701300805910281389L }, - { -7331277368683814568L, 5111706538133173116L }, - { 6180175351202170214L, 7106065787858343366L }, - { -5506848341444621561L, 7868028660651681881L }, - { 4709740154938203410L, -4396229032691618835L }, - { 7716297005579308510L, 4776035376666368100L }, - { -5231218401659391210L, 5502389999871393522L }, - { 2808335999161107948L, 3172485746495004832L }, - { -8895902480507490378L, 1734050687059504670L }, - { -6484295527863798667L, -5865043420154797721L }, - { -4893753704679531145L, -1407287398624235464L }, - { -8013506817112676885L, -2413542569879967512L }, - { -7115565146196200482L, 1492091106940842223L }, - { -4250908842491168006L, 5100692366480332295L }, - { 7641455146012374921L, -701187772797485824L }, - { 1171882517985315020L, 6041975995921368652L }, - { -590591174345433298L, -745155016275351721L }, - { 4353825711501646860L, -5695286777690739329L }, - { 3766038603438423921L, -946995585431570618L }, - { 5669741062587975241L, 3306563558377990077L }, - { -4034141614316184690L, 2303139291793139905L }, - { 5042354261806495873L, 3029285818524047503L }, - { 8171624055608706139L, -7686014468326816771L }, - { 2465028573996743971L, -5155189837447338979L }, - { 231525910304521521L, -7468941650786504332L }, - { -2906566784067431233L, -3093130381718113227L }, - { -5815630959969268197L, 667274393249985457L }, - { 6867289460752780832L, -2905703229103006681L }, - { 8367342037681739365L, -5211011903304858229L }, - { -2281353332963214183L, 9220933480317079273L }, - { -7873419781565326375L, -4958329158596891671L }, - { -954320324783281344L, -3907949502207462370L }, - { -8978876518219901536L, 6459759108635159800L }, - { 5578589535412452811L, 5347663850081616344L }, - { -1139114663023920493L, -1336174274889435851L }, - { -6125271792804196849L, -3695347576125854749L }, - { -8540897085876126918L, 6006668829300360192L }, - { 2457750544363517570L, -595538372156368515L }, - { -2873340196283457206L, 7722471153320550112L }, - { -202735095288385060L, 3306848206005022873L }, - { 4680342363383152427L, -2968985762887494339L }, - { 3754567565766477241L, -6037287120647939733L }, - { 3030040040421745654L, 1937599850940715675L }, - { 885892669913812197L, -6287203992695247871L }, - { -4668401756510431198L, 27796623019379649L }, - { 2828217119128588853L, 2936780557572794362L }, - { 40721351745424859L, -2784176622995643676L }, - { 4226613921171131261L, 497180669697206711L }, - { 2476560251925287446L, 5820151453400560579L }, - { 4857915294336896964L, -6247280158567945841L }, - { -3243612273020441258L, 2836499443783443472L }, - { -8323173319150694718L, 5859965750769241918L }, - { -8464714455451733912L, -8306892192837505339L }, - { 2417309479822957758L, -1246973976546704153L }, - { -4970343771720203825L, -3191439884819854813L }, - { 7616892889149047131L, -1492818326952765975L }, - { 3179230974339910862L, -5929287588380075388L }, - { 353551526640305233L, -7378339587947523515L }, - { 840447756688080769L, 6565835274439444296L }, - { 6560453897067438875L, -8337740380118346582L }, - { 6404605759690477879L, 1860833063820863399L }, - { -5798495500651630883L, 1091158385497258294L }, - { 3489314580607854539L, -5573961258448405293L }, - { 7361202545248788112L, 6034580963668655699L }, - { 8662317980504766524L, -8926545602578986090L }, - { -9176879321700063391L, -2398921906930257590L }, - { -5722341628043847505L, -6351286801388339488L }, - { -345401929977388616L, 3005904976331127429L }, - { 7797208744999634196L, -8634345153714809468L }, - { -257714712793164095L, -1873140185420586258L }, - { 6828368112434274995L, 7058669897955400332L }, - { 6587574874377658116L, 4874363645196347164L }, - { -8420691969719514848L, 2341431149372744263L }, - { -1436841954376886408L, -7620195622266955703L }, - { 8390237817828095380L, -8971128665773428134L }, - { -1244269747449213801L, -5329391842655754631L }, - { -3239069421268305651L, 2334172164129027696L }, - { 8057896190039586L, 7452686587683727169L }, - { -608430754954139223L, 3381655527636719735L }, - { -2634446749318812749L, 7010915016267118875L }, - { 8929276493775119227L, 4292272306792598039L }, - { 8931573570276676636L, -8519118794081841344L }, - { 3822004851281897117L, -2203301444419626572L }, - { -6152300141823657396L, -889109731424416165L }, - { 7182476636738674444L, -7649930728107420084L }, - { -6684339015093823920L, 6577956481422755158L }, - { 7807280739361302131L, -1135517321040401801L }, - { -923194570850102811L, 6467757807397379780L }, - { 1584573338514642399L, -3893190475498763966L }, - { -498065553132084148L, 1865266646395158771L }, - { 1799679540365788870L, 5841239947085522603L }, - { 9045748501111411219L, 7421695194818838145L }, - { -7637550038764425741L, -5845707294280746103L }, - { 5329558184254416917L, 4547453660021049624L }, - { -5342451072932073021L, 482260313304954060L }, - { 216480453064876203L, 711069328663754163L }, - { 7508106403501961131L, 2007822021650305972L }, - { 8725508331413138293L, -3626352862801032903L }, - { 2560531293828421548L, 553012714310330725L }, - { -2008955238081544825L, 3340257035234765328L }, - { 6529104080181178646L, -7547960671941050622L }, - { 6099628745411598729L, 8241958247598079573L }, - { 2756659790325965589L, -1910461132866830894L }, - { -9213432955006411442L, 3852602514422689973L }, - { -6654664302901669378L, -3591698504276609326L }, - { -3643300284729203479L, 3240996573344966350L }, - { 4663787755159455929L, -7043137326384228379L }, - { -669710962240484079L, 2198151612197094376L }, - { 5035186860853879345L, 5689607670679160328L }, - { -1497009633866831856L, 6116439920220101860L }, - { -5364225470045216191L, -2524583207297749149L }, - { 7960728708973508149L, -4484834555703476170L }, - { 5512091823114850815L, 5169321183215226123L }, - { 7721868783230577176L, -82870217609973041L }, - { 5949192792297315127L, 7386107438936735767L }, - { 3638671413276752949L, 967354079224124082L }, - { -3493999225022562864L, 1736987366587456064L }, - { 2975169008368240023L, -2911062917802181439L }, - { -5830673024621691907L, 7279518614247137665L }, - { -1139876564413364861L, 2573839846536122317L }, - { -637830076892861526L, -1400018571611626811L }, - { 3073567850729737274L, -7060083933758612828L }, - { 584182832408009040L, -1684515357135093979L }, - { -4548011654370479917L, 3650830433632177136L }, - { 5119409690433687288L, 1363851279412653639L }, - { 6532746751816727406L, -268134467754466L }, - { 5036805181987997026L, -5288517888352132842L }, - { -327803426338917854L, 5322571032958708131L }, - { -2189559856150793303L, -2933300712108522399L }, - { -7915301437281691707L, 2943568251638140676L }, - { -6227342842105738959L, 8099698710467077821L }, - { -8993001121053935550L, 9126194125698526755L }, - { 907730379649993758L, -3652315413425215569L }, - { 5023461831735961354L, 6919412303663430221L }, - { 5364101017343427759L, -315599275077811411L }, - { 6923504748893038502L, -7350219810380230143L }, - { 4908646141995756237L, 8507617699718047232L }, - { 952783116860484934L, 4009659776894373679L }, - { -3294878312196750608L, 2442027558747033926L }, - { -263001097034647143L, -6632583776719317880L }, - { -6341310972840343572L, -2656983727499478166L }, - { -2779322160924414865L, -8687174340132939253L }, - { 646982227875835088L, -8921122925878035469L }, - { 4981486718593732420L, 610621754580223298L }, - { 3136424241367791514L, 4883504922076234513L }, - { 1588727704329333995L, 3030073555385079838L }, - { -4070703023625741663L, 5658459444065239280L }, - { 5828932422032929570L, 2856038697306292627L }, - { -2881020791961093427L, -6214682596907600989L }, - { 7289018053124519212L, 5097157380496129712L }, - { -8210232022318257391L, -4945331947102062592L }, - { -4932159699729152421L, -4454262099293472400L }, - { -1519151536033678760L, -5023767059372904822L }, - { 7768139346588245743L, -7913086732140250835L }, - { 4663204289123975746L, -2718362182895828791L }, - { 8301645006754151822L, 2622047573067766958L }, - { -527375505220402703L, -3652332080375247426L }, - { -5729392141767077416L, -4151319741037085130L }, - { -1061319607921895354L, -1409911642874475334L }, - { 4940818006273925907L, 2184222853857570529L }, - { 2723620363371285152L, -7672690566794057192L }, - { 6252714915337699141L, 2314830992990646948L }, - { -7047533064810318960L, -2008174505846145161L }, - { 2306818986335389881L, 8249997590679901194L }, - { 8450065497909871849L, -8831895305229340716L }, - { -4217000768181820795L, 1544531499573709440L }, - { -1337267428073608141L, 6177006046804863469L }, - { -8857633266251591090L, -774347292282095068L }, - { 5164282658652255398L, -8684179529877357750L }, - { 1481739352759587670L, 5414525982296129222L }, - { 1351986975138349201L, -6185528530236014533L }, - { 65929927533374434L, 6252977882818877758L }, - { -2314142725260293145L, -4877218633614863001L }, - { 2620263026747810589L, 3958401008161325769L }, - { 4469476270705785392L, -5430615574033125470L }, - { 2056538272538478077L, -862355286215931849L }, - { 454180883353015865L, 7762719650023470972L }, - { 4839487715844855786L, -7900083800860489486L }, - { 7942533619400842120L, 8585038689893337276L }, - { -2815467195740173572L, 5296875560477683335L }, - { -1083538654790434734L, -9193249793920630201L }, - { 1889012098251655317L, 2527085564415319906L }, - { 1741657056552907771L, 5592210964440272641L }, - { 5723507339014228383L, 5029630212357158901L }, - { -7032334681933015537L, 4084980747390945864L }, - { 2463118178158422515L, 8098757569442079597L }, - { 3752105439687274244L, -4181414926127006394L }, - { -663915851310858086L, -85354840719075463L }, - { 2011110544817827104L, -2671072148767894820L }, - { -1420169423837059118L, -598759081963898162L }, - { 8553587424506667053L, -5240400034332352370L }, - { -7662248035234626103L, 1325294974957692694L }, - { 6679274078239456105L, -1434928924752403272L }, - { 4819483627709809889L, 8478319941508844354L }, - { 9203365986368075354L, 4033559530674635870L }, - { 5950679156247704341L, 3837428951973829103L }, - { -373315081569566463L, -1482507884485177621L }, - { 5339226513315271605L, -7611681873083001579L }, - { -2219527427249265829L, 5635133397518404122L }, - { 747296102288535702L, 8973619218046772307L }, - { -7493057443430069396L, 3497964097134584394L }, - { 6724043080988557848L, 438429818292787405L }, - { 2032101896102161207L, 6083472720220104745L }, - { -1656936845267744649L, 73740362659034890L }, - { -3491848432979599234L, 8493083653578236787L }, - { 7404204759825967163L, 1396472196281816555L }, - { 5796798020837779651L, -2345404432560011061L }, - { 5185226877395757398L, -1407423944572575652L }, - { 6062827044520085102L, -584609121356896609L }, - { 1631754126980769139L, -1470461937317538162L }, - { 2155034312189437638L, -1211843219178899758L }, - { 4419389933864557564L, 2474123120380500371L }, - { -6212670054900830945L, -3283329040397730768L }, - { -2848281703253248988L, 1376655356872485794L }, - { -6545922936561011643L, 1663590999050246928L }, - { -604998998887059747L, -6404606806597906129L }, - { -8813736778885336452L, -9050067230254355096L }, - { -5028399912173153801L, -8181108087906772027L }, - { 2802315771636654550L, -3057409231249770497L }, - { 1359831828875761363L, 8335036989554482751L }, - { -6244291732477211457L, 6778429609948085662L }, - { 9138108823363225790L, -4965281868002262510L }, - { -5700703633273694371L, -6875741241266038885L }, - { -5189931767235375959L, -5872467238339532574L }, - { -5917217031437644153L, 6643339725428825001L }, - { 6559980057173897885L, 5549915138011177360L }, - { 7585954365066361941L, 3827417266074500159L }, - { 1833254434142522137L, -2975534211365301488L }, - { 2622798612834078243L, 880690646882639358L }, - { 2935894269140572959L, -2170847169010457533L }, - { 3342180495858759098L, -9026120371020346544L }, - { 7763655187214368195L, 140653358355510195L }, - { 608976619205971467L, 2680459468129440062L }, - { -4493083204513432310L, 29582863612308858L }, - { 5655458152670549588L, 1593207810406994381L }, - { -995372262620475933L, 2247666490547334864L }, - { 6725108152764242753L, -7925184458835945793L }, - { -4152678539161864839L, -2459707456071349037L }, - { 4879330012023732227L, 2141963663717599411L }, - { 299691067249437340L, 1396036161400977741L }, - { 8253082866296742941L, -8013096718656330446L }, - { -1349088245542024700L, -4461083559764567188L }, - { -930670635091392036L, -5798322241366770012L }, - { -6305033172145799503L, -3880395016914540203L }, - { 767676528758696723L, 1063272237810615854L }, - { 7848289152882068204L, 8909778499602937325L }, - { -5335123725692922309L, -6946127868897095127L }, - { 7618587959592606045L, 4634778821401009725L }, - { 1310623412826253949L, -8143415738254494696L }, - { 6105911509337366946L, 792001017010716854L }, - { -5132873445536420119L, 8072991014637794838L }, - { -5066374717991788365L, -5659428556859705023L }, - { -4196018003514359930L, -2960252077637016148L }, - { 4602399218983903018L, -7250042258597588446L }, - { 6996237050722228275L, -5262328436781830557L }, - { 4750432263399753517L, 1652612239899504274L }, - { -6552768219041772261L, -1285397640667162897L }, - { -8886514643984898377L, 3007652368209907553L }, - { 7353718498017818617L, -3719995466824510508L }, - { 3420752363982256164L, 5107602565903732791L }, - { -3106921624226184176L, 1168257018303839838L }, - { 7755185569018499850L, -3857145641161864056L }, - { 138048424823142520L, -8708777035055553867L }, - { 4574855394856311409L, -8338994606192096015L }, - { -797116754680671576L, -7236253372429516585L }, - { -6319525882248058891L, -156939084894516690L }, - { -7211292892013797268L, -8753827357192046412L }, - { -5969262208310571743L, -4551450243246721654L }, - { -2242517284471541983L, 8996152110754951646L }, - { -2134523085752830969L, -7495306502570748263L }, - { 5239925547316736378L, -2997846662183027098L }, - { 2211989170649079345L, 4552093064635424355L }, - { 3951874086467810189L, 606093338469391572L }, - { 1541713943974254342L, 5009388306382876L }, - { -5392854420512731723L, 1707913964447526483L }, - { 3564316510315168871L, 2357502818216120645L }, - { 2901564687206922350L, 4109787658960348727L }, - { 1540984989266277585L, 1126768316180128530L }, - { -5588692335575710649L, 6459331785501191353L }, - { -7656900483971665708L, -5215338425961743757L }, - { -1269975572006533380L, 3123164670370962323L }, - { -8586683894725424637L, 4575538545983245779L }, - { -667220377486025270L, 4838469292655308285L }, - { -6992322247305413343L, -2591667159733033943L }, - { 1020432414035508475L, -8985144752213736688L }, - { -762737570699341127L, 2010955117870916034L }, - { -4996438874277990597L, 5869624445205357912L }, - { 2399099134154679381L, 6901184743738376212L }, - { -7294753205977958107L, 2678158469636349061L }, - { -4330814694281211877L, -2372110554595119614L }, - { -3424505945178467498L, 2907272188222348819L }, - { -3908232167211290102L, -9086151270933909886L }, - { -1715708172189155463L, 873283929820174937L }, - { -1541677764411125216L, -6424898669918065646L }, - { 1443437733037296364L, -5161573268394920993L }, - { -5699613322350318170L, -4038288171429340078L }, - { 28422381221154018L, 8508868024345659079L }, - { -8448942739014323861L, -3172255279146427597L }, - { 94089349704640679L, -1872147708441883283L }, - { 3121324325667558058L, -2742049169245305954L }, - { -2027215282474423693L, -8633918446316412568L }, - { -9090860166446867101L, 5313050066376562140L }, - { -5570813680167514715L, 424079786412921033L }, - { -4433017494388855624L, 4758148122860548219L }, - { 7780214454833321289L, -3435318272110965543L }, - { 2818118075900140158L, 2464433363023169592L }, - { 7909566890394565636L, 9103865919125847740L }, - { 3281719552865083509L, -3221707456270358295L }, - { 2293428426098439431L, -1732177137372972119L }, - { 4831877444478608421L, 2348429429785960283L }, - { -8036810704178721498L, -9069577601784087655L }, - { -6696440698423871679L, -3085412744253133998L }, - { 424663572619708233L, -8999784711703971885L }, - { 2210379950234460182L, 1691623452644126371L }, - { 4488772831440475400L, -2961180662304531155L }, - { -6238973969104209915L, 3639242386345472368L }, - { -2892035378057749818L, -5319789022585455217L }, - { 1190083349888328687L, 3160160382664083073L }, - { 1900956434625552346L, -2284489391947536786L }, - { 5686029047839893831L, 2781250728673448714L }, - { -8652319297499303518L, -791865261776098984L }, - { 5660206937964935444L, 9092721539996400845L }, - { -5693798368774435246L, 2258836748989798347L }, - { 326881025455212277L, -8754085884902168853L }, - { -8376143443592681499L, 2999534153289768504L }, - { -924714482174160655L, -5379654820304465219L }, - { 2731102432407909647L, -8648442112932022073L }, - { 5974710608961653241L, -3581417371718541672L }, - { 6662943015421622990L, -6686424439719532742L }, - { 2629145426514230124L, 1947184247238363747L }, - { 7653779470428211936L, -2981000221623473869L }, - { 8231699528634814943L, 6477265731277391860L }, - { -7880485152483421857L, 3296436166418847848L }, - { -8715291256937697509L, 7836011376951354082L }, - { -2608260639142008146L, 6771078140290822120L }, - { -2891414416406033026L, -4301793197635600383L }, - { 1006672424561275863L, 2790898605915233737L }, - { -5345465745471823175L, -8188476658929014250L }, - { -3007098514343148833L, -1632205865341471381L }, - { -8853686550740270619L, 8025678435968917400L }, - { -8826799561287303533L, -5665941448030027073L }, - { 8800245871751669511L, -3536393248796535509L }, - { 565431636219131046L, 3503967908423474425L }, - { 6137897978460556916L, 91950916967717704L }, - { 5482308004417669307L, -8343102428410455164L }, - { -3006854606371770142L, -2624010453361449257L }, - { -5550863738981833513L, -5107086731935101640L }, - { 6860154257076535929L, 2122136767273906883L }, - { -7830408716033920139L, -8885954713952577885L }, - { -6220766884162806429L, 7016794589305787131L }, - { -3254641290637732033L, -2128471522653394358L }, - { 4069104293139053208L, 2152160035557905229L }, - { 1298727460612851492L, 5940452780843637659L }, - { 5145793087755505159L, -9004759719138398615L }, - { 4012194405015900827L, 6347510871907681406L }, - { -2096633266369036577L, -1498193343687136142L }, - { -235600124490809513L, 4988899018975547087L }, - { 2256248865523312538L, 6160266267729455349L }, - { 1856550792634706370L, -6501591819842837449L }, - { -6338437638663913139L, 5594380189312176072L }, - { 605690123879344699L, 5053237049864143776L }, - { -5972006707479557169L, 4785782695457342020L }, - { 2788841617850067275L, 8271282777966666049L }, - { 3341756482258277517L, -6056850609051651338L }, - { -8730087995322499274L, -7118156720511960164L }, - { 5666761853789513177L, 9188761121016073816L }, - { 1427855942817620030L, 4407328625609699591L }, - { -2247084578644277545L, 1708890129314508850L }, - { 2632056116244532492L, 4401923056661588294L }, - { 8983184113458203674L, -3136608526412251467L }, - { 6222824259917067927L, -8130597606013207234L }, - { 832847538082989274L, 1548428941129567096L }, - { 7408336855734508382L, 7776449749647396310L }, - { 2463234904146980715L, -3340268007978204382L }, - { 7616355816816829131L, 2303050254259962399L }, - { 5437320614714817066L, 8476803541903204130L }, - { 2176649963064497163L, 8869043259439175488L }, - { 7847964877858458386L, -6373057125165026464L }, - { 3676215252045438118L, 2204625982824682027L }, - { 1457265625453915305L, 1387291172404214096L }, - { 421670244665897930L, -387569155792122879L }, - { -537286355906412984L, 2487716427838425241L }, - { 845546777083974630L, 8893865741331650301L }, - { 6294586905906742451L, -4553937046340818752L }, - { -6979812383811440761L, -5140944992099214823L }, - { 4101166573373719960L, -3761343286476191065L }, - { 430647036995334093L, -2776276191091528330L }, - { 2563569094767382754L, -1570641686381817622L }, - { -2226117486192197040L, 1671878083856373830L }, - { 3989815455278220803L, 4052233204958035005L }, - { -5573460076032648378L, -57360737518556647L }, - { -5149764105493446507L, -5658661468258761908L }, - { 8908023797302087394L, 8118348247591337103L }, - { 1579875413248797693L, -7026389577366674812L }, - { 6557085398158756277L, 503776811517866907L }, - { -1860582499397819682L, 5110024206261509272L }, - { -3940264269551745098L, -7099666907393494587L }, - { -3760050418257691649L, -7345481607428632425L }, - { -2749137550200198091L, 4331101412580103856L }, - { 863749834414320446L, -2373778346862397644L }, - { -1701674908797410602L, 4970046037650428460L }, - { -3441531459858237116L, -988835857524290763L }, - { 7781166611943523849L, 8140634413685909259L }, - { -8747694838109223765L, -3156431890675712017L }, - { -7940615954936651322L, -4120870388273929951L }, - { 1761800111692886098L, 2547288411650164556L }, - { -7563608795264216209L, -4847926844762470820L }, - { 2430120273101259962L, 2177062838677564347L }, - { 3034607409190630193L, 1981874097468871768L }, - { 7596606678605264709L, -4288556630910272875L }, - { -8815959038019965324L, -5980112834322187096L }, - { -8056592803858661736L, -7052224712096695046L }, - { -6054319005531061432L, -9188489342513555697L }, - { 7637990614259037480L, -1415221593400472327L }, - { 155762651336866309L, 5657149807227102396L }, - { -5295066003461610118L, 6870728820605999153L }, - { 2097996021613363354L, -4931700889553602696L }, - { -2649318637576910563L, -6978908410517853058L }, - { -4710689453059380010L, 261449222883509725L }, - { 8675276565266944323L, 335351249952568394L }, - { 4061820304631504890L, 5804675661865029248L }, - { -865251409507836874L, 4577923466145028915L }, - { -4305544705996842550L, -4883326217850566724L }, - { 8133733737104758782L, -4495263459386364509L }, - { -3599082219550900640L, 5219535324240806812L }, - { -1172444168425884022L, -1485199996039546317L }, - { 7002178848795582841L, -5188784964680065467L }, - { 8753574524527561837L, 3919561486790968735L }, - { -7959972011549631263L, 8799060198670636386L }, - { -664335750987460129L, 3277903706972742930L }, - { -7761182775497779250L, -6310116907364982155L }, - { -201978935828898840L, -4696042526673297367L }, - { 5748605939155571413L, 6791894953965220475L }, - { 432959146257511060L, 7202022074150088516L }, - { 8597688997048592708L, 553712398347581549L }, - { 5979346454620003082L, -1716068746879028522L }, - { 6682666834922578474L, -8712532151663695231L }, - { 3635671342630844084L, -506639358181173636L }, - { 8295581682942403968L, 8983503375557227249L }, - { -6056716329065906860L, -1166637647026189798L }, - { 4876232349596700627L, 7615893510850307496L }, - { 3282465211073936357L, -5416752951469934982L }, - { -6277210138874800012L, -614708101837670038L }, - { 86063810903062668L, 9159828528959232073L }, - { -5131034425726984549L, 7387887681768229166L }, - { 7879994284944917570L, -5715373531508598047L }, - { 3805360137603820244L, -4830043112173673655L }, - { -4819745855255108901L, 3483810877331937366L }, - { 6005083603591253720L, -5557974655706376774L }, - { 1260872260703386533L, 8098831063630607951L }, - { 6208805585589862489L, 8877979288513368898L }, - { 4467145362283493250L, 4374169585767619657L }, - { 6925593199187107448L, 3955240828481560781L }, - { 2290814776012496288L, 4042584658561538346L }, - { 2202094536385319447L, 270484628403474813L }, - { -1583289128964920170L, 8120175710315470278L }, - { 2414314858213839292L, -1548161289658943137L }, - { -417375850490384234L, -7625678914308549312L }, - { -6775757096712023859L, -5214376957868732121L }, - { 1531877516325565400L, 1211163938547556009L }, - { 5092160435195199211L, 3684528669792750192L }, - { -7779989257755281504L, -5375772666913524545L }, - { -2910324314591098862L, -8416001170794441872L }, - { 8497090690994716777L, 8540791444836079312L }, - { -7802963550632908400L, -3467583003730778096L }, - { -6411284901845568322L, -941537897448291129L }, - { 9216337043421866495L, 3078985572433750012L }, - { 2437859992012674232L, 8179548351840095050L }, - { 6960237011186167617L, 3869309237547749624L }, - { 5100162418749277386L, 197993277396624937L }, - { 6509562170805894274L, -7367535593602185533L }, - { 690433361758303077L, -2806827680050805430L }, - { 5936816351771558334L, -4582124194561143228L }, - { -3601277060469993805L, -4565171460269252905L }, - { -978457311807747406L, -610254066917434504L }, - { -4420940034475608949L, -1856703055424341426L }, - { 3538644062391991755L, -3712271897739197104L }, - { 5164625733904685628L, 2650674255718769837L }, - { 192170982312183453L, 8633644357164644119L }, - { 5014044649793050646L, -8449200459845048042L }, - { 9147945450485230993L, 7810322997664288811L }, - { 121096778422978126L, -8652535562468380297L }, - { 7076446543359171313L, 571454885249581704L }, - { 3849792111065500559L, -8026540109779588702L }, - { 7235530029899206334L, 8515508725728343766L }, - { -6832803917257794399L, 9113172911670130481L }, - { -7448095328943903784L, -4562750453653683636L }, - { 636249030288914450L, -3970829186127658086L }, - { -5837508951408640620L, -7257939566854180158L }, - { -5494182545899908814L, -1345600624398540662L }, - { 139946096999437232L, 4142244339380738758L }, - { -7949772735307966448L, 5282219938929552231L }, - { -6777152677072204821L, -3004773806496786336L }, - { -648210928302263569L, 5511623637819700198L }, - { 1484711477581900777L, -56114059663856821L }, - { 1415763754612838143L, 4543528953784949698L }, - { -107058891244037140L, -7147306030921621952L }, - { 312958362296582989L, 3898297632297745077L }, - { 5071518533113132226L, 1938464859165095339L }, - { 6638935098145563092L, 8586698480642519698L }, - { -2867055004276813534L, 174277963774089138L }, - { -4289503497262086936L, 1793561870758663485L }, - { 1497170552728782805L, 2281434002035931012L }, - { 4517675483628149735L, -4299142910986295506L }, - { 3748960245079903666L, 6886847500671830300L }, - { -3691286664879128054L, 8872754919310633948L }, - { -209359184536764749L, -976043877717111761L }, - { 2491341916818449085L, 7267445614416492980L }, - { 5499205217633027745L, -3961171019363316611L }, - { -5512709448748519671L, 5362278415169786706L }, - { 4557913818063026938L, -3160011354686081538L }, - { -2112204135968966196L, 6310834969212348187L }, - { 3440403110217462895L, 7953765169956192669L }, - { -5867323792132309155L, 3117237805613135061L }, - { 5420869064478055006L, -5392284491101207136L }, - { 318512041709141078L, 265910602706848173L }, - { 1057553941897233483L, -1301783428765645447L }, - { -6895197562631981270L, -8197304699761768758L }, - { -5782743651675563936L, 4203332157031714086L }, - { 2659771847560443960L, 6759308237310585353L }, - { 6592601119187496548L, -3454010220224502424L }, - { -517270229881128849L, -364112620296853890L }, - { 2622604378506727519L, -1409475428244174294L }, - { -9170205866690625639L, 4114695014291468489L }, - { 4806630682514823179L, 9059429146023594378L }, - { -7776613972641981358L, 3810087764460194646L }, - { -1488298548028258830L, -3810270104734245156L }, - { -1715707210842296824L, -6915036138510998600L }, - { 3796221982870729299L, -3736370821310651114L }, - { -7882722580553373597L, -9000164591921300229L }, - { -1797548791879939131L, -520599612811393613L }, - { 9223079908042491188L, 5543904114523917201L }, - { 7847548061281742781L, 7166650075853579796L }, - { 1041148225166463713L, 6331269772201105184L }, - { -2800037601895587534L, -8408921437830061596L }, - { -7832361151307182116L, -8213348400415668450L }, - { -6950576920927850414L, 9156154939542525814L }, - { -2404378656089204258L, 8395455743286852626L }, - { -7720362412660524651L, -6273166454579708948L }, - { -4901646243176144926L, 6990772751632948288L }, - { 6432612866296388591L, 8548483255730797324L }, - { 665821462715291984L, 3350164667765855444L }, - { 5024465184664377182L, 1965564049852144627L }, - { 1558901948449801231L, -6446969132709976601L }, - { 2224934457550741787L, -7696287661468022291L }, - { -1486153720652331467L, -5605157687169082L }, - { 2152321067003602002L, -6321249259252955228L }, - { -1858128886354189097L, 2836979244920552810L }, - { 2873839996181438535L, -1072878112229444552L }, - { -243875524287970697L, -8348021835701218012L }, - { -1376873654537129986L, 5423661924194360191L }, - { 3287122656145633441L, -4945767931773080995L }, - { 3770833946582728674L, -6420894115027823771L }, - { -2764900700916121857L, 576336989324501846L }, - { 2560091717993161785L, -9200720429015878735L }, - { 5504786539926877426L, 3159208667838467515L }, - { 673505854315501819L, -4598137714685779284L }, - { 1264431652537758499L, -3814214474280468989L }, - { -5043418235491208409L, -8838500318471721555L }, - { -6769065002135856586L, -4166893156663053601L }, - { 7666088207808456995L, -5995625777871569960L }, - { -2827685615289224220L, 6872228841331280864L }, - { -5429383711816435171L, -1797075711309876153L }, - { -3134385201210164932L, 8882919297953772994L }, - { 3020879270457681824L, 5883876757118434219L }, - { -1689344584352272080L, 2437110626722923896L }, - { -9040930749904066060L, -5686175033217931543L }, - { 1932280955101101310L, -7158452945023483021L }, - { -4992572509975070322L, 3605164471112944705L }, - { 7546307129163923078L, 1170266758393999726L }, - { 2939073542428222766L, 7243081239066082528L }, - { 3374974368464231869L, 4928464298223439682L }, - { 885759554366311L, 1057459879878233927L }, - { 6593789636519856798L, 3419649136379989479L }, - { -1624132412418983395L, 8841047325915716177L }, - { -6031359656290740003L, -7488614225440201697L }, - { 688983212618230553L, 7643942002760146514L }, - { 6369052776794949918L, 5195382242098812706L }, - { -1377714920269304294L, -7175744776460667274L }, - { -1057940749189840506L, 3173893418895238573L }, - { -1655685782041312329L, 8477574094088335615L }, - { -110552080942842283L, 6888964814479005121L }, - { 5250633774704933933L, -1012094598554766112L }, - { -7909648255758272745L, 750427027426622638L }, - { 719735976337939580L, 5536526334688791531L }, - { 3645906512854567933L, -7728442844606091261L }, - { -1860978834085668115L, -7760720380835662111L }, - { -4349804709624489457L, -5819810209764985071L }, - { 7923661347327064185L, -3310448936111974933L }, - { 4244126846532735429L, -3815693592766389559L }, - { -3251399312816082643L, -834497383696947436L }, - { -4937029742581158563L, 8540913837129171901L }, - { -86298941439722272L, 2057540199751740855L }, - { -8597913327563881758L, -399644259762704239L }, - { 5039882027531808464L, 4551460786448379682L }, - { 8056647111062079524L, 3681777671216768037L }, - { -8976752115766926062L, -1802538985705148169L }, - { -1690394607348932339L, 6687318080944374988L }, - { 3378746565484573129L, -1751049606407600190L }, - { 8416003090844044193L, 8135905036230225311L }, - { -2717024430934601010L, 476006231892774594L }, - { -5701892799453780386L, -7173369616685818959L }, - { 1533981283496523540L, 1415291852685422332L }, - { -7462371343115417598L, 724626787697510043L }, - { 7010080256761797460L, -6150362952056456046L }, - { 4478373719647299143L, 5614140616738834163L }, - { 6305458678328463570L, 1122352984194175602L }, - { -5102763036459098393L, -3460352410086041434L }, - { -8778795989564198209L, 1473095525081521210L }, - { -2268889645684651974L, -520070433989938017L }, - { -4555916510323499535L, 7868968266585745421L }, - { 9065546065927673888L, 2823910101848922501L }, - { 5852839483910534806L, 8258588543522383098L }, - { -3402482240912256878L, 5952804005743627668L }, - { 2023722994972298169L, 5047124578203526567L }, - { 5215407550830003324L, -7830002530699043692L }, - { 1071468158469513836L, -1387799248150086883L }, - { 4955237436537987038L, 6130712479065828415L }, - { -3083989516400027076L, -3440784742149283773L }, - { 6722953813435001988L, 7245745558256024155L }, - { -2387850610416371552L, 182889665412283505L }, - { 809463730078568982L, -3696936559309597459L }, - { -5395203458608056891L, 2087371727619347819L }, - { -6137800097014878795L, 4809155221582786735L }, - { -3605527194936796968L, -8423052822282325387L }, - { -7589842792710116365L, -1533558859642065869L }, - { 8069067842420108257L, 6146489394975412119L }, - { -7454408306272078350L, -6915650351892414953L }, - { 2339188701288559996L, 8366379791959321561L }, - { 1008425726458324286L, 1620671620409236365L }, - { 6847676052807732318L, 2526749850075238275L }, - { 2271618337058209406L, -4170988020785076096L }, - { -8281033180921892670L, 2863917946175752856L }, - { 3604010165737741236L, 195804067905468237L }, - { -8269928557793008073L, 7207781055493994186L }, - { -447391999287823556L, -9188774064725556020L }, - { 8028984830780334836L, -444320022784399848L }, - { -3883350805508230356L, -1370082197650851272L }, - { 7482610679805814070L, 6054283912748538683L }, - { 6500112572029535883L, 6338212483365391701L }, - { 6119648543352512696L, 3731537194623523994L }, - { 6922212850686981745L, -7742260474253244859L }, - { 1734731947537567857L, 4227368981582034582L }, - { 4101619546129582628L, 7887200240021237190L }, - { 9155049639883886519L, -1574685774619907419L }, - { 5849304319215085011L, -5149097089656706460L }, - { -135976101808023055L, 7657751254514616451L }, - { 3329888204068201272L, 7691678257579801957L }, - { -4336188293967075047L, -8186810994473167457L }, - { 5788433959497374483L, 6005512947764583078L }, - { -1402363557578146821L, 8843112555146557492L }, - { 3588707324813677961L, -5917534281938487150L }, - { 6715232528053729851L, -6811917543979770904L }, - { 7169368150013526008L, 7113541687945298083L }, - { -8706746826857587245L, -8859511146642304604L }, - { -4819316543846777649L, -8774395764301925696L }, - { -8782313301067526525L, -6256596613929059099L }, - { -8916832875484128383L, -3111869372017071369L }, - { -2346600299358242263L, 739981548130115109L }, - { 1904681875169970567L, 1284498147074753190L }, - { -6704056743702639344L, 1025608445943185924L }, - { 2270605299750783360L, -8478634978958397732L }, - { -3940808304480228961L, 3620857268219366074L }, - { -8321565943725548488L, -162850665073338121L }, - { -3825742229541937514L, 5414988189270570764L }, - { -2349339074190735472L, -2520219757190524321L }, - { -2948486946206330984L, 7132250433295718412L }, - { -747906506207273746L, 8982940781026329670L }, - { 4280562720015859798L, -7158609942006274217L }, - { -4136257343808753176L, -5732481356090503243L }, - { 8445283324198191059L, -7944752293528961989L }, - { -8404850409602104913L, 7482965433126677L }, - { -3264457032343850047L, -3720438713954588688L }, - { -8759790595969078254L, -3181246708414873404L }, - { -2542190711281684773L, -2502711101698706266L }, - { -8843544063303913454L, -7592618515347100726L }, - { -4003746482399952206L, 3328250037536419347L }, - { 3841695822551400168L, -219582959475083627L }, - { -3588090911679720182L, -3174750020272651302L }, - { 4918585626351510199L, 7130806503895849634L }, - { 9222791837897484065L, 4011402744232032199L }, - { -5760984091213555378L, -6810121545918367515L }, - { 2491736142884395009L, -2597704284285157495L }, - { 9176699063949977552L, 8988486530696185155L }, - { -311336022868801049L, 800635164334809333L }, - { 6098071943696363607L, -6466386586993453102L }, - { 3781539988474542156L, 6252107264141468479L }, - { -5991444272878304549L, 5960563247743610665L }, - { -7058079929087833240L, 1774151115106864258L }, - { 3692880174470651745L, 3254087094804079517L }, - { 8043184184871662514L, 4334626677240459902L }, - { -2260533056334755470L, 5492216609821364730L }, - { 7862870576355526775L, -2002206651704242317L }, - { -1273628657555198089L, 4500092611531376016L }, - { -7116245059732632210L, -4469253241056826606L }, - { -6206223953545513505L, -1137760425047663752L }, - { 8769478588548603347L, -132736367177684309L }, - { -6809293819712164844L, 6559633909609042117L }, - { -7072037946451047577L, -2043337765421332833L }, - { 5145959967698376997L, -5556603267559213848L }, - { 3918549975422395928L, -3150639278327240429L }, - { -3688153306502628396L, -7435067995008483219L }, - { 8933640809529662946L, -7636525704905354617L }, - { 6586386948093068301L, -2183803246532017685L }, - { 4314174515802583045L, 6291721688596346087L }, - { 6042832017761248999L, -3695077737345263355L }, - { -2163096650317259801L, 2990268501997122182L }, - { -1301538385158714097L, -1533372430915700352L }, - { 9157628132063555931L, -7093418936861363878L }, - { 8447192224483369575L, 7631934447862654472L }, - { 1082300847283178879L, -7618647624807771192L }, - { -8765613093828266962L, -4115536092713542768L }, - { 6523561351628630699L, -7625252301278642487L }, - { 7878456944142132573L, 706194176774617761L }, - { -5878800239136723413L, -1813927820728650739L }, - { -899016955838748566L, 1966176815632465191L }, - { -968680680108344572L, 6575369511440091617L }, - { 8149351788840205925L, 2279025097486125117L }, - { 7767149159758237380L, -2644414571334647023L }, - { -1002433668001324671L, 8943147725619352276L }, - { 861378480610089679L, -4062600348246113369L }, - { 5131370442347562734L, 3950723299875471224L }, - { 5891997968737511949L, -7520213123221654021L }, - { -1134130780427583438L, 3132292634573307295L }, - { -2721284507442384384L, 7291597149098083522L }, - { 3581758406053663578L, 8835208245303410746L }, - { 4711959109881063237L, -3216119409741833809L }, - { 3814833207703197149L, 2734095307747491414L }, - { -5498755072540800142L, -6403288850279922865L }, - { -434194050930099095L, 4870237253884783459L }, - { -1131324138179189444L, -8321037353987256979L }, - { 6335673834129040499L, 1542550554552373587L }, - { 3840591353873435091L, 1003968243768320782L }, - { 6691477876637098998L, 3119531155265220843L }, - { 5389042814799436488L, 3464320519030129292L }, - { 8492537662085986759L, 4231665252183762049L }, - { 9801065220990358L, -4142253103916332351L }, - { -8991404774454959964L, 9117831577731702999L }, - { -5967334022174632862L, -8234653634853813963L }, - { 8423499844379835696L, -2296526801518540032L }, - { -1121320485100692308L, -2310012019292148394L }, - { -1137347326607533713L, -5910223239112105014L }, - { 3579131621253541604L, -7873288377384430404L }, - { -949637496239973913L, 8992721473934662726L }, - { -845717236495377944L, 1709210005757310121L }, - { 2627652869211543871L, 6229651575357526528L }, - { -3584273871358543803L, 3485383832684950691L }, - { -1231456733798526473L, -3693492293114660562L }, - { 6404279318428525466L, -2820264389343755942L }, - { -1959366387574498651L, -1999053094523153109L }, - { 8659995475649499110L, -4063188751398928642L }, - { 5687743493891209750L, 1819832997765820620L }, - { 5734157541830063944L, -1508187435145329543L }, - { 3807145789061111632L, -1163040392176574106L }, - { -8728883033962465130L, -2019265592238841800L }, - { 1886310705344218044L, -2186164004798954561L }, - { -2869995344352648369L, 608788407759231159L }, - { 8631433038774110827L, -8954043830652495539L }, - { -5196628823587587974L, -2249354261523167857L }, - { -7457206590006693637L, 4392495756732760488L }, - { -5287470411743602489L, -4602133066126451655L }, - { -4100864542827687276L, 8617323110060809504L }, - { -6925193246164904686L, 320293241076880811L }, - { 684773938147799771L, 6262050439533780321L }, - { 4684480184200832071L, -8091186757996198319L }, - { 1138521418475557396L, 7915368755744488159L }, - { -1024452235617887100L, -3320296128152795536L }, - { 370178077665262107L, -9162241114040089547L }, - { -2580904250658458088L, -281987854585455375L }, - { -4067270455265760110L, 3697740925622419951L }, - { 7883457924958258236L, 3225018098591163689L }, - { 2745236661071909096L, 8184485281086465192L }, - { -6638753008619557401L, -8598931368792692359L }, - { -1928563245103591922L, 4655096611975500707L }, - { -5391677730310963265L, -1065175718193252042L }, - { -3443398620200795730L, 3828176865585432313L }, - { -8921877650888014333L, 107866992902620257L }, - { -2549654053467481876L, -5050580673000189621L }, - { -6634007310328959288L, -876193222819744972L }, - { 6662969652277689957L, -6841284783697750392L }, - { 5704789109069509625L, -2476715163962031661L }, - { -1307333292330657763L, -5491692411965571232L }, - { 6533595699848914839L, -4499350589304206086L }, - { 2206229619406776067L, -2351165617492036434L }, - { -7059181012292774208L, -9115366817762017529L }, - { 8587013829275411963L, 4388678051800734512L }, - { -3759394797281060169L, -7053509092813615390L }, - { -8332558387862436192L, -6896020076406818425L }, - { 4058454963111191922L, -5286761064255899376L }, - { -2909318126609562718L, -6911874830505973438L }, - { 8309425769040304384L, 7849379961650314497L }, - { -3332518656544710523L, -1692848726219162872L }, - { -53840526904216763L, 2255977371922379760L }, - { -4392299612463469408L, 1581073356587586804L }, - { -6495163012164872108L, 2231393466511510482L }, - { 8283822043324591205L, 7499731676314211199L }, - { -3839429045227492113L, 7510349338395860967L }, - { -4554258591908844950L, -7317144759563080195L }, - { -8717791527048532273L, 4978792217011582827L }, - { -6680294812840082731L, 9152312282907380651L }, - { -1514076315369906827L, 3598370015785027284L }, - { 8342331288999106348L, -7203007516130555934L }, - { 4467472370913596089L, 6812568540862734900L }, - { -5258687569970231267L, -355677718169180333L }, - { 6428083210523097473L, -5287418510282857745L }, - { 2293947403016663486L, -5220278527068998730L }, - { -5526361602248141114L, 7996660119707051676L }, - { -7270937093961275072L, 5711622628080961541L }, - { -7226206738482320242L, 8598438917671031500L }, - { -267988759137059367L, 5431685311506687936L }, - { 3757842653020528703L, -3297692481111911080L }, - { -654142607214292501L, -2962827219142864971L }, - { -3877320323095024097L, 8842445126378196396L }, - { -210352008325460011L, 5116823845142598386L }, - { -3777353653906366683L, -601473431267226149L }, - { 4104559760354145145L, 4701224169495508799L }, - { 6351620637332827086L, 3205977800898050414L }, - { -3953047538968937343L, 6276768727993298797L }, - { 1977509989365985520L, 6409342957977133586L }, - { -6096612777648073834L, 6707983202497286472L }, - { 3655449697279862217L, -2885904157317690348L }, - { 6371929595416244955L, -6982319672407259043L }, - { -6719663260573101322L, 6074544765480824486L }, - { 8235058461435871026L, 7218535018958732569L }, - { 8223610568265677874L, 5036593928131829216L }, - { -636776168225445543L, 7126947243644292165L }, - { -5658531495972000806L, 5976061545413357422L }, - { -1315157075774308702L, -3587640206384793862L }, - { 3318184564168373738L, 3667606843527529680L }, - { -3870791042207323999L, -749752759518101873L }, - { -5761074459524531162L, -3904416599422058280L }, - { -7589695080417675674L, 1298670570171716776L }, - { -118243652515378968L, -4089007496976104453L }, - { -5606050504941145854L, 3363647473385925878L }, - { -1682232575263053834L, 4346070814778364812L }, - { 2064607730151462051L, -742205065568789939L }, - { 3860046528687723210L, 5639663483838395500L }, - { -6935238833286905572L, -619950249601147230L }, - { -1526898475961616862L, 8069505502923900297L }, - { -7786760789279579722L, 1492861118173755697L }, - { 6367271805286224450L, -7496769528088253126L }, - { -4333115896551664911L, -821727603931953051L }, - { -1229178972379399952L, 8730035857323100178L }, - { -5406430689127328314L, 4231658348135315593L }, - { -8536830855104540258L, -6071104864716272619L }, - { 4592858633504932985L, -3006733148669100477L }, - { -4661004590562426651L, 4357632356262471192L }, - { 1900079872513330236L, 4716191579745290515L }, - { 803518532278716272L, 3567557066091193813L }, - { -7227731911919645710L, 2095640250881819683L }, - { -1531800249475624901L, 6537531379212203782L }, - { -5068571120099635260L, 9060033697476709270L }, - { 6954901733800148115L, -1674928158449299724L }, - { -7075071323703859828L, -79790012159247464L }, - { 1447978964456769515L, -3214394401554340995L }, - { 860006115119071319L, 667210893626893467L }, - { -2067420548322589555L, -3021927277418583328L }, - { 4638996254844315967L, 8154077006989858919L }, - { 6983236581726963935L, -3528830910837705182L }, - { 6708882819304554132L, -5694112128251960949L }, - { -1077037295677468865L, -3503242918302157372L }, - { 3623478619549261514L, 6180056827434419475L }, - { -8551083693862102837L, 8556339763668418694L }, - { -6864926796047150583L, 5028306725838573487L }, - { -5583309839740166644L, 9027564656608576889L }, - { -2047952294766573645L, -3095287403842609759L }, - { -1296070923862863512L, 6790190055329304693L }, - { 3533321735634917235L, -9033799480884432612L }, - { -1137358684259757076L, -6356732617214670827L }, - { -8080333153054443456L, 3334370468254151878L }, - { -6770927466908143968L, -570402506200030937L }, - { 1677314511582577698L, 1342654560043637898L }, - { -2630259631962080464L, 7385442738096893062L }, - { -1793645900673563419L, -1723552778901560418L }, - { 3600237620008462975L, -1202654027148639997L }, - { 2180027379579890660L, 5542738931909800056L }, - { -9043677058766520350L, -3326672003520699872L }, - { 3962397017521642626L, 7663197079112974029L }, - { 3977072778934081031L, 1443754962703183004L }, - { 9036155278583684186L, -511483942672047429L }, - { 4719201700299004978L, 3372713474180665433L }, - { 195773270223425425L, 4606867324868612441L }, - { -3391740091956199499L, 6977786383238923035L }, - { -4297719063714682956L, -5205502438632599866L }, - { 2518769717461479967L, -2278000373378640850L }, - { 5163274893178164221L, 7720801366773322067L }, - { -7935837524015792569L, 7113479099627093520L }, - { 3725316512735597929L, 3063198825928438389L }, - { -6062355987398187561L, 196981839523103554L }, - { 5072788521812186052L, 2181699064151082790L }, - { 4756745374124465344L, 7250108599025853073L }, - { -6691048140593722302L, 4415088046869436277L }, - { -4453427560142816958L, -2106924769861351639L }, - { -8908616043104241784L, -1019376309451773039L }, - { 4680671232907313257L, -2174697625835016191L }, - { -6131724261229112714L, 7856591897252847779L }, - { -9108450687466015537L, -5507621728320366418L }, - { 6365495657268753375L, 5450431121738155020L }, - { 6448165814018765014L, -5612695438889065911L }, - { 7071162731007451983L, 5392474098323048148L }, - { 6828906714271770482L, 1502254970953831345L }, - { -3559294295246311028L, 7553612275548812830L }, - { 124771238363526084L, -4798796425975932412L }, - { -3293309753712400861L, 3954573374209069808L }, - { 8896706306255876093L, 4253298990076074483L }, - { 3125408161217615213L, 3803700255679029945L }, - { -5861463414798312654L, -4098195255457814724L }, - { -9036260382640522754L, 6369652912950273493L }, - { -2941595857477708459L, -9113821633105909829L }, - { 6033142563060557598L, -9020580934062204557L }, - { 1099630200403990563L, 696624502470685602L }, - { 7959429886791854178L, 8452651730508924913L }, - { 1535421567087429521L, 4681006148666640475L }, - { -3523681894692531197L, -7132650741735849542L }, - { -3906144409472427412L, -6072298972533296356L }, - { 6483996772781688720L, -7756906715255122537L }, - { 4132319255708563987L, -7604430518775079159L }, - { 8769726356542128993L, 4800289188839276316L }, - { 6738613111825331757L, 7396330301554136907L }, - { 1764580723100293334L, -5184137923839863797L }, - { 3299019025645495247L, -8319517036261810990L }, - { 2239605653730261397L, 154189014771898002L }, - { -6200467116936956633L, -6568202627332369288L }, - { -6291344345384672622L, 5354839767793808953L }, - { 2565928296401167337L, 3115419636555194066L }, - { 5329865919971566807L, 1719896645598205708L }, - { -8575034623756510146L, -3669000039462402717L }, - { 6368322753797090715L, 3689449136956819472L }, - { -7493350249074734851L, -5214369489577428826L }, - { -1948050475401750220L, 884718130935295239L }, - { -2542388860306602080L, 999643815495444354L }, - { 3132812952361473979L, 7117955964821677830L }, - { 8662503282931471374L, -949428191468665471L }, - { -7226118518078524751L, -8133317924985805656L }, - { 125513287940370920L, 1139709294781544858L }, - { -7105850358401444205L, 9011130779774299758L }, - { 2873891704788790693L, -3345408941392632050L }, - { 375644362554273808L, -3940052809605950557L }, - { 8779595029680158187L, -2090878506281834613L }, - { 6520575959918535178L, -3685955938622260911L }, - { 6481335563279395683L, -6651860608291596670L }, - { -3958324538875210597L, 687933001376263703L }, - { 2650332007800900579L, -3820496251684255429L }, - { 67216421894692841L, -6273923576662698622L }, - { 2892388889322576563L, 4142472054827014174L }, - { 447031742152452522L, -5750532076318905239L }, - { 2214867384342611779L, 1438016221944253759L }, - { 3463418430384064877L, 7933064097770090377L }, - { -6736581145771083272L, -6636037761993868041L }, - { -3097757825887262572L, -3464203236850017330L }, - { -742646863032103227L, 8549751377962719435L }, - { -675900178715113798L, -3914104413182363973L }, - { -2232567950500061233L, 7621988165391726384L }, - { 1712025609374863027L, -1123006467158500535L }, - { -3405265351896222950L, 1430535721297212626L }, - { -7357424915587192954L, 3465717092902363839L }, - { 5899042778652661141L, 4222684223013113017L }, - { -7187291342974761805L, 3957487962438616817L }, - { 3480937052474976673L, -6188589281798830120L }, - { 997099418044934990L, -1527963556835294545L }, - { -2839517833272115276L, 8330879031487323662L }, - { 8199436817352462608L, 6909954963993252775L }, - { 9072737280134851879L, 5188978806423418359L }, - { 839795799971829718L, -2860958804774185917L }, - { 458252816075262707L, 894349972574391694L }, - { 3252541827624060629L, 8522714392424847611L }, - { -5029727353658396637L, -5729345024622710002L }, - { -4967837872862091654L, 2804097617713186103L }, - { 2146776628928215216L, 7992918702582258237L }, - { 5403743629243841306L, 9019714016234030597L }, - { 3306799506878402965L, -2944777525613883043L }, - { 4468336141473957274L, 7689803402328019980L }, - { 7023113564987990226L, -5353349038722192959L }, - { 2871980174971968592L, 7052062369586092648L }, - { -6665846774723588486L, -7779984816814418003L }, - { -8521313230784523850L, -7075872948858809038L }, - { -2899150205599417383L, 3674168194855920925L }, - { 1992195265166010323L, 6718020075048606525L }, - { 3610880564010872990L, -8099380986026829265L }, - { -8962461672227066573L, -2708938433802853784L }, - { 8499793696703179099L, -117949552342789801L }, - { -5174175353166984262L, 4853488592908239062L }, - { 3773412144378555582L, -700152485305099197L }, - { -5377488598550438958L, -2221586125998783654L }, - { -227481030440141534L, 3571021169253497167L }, - { -3003034596327281460L, 6483608774262579967L }, - { -6010571883582226691L, -5383121100451058218L }, - { 5285640267764709652L, -6202879186354479067L }, - { -9094570939029139554L, 1417266974034045473L }, - { 3302183665375964446L, -5089891447239173791L }, - { 8185803481915750000L, 5860584065404731072L }, - { -7832879598569001202L, -8462546539915269894L }, - { 9185495476894972675L, -1418057708833821013L }, - { 9021601549322560342L, 741355604462128395L }, - { -1033483127041468323L, -1998905022320810358L }, - { -9094719449194039442L, -1626212808185905243L }, - { -4246271926877732985L, 4840812948897464736L }, - { 5329679602094503622L, 8649093324893765849L }, - { -3123609535190446287L, -361284439372155099L }, - { 4714766142804686442L, -8136402947598538231L }, - { 2489307805887894890L, -2356444220664306215L }, - { 2987790131896782326L, -8086179668000672928L }, - { -2963677483725852236L, -2516942748088288718L }, - { -8529934738168520503L, -3210310985686262182L }, - { -6356353435089583010L, 3516503088278819063L }, - { 3208586395891790363L, 4298931398837050951L }, - { -4407123126725047459L, -7765163037766468949L }, - { 8157441934654253916L, 2843614390491890044L }, - { -6109838368688820127L, -2368186650405422497L }, - { -4389983853453341623L, -5397592659600112949L }, - { 7652314184807664343L, -1427196053527089690L }, - { -4662723430367132038L, 120770956848949739L }, - { 8667093623786488993L, 3070768203499473269L }, - { -3415543420133275181L, 6085467894486731971L }, - { 4904278838452314694L, 6548926713722044422L }, - { -4354230232880600982L, -3272993024095048366L }, - { 8861799057857753L, -6094996369966286538L }, - { 3552811093870745879L, 8612973539161157048L }, - { 8634119875383707854L, 1907947534981169433L }, - { -2732631755040740128L, 5182756388090293429L }, - { 6518885727185543342L, 3116634721078149894L }, - { 4341137614328678730L, -5388034631040110769L }, - { 6793266319858946131L, -5418120590775304922L }, - { 8047455342123276414L, -3727261839997080006L }, - { -866422210016420449L, -8852169901685222689L }, - { -2975253122827530056L, 5453714651394251460L }, - { -4030176003307022576L, 4842581852636998099L }, - { -4241696461887318612L, -3800892415646682874L }, - { -4753266504739240553L, 1412187783702418413L }, - { -7373316743164657129L, 642636635356175384L }, - { 6048513984860600758L, 5869299884640974771L }, - { 1814258330875604106L, -2878806132566885503L }, - { 9109940689954894985L, -8812562607906103198L }, - { 1579558970146774347L, -4017510485008247124L }, - { 668478211668974619L, 6320024829637634074L }, - { 8409518560944185002L, 3353220582345848116L }, - { 7245729396754890299L, 5588396973718419901L }, - { -5114268398654367847L, -5944423628815401655L }, - { 2956616124692577442L, -290106912204558888L }, - { 4461886846778383058L, 2277783397013987244L }, - { 959690196566065732L, -8814538937186889982L }, - { -7235204044940286838L, -8189358422666028931L }, - { 7981158344195854661L, 4867006782544055533L }, - { 1833698125790755138L, 6523032353281179181L }, - { 7752754976810456477L, -7282290980488591008L }, - { 5692118834710835902L, 8632235045305762587L }, - { -3793683786453929372L, 2693475423544308135L }, - { -5581772364636870855L, 3928278557991189836L }, - { -7470774962401733293L, -8446516023329576894L }, - { 8780664591724430174L, 4286197667128074328L }, - { -7663125741516067028L, 1559881424666449109L }, - { 5829471574991825780L, -1699504516976991348L }, - { 1182333455500273019L, 5353082458342633232L }, - { -1726270951016459467L, -3454492226798936731L }, - { -2746428321520070969L, 3021238741736368676L }, - { 6832833992125314751L, -8702581179293653579L }, - { -3990613509805030555L, 8667205036761326617L }, - { 2400486545587757625L, -3000524943838505376L }, - { -6598170744898189777L, 2759511703193262743L }, - { -1995198747364774857L, 9008233307559279188L }, - { -3645842663215618557L, -7385147240487509438L }, - { -6553956802949933979L, 6965354958414743421L }, - { 363585666263112429L, -4882210177421749025L }, - { -5656547416142849554L, -4050177253764422541L }, - { 131159332135711557L, 5133143837072648253L }, - { 4242991056913343886L, -6686962481360868108L }, - { -4674809189780845966L, -3250341762564229866L }, - { -1954374021725723642L, 1323620250067427930L }, - { 9000512499144627986L, 5548743979937884843L }, - { -4966087500556332423L, 1629058188872823733L }, - { -5368443575882114199L, -1654000784989387712L }, - { 7898708771797640436L, 2086542013295426142L }, - { 4954393344642394763L, -6263444864756732931L }, - { -228876611915096824L, -4537215972588867693L }, - { -3517612841169834059L, -2765341318717509735L }, - { -3181203061349135348L, -508056924812247324L }, - { -7887316482076885972L, 3685431341741839088L }, - { -7491168484443218074L, -315834147890523005L }, - { 1505841500971991620L, 2429709964985541076L }, - { -4819676400227780409L, 1773949406412424848L }, - { -5600600902750799703L, -1641786959599535542L }, - { 4287196606575127498L, -478264408105952247L }, - { -6631038754487834066L, -6917616052826791264L }, - { -8562057237102997949L, 363106954233931060L }, - { -3310437032247565299L, -1481298033384594105L }, - { 5856634576804593925L, 4789755933237089305L }, - { -1659423729330836678L, 8494320904037636560L }, - { -2785469434848827216L, 7947848915676623091L }, - { -9178954688981005208L, -6785118745114422741L }, - { 8284532255782100018L, -9084098449354029433L }, - { 3932114027983614574L, -6289978089305485110L }, - { -8735736194352900940L, 1405162867455330917L }, - { -5947824514040167701L, 2919798360124166543L }, - { 1555054962173652536L, -1367989015884168404L }, - { -1028318040091115332L, -8568997691227678605L }, - { 4142937213480146786L, -2370901494422112752L }, - { -2819444980269809917L, -1308444741477082853L }, - { -2903074845803234197L, -4366808985359220640L }, - { 3718049583878739327L, 4354690312963727033L }, - { -5493173480792612991L, 2989222282329614806L }, - { -4746130552040956231L, 4496455761262808903L }, - { 6244568873371787043L, -7185280716865151881L }, - { -2997679871934966832L, -7309017646763845518L }, - { 4047215048138865730L, 6980804018930957198L }, - { -6551789563963923059L, 2916207770637549836L }, - { 9086055720517286271L, -2714494659452767480L }, - { 8876034907713774156L, -3821387241491356709L }, - { 3680389259422527058L, 2196589891375455610L }, - { 6042866802807055050L, 4754255664635533276L }, - { -4886080504692397375L, 1725619517599492655L }, - { -7166197738900036643L, -7243540186236866594L }, - { -727151388570173900L, -1634001379810212424L }, - { 2438604478622089045L, -5055210733955393661L }, - { -8782162061024071951L, -5174793973752794725L }, - { 9077567357215978574L, 708556034239591714L }, - { -2871872737471270227L, -4708678750825119057L }, - { 5320002012835335589L, -3526176864908362243L }, - { 5539849377632910446L, 2462221416305069443L }, - { 7555126502803598608L, -6755206762366162750L }, - { -8125224475094342490L, -8964598482310477564L }, - { 7417955058148509629L, -4872283382423985221L }, - { 4176877628224197597L, 2859364539165637414L }, - { 7598278370710374380L, -5131602648378407232L }, - { 2265897989342130546L, 5814327006378924467L }, - { -7061482734014550086L, 9021575515219812736L }, - { 1468468196263413305L, -2354059920935567217L }, - { 68682113048681479L, 8070600121219547337L }, - { 3762225435622216659L, 7301822979322435545L }, - { 4581877841476416419L, 150382900142393599L }, - { 5115735211430226046L, -4547351323713652974L }, - { -397731465197117692L, -4450390472569952747L }, - { 3802999106815691779L, -8622666519332587528L }, - { 7574760794857420046L, -7880900128621810138L }, - { 4178197313545546553L, 8601353854513781244L }, - { 9065628242529864979L, -5591534616375481129L }, - { 542937206029962193L, -5953723718608560239L }, - { 1542373631583440917L, -4196619194839329674L }, - { 6903559734881147673L, -4316576911841534837L }, - { -2071796881281526902L, -2370970960555427167L }, - { 3779795498327194080L, -4298546406843841164L }, - { -2217268270456792594L, -7501440969788317177L }, - { -8059036377920200513L, 259328063542822684L }, - { 5425988266816609684L, 4575515416863828865L }, - { 3561830549061618056L, -4771952364404768277L }, - { -7500972620191462258L, 71975804172456571L }, - { -6776359714207180134L, 6900148804315605370L }, - { -5775998075012891173L, 5004232704182523237L }, - { -7755164007855727652L, -8433929914715590664L }, - { -4908348827451399810L, -3301072556359365892L }, - { -1162366502935483389L, 7384541007136416566L }, - { -3581470604892760162L, 1976805054171796726L }, - { -1434370488502028008L, -2547401488641472132L }, - { -1493293905909468959L, -7441839474594455138L }, - { -6762524287730181241L, -1601622492184803904L }, - { 1393564479464918401L, -3009814218133425849L }, - { 6717807842217858780L, 8165340015547077095L }, - { -2269779449488763938L, 7927691835893341197L }, - { 9119207083214966580L, -6786708504775243266L }, - { 4437289221718108033L, -8954685188941013035L }, - { 1991815488616873724L, -8103624658829230585L }, - { -1136008736729825773L, 5916992738852984881L }, - { 6919259317959590395L, 8169647393497828250L }, - { 5700567409540575886L, 3944594914853142763L }, - { -6511943523783520343L, 3357295622932201334L }, - { 8471138532439345892L, -5702753540740804811L }, - { -1261020616469785625L, -5601367572994175866L }, - { -871122257839774394L, -6976984597391717235L }, - { 5853266956701599170L, 2179435702096663547L }, - { -2605324811026081L, -7735967841074233262L }, - { 5645723143070327343L, -5300356287831138464L }, - { 6678903618140079830L, 558130329295762466L }, - { -8243425527465830189L, -2753667594936483651L }, - { -7366977412613262267L, 5174687824180692399L }, - { 5554112623362949635L, -5127585768737053004L }, - { 8508696414094887570L, -1823867105900064766L }, - { 4526724121376344377L, -3708548295144862203L }, - { -3066464409160921518L, 8089012003806475311L }, - { 6423971479710566480L, -7039855685147014402L }, - { -1301150937530073813L, -5585328718840536037L }, - { 7047171805158365362L, 8120759358342535720L }, - { 6607488204808324896L, 3901947263714529520L }, - { 2550589198730302889L, -1984225587532390244L }, - { -1508652597994003459L, -2625033096378578368L }, - { -8797285250854566260L, -8253763814000785373L }, - { 4531577529333440300L, -4130829189401243467L }, - { 7171511780196023810L, 7669326050720755710L }, - { -8696995432677729109L, -4993075107798409464L }, - { -1038277725665095082L, 7849644114484248935L }, - { -4030021971399704454L, 1256768363928500996L }, - { -7142316504058264789L, 1252978987744068438L }, - { -8690342808784496917L, -6354446673649917336L }, - { -3538025267466743323L, -7107557983957120854L }, - { 3030344740150338756L, -6398796188997538104L }, - { -5434476681454308336L, -7496500108057908992L }, - { 4747881963413479619L, 4331614803740895864L }, - { 6649081146297801785L, -7539581662252191545L }, - { -1340297105335493395L, 607361016476543345L }, - { -2345199575979290182L, 3757829078804583621L }, - { -5142497021023029281L, -7853754814637441930L }, - { 6590959395881104212L, 6033816056225283084L }, - { -669027690510749039L, -5598511059038889050L }, - { 4713909714515252237L, 8498930096032167029L }, - { 6334133652957330690L, 2179067576579471054L }, - { -4130611448171970254L, 528954176811746781L }, - { -8777249173946876665L, 6460005588985419673L }, - { -3777422122544011758L, 2949786550955297825L }, - { -4139822748883105829L, -7060522727358656049L }, - { -85322879655457932L, 8186136004732221397L }, - { 8510613507788926362L, 5121599937034700924L }, - { 8480533752847008903L, -2597744666135972005L }, - { -1501849715563565256L, 59714163236198638L }, - { 7144010316023561074L, -68619869987424240L }, - { 7071721153639906878L, 4787691242484650034L }, - { -2413842258996393407L, -102302437317144586L }, - { 3829076351340781609L, -2319803825930028643L }, - { 3904259427140354464L, 8797809088167232571L }, - { -2423161203681766273L, -470372639707402796L }, - { -9222948412120414441L, 2461249821658147313L }, - { 2232806743868046887L, -2392759272414380666L }, - { 3459293971647694135L, 4210665238486533367L }, - { -4958044470517187570L, 2672187701402147373L }, - { 2702008978364322255L, 5638626575506030561L }, - { -5230685167113972622L, -7617392617133523896L }, - { -4777581725252095139L, -5140368461179091836L }, - { -178566492057125337L, -6847413203152532992L }, - { 5473668624447677467L, 183117619671776212L }, - { -6025569476816496835L, 6468191562561708163L }, - { -1758476046405271590L, 1659198619774233309L }, - { 4318010125119483290L, -4823834649924404602L }, - { -5001898604592523465L, 8911108370391112613L }, - { 4496672693040208250L, -2259208634242191704L }, - { -6249539806063036132L, -733362499880552249L }, - { -7752211883834007080L, 3335016862478247633L }, - { 5401928633460905475L, -1235856076215536659L }, - { -7924780124408034823L, 7205431551907269451L }, - { -5852842870036885474L, -2844635853105127428L }, - { -1507586788733048669L, 4335468969213182987L }, - { 8723145826212343490L, 8281666246893648997L }, - { 6322146995759068109L, 7484504729026216551L }, - { 7033327335320195047L, 7165769114010786735L }, - { 2731703606190537636L, -9199202980814290025L }, - { -5700197206770306283L, 7961233189193040547L }, - { -7681929128588407075L, -1127459956109423435L }, - { 4915318349456884393L, -3186450213454571240L }, - { -4365674444257230772L, 6196235634481915881L }, - { -618412543643891621L, 1212876310516573701L }, - { 5389658231644689771L, -4706000143957565510L }, - { -3464092788986188235L, -2872909288794957622L }, - { -1050158483149088836L, 4121143610298397281L }, - { 2986789282075383014L, -8242619029520357911L }, - { -7095920626607872836L, 9003605662221032036L }, - { 5041839261426701960L, -3912891411490985358L }, - { -9180003565648806832L, 7225541720051129724L }, - { -4136797423318912582L, -7424404802325061838L }, - { -815263725971673785L, 8781179913689849178L }, - { 7751482036034122791L, 5628918479571946112L }, - { -6582902412740766080L, 584288259370869254L }, - { 4948480397753687589L, 4278919042846414482L }, + {4331629317196124516L, 1639885090772725551L}, + {6697150685477982789L, -1583908083060253398L}, + {-8292226578951944721L, 4476804508315987292L}, + {8469039529317823308L, -4636474853694258398L}, + {-2848870975062246556L, 5233816596372106824L}, + {-4847447143719480019L, -2687604445613537347L}, + {7545677836808206678L, 8332429470403026021L}, + {3540211138895396408L, 3992459923157840628L}, + {1285813610291173716L, 8233152553044849459L}, + {-7784481855774059403L, -8096273352407245883L}, + {-2714345854300347086L, -1562905338847105568L}, + {6925684980325533267L, -3117242072537376104L}, + {-9112643559117885900L, 2771189218553273490L}, + {1882756241765347250L, 3134678319768795724L}, + {3701001212619307056L, 4694823574419600457L}, + {-8419102115735858709L, 1167505134600559530L}, + {-8964415716902764417L, 7665362522302890520L}, + {-65484870057070163L, -2154863037755560524L}, + {-954938640704679474L, 6388877495784709814L}, + {-979562365498527144L, 5481887351687388723L}, + {-7382239783186871562L, -7733943340511654057L}, + {5251153271619350814L, -5357392133568419518L}, + {3564854195161521021L, -2021636742340634953L}, + {-74312886167345484L, 6701300805910281389L}, + {-7331277368683814568L, 5111706538133173116L}, + {6180175351202170214L, 7106065787858343366L}, + {-5506848341444621561L, 7868028660651681881L}, + {4709740154938203410L, -4396229032691618835L}, + {7716297005579308510L, 4776035376666368100L}, + {-5231218401659391210L, 5502389999871393522L}, + {2808335999161107948L, 3172485746495004832L}, + {-8895902480507490378L, 1734050687059504670L}, + {-6484295527863798667L, -5865043420154797721L}, + {-4893753704679531145L, -1407287398624235464L}, + {-8013506817112676885L, -2413542569879967512L}, + {-7115565146196200482L, 1492091106940842223L}, + {-4250908842491168006L, 5100692366480332295L}, + {7641455146012374921L, -701187772797485824L}, + {1171882517985315020L, 6041975995921368652L}, + {-590591174345433298L, -745155016275351721L}, + {4353825711501646860L, -5695286777690739329L}, + {3766038603438423921L, -946995585431570618L}, + {5669741062587975241L, 3306563558377990077L}, + {-4034141614316184690L, 2303139291793139905L}, + {5042354261806495873L, 3029285818524047503L}, + {8171624055608706139L, -7686014468326816771L}, + {2465028573996743971L, -5155189837447338979L}, + {231525910304521521L, -7468941650786504332L}, + {-2906566784067431233L, -3093130381718113227L}, + {-5815630959969268197L, 667274393249985457L}, + {6867289460752780832L, -2905703229103006681L}, + {8367342037681739365L, -5211011903304858229L}, + {-2281353332963214183L, 9220933480317079273L}, + {-7873419781565326375L, -4958329158596891671L}, + {-954320324783281344L, -3907949502207462370L}, + {-8978876518219901536L, 6459759108635159800L}, + {5578589535412452811L, 5347663850081616344L}, + {-1139114663023920493L, -1336174274889435851L}, + {-6125271792804196849L, -3695347576125854749L}, + {-8540897085876126918L, 6006668829300360192L}, + {2457750544363517570L, -595538372156368515L}, + {-2873340196283457206L, 7722471153320550112L}, + {-202735095288385060L, 3306848206005022873L}, + {4680342363383152427L, -2968985762887494339L}, + {3754567565766477241L, -6037287120647939733L}, + {3030040040421745654L, 1937599850940715675L}, + {885892669913812197L, -6287203992695247871L}, + {-4668401756510431198L, 27796623019379649L}, + {2828217119128588853L, 2936780557572794362L}, + {40721351745424859L, -2784176622995643676L}, + {4226613921171131261L, 497180669697206711L}, + {2476560251925287446L, 5820151453400560579L}, + {4857915294336896964L, -6247280158567945841L}, + {-3243612273020441258L, 2836499443783443472L}, + {-8323173319150694718L, 5859965750769241918L}, + {-8464714455451733912L, -8306892192837505339L}, + {2417309479822957758L, -1246973976546704153L}, + {-4970343771720203825L, -3191439884819854813L}, + {7616892889149047131L, -1492818326952765975L}, + {3179230974339910862L, -5929287588380075388L}, + {353551526640305233L, -7378339587947523515L}, + {840447756688080769L, 6565835274439444296L}, + {6560453897067438875L, -8337740380118346582L}, + {6404605759690477879L, 1860833063820863399L}, + {-5798495500651630883L, 1091158385497258294L}, + {3489314580607854539L, -5573961258448405293L}, + {7361202545248788112L, 6034580963668655699L}, + {8662317980504766524L, -8926545602578986090L}, + {-9176879321700063391L, -2398921906930257590L}, + {-5722341628043847505L, -6351286801388339488L}, + {-345401929977388616L, 3005904976331127429L}, + {7797208744999634196L, -8634345153714809468L}, + {-257714712793164095L, -1873140185420586258L}, + {6828368112434274995L, 7058669897955400332L}, + {6587574874377658116L, 4874363645196347164L}, + {-8420691969719514848L, 2341431149372744263L}, + {-1436841954376886408L, -7620195622266955703L}, + {8390237817828095380L, -8971128665773428134L}, + {-1244269747449213801L, -5329391842655754631L}, + {-3239069421268305651L, 2334172164129027696L}, + {8057896190039586L, 7452686587683727169L}, + {-608430754954139223L, 3381655527636719735L}, + {-2634446749318812749L, 7010915016267118875L}, + {8929276493775119227L, 4292272306792598039L}, + {8931573570276676636L, -8519118794081841344L}, + {3822004851281897117L, -2203301444419626572L}, + {-6152300141823657396L, -889109731424416165L}, + {7182476636738674444L, -7649930728107420084L}, + {-6684339015093823920L, 6577956481422755158L}, + {7807280739361302131L, -1135517321040401801L}, + {-923194570850102811L, 6467757807397379780L}, + {1584573338514642399L, -3893190475498763966L}, + {-498065553132084148L, 1865266646395158771L}, + {1799679540365788870L, 5841239947085522603L}, + {9045748501111411219L, 7421695194818838145L}, + {-7637550038764425741L, -5845707294280746103L}, + {5329558184254416917L, 4547453660021049624L}, + {-5342451072932073021L, 482260313304954060L}, + {216480453064876203L, 711069328663754163L}, + {7508106403501961131L, 2007822021650305972L}, + {8725508331413138293L, -3626352862801032903L}, + {2560531293828421548L, 553012714310330725L}, + {-2008955238081544825L, 3340257035234765328L}, + {6529104080181178646L, -7547960671941050622L}, + {6099628745411598729L, 8241958247598079573L}, + {2756659790325965589L, -1910461132866830894L}, + {-9213432955006411442L, 3852602514422689973L}, + {-6654664302901669378L, -3591698504276609326L}, + {-3643300284729203479L, 3240996573344966350L}, + {4663787755159455929L, -7043137326384228379L}, + {-669710962240484079L, 2198151612197094376L}, + {5035186860853879345L, 5689607670679160328L}, + {-1497009633866831856L, 6116439920220101860L}, + {-5364225470045216191L, -2524583207297749149L}, + {7960728708973508149L, -4484834555703476170L}, + {5512091823114850815L, 5169321183215226123L}, + {7721868783230577176L, -82870217609973041L}, + {5949192792297315127L, 7386107438936735767L}, + {3638671413276752949L, 967354079224124082L}, + {-3493999225022562864L, 1736987366587456064L}, + {2975169008368240023L, -2911062917802181439L}, + {-5830673024621691907L, 7279518614247137665L}, + {-1139876564413364861L, 2573839846536122317L}, + {-637830076892861526L, -1400018571611626811L}, + {3073567850729737274L, -7060083933758612828L}, + {584182832408009040L, -1684515357135093979L}, + {-4548011654370479917L, 3650830433632177136L}, + {5119409690433687288L, 1363851279412653639L}, + {6532746751816727406L, -268134467754466L}, + {5036805181987997026L, -5288517888352132842L}, + {-327803426338917854L, 5322571032958708131L}, + {-2189559856150793303L, -2933300712108522399L}, + {-7915301437281691707L, 2943568251638140676L}, + {-6227342842105738959L, 8099698710467077821L}, + {-8993001121053935550L, 9126194125698526755L}, + {907730379649993758L, -3652315413425215569L}, + {5023461831735961354L, 6919412303663430221L}, + {5364101017343427759L, -315599275077811411L}, + {6923504748893038502L, -7350219810380230143L}, + {4908646141995756237L, 8507617699718047232L}, + {952783116860484934L, 4009659776894373679L}, + {-3294878312196750608L, 2442027558747033926L}, + {-263001097034647143L, -6632583776719317880L}, + {-6341310972840343572L, -2656983727499478166L}, + {-2779322160924414865L, -8687174340132939253L}, + {646982227875835088L, -8921122925878035469L}, + {4981486718593732420L, 610621754580223298L}, + {3136424241367791514L, 4883504922076234513L}, + {1588727704329333995L, 3030073555385079838L}, + {-4070703023625741663L, 5658459444065239280L}, + {5828932422032929570L, 2856038697306292627L}, + {-2881020791961093427L, -6214682596907600989L}, + {7289018053124519212L, 5097157380496129712L}, + {-8210232022318257391L, -4945331947102062592L}, + {-4932159699729152421L, -4454262099293472400L}, + {-1519151536033678760L, -5023767059372904822L}, + {7768139346588245743L, -7913086732140250835L}, + {4663204289123975746L, -2718362182895828791L}, + {8301645006754151822L, 2622047573067766958L}, + {-527375505220402703L, -3652332080375247426L}, + {-5729392141767077416L, -4151319741037085130L}, + {-1061319607921895354L, -1409911642874475334L}, + {4940818006273925907L, 2184222853857570529L}, + {2723620363371285152L, -7672690566794057192L}, + {6252714915337699141L, 2314830992990646948L}, + {-7047533064810318960L, -2008174505846145161L}, + {2306818986335389881L, 8249997590679901194L}, + {8450065497909871849L, -8831895305229340716L}, + {-4217000768181820795L, 1544531499573709440L}, + {-1337267428073608141L, 6177006046804863469L}, + {-8857633266251591090L, -774347292282095068L}, + {5164282658652255398L, -8684179529877357750L}, + {1481739352759587670L, 5414525982296129222L}, + {1351986975138349201L, -6185528530236014533L}, + {65929927533374434L, 6252977882818877758L}, + {-2314142725260293145L, -4877218633614863001L}, + {2620263026747810589L, 3958401008161325769L}, + {4469476270705785392L, -5430615574033125470L}, + {2056538272538478077L, -862355286215931849L}, + {454180883353015865L, 7762719650023470972L}, + {4839487715844855786L, -7900083800860489486L}, + {7942533619400842120L, 8585038689893337276L}, + {-2815467195740173572L, 5296875560477683335L}, + {-1083538654790434734L, -9193249793920630201L}, + {1889012098251655317L, 2527085564415319906L}, + {1741657056552907771L, 5592210964440272641L}, + {5723507339014228383L, 5029630212357158901L}, + {-7032334681933015537L, 4084980747390945864L}, + {2463118178158422515L, 8098757569442079597L}, + {3752105439687274244L, -4181414926127006394L}, + {-663915851310858086L, -85354840719075463L}, + {2011110544817827104L, -2671072148767894820L}, + {-1420169423837059118L, -598759081963898162L}, + {8553587424506667053L, -5240400034332352370L}, + {-7662248035234626103L, 1325294974957692694L}, + {6679274078239456105L, -1434928924752403272L}, + {4819483627709809889L, 8478319941508844354L}, + {9203365986368075354L, 4033559530674635870L}, + {5950679156247704341L, 3837428951973829103L}, + {-373315081569566463L, -1482507884485177621L}, + {5339226513315271605L, -7611681873083001579L}, + {-2219527427249265829L, 5635133397518404122L}, + {747296102288535702L, 8973619218046772307L}, + {-7493057443430069396L, 3497964097134584394L}, + {6724043080988557848L, 438429818292787405L}, + {2032101896102161207L, 6083472720220104745L}, + {-1656936845267744649L, 73740362659034890L}, + {-3491848432979599234L, 8493083653578236787L}, + {7404204759825967163L, 1396472196281816555L}, + {5796798020837779651L, -2345404432560011061L}, + {5185226877395757398L, -1407423944572575652L}, + {6062827044520085102L, -584609121356896609L}, + {1631754126980769139L, -1470461937317538162L}, + {2155034312189437638L, -1211843219178899758L}, + {4419389933864557564L, 2474123120380500371L}, + {-6212670054900830945L, -3283329040397730768L}, + {-2848281703253248988L, 1376655356872485794L}, + {-6545922936561011643L, 1663590999050246928L}, + {-604998998887059747L, -6404606806597906129L}, + {-8813736778885336452L, -9050067230254355096L}, + {-5028399912173153801L, -8181108087906772027L}, + {2802315771636654550L, -3057409231249770497L}, + {1359831828875761363L, 8335036989554482751L}, + {-6244291732477211457L, 6778429609948085662L}, + {9138108823363225790L, -4965281868002262510L}, + {-5700703633273694371L, -6875741241266038885L}, + {-5189931767235375959L, -5872467238339532574L}, + {-5917217031437644153L, 6643339725428825001L}, + {6559980057173897885L, 5549915138011177360L}, + {7585954365066361941L, 3827417266074500159L}, + {1833254434142522137L, -2975534211365301488L}, + {2622798612834078243L, 880690646882639358L}, + {2935894269140572959L, -2170847169010457533L}, + {3342180495858759098L, -9026120371020346544L}, + {7763655187214368195L, 140653358355510195L}, + {608976619205971467L, 2680459468129440062L}, + {-4493083204513432310L, 29582863612308858L}, + {5655458152670549588L, 1593207810406994381L}, + {-995372262620475933L, 2247666490547334864L}, + {6725108152764242753L, -7925184458835945793L}, + {-4152678539161864839L, -2459707456071349037L}, + {4879330012023732227L, 2141963663717599411L}, + {299691067249437340L, 1396036161400977741L}, + {8253082866296742941L, -8013096718656330446L}, + {-1349088245542024700L, -4461083559764567188L}, + {-930670635091392036L, -5798322241366770012L}, + {-6305033172145799503L, -3880395016914540203L}, + {767676528758696723L, 1063272237810615854L}, + {7848289152882068204L, 8909778499602937325L}, + {-5335123725692922309L, -6946127868897095127L}, + {7618587959592606045L, 4634778821401009725L}, + {1310623412826253949L, -8143415738254494696L}, + {6105911509337366946L, 792001017010716854L}, + {-5132873445536420119L, 8072991014637794838L}, + {-5066374717991788365L, -5659428556859705023L}, + {-4196018003514359930L, -2960252077637016148L}, + {4602399218983903018L, -7250042258597588446L}, + {6996237050722228275L, -5262328436781830557L}, + {4750432263399753517L, 1652612239899504274L}, + {-6552768219041772261L, -1285397640667162897L}, + {-8886514643984898377L, 3007652368209907553L}, + {7353718498017818617L, -3719995466824510508L}, + {3420752363982256164L, 5107602565903732791L}, + {-3106921624226184176L, 1168257018303839838L}, + {7755185569018499850L, -3857145641161864056L}, + {138048424823142520L, -8708777035055553867L}, + {4574855394856311409L, -8338994606192096015L}, + {-797116754680671576L, -7236253372429516585L}, + {-6319525882248058891L, -156939084894516690L}, + {-7211292892013797268L, -8753827357192046412L}, + {-5969262208310571743L, -4551450243246721654L}, + {-2242517284471541983L, 8996152110754951646L}, + {-2134523085752830969L, -7495306502570748263L}, + {5239925547316736378L, -2997846662183027098L}, + {2211989170649079345L, 4552093064635424355L}, + {3951874086467810189L, 606093338469391572L}, + {1541713943974254342L, 5009388306382876L}, + {-5392854420512731723L, 1707913964447526483L}, + {3564316510315168871L, 2357502818216120645L}, + {2901564687206922350L, 4109787658960348727L}, + {1540984989266277585L, 1126768316180128530L}, + {-5588692335575710649L, 6459331785501191353L}, + {-7656900483971665708L, -5215338425961743757L}, + {-1269975572006533380L, 3123164670370962323L}, + {-8586683894725424637L, 4575538545983245779L}, + {-667220377486025270L, 4838469292655308285L}, + {-6992322247305413343L, -2591667159733033943L}, + {1020432414035508475L, -8985144752213736688L}, + {-762737570699341127L, 2010955117870916034L}, + {-4996438874277990597L, 5869624445205357912L}, + {2399099134154679381L, 6901184743738376212L}, + {-7294753205977958107L, 2678158469636349061L}, + {-4330814694281211877L, -2372110554595119614L}, + {-3424505945178467498L, 2907272188222348819L}, + {-3908232167211290102L, -9086151270933909886L}, + {-1715708172189155463L, 873283929820174937L}, + {-1541677764411125216L, -6424898669918065646L}, + {1443437733037296364L, -5161573268394920993L}, + {-5699613322350318170L, -4038288171429340078L}, + {28422381221154018L, 8508868024345659079L}, + {-8448942739014323861L, -3172255279146427597L}, + {94089349704640679L, -1872147708441883283L}, + {3121324325667558058L, -2742049169245305954L}, + {-2027215282474423693L, -8633918446316412568L}, + {-9090860166446867101L, 5313050066376562140L}, + {-5570813680167514715L, 424079786412921033L}, + {-4433017494388855624L, 4758148122860548219L}, + {7780214454833321289L, -3435318272110965543L}, + {2818118075900140158L, 2464433363023169592L}, + {7909566890394565636L, 9103865919125847740L}, + {3281719552865083509L, -3221707456270358295L}, + {2293428426098439431L, -1732177137372972119L}, + {4831877444478608421L, 2348429429785960283L}, + {-8036810704178721498L, -9069577601784087655L}, + {-6696440698423871679L, -3085412744253133998L}, + {424663572619708233L, -8999784711703971885L}, + {2210379950234460182L, 1691623452644126371L}, + {4488772831440475400L, -2961180662304531155L}, + {-6238973969104209915L, 3639242386345472368L}, + {-2892035378057749818L, -5319789022585455217L}, + {1190083349888328687L, 3160160382664083073L}, + {1900956434625552346L, -2284489391947536786L}, + {5686029047839893831L, 2781250728673448714L}, + {-8652319297499303518L, -791865261776098984L}, + {5660206937964935444L, 9092721539996400845L}, + {-5693798368774435246L, 2258836748989798347L}, + {326881025455212277L, -8754085884902168853L}, + {-8376143443592681499L, 2999534153289768504L}, + {-924714482174160655L, -5379654820304465219L}, + {2731102432407909647L, -8648442112932022073L}, + {5974710608961653241L, -3581417371718541672L}, + {6662943015421622990L, -6686424439719532742L}, + {2629145426514230124L, 1947184247238363747L}, + {7653779470428211936L, -2981000221623473869L}, + {8231699528634814943L, 6477265731277391860L}, + {-7880485152483421857L, 3296436166418847848L}, + {-8715291256937697509L, 7836011376951354082L}, + {-2608260639142008146L, 6771078140290822120L}, + {-2891414416406033026L, -4301793197635600383L}, + {1006672424561275863L, 2790898605915233737L}, + {-5345465745471823175L, -8188476658929014250L}, + {-3007098514343148833L, -1632205865341471381L}, + {-8853686550740270619L, 8025678435968917400L}, + {-8826799561287303533L, -5665941448030027073L}, + {8800245871751669511L, -3536393248796535509L}, + {565431636219131046L, 3503967908423474425L}, + {6137897978460556916L, 91950916967717704L}, + {5482308004417669307L, -8343102428410455164L}, + {-3006854606371770142L, -2624010453361449257L}, + {-5550863738981833513L, -5107086731935101640L}, + {6860154257076535929L, 2122136767273906883L}, + {-7830408716033920139L, -8885954713952577885L}, + {-6220766884162806429L, 7016794589305787131L}, + {-3254641290637732033L, -2128471522653394358L}, + {4069104293139053208L, 2152160035557905229L}, + {1298727460612851492L, 5940452780843637659L}, + {5145793087755505159L, -9004759719138398615L}, + {4012194405015900827L, 6347510871907681406L}, + {-2096633266369036577L, -1498193343687136142L}, + {-235600124490809513L, 4988899018975547087L}, + {2256248865523312538L, 6160266267729455349L}, + {1856550792634706370L, -6501591819842837449L}, + {-6338437638663913139L, 5594380189312176072L}, + {605690123879344699L, 5053237049864143776L}, + {-5972006707479557169L, 4785782695457342020L}, + {2788841617850067275L, 8271282777966666049L}, + {3341756482258277517L, -6056850609051651338L}, + {-8730087995322499274L, -7118156720511960164L}, + {5666761853789513177L, 9188761121016073816L}, + {1427855942817620030L, 4407328625609699591L}, + {-2247084578644277545L, 1708890129314508850L}, + {2632056116244532492L, 4401923056661588294L}, + {8983184113458203674L, -3136608526412251467L}, + {6222824259917067927L, -8130597606013207234L}, + {832847538082989274L, 1548428941129567096L}, + {7408336855734508382L, 7776449749647396310L}, + {2463234904146980715L, -3340268007978204382L}, + {7616355816816829131L, 2303050254259962399L}, + {5437320614714817066L, 8476803541903204130L}, + {2176649963064497163L, 8869043259439175488L}, + {7847964877858458386L, -6373057125165026464L}, + {3676215252045438118L, 2204625982824682027L}, + {1457265625453915305L, 1387291172404214096L}, + {421670244665897930L, -387569155792122879L}, + {-537286355906412984L, 2487716427838425241L}, + {845546777083974630L, 8893865741331650301L}, + {6294586905906742451L, -4553937046340818752L}, + {-6979812383811440761L, -5140944992099214823L}, + {4101166573373719960L, -3761343286476191065L}, + {430647036995334093L, -2776276191091528330L}, + {2563569094767382754L, -1570641686381817622L}, + {-2226117486192197040L, 1671878083856373830L}, + {3989815455278220803L, 4052233204958035005L}, + {-5573460076032648378L, -57360737518556647L}, + {-5149764105493446507L, -5658661468258761908L}, + {8908023797302087394L, 8118348247591337103L}, + {1579875413248797693L, -7026389577366674812L}, + {6557085398158756277L, 503776811517866907L}, + {-1860582499397819682L, 5110024206261509272L}, + {-3940264269551745098L, -7099666907393494587L}, + {-3760050418257691649L, -7345481607428632425L}, + {-2749137550200198091L, 4331101412580103856L}, + {863749834414320446L, -2373778346862397644L}, + {-1701674908797410602L, 4970046037650428460L}, + {-3441531459858237116L, -988835857524290763L}, + {7781166611943523849L, 8140634413685909259L}, + {-8747694838109223765L, -3156431890675712017L}, + {-7940615954936651322L, -4120870388273929951L}, + {1761800111692886098L, 2547288411650164556L}, + {-7563608795264216209L, -4847926844762470820L}, + {2430120273101259962L, 2177062838677564347L}, + {3034607409190630193L, 1981874097468871768L}, + {7596606678605264709L, -4288556630910272875L}, + {-8815959038019965324L, -5980112834322187096L}, + {-8056592803858661736L, -7052224712096695046L}, + {-6054319005531061432L, -9188489342513555697L}, + {7637990614259037480L, -1415221593400472327L}, + {155762651336866309L, 5657149807227102396L}, + {-5295066003461610118L, 6870728820605999153L}, + {2097996021613363354L, -4931700889553602696L}, + {-2649318637576910563L, -6978908410517853058L}, + {-4710689453059380010L, 261449222883509725L}, + {8675276565266944323L, 335351249952568394L}, + {4061820304631504890L, 5804675661865029248L}, + {-865251409507836874L, 4577923466145028915L}, + {-4305544705996842550L, -4883326217850566724L}, + {8133733737104758782L, -4495263459386364509L}, + {-3599082219550900640L, 5219535324240806812L}, + {-1172444168425884022L, -1485199996039546317L}, + {7002178848795582841L, -5188784964680065467L}, + {8753574524527561837L, 3919561486790968735L}, + {-7959972011549631263L, 8799060198670636386L}, + {-664335750987460129L, 3277903706972742930L}, + {-7761182775497779250L, -6310116907364982155L}, + {-201978935828898840L, -4696042526673297367L}, + {5748605939155571413L, 6791894953965220475L}, + {432959146257511060L, 7202022074150088516L}, + {8597688997048592708L, 553712398347581549L}, + {5979346454620003082L, -1716068746879028522L}, + {6682666834922578474L, -8712532151663695231L}, + {3635671342630844084L, -506639358181173636L}, + {8295581682942403968L, 8983503375557227249L}, + {-6056716329065906860L, -1166637647026189798L}, + {4876232349596700627L, 7615893510850307496L}, + {3282465211073936357L, -5416752951469934982L}, + {-6277210138874800012L, -614708101837670038L}, + {86063810903062668L, 9159828528959232073L}, + {-5131034425726984549L, 7387887681768229166L}, + {7879994284944917570L, -5715373531508598047L}, + {3805360137603820244L, -4830043112173673655L}, + {-4819745855255108901L, 3483810877331937366L}, + {6005083603591253720L, -5557974655706376774L}, + {1260872260703386533L, 8098831063630607951L}, + {6208805585589862489L, 8877979288513368898L}, + {4467145362283493250L, 4374169585767619657L}, + {6925593199187107448L, 3955240828481560781L}, + {2290814776012496288L, 4042584658561538346L}, + {2202094536385319447L, 270484628403474813L}, + {-1583289128964920170L, 8120175710315470278L}, + {2414314858213839292L, -1548161289658943137L}, + {-417375850490384234L, -7625678914308549312L}, + {-6775757096712023859L, -5214376957868732121L}, + {1531877516325565400L, 1211163938547556009L}, + {5092160435195199211L, 3684528669792750192L}, + {-7779989257755281504L, -5375772666913524545L}, + {-2910324314591098862L, -8416001170794441872L}, + {8497090690994716777L, 8540791444836079312L}, + {-7802963550632908400L, -3467583003730778096L}, + {-6411284901845568322L, -941537897448291129L}, + {9216337043421866495L, 3078985572433750012L}, + {2437859992012674232L, 8179548351840095050L}, + {6960237011186167617L, 3869309237547749624L}, + {5100162418749277386L, 197993277396624937L}, + {6509562170805894274L, -7367535593602185533L}, + {690433361758303077L, -2806827680050805430L}, + {5936816351771558334L, -4582124194561143228L}, + {-3601277060469993805L, -4565171460269252905L}, + {-978457311807747406L, -610254066917434504L}, + {-4420940034475608949L, -1856703055424341426L}, + {3538644062391991755L, -3712271897739197104L}, + {5164625733904685628L, 2650674255718769837L}, + {192170982312183453L, 8633644357164644119L}, + {5014044649793050646L, -8449200459845048042L}, + {9147945450485230993L, 7810322997664288811L}, + {121096778422978126L, -8652535562468380297L}, + {7076446543359171313L, 571454885249581704L}, + {3849792111065500559L, -8026540109779588702L}, + {7235530029899206334L, 8515508725728343766L}, + {-6832803917257794399L, 9113172911670130481L}, + {-7448095328943903784L, -4562750453653683636L}, + {636249030288914450L, -3970829186127658086L}, + {-5837508951408640620L, -7257939566854180158L}, + {-5494182545899908814L, -1345600624398540662L}, + {139946096999437232L, 4142244339380738758L}, + {-7949772735307966448L, 5282219938929552231L}, + {-6777152677072204821L, -3004773806496786336L}, + {-648210928302263569L, 5511623637819700198L}, + {1484711477581900777L, -56114059663856821L}, + {1415763754612838143L, 4543528953784949698L}, + {-107058891244037140L, -7147306030921621952L}, + {312958362296582989L, 3898297632297745077L}, + {5071518533113132226L, 1938464859165095339L}, + {6638935098145563092L, 8586698480642519698L}, + {-2867055004276813534L, 174277963774089138L}, + {-4289503497262086936L, 1793561870758663485L}, + {1497170552728782805L, 2281434002035931012L}, + {4517675483628149735L, -4299142910986295506L}, + {3748960245079903666L, 6886847500671830300L}, + {-3691286664879128054L, 8872754919310633948L}, + {-209359184536764749L, -976043877717111761L}, + {2491341916818449085L, 7267445614416492980L}, + {5499205217633027745L, -3961171019363316611L}, + {-5512709448748519671L, 5362278415169786706L}, + {4557913818063026938L, -3160011354686081538L}, + {-2112204135968966196L, 6310834969212348187L}, + {3440403110217462895L, 7953765169956192669L}, + {-5867323792132309155L, 3117237805613135061L}, + {5420869064478055006L, -5392284491101207136L}, + {318512041709141078L, 265910602706848173L}, + {1057553941897233483L, -1301783428765645447L}, + {-6895197562631981270L, -8197304699761768758L}, + {-5782743651675563936L, 4203332157031714086L}, + {2659771847560443960L, 6759308237310585353L}, + {6592601119187496548L, -3454010220224502424L}, + {-517270229881128849L, -364112620296853890L}, + {2622604378506727519L, -1409475428244174294L}, + {-9170205866690625639L, 4114695014291468489L}, + {4806630682514823179L, 9059429146023594378L}, + {-7776613972641981358L, 3810087764460194646L}, + {-1488298548028258830L, -3810270104734245156L}, + {-1715707210842296824L, -6915036138510998600L}, + {3796221982870729299L, -3736370821310651114L}, + {-7882722580553373597L, -9000164591921300229L}, + {-1797548791879939131L, -520599612811393613L}, + {9223079908042491188L, 5543904114523917201L}, + {7847548061281742781L, 7166650075853579796L}, + {1041148225166463713L, 6331269772201105184L}, + {-2800037601895587534L, -8408921437830061596L}, + {-7832361151307182116L, -8213348400415668450L}, + {-6950576920927850414L, 9156154939542525814L}, + {-2404378656089204258L, 8395455743286852626L}, + {-7720362412660524651L, -6273166454579708948L}, + {-4901646243176144926L, 6990772751632948288L}, + {6432612866296388591L, 8548483255730797324L}, + {665821462715291984L, 3350164667765855444L}, + {5024465184664377182L, 1965564049852144627L}, + {1558901948449801231L, -6446969132709976601L}, + {2224934457550741787L, -7696287661468022291L}, + {-1486153720652331467L, -5605157687169082L}, + {2152321067003602002L, -6321249259252955228L}, + {-1858128886354189097L, 2836979244920552810L}, + {2873839996181438535L, -1072878112229444552L}, + {-243875524287970697L, -8348021835701218012L}, + {-1376873654537129986L, 5423661924194360191L}, + {3287122656145633441L, -4945767931773080995L}, + {3770833946582728674L, -6420894115027823771L}, + {-2764900700916121857L, 576336989324501846L}, + {2560091717993161785L, -9200720429015878735L}, + {5504786539926877426L, 3159208667838467515L}, + {673505854315501819L, -4598137714685779284L}, + {1264431652537758499L, -3814214474280468989L}, + {-5043418235491208409L, -8838500318471721555L}, + {-6769065002135856586L, -4166893156663053601L}, + {7666088207808456995L, -5995625777871569960L}, + {-2827685615289224220L, 6872228841331280864L}, + {-5429383711816435171L, -1797075711309876153L}, + {-3134385201210164932L, 8882919297953772994L}, + {3020879270457681824L, 5883876757118434219L}, + {-1689344584352272080L, 2437110626722923896L}, + {-9040930749904066060L, -5686175033217931543L}, + {1932280955101101310L, -7158452945023483021L}, + {-4992572509975070322L, 3605164471112944705L}, + {7546307129163923078L, 1170266758393999726L}, + {2939073542428222766L, 7243081239066082528L}, + {3374974368464231869L, 4928464298223439682L}, + {885759554366311L, 1057459879878233927L}, + {6593789636519856798L, 3419649136379989479L}, + {-1624132412418983395L, 8841047325915716177L}, + {-6031359656290740003L, -7488614225440201697L}, + {688983212618230553L, 7643942002760146514L}, + {6369052776794949918L, 5195382242098812706L}, + {-1377714920269304294L, -7175744776460667274L}, + {-1057940749189840506L, 3173893418895238573L}, + {-1655685782041312329L, 8477574094088335615L}, + {-110552080942842283L, 6888964814479005121L}, + {5250633774704933933L, -1012094598554766112L}, + {-7909648255758272745L, 750427027426622638L}, + {719735976337939580L, 5536526334688791531L}, + {3645906512854567933L, -7728442844606091261L}, + {-1860978834085668115L, -7760720380835662111L}, + {-4349804709624489457L, -5819810209764985071L}, + {7923661347327064185L, -3310448936111974933L}, + {4244126846532735429L, -3815693592766389559L}, + {-3251399312816082643L, -834497383696947436L}, + {-4937029742581158563L, 8540913837129171901L}, + {-86298941439722272L, 2057540199751740855L}, + {-8597913327563881758L, -399644259762704239L}, + {5039882027531808464L, 4551460786448379682L}, + {8056647111062079524L, 3681777671216768037L}, + {-8976752115766926062L, -1802538985705148169L}, + {-1690394607348932339L, 6687318080944374988L}, + {3378746565484573129L, -1751049606407600190L}, + {8416003090844044193L, 8135905036230225311L}, + {-2717024430934601010L, 476006231892774594L}, + {-5701892799453780386L, -7173369616685818959L}, + {1533981283496523540L, 1415291852685422332L}, + {-7462371343115417598L, 724626787697510043L}, + {7010080256761797460L, -6150362952056456046L}, + {4478373719647299143L, 5614140616738834163L}, + {6305458678328463570L, 1122352984194175602L}, + {-5102763036459098393L, -3460352410086041434L}, + {-8778795989564198209L, 1473095525081521210L}, + {-2268889645684651974L, -520070433989938017L}, + {-4555916510323499535L, 7868968266585745421L}, + {9065546065927673888L, 2823910101848922501L}, + {5852839483910534806L, 8258588543522383098L}, + {-3402482240912256878L, 5952804005743627668L}, + {2023722994972298169L, 5047124578203526567L}, + {5215407550830003324L, -7830002530699043692L}, + {1071468158469513836L, -1387799248150086883L}, + {4955237436537987038L, 6130712479065828415L}, + {-3083989516400027076L, -3440784742149283773L}, + {6722953813435001988L, 7245745558256024155L}, + {-2387850610416371552L, 182889665412283505L}, + {809463730078568982L, -3696936559309597459L}, + {-5395203458608056891L, 2087371727619347819L}, + {-6137800097014878795L, 4809155221582786735L}, + {-3605527194936796968L, -8423052822282325387L}, + {-7589842792710116365L, -1533558859642065869L}, + {8069067842420108257L, 6146489394975412119L}, + {-7454408306272078350L, -6915650351892414953L}, + {2339188701288559996L, 8366379791959321561L}, + {1008425726458324286L, 1620671620409236365L}, + {6847676052807732318L, 2526749850075238275L}, + {2271618337058209406L, -4170988020785076096L}, + {-8281033180921892670L, 2863917946175752856L}, + {3604010165737741236L, 195804067905468237L}, + {-8269928557793008073L, 7207781055493994186L}, + {-447391999287823556L, -9188774064725556020L}, + {8028984830780334836L, -444320022784399848L}, + {-3883350805508230356L, -1370082197650851272L}, + {7482610679805814070L, 6054283912748538683L}, + {6500112572029535883L, 6338212483365391701L}, + {6119648543352512696L, 3731537194623523994L}, + {6922212850686981745L, -7742260474253244859L}, + {1734731947537567857L, 4227368981582034582L}, + {4101619546129582628L, 7887200240021237190L}, + {9155049639883886519L, -1574685774619907419L}, + {5849304319215085011L, -5149097089656706460L}, + {-135976101808023055L, 7657751254514616451L}, + {3329888204068201272L, 7691678257579801957L}, + {-4336188293967075047L, -8186810994473167457L}, + {5788433959497374483L, 6005512947764583078L}, + {-1402363557578146821L, 8843112555146557492L}, + {3588707324813677961L, -5917534281938487150L}, + {6715232528053729851L, -6811917543979770904L}, + {7169368150013526008L, 7113541687945298083L}, + {-8706746826857587245L, -8859511146642304604L}, + {-4819316543846777649L, -8774395764301925696L}, + {-8782313301067526525L, -6256596613929059099L}, + {-8916832875484128383L, -3111869372017071369L}, + {-2346600299358242263L, 739981548130115109L}, + {1904681875169970567L, 1284498147074753190L}, + {-6704056743702639344L, 1025608445943185924L}, + {2270605299750783360L, -8478634978958397732L}, + {-3940808304480228961L, 3620857268219366074L}, + {-8321565943725548488L, -162850665073338121L}, + {-3825742229541937514L, 5414988189270570764L}, + {-2349339074190735472L, -2520219757190524321L}, + {-2948486946206330984L, 7132250433295718412L}, + {-747906506207273746L, 8982940781026329670L}, + {4280562720015859798L, -7158609942006274217L}, + {-4136257343808753176L, -5732481356090503243L}, + {8445283324198191059L, -7944752293528961989L}, + {-8404850409602104913L, 7482965433126677L}, + {-3264457032343850047L, -3720438713954588688L}, + {-8759790595969078254L, -3181246708414873404L}, + {-2542190711281684773L, -2502711101698706266L}, + {-8843544063303913454L, -7592618515347100726L}, + {-4003746482399952206L, 3328250037536419347L}, + {3841695822551400168L, -219582959475083627L}, + {-3588090911679720182L, -3174750020272651302L}, + {4918585626351510199L, 7130806503895849634L}, + {9222791837897484065L, 4011402744232032199L}, + {-5760984091213555378L, -6810121545918367515L}, + {2491736142884395009L, -2597704284285157495L}, + {9176699063949977552L, 8988486530696185155L}, + {-311336022868801049L, 800635164334809333L}, + {6098071943696363607L, -6466386586993453102L}, + {3781539988474542156L, 6252107264141468479L}, + {-5991444272878304549L, 5960563247743610665L}, + {-7058079929087833240L, 1774151115106864258L}, + {3692880174470651745L, 3254087094804079517L}, + {8043184184871662514L, 4334626677240459902L}, + {-2260533056334755470L, 5492216609821364730L}, + {7862870576355526775L, -2002206651704242317L}, + {-1273628657555198089L, 4500092611531376016L}, + {-7116245059732632210L, -4469253241056826606L}, + {-6206223953545513505L, -1137760425047663752L}, + {8769478588548603347L, -132736367177684309L}, + {-6809293819712164844L, 6559633909609042117L}, + {-7072037946451047577L, -2043337765421332833L}, + {5145959967698376997L, -5556603267559213848L}, + {3918549975422395928L, -3150639278327240429L}, + {-3688153306502628396L, -7435067995008483219L}, + {8933640809529662946L, -7636525704905354617L}, + {6586386948093068301L, -2183803246532017685L}, + {4314174515802583045L, 6291721688596346087L}, + {6042832017761248999L, -3695077737345263355L}, + {-2163096650317259801L, 2990268501997122182L}, + {-1301538385158714097L, -1533372430915700352L}, + {9157628132063555931L, -7093418936861363878L}, + {8447192224483369575L, 7631934447862654472L}, + {1082300847283178879L, -7618647624807771192L}, + {-8765613093828266962L, -4115536092713542768L}, + {6523561351628630699L, -7625252301278642487L}, + {7878456944142132573L, 706194176774617761L}, + {-5878800239136723413L, -1813927820728650739L}, + {-899016955838748566L, 1966176815632465191L}, + {-968680680108344572L, 6575369511440091617L}, + {8149351788840205925L, 2279025097486125117L}, + {7767149159758237380L, -2644414571334647023L}, + {-1002433668001324671L, 8943147725619352276L}, + {861378480610089679L, -4062600348246113369L}, + {5131370442347562734L, 3950723299875471224L}, + {5891997968737511949L, -7520213123221654021L}, + {-1134130780427583438L, 3132292634573307295L}, + {-2721284507442384384L, 7291597149098083522L}, + {3581758406053663578L, 8835208245303410746L}, + {4711959109881063237L, -3216119409741833809L}, + {3814833207703197149L, 2734095307747491414L}, + {-5498755072540800142L, -6403288850279922865L}, + {-434194050930099095L, 4870237253884783459L}, + {-1131324138179189444L, -8321037353987256979L}, + {6335673834129040499L, 1542550554552373587L}, + {3840591353873435091L, 1003968243768320782L}, + {6691477876637098998L, 3119531155265220843L}, + {5389042814799436488L, 3464320519030129292L}, + {8492537662085986759L, 4231665252183762049L}, + {9801065220990358L, -4142253103916332351L}, + {-8991404774454959964L, 9117831577731702999L}, + {-5967334022174632862L, -8234653634853813963L}, + {8423499844379835696L, -2296526801518540032L}, + {-1121320485100692308L, -2310012019292148394L}, + {-1137347326607533713L, -5910223239112105014L}, + {3579131621253541604L, -7873288377384430404L}, + {-949637496239973913L, 8992721473934662726L}, + {-845717236495377944L, 1709210005757310121L}, + {2627652869211543871L, 6229651575357526528L}, + {-3584273871358543803L, 3485383832684950691L}, + {-1231456733798526473L, -3693492293114660562L}, + {6404279318428525466L, -2820264389343755942L}, + {-1959366387574498651L, -1999053094523153109L}, + {8659995475649499110L, -4063188751398928642L}, + {5687743493891209750L, 1819832997765820620L}, + {5734157541830063944L, -1508187435145329543L}, + {3807145789061111632L, -1163040392176574106L}, + {-8728883033962465130L, -2019265592238841800L}, + {1886310705344218044L, -2186164004798954561L}, + {-2869995344352648369L, 608788407759231159L}, + {8631433038774110827L, -8954043830652495539L}, + {-5196628823587587974L, -2249354261523167857L}, + {-7457206590006693637L, 4392495756732760488L}, + {-5287470411743602489L, -4602133066126451655L}, + {-4100864542827687276L, 8617323110060809504L}, + {-6925193246164904686L, 320293241076880811L}, + {684773938147799771L, 6262050439533780321L}, + {4684480184200832071L, -8091186757996198319L}, + {1138521418475557396L, 7915368755744488159L}, + {-1024452235617887100L, -3320296128152795536L}, + {370178077665262107L, -9162241114040089547L}, + {-2580904250658458088L, -281987854585455375L}, + {-4067270455265760110L, 3697740925622419951L}, + {7883457924958258236L, 3225018098591163689L}, + {2745236661071909096L, 8184485281086465192L}, + {-6638753008619557401L, -8598931368792692359L}, + {-1928563245103591922L, 4655096611975500707L}, + {-5391677730310963265L, -1065175718193252042L}, + {-3443398620200795730L, 3828176865585432313L}, + {-8921877650888014333L, 107866992902620257L}, + {-2549654053467481876L, -5050580673000189621L}, + {-6634007310328959288L, -876193222819744972L}, + {6662969652277689957L, -6841284783697750392L}, + {5704789109069509625L, -2476715163962031661L}, + {-1307333292330657763L, -5491692411965571232L}, + {6533595699848914839L, -4499350589304206086L}, + {2206229619406776067L, -2351165617492036434L}, + {-7059181012292774208L, -9115366817762017529L}, + {8587013829275411963L, 4388678051800734512L}, + {-3759394797281060169L, -7053509092813615390L}, + {-8332558387862436192L, -6896020076406818425L}, + {4058454963111191922L, -5286761064255899376L}, + {-2909318126609562718L, -6911874830505973438L}, + {8309425769040304384L, 7849379961650314497L}, + {-3332518656544710523L, -1692848726219162872L}, + {-53840526904216763L, 2255977371922379760L}, + {-4392299612463469408L, 1581073356587586804L}, + {-6495163012164872108L, 2231393466511510482L}, + {8283822043324591205L, 7499731676314211199L}, + {-3839429045227492113L, 7510349338395860967L}, + {-4554258591908844950L, -7317144759563080195L}, + {-8717791527048532273L, 4978792217011582827L}, + {-6680294812840082731L, 9152312282907380651L}, + {-1514076315369906827L, 3598370015785027284L}, + {8342331288999106348L, -7203007516130555934L}, + {4467472370913596089L, 6812568540862734900L}, + {-5258687569970231267L, -355677718169180333L}, + {6428083210523097473L, -5287418510282857745L}, + {2293947403016663486L, -5220278527068998730L}, + {-5526361602248141114L, 7996660119707051676L}, + {-7270937093961275072L, 5711622628080961541L}, + {-7226206738482320242L, 8598438917671031500L}, + {-267988759137059367L, 5431685311506687936L}, + {3757842653020528703L, -3297692481111911080L}, + {-654142607214292501L, -2962827219142864971L}, + {-3877320323095024097L, 8842445126378196396L}, + {-210352008325460011L, 5116823845142598386L}, + {-3777353653906366683L, -601473431267226149L}, + {4104559760354145145L, 4701224169495508799L}, + {6351620637332827086L, 3205977800898050414L}, + {-3953047538968937343L, 6276768727993298797L}, + {1977509989365985520L, 6409342957977133586L}, + {-6096612777648073834L, 6707983202497286472L}, + {3655449697279862217L, -2885904157317690348L}, + {6371929595416244955L, -6982319672407259043L}, + {-6719663260573101322L, 6074544765480824486L}, + {8235058461435871026L, 7218535018958732569L}, + {8223610568265677874L, 5036593928131829216L}, + {-636776168225445543L, 7126947243644292165L}, + {-5658531495972000806L, 5976061545413357422L}, + {-1315157075774308702L, -3587640206384793862L}, + {3318184564168373738L, 3667606843527529680L}, + {-3870791042207323999L, -749752759518101873L}, + {-5761074459524531162L, -3904416599422058280L}, + {-7589695080417675674L, 1298670570171716776L}, + {-118243652515378968L, -4089007496976104453L}, + {-5606050504941145854L, 3363647473385925878L}, + {-1682232575263053834L, 4346070814778364812L}, + {2064607730151462051L, -742205065568789939L}, + {3860046528687723210L, 5639663483838395500L}, + {-6935238833286905572L, -619950249601147230L}, + {-1526898475961616862L, 8069505502923900297L}, + {-7786760789279579722L, 1492861118173755697L}, + {6367271805286224450L, -7496769528088253126L}, + {-4333115896551664911L, -821727603931953051L}, + {-1229178972379399952L, 8730035857323100178L}, + {-5406430689127328314L, 4231658348135315593L}, + {-8536830855104540258L, -6071104864716272619L}, + {4592858633504932985L, -3006733148669100477L}, + {-4661004590562426651L, 4357632356262471192L}, + {1900079872513330236L, 4716191579745290515L}, + {803518532278716272L, 3567557066091193813L}, + {-7227731911919645710L, 2095640250881819683L}, + {-1531800249475624901L, 6537531379212203782L}, + {-5068571120099635260L, 9060033697476709270L}, + {6954901733800148115L, -1674928158449299724L}, + {-7075071323703859828L, -79790012159247464L}, + {1447978964456769515L, -3214394401554340995L}, + {860006115119071319L, 667210893626893467L}, + {-2067420548322589555L, -3021927277418583328L}, + {4638996254844315967L, 8154077006989858919L}, + {6983236581726963935L, -3528830910837705182L}, + {6708882819304554132L, -5694112128251960949L}, + {-1077037295677468865L, -3503242918302157372L}, + {3623478619549261514L, 6180056827434419475L}, + {-8551083693862102837L, 8556339763668418694L}, + {-6864926796047150583L, 5028306725838573487L}, + {-5583309839740166644L, 9027564656608576889L}, + {-2047952294766573645L, -3095287403842609759L}, + {-1296070923862863512L, 6790190055329304693L}, + {3533321735634917235L, -9033799480884432612L}, + {-1137358684259757076L, -6356732617214670827L}, + {-8080333153054443456L, 3334370468254151878L}, + {-6770927466908143968L, -570402506200030937L}, + {1677314511582577698L, 1342654560043637898L}, + {-2630259631962080464L, 7385442738096893062L}, + {-1793645900673563419L, -1723552778901560418L}, + {3600237620008462975L, -1202654027148639997L}, + {2180027379579890660L, 5542738931909800056L}, + {-9043677058766520350L, -3326672003520699872L}, + {3962397017521642626L, 7663197079112974029L}, + {3977072778934081031L, 1443754962703183004L}, + {9036155278583684186L, -511483942672047429L}, + {4719201700299004978L, 3372713474180665433L}, + {195773270223425425L, 4606867324868612441L}, + {-3391740091956199499L, 6977786383238923035L}, + {-4297719063714682956L, -5205502438632599866L}, + {2518769717461479967L, -2278000373378640850L}, + {5163274893178164221L, 7720801366773322067L}, + {-7935837524015792569L, 7113479099627093520L}, + {3725316512735597929L, 3063198825928438389L}, + {-6062355987398187561L, 196981839523103554L}, + {5072788521812186052L, 2181699064151082790L}, + {4756745374124465344L, 7250108599025853073L}, + {-6691048140593722302L, 4415088046869436277L}, + {-4453427560142816958L, -2106924769861351639L}, + {-8908616043104241784L, -1019376309451773039L}, + {4680671232907313257L, -2174697625835016191L}, + {-6131724261229112714L, 7856591897252847779L}, + {-9108450687466015537L, -5507621728320366418L}, + {6365495657268753375L, 5450431121738155020L}, + {6448165814018765014L, -5612695438889065911L}, + {7071162731007451983L, 5392474098323048148L}, + {6828906714271770482L, 1502254970953831345L}, + {-3559294295246311028L, 7553612275548812830L}, + {124771238363526084L, -4798796425975932412L}, + {-3293309753712400861L, 3954573374209069808L}, + {8896706306255876093L, 4253298990076074483L}, + {3125408161217615213L, 3803700255679029945L}, + {-5861463414798312654L, -4098195255457814724L}, + {-9036260382640522754L, 6369652912950273493L}, + {-2941595857477708459L, -9113821633105909829L}, + {6033142563060557598L, -9020580934062204557L}, + {1099630200403990563L, 696624502470685602L}, + {7959429886791854178L, 8452651730508924913L}, + {1535421567087429521L, 4681006148666640475L}, + {-3523681894692531197L, -7132650741735849542L}, + {-3906144409472427412L, -6072298972533296356L}, + {6483996772781688720L, -7756906715255122537L}, + {4132319255708563987L, -7604430518775079159L}, + {8769726356542128993L, 4800289188839276316L}, + {6738613111825331757L, 7396330301554136907L}, + {1764580723100293334L, -5184137923839863797L}, + {3299019025645495247L, -8319517036261810990L}, + {2239605653730261397L, 154189014771898002L}, + {-6200467116936956633L, -6568202627332369288L}, + {-6291344345384672622L, 5354839767793808953L}, + {2565928296401167337L, 3115419636555194066L}, + {5329865919971566807L, 1719896645598205708L}, + {-8575034623756510146L, -3669000039462402717L}, + {6368322753797090715L, 3689449136956819472L}, + {-7493350249074734851L, -5214369489577428826L}, + {-1948050475401750220L, 884718130935295239L}, + {-2542388860306602080L, 999643815495444354L}, + {3132812952361473979L, 7117955964821677830L}, + {8662503282931471374L, -949428191468665471L}, + {-7226118518078524751L, -8133317924985805656L}, + {125513287940370920L, 1139709294781544858L}, + {-7105850358401444205L, 9011130779774299758L}, + {2873891704788790693L, -3345408941392632050L}, + {375644362554273808L, -3940052809605950557L}, + {8779595029680158187L, -2090878506281834613L}, + {6520575959918535178L, -3685955938622260911L}, + {6481335563279395683L, -6651860608291596670L}, + {-3958324538875210597L, 687933001376263703L}, + {2650332007800900579L, -3820496251684255429L}, + {67216421894692841L, -6273923576662698622L}, + {2892388889322576563L, 4142472054827014174L}, + {447031742152452522L, -5750532076318905239L}, + {2214867384342611779L, 1438016221944253759L}, + {3463418430384064877L, 7933064097770090377L}, + {-6736581145771083272L, -6636037761993868041L}, + {-3097757825887262572L, -3464203236850017330L}, + {-742646863032103227L, 8549751377962719435L}, + {-675900178715113798L, -3914104413182363973L}, + {-2232567950500061233L, 7621988165391726384L}, + {1712025609374863027L, -1123006467158500535L}, + {-3405265351896222950L, 1430535721297212626L}, + {-7357424915587192954L, 3465717092902363839L}, + {5899042778652661141L, 4222684223013113017L}, + {-7187291342974761805L, 3957487962438616817L}, + {3480937052474976673L, -6188589281798830120L}, + {997099418044934990L, -1527963556835294545L}, + {-2839517833272115276L, 8330879031487323662L}, + {8199436817352462608L, 6909954963993252775L}, + {9072737280134851879L, 5188978806423418359L}, + {839795799971829718L, -2860958804774185917L}, + {458252816075262707L, 894349972574391694L}, + {3252541827624060629L, 8522714392424847611L}, + {-5029727353658396637L, -5729345024622710002L}, + {-4967837872862091654L, 2804097617713186103L}, + {2146776628928215216L, 7992918702582258237L}, + {5403743629243841306L, 9019714016234030597L}, + {3306799506878402965L, -2944777525613883043L}, + {4468336141473957274L, 7689803402328019980L}, + {7023113564987990226L, -5353349038722192959L}, + {2871980174971968592L, 7052062369586092648L}, + {-6665846774723588486L, -7779984816814418003L}, + {-8521313230784523850L, -7075872948858809038L}, + {-2899150205599417383L, 3674168194855920925L}, + {1992195265166010323L, 6718020075048606525L}, + {3610880564010872990L, -8099380986026829265L}, + {-8962461672227066573L, -2708938433802853784L}, + {8499793696703179099L, -117949552342789801L}, + {-5174175353166984262L, 4853488592908239062L}, + {3773412144378555582L, -700152485305099197L}, + {-5377488598550438958L, -2221586125998783654L}, + {-227481030440141534L, 3571021169253497167L}, + {-3003034596327281460L, 6483608774262579967L}, + {-6010571883582226691L, -5383121100451058218L}, + {5285640267764709652L, -6202879186354479067L}, + {-9094570939029139554L, 1417266974034045473L}, + {3302183665375964446L, -5089891447239173791L}, + {8185803481915750000L, 5860584065404731072L}, + {-7832879598569001202L, -8462546539915269894L}, + {9185495476894972675L, -1418057708833821013L}, + {9021601549322560342L, 741355604462128395L}, + {-1033483127041468323L, -1998905022320810358L}, + {-9094719449194039442L, -1626212808185905243L}, + {-4246271926877732985L, 4840812948897464736L}, + {5329679602094503622L, 8649093324893765849L}, + {-3123609535190446287L, -361284439372155099L}, + {4714766142804686442L, -8136402947598538231L}, + {2489307805887894890L, -2356444220664306215L}, + {2987790131896782326L, -8086179668000672928L}, + {-2963677483725852236L, -2516942748088288718L}, + {-8529934738168520503L, -3210310985686262182L}, + {-6356353435089583010L, 3516503088278819063L}, + {3208586395891790363L, 4298931398837050951L}, + {-4407123126725047459L, -7765163037766468949L}, + {8157441934654253916L, 2843614390491890044L}, + {-6109838368688820127L, -2368186650405422497L}, + {-4389983853453341623L, -5397592659600112949L}, + {7652314184807664343L, -1427196053527089690L}, + {-4662723430367132038L, 120770956848949739L}, + {8667093623786488993L, 3070768203499473269L}, + {-3415543420133275181L, 6085467894486731971L}, + {4904278838452314694L, 6548926713722044422L}, + {-4354230232880600982L, -3272993024095048366L}, + {8861799057857753L, -6094996369966286538L}, + {3552811093870745879L, 8612973539161157048L}, + {8634119875383707854L, 1907947534981169433L}, + {-2732631755040740128L, 5182756388090293429L}, + {6518885727185543342L, 3116634721078149894L}, + {4341137614328678730L, -5388034631040110769L}, + {6793266319858946131L, -5418120590775304922L}, + {8047455342123276414L, -3727261839997080006L}, + {-866422210016420449L, -8852169901685222689L}, + {-2975253122827530056L, 5453714651394251460L}, + {-4030176003307022576L, 4842581852636998099L}, + {-4241696461887318612L, -3800892415646682874L}, + {-4753266504739240553L, 1412187783702418413L}, + {-7373316743164657129L, 642636635356175384L}, + {6048513984860600758L, 5869299884640974771L}, + {1814258330875604106L, -2878806132566885503L}, + {9109940689954894985L, -8812562607906103198L}, + {1579558970146774347L, -4017510485008247124L}, + {668478211668974619L, 6320024829637634074L}, + {8409518560944185002L, 3353220582345848116L}, + {7245729396754890299L, 5588396973718419901L}, + {-5114268398654367847L, -5944423628815401655L}, + {2956616124692577442L, -290106912204558888L}, + {4461886846778383058L, 2277783397013987244L}, + {959690196566065732L, -8814538937186889982L}, + {-7235204044940286838L, -8189358422666028931L}, + {7981158344195854661L, 4867006782544055533L}, + {1833698125790755138L, 6523032353281179181L}, + {7752754976810456477L, -7282290980488591008L}, + {5692118834710835902L, 8632235045305762587L}, + {-3793683786453929372L, 2693475423544308135L}, + {-5581772364636870855L, 3928278557991189836L}, + {-7470774962401733293L, -8446516023329576894L}, + {8780664591724430174L, 4286197667128074328L}, + {-7663125741516067028L, 1559881424666449109L}, + {5829471574991825780L, -1699504516976991348L}, + {1182333455500273019L, 5353082458342633232L}, + {-1726270951016459467L, -3454492226798936731L}, + {-2746428321520070969L, 3021238741736368676L}, + {6832833992125314751L, -8702581179293653579L}, + {-3990613509805030555L, 8667205036761326617L}, + {2400486545587757625L, -3000524943838505376L}, + {-6598170744898189777L, 2759511703193262743L}, + {-1995198747364774857L, 9008233307559279188L}, + {-3645842663215618557L, -7385147240487509438L}, + {-6553956802949933979L, 6965354958414743421L}, + {363585666263112429L, -4882210177421749025L}, + {-5656547416142849554L, -4050177253764422541L}, + {131159332135711557L, 5133143837072648253L}, + {4242991056913343886L, -6686962481360868108L}, + {-4674809189780845966L, -3250341762564229866L}, + {-1954374021725723642L, 1323620250067427930L}, + {9000512499144627986L, 5548743979937884843L}, + {-4966087500556332423L, 1629058188872823733L}, + {-5368443575882114199L, -1654000784989387712L}, + {7898708771797640436L, 2086542013295426142L}, + {4954393344642394763L, -6263444864756732931L}, + {-228876611915096824L, -4537215972588867693L}, + {-3517612841169834059L, -2765341318717509735L}, + {-3181203061349135348L, -508056924812247324L}, + {-7887316482076885972L, 3685431341741839088L}, + {-7491168484443218074L, -315834147890523005L}, + {1505841500971991620L, 2429709964985541076L}, + {-4819676400227780409L, 1773949406412424848L}, + {-5600600902750799703L, -1641786959599535542L}, + {4287196606575127498L, -478264408105952247L}, + {-6631038754487834066L, -6917616052826791264L}, + {-8562057237102997949L, 363106954233931060L}, + {-3310437032247565299L, -1481298033384594105L}, + {5856634576804593925L, 4789755933237089305L}, + {-1659423729330836678L, 8494320904037636560L}, + {-2785469434848827216L, 7947848915676623091L}, + {-9178954688981005208L, -6785118745114422741L}, + {8284532255782100018L, -9084098449354029433L}, + {3932114027983614574L, -6289978089305485110L}, + {-8735736194352900940L, 1405162867455330917L}, + {-5947824514040167701L, 2919798360124166543L}, + {1555054962173652536L, -1367989015884168404L}, + {-1028318040091115332L, -8568997691227678605L}, + {4142937213480146786L, -2370901494422112752L}, + {-2819444980269809917L, -1308444741477082853L}, + {-2903074845803234197L, -4366808985359220640L}, + {3718049583878739327L, 4354690312963727033L}, + {-5493173480792612991L, 2989222282329614806L}, + {-4746130552040956231L, 4496455761262808903L}, + {6244568873371787043L, -7185280716865151881L}, + {-2997679871934966832L, -7309017646763845518L}, + {4047215048138865730L, 6980804018930957198L}, + {-6551789563963923059L, 2916207770637549836L}, + {9086055720517286271L, -2714494659452767480L}, + {8876034907713774156L, -3821387241491356709L}, + {3680389259422527058L, 2196589891375455610L}, + {6042866802807055050L, 4754255664635533276L}, + {-4886080504692397375L, 1725619517599492655L}, + {-7166197738900036643L, -7243540186236866594L}, + {-727151388570173900L, -1634001379810212424L}, + {2438604478622089045L, -5055210733955393661L}, + {-8782162061024071951L, -5174793973752794725L}, + {9077567357215978574L, 708556034239591714L}, + {-2871872737471270227L, -4708678750825119057L}, + {5320002012835335589L, -3526176864908362243L}, + {5539849377632910446L, 2462221416305069443L}, + {7555126502803598608L, -6755206762366162750L}, + {-8125224475094342490L, -8964598482310477564L}, + {7417955058148509629L, -4872283382423985221L}, + {4176877628224197597L, 2859364539165637414L}, + {7598278370710374380L, -5131602648378407232L}, + {2265897989342130546L, 5814327006378924467L}, + {-7061482734014550086L, 9021575515219812736L}, + {1468468196263413305L, -2354059920935567217L}, + {68682113048681479L, 8070600121219547337L}, + {3762225435622216659L, 7301822979322435545L}, + {4581877841476416419L, 150382900142393599L}, + {5115735211430226046L, -4547351323713652974L}, + {-397731465197117692L, -4450390472569952747L}, + {3802999106815691779L, -8622666519332587528L}, + {7574760794857420046L, -7880900128621810138L}, + {4178197313545546553L, 8601353854513781244L}, + {9065628242529864979L, -5591534616375481129L}, + {542937206029962193L, -5953723718608560239L}, + {1542373631583440917L, -4196619194839329674L}, + {6903559734881147673L, -4316576911841534837L}, + {-2071796881281526902L, -2370970960555427167L}, + {3779795498327194080L, -4298546406843841164L}, + {-2217268270456792594L, -7501440969788317177L}, + {-8059036377920200513L, 259328063542822684L}, + {5425988266816609684L, 4575515416863828865L}, + {3561830549061618056L, -4771952364404768277L}, + {-7500972620191462258L, 71975804172456571L}, + {-6776359714207180134L, 6900148804315605370L}, + {-5775998075012891173L, 5004232704182523237L}, + {-7755164007855727652L, -8433929914715590664L}, + {-4908348827451399810L, -3301072556359365892L}, + {-1162366502935483389L, 7384541007136416566L}, + {-3581470604892760162L, 1976805054171796726L}, + {-1434370488502028008L, -2547401488641472132L}, + {-1493293905909468959L, -7441839474594455138L}, + {-6762524287730181241L, -1601622492184803904L}, + {1393564479464918401L, -3009814218133425849L}, + {6717807842217858780L, 8165340015547077095L}, + {-2269779449488763938L, 7927691835893341197L}, + {9119207083214966580L, -6786708504775243266L}, + {4437289221718108033L, -8954685188941013035L}, + {1991815488616873724L, -8103624658829230585L}, + {-1136008736729825773L, 5916992738852984881L}, + {6919259317959590395L, 8169647393497828250L}, + {5700567409540575886L, 3944594914853142763L}, + {-6511943523783520343L, 3357295622932201334L}, + {8471138532439345892L, -5702753540740804811L}, + {-1261020616469785625L, -5601367572994175866L}, + {-871122257839774394L, -6976984597391717235L}, + {5853266956701599170L, 2179435702096663547L}, + {-2605324811026081L, -7735967841074233262L}, + {5645723143070327343L, -5300356287831138464L}, + {6678903618140079830L, 558130329295762466L}, + {-8243425527465830189L, -2753667594936483651L}, + {-7366977412613262267L, 5174687824180692399L}, + {5554112623362949635L, -5127585768737053004L}, + {8508696414094887570L, -1823867105900064766L}, + {4526724121376344377L, -3708548295144862203L}, + {-3066464409160921518L, 8089012003806475311L}, + {6423971479710566480L, -7039855685147014402L}, + {-1301150937530073813L, -5585328718840536037L}, + {7047171805158365362L, 8120759358342535720L}, + {6607488204808324896L, 3901947263714529520L}, + {2550589198730302889L, -1984225587532390244L}, + {-1508652597994003459L, -2625033096378578368L}, + {-8797285250854566260L, -8253763814000785373L}, + {4531577529333440300L, -4130829189401243467L}, + {7171511780196023810L, 7669326050720755710L}, + {-8696995432677729109L, -4993075107798409464L}, + {-1038277725665095082L, 7849644114484248935L}, + {-4030021971399704454L, 1256768363928500996L}, + {-7142316504058264789L, 1252978987744068438L}, + {-8690342808784496917L, -6354446673649917336L}, + {-3538025267466743323L, -7107557983957120854L}, + {3030344740150338756L, -6398796188997538104L}, + {-5434476681454308336L, -7496500108057908992L}, + {4747881963413479619L, 4331614803740895864L}, + {6649081146297801785L, -7539581662252191545L}, + {-1340297105335493395L, 607361016476543345L}, + {-2345199575979290182L, 3757829078804583621L}, + {-5142497021023029281L, -7853754814637441930L}, + {6590959395881104212L, 6033816056225283084L}, + {-669027690510749039L, -5598511059038889050L}, + {4713909714515252237L, 8498930096032167029L}, + {6334133652957330690L, 2179067576579471054L}, + {-4130611448171970254L, 528954176811746781L}, + {-8777249173946876665L, 6460005588985419673L}, + {-3777422122544011758L, 2949786550955297825L}, + {-4139822748883105829L, -7060522727358656049L}, + {-85322879655457932L, 8186136004732221397L}, + {8510613507788926362L, 5121599937034700924L}, + {8480533752847008903L, -2597744666135972005L}, + {-1501849715563565256L, 59714163236198638L}, + {7144010316023561074L, -68619869987424240L}, + {7071721153639906878L, 4787691242484650034L}, + {-2413842258996393407L, -102302437317144586L}, + {3829076351340781609L, -2319803825930028643L}, + {3904259427140354464L, 8797809088167232571L}, + {-2423161203681766273L, -470372639707402796L}, + {-9222948412120414441L, 2461249821658147313L}, + {2232806743868046887L, -2392759272414380666L}, + {3459293971647694135L, 4210665238486533367L}, + {-4958044470517187570L, 2672187701402147373L}, + {2702008978364322255L, 5638626575506030561L}, + {-5230685167113972622L, -7617392617133523896L}, + {-4777581725252095139L, -5140368461179091836L}, + {-178566492057125337L, -6847413203152532992L}, + {5473668624447677467L, 183117619671776212L}, + {-6025569476816496835L, 6468191562561708163L}, + {-1758476046405271590L, 1659198619774233309L}, + {4318010125119483290L, -4823834649924404602L}, + {-5001898604592523465L, 8911108370391112613L}, + {4496672693040208250L, -2259208634242191704L}, + {-6249539806063036132L, -733362499880552249L}, + {-7752211883834007080L, 3335016862478247633L}, + {5401928633460905475L, -1235856076215536659L}, + {-7924780124408034823L, 7205431551907269451L}, + {-5852842870036885474L, -2844635853105127428L}, + {-1507586788733048669L, 4335468969213182987L}, + {8723145826212343490L, 8281666246893648997L}, + {6322146995759068109L, 7484504729026216551L}, + {7033327335320195047L, 7165769114010786735L}, + {2731703606190537636L, -9199202980814290025L}, + {-5700197206770306283L, 7961233189193040547L}, + {-7681929128588407075L, -1127459956109423435L}, + {4915318349456884393L, -3186450213454571240L}, + {-4365674444257230772L, 6196235634481915881L}, + {-618412543643891621L, 1212876310516573701L}, + {5389658231644689771L, -4706000143957565510L}, + {-3464092788986188235L, -2872909288794957622L}, + {-1050158483149088836L, 4121143610298397281L}, + {2986789282075383014L, -8242619029520357911L}, + {-7095920626607872836L, 9003605662221032036L}, + {5041839261426701960L, -3912891411490985358L}, + {-9180003565648806832L, 7225541720051129724L}, + {-4136797423318912582L, -7424404802325061838L}, + {-815263725971673785L, 8781179913689849178L}, + {7751482036034122791L, 5628918479571946112L}, + {-6582902412740766080L, 584288259370869254L}, + {4948480397753687589L, 4278919042846414482L}, }; } diff --git a/src/test/java/net/openhft/hashing/XXH3Test.java b/src/test/java/net/openhft/hashing/XXH3Test.java index 8c9b181..a1196fc 100644 --- a/src/test/java/net/openhft/hashing/XXH3Test.java +++ b/src/test/java/net/openhft/hashing/XXH3Test.java @@ -23,15 +23,13 @@ import java.util.ArrayList; import java.util.Collection; -import static org.junit.Assert.assertEquals; - @RunWith(Parameterized.class) public class XXH3Test { @Parameterized.Parameters public static Collection data() { final int maxLen = Math.min(XXH3Test_HASHES.HASHES_OF_LOOPING_BYTES_WITHOUT_SEED.length, - XXH3Test_HASHES.HASHES_OF_LOOPING_BYTES_WITH_SEED_42.length); + XXH3Test_HASHES.HASHES_OF_LOOPING_BYTES_WITH_SEED_42.length); ArrayList data = new ArrayList(); for (int len = 0; len < maxLen; len++) { data.add(new Object[]{len}); @@ -60,4140 +58,4141 @@ public void test(LongHashFunction h, long[] hashesOfLoopingBytes) { LongHashFunctionTest.test(h, data, hashesOfLoopingBytes[len]); } } + /** * Test data is output of the following program with xxh3 implementation * from https://github.com/Cyan4973/xxHash - -#include "xxhash.c" -#include -#include -int main() -{ - const int N = 2048 + 1; // 2 full blocks - char* src = (char*) malloc(N); - for (int i = 0; i < N; i++) { - src[i] = (char) i; - } - - printf("class XXH3Test_HASHES {\n"); - printf(" public static final long[] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = {\n"); - for (int i = 0; i <= N; i++) { - printf(" %lldL,\n", (long long) XXH3_64bits(src, i)); - } - printf(" };\n"); - - printf(" public static final long[] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = {\n"); - for (int i = 0; i <= N; i++) { - printf(" %lldL,\n", (long long) XXH3_64bits_withSeed(src, i, 42)); - } - printf(" };\n"); - printf("}\n"); -} + *

+ * #include "xxhash.c" + * #include + * #include + * int main() + * { + * const int N = 2048 + 1; // 2 full blocks + * char* src = (char*) malloc(N); + * for (int i = 0; i < N; i++) { + * src[i] = (char) i; + * } + *

+ * printf("class XXH3Test_HASHES {\n"); + * printf(" public static final long[] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = {\n"); + * for (int i = 0; i <= N; i++) { + * printf(" %lldL,\n", (long long) XXH3_64bits(src, i)); + * } + * printf(" };\n"); + *

+ * printf(" public static final long[] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = {\n"); + * for (int i = 0; i <= N; i++) { + * printf(" %lldL,\n", (long long) XXH3_64bits_withSeed(src, i, 42)); + * } + * printf(" };\n"); + * printf("}\n"); + * } */ class XXH3Test_HASHES { public static final long[] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = { - 3244421341483603138L, - -4302098779834749733L, - -2998166160713018281L, - 6864218090047839419L, - 6979084321315492338L, - -5731546056562700354L, - -6460328875922888956L, - 923809989133364073L, - 4187271766389786872L, - -1629980255024596516L, - -6095164084758671497L, - 2086176710598203789L, - 6543284205211650379L, - -5213522776729965383L, - 5545158833176453687L, - 6191585008302141506L, - -8983023575487778597L, - -6993173599622040792L, - -679721864292929835L, - 6982591615625134866L, - 2917394212576059053L, - -6639923505334063205L, - -2362153139612899683L, - 4776590923197089330L, - -1506670496010913414L, - -2647877581130602390L, - -3024194937172852654L, - -6786232254807398843L, - 29867523197922776L, - -4755612273762186448L, - 7027486771791057426L, - 5707990981978323197L, - 3829001002278603781L, - -1833995589090992552L, - -2859822223207566521L, - -822061951152501107L, - 6172313773566651166L, - 3002688263104272481L, - 2442729726468942826L, - 838920225343106725L, - -3625228911788322244L, - -3085758516746786139L, - -8838726273629984649L, - 147628805604629229L, - -8609901492927370359L, - 2523698187551014389L, - 6168573373090741088L, - -1129058501854041166L, - 6287935907341083849L, - 7111303459234964792L, - 2178159668141251214L, - 3355500812482858732L, - 7998592630692471773L, - -3657590562873574961L, - -6707964006400412490L, - 5984672195388902266L, - -4866191761727097338L, - -3867761180105420740L, - 5010507633288345206L, - -6360606695257557456L, - 891304432194930768L, - 891409307892263904L, - -4666213895286452910L, - -6150244752716240152L, - 7027844749552840021L, - 7577525643630617296L, - -2909908046638187264L, - 1269898915928975170L, - -1296685705337969741L, - 6880380907958913107L, - -5157697080261523794L, - -2384830554205610823L, - 7117698599495882683L, - 8436634904183317409L, - -8685705461888375606L, - -2099116977851507310L, - 7784639995868301609L, - 620173983152449558L, - 7875300522364621790L, - -8571663595578279581L, - -6074103631611676465L, - 4991809556790719000L, - 7182703058112323703L, - 6700847687881865453L, - 2471686449789799931L, - 5615843466129961201L, - 108638713672822205L, - 3583360813653880832L, - 4747956906537059928L, - 5998273219519720430L, - -8227785307205256168L, - -7813674951517583442L, - -6588167816065898573L, - -6862603585040654361L, - 5081695234398607736L, - 1329474798079286264L, - 2849157965221752315L, - -1791866940674927372L, - 4332646258279960296L, - 4180229147886927001L, - 22042537110060316L, - -2696513067094881964L, - 4479930798836342597L, - 7717940613376663979L, - 6494116526350833911L, - -197304122858742249L, - -4396092174831810083L, - 289832483284799872L, - -1407793616753546142L, - 8107749310172792421L, - -634728965402563086L, - -5703942985817925313L, - 1530829577509875692L, - 725468970373613536L, - -8861952843133984162L, - 2677458900969433422L, - 3204987178703259401L, - -5308372023803773091L, - -4001659458034098463L, - -4307920379982142578L, - -7679947731286800682L, - 893843933290517983L, - 4059405294108459720L, - 1831062127804751133L, - -2762239301578822450L, - 6439416643289274311L, - 7794216615102176353L, - 1300299527667998511L, - -8807326403944725397L, - -1407864491810865574L, - 5562548832393267847L, - -1909668463603883104L, - -3001908439859224423L, - -8229811775093055754L, - -2185505997709248158L, - 8747474804119761845L, - 3375976894941005122L, - -8687541524345519584L, - 7475418969225723061L, - 1090519453973870407L, - -8039787237657230770L, - 1464043301476531850L, - 4392840094176543368L, - -9069431037609626595L, - 184117852034042369L, - 3048613549567428513L, - 8360545369892314479L, - 4218067793502522363L, - -1984361661054820977L, - 3359102789277797744L, - 7846237042486223698L, - 8441054814755521322L, - -6067811722142115057L, - -7157356563671886865L, - -2021770978571166827L, - 2181025843643822270L, - -544448869202488473L, - 7057264048203590026L, - 4363323697043225181L, - 288118730444504008L, - 6623265038156431800L, - -1346676098681766085L, - 6693111459824679536L, - -5826625922074103454L, - -3486949479332473670L, - -5491430220943863042L, - -7571085429759204806L, - -5040253774339356206L, - 3305212073815689334L, - -4916812550925428252L, - 3791981966901325707L, - -122684436810232675L, - -4859495698099370447L, - -7070496757192133073L, - -868377069569577871L, - 8419145116270703784L, - 6800486273015600197L, - 4633342516797787668L, - -1661577990952520136L, - -334342790235531239L, - -8872817819424402897L, - -409486044664079154L, - 6190926389261136345L, - -1300830024987992860L, - -3395638269793024332L, - -8493538135787539363L, - -6621335634487712846L, - 1973828869629126484L, - -8925429074145354136L, - -2678123694384376779L, - -4225602364907809934L, - -7257068922279808299L, - -7485343360991292969L, - 2406538583069093177L, - 926637182534700777L, - 4630670481086444853L, - 7851742083103622018L, - -98392444236074312L, - 1142322156420818107L, - 7462750549553202851L, - -852719212082297085L, - 1478659643974205762L, - -6521398709638030532L, - 1345928530210989700L, - -3363927467796334767L, - -4501085897120438635L, - -1855175868195079840L, - -8957269249266743558L, - -5499424421497234822L, - 6823468430111213664L, - -8349332096263306503L, - -796191064979922279L, - 3070550474559678794L, - -7237539936935226606L, - -1467576285689886091L, - 8020665312084081577L, - 6549665319606165521L, - 8265205303228562057L, - 2959656348340404166L, - 3479620626361283295L, - -1809040706699436602L, - -6118995013506825485L, - -3703429629123416796L, - 5314878427138221245L, - -3374786619071663812L, - -6020893708387338112L, - -2099692294850961452L, - 5628155794800251850L, - -4036147416511180551L, - -7941600054572002747L, - -7483400491927447614L, - -720567278261368781L, - 3314031855271606298L, - -5471631794645557473L, - 8887891228392664673L, - -7960828123610685614L, - -766265380117391950L, - -4017904512890559451L, - 3478074185490226921L, - -7553920981498126005L, - 3988562325861820517L, - 209643423615708418L, - -2464819451665246158L, - -8631718977760664612L, - -4893221336143393409L, - 2390264798730683615L, - -8300749389255144164L, - -3549775289570958064L, - 6514441262456966668L, - -7301663820335638615L, - 4181559756778549411L, - 6215253578855337690L, - -7323335092456459405L, - -1860577032441476467L, - 3644299936077808538L, - -5161174126835724701L, - -7779787747613135503L, - -3446338450597548406L, - -2662609220502962318L, - 208946340318274486L, - 922869894074454969L, - -8428909140908329623L, - -6875524699939418906L, - 5154230294972327697L, - -5868880138852165350L, - -2697155020815738737L, - 6278899766774254324L, - -6124877505863871039L, - 6113186870348198684L, - 1328797232741421065L, - 8936960355443139766L, - 9069883653377839816L, - -6698244186639407697L, - 6633988379507542818L, - 4243888593320380368L, - 1299920470993756698L, - 2315187937474071861L, - 806120923801759332L, - -8537792935927015380L, - -751623313460664870L, - 2455098182130434513L, - -3041072155357054618L, - -5209258140949481980L, - -7784651030341623624L, - -8624281235662545565L, - -5185374153462168974L, - -8728622305551122108L, - 3633316488676598179L, - 2341850275669250720L, - 8998800880957295269L, - -2791108801739767859L, - 4207716787796156879L, - -4083554261407892809L, - 2977762250156739855L, - -6066243213313847782L, - -3134677742513834402L, - -5231660756514911289L, - -7916346081138370244L, - 9105509708951212631L, - -3071680532260795719L, - -3152428524199455707L, - -5276930195233923125L, - 1981446637702558747L, - -8822786060285469479L, - -3086453182842996354L, - -7521798164704108718L, - -7460429880600038351L, - -5031515429775225415L, - 5662627828449328757L, - 2804157867790593789L, - -6183934836359652529L, - 2425310972806241292L, - -7877162957672040682L, - -4575453773921540745L, - -6152892230011262930L, - -1554429781063399588L, - 6395550633581619922L, - 948199150697514149L, - 4123518706442132507L, - -8620024481834864148L, - -4627311960537433998L, - -1517263476517287336L, - 3087156144310177979L, - 802387854806242344L, - -8223164854162179626L, - -8876883825341271093L, - 6189924694943538938L, - -558048344469199000L, - -6388815497071843014L, - 7970082794223216108L, - 8943146030443257086L, - 1919558538884824162L, - -5413821296846136841L, - 8482255996292420949L, - -2059351044571046226L, - 8122315934009425936L, - -6002133579485340781L, - 6439465961707132723L, - 2763117897158909339L, - 4241846593057682886L, - -3156374353704014890L, - 3611310604513156987L, - 2539868227324188707L, - -3160603853021599046L, - -6694565052629228305L, - -2829087677596299075L, - -3855421753196086451L, - 8353874633819013271L, - -2485914493713180581L, - 2924901647540244351L, - 140830235769158231L, - 8924525771772034372L, - 1991645829771754924L, - -6409133430531739321L, - -2477349252564343349L, - 7592298137540200578L, - -8706120837264950112L, - 2330049856518978017L, - -1333715564956417750L, - 5321303278236129003L, - 1316603583801631000L, - -2052093890021786856L, - -2212919092132307727L, - -1138248150179747101L, - -7297574785915472699L, - 3159392081609537393L, - 5438969032594710113L, - -1117946266762888661L, - -3513962250060316650L, - -95470470775096400L, - -928547845419412355L, - 3064209748165139149L, - 5570740544374382296L, - -4848606292970499536L, - 1249733847255258336L, - -9081876379081045111L, - -3178350430540128617L, - 4580722282117591455L, - 4910338723691444614L, - -3861107435455294057L, - 2455351552393139588L, - -3098045343671378301L, - 1276702104227748441L, - -8725606894849543465L, - -7043526197674754455L, - 2543751490914779898L, - 1111188191726666289L, - 3299681536744686092L, - -4968407975804173061L, - -8443232222924958642L, - 2692856020311995538L, - -7295992543900831720L, - -835426980056055153L, - -7189216512060259212L, - 1546667140862204220L, - -5157738526808785307L, - -8400112152363165211L, - -2562446629278342489L, - -3984312152746163924L, - 263973571859894620L, - 5863738959863392730L, - -3750469576779228200L, - 2859093520615066384L, - 239574671716835044L, - 1758244848125395099L, - 4692926060224877180L, - 2328985435627410056L, - -712944964417726519L, - 7575628018175957835L, - -6461647485226712981L, - -9175844658802936237L, - -1791894645853433273L, - -3209291319104719345L, - 8435774909159574457L, - 3068904622159492539L, - 6405574310234631665L, - -7236310029621050895L, - 1939741827857698370L, - -2711876483320863546L, - -5191337944005182792L, - 851301927202074099L, - 7817558216393575797L, - -924173671401578135L, - -8870424728276452684L, - -5612135981154918473L, - 5352840780989627332L, - 3115501649750915797L, - -7282764488136203731L, - -4410122159075968274L, - -5112841868993719465L, - 1606611627835962209L, - -2564625118517656156L, - -7347999176364584697L, - -7520586016175454443L, - -3582872246453049220L, - -7208670274224679141L, - 1407185043226639926L, - 5548472899324259498L, - -3424704481698318306L, - -8898045228081312865L, - -5032961205984329240L, - 2319704565344125424L, - -1858090959206557106L, - -1847512527385111193L, - -218817722784924760L, - -4644538017574761086L, - 527762499588866419L, - 7682925460546142196L, - 2618673582975102782L, - -8339358073633623035L, - 4632344075623474881L, - -2634725682046056737L, - 3264353773883015103L, - 3450256920483368564L, - -8453373497678191816L, - 4324811352547234228L, - 5231611966727557421L, - 3935063678731059941L, - 6338309551930394802L, - 6622686033142507173L, - -5278373537512798709L, - -9063940204441257539L, - -6333833756325058415L, - 3799491381076234981L, - 5050905817684546674L, - -796624655126841621L, - 8334872366472578300L, - -5288752267258476166L, - 4335956913966038392L, - -2247074774901543705L, - 8474035569080943503L, - -3170167932314701995L, - 6999756768956410897L, - -4451078577344071588L, - -8433054951584831409L, - -2640652121643463448L, - -7045594934288710931L, - -4036935141669708886L, - -7734407512972194081L, - 2053541054148333962L, - -566653752431971002L, - 1898804146829115409L, - 8507984725723339263L, - -3742788731083462619L, - -614166854038590657L, - 8147682807535759575L, - 2813322236228401990L, - -7697111451322995338L, - 8023578719528819358L, - -1666048881205334172L, - 2861705383918865808L, - -2067264870309406817L, - 1544932780962992751L, - 5752963315823730718L, - 5563418456763501584L, - -956763705026909993L, - -6723021793890249884L, - 8199491799885937348L, - 8254326245904567972L, - 696534455436688862L, - -4526166123204455007L, - -1244479971115743946L, - -4712028527008594695L, - 3845317619056596538L, - 1397508695414938292L, - 5199778266100306999L, - 7649610185133409821L, - -7736979936936405855L, - -1871499676764587199L, - 4089210433244498057L, - -5319342193649020117L, - 6510328602034064204L, - 1177990759783856649L, - -6211536889696831922L, - -2806444732697667079L, - -5534324430749159010L, - -6189402282341917673L, - 6327177260956086170L, - -8199327532062722025L, - 1757637089703623521L, - -1083020196125888231L, - -4027554827881183115L, - 2536452110533397141L, - -5283309880767903892L, - -8726185014741079280L, - 5870565960746070417L, - -5981985584772708231L, - -1932877698882443840L, - -1002343255004640521L, - 4369245457815499473L, - 574307157338267836L, - -9022123090729501652L, - 289683520338718123L, - -5791631171477648402L, - -7088072188409060385L, - -4659987534525277948L, - -6573587402478059370L, - -9147189283662432041L, - -4621406226758810332L, - 3827992897413425855L, - 8237187128340177815L, - -2575127860924571660L, - -5807831166865245102L, - -5362714198312494492L, - 4800564949032048849L, - 6232971559544384156L, - 5346264270546834545L, - 4418021854956695145L, - -2503709442294180811L, - -6705525727229877941L, - 2807916716409994404L, - -140901784876025870L, - 8341454749980902529L, - -1877846120130857988L, - -5151008775080326365L, - 4141948371168606708L, - -2991396496641036974L, - -8231846204849830109L, - 8817247101288954387L, - 8987037987198023072L, - -3653961272252403667L, - -5540876112254432380L, - 6630760576601451124L, - 3952853764187760519L, - -2752207231177565438L, - -8990910782429153994L, - 275029084438740989L, - 4377008995333363792L, - 7821963094129670639L, - 5910345261804604591L, - -4676534586425310858L, - -893427896035022872L, - -5107326322974521170L, - 5928147272454832468L, - -6838714257802993131L, - 3828181535474040080L, - 108432455104664877L, - 6134860905554719891L, - -9006906057728028416L, - -8785087250130628623L, - 5107258923997586783L, - -4184502077870950738L, - -4196994343382319067L, - -3602525630290645804L, - -721602986806918388L, - -685749048932716724L, - -2226124441764103982L, - -8444470437189672337L, - 5967905323104782609L, - -774529365691330376L, - 5317411683068394421L, - 8753729036148149823L, - -2600284926580864832L, - 1501264369203023713L, - -5589106565383836539L, - 2671769607792597675L, - -571916257780128106L, - -466398102722097434L, - -8668321984643614166L, - 7631202114905008803L, - -8647922451448787023L, - 8025381490498356948L, - 6049280950696679244L, - -7696482417187458362L, - 7140438358861456746L, - -4921885565559803566L, - -7027307783313071980L, - 4879598629629415952L, - -7342155744245645378L, - -2263378697656156016L, - 3707257119850556629L, - 2267112971575522392L, - 4213162373130191016L, - 8934898250536865564L, - -2149765792894599153L, - -5375160376931751557L, - 2196544121130659101L, - 1698916734136113996L, - 3433172695894846834L, - -2849259564218003615L, - 3254138956861413927L, - 1285929622626453198L, - -2349127797610817522L, - -1191286947825336074L, - -9055971338481310193L, - -3525928115330914396L, - -3227633136719463166L, - -133501853014392460L, - 1099153576792978915L, - -648473507797745243L, - -8947946509829984393L, - -183277647411867477L, - -8972836557830117056L, - 7599024178448012477L, - -4558685557381095142L, - 4767843848744584145L, - -1522308275842184404L, - -8584574042672861403L, - -1734332735592240813L, - -5832090116698921823L, - -8717779938268738600L, - -1881355893097809021L, - 7715529933819950784L, - -2289162375063823266L, - 5628801095532857454L, - 4961594313236250573L, - 4618832900030681591L, - -2860026598356511432L, - 1961029532371905567L, - -7427116119564073711L, - -7663272674507523073L, - -1432342159197328837L, - -6656742466964663442L, - 1884610673731472834L, - -3810094228658892044L, - -6616291605664442115L, - -6089433736056798518L, - -7473225570871869756L, - -2962461410122376636L, - -7732736326487208707L, - -4443012182604465346L, - -6157220788020380465L, - 4600227015044805999L, - 4469639125734518912L, - -7792518910888390519L, - 1994555386333163764L, - 4369373061497876631L, - -4738249058452865067L, - -5995135073617675417L, - 8575145712582277328L, - -3326852669647946366L, - -2007891227481667403L, - 7761466597038557448L, - -7224144129768088459L, - -6066361559768252258L, - -4068105427650671702L, - -5560889521429203904L, - -4762527649365520713L, - 2694767757294725688L, - -98412761475871782L, - -1686751510820366009L, - -8638747288926132295L, - -3606421426295459375L, - 703911580424568845L, - 3806874684410471199L, - -5118211203482914183L, - 3783835693585708905L, - -4147496567901501893L, - 4328139758484363106L, - 3028068134370267202L, - -5966389813687232408L, - 2195469898148267913L, - -3080166474377317430L, - 6412533502918649688L, - -4801061500654703956L, - -554194900129906123L, - 1486000469436139740L, - -6971589411333019409L, - 2647463349908157318L, - -6754094203714628854L, - 2314399046579224435L, - -6177383374280917075L, - -5619632493646738964L, - -7301831206207675015L, - -5527516975398904813L, - -7206298956882517419L, - -1535337994919517848L, - 725107219148423471L, - 1938195538047669437L, - 1028829726878266547L, - 3981352596771855719L, - 4637441575637536278L, - -567364300216533096L, - 4215820779392244698L, - 5791138156269639416L, - 527001488112788484L, - -4390338125863921979L, - 5557055272452535368L, - -205316410586789577L, - 6952133288635206796L, - -7457518070084443694L, - 2002018537802900078L, - 1561023860546606398L, - 3006183850758749007L, - -1361037422909233361L, - -4203933835330884180L, - 7500988945823273736L, - -3010872765453549672L, - -3781827987408697259L, - 7460277383018710734L, - 5250710645655626569L, - 1109553850343924028L, - -6498085059809326090L, - -5879222670885240061L, - 6210613100795379620L, - -5759675374559290972L, - 2824738880545011656L, - 3213468672819532759L, - 514328750496380347L, - 4470285007717204101L, - 2269240343629252129L, - 8714859525098129755L, - -6932578361476642118L, - 3219949239213817308L, - -974585298959970878L, - 6482527911604968876L, - 889153561428168470L, - -8207616222981108363L, - 2386860797138412452L, - -6749686321997906685L, - -1105424552884318985L, - -3137963539903752699L, - -5296550634024189868L, - 2919221292190747486L, - -3991521756182858814L, - 3802413126716557908L, - 4556158013211621930L, - -1956520472596138305L, - -1667618395239727751L, - -4948155010712448139L, - -2667546434479018044L, - -5192951416537530780L, - 4474564860866849514L, - 6795504197096101870L, - 348555520492747776L, - -9152654684800879935L, - -139520144005307559L, - 8655115078308054377L, - 4640578432082008138L, - 8526214307008571064L, - -7079091919397494753L, - -4852301075482608956L, - -6726381834527599283L, - -467175742480032731L, - 5092513639393893997L, - -916781769295487406L, - -3306005301217276910L, - 5711239369216246603L, - 7411369067342514714L, - -137089609471843551L, - 2197853544547148264L, - 6994895994975015585L, - -3993584670641567357L, - 7324113989979846776L, - 4848201612974985071L, - -2319141888027790806L, - -7727572350242351429L, - 3611228677421118756L, - 3254031939911056022L, - 1315862663037871882L, - 2762719496333050774L, - 2441476684596910583L, - -1751985778109806355L, - 3156518557955714028L, - -7474525109128332157L, - -402634945481420093L, - 3711042493776857096L, - -526618219268616930L, - -8956423818433397438L, - 3318951429850234648L, - -4065748355754556535L, - -2974465318794034149L, - 9156201933336414671L, - -1224004278953882958L, - -5567810197150710613L, - 7645667176564158039L, - 7437954892140634061L, - 8595047667824297631L, - -4227841629446459104L, - -4073313779073810355L, - 764623093768368301L, - 4502563456929761688L, - 1027370723462817766L, - 7668869338814612684L, - -4780350365503382825L, - -6389061999435806787L, - -2133237830821026919L, - -618977682776693149L, - 467656057704319257L, - -6754479852919060751L, - -121796624546305099L, - -6164861615484187016L, - -8568598162483564153L, - -8182644091745100549L, - -3989631051916738549L, - -3812515520109109155L, - 5458479505950940580L, - -4068063356781230185L, - -2830766632873229698L, - -7592354330098913572L, - 5323147076973602219L, - 462800867816435413L, - 4002154584204048905L, - -803837213195276249L, - 270846859760410932L, - 339186719055655409L, - -1681073433226249949L, - -3172364168133842187L, - 4471576722877991666L, - 5796602822306813285L, - -7918394505018135767L, - -8099706435104488972L, - 3225305587851029418L, - -4366886220054887809L, - 7732358946751522729L, - -228816160482375387L, - -6429545033940023762L, - -4874531170284168803L, - -7919754354938613725L, - 4818550076091948962L, - 3907701057522316102L, - -2162109673539899314L, - -6296577330837677905L, - -5038523314786213767L, - -4182256071671167089L, - 2347804671767305901L, - 8781747195783722684L, - 5464112250608435856L, - 270499223000052613L, - 5387476652934255975L, - -2665753069813354951L, - -6640316903187366435L, - 5182130073111288069L, - 3324630100168604545L, - 6092224834024861844L, - -7314979478990434840L, - 2475323565628074124L, - 3744881942029260381L, - -4468245448047387416L, - -2514532843437356755L, - -8460931029051770120L, - 6058982121000846509L, - -5771467892492359246L, - 4284427580292476574L, - -4502826197302040607L, - -8909965133023702444L, - -5152825667036557377L, - -9001319942906464381L, - 8783326653870239059L, - 7169538748654303504L, - -7206711339673245443L, - -959892259265562431L, - -1673323329893911437L, - -5827914418805049723L, - -820830695253715046L, - -5782181341435499931L, - 2663734005752892035L, - 6987511185271585413L, - 1292089443730939651L, - 5587170596809636807L, - 8237809229146017083L, - -2235781308356196513L, - 5423273201690025713L, - -827014178432784464L, - 4410575469603649344L, - -4472642034035214939L, - 5360193252716249224L, - -4572235983836835323L, - -5433653902594010857L, - 4134790485921001466L, - 4485288889906709425L, - 1685824402735587758L, - 6091818520229922279L, - -212523426857309616L, - 8873690209863775893L, - -8812432523459654235L, - 8103047819338531286L, - 4614534509558570387L, - 4229082172984667846L, - 5484460792243331111L, - -2385763800014084246L, - 7030455160712580607L, - -4237997225503760625L, - -8124291737715145061L, - 6327782024255912635L, - -1059957986215325879L, - -4603394046555224246L, - -412280426794415941L, - -3912022758691365061L, - 8274283857906326279L, - -6679687570538459747L, - -6155809572519276859L, - -341344339192464824L, - 4137861550441588415L, - -6618940267671493988L, - -7291675023689911653L, - -7953871974818004574L, - -397153165830243551L, - 4399741193484513820L, - -7321827371527026850L, - 1338155597001139997L, - -7945100475342274903L, - 4522579580699730675L, - -1777997817650119183L, - -5064101783437092203L, - 1113553310062801693L, - -5709720543205442481L, - 772882345518435045L, - 8903336589907078605L, - -8789465120959251318L, - -7834044567177051539L, - 1770279151425541006L, - -4941283968572768930L, - -8127231558741248281L, - 737747628416269099L, - 1574449851957266285L, - -471282776174276539L, - 6739952936193376447L, - -2424982200476312714L, - 176022186483763915L, - 347356729555692814L, - 7550980861784622262L, - -6474882761637742162L, - 6769254801287215843L, - -7346044586598503820L, - 1815045574884249754L, - -4240219227462571370L, - -649819224919779208L, - -3697860834931443057L, - 4209607762757612835L, - 5512379227441488333L, - 2554702396243693813L, - -33063197416101018L, - 6204387436027047110L, - 1121696558750946811L, - -67713675745955613L, - 2900236341998750711L, - 4072627124871947361L, - 3411250942283240973L, - 3459019187218245290L, - -4931935198846519054L, - 8420402881327935528L, - -2700073972687127894L, - 4135622085465759778L, - 3115364578959809417L, - 7905907040079822152L, - 3117202331600018366L, - -6912405766950946927L, - -4526890208931001416L, - -8362196017109360491L, - 7990163642449120866L, - 8921333090931858791L, - -7835160532401884454L, - 2597345228860385242L, - -2019901582135813985L, - -734731610197007345L, - -4478738615320414333L, - -7971363857175568029L, - -4550695664824391599L, - 7004896942426055925L, - 3243444764663891458L, - 8221182849925835178L, - 8413639868002181795L, - -7599742913553767497L, - -4861871033227348667L, - 7180813616057727196L, - 4110358466985293134L, - -9163301540202343656L, - 7407431836530456233L, - 7168833492994704184L, - -3225184215180636592L, - 8550286352383434501L, - -4037242040051553894L, - -7019860459089371337L, - 6499568859919656194L, - -6517870390876058597L, - -8816903563531564452L, - -5488567103311833696L, - 7162975208461021799L, - 3231150263108104601L, - -6472825090155306196L, - -7112727281349161724L, - -8908480908774446053L, - -162138742916032914L, - -4934765719133081654L, - -5383597847234182085L, - -1457750799424768103L, - 2062788467226997042L, - 5195212083662151172L, - -7086725269988157115L, - 3216790230270684188L, - -6772983200597124262L, - 2139536380152189149L, - 2783400616608816134L, - -6309269121238725342L, - 8703327852945446994L, - 5986578967392046329L, - -8686234791137218952L, - 7147175926193618258L, - 2812520130705527307L, - 1012516456501023939L, - 7796658848573086967L, - 2642184550087192362L, - 2521303561751617614L, - -2372355039844318123L, - -7982908463432899233L, - -4773586301827797121L, - 4040904044293393487L, - -142670900232845920L, - -10691804562559377L, - 8453630879397574208L, - 5612078661433375152L, - -3592401183831123809L, - -1194636486876965628L, - 7144612844993582305L, - 5952025594559102453L, - 7768859735998504182L, - -9046596974248194873L, - -6171084369920910835L, - 1781418400960307869L, - 5081999630281512875L, - -5147831879244994539L, - -6245492622672631422L, - -8665204890652827995L, - -1175718303513980672L, - 8885449897820005156L, - -328163209321586593L, - -1445525508305375763L, - -2100999238041350502L, - 7410786050561217868L, - -7914164711220348362L, - -2906200250494490361L, - -867790952312765711L, - 5887767909251264450L, - -5789450489200739242L, - 1662159886119924244L, - 5012361370472355454L, - 3429745384914079292L, - -4445208736020219814L, - -5413763295704138557L, - 839374495111075513L, - -7648977736915073173L, - -3664832624688924839L, - 7158412277573249226L, - 7779305491962558566L, - 8039313349173431072L, - -4220847824862505833L, - -1939839155925934724L, - -8034010027834756500L, - 8475758752811450501L, - 1099214246266343746L, - 9186354033975902114L, - 2335697942068596836L, - 5125601667360226370L, - 6606318187238773479L, - -1182364933194642155L, - -1282696136769309305L, - 1154559731683162717L, - 2886049233756462774L, - 4825677492212933300L, - -9121350732551109877L, - -877752678277742358L, - -3266764465431864389L, - -1914199636241277795L, - -4687907120417383299L, - -474253911596715394L, - -7075290400477487025L, - 8134957124130148548L, - -2992238854808660187L, - 5996516183600836003L, - -371549095799671162L, - 3902975175457565825L, - 6605036583318392521L, - 1891100275270423451L, - 2119245665259072674L, - -834774890825819923L, - -231771124221128734L, - 3133196876747178672L, - 7298692169226203885L, - 7126455091552696586L, - -2143648506542037333L, - 2865309216991778464L, - -582169278536046195L, - 8080177625773872889L, - -2641866597771089394L, - -4210759777426999986L, - 8940623302154716559L, - 8753678355208533280L, - -6281297936039038456L, - -4466014453281785565L, - 6273362062923197148L, - 2333217083667471091L, - -2134695293413683177L, - 1638282373040657672L, - 3200622258378038793L, - -8777912174432066160L, - 4509402067996738269L, - -5444623700171973227L, - -4861257960719874399L, - -2931845644152220868L, - -2415035074251453041L, - -3415608992526650142L, - -1100060277548286709L, - -7950756431533405941L, - 2529778543681983619L, - -2509511542105356611L, - 25235701976844069L, - 3512243450460933893L, - 5497081699936367558L, - 8834833749235004269L, - -8786955172657476976L, - -2806229680204644453L, - -5310949673572257587L, - 7180989110601385791L, - 4574812998786692932L, - -7191136183375597108L, - 7817612065160053901L, - 4092147258927215079L, - -916694886327147203L, - -8155481011317235899L, - -6577214469178899288L, - -4704682976594284594L, - -970000750564611255L, - 6392037803435901919L, - 4653466442162924160L, - -4217569099833350175L, - -7494295064988163591L, - 268071204677339466L, - -3128139626778549626L, - -8490295735340959824L, - -5162368829222403127L, - -4379157681365371219L, - -4505869932044746193L, - -7725004848904746158L, - -1077347489733049759L, - 4372692724364737369L, - -6095523387109702205L, - 866555760732064401L, - -6043383891507219565L, - -5064298145687783678L, - -8284554766413268444L, - 4358509246174021158L, - -314402459279271878L, - 4534052702364464050L, - -5069975264209271430L, - 7618881160105474363L, - 4167592104901771551L, - 2277499839812963141L, - -5797737740917833733L, - 5386843611229288306L, - 322032948055534721L, - 8623908495470433985L, - 1464656873108399270L, - -143110847782655873L, - -3683505493125515417L, - 5263884653798534228L, - -5596816932431872850L, - 449263668055475580L, - -8209880385374160761L, - -6160876842633556933L, - -2822510119276015598L, - -1867833971803598158L, - -2743011208375680513L, - -562758870972224424L, - 5241707884356795802L, - 3044382044884310303L, - 4240643424518839454L, - -7202731734581844883L, - -8098501199143125283L, - -2550459180607677020L, - -1776717083783659251L, - -2343369089757631624L, - -6293279254462751659L, - -9100627021059872276L, - -1298100985130924363L, - 3390116780901102550L, - -4663999614093100429L, - 6916372370306791572L, - 1488349423055656442L, - 6773020852755024150L, - -7005014351468554871L, - -4753926923183579314L, - 5415870192658316069L, - -2670881940811475410L, - -7225213211793183097L, - -5703028807893997804L, - 6561444537664669662L, - 8939981796276591301L, - 6017910964940092953L, - 4500890776998912544L, - -1835018042586347444L, - -4191687948466793374L, - 4106435482907441086L, - -6130167349217050086L, - 620129892796426300L, - -6144158488464216798L, - -625006850515938527L, - -6682172611475406987L, - 1220842624016183584L, - -7098540157067814615L, - -4378743347226734130L, - -6508042393772984279L, - 5289282493574993598L, - -6781000719696595982L, - 3322666381578332368L, - -8173363279507413324L, - -3603049973704190207L, - -4316988796658196446L, - 914989291445423876L, - -305370752767861151L, - -6987550192802158001L, - -942676483343861967L, - 539036846465448158L, - 1605373100913987077L, - 7713068526230669637L, - 7241900405827926293L, - 186408038263119881L, - -2429472274603752977L, - -5720789098334319209L, - -6674769505767916301L, - -581393540490176967L, - 3124744789645879825L, - -5602915602343937931L, - 3263507419526132695L, - 6937077332985554718L, - -7919624999578199393L, - 6556190618267765484L, - 5682381095734864238L, - 7614251273120089370L, - 3395157685499349978L, - -6398328093992251036L, - -2651093395236575804L, - -2097470820892650054L, - -7267148748500151232L, - 5507274834982481157L, - -2194323672581532616L, - 2269493654210886217L, - -4216275761811372636L, - 7228709978053803804L, - 1544682503099095700L, - -8135200911288478327L, - 7339704802803690870L, - -9063598666954112733L, - 4249185982522288588L, - -4695745996091883154L, - 2627137268581003083L, - -2578238879441406084L, - 2429552460105156204L, - -5016405662860787559L, - 1213685060600888916L, - 5207480625629771054L, - -9039842400434871721L, - 9199909831090107055L, - -3171515520826634527L, - -1366973376209295366L, - -6750324026060931870L, - 8743899778045759827L, - -8621966377322960273L, - 4838450322903886505L, - 1788019071908015560L, - 4913822197134872906L, - 8309346613152344445L, - 7951951012499331460L, - -4689530477253691656L, - -375319494882093024L, - -1845044534505086395L, - -8796776862070375491L, - 5018318155817526800L, - 2586522091503534478L, - -4968582762284083199L, - -4927465852300428021L, - -2580812699959118622L, - -4904418483836862133L, - 4578001388519224564L, - -145427029490022812L, - 5605281842155781953L, - -8269674765102782771L, - 4873099922414055552L, - 2170749688227700120L, - 4825942009324106796L, - 1792050877115378285L, - -6605853503524394834L, - -3916692778840952841L, - -1986097963548896269L, - 7892537689540433594L, - -714136291891260346L, - -1648197774385026330L, - 3795404391823901459L, - -1987978550021718355L, - 8998001289418857599L, - -3968668700060172110L, - -5244271268838414883L, - 1096876802937588911L, - 4954206823378648244L, - 5569423710280172585L, - 179070914051875895L, - -1379762138674772955L, - -6297783890085466379L, - 8673286033209200164L, - -209771371089403783L, - -8371158182924445911L, - -7703744831611511871L, - 1612557317982335369L, - 1602832695339190345L, - -5248812496760442693L, - -555465681086935620L, - 2520493230458560658L, - -6666085761216925275L, - 7883921169936066300L, - 3038683421696596159L, - 5845618097380867812L, - -6239014819988016480L, - -8753088746243740226L, - -2330652362011359445L, - 840642889332131730L, - 4416624017275726341L, - 4690979542527364119L, - 5378555482069527564L, - 1969844668631546234L, - -7848379025576209733L, - 1977110971269560399L, - 2026765724811466304L, - 9004994755727389006L, - -2875238066205385075L, - -6183036361941845026L, - -2386657827628040463L, - -4350668673682921339L, - 5862965863197982604L, - -8441011186955249281L, - -7186928257432232499L, - 4577738672815669344L, - -4699309429317703093L, - 1727205267222358381L, - -6451216071831055595L, - -3419094732699739587L, - -9202486234602916474L, - 7995498040430401544L, - 2322468220197016729L, - 6579662275874920800L, - 7479989025114804641L, - 7484110942964095819L, - 2864220530563314806L, - -8398057079307137296L, - 6439003393908427189L, - -7835388314568774857L, - 5595140202807403856L, - -587980358622679054L, - 5729028629565035445L, - 7294164757654120979L, - -7034561723919575604L, - 5344573969684937116L, - 3196215998156871328L, - -1123378572589443417L, - 6074546259209406933L, - 2893792398378492069L, - -4483476567799717014L, - -3363408847369344926L, - 7141254867533804482L, - -5940527802490951736L, - -1094882559952364017L, - 8329622896679444321L, - -3173141862687107863L, - -7280018015022509268L, - -2089330837882663590L, - -354683141083920270L, - -4079664314326720324L, - 7616886288174535159L, - 8554847071096590810L, - -8173759087524336468L, - -3448863502458656393L, - -5738508186162418231L, - -5111997041556312344L, - -8550681297377936354L, - -4330402296580745208L, - 67088796475747867L, - -6874504283145514740L, - 8707156726330695854L, - -8450062796293630088L, - 327731584813515290L, - 7304259244110792264L, - 419104563434390334L, - -9153064691975026716L, - 7490483813653854554L, - 7077589656341495466L, - -5945353789867862552L, - 5486988927099214347L, - 4267202661349380766L, - -735203469934508862L, - 300049113155592253L, - 6668837619034437534L, - 213993526072465908L, - 8835245471465274914L, - 8183790714937497863L, - 8258711456036176276L, - 7136444522589690162L, - 1211565004822707193L, - 1989924245575051080L, - -218487864794566557L, - 2952924548635767820L, - -6462002167772557833L, - 5913246427219973975L, - -3174533491330927888L, - -8785311174506482406L, - -6684494991311010323L, - -2482601218412888093L, - -7285335761215045787L, - 1211034790718408728L, - -9100855059113049869L, - -1486270963118123907L, - 5275833683049609995L, - 8459420716417000011L, - 5533842052546250233L, - -6743116187090502104L, - -8218081861923503701L, - 5761628519765780332L, - 183841883985945582L, - 6376290782250169855L, - -775214822639981928L, - -8823028331753034219L, - -7585331840565087967L, - 2975478445973141542L, - -5063889138086837402L, - -2979700995440085783L, - -1219607777405733761L, - -7530208062940995205L, - 1583477077636770548L, - 687603337248263893L, - -7494884423475008422L, - 8422729696142094927L, - -2688483407638967316L, - 3899397712568319078L, - 7271622649506188466L, - 5081817906386987096L, - -916174376204972738L, - 1540653617218284471L, - -9108776863627327658L, - 409951124500633339L, - -1411012041120099174L, - 5254818079101287689L, - 4655192715659848616L, - -4055996322312971483L, - -3525221214301544451L, - -857176511645353866L, - -9137977946340218096L, - -2464138987127699380L, - -1572944913716776527L, - -5382357127457681304L, - 3400456476820781019L, - 7092666713014777182L, - -1016869719262402776L, - -4296380651220352294L, - -3137955217832540411L, - 6899747201222115049L, - 5612318743221858846L, - -3082611894693908037L, - -8765593464570788072L, - -8518170211087455673L, - 4127210266223470126L, - -480745760307138952L, - 6366437837796426817L, - 8633027726559958619L, - -4876440158972240126L, - 1910667810356463924L, - 525819879391508442L, - 728364790223504935L, - 1801852490210258450L, - 1693556137065594317L, - 7512677136171374024L, - -8502671549747219751L, - 6750465734377947195L, - 79926463486212071L, - -1606928706353092712L, - 205498205560429840L, - -8511147442275932832L, - -8428335428540761347L, - -7426388905907916885L, - -6514050737271088879L, - -2450758388754574856L, - -5091230991480586360L, - -5169952131144179624L, - 4447490729022261013L, - -3692318537052447395L, - 1078660998337165744L, - -3916568308067450676L, - 6024800331836073525L, - -8107333408030092167L, - -7607289536558565257L, - 5247807205554828460L, - 136732938448579124L, - -7158883148260417938L, - -6099971793579365853L, - 4854881589738432309L, - 7711527295835389228L, - -8549957081212159598L, - -7303058748474201722L, - -7681406204943895241L, - -4881190754207950300L, - -6035776958688302906L, - 7214212236240295751L, - 1981012208386034732L, - -1049989180117070494L, - 3924935253660959406L, - 512859785555014414L, - 5908617682678575542L, - 6758310316951005278L, - 6189924959604816301L, - -4920405470515789427L, - -2117869367297703052L, - 6707816747990551118L, - -4980047489747530190L, - -7365247289662920271L, - -5342685489927387987L, - -8590216048531947264L, - 6817356446955049603L, - -1378280258813293636L, - -3592400710075707758L, - -8871693364702999347L, - -6373833613639184348L, - 4797638018086956108L, - -5647576741545902954L, - -7901112803680191059L, - -1362942868170890798L, - -5813135684692802772L, - -711135680335633766L, - 1062354220967606079L, - -7871043181645557885L, - 6112341712359859833L, - 7916891160508372008L, - -8003652862887082098L, - -2396517101239953792L, - 4370059680750956803L, - 1363641917746765215L, - -5876946297329039758L, - -103128310036998617L, - -3800790044039752368L, - 5199080865813174926L, - 5691839759690453434L, - 8175397015029172130L, - 480520985319940721L, - -8578753082637254739L, - -6716879961856683419L, - 3597461575855927530L, - 4979191387439246058L, - -8320455146441525699L, - -2114691132483379200L, - -4537130860792099169L, - -5718306086279916956L, - 5136790107805442544L, - 7289096860375296487L, - 2880058958308819603L, - 3767398060224293737L, - -492404481239348279L, - 9012315970305384994L, - -2684151666886841943L, - 7272790214055332206L, - -965422762587779909L, - -5443848734878691959L, - -8153873600234827448L, - 2490597961970604400L, - 2281204882791254127L, - 9133290251048762192L, - -1491895733843702610L, - -3474774710279245800L, - 4612394989169216779L, - 2622616589522119419L, - 4355987380154620492L, - -2850604048799570616L, - -4107832232055765572L, - -3723943963188375533L, - -8366293232338256548L, - -8701054798330196757L, - 8878901433891377891L, - 7295106607144564961L, - 5312667635062107659L, - -2358396954926641322L, - -4984697743423066531L, - 8939820283882288854L, - 4023787057481178052L, - 4597747073035337711L, - -3865522208345382306L, - 6560083733272461230L, - 2427578708615942986L, - 221210573151544106L, - -694084245105944199L, - 2078710449028907801L, - -823943775911009298L, - 6602372026224749570L, - -6054136931573131159L, - 601483741465077007L, - 6742891241881907768L, - 4262941380660230060L, - -2511197275383350546L, - -9092751631744236653L, - -4870448764794484926L, - 1830385011126178734L, - -6596888154152123634L, - 5648158405496157638L, - 6386181707589856071L, - 3363359913697235141L, - -7056659780210553822L, - -5261178176756493055L, - -3944960812874472523L, - 2763181386445379193L, - -2619663536437942233L, - 8897272156543942808L, - -1257206140816012022L, - 5942440353528557164L, - 4786157224137440415L, - -9220126986536151642L, - 4182399256221021027L, - 5315354483278533273L, - 8269371862567018757L, - -7830778159860165874L, - -4812100746794420620L, - 3498354375067608851L, - -746722368941475584L, - 7380715032997081755L, - 5189957981103089885L, - -4300428216272672646L, - -408627655218877478L, - 3669295430170749153L, - -3178922344308130598L, - 808687805654478372L, - 7382854145017135524L, - -6443473827958318421L, - -3243447797010153128L, - -1263178138991133398L, - 8750726774705960543L, - 6533471826240257695L, - -7394781107965678936L, - 7513264927729266721L, - -3004378607368189670L, - -6171795523163885499L, - -5383549323957030811L, - 1014976843641973640L, - 2432193004343470889L, - -2321713758391047034L, - -5925760547403348951L, - 236543589293463223L, - -6902103426228510687L, - 5049656219947439343L, - 5906696563051122955L, - -6356958402903730770L, - 7486754190124721854L, - -6788905906689198314L, - 7381793004093637930L, - -4615937202128935315L, - -5266672324677452216L, - 1047319090632526857L, - 9103083281304922244L, - -8812437015774444320L, - -4970183476407639031L, - -5247957782476148736L, - 4465954112135309385L, - -1053934358778018400L, - 5829139887286261453L, - 4669463005092905624L, - -3286153457025266798L, - 6416979317993515170L, - 842322401817513616L, - -1776383023933641969L, - -8880210007231865557L, - 4508732217351572993L, - 1193868998902473261L, - 1613803703795008000L, - 7204477604144047047L, - -8681096723143103693L, - -1746910701409113306L, - -8920378322388987992L, - -8966483163014777443L, - 2824165487928805094L, - -5662128102397495131L, - -6624810964386882286L, - 5452692340292941871L, - 4316228119275391983L, - -9085964721275713953L, - -2133433404692719643L, - -7343693486447937998L, - 1109852172632293793L, - 1921023425304227346L, - 4854131887624741149L, - -8634651654935008313L, - -4727747937541913857L, - 245894689954376778L, - -1171354806284191550L, - -4449375760321500296L, - -2278035820133972979L, - 7026254152720723131L, - -5122868976531507196L, - -5791020171604844054L, - 1901595461796531398L, - -4888600188203895159L, - 5238583255328115684L, - 8191725727925819882L, - 6907331918345427440L, - -8330998437541118229L, - -7677204855776214746L, - 3733289736446750667L, - -6086367961329321564L, - -2223139316713310111L, - 5551603720291777494L, - -7284366962105424622L, - 8307035520655908816L, - 3515558653608239510L, - -2623185163047066159L, - -2881473020374695697L, - -3119109298045318191L, - 3915842281774372758L, - 4341838354106623860L, - 3536460086838807366L, - -400436201916140511L, - 1034940505346304444L, - -5677328290907787965L, - 3241577004049148165L, - -2177296903540985003L, - 1224705836089007055L, - -7226703706701449257L, - -5217415576556159333L, - 2723639485365257427L, - 3532882935985140762L, - -2367665914582725528L, - -1126240810191393257L, - 6572389991681822664L, - 3742078454964142074L, - 2537741859858174488L, - 2863650720786458695L, - 4444554472903165566L, - 4972147385910153832L, - 565306137953874174L, - 8228468642079060801L, - 3686959913775111096L, - 5015958178622222071L, - 5595710504305494790L, - 3174461843483976916L, - 1297058991090722108L, - -2693601104595504655L, - -3961646960717704540L, - -329224545254449497L, - 8172319141947522776L, - -3283750417712288364L, - 1484324135840360777L, - -4101313183342306762L, - 487423326160209394L, - -6984064475638587471L, - 8613232447441028099L, - 1138585794312519742L, - -5219522830444455097L, - -7068591267064606505L, - -214092808701416145L, - -2087748990108944657L, - 293814116254359703L, - 7396092072095010078L, - 1104271143132319796L, - 5950063587854161963L, - 1918000905829023199L, - 3382742654219329797L, - -7668064903330744354L, - 6592480311131388529L, - 3771018342787175035L, - -9209379343054099077L, - 8809433506817785437L, - 3622962127039251936L, - 4637085440835592271L, - 6356420981957532639L, - -6037359062089609360L, - 2809649815120543037L, - 4910545367671356353L, - -3641944013579376181L, - -4828543933815929748L, - -816942255851701146L, - 4500737028494484698L, - -5360859409398459244L, - -980188011105516319L, - -5341147405229376051L, - -5059204503101732424L, - 2323241341608001835L, - -7234489726660109408L, - -4399342489059768231L, - 568957892278445175L, - -3128288682699716902L, - 268059501110939604L, - 8869377529779418169L, - -5191201845817789231L, - 8742584095090015507L, - -1833031289184026905L, - 441773167769005703L, - -2862985803782167939L, - -2217136279577453892L, - -4699777063743038799L, - 2319030942204069894L, - -3096829301818651315L, - 2152089781530614740L, - 3591093109998414360L, - 3737787276968062484L, - -2075424185432267668L, - -1313631551970774685L, - -4919910057472342658L, - -1163170530272854872L, - -3783140882996568908L, - -8037533461827223438L, - 5147544332470383179L, - 1327994358379982364L, - 4326125443692555139L, - -1720554764987678589L, - -6224447350716142955L, - -3664233167161816084L, - -1358465093069484872L, - -3170767669678732241L, - 3175800087146479659L, - -16337625285930414L, - 4460646835363181976L, - -6184155055121584051L, - 8105205207275831311L, - 364645839147141988L, - -3252358421106878137L, - -2379855386905973850L, - -717996509442787349L, - 7039157268142466226L, - 8799412946070712593L, - -2256794007843286070L, - -3026828459050443467L, - 6316354959643887085L, - -632743241481339103L, - 9192761499170372867L, - 7519964503218211187L, - -3171788476130391814L, - 4205532823146854278L, - 6513522002710255853L, - 4968793986534390139L, - 7924914011447575185L, - 3506146014983106198L, - 8511722175131586351L, - -3535216109813816630L, - 3043419627940964079L, - 1989151438749037821L, - 7233464223954842358L, - -3249615372439963990L, - -8665368429824794064L, - -648378579874199315L, - -4727955777856631607L, - -3689595611110413143L, - 3856183988075237273L, - 5517263844496266427L, - -2433339568447789451L, - 6589509038357236405L, - -6774119612186335761L, - -4350036823275823154L, - 5834187175154047558L, - -3767301317720281706L, - -8702001427232534750L, - 94015559239255499L, - -4379700402807826L, - -1859937611212626430L, - 1226887111095682425L, - -1185076345898896498L, - -7829178625122620180L, - -2280062727697501740L, - 2556040939242422304L, - 6251964074628081557L, - 3066879182290958720L, - -8785644387968277547L, - -4488264477615612586L, - 8127606717194526874L, - 4890787706249869594L, - 6356833732756963227L, - 5174834866809420309L, - 2027973333647796824L, - 8053801885705963745L, - -6944307380006370243L, - 3113788140330654611L, - -2986910451567880470L, - 2425903292748474372L, - -1715269818440437717L, - 74338710306223399L, - 5132849055217923687L, - -6714922651557874917L, - -1476767669230945550L, - 6267869827386314060L, - 2151492872494414422L, - -188287405141817418L, - -2396141142455784570L, - -6107851785102021570L, - 2899506268788328800L, - -7955799538392167846L, - -8939834619099069255L, - -2962366035946053462L, - 3123384032637701312L, - -6706608866229291712L, - -3500046218323398125L, - -168870750581166069L, - 694099585994227916L, - 430038091926664816L, - 1624356164486366102L, - 4334130261304381128L, - -7324629223026415329L, - 8823152808567544116L, - -8620326148777841379L, - -788126204987848665L, - -8814182475375947241L, - 1080002348337528081L, - 3043074730722911830L, - 8234596790989448752L, - 4608358602898896255L, - 2343398753207867914L, - -266697139298886785L, - -159260171872612558L, - 4370044052923372524L, - -2995614366415980410L, - -4209600344306251016L, - -8755371846184338683L, - -3955855588499799050L, - -6787638727374739702L, - -8849461119575970289L, - 8716688164664398086L, - 1514577502053504108L, - 2240729936627952880L, - 2838465136424227986L, - -1487161195056206463L, - -391895021770092123L, - -717250607935411377L, - 725101643113018626L, - 2018234564447318861L, - -5254575322305083709L, - 4424742596549423606L, - 5662970072122589602L, - 3130397907087802883L, - 8049486087948419299L, - 5557801586424368035L, - -7085534093136275857L, - 5600569740806125553L, - 4128462226512133482L, - -1574925284503437735L, - -5135068613676616410L, - 7314046845044324564L, - -3686747832999142812L, - -1564972575538757040L, - 1120348884617118977L, - 3412879446395492399L, - 6962651138322613963L, - 877006726541596979L, - -7866734399584535627L, - 8572173997988387711L, - 3835382868124934929L, - -2583877131516514905L, - -5102649011667592384L, - -4798459575624269557L, - -8156429235664983329L, - -6239845266330519720L, - -1914747524813276529L, - 5363997714419355781L, - 9210533546107024609L, - -5245165629299500976L, - -5193672401549237041L, - 6597128830638074557L, - -5969845161062876521L, - -2445089653030403139L, - -4797981019593561429L, - -1962888612492761260L, - 1803013398616297242L, - 8744887681327442130L, - 5851196282496012008L, - 892128523146305717L, - 4170022229766562081L, - -2134478426920707338L, - 1238027773513435748L, - 8866916391213127576L, - -5827099544905007258L, - -1552818987126555097L, - 1979982077379021084L, - 3998394901457623548L, - 2787580374700656688L, - 8372209727011402499L, - 3409775566082298245L, - 1114413850985679686L, - -609417232397692848L, - 1762759225268672019L, - -378983625905076170L, - 7435306721054054073L, - -5155196407132036358L, - -1668786196380559129L, - 4519643915893375417L, - -8609870523645938036L, - 8590593064246052287L, - -7126254452521759890L, - -2826314600096007100L, - 1624568634286818020L, - -450700576225246242L, - 7539390560191158137L, - -2188075991300573837L, - -4681497720947957856L, - -4688143896220383919L, - -4305920512968147039L, - 2656654774987994840L, - -4854606985975851256L, - -5361383744936804655L, - -8947485315238255267L, - 3311598196079410229L, - 607952732017041432L, - 4481836561581728625L, - 1856670507280870266L, - -8371889865268432118L, - -794649732821127929L, - -6144467833645861578L, - -5870596264115217421L, - 1547182795679877050L, - 3554393108243259363L, - 6096915670896392585L, - -7585113688284079403L, - 6283800140108182083L, - 7325444638523598785L, - -2676741791420355695L, - 7399210828703529226L, - -5153686314010544980L, - 4553182987876882087L, - -8475602433165535745L, - -7549754731031245776L, - 383864735074387336L, - -1462360910626047142L, - -2503433555198690048L, - 7124680608501705883L, + 3244421341483603138L, + -4302098779834749733L, + -2998166160713018281L, + 6864218090047839419L, + 6979084321315492338L, + -5731546056562700354L, + -6460328875922888956L, + 923809989133364073L, + 4187271766389786872L, + -1629980255024596516L, + -6095164084758671497L, + 2086176710598203789L, + 6543284205211650379L, + -5213522776729965383L, + 5545158833176453687L, + 6191585008302141506L, + -8983023575487778597L, + -6993173599622040792L, + -679721864292929835L, + 6982591615625134866L, + 2917394212576059053L, + -6639923505334063205L, + -2362153139612899683L, + 4776590923197089330L, + -1506670496010913414L, + -2647877581130602390L, + -3024194937172852654L, + -6786232254807398843L, + 29867523197922776L, + -4755612273762186448L, + 7027486771791057426L, + 5707990981978323197L, + 3829001002278603781L, + -1833995589090992552L, + -2859822223207566521L, + -822061951152501107L, + 6172313773566651166L, + 3002688263104272481L, + 2442729726468942826L, + 838920225343106725L, + -3625228911788322244L, + -3085758516746786139L, + -8838726273629984649L, + 147628805604629229L, + -8609901492927370359L, + 2523698187551014389L, + 6168573373090741088L, + -1129058501854041166L, + 6287935907341083849L, + 7111303459234964792L, + 2178159668141251214L, + 3355500812482858732L, + 7998592630692471773L, + -3657590562873574961L, + -6707964006400412490L, + 5984672195388902266L, + -4866191761727097338L, + -3867761180105420740L, + 5010507633288345206L, + -6360606695257557456L, + 891304432194930768L, + 891409307892263904L, + -4666213895286452910L, + -6150244752716240152L, + 7027844749552840021L, + 7577525643630617296L, + -2909908046638187264L, + 1269898915928975170L, + -1296685705337969741L, + 6880380907958913107L, + -5157697080261523794L, + -2384830554205610823L, + 7117698599495882683L, + 8436634904183317409L, + -8685705461888375606L, + -2099116977851507310L, + 7784639995868301609L, + 620173983152449558L, + 7875300522364621790L, + -8571663595578279581L, + -6074103631611676465L, + 4991809556790719000L, + 7182703058112323703L, + 6700847687881865453L, + 2471686449789799931L, + 5615843466129961201L, + 108638713672822205L, + 3583360813653880832L, + 4747956906537059928L, + 5998273219519720430L, + -8227785307205256168L, + -7813674951517583442L, + -6588167816065898573L, + -6862603585040654361L, + 5081695234398607736L, + 1329474798079286264L, + 2849157965221752315L, + -1791866940674927372L, + 4332646258279960296L, + 4180229147886927001L, + 22042537110060316L, + -2696513067094881964L, + 4479930798836342597L, + 7717940613376663979L, + 6494116526350833911L, + -197304122858742249L, + -4396092174831810083L, + 289832483284799872L, + -1407793616753546142L, + 8107749310172792421L, + -634728965402563086L, + -5703942985817925313L, + 1530829577509875692L, + 725468970373613536L, + -8861952843133984162L, + 2677458900969433422L, + 3204987178703259401L, + -5308372023803773091L, + -4001659458034098463L, + -4307920379982142578L, + -7679947731286800682L, + 893843933290517983L, + 4059405294108459720L, + 1831062127804751133L, + -2762239301578822450L, + 6439416643289274311L, + 7794216615102176353L, + 1300299527667998511L, + -8807326403944725397L, + -1407864491810865574L, + 5562548832393267847L, + -1909668463603883104L, + -3001908439859224423L, + -8229811775093055754L, + -2185505997709248158L, + 8747474804119761845L, + 3375976894941005122L, + -8687541524345519584L, + 7475418969225723061L, + 1090519453973870407L, + -8039787237657230770L, + 1464043301476531850L, + 4392840094176543368L, + -9069431037609626595L, + 184117852034042369L, + 3048613549567428513L, + 8360545369892314479L, + 4218067793502522363L, + -1984361661054820977L, + 3359102789277797744L, + 7846237042486223698L, + 8441054814755521322L, + -6067811722142115057L, + -7157356563671886865L, + -2021770978571166827L, + 2181025843643822270L, + -544448869202488473L, + 7057264048203590026L, + 4363323697043225181L, + 288118730444504008L, + 6623265038156431800L, + -1346676098681766085L, + 6693111459824679536L, + -5826625922074103454L, + -3486949479332473670L, + -5491430220943863042L, + -7571085429759204806L, + -5040253774339356206L, + 3305212073815689334L, + -4916812550925428252L, + 3791981966901325707L, + -122684436810232675L, + -4859495698099370447L, + -7070496757192133073L, + -868377069569577871L, + 8419145116270703784L, + 6800486273015600197L, + 4633342516797787668L, + -1661577990952520136L, + -334342790235531239L, + -8872817819424402897L, + -409486044664079154L, + 6190926389261136345L, + -1300830024987992860L, + -3395638269793024332L, + -8493538135787539363L, + -6621335634487712846L, + 1973828869629126484L, + -8925429074145354136L, + -2678123694384376779L, + -4225602364907809934L, + -7257068922279808299L, + -7485343360991292969L, + 2406538583069093177L, + 926637182534700777L, + 4630670481086444853L, + 7851742083103622018L, + -98392444236074312L, + 1142322156420818107L, + 7462750549553202851L, + -852719212082297085L, + 1478659643974205762L, + -6521398709638030532L, + 1345928530210989700L, + -3363927467796334767L, + -4501085897120438635L, + -1855175868195079840L, + -8957269249266743558L, + -5499424421497234822L, + 6823468430111213664L, + -8349332096263306503L, + -796191064979922279L, + 3070550474559678794L, + -7237539936935226606L, + -1467576285689886091L, + 8020665312084081577L, + 6549665319606165521L, + 8265205303228562057L, + 2959656348340404166L, + 3479620626361283295L, + -1809040706699436602L, + -6118995013506825485L, + -3703429629123416796L, + 5314878427138221245L, + -3374786619071663812L, + -6020893708387338112L, + -2099692294850961452L, + 5628155794800251850L, + -4036147416511180551L, + -7941600054572002747L, + -7483400491927447614L, + -720567278261368781L, + 3314031855271606298L, + -5471631794645557473L, + 8887891228392664673L, + -7960828123610685614L, + -766265380117391950L, + -4017904512890559451L, + 3478074185490226921L, + -7553920981498126005L, + 3988562325861820517L, + 209643423615708418L, + -2464819451665246158L, + -8631718977760664612L, + -4893221336143393409L, + 2390264798730683615L, + -8300749389255144164L, + -3549775289570958064L, + 6514441262456966668L, + -7301663820335638615L, + 4181559756778549411L, + 6215253578855337690L, + -7323335092456459405L, + -1860577032441476467L, + 3644299936077808538L, + -5161174126835724701L, + -7779787747613135503L, + -3446338450597548406L, + -2662609220502962318L, + 208946340318274486L, + 922869894074454969L, + -8428909140908329623L, + -6875524699939418906L, + 5154230294972327697L, + -5868880138852165350L, + -2697155020815738737L, + 6278899766774254324L, + -6124877505863871039L, + 6113186870348198684L, + 1328797232741421065L, + 8936960355443139766L, + 9069883653377839816L, + -6698244186639407697L, + 6633988379507542818L, + 4243888593320380368L, + 1299920470993756698L, + 2315187937474071861L, + 806120923801759332L, + -8537792935927015380L, + -751623313460664870L, + 2455098182130434513L, + -3041072155357054618L, + -5209258140949481980L, + -7784651030341623624L, + -8624281235662545565L, + -5185374153462168974L, + -8728622305551122108L, + 3633316488676598179L, + 2341850275669250720L, + 8998800880957295269L, + -2791108801739767859L, + 4207716787796156879L, + -4083554261407892809L, + 2977762250156739855L, + -6066243213313847782L, + -3134677742513834402L, + -5231660756514911289L, + -7916346081138370244L, + 9105509708951212631L, + -3071680532260795719L, + -3152428524199455707L, + -5276930195233923125L, + 1981446637702558747L, + -8822786060285469479L, + -3086453182842996354L, + -7521798164704108718L, + -7460429880600038351L, + -5031515429775225415L, + 5662627828449328757L, + 2804157867790593789L, + -6183934836359652529L, + 2425310972806241292L, + -7877162957672040682L, + -4575453773921540745L, + -6152892230011262930L, + -1554429781063399588L, + 6395550633581619922L, + 948199150697514149L, + 4123518706442132507L, + -8620024481834864148L, + -4627311960537433998L, + -1517263476517287336L, + 3087156144310177979L, + 802387854806242344L, + -8223164854162179626L, + -8876883825341271093L, + 6189924694943538938L, + -558048344469199000L, + -6388815497071843014L, + 7970082794223216108L, + 8943146030443257086L, + 1919558538884824162L, + -5413821296846136841L, + 8482255996292420949L, + -2059351044571046226L, + 8122315934009425936L, + -6002133579485340781L, + 6439465961707132723L, + 2763117897158909339L, + 4241846593057682886L, + -3156374353704014890L, + 3611310604513156987L, + 2539868227324188707L, + -3160603853021599046L, + -6694565052629228305L, + -2829087677596299075L, + -3855421753196086451L, + 8353874633819013271L, + -2485914493713180581L, + 2924901647540244351L, + 140830235769158231L, + 8924525771772034372L, + 1991645829771754924L, + -6409133430531739321L, + -2477349252564343349L, + 7592298137540200578L, + -8706120837264950112L, + 2330049856518978017L, + -1333715564956417750L, + 5321303278236129003L, + 1316603583801631000L, + -2052093890021786856L, + -2212919092132307727L, + -1138248150179747101L, + -7297574785915472699L, + 3159392081609537393L, + 5438969032594710113L, + -1117946266762888661L, + -3513962250060316650L, + -95470470775096400L, + -928547845419412355L, + 3064209748165139149L, + 5570740544374382296L, + -4848606292970499536L, + 1249733847255258336L, + -9081876379081045111L, + -3178350430540128617L, + 4580722282117591455L, + 4910338723691444614L, + -3861107435455294057L, + 2455351552393139588L, + -3098045343671378301L, + 1276702104227748441L, + -8725606894849543465L, + -7043526197674754455L, + 2543751490914779898L, + 1111188191726666289L, + 3299681536744686092L, + -4968407975804173061L, + -8443232222924958642L, + 2692856020311995538L, + -7295992543900831720L, + -835426980056055153L, + -7189216512060259212L, + 1546667140862204220L, + -5157738526808785307L, + -8400112152363165211L, + -2562446629278342489L, + -3984312152746163924L, + 263973571859894620L, + 5863738959863392730L, + -3750469576779228200L, + 2859093520615066384L, + 239574671716835044L, + 1758244848125395099L, + 4692926060224877180L, + 2328985435627410056L, + -712944964417726519L, + 7575628018175957835L, + -6461647485226712981L, + -9175844658802936237L, + -1791894645853433273L, + -3209291319104719345L, + 8435774909159574457L, + 3068904622159492539L, + 6405574310234631665L, + -7236310029621050895L, + 1939741827857698370L, + -2711876483320863546L, + -5191337944005182792L, + 851301927202074099L, + 7817558216393575797L, + -924173671401578135L, + -8870424728276452684L, + -5612135981154918473L, + 5352840780989627332L, + 3115501649750915797L, + -7282764488136203731L, + -4410122159075968274L, + -5112841868993719465L, + 1606611627835962209L, + -2564625118517656156L, + -7347999176364584697L, + -7520586016175454443L, + -3582872246453049220L, + -7208670274224679141L, + 1407185043226639926L, + 5548472899324259498L, + -3424704481698318306L, + -8898045228081312865L, + -5032961205984329240L, + 2319704565344125424L, + -1858090959206557106L, + -1847512527385111193L, + -218817722784924760L, + -4644538017574761086L, + 527762499588866419L, + 7682925460546142196L, + 2618673582975102782L, + -8339358073633623035L, + 4632344075623474881L, + -2634725682046056737L, + 3264353773883015103L, + 3450256920483368564L, + -8453373497678191816L, + 4324811352547234228L, + 5231611966727557421L, + 3935063678731059941L, + 6338309551930394802L, + 6622686033142507173L, + -5278373537512798709L, + -9063940204441257539L, + -6333833756325058415L, + 3799491381076234981L, + 5050905817684546674L, + -796624655126841621L, + 8334872366472578300L, + -5288752267258476166L, + 4335956913966038392L, + -2247074774901543705L, + 8474035569080943503L, + -3170167932314701995L, + 6999756768956410897L, + -4451078577344071588L, + -8433054951584831409L, + -2640652121643463448L, + -7045594934288710931L, + -4036935141669708886L, + -7734407512972194081L, + 2053541054148333962L, + -566653752431971002L, + 1898804146829115409L, + 8507984725723339263L, + -3742788731083462619L, + -614166854038590657L, + 8147682807535759575L, + 2813322236228401990L, + -7697111451322995338L, + 8023578719528819358L, + -1666048881205334172L, + 2861705383918865808L, + -2067264870309406817L, + 1544932780962992751L, + 5752963315823730718L, + 5563418456763501584L, + -956763705026909993L, + -6723021793890249884L, + 8199491799885937348L, + 8254326245904567972L, + 696534455436688862L, + -4526166123204455007L, + -1244479971115743946L, + -4712028527008594695L, + 3845317619056596538L, + 1397508695414938292L, + 5199778266100306999L, + 7649610185133409821L, + -7736979936936405855L, + -1871499676764587199L, + 4089210433244498057L, + -5319342193649020117L, + 6510328602034064204L, + 1177990759783856649L, + -6211536889696831922L, + -2806444732697667079L, + -5534324430749159010L, + -6189402282341917673L, + 6327177260956086170L, + -8199327532062722025L, + 1757637089703623521L, + -1083020196125888231L, + -4027554827881183115L, + 2536452110533397141L, + -5283309880767903892L, + -8726185014741079280L, + 5870565960746070417L, + -5981985584772708231L, + -1932877698882443840L, + -1002343255004640521L, + 4369245457815499473L, + 574307157338267836L, + -9022123090729501652L, + 289683520338718123L, + -5791631171477648402L, + -7088072188409060385L, + -4659987534525277948L, + -6573587402478059370L, + -9147189283662432041L, + -4621406226758810332L, + 3827992897413425855L, + 8237187128340177815L, + -2575127860924571660L, + -5807831166865245102L, + -5362714198312494492L, + 4800564949032048849L, + 6232971559544384156L, + 5346264270546834545L, + 4418021854956695145L, + -2503709442294180811L, + -6705525727229877941L, + 2807916716409994404L, + -140901784876025870L, + 8341454749980902529L, + -1877846120130857988L, + -5151008775080326365L, + 4141948371168606708L, + -2991396496641036974L, + -8231846204849830109L, + 8817247101288954387L, + 8987037987198023072L, + -3653961272252403667L, + -5540876112254432380L, + 6630760576601451124L, + 3952853764187760519L, + -2752207231177565438L, + -8990910782429153994L, + 275029084438740989L, + 4377008995333363792L, + 7821963094129670639L, + 5910345261804604591L, + -4676534586425310858L, + -893427896035022872L, + -5107326322974521170L, + 5928147272454832468L, + -6838714257802993131L, + 3828181535474040080L, + 108432455104664877L, + 6134860905554719891L, + -9006906057728028416L, + -8785087250130628623L, + 5107258923997586783L, + -4184502077870950738L, + -4196994343382319067L, + -3602525630290645804L, + -721602986806918388L, + -685749048932716724L, + -2226124441764103982L, + -8444470437189672337L, + 5967905323104782609L, + -774529365691330376L, + 5317411683068394421L, + 8753729036148149823L, + -2600284926580864832L, + 1501264369203023713L, + -5589106565383836539L, + 2671769607792597675L, + -571916257780128106L, + -466398102722097434L, + -8668321984643614166L, + 7631202114905008803L, + -8647922451448787023L, + 8025381490498356948L, + 6049280950696679244L, + -7696482417187458362L, + 7140438358861456746L, + -4921885565559803566L, + -7027307783313071980L, + 4879598629629415952L, + -7342155744245645378L, + -2263378697656156016L, + 3707257119850556629L, + 2267112971575522392L, + 4213162373130191016L, + 8934898250536865564L, + -2149765792894599153L, + -5375160376931751557L, + 2196544121130659101L, + 1698916734136113996L, + 3433172695894846834L, + -2849259564218003615L, + 3254138956861413927L, + 1285929622626453198L, + -2349127797610817522L, + -1191286947825336074L, + -9055971338481310193L, + -3525928115330914396L, + -3227633136719463166L, + -133501853014392460L, + 1099153576792978915L, + -648473507797745243L, + -8947946509829984393L, + -183277647411867477L, + -8972836557830117056L, + 7599024178448012477L, + -4558685557381095142L, + 4767843848744584145L, + -1522308275842184404L, + -8584574042672861403L, + -1734332735592240813L, + -5832090116698921823L, + -8717779938268738600L, + -1881355893097809021L, + 7715529933819950784L, + -2289162375063823266L, + 5628801095532857454L, + 4961594313236250573L, + 4618832900030681591L, + -2860026598356511432L, + 1961029532371905567L, + -7427116119564073711L, + -7663272674507523073L, + -1432342159197328837L, + -6656742466964663442L, + 1884610673731472834L, + -3810094228658892044L, + -6616291605664442115L, + -6089433736056798518L, + -7473225570871869756L, + -2962461410122376636L, + -7732736326487208707L, + -4443012182604465346L, + -6157220788020380465L, + 4600227015044805999L, + 4469639125734518912L, + -7792518910888390519L, + 1994555386333163764L, + 4369373061497876631L, + -4738249058452865067L, + -5995135073617675417L, + 8575145712582277328L, + -3326852669647946366L, + -2007891227481667403L, + 7761466597038557448L, + -7224144129768088459L, + -6066361559768252258L, + -4068105427650671702L, + -5560889521429203904L, + -4762527649365520713L, + 2694767757294725688L, + -98412761475871782L, + -1686751510820366009L, + -8638747288926132295L, + -3606421426295459375L, + 703911580424568845L, + 3806874684410471199L, + -5118211203482914183L, + 3783835693585708905L, + -4147496567901501893L, + 4328139758484363106L, + 3028068134370267202L, + -5966389813687232408L, + 2195469898148267913L, + -3080166474377317430L, + 6412533502918649688L, + -4801061500654703956L, + -554194900129906123L, + 1486000469436139740L, + -6971589411333019409L, + 2647463349908157318L, + -6754094203714628854L, + 2314399046579224435L, + -6177383374280917075L, + -5619632493646738964L, + -7301831206207675015L, + -5527516975398904813L, + -7206298956882517419L, + -1535337994919517848L, + 725107219148423471L, + 1938195538047669437L, + 1028829726878266547L, + 3981352596771855719L, + 4637441575637536278L, + -567364300216533096L, + 4215820779392244698L, + 5791138156269639416L, + 527001488112788484L, + -4390338125863921979L, + 5557055272452535368L, + -205316410586789577L, + 6952133288635206796L, + -7457518070084443694L, + 2002018537802900078L, + 1561023860546606398L, + 3006183850758749007L, + -1361037422909233361L, + -4203933835330884180L, + 7500988945823273736L, + -3010872765453549672L, + -3781827987408697259L, + 7460277383018710734L, + 5250710645655626569L, + 1109553850343924028L, + -6498085059809326090L, + -5879222670885240061L, + 6210613100795379620L, + -5759675374559290972L, + 2824738880545011656L, + 3213468672819532759L, + 514328750496380347L, + 4470285007717204101L, + 2269240343629252129L, + 8714859525098129755L, + -6932578361476642118L, + 3219949239213817308L, + -974585298959970878L, + 6482527911604968876L, + 889153561428168470L, + -8207616222981108363L, + 2386860797138412452L, + -6749686321997906685L, + -1105424552884318985L, + -3137963539903752699L, + -5296550634024189868L, + 2919221292190747486L, + -3991521756182858814L, + 3802413126716557908L, + 4556158013211621930L, + -1956520472596138305L, + -1667618395239727751L, + -4948155010712448139L, + -2667546434479018044L, + -5192951416537530780L, + 4474564860866849514L, + 6795504197096101870L, + 348555520492747776L, + -9152654684800879935L, + -139520144005307559L, + 8655115078308054377L, + 4640578432082008138L, + 8526214307008571064L, + -7079091919397494753L, + -4852301075482608956L, + -6726381834527599283L, + -467175742480032731L, + 5092513639393893997L, + -916781769295487406L, + -3306005301217276910L, + 5711239369216246603L, + 7411369067342514714L, + -137089609471843551L, + 2197853544547148264L, + 6994895994975015585L, + -3993584670641567357L, + 7324113989979846776L, + 4848201612974985071L, + -2319141888027790806L, + -7727572350242351429L, + 3611228677421118756L, + 3254031939911056022L, + 1315862663037871882L, + 2762719496333050774L, + 2441476684596910583L, + -1751985778109806355L, + 3156518557955714028L, + -7474525109128332157L, + -402634945481420093L, + 3711042493776857096L, + -526618219268616930L, + -8956423818433397438L, + 3318951429850234648L, + -4065748355754556535L, + -2974465318794034149L, + 9156201933336414671L, + -1224004278953882958L, + -5567810197150710613L, + 7645667176564158039L, + 7437954892140634061L, + 8595047667824297631L, + -4227841629446459104L, + -4073313779073810355L, + 764623093768368301L, + 4502563456929761688L, + 1027370723462817766L, + 7668869338814612684L, + -4780350365503382825L, + -6389061999435806787L, + -2133237830821026919L, + -618977682776693149L, + 467656057704319257L, + -6754479852919060751L, + -121796624546305099L, + -6164861615484187016L, + -8568598162483564153L, + -8182644091745100549L, + -3989631051916738549L, + -3812515520109109155L, + 5458479505950940580L, + -4068063356781230185L, + -2830766632873229698L, + -7592354330098913572L, + 5323147076973602219L, + 462800867816435413L, + 4002154584204048905L, + -803837213195276249L, + 270846859760410932L, + 339186719055655409L, + -1681073433226249949L, + -3172364168133842187L, + 4471576722877991666L, + 5796602822306813285L, + -7918394505018135767L, + -8099706435104488972L, + 3225305587851029418L, + -4366886220054887809L, + 7732358946751522729L, + -228816160482375387L, + -6429545033940023762L, + -4874531170284168803L, + -7919754354938613725L, + 4818550076091948962L, + 3907701057522316102L, + -2162109673539899314L, + -6296577330837677905L, + -5038523314786213767L, + -4182256071671167089L, + 2347804671767305901L, + 8781747195783722684L, + 5464112250608435856L, + 270499223000052613L, + 5387476652934255975L, + -2665753069813354951L, + -6640316903187366435L, + 5182130073111288069L, + 3324630100168604545L, + 6092224834024861844L, + -7314979478990434840L, + 2475323565628074124L, + 3744881942029260381L, + -4468245448047387416L, + -2514532843437356755L, + -8460931029051770120L, + 6058982121000846509L, + -5771467892492359246L, + 4284427580292476574L, + -4502826197302040607L, + -8909965133023702444L, + -5152825667036557377L, + -9001319942906464381L, + 8783326653870239059L, + 7169538748654303504L, + -7206711339673245443L, + -959892259265562431L, + -1673323329893911437L, + -5827914418805049723L, + -820830695253715046L, + -5782181341435499931L, + 2663734005752892035L, + 6987511185271585413L, + 1292089443730939651L, + 5587170596809636807L, + 8237809229146017083L, + -2235781308356196513L, + 5423273201690025713L, + -827014178432784464L, + 4410575469603649344L, + -4472642034035214939L, + 5360193252716249224L, + -4572235983836835323L, + -5433653902594010857L, + 4134790485921001466L, + 4485288889906709425L, + 1685824402735587758L, + 6091818520229922279L, + -212523426857309616L, + 8873690209863775893L, + -8812432523459654235L, + 8103047819338531286L, + 4614534509558570387L, + 4229082172984667846L, + 5484460792243331111L, + -2385763800014084246L, + 7030455160712580607L, + -4237997225503760625L, + -8124291737715145061L, + 6327782024255912635L, + -1059957986215325879L, + -4603394046555224246L, + -412280426794415941L, + -3912022758691365061L, + 8274283857906326279L, + -6679687570538459747L, + -6155809572519276859L, + -341344339192464824L, + 4137861550441588415L, + -6618940267671493988L, + -7291675023689911653L, + -7953871974818004574L, + -397153165830243551L, + 4399741193484513820L, + -7321827371527026850L, + 1338155597001139997L, + -7945100475342274903L, + 4522579580699730675L, + -1777997817650119183L, + -5064101783437092203L, + 1113553310062801693L, + -5709720543205442481L, + 772882345518435045L, + 8903336589907078605L, + -8789465120959251318L, + -7834044567177051539L, + 1770279151425541006L, + -4941283968572768930L, + -8127231558741248281L, + 737747628416269099L, + 1574449851957266285L, + -471282776174276539L, + 6739952936193376447L, + -2424982200476312714L, + 176022186483763915L, + 347356729555692814L, + 7550980861784622262L, + -6474882761637742162L, + 6769254801287215843L, + -7346044586598503820L, + 1815045574884249754L, + -4240219227462571370L, + -649819224919779208L, + -3697860834931443057L, + 4209607762757612835L, + 5512379227441488333L, + 2554702396243693813L, + -33063197416101018L, + 6204387436027047110L, + 1121696558750946811L, + -67713675745955613L, + 2900236341998750711L, + 4072627124871947361L, + 3411250942283240973L, + 3459019187218245290L, + -4931935198846519054L, + 8420402881327935528L, + -2700073972687127894L, + 4135622085465759778L, + 3115364578959809417L, + 7905907040079822152L, + 3117202331600018366L, + -6912405766950946927L, + -4526890208931001416L, + -8362196017109360491L, + 7990163642449120866L, + 8921333090931858791L, + -7835160532401884454L, + 2597345228860385242L, + -2019901582135813985L, + -734731610197007345L, + -4478738615320414333L, + -7971363857175568029L, + -4550695664824391599L, + 7004896942426055925L, + 3243444764663891458L, + 8221182849925835178L, + 8413639868002181795L, + -7599742913553767497L, + -4861871033227348667L, + 7180813616057727196L, + 4110358466985293134L, + -9163301540202343656L, + 7407431836530456233L, + 7168833492994704184L, + -3225184215180636592L, + 8550286352383434501L, + -4037242040051553894L, + -7019860459089371337L, + 6499568859919656194L, + -6517870390876058597L, + -8816903563531564452L, + -5488567103311833696L, + 7162975208461021799L, + 3231150263108104601L, + -6472825090155306196L, + -7112727281349161724L, + -8908480908774446053L, + -162138742916032914L, + -4934765719133081654L, + -5383597847234182085L, + -1457750799424768103L, + 2062788467226997042L, + 5195212083662151172L, + -7086725269988157115L, + 3216790230270684188L, + -6772983200597124262L, + 2139536380152189149L, + 2783400616608816134L, + -6309269121238725342L, + 8703327852945446994L, + 5986578967392046329L, + -8686234791137218952L, + 7147175926193618258L, + 2812520130705527307L, + 1012516456501023939L, + 7796658848573086967L, + 2642184550087192362L, + 2521303561751617614L, + -2372355039844318123L, + -7982908463432899233L, + -4773586301827797121L, + 4040904044293393487L, + -142670900232845920L, + -10691804562559377L, + 8453630879397574208L, + 5612078661433375152L, + -3592401183831123809L, + -1194636486876965628L, + 7144612844993582305L, + 5952025594559102453L, + 7768859735998504182L, + -9046596974248194873L, + -6171084369920910835L, + 1781418400960307869L, + 5081999630281512875L, + -5147831879244994539L, + -6245492622672631422L, + -8665204890652827995L, + -1175718303513980672L, + 8885449897820005156L, + -328163209321586593L, + -1445525508305375763L, + -2100999238041350502L, + 7410786050561217868L, + -7914164711220348362L, + -2906200250494490361L, + -867790952312765711L, + 5887767909251264450L, + -5789450489200739242L, + 1662159886119924244L, + 5012361370472355454L, + 3429745384914079292L, + -4445208736020219814L, + -5413763295704138557L, + 839374495111075513L, + -7648977736915073173L, + -3664832624688924839L, + 7158412277573249226L, + 7779305491962558566L, + 8039313349173431072L, + -4220847824862505833L, + -1939839155925934724L, + -8034010027834756500L, + 8475758752811450501L, + 1099214246266343746L, + 9186354033975902114L, + 2335697942068596836L, + 5125601667360226370L, + 6606318187238773479L, + -1182364933194642155L, + -1282696136769309305L, + 1154559731683162717L, + 2886049233756462774L, + 4825677492212933300L, + -9121350732551109877L, + -877752678277742358L, + -3266764465431864389L, + -1914199636241277795L, + -4687907120417383299L, + -474253911596715394L, + -7075290400477487025L, + 8134957124130148548L, + -2992238854808660187L, + 5996516183600836003L, + -371549095799671162L, + 3902975175457565825L, + 6605036583318392521L, + 1891100275270423451L, + 2119245665259072674L, + -834774890825819923L, + -231771124221128734L, + 3133196876747178672L, + 7298692169226203885L, + 7126455091552696586L, + -2143648506542037333L, + 2865309216991778464L, + -582169278536046195L, + 8080177625773872889L, + -2641866597771089394L, + -4210759777426999986L, + 8940623302154716559L, + 8753678355208533280L, + -6281297936039038456L, + -4466014453281785565L, + 6273362062923197148L, + 2333217083667471091L, + -2134695293413683177L, + 1638282373040657672L, + 3200622258378038793L, + -8777912174432066160L, + 4509402067996738269L, + -5444623700171973227L, + -4861257960719874399L, + -2931845644152220868L, + -2415035074251453041L, + -3415608992526650142L, + -1100060277548286709L, + -7950756431533405941L, + 2529778543681983619L, + -2509511542105356611L, + 25235701976844069L, + 3512243450460933893L, + 5497081699936367558L, + 8834833749235004269L, + -8786955172657476976L, + -2806229680204644453L, + -5310949673572257587L, + 7180989110601385791L, + 4574812998786692932L, + -7191136183375597108L, + 7817612065160053901L, + 4092147258927215079L, + -916694886327147203L, + -8155481011317235899L, + -6577214469178899288L, + -4704682976594284594L, + -970000750564611255L, + 6392037803435901919L, + 4653466442162924160L, + -4217569099833350175L, + -7494295064988163591L, + 268071204677339466L, + -3128139626778549626L, + -8490295735340959824L, + -5162368829222403127L, + -4379157681365371219L, + -4505869932044746193L, + -7725004848904746158L, + -1077347489733049759L, + 4372692724364737369L, + -6095523387109702205L, + 866555760732064401L, + -6043383891507219565L, + -5064298145687783678L, + -8284554766413268444L, + 4358509246174021158L, + -314402459279271878L, + 4534052702364464050L, + -5069975264209271430L, + 7618881160105474363L, + 4167592104901771551L, + 2277499839812963141L, + -5797737740917833733L, + 5386843611229288306L, + 322032948055534721L, + 8623908495470433985L, + 1464656873108399270L, + -143110847782655873L, + -3683505493125515417L, + 5263884653798534228L, + -5596816932431872850L, + 449263668055475580L, + -8209880385374160761L, + -6160876842633556933L, + -2822510119276015598L, + -1867833971803598158L, + -2743011208375680513L, + -562758870972224424L, + 5241707884356795802L, + 3044382044884310303L, + 4240643424518839454L, + -7202731734581844883L, + -8098501199143125283L, + -2550459180607677020L, + -1776717083783659251L, + -2343369089757631624L, + -6293279254462751659L, + -9100627021059872276L, + -1298100985130924363L, + 3390116780901102550L, + -4663999614093100429L, + 6916372370306791572L, + 1488349423055656442L, + 6773020852755024150L, + -7005014351468554871L, + -4753926923183579314L, + 5415870192658316069L, + -2670881940811475410L, + -7225213211793183097L, + -5703028807893997804L, + 6561444537664669662L, + 8939981796276591301L, + 6017910964940092953L, + 4500890776998912544L, + -1835018042586347444L, + -4191687948466793374L, + 4106435482907441086L, + -6130167349217050086L, + 620129892796426300L, + -6144158488464216798L, + -625006850515938527L, + -6682172611475406987L, + 1220842624016183584L, + -7098540157067814615L, + -4378743347226734130L, + -6508042393772984279L, + 5289282493574993598L, + -6781000719696595982L, + 3322666381578332368L, + -8173363279507413324L, + -3603049973704190207L, + -4316988796658196446L, + 914989291445423876L, + -305370752767861151L, + -6987550192802158001L, + -942676483343861967L, + 539036846465448158L, + 1605373100913987077L, + 7713068526230669637L, + 7241900405827926293L, + 186408038263119881L, + -2429472274603752977L, + -5720789098334319209L, + -6674769505767916301L, + -581393540490176967L, + 3124744789645879825L, + -5602915602343937931L, + 3263507419526132695L, + 6937077332985554718L, + -7919624999578199393L, + 6556190618267765484L, + 5682381095734864238L, + 7614251273120089370L, + 3395157685499349978L, + -6398328093992251036L, + -2651093395236575804L, + -2097470820892650054L, + -7267148748500151232L, + 5507274834982481157L, + -2194323672581532616L, + 2269493654210886217L, + -4216275761811372636L, + 7228709978053803804L, + 1544682503099095700L, + -8135200911288478327L, + 7339704802803690870L, + -9063598666954112733L, + 4249185982522288588L, + -4695745996091883154L, + 2627137268581003083L, + -2578238879441406084L, + 2429552460105156204L, + -5016405662860787559L, + 1213685060600888916L, + 5207480625629771054L, + -9039842400434871721L, + 9199909831090107055L, + -3171515520826634527L, + -1366973376209295366L, + -6750324026060931870L, + 8743899778045759827L, + -8621966377322960273L, + 4838450322903886505L, + 1788019071908015560L, + 4913822197134872906L, + 8309346613152344445L, + 7951951012499331460L, + -4689530477253691656L, + -375319494882093024L, + -1845044534505086395L, + -8796776862070375491L, + 5018318155817526800L, + 2586522091503534478L, + -4968582762284083199L, + -4927465852300428021L, + -2580812699959118622L, + -4904418483836862133L, + 4578001388519224564L, + -145427029490022812L, + 5605281842155781953L, + -8269674765102782771L, + 4873099922414055552L, + 2170749688227700120L, + 4825942009324106796L, + 1792050877115378285L, + -6605853503524394834L, + -3916692778840952841L, + -1986097963548896269L, + 7892537689540433594L, + -714136291891260346L, + -1648197774385026330L, + 3795404391823901459L, + -1987978550021718355L, + 8998001289418857599L, + -3968668700060172110L, + -5244271268838414883L, + 1096876802937588911L, + 4954206823378648244L, + 5569423710280172585L, + 179070914051875895L, + -1379762138674772955L, + -6297783890085466379L, + 8673286033209200164L, + -209771371089403783L, + -8371158182924445911L, + -7703744831611511871L, + 1612557317982335369L, + 1602832695339190345L, + -5248812496760442693L, + -555465681086935620L, + 2520493230458560658L, + -6666085761216925275L, + 7883921169936066300L, + 3038683421696596159L, + 5845618097380867812L, + -6239014819988016480L, + -8753088746243740226L, + -2330652362011359445L, + 840642889332131730L, + 4416624017275726341L, + 4690979542527364119L, + 5378555482069527564L, + 1969844668631546234L, + -7848379025576209733L, + 1977110971269560399L, + 2026765724811466304L, + 9004994755727389006L, + -2875238066205385075L, + -6183036361941845026L, + -2386657827628040463L, + -4350668673682921339L, + 5862965863197982604L, + -8441011186955249281L, + -7186928257432232499L, + 4577738672815669344L, + -4699309429317703093L, + 1727205267222358381L, + -6451216071831055595L, + -3419094732699739587L, + -9202486234602916474L, + 7995498040430401544L, + 2322468220197016729L, + 6579662275874920800L, + 7479989025114804641L, + 7484110942964095819L, + 2864220530563314806L, + -8398057079307137296L, + 6439003393908427189L, + -7835388314568774857L, + 5595140202807403856L, + -587980358622679054L, + 5729028629565035445L, + 7294164757654120979L, + -7034561723919575604L, + 5344573969684937116L, + 3196215998156871328L, + -1123378572589443417L, + 6074546259209406933L, + 2893792398378492069L, + -4483476567799717014L, + -3363408847369344926L, + 7141254867533804482L, + -5940527802490951736L, + -1094882559952364017L, + 8329622896679444321L, + -3173141862687107863L, + -7280018015022509268L, + -2089330837882663590L, + -354683141083920270L, + -4079664314326720324L, + 7616886288174535159L, + 8554847071096590810L, + -8173759087524336468L, + -3448863502458656393L, + -5738508186162418231L, + -5111997041556312344L, + -8550681297377936354L, + -4330402296580745208L, + 67088796475747867L, + -6874504283145514740L, + 8707156726330695854L, + -8450062796293630088L, + 327731584813515290L, + 7304259244110792264L, + 419104563434390334L, + -9153064691975026716L, + 7490483813653854554L, + 7077589656341495466L, + -5945353789867862552L, + 5486988927099214347L, + 4267202661349380766L, + -735203469934508862L, + 300049113155592253L, + 6668837619034437534L, + 213993526072465908L, + 8835245471465274914L, + 8183790714937497863L, + 8258711456036176276L, + 7136444522589690162L, + 1211565004822707193L, + 1989924245575051080L, + -218487864794566557L, + 2952924548635767820L, + -6462002167772557833L, + 5913246427219973975L, + -3174533491330927888L, + -8785311174506482406L, + -6684494991311010323L, + -2482601218412888093L, + -7285335761215045787L, + 1211034790718408728L, + -9100855059113049869L, + -1486270963118123907L, + 5275833683049609995L, + 8459420716417000011L, + 5533842052546250233L, + -6743116187090502104L, + -8218081861923503701L, + 5761628519765780332L, + 183841883985945582L, + 6376290782250169855L, + -775214822639981928L, + -8823028331753034219L, + -7585331840565087967L, + 2975478445973141542L, + -5063889138086837402L, + -2979700995440085783L, + -1219607777405733761L, + -7530208062940995205L, + 1583477077636770548L, + 687603337248263893L, + -7494884423475008422L, + 8422729696142094927L, + -2688483407638967316L, + 3899397712568319078L, + 7271622649506188466L, + 5081817906386987096L, + -916174376204972738L, + 1540653617218284471L, + -9108776863627327658L, + 409951124500633339L, + -1411012041120099174L, + 5254818079101287689L, + 4655192715659848616L, + -4055996322312971483L, + -3525221214301544451L, + -857176511645353866L, + -9137977946340218096L, + -2464138987127699380L, + -1572944913716776527L, + -5382357127457681304L, + 3400456476820781019L, + 7092666713014777182L, + -1016869719262402776L, + -4296380651220352294L, + -3137955217832540411L, + 6899747201222115049L, + 5612318743221858846L, + -3082611894693908037L, + -8765593464570788072L, + -8518170211087455673L, + 4127210266223470126L, + -480745760307138952L, + 6366437837796426817L, + 8633027726559958619L, + -4876440158972240126L, + 1910667810356463924L, + 525819879391508442L, + 728364790223504935L, + 1801852490210258450L, + 1693556137065594317L, + 7512677136171374024L, + -8502671549747219751L, + 6750465734377947195L, + 79926463486212071L, + -1606928706353092712L, + 205498205560429840L, + -8511147442275932832L, + -8428335428540761347L, + -7426388905907916885L, + -6514050737271088879L, + -2450758388754574856L, + -5091230991480586360L, + -5169952131144179624L, + 4447490729022261013L, + -3692318537052447395L, + 1078660998337165744L, + -3916568308067450676L, + 6024800331836073525L, + -8107333408030092167L, + -7607289536558565257L, + 5247807205554828460L, + 136732938448579124L, + -7158883148260417938L, + -6099971793579365853L, + 4854881589738432309L, + 7711527295835389228L, + -8549957081212159598L, + -7303058748474201722L, + -7681406204943895241L, + -4881190754207950300L, + -6035776958688302906L, + 7214212236240295751L, + 1981012208386034732L, + -1049989180117070494L, + 3924935253660959406L, + 512859785555014414L, + 5908617682678575542L, + 6758310316951005278L, + 6189924959604816301L, + -4920405470515789427L, + -2117869367297703052L, + 6707816747990551118L, + -4980047489747530190L, + -7365247289662920271L, + -5342685489927387987L, + -8590216048531947264L, + 6817356446955049603L, + -1378280258813293636L, + -3592400710075707758L, + -8871693364702999347L, + -6373833613639184348L, + 4797638018086956108L, + -5647576741545902954L, + -7901112803680191059L, + -1362942868170890798L, + -5813135684692802772L, + -711135680335633766L, + 1062354220967606079L, + -7871043181645557885L, + 6112341712359859833L, + 7916891160508372008L, + -8003652862887082098L, + -2396517101239953792L, + 4370059680750956803L, + 1363641917746765215L, + -5876946297329039758L, + -103128310036998617L, + -3800790044039752368L, + 5199080865813174926L, + 5691839759690453434L, + 8175397015029172130L, + 480520985319940721L, + -8578753082637254739L, + -6716879961856683419L, + 3597461575855927530L, + 4979191387439246058L, + -8320455146441525699L, + -2114691132483379200L, + -4537130860792099169L, + -5718306086279916956L, + 5136790107805442544L, + 7289096860375296487L, + 2880058958308819603L, + 3767398060224293737L, + -492404481239348279L, + 9012315970305384994L, + -2684151666886841943L, + 7272790214055332206L, + -965422762587779909L, + -5443848734878691959L, + -8153873600234827448L, + 2490597961970604400L, + 2281204882791254127L, + 9133290251048762192L, + -1491895733843702610L, + -3474774710279245800L, + 4612394989169216779L, + 2622616589522119419L, + 4355987380154620492L, + -2850604048799570616L, + -4107832232055765572L, + -3723943963188375533L, + -8366293232338256548L, + -8701054798330196757L, + 8878901433891377891L, + 7295106607144564961L, + 5312667635062107659L, + -2358396954926641322L, + -4984697743423066531L, + 8939820283882288854L, + 4023787057481178052L, + 4597747073035337711L, + -3865522208345382306L, + 6560083733272461230L, + 2427578708615942986L, + 221210573151544106L, + -694084245105944199L, + 2078710449028907801L, + -823943775911009298L, + 6602372026224749570L, + -6054136931573131159L, + 601483741465077007L, + 6742891241881907768L, + 4262941380660230060L, + -2511197275383350546L, + -9092751631744236653L, + -4870448764794484926L, + 1830385011126178734L, + -6596888154152123634L, + 5648158405496157638L, + 6386181707589856071L, + 3363359913697235141L, + -7056659780210553822L, + -5261178176756493055L, + -3944960812874472523L, + 2763181386445379193L, + -2619663536437942233L, + 8897272156543942808L, + -1257206140816012022L, + 5942440353528557164L, + 4786157224137440415L, + -9220126986536151642L, + 4182399256221021027L, + 5315354483278533273L, + 8269371862567018757L, + -7830778159860165874L, + -4812100746794420620L, + 3498354375067608851L, + -746722368941475584L, + 7380715032997081755L, + 5189957981103089885L, + -4300428216272672646L, + -408627655218877478L, + 3669295430170749153L, + -3178922344308130598L, + 808687805654478372L, + 7382854145017135524L, + -6443473827958318421L, + -3243447797010153128L, + -1263178138991133398L, + 8750726774705960543L, + 6533471826240257695L, + -7394781107965678936L, + 7513264927729266721L, + -3004378607368189670L, + -6171795523163885499L, + -5383549323957030811L, + 1014976843641973640L, + 2432193004343470889L, + -2321713758391047034L, + -5925760547403348951L, + 236543589293463223L, + -6902103426228510687L, + 5049656219947439343L, + 5906696563051122955L, + -6356958402903730770L, + 7486754190124721854L, + -6788905906689198314L, + 7381793004093637930L, + -4615937202128935315L, + -5266672324677452216L, + 1047319090632526857L, + 9103083281304922244L, + -8812437015774444320L, + -4970183476407639031L, + -5247957782476148736L, + 4465954112135309385L, + -1053934358778018400L, + 5829139887286261453L, + 4669463005092905624L, + -3286153457025266798L, + 6416979317993515170L, + 842322401817513616L, + -1776383023933641969L, + -8880210007231865557L, + 4508732217351572993L, + 1193868998902473261L, + 1613803703795008000L, + 7204477604144047047L, + -8681096723143103693L, + -1746910701409113306L, + -8920378322388987992L, + -8966483163014777443L, + 2824165487928805094L, + -5662128102397495131L, + -6624810964386882286L, + 5452692340292941871L, + 4316228119275391983L, + -9085964721275713953L, + -2133433404692719643L, + -7343693486447937998L, + 1109852172632293793L, + 1921023425304227346L, + 4854131887624741149L, + -8634651654935008313L, + -4727747937541913857L, + 245894689954376778L, + -1171354806284191550L, + -4449375760321500296L, + -2278035820133972979L, + 7026254152720723131L, + -5122868976531507196L, + -5791020171604844054L, + 1901595461796531398L, + -4888600188203895159L, + 5238583255328115684L, + 8191725727925819882L, + 6907331918345427440L, + -8330998437541118229L, + -7677204855776214746L, + 3733289736446750667L, + -6086367961329321564L, + -2223139316713310111L, + 5551603720291777494L, + -7284366962105424622L, + 8307035520655908816L, + 3515558653608239510L, + -2623185163047066159L, + -2881473020374695697L, + -3119109298045318191L, + 3915842281774372758L, + 4341838354106623860L, + 3536460086838807366L, + -400436201916140511L, + 1034940505346304444L, + -5677328290907787965L, + 3241577004049148165L, + -2177296903540985003L, + 1224705836089007055L, + -7226703706701449257L, + -5217415576556159333L, + 2723639485365257427L, + 3532882935985140762L, + -2367665914582725528L, + -1126240810191393257L, + 6572389991681822664L, + 3742078454964142074L, + 2537741859858174488L, + 2863650720786458695L, + 4444554472903165566L, + 4972147385910153832L, + 565306137953874174L, + 8228468642079060801L, + 3686959913775111096L, + 5015958178622222071L, + 5595710504305494790L, + 3174461843483976916L, + 1297058991090722108L, + -2693601104595504655L, + -3961646960717704540L, + -329224545254449497L, + 8172319141947522776L, + -3283750417712288364L, + 1484324135840360777L, + -4101313183342306762L, + 487423326160209394L, + -6984064475638587471L, + 8613232447441028099L, + 1138585794312519742L, + -5219522830444455097L, + -7068591267064606505L, + -214092808701416145L, + -2087748990108944657L, + 293814116254359703L, + 7396092072095010078L, + 1104271143132319796L, + 5950063587854161963L, + 1918000905829023199L, + 3382742654219329797L, + -7668064903330744354L, + 6592480311131388529L, + 3771018342787175035L, + -9209379343054099077L, + 8809433506817785437L, + 3622962127039251936L, + 4637085440835592271L, + 6356420981957532639L, + -6037359062089609360L, + 2809649815120543037L, + 4910545367671356353L, + -3641944013579376181L, + -4828543933815929748L, + -816942255851701146L, + 4500737028494484698L, + -5360859409398459244L, + -980188011105516319L, + -5341147405229376051L, + -5059204503101732424L, + 2323241341608001835L, + -7234489726660109408L, + -4399342489059768231L, + 568957892278445175L, + -3128288682699716902L, + 268059501110939604L, + 8869377529779418169L, + -5191201845817789231L, + 8742584095090015507L, + -1833031289184026905L, + 441773167769005703L, + -2862985803782167939L, + -2217136279577453892L, + -4699777063743038799L, + 2319030942204069894L, + -3096829301818651315L, + 2152089781530614740L, + 3591093109998414360L, + 3737787276968062484L, + -2075424185432267668L, + -1313631551970774685L, + -4919910057472342658L, + -1163170530272854872L, + -3783140882996568908L, + -8037533461827223438L, + 5147544332470383179L, + 1327994358379982364L, + 4326125443692555139L, + -1720554764987678589L, + -6224447350716142955L, + -3664233167161816084L, + -1358465093069484872L, + -3170767669678732241L, + 3175800087146479659L, + -16337625285930414L, + 4460646835363181976L, + -6184155055121584051L, + 8105205207275831311L, + 364645839147141988L, + -3252358421106878137L, + -2379855386905973850L, + -717996509442787349L, + 7039157268142466226L, + 8799412946070712593L, + -2256794007843286070L, + -3026828459050443467L, + 6316354959643887085L, + -632743241481339103L, + 9192761499170372867L, + 7519964503218211187L, + -3171788476130391814L, + 4205532823146854278L, + 6513522002710255853L, + 4968793986534390139L, + 7924914011447575185L, + 3506146014983106198L, + 8511722175131586351L, + -3535216109813816630L, + 3043419627940964079L, + 1989151438749037821L, + 7233464223954842358L, + -3249615372439963990L, + -8665368429824794064L, + -648378579874199315L, + -4727955777856631607L, + -3689595611110413143L, + 3856183988075237273L, + 5517263844496266427L, + -2433339568447789451L, + 6589509038357236405L, + -6774119612186335761L, + -4350036823275823154L, + 5834187175154047558L, + -3767301317720281706L, + -8702001427232534750L, + 94015559239255499L, + -4379700402807826L, + -1859937611212626430L, + 1226887111095682425L, + -1185076345898896498L, + -7829178625122620180L, + -2280062727697501740L, + 2556040939242422304L, + 6251964074628081557L, + 3066879182290958720L, + -8785644387968277547L, + -4488264477615612586L, + 8127606717194526874L, + 4890787706249869594L, + 6356833732756963227L, + 5174834866809420309L, + 2027973333647796824L, + 8053801885705963745L, + -6944307380006370243L, + 3113788140330654611L, + -2986910451567880470L, + 2425903292748474372L, + -1715269818440437717L, + 74338710306223399L, + 5132849055217923687L, + -6714922651557874917L, + -1476767669230945550L, + 6267869827386314060L, + 2151492872494414422L, + -188287405141817418L, + -2396141142455784570L, + -6107851785102021570L, + 2899506268788328800L, + -7955799538392167846L, + -8939834619099069255L, + -2962366035946053462L, + 3123384032637701312L, + -6706608866229291712L, + -3500046218323398125L, + -168870750581166069L, + 694099585994227916L, + 430038091926664816L, + 1624356164486366102L, + 4334130261304381128L, + -7324629223026415329L, + 8823152808567544116L, + -8620326148777841379L, + -788126204987848665L, + -8814182475375947241L, + 1080002348337528081L, + 3043074730722911830L, + 8234596790989448752L, + 4608358602898896255L, + 2343398753207867914L, + -266697139298886785L, + -159260171872612558L, + 4370044052923372524L, + -2995614366415980410L, + -4209600344306251016L, + -8755371846184338683L, + -3955855588499799050L, + -6787638727374739702L, + -8849461119575970289L, + 8716688164664398086L, + 1514577502053504108L, + 2240729936627952880L, + 2838465136424227986L, + -1487161195056206463L, + -391895021770092123L, + -717250607935411377L, + 725101643113018626L, + 2018234564447318861L, + -5254575322305083709L, + 4424742596549423606L, + 5662970072122589602L, + 3130397907087802883L, + 8049486087948419299L, + 5557801586424368035L, + -7085534093136275857L, + 5600569740806125553L, + 4128462226512133482L, + -1574925284503437735L, + -5135068613676616410L, + 7314046845044324564L, + -3686747832999142812L, + -1564972575538757040L, + 1120348884617118977L, + 3412879446395492399L, + 6962651138322613963L, + 877006726541596979L, + -7866734399584535627L, + 8572173997988387711L, + 3835382868124934929L, + -2583877131516514905L, + -5102649011667592384L, + -4798459575624269557L, + -8156429235664983329L, + -6239845266330519720L, + -1914747524813276529L, + 5363997714419355781L, + 9210533546107024609L, + -5245165629299500976L, + -5193672401549237041L, + 6597128830638074557L, + -5969845161062876521L, + -2445089653030403139L, + -4797981019593561429L, + -1962888612492761260L, + 1803013398616297242L, + 8744887681327442130L, + 5851196282496012008L, + 892128523146305717L, + 4170022229766562081L, + -2134478426920707338L, + 1238027773513435748L, + 8866916391213127576L, + -5827099544905007258L, + -1552818987126555097L, + 1979982077379021084L, + 3998394901457623548L, + 2787580374700656688L, + 8372209727011402499L, + 3409775566082298245L, + 1114413850985679686L, + -609417232397692848L, + 1762759225268672019L, + -378983625905076170L, + 7435306721054054073L, + -5155196407132036358L, + -1668786196380559129L, + 4519643915893375417L, + -8609870523645938036L, + 8590593064246052287L, + -7126254452521759890L, + -2826314600096007100L, + 1624568634286818020L, + -450700576225246242L, + 7539390560191158137L, + -2188075991300573837L, + -4681497720947957856L, + -4688143896220383919L, + -4305920512968147039L, + 2656654774987994840L, + -4854606985975851256L, + -5361383744936804655L, + -8947485315238255267L, + 3311598196079410229L, + 607952732017041432L, + 4481836561581728625L, + 1856670507280870266L, + -8371889865268432118L, + -794649732821127929L, + -6144467833645861578L, + -5870596264115217421L, + 1547182795679877050L, + 3554393108243259363L, + 6096915670896392585L, + -7585113688284079403L, + 6283800140108182083L, + 7325444638523598785L, + -2676741791420355695L, + 7399210828703529226L, + -5153686314010544980L, + 4553182987876882087L, + -8475602433165535745L, + -7549754731031245776L, + 383864735074387336L, + -1462360910626047142L, + -2503433555198690048L, + 7124680608501705883L, }; public static final long[] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = { - -5752995443491633966L, - 6697150685477982789L, - -8292226578951944721L, - 8469039529317823308L, - -2857784829002285502L, - 2708946207299695398L, - -475923488709545204L, - -6776550864174025842L, - 5997435870397431563L, - -1413893264211963655L, - -2557925560926552642L, - -7786449276288726217L, - 2663862252392472519L, - 8293182564608143680L, - -4991485761665135445L, - -4260167493401566131L, - 8397271794406387881L, - 2767712210800417827L, - 5643454605919104416L, - -2096221407055692639L, - 4164971193688274917L, - 2012618980459220155L, - 4502510481524221164L, - -9150753967845211809L, - 2109736127223229935L, - 1705328223411648698L, - -540252590844239442L, - -8448139437911662946L, - -9172921965178401452L, - -5901063484397960162L, - 8990179058523403886L, - 3191587668216080419L, - -1505157133869540426L, - 4826297514018361126L, - -506720607717191353L, - 546407899098652120L, - 3565976246504851323L, - -7513490578875853277L, - 5136885717551856091L, - -1235315857278978092L, - -5210210379482210601L, - -2670168613513456171L, - -4576802255731115784L, - -5498085225412524972L, - 5454622260446372900L, - -3491156961084957616L, - -2040190370914817596L, - 8748880751719855958L, - -6066272418698883734L, - -8123169723410338681L, - -3402048629088769519L, - -9050773182933316170L, - 9109683037362136984L, - 8292736658273756483L, - 5864675646204731276L, - -3410199798914438762L, - 6375136202365522231L, - 6084483678447018976L, - 4341319149581895135L, - -2617192247437531424L, - -7803896693111046938L, - 6612714826762703589L, - -2604165952446921239L, - 3956924213727943389L, - 1828772354490899965L, - 4565769277738155679L, - -2552163583152823111L, - -7282771451698115771L, - 1541537288639310430L, - -1260053141177242892L, - 4470999817094301913L, - -3084949271203311242L, - -7546393470851473997L, - -8966028816522567997L, - 1051341974704645729L, - 5538793834884616099L, - -5628104741732354066L, - -8951130142602632322L, - 2719505240413599325L, - -1008778746385874696L, - 2203198775211410780L, - -7143533605672789717L, - -453883261782705024L, - 319057938868287727L, - -496754595070837553L, - 6805613814053675206L, - 6132340656385066787L, - -8860356581867026581L, - 5016198123629145689L, - -1596369660096962742L, - 2766685770642558330L, - -6266516138812319453L, - 1921783429840399290L, - -5251293476201135485L, - 7108628593359030710L, - 8093943502713971156L, - 3074597418887950513L, - 8333496602590533977L, - -708020943442059956L, - 3102625642886133984L, - -6499370722788023494L, - -6917377031919774998L, - 6901729616079135501L, - 4521740373890802536L, - 2717665495303183111L, - -856278075863271097L, - -2502885534841887818L, - 2357338131581904382L, - -2522296722172564384L, - 5979169122227632125L, - -1990576311176786902L, - -316116701196334114L, - -6739126101832001255L, - -330238767430913485L, - -2397646708417573337L, - -5746367286277299531L, - 3388130732766130858L, - -7310644851569314744L, - -4824388967193941498L, - -648780185892102954L, - -8712468613035181241L, - 2711516130478712762L, - 2754691483449550770L, - -2790972617414146667L, - 8537743091160071936L, - -866831535856147830L, - 3962787639412434933L, - 5751063116956730026L, - -6343210590541299672L, - -9027452407994212939L, - 7748080448177464210L, - -8875675911298011676L, - -3943374007835482499L, - 7098683995859102865L, - -2275458998280053925L, - -4628453854860491915L, - -1529511772279148360L, - -2871057272253482780L, - -334841257423340530L, - -7314747545247602053L, - -201172568470226645L, - -6965846975881685612L, - 2309595871631956781L, - 8951003723927622968L, - 3001873710915957640L, - 2012064170299142173L, - 7095981982072554477L, - 2920562163667542830L, - -4511110467250954239L, - -7166611815479236612L, - -2211021712129656794L, - 1338540767674038758L, - 3487756347488888084L, - -4937557446668954437L, - 2620388879014721175L, - 7208356694606927210L, - -4513132828283918504L, - 6317549580437550543L, - 2401779216570746255L, - -5457469669547078677L, - 7471661866970627352L, - 7386623443212346251L, - 6923730215630122759L, - -2325097522428671189L, - 8000364301902289246L, - 4925551359859147160L, - -5595982422094382548L, - 7228349132916965209L, - -4703354695115981511L, - -2115306052026418681L, - 9090854014723212293L, - -6068838827925313383L, - -6558621713962157376L, - 1473800012311082935L, - 2525181364542947966L, - -6021645913223485972L, - -8318988851482275654L, - 373007065698472266L, - 795167131148895585L, - -532571991837954792L, - 7238159482918777429L, - -7525111696825330223L, - 6189481850281476163L, - -512400154882781230L, - 2185412829792057998L, - 8303821120875906039L, - -3658266464759815456L, - 5534191248734418007L, - 6101574779391286487L, - 8145964650042952627L, - 5391320846882423376L, - 956217201277458121L, - 2237749983378005618L, - -6656683242892884554L, - -3394474129803761342L, - 8406074839295737353L, - 8623233445127821330L, - 6897419204888614556L, - -3873285223086133426L, - -4449195818654013260L, - -4380415985865610994L, - 1843484917925416568L, - -3683421128553731612L, - -6759630266574317021L, - 7963823663074411611L, - -9073210183338934836L, - -4207841706309087395L, - -6317104811444343048L, - 1176967159244991718L, - -8150985710604331729L, - 2463641502615436945L, - -4649906465921856966L, - 4753784510776661068L, - 1401826846930455507L, - -7215160016399204667L, - 4222527227332022097L, - 4242038843438232290L, - -6229200518763707451L, - -7634229331990944723L, - -5906084857878661851L, - -4471729319982253726L, - -7488818713861180407L, - 8958437567708072797L, - -4361717585953265517L, - -3589345870120547258L, - -5656002784155139233L, - -7405858066073224924L, - 7261298787749646565L, - -2118323539609274283L, - 8440646816505080462L, - 4907492019172743241L, - 2971795108974926972L, - -1111694536287943778L, - 1092562971031582110L, - 7435780765000923721L, - 5815238393374335255L, - 3728879363004790298L, - 7950374680552679377L, - -1559646550697408809L, - -1009638403217698280L, - 5477007325533850929L, - 2802315771636654550L, - 1359831828875761363L, - -6244291732477211457L, - 9138108823363225790L, - -5700703633273694371L, - -5189931767235375959L, - -5917217031437644153L, - 6559980057173897885L, - 7585954365066361941L, - 1833254434142522137L, - 2622798612834078243L, - 2935894269140572959L, - 3342180495858759098L, - 7763655187214368195L, - 608976619205971467L, - -4493083204513432310L, - 5655458152670549588L, - -995372262620475933L, - 6725108152764242753L, - -4152678539161864839L, - 4879330012023732227L, - 299691067249437340L, - 8253082866296742941L, - -1349088245542024700L, - -930670635091392036L, - -6305033172145799503L, - 767676528758696723L, - 7848289152882068204L, - -5335123725692922309L, - 7618587959592606045L, - 1310623412826253949L, - 6105911509337366946L, - -5132873445536420119L, - -5066374717991788365L, - -4196018003514359930L, - 4602399218983903018L, - 6996237050722228275L, - 4750432263399753517L, - -6552768219041772261L, - -8886514643984898377L, - 7353718498017818617L, - 3420752363982256164L, - -3106921624226184176L, - 7755185569018499850L, - 138048424823142520L, - 4574855394856311409L, - -797116754680671576L, - -6319525882248058891L, - -7211292892013797268L, - -5969262208310571743L, - -2242517284471541983L, - -2134523085752830969L, - 5239925547316736378L, - 2211989170649079345L, - 3951874086467810189L, - 1541713943974254342L, - -5392854420512731723L, - 3564316510315168871L, - 2901564687206922350L, - 1540984989266277585L, - -5588692335575710649L, - -7656900483971665708L, - -1269975572006533380L, - -8586683894725424637L, - -667220377486025270L, - -6992322247305413343L, - 1020432414035508475L, - -762737570699341127L, - -4996438874277990597L, - 2399099134154679381L, - -7294753205977958107L, - -4330814694281211877L, - -3424505945178467498L, - -3908232167211290102L, - -1715708172189155463L, - -1541677764411125216L, - 1443437733037296364L, - -5699613322350318170L, - 28422381221154018L, - -8448942739014323861L, - 94089349704640679L, - 3121324325667558058L, - -2027215282474423693L, - -9090860166446867101L, - -5570813680167514715L, - -4433017494388855624L, - 7780214454833321289L, - 2818118075900140158L, - 7909566890394565636L, - 3281719552865083509L, - 2293428426098439431L, - 4831877444478608421L, - -8036810704178721498L, - -6696440698423871679L, - 424663572619708233L, - 2210379950234460182L, - 4488772831440475400L, - -6238973969104209915L, - -2892035378057749818L, - 1190083349888328687L, - 1900956434625552346L, - 5686029047839893831L, - -8652319297499303518L, - 5660206937964935444L, - -5693798368774435246L, - 326881025455212277L, - -8376143443592681499L, - -924714482174160655L, - 2731102432407909647L, - 5974710608961653241L, - 6662943015421622990L, - 2629145426514230124L, - 7653779470428211936L, - 8231699528634814943L, - -7880485152483421857L, - -8715291256937697509L, - -2608260639142008146L, - -2891414416406033026L, - 1006672424561275863L, - -5345465745471823175L, - -3007098514343148833L, - -8853686550740270619L, - -8826799561287303533L, - 8800245871751669511L, - 565431636219131046L, - 6137897978460556916L, - 5482308004417669307L, - -3006854606371770142L, - -5550863738981833513L, - 6860154257076535929L, - -7830408716033920139L, - -6220766884162806429L, - -3254641290637732033L, - 4069104293139053208L, - 1298727460612851492L, - 5145793087755505159L, - 4012194405015900827L, - -2096633266369036577L, - -235600124490809513L, - 2256248865523312538L, - 1856550792634706370L, - -6338437638663913139L, - 605690123879344699L, - -5972006707479557169L, - 2788841617850067275L, - 3341756482258277517L, - -8730087995322499274L, - 5666761853789513177L, - 1427855942817620030L, - -2247084578644277545L, - 2632056116244532492L, - 8983184113458203674L, - 6222824259917067927L, - 832847538082989274L, - 7408336855734508382L, - 2463234904146980715L, - 7616355816816829131L, - 5437320614714817066L, - 2176649963064497163L, - 7847964877858458386L, - 3676215252045438118L, - 1457265625453915305L, - 421670244665897930L, - -537286355906412984L, - 845546777083974630L, - 6294586905906742451L, - -6979812383811440761L, - 4101166573373719960L, - 430647036995334093L, - 2563569094767382754L, - -2226117486192197040L, - 3989815455278220803L, - -5573460076032648378L, - -5149764105493446507L, - 8908023797302087394L, - 1579875413248797693L, - 6557085398158756277L, - -1860582499397819682L, - -3940264269551745098L, - -3760050418257691649L, - -2749137550200198091L, - 863749834414320446L, - -1701674908797410602L, - -3441531459858237116L, - 7781166611943523849L, - -8747694838109223765L, - -7940615954936651322L, - 1761800111692886098L, - -7563608795264216209L, - 2430120273101259962L, - 3034607409190630193L, - 7596606678605264709L, - -8815959038019965324L, - -8056592803858661736L, - -6054319005531061432L, - 7637990614259037480L, - 155762651336866309L, - -5295066003461610118L, - 2097996021613363354L, - -2649318637576910563L, - -4710689453059380010L, - 8675276565266944323L, - 4061820304631504890L, - -865251409507836874L, - -4305544705996842550L, - 8133733737104758782L, - -3599082219550900640L, - -1172444168425884022L, - 7002178848795582841L, - 8753574524527561837L, - -7959972011549631263L, - -664335750987460129L, - -7761182775497779250L, - -201978935828898840L, - 5748605939155571413L, - 432959146257511060L, - 8597688997048592708L, - 5979346454620003082L, - 6682666834922578474L, - 3635671342630844084L, - 8295581682942403968L, - -6056716329065906860L, - 4876232349596700627L, - 3282465211073936357L, - -6277210138874800012L, - 86063810903062668L, - -5131034425726984549L, - 7879994284944917570L, - 3805360137603820244L, - -4819745855255108901L, - 6005083603591253720L, - 1260872260703386533L, - 6208805585589862489L, - 4467145362283493250L, - 6925593199187107448L, - 2290814776012496288L, - 2202094536385319447L, - -1583289128964920170L, - 2414314858213839292L, - -417375850490384234L, - -6775757096712023859L, - 1531877516325565400L, - 5092160435195199211L, - -7779989257755281504L, - -2910324314591098862L, - 8497090690994716777L, - -7802963550632908400L, - -6411284901845568322L, - 9216337043421866495L, - 2437859992012674232L, - 6960237011186167617L, - 5100162418749277386L, - 6509562170805894274L, - 690433361758303077L, - 5936816351771558334L, - -3601277060469993805L, - -978457311807747406L, - -4420940034475608949L, - 3538644062391991755L, - 5164625733904685628L, - 192170982312183453L, - 5014044649793050646L, - 9147945450485230993L, - 121096778422978126L, - 7076446543359171313L, - 3849792111065500559L, - 7235530029899206334L, - -6832803917257794399L, - -7448095328943903784L, - 636249030288914450L, - -5837508951408640620L, - -5494182545899908814L, - 139946096999437232L, - -7949772735307966448L, - -6777152677072204821L, - -648210928302263569L, - 1484711477581900777L, - 1415763754612838143L, - -107058891244037140L, - 312958362296582989L, - 5071518533113132226L, - 6638935098145563092L, - -2867055004276813534L, - -4289503497262086936L, - 1497170552728782805L, - 4517675483628149735L, - 3748960245079903666L, - -3691286664879128054L, - -209359184536764749L, - 2491341916818449085L, - 5499205217633027745L, - -5512709448748519671L, - 4557913818063026938L, - -2112204135968966196L, - 3440403110217462895L, - -5867323792132309155L, - 5420869064478055006L, - 318512041709141078L, - 1057553941897233483L, - -6895197562631981270L, - -5782743651675563936L, - 2659771847560443960L, - 6592601119187496548L, - -517270229881128849L, - 2622604378506727519L, - -9170205866690625639L, - 4806630682514823179L, - -7776613972641981358L, - -1488298548028258830L, - -1715707210842296824L, - 3796221982870729299L, - -7882722580553373597L, - -1797548791879939131L, - 9223079908042491188L, - 7847548061281742781L, - 1041148225166463713L, - -2800037601895587534L, - -7832361151307182116L, - -6950576920927850414L, - -2404378656089204258L, - -7720362412660524651L, - -4901646243176144926L, - 6432612866296388591L, - 665821462715291984L, - 5024465184664377182L, - 1558901948449801231L, - 2224934457550741787L, - -1486153720652331467L, - 2152321067003602002L, - -1858128886354189097L, - 2873839996181438535L, - -243875524287970697L, - -1376873654537129986L, - 3287122656145633441L, - 3770833946582728674L, - -2764900700916121857L, - 2560091717993161785L, - 5504786539926877426L, - 673505854315501819L, - 1264431652537758499L, - -5043418235491208409L, - -6769065002135856586L, - 7666088207808456995L, - -2827685615289224220L, - -5429383711816435171L, - -3134385201210164932L, - 3020879270457681824L, - -1689344584352272080L, - -9040930749904066060L, - 1932280955101101310L, - -4992572509975070322L, - 7546307129163923078L, - 2939073542428222766L, - 3374974368464231869L, - 885759554366311L, - 6593789636519856798L, - -1624132412418983395L, - -6031359656290740003L, - 688983212618230553L, - 6369052776794949918L, - -1377714920269304294L, - -1057940749189840506L, - -1655685782041312329L, - -110552080942842283L, - 5250633774704933933L, - -7909648255758272745L, - 719735976337939580L, - 3645906512854567933L, - -1860978834085668115L, - -4349804709624489457L, - 7923661347327064185L, - 4244126846532735429L, - -3251399312816082643L, - -4937029742581158563L, - -86298941439722272L, - -8597913327563881758L, - 5039882027531808464L, - 8056647111062079524L, - -8976752115766926062L, - -1690394607348932339L, - 3378746565484573129L, - 8416003090844044193L, - -2717024430934601010L, - -5701892799453780386L, - 1533981283496523540L, - -7462371343115417598L, - 7010080256761797460L, - 4478373719647299143L, - 6305458678328463570L, - -5102763036459098393L, - -8778795989564198209L, - -2268889645684651974L, - -4555916510323499535L, - 9065546065927673888L, - 5852839483910534806L, - -3402482240912256878L, - 2023722994972298169L, - 5215407550830003324L, - 1071468158469513836L, - 4955237436537987038L, - -3083989516400027076L, - 6722953813435001988L, - -2387850610416371552L, - 809463730078568982L, - -5395203458608056891L, - -6137800097014878795L, - -3605527194936796968L, - -7589842792710116365L, - 8069067842420108257L, - -7454408306272078350L, - 2339188701288559996L, - 1008425726458324286L, - 6847676052807732318L, - 2271618337058209406L, - -8281033180921892670L, - 3604010165737741236L, - -8269928557793008073L, - -447391999287823556L, - 8028984830780334836L, - -3883350805508230356L, - 7482610679805814070L, - 6500112572029535883L, - 6119648543352512696L, - 6922212850686981745L, - 1734731947537567857L, - 4101619546129582628L, - 9155049639883886519L, - 5849304319215085011L, - -135976101808023055L, - 3329888204068201272L, - -4336188293967075047L, - 5788433959497374483L, - -1402363557578146821L, - 3588707324813677961L, - 6715232528053729851L, - 7169368150013526008L, - -8706746826857587245L, - -4819316543846777649L, - -8782313301067526525L, - -8916832875484128383L, - -2346600299358242263L, - 1904681875169970567L, - -6704056743702639344L, - 2270605299750783360L, - -3940808304480228961L, - -8321565943725548488L, - -3825742229541937514L, - -2349339074190735472L, - -2948486946206330984L, - -747906506207273746L, - 4280562720015859798L, - -4136257343808753176L, - 8445283324198191059L, - -8404850409602104913L, - -3264457032343850047L, - -8759790595969078254L, - -2542190711281684773L, - -8843544063303913454L, - -4003746482399952206L, - 3841695822551400168L, - -3588090911679720182L, - 4918585626351510199L, - 9222791837897484065L, - -5760984091213555378L, - 2491736142884395009L, - 9176699063949977552L, - -311336022868801049L, - 6098071943696363607L, - 3781539988474542156L, - -5991444272878304549L, - -7058079929087833240L, - 3692880174470651745L, - 8043184184871662514L, - -2260533056334755470L, - 7862870576355526775L, - -1273628657555198089L, - -7116245059732632210L, - -6206223953545513505L, - 8769478588548603347L, - -6809293819712164844L, - -7072037946451047577L, - 5145959967698376997L, - 3918549975422395928L, - -3688153306502628396L, - 8933640809529662946L, - 6586386948093068301L, - 4314174515802583045L, - 6042832017761248999L, - -2163096650317259801L, - -1301538385158714097L, - 9157628132063555931L, - 8447192224483369575L, - 1082300847283178879L, - -8765613093828266962L, - 6523561351628630699L, - 7878456944142132573L, - -5878800239136723413L, - -899016955838748566L, - -968680680108344572L, - 8149351788840205925L, - 7767149159758237380L, - -1002433668001324671L, - 861378480610089679L, - 5131370442347562734L, - 5891997968737511949L, - -1134130780427583438L, - -2721284507442384384L, - 3581758406053663578L, - 4711959109881063237L, - 3814833207703197149L, - -5498755072540800142L, - -434194050930099095L, - -1131324138179189444L, - 6335673834129040499L, - 3840591353873435091L, - 6691477876637098998L, - 5389042814799436488L, - 8492537662085986759L, - 9801065220990358L, - -8991404774454959964L, - -5967334022174632862L, - 8423499844379835696L, - -1121320485100692308L, - -1137347326607533713L, - 3579131621253541604L, - -949637496239973913L, - -845717236495377944L, - 2627652869211543871L, - -3584273871358543803L, - -1231456733798526473L, - 6404279318428525466L, - -1959366387574498651L, - 8659995475649499110L, - 5687743493891209750L, - 5734157541830063944L, - 3807145789061111632L, - -8728883033962465130L, - 1886310705344218044L, - -2869995344352648369L, - 8631433038774110827L, - -5196628823587587974L, - -7457206590006693637L, - -5287470411743602489L, - -4100864542827687276L, - -6925193246164904686L, - 684773938147799771L, - 4684480184200832071L, - 1138521418475557396L, - -1024452235617887100L, - 370178077665262107L, - -2580904250658458088L, - -4067270455265760110L, - 7883457924958258236L, - 2745236661071909096L, - -6638753008619557401L, - -1928563245103591922L, - -5391677730310963265L, - -3443398620200795730L, - -8921877650888014333L, - -2549654053467481876L, - -6634007310328959288L, - 6662969652277689957L, - 5704789109069509625L, - -1307333292330657763L, - 6533595699848914839L, - 2206229619406776067L, - -7059181012292774208L, - 8587013829275411963L, - -3759394797281060169L, - -8332558387862436192L, - 4058454963111191922L, - -2909318126609562718L, - 8309425769040304384L, - -3332518656544710523L, - -53840526904216763L, - -4392299612463469408L, - -6495163012164872108L, - 8283822043324591205L, - -3839429045227492113L, - -4554258591908844950L, - -8717791527048532273L, - -6680294812840082731L, - -1514076315369906827L, - 8342331288999106348L, - 4467472370913596089L, - -5258687569970231267L, - 6428083210523097473L, - 2293947403016663486L, - -5526361602248141114L, - -7270937093961275072L, - -7226206738482320242L, - -267988759137059367L, - 3757842653020528703L, - -654142607214292501L, - -3877320323095024097L, - -210352008325460011L, - -3777353653906366683L, - 4104559760354145145L, - 6351620637332827086L, - -3953047538968937343L, - 1977509989365985520L, - -6096612777648073834L, - 3655449697279862217L, - 6371929595416244955L, - -6719663260573101322L, - 8235058461435871026L, - 8223610568265677874L, - -636776168225445543L, - -5658531495972000806L, - -1315157075774308702L, - 3318184564168373738L, - -3870791042207323999L, - -5761074459524531162L, - -7589695080417675674L, - -118243652515378968L, - -5606050504941145854L, - -1682232575263053834L, - 2064607730151462051L, - 3860046528687723210L, - -6935238833286905572L, - -1526898475961616862L, - -7786760789279579722L, - 6367271805286224450L, - -4333115896551664911L, - -1229178972379399952L, - -5406430689127328314L, - -8536830855104540258L, - 4592858633504932985L, - -4661004590562426651L, - 1900079872513330236L, - 803518532278716272L, - -7227731911919645710L, - -1531800249475624901L, - -5068571120099635260L, - 6954901733800148115L, - -7075071323703859828L, - 1447978964456769515L, - 860006115119071319L, - -2067420548322589555L, - 4638996254844315967L, - 6983236581726963935L, - 6708882819304554132L, - -1077037295677468865L, - 3623478619549261514L, - -8551083693862102837L, - -6864926796047150583L, - -5583309839740166644L, - -2047952294766573645L, - -1296070923862863512L, - 3533321735634917235L, - -1137358684259757076L, - -8080333153054443456L, - -6770927466908143968L, - 1677314511582577698L, - -2630259631962080464L, - -1793645900673563419L, - 3600237620008462975L, - 2180027379579890660L, - -9043677058766520350L, - 3962397017521642626L, - 3977072778934081031L, - 9036155278583684186L, - 4719201700299004978L, - 195773270223425425L, - -3391740091956199499L, - -4297719063714682956L, - 2518769717461479967L, - 5163274893178164221L, - -7935837524015792569L, - 3725316512735597929L, - -6062355987398187561L, - 5072788521812186052L, - 4756745374124465344L, - -6691048140593722302L, - -4453427560142816958L, - -8908616043104241784L, - 4680671232907313257L, - -6131724261229112714L, - -9108450687466015537L, - 6365495657268753375L, - 6448165814018765014L, - 7071162731007451983L, - 6828906714271770482L, - -3559294295246311028L, - 124771238363526084L, - -3293309753712400861L, - 8896706306255876093L, - 3125408161217615213L, - -5861463414798312654L, - -9036260382640522754L, - -2941595857477708459L, - 6033142563060557598L, - 1099630200403990563L, - 7959429886791854178L, - 1535421567087429521L, - -3523681894692531197L, - -3906144409472427412L, - 6483996772781688720L, - 4132319255708563987L, - 8769726356542128993L, - 6738613111825331757L, - 1764580723100293334L, - 3299019025645495247L, - 2239605653730261397L, - -6200467116936956633L, - -6291344345384672622L, - 2565928296401167337L, - 5329865919971566807L, - -8575034623756510146L, - 6368322753797090715L, - -7493350249074734851L, - -1948050475401750220L, - -2542388860306602080L, - 3132812952361473979L, - 8662503282931471374L, - -7226118518078524751L, - 125513287940370920L, - -7105850358401444205L, - 2873891704788790693L, - 375644362554273808L, - 8779595029680158187L, - 6520575959918535178L, - 6481335563279395683L, - -3958324538875210597L, - 2650332007800900579L, - 67216421894692841L, - 2892388889322576563L, - 447031742152452522L, - 2214867384342611779L, - 3463418430384064877L, - -6736581145771083272L, - -3097757825887262572L, - -742646863032103227L, - -675900178715113798L, - -2232567950500061233L, - 1712025609374863027L, - -3405265351896222950L, - -7357424915587192954L, - 5899042778652661141L, - -7187291342974761805L, - 3480937052474976673L, - 997099418044934990L, - -2839517833272115276L, - 8199436817352462608L, - 9072737280134851879L, - 839795799971829718L, - 458252816075262707L, - 3252541827624060629L, - -5029727353658396637L, - -4967837872862091654L, - 2146776628928215216L, - 5403743629243841306L, - 3306799506878402965L, - 4468336141473957274L, - 7023113564987990226L, - 2871980174971968592L, - -6665846774723588486L, - -8521313230784523850L, - -2899150205599417383L, - 1992195265166010323L, - 3610880564010872990L, - -8962461672227066573L, - 8499793696703179099L, - -5174175353166984262L, - 3773412144378555582L, - -5377488598550438958L, - -227481030440141534L, - -3003034596327281460L, - -6010571883582226691L, - 5285640267764709652L, - -9094570939029139554L, - 3302183665375964446L, - 8185803481915750000L, - -7832879598569001202L, - 9185495476894972675L, - 9021601549322560342L, - -1033483127041468323L, - -9094719449194039442L, - -4246271926877732985L, - 5329679602094503622L, - -3123609535190446287L, - 4714766142804686442L, - 2489307805887894890L, - 2987790131896782326L, - -2963677483725852236L, - -8529934738168520503L, - -6356353435089583010L, - 3208586395891790363L, - -4407123126725047459L, - 8157441934654253916L, - -6109838368688820127L, - -4389983853453341623L, - 7652314184807664343L, - -4662723430367132038L, - 8667093623786488993L, - -3415543420133275181L, - 4904278838452314694L, - -4354230232880600982L, - 8861799057857753L, - 3552811093870745879L, - 8634119875383707854L, - -2732631755040740128L, - 6518885727185543342L, - 4341137614328678730L, - 6793266319858946131L, - 8047455342123276414L, - -866422210016420449L, - -2975253122827530056L, - -4030176003307022576L, - -4241696461887318612L, - -4753266504739240553L, - -7373316743164657129L, - 6048513984860600758L, - 1814258330875604106L, - 9109940689954894985L, - 1579558970146774347L, - 668478211668974619L, - 8409518560944185002L, - 7245729396754890299L, - -5114268398654367847L, - 2956616124692577442L, - 4461886846778383058L, - 959690196566065732L, - -7235204044940286838L, - 7981158344195854661L, - 1833698125790755138L, - 7752754976810456477L, - 5692118834710835902L, - -3793683786453929372L, - -5581772364636870855L, - -7470774962401733293L, - 8780664591724430174L, - -7663125741516067028L, - 5829471574991825780L, - 1182333455500273019L, - -1726270951016459467L, - -2746428321520070969L, - 6832833992125314751L, - -3990613509805030555L, - 2400486545587757625L, - -6598170744898189777L, - -1995198747364774857L, - -3645842663215618557L, - -6553956802949933979L, - 363585666263112429L, - -5656547416142849554L, - 131159332135711557L, - 4242991056913343886L, - -4674809189780845966L, - -1954374021725723642L, - 9000512499144627986L, - -4966087500556332423L, - -5368443575882114199L, - 7898708771797640436L, - 4954393344642394763L, - -228876611915096824L, - -3517612841169834059L, - -3181203061349135348L, - -7887316482076885972L, - -7491168484443218074L, - 1505841500971991620L, - -4819676400227780409L, - -5600600902750799703L, - 4287196606575127498L, - -6631038754487834066L, - -8562057237102997949L, - -3310437032247565299L, - 5856634576804593925L, - -1659423729330836678L, - -2785469434848827216L, - -9178954688981005208L, - 8284532255782100018L, - 3932114027983614574L, - -8735736194352900940L, - -5947824514040167701L, - 1555054962173652536L, - -1028318040091115332L, - 4142937213480146786L, - -2819444980269809917L, - -2903074845803234197L, - 3718049583878739327L, - -5493173480792612991L, - -4746130552040956231L, - 6244568873371787043L, - -2997679871934966832L, - 4047215048138865730L, - -6551789563963923059L, - 9086055720517286271L, - 8876034907713774156L, - 3680389259422527058L, - 6042866802807055050L, - -4886080504692397375L, - -7166197738900036643L, - -727151388570173900L, - 2438604478622089045L, - -8782162061024071951L, - 9077567357215978574L, - -2871872737471270227L, - 5320002012835335589L, - 5539849377632910446L, - 7555126502803598608L, - -8125224475094342490L, - 7417955058148509629L, - 4176877628224197597L, - 7598278370710374380L, - 2265897989342130546L, - -7061482734014550086L, - 1468468196263413305L, - 68682113048681479L, - 3762225435622216659L, - 4581877841476416419L, - 5115735211430226046L, - -397731465197117692L, - 3802999106815691779L, - 7574760794857420046L, - 4178197313545546553L, - 9065628242529864979L, - 542937206029962193L, - 1542373631583440917L, - 6903559734881147673L, - -2071796881281526902L, - 3779795498327194080L, - -2217268270456792594L, - -8059036377920200513L, - 5425988266816609684L, - 3561830549061618056L, - -7500972620191462258L, - -6776359714207180134L, - -5775998075012891173L, - -7755164007855727652L, - -4908348827451399810L, - -1162366502935483389L, - -3581470604892760162L, - -1434370488502028008L, - -1493293905909468959L, - -6762524287730181241L, - 1393564479464918401L, - 6717807842217858780L, - -2269779449488763938L, - 9119207083214966580L, - 4437289221718108033L, - 1991815488616873724L, - -1136008736729825773L, - 6919259317959590395L, - 5700567409540575886L, - -6511943523783520343L, - 8471138532439345892L, - -1261020616469785625L, - -871122257839774394L, - 5853266956701599170L, - -2605324811026081L, - 5645723143070327343L, - 6678903618140079830L, - -8243425527465830189L, - -7366977412613262267L, - 5554112623362949635L, - 8508696414094887570L, - 4526724121376344377L, - -3066464409160921518L, - 6423971479710566480L, - -1301150937530073813L, - 7047171805158365362L, - 6607488204808324896L, - 2550589198730302889L, - -1508652597994003459L, - -8797285250854566260L, - 4531577529333440300L, - 7171511780196023810L, - -8696995432677729109L, - -1038277725665095082L, - -4030021971399704454L, - -7142316504058264789L, - -8690342808784496917L, - -3538025267466743323L, - 3030344740150338756L, - -5434476681454308336L, - 4747881963413479619L, - 6649081146297801785L, - -1340297105335493395L, - -2345199575979290182L, - -5142497021023029281L, - 6590959395881104212L, - -669027690510749039L, - 4713909714515252237L, - 6334133652957330690L, - -4130611448171970254L, - -8777249173946876665L, - -3777422122544011758L, - -4139822748883105829L, - -85322879655457932L, - 8510613507788926362L, - 8480533752847008903L, - -1501849715563565256L, - 7144010316023561074L, - 7071721153639906878L, - -2413842258996393407L, - 3829076351340781609L, - 3904259427140354464L, - -2423161203681766273L, - -9222948412120414441L, - 2232806743868046887L, - 3459293971647694135L, - -4958044470517187570L, - 2702008978364322255L, - -5230685167113972622L, - -4777581725252095139L, - -178566492057125337L, - 5473668624447677467L, - -6025569476816496835L, - -1758476046405271590L, - 4318010125119483290L, - -5001898604592523465L, - 4496672693040208250L, - -6249539806063036132L, - -7752211883834007080L, - 5401928633460905475L, - -7924780124408034823L, - -5852842870036885474L, - -1507586788733048669L, - 8723145826212343490L, - 6322146995759068109L, - 7033327335320195047L, - 2731703606190537636L, - -5700197206770306283L, - -7681929128588407075L, - 4915318349456884393L, - -4365674444257230772L, - -618412543643891621L, - 5389658231644689771L, - -3464092788986188235L, - -1050158483149088836L, - 2986789282075383014L, - -7095920626607872836L, - 5041839261426701960L, - -9180003565648806832L, - -4136797423318912582L, - -815263725971673785L, - 7751482036034122791L, - -6582902412740766080L, - 4948480397753687589L, - 8076288905210502302L, - -9107950489265491053L, - -6184418323857721083L, - -8394291702992930332L, - -3765480365347368667L, - 9161366530222497706L, - -2767769147585489819L, - 8629853602447578989L, - 4143140731787551070L, - -6709802780961091740L, - -905525597452535126L, - 59611890502504912L, - 887996528204235726L, - -6522589813044041015L, - -717562431083190695L, - 4413597631385084460L, - 685793075458769616L, - 6534412965158226614L, - -7466805892367058580L, - -1643339784427405237L, - 8108897583594557150L, - -3012505670609614813L, - -2102992646348794512L, - 7496589075754797803L, - 7374879453359816181L, - -4473020896511090065L, - -2144052467882725474L, - 8932411294479920804L, - 1662104279385187462L, - 505577020704587182L, - 8970226030106571298L, - 4740935558188763942L, - -7479171385872798231L, - 7795864469149986219L, - 1988890416069916870L, - 5328957726704894445L, - 6393309991805794816L, - -8023969082870037181L, - -3201662046137010635L, - 7364167842238108568L, - -1133670122146177765L, - -3700583274673702753L, - 5152863800535605047L, - 4340628140712624150L, - 5588611203430726905L, - 2682781254448818030L, - -4334335781100941681L, - 2486482109045101170L, - -222120907104518499L, - 5461720682682027710L, - 8953356406381104317L, - 4813649794280024185L, - -8815822744547391388L, - -119150930688834339L, - 5696219244854669615L, - 8826694157719678034L, - -1678317963810155461L, - 2312220003237053610L, - -3288132327244573070L, - -6655294980817812847L, - -3093613585240964494L, - -1504599840801857900L, - -6463236998312950925L, - 5810208611405255502L, - -6761690440397609367L, - 451950190532227640L, - -5815456944452977190L, - -764130306143846512L, - 6419889081579466867L, - 4398197193823554358L, - 1464903517901841306L, - -1506288216502917578L, - 8699886991841245818L, - -3380656767633421271L, - 7278933867517081603L, - 3846023845717926438L, - 3407601931308300031L, - 1905732166195179585L, - -108117922380454789L, - -7519861222866947951L, - -4972130809215364346L, - -3021088137554827679L, - 8043600973137368044L, - 1434512585622151100L, - 1016884439578050772L, - -8647546074167685968L, - -8506558926671468128L, - 3841531502952176241L, - 4079049958054926435L, - -5539805586862437496L, - -7883676797140300306L, - 140190142986856503L, - -2694098382777014524L, - 3353255930521897564L, - 2673408461261660763L, - 3333109393952734968L, - 4825771068490982684L, - -1033017699452578891L, - -6425096031606191368L, - -3656030991400647770L, - -8647425424751627856L, - 3478736455049888956L, - 16599786738656663L, - 3377618271754536312L, - -7335129354324713170L, - 7006821265423054973L, - -6604032179699952888L, - 1631574662141238563L, - -6071005127816416359L, - -160948602692816917L, - 2439292442953103260L, - -7784485611988136914L, - 6406517206208162673L, - -3111851768592482815L, - 614615425925214040L, - -3556195010057046934L, - -8360577559236335104L, - -739612675357837554L, - 7772269085929933056L, - 301334074305006580L, - -3173646397989105785L, - -1841824288198551420L, - 1197412702727156776L, - 1316932784236645744L, - -8257483426031914296L, - -8846153844918116222L, - -270342118487428514L, - 773674155630100861L, - 6037581810683864126L, - -5245384017768292829L, - -6666883988353617786L, - 3478725688838981124L, - 5546782277057101197L, - 1942226182099172621L, - 9102708557688253903L, - 9057469348188803174L, - -4031312569229337466L, - -9072824545184945687L, - -3855790695273650364L, - -653872491134432764L, - -4080206884907012270L, - 3311573742599462083L, - -269764702825894936L, - -2766987632263151155L, - 6602535166262597916L, - 8827004592088991732L, - 1592583601190212294L, - -3667633871893247038L, - 3486449146725138397L, - 4359563813403699388L, - -4906066947120349290L, - -4330401382584040114L, - 4803580003918030391L, - -235574200222954516L, - -1394367949090492983L, - 4737542241672587937L, - -8856986665935885808L, - 1817303441870832271L, - -7240430001371174281L, - 3145103301223918932L, - 3477270089202844825L, - -4891077676842527034L, - -6459627619991208890L, - 41856325087285886L, - -1382249026510602312L, - -2521070087258742337L, - -2328070419092090664L, - -5388262052233273295L, - -5999142598302515399L, - 5176296022819478017L, - -8067233187432429974L, - 8892405394182984962L, - 6981068794359751546L, - -8944306852219597850L, - -3031777418502459563L, - 2323104536537852233L, - 9124712187601380882L, - 9137253645240139706L, - -8322892360260055499L, - 8407207834684403871L, - 7071881337439672371L, - 666653966378152392L, - 8872525458728668509L, - -647279373040971223L, - -4461978934957838597L, - -8547295400497453835L, - -8365906280976763859L, - 6814338820251845756L, - -8627557778552684742L, - 1758840533399088383L, - -6750756896288158784L, - 6395311215695067196L, - 392880119943578248L, - -2323700597403900754L, - -6462812207087401690L, - -7551080163645560286L, - -9100215524786223062L, - 2524911097994505678L, - -2413500551656055296L, - -3127527627858617051L, - 28303212483427471L, - -6013779137277216469L, - 2384861921525290083L, - 8909147637811545615L, - 5899702029055461370L, - -9169591182444006478L, - -8983057629681813417L, - -8861230054592033877L, - 8410267594044953503L, - -6655030751206229874L, - -6267989963116339301L, - 31106559957685675L, - 6344345657589688690L, - 8238818461566157187L, - 1502493109774801856L, - 3469110631126639783L, - 2128732756904122570L, - -6695477927845519719L, - 2528367395277931442L, - -329099838923643362L, - -7212791470765971061L, - -3974900257611008409L, - -6102716001138106504L, - 5975084928006556639L, - -2369197195204065449L, - 4487412260085465950L, - 1389218775050647169L, - -210563038269997706L, - -922257600076658999L, - -1130043160249584113L, - -6984222506141862497L, - -2916447389269713954L, - 4788071442219355775L, - -6019318505971293886L, - -6494546725482896662L, - -4363700123795407864L, - -413176181805813162L, - -318122404650466995L, - -1599593833241308652L, - 2190631003347506794L, - -4995495324074558376L, - 4218530180585703693L, - 6649230517887455428L, - -2433122371099559642L, - -2330882739734692624L, - 8573791066461702522L, - 6970674048709593485L, - 4649249821199623523L, - 7311119499624527481L, - 4680575275115317809L, - -5342935153571170373L, - -3116361043570347782L, - 7648138161603070701L, - -7868309300294741850L, - 2168590009590153900L, - 1490446147749965016L, - -1283008494190853295L, - -3544718913503298823L, - -6534742186538530460L, - 8888468655599547353L, - 2087090769425642258L, - 7827670472827763897L, - 5012267323158846243L, - -7741892984083231808L, - -3464875091939295355L, - 6758409038153561859L, - 7975975224774285641L, - -1784622809729929558L, - -2393574261519991129L, - -6610200673241373487L, - 7928053024182934824L, - -5277949614542058690L, - -7247922641677687748L, - 2028835673665475733L, - -1777986108022598102L, - -3172999022236468759L, - -6985445521140497368L, - -5695545706582407660L, - -4309483684393591256L, - -3401005720978902388L, - 1936529279105293703L, - -8305374440470863587L, - 16315157402312675L, - 8569329186502607478L, - 3622231363337094235L, - 3976043631923911750L, - 2180152175451630095L, - 6056371270826025517L, - 8139874952265577458L, - -6194153431530741778L, - -8577895877125457083L, - -790303016491014290L, - 1748735841046690659L, - -4993780459372161153L, - 5287205275463538041L, - -6049243002864424978L, - 6094628311576432102L, - 1723598070277281371L, - -2030013138372962335L, - 581254472737031976L, - 2883452134968639016L, - 7463603388570246862L, - 8269801870818255538L, - -2721070413905263091L, - 2457346831596438200L, - -8372860384678057653L, - -3210661626851492038L, - -2431103856629925112L, - 5898720385544051772L, - -3594404508869529256L, - 7736856796149395645L, - 4344265719410640477L, - -1183171608899090204L, - -2897986809520726521L, - 8305011769957443997L, - 4795229490900606846L, - -4075891264094240154L, - -9041912526913309251L, - 4789314080457888127L, - -7212841446169150525L, - 7614738331996330350L, - -2806024093029511670L, - 7475540037729743195L, - -208315385211774637L, - -1296899054609750506L, - 2821295913762275529L, - -8879859100383139039L, - -1026712876851747915L, - -8740379160227472449L, - 292511471974483828L, - -6882168959749241763L, - -1890145082814895769L, - -4562439963586418047L, - -4665008591354792917L, - -390136948977793829L, - 2489571518656765596L, - -4606174591656425576L, - 3915092809925941183L, - 9047840161614493431L, - -3633022588647399004L, - 6942969346669131736L, - -6694490826379010151L, - 1324301462784912541L, - -131359952912781984L, - 7699402503208720283L, - 5622479144398033413L, - 6967949859886140765L, - -4032338302965368957L, - -5963416332716588452L, - -3560763554691360091L, - 1005099059372059445L, - -3613443378421770201L, - 8186020547591708957L, - -4239294927646312066L, - 8486099747374488535L, - -8232895327339487639L, - -326238615306018799L, - 3757565981936253922L, - 6778212967891221904L, - 3207873024341334560L, - -7523175474658440577L, - -2278786475151426330L, - 8466836425666023990L, - -4582382447378461393L, - -6578561293342792192L, - -5704990689206920025L, - -2389743517442092247L, - -4253115007157692595L, - -8929813271704719513L, - 5099815622657901533L, - -1568292864717899125L, - -8985414394814021973L, - -2456273479716732497L, - 6294081109509751388L, - 3028102295678003049L, - 3539887196501896592L, - -1575691248319511603L, - 8966746464734142359L, - -6995340021363899582L, - -7800639148789851713L, - -8224260699176813192L, - -1938885039339650999L, - -6014303778691459857L, - 6353855006008545499L, - 682899654558677209L, - -227004043734081415L, - 4175445164667592327L, - -5892774236575987682L, - -1054851063871573686L, - 7378945432015543779L, - -9025847508399685521L, - 8507123498478659641L, - 2634415008322296937L, - 8499997933084393618L, - -2343091536239164797L, - 4943477958300830784L, - -5716138953695402001L, - 3654955422185200330L, - -3855175918674625767L, - 2942012910816921425L, - 2135649495450577190L, - 2489749270232932598L, - 3075573886722866022L, - 4741621495679187373L, - -2533070995420675111L, - 8016604412923285952L, - 3655782710664522385L, - -331575483966243030L, - 5563239881147789110L, - -3536395547713373675L, - 7913843468604629821L, - 5809470005231530425L, - -4975803751638349405L, - 4232625781800052755L, - 6732116987820363984L, - 8254350875123440214L, - 8678768551976889459L, - -7648934972481089708L, - 3723349959659703109L, - 6247511200357726796L, - 8031315762976704315L, - 1080967314182171216L, - 8561519680933409213L, - -4881637187705091353L, - -1748916130722404954L, - -427313373952636003L, - -3301131413273237404L, - -1569066768226212095L, - 8869766464584553885L, - -1961352451311113660L, - 266916750915890668L, - -6043655819212470095L, - 6958639066650934551L, - -7491396823220354282L, - -5706244121092248742L, - 2058565949849149623L, - 3917621928532856993L, - -5285914392340260969L, - -168243632194730904L, - 6675032706416988527L, - -1840378443456062350L, - -7806824272957817769L, - 112697577821879088L, - -4000943011066585594L, - 2818144475816625033L, - -4440191780652473075L, - 5290425627535986178L, - 3439261124616388302L, - -8796398171847802394L, - 2206978116305603858L, - 8337592206550774275L, - 4830967377052828283L, - -3675693473899758315L, - -3108840240467865078L, - -9161001698053177695L, - -2297481807921754784L, - 6805568340065774603L, - -3391258244299519321L, - -749159983993382844L, - 7062232236008961533L, - 8333689744281941417L, - 2017452506567785764L, - -8052757095945795921L, - -8679429010410768062L, - -1669769454675143183L, - 1021385511452112192L, - 2735516449063469298L, - -8689901914251408811L, - -2768144086776923110L, - -2202724657096524491L, - 2163604710661256429L, - 440602864681103213L, - 5959058277963677044L, - -1962091009504664018L, - 7850741655764818791L, - 5642260926720676901L, - 5408898583245429104L, - 7038508131990238779L, - 3607846536923261161L, - -845982521020496047L, - -2264177099345700631L, - 20359578843289632L, - 525387587427138539L, - 7263487202515015380L, - -6022234835374448888L, - 8771216931413507676L, - 971990022205374619L, - 7021724132924988656L, - 7039083302981701109L, - 4204637396958585348L, - 4188090497012985750L, - 4376437258965105347L, - 739302444316090012L, - -6525785024015383256L, - -5902189526714689919L, - -2086878366253206692L, - -4180968549067503810L, - 520335013266400476L, - 2183825622398646326L, - -5564778184706962647L, - 8650796499367868629L, - 6133888236137780152L, - 3302115923459930139L, - -5937793818041183192L, - 6136033530618946018L, - -7445428676723525682L, - 5094265850028691255L, - -7682752822893337463L, - 2360556001507188553L, - 4691951638183144722L, - -3830875212384544737L, - 1394869612670592029L, - 6721262565314161917L, - -4730012123689790930L, - 6010638756354340578L, - 4031121074915162261L, - -8189520056149158263L, - 5699902859355185981L, - 4409202837690861395L, - -4004308357657832082L, - 324207669529782050L, - 4535231947997767569L, - -5065771485887356402L, - -6148808728279097894L, - -8715608844307329735L, - 5490745425133075827L, - -367120062639329977L, - -2362408583935145326L, - 4249838900346469450L, - 3354190632527652547L, - 8650024540421064319L, - 1390121173325989151L, - 4407722572355267530L, - 1305681461138455335L, - 6099199904041118254L, - -8896625676033180325L, - 839449618742345953L, - 2108603209434414606L, - -6476270516642075823L, - -5906022157324316338L, - 1786301043676368787L, - -734452738262121042L, - 9129473457452515473L, - -4270195884135199090L, - 2788589943226781334L, - 854782643768940534L, - -6834471408050497483L, - 939538118216915189L, - -752821676934059887L, - -3925004345170320451L, - -8932717110665275243L, - -7095359027251951606L, - 7643915390524006789L, - -1927702468531393748L, - -7842897924029333727L, - -2005262014091460598L, - -1463327401577112707L, - -1828846898463724235L, - 3421730855491731072L, - -2572236860591883027L, - -7674305242810151190L, - -2921293091126082953L, - -2112272959722776468L, - 5994003596842057813L, - -1403058426817118276L, - 8847371890841156208L, - -1502366106598365249L, - -7223092882480940906L, - -6863117362364849357L, - -6486108986580560522L, - 5841273524403391013L, - -3945405895274884805L, - -8374909777151107129L, - 53304606899741030L, - 4615695750455104916L, - -7114565447402461330L, - -4643391974067777176L, - -6418268910872627783L, - -6758153388660633319L, - 3883028944583062885L, - -8717746570766619134L, - -2916775336586188872L, - -8074909175856917009L, - 3525909159494548665L, - -6434174792604831222L, - -7504160568097417051L, - 2001874122000013346L, - 7613526286976804831L, - 2464361623791150786L, - -2129233914182690890L, - 3209269703778816910L, - -8010470561318389930L, - -6082567480910205891L, - 2027383934435049120L, - 1676758519641328373L, - -8606433480037293753L, - -566732216614183074L, - -7052986422070927806L, - 6759547283385841440L, - -6753685466722762948L, - -5378389309155242913L, - -6627920366497701138L, - 6374316983929412845L, - -2482225971676290230L, - -4599659905021815233L, - -5751984843591190616L, - 4511247687213585367L, - -2476604560440409237L, - -114383761088915611L, - 6450270090553874467L, - -5846154312963348311L, - -8623677702310698753L, - 2393721797395064071L, - -1818986917546634465L, - 4707876179516363283L, - 4194493322864848953L, - -5862485881220479014L, - -7779495775631012707L, - 1429810574540763592L, - 6243218102267301238L, - 3112138729863740057L, - -7917371226803982155L, - -3846717136498455001L, - 7941035918354784272L, - 6054418261287151348L, - 2241054973421403682L, - 2108883531438643423L, - -5118957553064582950L, - 6840064986465667257L, - 1701114564579911641L, - 7866363409355715940L, - -7811750917271050315L, - 4258900268014843560L, - 2910381907881532246L, - -7407853986731113039L, - -1164923521782235469L, - 5071804620493814073L, - -5221820283650092409L, - -2085943650488071863L, - -4691931711041122390L, - 5141081400574039177L, - 4412440312825017190L, - 865265935918874733L, - -3162395727240029817L, - 2583523221463203765L, - -2230477299980342161L, - 1259435039139370849L, - 1365261303243408423L, - 123583301618412419L, - -3355292811340436088L, - -1727563074004288880L, - -8133802905721685614L, - -6552132843349831539L, - -1887405913282768589L, - 579752349959797974L, - -30747658301300128L, - -927889569251598514L, - -598220531698559825L, - 2933084143972969973L, - 1881216270838286368L, - -8591542187284077544L, - -2746195460013203014L, - -4115580643333612767L, - -2101698311751878965L, - 5245788963589320347L, - 4270169879132043112L, - -3833918223343506508L, - 942125237032353686L, - -6956461266653105716L, - 7913560303134573539L, - 8866560449264109272L, - 1772637526204651639L, - 6195153795464161383L, - 8993984678406525057L, - -4726061955654809508L, - 3735265735496936434L, - -6130568352441921952L, - 914728955300562981L, - -4063651775288818415L, - 7163723758837672393L, - 6047067511151254132L, - -85970498549649175L, - -9052941052352548153L, - 4240460500266637523L, - 5163784737021140449L, - -4716331032104787044L, - 5489681070460969049L, - -5530595986986981098L, - -5278261126239207272L, - -7077173381332846300L, - -7391343501975496029L, - 7813143400706294876L, - -829387125962495297L, - 4670865291775900382L, - 9020186365194420955L, - 6433988241346982419L, - 5456431567263680486L, - 577121399356211412L, - 4315536067351582084L, - -2651573533423085833L, - 7729294536223119956L, - 823406537236537172L, - -3197784427651817583L, - 3073787778728381013L, - -6145117092298484037L, - 825473167547740369L, - -6384124143193023811L, - 6743275140960345819L, - -6607284289920060697L, - 6113681357284605143L, - 7689553101083010355L, - 7733899730013301027L, - 2492677562497092915L, - 4728492123871940113L, - 6678104742805246060L, - 5109599002723184885L, - 1552728313401432217L, - 4260747280707230837L, - -593097661878040944L, - -5924961133842904285L, - 4723826630465061674L, - 268913169937480109L, - 2542402711842995289L, - -1051287017878596624L, - -444276555201322762L, - 7942493575456109374L, - 3061527869577259411L, - 4193974852415330113L, - -1301232869890041839L, - 7435225101451773213L, - -9001651199021564702L, - 6863640439001667225L, - 5554839952330233864L, - 1018125067733426387L, - 5106471895041805751L, - 6755291848201476506L, - 204883989932056912L, - -2918800393497291312L, - -361123969592716017L, - -3248350955607675877L, - -3093925735525511829L, - 3287300458522620431L, - 200614927215937352L, - -3637256374159515512L, - -7088130147825572228L, - -1454877327154711975L, - 200290346546176890L, - -5273070491678100412L, - 9126524747081374017L, - -2469359255503465276L, - -5451210609015247756L, - 1345843315473598819L, - 5658367014892979201L, - -418967882289891730L, - -8563171322679387325L, - 3076280980125057136L, - 7452927116456175377L, - 7779645020063005680L, - -1134607767941445560L, - -683371285258284330L, - 3622514687262401912L, - 2057491561658004489L, - 1274581986030567362L, - -7605424030712005369L, - -1904495568695037810L, - 7235082449551676221L, - 7691343848640211912L, - -2574437254990241198L, - 7672749762009557292L, + -5752995443491633966L, + 6697150685477982789L, + -8292226578951944721L, + 8469039529317823308L, + -2857784829002285502L, + 2708946207299695398L, + -475923488709545204L, + -6776550864174025842L, + 5997435870397431563L, + -1413893264211963655L, + -2557925560926552642L, + -7786449276288726217L, + 2663862252392472519L, + 8293182564608143680L, + -4991485761665135445L, + -4260167493401566131L, + 8397271794406387881L, + 2767712210800417827L, + 5643454605919104416L, + -2096221407055692639L, + 4164971193688274917L, + 2012618980459220155L, + 4502510481524221164L, + -9150753967845211809L, + 2109736127223229935L, + 1705328223411648698L, + -540252590844239442L, + -8448139437911662946L, + -9172921965178401452L, + -5901063484397960162L, + 8990179058523403886L, + 3191587668216080419L, + -1505157133869540426L, + 4826297514018361126L, + -506720607717191353L, + 546407899098652120L, + 3565976246504851323L, + -7513490578875853277L, + 5136885717551856091L, + -1235315857278978092L, + -5210210379482210601L, + -2670168613513456171L, + -4576802255731115784L, + -5498085225412524972L, + 5454622260446372900L, + -3491156961084957616L, + -2040190370914817596L, + 8748880751719855958L, + -6066272418698883734L, + -8123169723410338681L, + -3402048629088769519L, + -9050773182933316170L, + 9109683037362136984L, + 8292736658273756483L, + 5864675646204731276L, + -3410199798914438762L, + 6375136202365522231L, + 6084483678447018976L, + 4341319149581895135L, + -2617192247437531424L, + -7803896693111046938L, + 6612714826762703589L, + -2604165952446921239L, + 3956924213727943389L, + 1828772354490899965L, + 4565769277738155679L, + -2552163583152823111L, + -7282771451698115771L, + 1541537288639310430L, + -1260053141177242892L, + 4470999817094301913L, + -3084949271203311242L, + -7546393470851473997L, + -8966028816522567997L, + 1051341974704645729L, + 5538793834884616099L, + -5628104741732354066L, + -8951130142602632322L, + 2719505240413599325L, + -1008778746385874696L, + 2203198775211410780L, + -7143533605672789717L, + -453883261782705024L, + 319057938868287727L, + -496754595070837553L, + 6805613814053675206L, + 6132340656385066787L, + -8860356581867026581L, + 5016198123629145689L, + -1596369660096962742L, + 2766685770642558330L, + -6266516138812319453L, + 1921783429840399290L, + -5251293476201135485L, + 7108628593359030710L, + 8093943502713971156L, + 3074597418887950513L, + 8333496602590533977L, + -708020943442059956L, + 3102625642886133984L, + -6499370722788023494L, + -6917377031919774998L, + 6901729616079135501L, + 4521740373890802536L, + 2717665495303183111L, + -856278075863271097L, + -2502885534841887818L, + 2357338131581904382L, + -2522296722172564384L, + 5979169122227632125L, + -1990576311176786902L, + -316116701196334114L, + -6739126101832001255L, + -330238767430913485L, + -2397646708417573337L, + -5746367286277299531L, + 3388130732766130858L, + -7310644851569314744L, + -4824388967193941498L, + -648780185892102954L, + -8712468613035181241L, + 2711516130478712762L, + 2754691483449550770L, + -2790972617414146667L, + 8537743091160071936L, + -866831535856147830L, + 3962787639412434933L, + 5751063116956730026L, + -6343210590541299672L, + -9027452407994212939L, + 7748080448177464210L, + -8875675911298011676L, + -3943374007835482499L, + 7098683995859102865L, + -2275458998280053925L, + -4628453854860491915L, + -1529511772279148360L, + -2871057272253482780L, + -334841257423340530L, + -7314747545247602053L, + -201172568470226645L, + -6965846975881685612L, + 2309595871631956781L, + 8951003723927622968L, + 3001873710915957640L, + 2012064170299142173L, + 7095981982072554477L, + 2920562163667542830L, + -4511110467250954239L, + -7166611815479236612L, + -2211021712129656794L, + 1338540767674038758L, + 3487756347488888084L, + -4937557446668954437L, + 2620388879014721175L, + 7208356694606927210L, + -4513132828283918504L, + 6317549580437550543L, + 2401779216570746255L, + -5457469669547078677L, + 7471661866970627352L, + 7386623443212346251L, + 6923730215630122759L, + -2325097522428671189L, + 8000364301902289246L, + 4925551359859147160L, + -5595982422094382548L, + 7228349132916965209L, + -4703354695115981511L, + -2115306052026418681L, + 9090854014723212293L, + -6068838827925313383L, + -6558621713962157376L, + 1473800012311082935L, + 2525181364542947966L, + -6021645913223485972L, + -8318988851482275654L, + 373007065698472266L, + 795167131148895585L, + -532571991837954792L, + 7238159482918777429L, + -7525111696825330223L, + 6189481850281476163L, + -512400154882781230L, + 2185412829792057998L, + 8303821120875906039L, + -3658266464759815456L, + 5534191248734418007L, + 6101574779391286487L, + 8145964650042952627L, + 5391320846882423376L, + 956217201277458121L, + 2237749983378005618L, + -6656683242892884554L, + -3394474129803761342L, + 8406074839295737353L, + 8623233445127821330L, + 6897419204888614556L, + -3873285223086133426L, + -4449195818654013260L, + -4380415985865610994L, + 1843484917925416568L, + -3683421128553731612L, + -6759630266574317021L, + 7963823663074411611L, + -9073210183338934836L, + -4207841706309087395L, + -6317104811444343048L, + 1176967159244991718L, + -8150985710604331729L, + 2463641502615436945L, + -4649906465921856966L, + 4753784510776661068L, + 1401826846930455507L, + -7215160016399204667L, + 4222527227332022097L, + 4242038843438232290L, + -6229200518763707451L, + -7634229331990944723L, + -5906084857878661851L, + -4471729319982253726L, + -7488818713861180407L, + 8958437567708072797L, + -4361717585953265517L, + -3589345870120547258L, + -5656002784155139233L, + -7405858066073224924L, + 7261298787749646565L, + -2118323539609274283L, + 8440646816505080462L, + 4907492019172743241L, + 2971795108974926972L, + -1111694536287943778L, + 1092562971031582110L, + 7435780765000923721L, + 5815238393374335255L, + 3728879363004790298L, + 7950374680552679377L, + -1559646550697408809L, + -1009638403217698280L, + 5477007325533850929L, + 2802315771636654550L, + 1359831828875761363L, + -6244291732477211457L, + 9138108823363225790L, + -5700703633273694371L, + -5189931767235375959L, + -5917217031437644153L, + 6559980057173897885L, + 7585954365066361941L, + 1833254434142522137L, + 2622798612834078243L, + 2935894269140572959L, + 3342180495858759098L, + 7763655187214368195L, + 608976619205971467L, + -4493083204513432310L, + 5655458152670549588L, + -995372262620475933L, + 6725108152764242753L, + -4152678539161864839L, + 4879330012023732227L, + 299691067249437340L, + 8253082866296742941L, + -1349088245542024700L, + -930670635091392036L, + -6305033172145799503L, + 767676528758696723L, + 7848289152882068204L, + -5335123725692922309L, + 7618587959592606045L, + 1310623412826253949L, + 6105911509337366946L, + -5132873445536420119L, + -5066374717991788365L, + -4196018003514359930L, + 4602399218983903018L, + 6996237050722228275L, + 4750432263399753517L, + -6552768219041772261L, + -8886514643984898377L, + 7353718498017818617L, + 3420752363982256164L, + -3106921624226184176L, + 7755185569018499850L, + 138048424823142520L, + 4574855394856311409L, + -797116754680671576L, + -6319525882248058891L, + -7211292892013797268L, + -5969262208310571743L, + -2242517284471541983L, + -2134523085752830969L, + 5239925547316736378L, + 2211989170649079345L, + 3951874086467810189L, + 1541713943974254342L, + -5392854420512731723L, + 3564316510315168871L, + 2901564687206922350L, + 1540984989266277585L, + -5588692335575710649L, + -7656900483971665708L, + -1269975572006533380L, + -8586683894725424637L, + -667220377486025270L, + -6992322247305413343L, + 1020432414035508475L, + -762737570699341127L, + -4996438874277990597L, + 2399099134154679381L, + -7294753205977958107L, + -4330814694281211877L, + -3424505945178467498L, + -3908232167211290102L, + -1715708172189155463L, + -1541677764411125216L, + 1443437733037296364L, + -5699613322350318170L, + 28422381221154018L, + -8448942739014323861L, + 94089349704640679L, + 3121324325667558058L, + -2027215282474423693L, + -9090860166446867101L, + -5570813680167514715L, + -4433017494388855624L, + 7780214454833321289L, + 2818118075900140158L, + 7909566890394565636L, + 3281719552865083509L, + 2293428426098439431L, + 4831877444478608421L, + -8036810704178721498L, + -6696440698423871679L, + 424663572619708233L, + 2210379950234460182L, + 4488772831440475400L, + -6238973969104209915L, + -2892035378057749818L, + 1190083349888328687L, + 1900956434625552346L, + 5686029047839893831L, + -8652319297499303518L, + 5660206937964935444L, + -5693798368774435246L, + 326881025455212277L, + -8376143443592681499L, + -924714482174160655L, + 2731102432407909647L, + 5974710608961653241L, + 6662943015421622990L, + 2629145426514230124L, + 7653779470428211936L, + 8231699528634814943L, + -7880485152483421857L, + -8715291256937697509L, + -2608260639142008146L, + -2891414416406033026L, + 1006672424561275863L, + -5345465745471823175L, + -3007098514343148833L, + -8853686550740270619L, + -8826799561287303533L, + 8800245871751669511L, + 565431636219131046L, + 6137897978460556916L, + 5482308004417669307L, + -3006854606371770142L, + -5550863738981833513L, + 6860154257076535929L, + -7830408716033920139L, + -6220766884162806429L, + -3254641290637732033L, + 4069104293139053208L, + 1298727460612851492L, + 5145793087755505159L, + 4012194405015900827L, + -2096633266369036577L, + -235600124490809513L, + 2256248865523312538L, + 1856550792634706370L, + -6338437638663913139L, + 605690123879344699L, + -5972006707479557169L, + 2788841617850067275L, + 3341756482258277517L, + -8730087995322499274L, + 5666761853789513177L, + 1427855942817620030L, + -2247084578644277545L, + 2632056116244532492L, + 8983184113458203674L, + 6222824259917067927L, + 832847538082989274L, + 7408336855734508382L, + 2463234904146980715L, + 7616355816816829131L, + 5437320614714817066L, + 2176649963064497163L, + 7847964877858458386L, + 3676215252045438118L, + 1457265625453915305L, + 421670244665897930L, + -537286355906412984L, + 845546777083974630L, + 6294586905906742451L, + -6979812383811440761L, + 4101166573373719960L, + 430647036995334093L, + 2563569094767382754L, + -2226117486192197040L, + 3989815455278220803L, + -5573460076032648378L, + -5149764105493446507L, + 8908023797302087394L, + 1579875413248797693L, + 6557085398158756277L, + -1860582499397819682L, + -3940264269551745098L, + -3760050418257691649L, + -2749137550200198091L, + 863749834414320446L, + -1701674908797410602L, + -3441531459858237116L, + 7781166611943523849L, + -8747694838109223765L, + -7940615954936651322L, + 1761800111692886098L, + -7563608795264216209L, + 2430120273101259962L, + 3034607409190630193L, + 7596606678605264709L, + -8815959038019965324L, + -8056592803858661736L, + -6054319005531061432L, + 7637990614259037480L, + 155762651336866309L, + -5295066003461610118L, + 2097996021613363354L, + -2649318637576910563L, + -4710689453059380010L, + 8675276565266944323L, + 4061820304631504890L, + -865251409507836874L, + -4305544705996842550L, + 8133733737104758782L, + -3599082219550900640L, + -1172444168425884022L, + 7002178848795582841L, + 8753574524527561837L, + -7959972011549631263L, + -664335750987460129L, + -7761182775497779250L, + -201978935828898840L, + 5748605939155571413L, + 432959146257511060L, + 8597688997048592708L, + 5979346454620003082L, + 6682666834922578474L, + 3635671342630844084L, + 8295581682942403968L, + -6056716329065906860L, + 4876232349596700627L, + 3282465211073936357L, + -6277210138874800012L, + 86063810903062668L, + -5131034425726984549L, + 7879994284944917570L, + 3805360137603820244L, + -4819745855255108901L, + 6005083603591253720L, + 1260872260703386533L, + 6208805585589862489L, + 4467145362283493250L, + 6925593199187107448L, + 2290814776012496288L, + 2202094536385319447L, + -1583289128964920170L, + 2414314858213839292L, + -417375850490384234L, + -6775757096712023859L, + 1531877516325565400L, + 5092160435195199211L, + -7779989257755281504L, + -2910324314591098862L, + 8497090690994716777L, + -7802963550632908400L, + -6411284901845568322L, + 9216337043421866495L, + 2437859992012674232L, + 6960237011186167617L, + 5100162418749277386L, + 6509562170805894274L, + 690433361758303077L, + 5936816351771558334L, + -3601277060469993805L, + -978457311807747406L, + -4420940034475608949L, + 3538644062391991755L, + 5164625733904685628L, + 192170982312183453L, + 5014044649793050646L, + 9147945450485230993L, + 121096778422978126L, + 7076446543359171313L, + 3849792111065500559L, + 7235530029899206334L, + -6832803917257794399L, + -7448095328943903784L, + 636249030288914450L, + -5837508951408640620L, + -5494182545899908814L, + 139946096999437232L, + -7949772735307966448L, + -6777152677072204821L, + -648210928302263569L, + 1484711477581900777L, + 1415763754612838143L, + -107058891244037140L, + 312958362296582989L, + 5071518533113132226L, + 6638935098145563092L, + -2867055004276813534L, + -4289503497262086936L, + 1497170552728782805L, + 4517675483628149735L, + 3748960245079903666L, + -3691286664879128054L, + -209359184536764749L, + 2491341916818449085L, + 5499205217633027745L, + -5512709448748519671L, + 4557913818063026938L, + -2112204135968966196L, + 3440403110217462895L, + -5867323792132309155L, + 5420869064478055006L, + 318512041709141078L, + 1057553941897233483L, + -6895197562631981270L, + -5782743651675563936L, + 2659771847560443960L, + 6592601119187496548L, + -517270229881128849L, + 2622604378506727519L, + -9170205866690625639L, + 4806630682514823179L, + -7776613972641981358L, + -1488298548028258830L, + -1715707210842296824L, + 3796221982870729299L, + -7882722580553373597L, + -1797548791879939131L, + 9223079908042491188L, + 7847548061281742781L, + 1041148225166463713L, + -2800037601895587534L, + -7832361151307182116L, + -6950576920927850414L, + -2404378656089204258L, + -7720362412660524651L, + -4901646243176144926L, + 6432612866296388591L, + 665821462715291984L, + 5024465184664377182L, + 1558901948449801231L, + 2224934457550741787L, + -1486153720652331467L, + 2152321067003602002L, + -1858128886354189097L, + 2873839996181438535L, + -243875524287970697L, + -1376873654537129986L, + 3287122656145633441L, + 3770833946582728674L, + -2764900700916121857L, + 2560091717993161785L, + 5504786539926877426L, + 673505854315501819L, + 1264431652537758499L, + -5043418235491208409L, + -6769065002135856586L, + 7666088207808456995L, + -2827685615289224220L, + -5429383711816435171L, + -3134385201210164932L, + 3020879270457681824L, + -1689344584352272080L, + -9040930749904066060L, + 1932280955101101310L, + -4992572509975070322L, + 7546307129163923078L, + 2939073542428222766L, + 3374974368464231869L, + 885759554366311L, + 6593789636519856798L, + -1624132412418983395L, + -6031359656290740003L, + 688983212618230553L, + 6369052776794949918L, + -1377714920269304294L, + -1057940749189840506L, + -1655685782041312329L, + -110552080942842283L, + 5250633774704933933L, + -7909648255758272745L, + 719735976337939580L, + 3645906512854567933L, + -1860978834085668115L, + -4349804709624489457L, + 7923661347327064185L, + 4244126846532735429L, + -3251399312816082643L, + -4937029742581158563L, + -86298941439722272L, + -8597913327563881758L, + 5039882027531808464L, + 8056647111062079524L, + -8976752115766926062L, + -1690394607348932339L, + 3378746565484573129L, + 8416003090844044193L, + -2717024430934601010L, + -5701892799453780386L, + 1533981283496523540L, + -7462371343115417598L, + 7010080256761797460L, + 4478373719647299143L, + 6305458678328463570L, + -5102763036459098393L, + -8778795989564198209L, + -2268889645684651974L, + -4555916510323499535L, + 9065546065927673888L, + 5852839483910534806L, + -3402482240912256878L, + 2023722994972298169L, + 5215407550830003324L, + 1071468158469513836L, + 4955237436537987038L, + -3083989516400027076L, + 6722953813435001988L, + -2387850610416371552L, + 809463730078568982L, + -5395203458608056891L, + -6137800097014878795L, + -3605527194936796968L, + -7589842792710116365L, + 8069067842420108257L, + -7454408306272078350L, + 2339188701288559996L, + 1008425726458324286L, + 6847676052807732318L, + 2271618337058209406L, + -8281033180921892670L, + 3604010165737741236L, + -8269928557793008073L, + -447391999287823556L, + 8028984830780334836L, + -3883350805508230356L, + 7482610679805814070L, + 6500112572029535883L, + 6119648543352512696L, + 6922212850686981745L, + 1734731947537567857L, + 4101619546129582628L, + 9155049639883886519L, + 5849304319215085011L, + -135976101808023055L, + 3329888204068201272L, + -4336188293967075047L, + 5788433959497374483L, + -1402363557578146821L, + 3588707324813677961L, + 6715232528053729851L, + 7169368150013526008L, + -8706746826857587245L, + -4819316543846777649L, + -8782313301067526525L, + -8916832875484128383L, + -2346600299358242263L, + 1904681875169970567L, + -6704056743702639344L, + 2270605299750783360L, + -3940808304480228961L, + -8321565943725548488L, + -3825742229541937514L, + -2349339074190735472L, + -2948486946206330984L, + -747906506207273746L, + 4280562720015859798L, + -4136257343808753176L, + 8445283324198191059L, + -8404850409602104913L, + -3264457032343850047L, + -8759790595969078254L, + -2542190711281684773L, + -8843544063303913454L, + -4003746482399952206L, + 3841695822551400168L, + -3588090911679720182L, + 4918585626351510199L, + 9222791837897484065L, + -5760984091213555378L, + 2491736142884395009L, + 9176699063949977552L, + -311336022868801049L, + 6098071943696363607L, + 3781539988474542156L, + -5991444272878304549L, + -7058079929087833240L, + 3692880174470651745L, + 8043184184871662514L, + -2260533056334755470L, + 7862870576355526775L, + -1273628657555198089L, + -7116245059732632210L, + -6206223953545513505L, + 8769478588548603347L, + -6809293819712164844L, + -7072037946451047577L, + 5145959967698376997L, + 3918549975422395928L, + -3688153306502628396L, + 8933640809529662946L, + 6586386948093068301L, + 4314174515802583045L, + 6042832017761248999L, + -2163096650317259801L, + -1301538385158714097L, + 9157628132063555931L, + 8447192224483369575L, + 1082300847283178879L, + -8765613093828266962L, + 6523561351628630699L, + 7878456944142132573L, + -5878800239136723413L, + -899016955838748566L, + -968680680108344572L, + 8149351788840205925L, + 7767149159758237380L, + -1002433668001324671L, + 861378480610089679L, + 5131370442347562734L, + 5891997968737511949L, + -1134130780427583438L, + -2721284507442384384L, + 3581758406053663578L, + 4711959109881063237L, + 3814833207703197149L, + -5498755072540800142L, + -434194050930099095L, + -1131324138179189444L, + 6335673834129040499L, + 3840591353873435091L, + 6691477876637098998L, + 5389042814799436488L, + 8492537662085986759L, + 9801065220990358L, + -8991404774454959964L, + -5967334022174632862L, + 8423499844379835696L, + -1121320485100692308L, + -1137347326607533713L, + 3579131621253541604L, + -949637496239973913L, + -845717236495377944L, + 2627652869211543871L, + -3584273871358543803L, + -1231456733798526473L, + 6404279318428525466L, + -1959366387574498651L, + 8659995475649499110L, + 5687743493891209750L, + 5734157541830063944L, + 3807145789061111632L, + -8728883033962465130L, + 1886310705344218044L, + -2869995344352648369L, + 8631433038774110827L, + -5196628823587587974L, + -7457206590006693637L, + -5287470411743602489L, + -4100864542827687276L, + -6925193246164904686L, + 684773938147799771L, + 4684480184200832071L, + 1138521418475557396L, + -1024452235617887100L, + 370178077665262107L, + -2580904250658458088L, + -4067270455265760110L, + 7883457924958258236L, + 2745236661071909096L, + -6638753008619557401L, + -1928563245103591922L, + -5391677730310963265L, + -3443398620200795730L, + -8921877650888014333L, + -2549654053467481876L, + -6634007310328959288L, + 6662969652277689957L, + 5704789109069509625L, + -1307333292330657763L, + 6533595699848914839L, + 2206229619406776067L, + -7059181012292774208L, + 8587013829275411963L, + -3759394797281060169L, + -8332558387862436192L, + 4058454963111191922L, + -2909318126609562718L, + 8309425769040304384L, + -3332518656544710523L, + -53840526904216763L, + -4392299612463469408L, + -6495163012164872108L, + 8283822043324591205L, + -3839429045227492113L, + -4554258591908844950L, + -8717791527048532273L, + -6680294812840082731L, + -1514076315369906827L, + 8342331288999106348L, + 4467472370913596089L, + -5258687569970231267L, + 6428083210523097473L, + 2293947403016663486L, + -5526361602248141114L, + -7270937093961275072L, + -7226206738482320242L, + -267988759137059367L, + 3757842653020528703L, + -654142607214292501L, + -3877320323095024097L, + -210352008325460011L, + -3777353653906366683L, + 4104559760354145145L, + 6351620637332827086L, + -3953047538968937343L, + 1977509989365985520L, + -6096612777648073834L, + 3655449697279862217L, + 6371929595416244955L, + -6719663260573101322L, + 8235058461435871026L, + 8223610568265677874L, + -636776168225445543L, + -5658531495972000806L, + -1315157075774308702L, + 3318184564168373738L, + -3870791042207323999L, + -5761074459524531162L, + -7589695080417675674L, + -118243652515378968L, + -5606050504941145854L, + -1682232575263053834L, + 2064607730151462051L, + 3860046528687723210L, + -6935238833286905572L, + -1526898475961616862L, + -7786760789279579722L, + 6367271805286224450L, + -4333115896551664911L, + -1229178972379399952L, + -5406430689127328314L, + -8536830855104540258L, + 4592858633504932985L, + -4661004590562426651L, + 1900079872513330236L, + 803518532278716272L, + -7227731911919645710L, + -1531800249475624901L, + -5068571120099635260L, + 6954901733800148115L, + -7075071323703859828L, + 1447978964456769515L, + 860006115119071319L, + -2067420548322589555L, + 4638996254844315967L, + 6983236581726963935L, + 6708882819304554132L, + -1077037295677468865L, + 3623478619549261514L, + -8551083693862102837L, + -6864926796047150583L, + -5583309839740166644L, + -2047952294766573645L, + -1296070923862863512L, + 3533321735634917235L, + -1137358684259757076L, + -8080333153054443456L, + -6770927466908143968L, + 1677314511582577698L, + -2630259631962080464L, + -1793645900673563419L, + 3600237620008462975L, + 2180027379579890660L, + -9043677058766520350L, + 3962397017521642626L, + 3977072778934081031L, + 9036155278583684186L, + 4719201700299004978L, + 195773270223425425L, + -3391740091956199499L, + -4297719063714682956L, + 2518769717461479967L, + 5163274893178164221L, + -7935837524015792569L, + 3725316512735597929L, + -6062355987398187561L, + 5072788521812186052L, + 4756745374124465344L, + -6691048140593722302L, + -4453427560142816958L, + -8908616043104241784L, + 4680671232907313257L, + -6131724261229112714L, + -9108450687466015537L, + 6365495657268753375L, + 6448165814018765014L, + 7071162731007451983L, + 6828906714271770482L, + -3559294295246311028L, + 124771238363526084L, + -3293309753712400861L, + 8896706306255876093L, + 3125408161217615213L, + -5861463414798312654L, + -9036260382640522754L, + -2941595857477708459L, + 6033142563060557598L, + 1099630200403990563L, + 7959429886791854178L, + 1535421567087429521L, + -3523681894692531197L, + -3906144409472427412L, + 6483996772781688720L, + 4132319255708563987L, + 8769726356542128993L, + 6738613111825331757L, + 1764580723100293334L, + 3299019025645495247L, + 2239605653730261397L, + -6200467116936956633L, + -6291344345384672622L, + 2565928296401167337L, + 5329865919971566807L, + -8575034623756510146L, + 6368322753797090715L, + -7493350249074734851L, + -1948050475401750220L, + -2542388860306602080L, + 3132812952361473979L, + 8662503282931471374L, + -7226118518078524751L, + 125513287940370920L, + -7105850358401444205L, + 2873891704788790693L, + 375644362554273808L, + 8779595029680158187L, + 6520575959918535178L, + 6481335563279395683L, + -3958324538875210597L, + 2650332007800900579L, + 67216421894692841L, + 2892388889322576563L, + 447031742152452522L, + 2214867384342611779L, + 3463418430384064877L, + -6736581145771083272L, + -3097757825887262572L, + -742646863032103227L, + -675900178715113798L, + -2232567950500061233L, + 1712025609374863027L, + -3405265351896222950L, + -7357424915587192954L, + 5899042778652661141L, + -7187291342974761805L, + 3480937052474976673L, + 997099418044934990L, + -2839517833272115276L, + 8199436817352462608L, + 9072737280134851879L, + 839795799971829718L, + 458252816075262707L, + 3252541827624060629L, + -5029727353658396637L, + -4967837872862091654L, + 2146776628928215216L, + 5403743629243841306L, + 3306799506878402965L, + 4468336141473957274L, + 7023113564987990226L, + 2871980174971968592L, + -6665846774723588486L, + -8521313230784523850L, + -2899150205599417383L, + 1992195265166010323L, + 3610880564010872990L, + -8962461672227066573L, + 8499793696703179099L, + -5174175353166984262L, + 3773412144378555582L, + -5377488598550438958L, + -227481030440141534L, + -3003034596327281460L, + -6010571883582226691L, + 5285640267764709652L, + -9094570939029139554L, + 3302183665375964446L, + 8185803481915750000L, + -7832879598569001202L, + 9185495476894972675L, + 9021601549322560342L, + -1033483127041468323L, + -9094719449194039442L, + -4246271926877732985L, + 5329679602094503622L, + -3123609535190446287L, + 4714766142804686442L, + 2489307805887894890L, + 2987790131896782326L, + -2963677483725852236L, + -8529934738168520503L, + -6356353435089583010L, + 3208586395891790363L, + -4407123126725047459L, + 8157441934654253916L, + -6109838368688820127L, + -4389983853453341623L, + 7652314184807664343L, + -4662723430367132038L, + 8667093623786488993L, + -3415543420133275181L, + 4904278838452314694L, + -4354230232880600982L, + 8861799057857753L, + 3552811093870745879L, + 8634119875383707854L, + -2732631755040740128L, + 6518885727185543342L, + 4341137614328678730L, + 6793266319858946131L, + 8047455342123276414L, + -866422210016420449L, + -2975253122827530056L, + -4030176003307022576L, + -4241696461887318612L, + -4753266504739240553L, + -7373316743164657129L, + 6048513984860600758L, + 1814258330875604106L, + 9109940689954894985L, + 1579558970146774347L, + 668478211668974619L, + 8409518560944185002L, + 7245729396754890299L, + -5114268398654367847L, + 2956616124692577442L, + 4461886846778383058L, + 959690196566065732L, + -7235204044940286838L, + 7981158344195854661L, + 1833698125790755138L, + 7752754976810456477L, + 5692118834710835902L, + -3793683786453929372L, + -5581772364636870855L, + -7470774962401733293L, + 8780664591724430174L, + -7663125741516067028L, + 5829471574991825780L, + 1182333455500273019L, + -1726270951016459467L, + -2746428321520070969L, + 6832833992125314751L, + -3990613509805030555L, + 2400486545587757625L, + -6598170744898189777L, + -1995198747364774857L, + -3645842663215618557L, + -6553956802949933979L, + 363585666263112429L, + -5656547416142849554L, + 131159332135711557L, + 4242991056913343886L, + -4674809189780845966L, + -1954374021725723642L, + 9000512499144627986L, + -4966087500556332423L, + -5368443575882114199L, + 7898708771797640436L, + 4954393344642394763L, + -228876611915096824L, + -3517612841169834059L, + -3181203061349135348L, + -7887316482076885972L, + -7491168484443218074L, + 1505841500971991620L, + -4819676400227780409L, + -5600600902750799703L, + 4287196606575127498L, + -6631038754487834066L, + -8562057237102997949L, + -3310437032247565299L, + 5856634576804593925L, + -1659423729330836678L, + -2785469434848827216L, + -9178954688981005208L, + 8284532255782100018L, + 3932114027983614574L, + -8735736194352900940L, + -5947824514040167701L, + 1555054962173652536L, + -1028318040091115332L, + 4142937213480146786L, + -2819444980269809917L, + -2903074845803234197L, + 3718049583878739327L, + -5493173480792612991L, + -4746130552040956231L, + 6244568873371787043L, + -2997679871934966832L, + 4047215048138865730L, + -6551789563963923059L, + 9086055720517286271L, + 8876034907713774156L, + 3680389259422527058L, + 6042866802807055050L, + -4886080504692397375L, + -7166197738900036643L, + -727151388570173900L, + 2438604478622089045L, + -8782162061024071951L, + 9077567357215978574L, + -2871872737471270227L, + 5320002012835335589L, + 5539849377632910446L, + 7555126502803598608L, + -8125224475094342490L, + 7417955058148509629L, + 4176877628224197597L, + 7598278370710374380L, + 2265897989342130546L, + -7061482734014550086L, + 1468468196263413305L, + 68682113048681479L, + 3762225435622216659L, + 4581877841476416419L, + 5115735211430226046L, + -397731465197117692L, + 3802999106815691779L, + 7574760794857420046L, + 4178197313545546553L, + 9065628242529864979L, + 542937206029962193L, + 1542373631583440917L, + 6903559734881147673L, + -2071796881281526902L, + 3779795498327194080L, + -2217268270456792594L, + -8059036377920200513L, + 5425988266816609684L, + 3561830549061618056L, + -7500972620191462258L, + -6776359714207180134L, + -5775998075012891173L, + -7755164007855727652L, + -4908348827451399810L, + -1162366502935483389L, + -3581470604892760162L, + -1434370488502028008L, + -1493293905909468959L, + -6762524287730181241L, + 1393564479464918401L, + 6717807842217858780L, + -2269779449488763938L, + 9119207083214966580L, + 4437289221718108033L, + 1991815488616873724L, + -1136008736729825773L, + 6919259317959590395L, + 5700567409540575886L, + -6511943523783520343L, + 8471138532439345892L, + -1261020616469785625L, + -871122257839774394L, + 5853266956701599170L, + -2605324811026081L, + 5645723143070327343L, + 6678903618140079830L, + -8243425527465830189L, + -7366977412613262267L, + 5554112623362949635L, + 8508696414094887570L, + 4526724121376344377L, + -3066464409160921518L, + 6423971479710566480L, + -1301150937530073813L, + 7047171805158365362L, + 6607488204808324896L, + 2550589198730302889L, + -1508652597994003459L, + -8797285250854566260L, + 4531577529333440300L, + 7171511780196023810L, + -8696995432677729109L, + -1038277725665095082L, + -4030021971399704454L, + -7142316504058264789L, + -8690342808784496917L, + -3538025267466743323L, + 3030344740150338756L, + -5434476681454308336L, + 4747881963413479619L, + 6649081146297801785L, + -1340297105335493395L, + -2345199575979290182L, + -5142497021023029281L, + 6590959395881104212L, + -669027690510749039L, + 4713909714515252237L, + 6334133652957330690L, + -4130611448171970254L, + -8777249173946876665L, + -3777422122544011758L, + -4139822748883105829L, + -85322879655457932L, + 8510613507788926362L, + 8480533752847008903L, + -1501849715563565256L, + 7144010316023561074L, + 7071721153639906878L, + -2413842258996393407L, + 3829076351340781609L, + 3904259427140354464L, + -2423161203681766273L, + -9222948412120414441L, + 2232806743868046887L, + 3459293971647694135L, + -4958044470517187570L, + 2702008978364322255L, + -5230685167113972622L, + -4777581725252095139L, + -178566492057125337L, + 5473668624447677467L, + -6025569476816496835L, + -1758476046405271590L, + 4318010125119483290L, + -5001898604592523465L, + 4496672693040208250L, + -6249539806063036132L, + -7752211883834007080L, + 5401928633460905475L, + -7924780124408034823L, + -5852842870036885474L, + -1507586788733048669L, + 8723145826212343490L, + 6322146995759068109L, + 7033327335320195047L, + 2731703606190537636L, + -5700197206770306283L, + -7681929128588407075L, + 4915318349456884393L, + -4365674444257230772L, + -618412543643891621L, + 5389658231644689771L, + -3464092788986188235L, + -1050158483149088836L, + 2986789282075383014L, + -7095920626607872836L, + 5041839261426701960L, + -9180003565648806832L, + -4136797423318912582L, + -815263725971673785L, + 7751482036034122791L, + -6582902412740766080L, + 4948480397753687589L, + 8076288905210502302L, + -9107950489265491053L, + -6184418323857721083L, + -8394291702992930332L, + -3765480365347368667L, + 9161366530222497706L, + -2767769147585489819L, + 8629853602447578989L, + 4143140731787551070L, + -6709802780961091740L, + -905525597452535126L, + 59611890502504912L, + 887996528204235726L, + -6522589813044041015L, + -717562431083190695L, + 4413597631385084460L, + 685793075458769616L, + 6534412965158226614L, + -7466805892367058580L, + -1643339784427405237L, + 8108897583594557150L, + -3012505670609614813L, + -2102992646348794512L, + 7496589075754797803L, + 7374879453359816181L, + -4473020896511090065L, + -2144052467882725474L, + 8932411294479920804L, + 1662104279385187462L, + 505577020704587182L, + 8970226030106571298L, + 4740935558188763942L, + -7479171385872798231L, + 7795864469149986219L, + 1988890416069916870L, + 5328957726704894445L, + 6393309991805794816L, + -8023969082870037181L, + -3201662046137010635L, + 7364167842238108568L, + -1133670122146177765L, + -3700583274673702753L, + 5152863800535605047L, + 4340628140712624150L, + 5588611203430726905L, + 2682781254448818030L, + -4334335781100941681L, + 2486482109045101170L, + -222120907104518499L, + 5461720682682027710L, + 8953356406381104317L, + 4813649794280024185L, + -8815822744547391388L, + -119150930688834339L, + 5696219244854669615L, + 8826694157719678034L, + -1678317963810155461L, + 2312220003237053610L, + -3288132327244573070L, + -6655294980817812847L, + -3093613585240964494L, + -1504599840801857900L, + -6463236998312950925L, + 5810208611405255502L, + -6761690440397609367L, + 451950190532227640L, + -5815456944452977190L, + -764130306143846512L, + 6419889081579466867L, + 4398197193823554358L, + 1464903517901841306L, + -1506288216502917578L, + 8699886991841245818L, + -3380656767633421271L, + 7278933867517081603L, + 3846023845717926438L, + 3407601931308300031L, + 1905732166195179585L, + -108117922380454789L, + -7519861222866947951L, + -4972130809215364346L, + -3021088137554827679L, + 8043600973137368044L, + 1434512585622151100L, + 1016884439578050772L, + -8647546074167685968L, + -8506558926671468128L, + 3841531502952176241L, + 4079049958054926435L, + -5539805586862437496L, + -7883676797140300306L, + 140190142986856503L, + -2694098382777014524L, + 3353255930521897564L, + 2673408461261660763L, + 3333109393952734968L, + 4825771068490982684L, + -1033017699452578891L, + -6425096031606191368L, + -3656030991400647770L, + -8647425424751627856L, + 3478736455049888956L, + 16599786738656663L, + 3377618271754536312L, + -7335129354324713170L, + 7006821265423054973L, + -6604032179699952888L, + 1631574662141238563L, + -6071005127816416359L, + -160948602692816917L, + 2439292442953103260L, + -7784485611988136914L, + 6406517206208162673L, + -3111851768592482815L, + 614615425925214040L, + -3556195010057046934L, + -8360577559236335104L, + -739612675357837554L, + 7772269085929933056L, + 301334074305006580L, + -3173646397989105785L, + -1841824288198551420L, + 1197412702727156776L, + 1316932784236645744L, + -8257483426031914296L, + -8846153844918116222L, + -270342118487428514L, + 773674155630100861L, + 6037581810683864126L, + -5245384017768292829L, + -6666883988353617786L, + 3478725688838981124L, + 5546782277057101197L, + 1942226182099172621L, + 9102708557688253903L, + 9057469348188803174L, + -4031312569229337466L, + -9072824545184945687L, + -3855790695273650364L, + -653872491134432764L, + -4080206884907012270L, + 3311573742599462083L, + -269764702825894936L, + -2766987632263151155L, + 6602535166262597916L, + 8827004592088991732L, + 1592583601190212294L, + -3667633871893247038L, + 3486449146725138397L, + 4359563813403699388L, + -4906066947120349290L, + -4330401382584040114L, + 4803580003918030391L, + -235574200222954516L, + -1394367949090492983L, + 4737542241672587937L, + -8856986665935885808L, + 1817303441870832271L, + -7240430001371174281L, + 3145103301223918932L, + 3477270089202844825L, + -4891077676842527034L, + -6459627619991208890L, + 41856325087285886L, + -1382249026510602312L, + -2521070087258742337L, + -2328070419092090664L, + -5388262052233273295L, + -5999142598302515399L, + 5176296022819478017L, + -8067233187432429974L, + 8892405394182984962L, + 6981068794359751546L, + -8944306852219597850L, + -3031777418502459563L, + 2323104536537852233L, + 9124712187601380882L, + 9137253645240139706L, + -8322892360260055499L, + 8407207834684403871L, + 7071881337439672371L, + 666653966378152392L, + 8872525458728668509L, + -647279373040971223L, + -4461978934957838597L, + -8547295400497453835L, + -8365906280976763859L, + 6814338820251845756L, + -8627557778552684742L, + 1758840533399088383L, + -6750756896288158784L, + 6395311215695067196L, + 392880119943578248L, + -2323700597403900754L, + -6462812207087401690L, + -7551080163645560286L, + -9100215524786223062L, + 2524911097994505678L, + -2413500551656055296L, + -3127527627858617051L, + 28303212483427471L, + -6013779137277216469L, + 2384861921525290083L, + 8909147637811545615L, + 5899702029055461370L, + -9169591182444006478L, + -8983057629681813417L, + -8861230054592033877L, + 8410267594044953503L, + -6655030751206229874L, + -6267989963116339301L, + 31106559957685675L, + 6344345657589688690L, + 8238818461566157187L, + 1502493109774801856L, + 3469110631126639783L, + 2128732756904122570L, + -6695477927845519719L, + 2528367395277931442L, + -329099838923643362L, + -7212791470765971061L, + -3974900257611008409L, + -6102716001138106504L, + 5975084928006556639L, + -2369197195204065449L, + 4487412260085465950L, + 1389218775050647169L, + -210563038269997706L, + -922257600076658999L, + -1130043160249584113L, + -6984222506141862497L, + -2916447389269713954L, + 4788071442219355775L, + -6019318505971293886L, + -6494546725482896662L, + -4363700123795407864L, + -413176181805813162L, + -318122404650466995L, + -1599593833241308652L, + 2190631003347506794L, + -4995495324074558376L, + 4218530180585703693L, + 6649230517887455428L, + -2433122371099559642L, + -2330882739734692624L, + 8573791066461702522L, + 6970674048709593485L, + 4649249821199623523L, + 7311119499624527481L, + 4680575275115317809L, + -5342935153571170373L, + -3116361043570347782L, + 7648138161603070701L, + -7868309300294741850L, + 2168590009590153900L, + 1490446147749965016L, + -1283008494190853295L, + -3544718913503298823L, + -6534742186538530460L, + 8888468655599547353L, + 2087090769425642258L, + 7827670472827763897L, + 5012267323158846243L, + -7741892984083231808L, + -3464875091939295355L, + 6758409038153561859L, + 7975975224774285641L, + -1784622809729929558L, + -2393574261519991129L, + -6610200673241373487L, + 7928053024182934824L, + -5277949614542058690L, + -7247922641677687748L, + 2028835673665475733L, + -1777986108022598102L, + -3172999022236468759L, + -6985445521140497368L, + -5695545706582407660L, + -4309483684393591256L, + -3401005720978902388L, + 1936529279105293703L, + -8305374440470863587L, + 16315157402312675L, + 8569329186502607478L, + 3622231363337094235L, + 3976043631923911750L, + 2180152175451630095L, + 6056371270826025517L, + 8139874952265577458L, + -6194153431530741778L, + -8577895877125457083L, + -790303016491014290L, + 1748735841046690659L, + -4993780459372161153L, + 5287205275463538041L, + -6049243002864424978L, + 6094628311576432102L, + 1723598070277281371L, + -2030013138372962335L, + 581254472737031976L, + 2883452134968639016L, + 7463603388570246862L, + 8269801870818255538L, + -2721070413905263091L, + 2457346831596438200L, + -8372860384678057653L, + -3210661626851492038L, + -2431103856629925112L, + 5898720385544051772L, + -3594404508869529256L, + 7736856796149395645L, + 4344265719410640477L, + -1183171608899090204L, + -2897986809520726521L, + 8305011769957443997L, + 4795229490900606846L, + -4075891264094240154L, + -9041912526913309251L, + 4789314080457888127L, + -7212841446169150525L, + 7614738331996330350L, + -2806024093029511670L, + 7475540037729743195L, + -208315385211774637L, + -1296899054609750506L, + 2821295913762275529L, + -8879859100383139039L, + -1026712876851747915L, + -8740379160227472449L, + 292511471974483828L, + -6882168959749241763L, + -1890145082814895769L, + -4562439963586418047L, + -4665008591354792917L, + -390136948977793829L, + 2489571518656765596L, + -4606174591656425576L, + 3915092809925941183L, + 9047840161614493431L, + -3633022588647399004L, + 6942969346669131736L, + -6694490826379010151L, + 1324301462784912541L, + -131359952912781984L, + 7699402503208720283L, + 5622479144398033413L, + 6967949859886140765L, + -4032338302965368957L, + -5963416332716588452L, + -3560763554691360091L, + 1005099059372059445L, + -3613443378421770201L, + 8186020547591708957L, + -4239294927646312066L, + 8486099747374488535L, + -8232895327339487639L, + -326238615306018799L, + 3757565981936253922L, + 6778212967891221904L, + 3207873024341334560L, + -7523175474658440577L, + -2278786475151426330L, + 8466836425666023990L, + -4582382447378461393L, + -6578561293342792192L, + -5704990689206920025L, + -2389743517442092247L, + -4253115007157692595L, + -8929813271704719513L, + 5099815622657901533L, + -1568292864717899125L, + -8985414394814021973L, + -2456273479716732497L, + 6294081109509751388L, + 3028102295678003049L, + 3539887196501896592L, + -1575691248319511603L, + 8966746464734142359L, + -6995340021363899582L, + -7800639148789851713L, + -8224260699176813192L, + -1938885039339650999L, + -6014303778691459857L, + 6353855006008545499L, + 682899654558677209L, + -227004043734081415L, + 4175445164667592327L, + -5892774236575987682L, + -1054851063871573686L, + 7378945432015543779L, + -9025847508399685521L, + 8507123498478659641L, + 2634415008322296937L, + 8499997933084393618L, + -2343091536239164797L, + 4943477958300830784L, + -5716138953695402001L, + 3654955422185200330L, + -3855175918674625767L, + 2942012910816921425L, + 2135649495450577190L, + 2489749270232932598L, + 3075573886722866022L, + 4741621495679187373L, + -2533070995420675111L, + 8016604412923285952L, + 3655782710664522385L, + -331575483966243030L, + 5563239881147789110L, + -3536395547713373675L, + 7913843468604629821L, + 5809470005231530425L, + -4975803751638349405L, + 4232625781800052755L, + 6732116987820363984L, + 8254350875123440214L, + 8678768551976889459L, + -7648934972481089708L, + 3723349959659703109L, + 6247511200357726796L, + 8031315762976704315L, + 1080967314182171216L, + 8561519680933409213L, + -4881637187705091353L, + -1748916130722404954L, + -427313373952636003L, + -3301131413273237404L, + -1569066768226212095L, + 8869766464584553885L, + -1961352451311113660L, + 266916750915890668L, + -6043655819212470095L, + 6958639066650934551L, + -7491396823220354282L, + -5706244121092248742L, + 2058565949849149623L, + 3917621928532856993L, + -5285914392340260969L, + -168243632194730904L, + 6675032706416988527L, + -1840378443456062350L, + -7806824272957817769L, + 112697577821879088L, + -4000943011066585594L, + 2818144475816625033L, + -4440191780652473075L, + 5290425627535986178L, + 3439261124616388302L, + -8796398171847802394L, + 2206978116305603858L, + 8337592206550774275L, + 4830967377052828283L, + -3675693473899758315L, + -3108840240467865078L, + -9161001698053177695L, + -2297481807921754784L, + 6805568340065774603L, + -3391258244299519321L, + -749159983993382844L, + 7062232236008961533L, + 8333689744281941417L, + 2017452506567785764L, + -8052757095945795921L, + -8679429010410768062L, + -1669769454675143183L, + 1021385511452112192L, + 2735516449063469298L, + -8689901914251408811L, + -2768144086776923110L, + -2202724657096524491L, + 2163604710661256429L, + 440602864681103213L, + 5959058277963677044L, + -1962091009504664018L, + 7850741655764818791L, + 5642260926720676901L, + 5408898583245429104L, + 7038508131990238779L, + 3607846536923261161L, + -845982521020496047L, + -2264177099345700631L, + 20359578843289632L, + 525387587427138539L, + 7263487202515015380L, + -6022234835374448888L, + 8771216931413507676L, + 971990022205374619L, + 7021724132924988656L, + 7039083302981701109L, + 4204637396958585348L, + 4188090497012985750L, + 4376437258965105347L, + 739302444316090012L, + -6525785024015383256L, + -5902189526714689919L, + -2086878366253206692L, + -4180968549067503810L, + 520335013266400476L, + 2183825622398646326L, + -5564778184706962647L, + 8650796499367868629L, + 6133888236137780152L, + 3302115923459930139L, + -5937793818041183192L, + 6136033530618946018L, + -7445428676723525682L, + 5094265850028691255L, + -7682752822893337463L, + 2360556001507188553L, + 4691951638183144722L, + -3830875212384544737L, + 1394869612670592029L, + 6721262565314161917L, + -4730012123689790930L, + 6010638756354340578L, + 4031121074915162261L, + -8189520056149158263L, + 5699902859355185981L, + 4409202837690861395L, + -4004308357657832082L, + 324207669529782050L, + 4535231947997767569L, + -5065771485887356402L, + -6148808728279097894L, + -8715608844307329735L, + 5490745425133075827L, + -367120062639329977L, + -2362408583935145326L, + 4249838900346469450L, + 3354190632527652547L, + 8650024540421064319L, + 1390121173325989151L, + 4407722572355267530L, + 1305681461138455335L, + 6099199904041118254L, + -8896625676033180325L, + 839449618742345953L, + 2108603209434414606L, + -6476270516642075823L, + -5906022157324316338L, + 1786301043676368787L, + -734452738262121042L, + 9129473457452515473L, + -4270195884135199090L, + 2788589943226781334L, + 854782643768940534L, + -6834471408050497483L, + 939538118216915189L, + -752821676934059887L, + -3925004345170320451L, + -8932717110665275243L, + -7095359027251951606L, + 7643915390524006789L, + -1927702468531393748L, + -7842897924029333727L, + -2005262014091460598L, + -1463327401577112707L, + -1828846898463724235L, + 3421730855491731072L, + -2572236860591883027L, + -7674305242810151190L, + -2921293091126082953L, + -2112272959722776468L, + 5994003596842057813L, + -1403058426817118276L, + 8847371890841156208L, + -1502366106598365249L, + -7223092882480940906L, + -6863117362364849357L, + -6486108986580560522L, + 5841273524403391013L, + -3945405895274884805L, + -8374909777151107129L, + 53304606899741030L, + 4615695750455104916L, + -7114565447402461330L, + -4643391974067777176L, + -6418268910872627783L, + -6758153388660633319L, + 3883028944583062885L, + -8717746570766619134L, + -2916775336586188872L, + -8074909175856917009L, + 3525909159494548665L, + -6434174792604831222L, + -7504160568097417051L, + 2001874122000013346L, + 7613526286976804831L, + 2464361623791150786L, + -2129233914182690890L, + 3209269703778816910L, + -8010470561318389930L, + -6082567480910205891L, + 2027383934435049120L, + 1676758519641328373L, + -8606433480037293753L, + -566732216614183074L, + -7052986422070927806L, + 6759547283385841440L, + -6753685466722762948L, + -5378389309155242913L, + -6627920366497701138L, + 6374316983929412845L, + -2482225971676290230L, + -4599659905021815233L, + -5751984843591190616L, + 4511247687213585367L, + -2476604560440409237L, + -114383761088915611L, + 6450270090553874467L, + -5846154312963348311L, + -8623677702310698753L, + 2393721797395064071L, + -1818986917546634465L, + 4707876179516363283L, + 4194493322864848953L, + -5862485881220479014L, + -7779495775631012707L, + 1429810574540763592L, + 6243218102267301238L, + 3112138729863740057L, + -7917371226803982155L, + -3846717136498455001L, + 7941035918354784272L, + 6054418261287151348L, + 2241054973421403682L, + 2108883531438643423L, + -5118957553064582950L, + 6840064986465667257L, + 1701114564579911641L, + 7866363409355715940L, + -7811750917271050315L, + 4258900268014843560L, + 2910381907881532246L, + -7407853986731113039L, + -1164923521782235469L, + 5071804620493814073L, + -5221820283650092409L, + -2085943650488071863L, + -4691931711041122390L, + 5141081400574039177L, + 4412440312825017190L, + 865265935918874733L, + -3162395727240029817L, + 2583523221463203765L, + -2230477299980342161L, + 1259435039139370849L, + 1365261303243408423L, + 123583301618412419L, + -3355292811340436088L, + -1727563074004288880L, + -8133802905721685614L, + -6552132843349831539L, + -1887405913282768589L, + 579752349959797974L, + -30747658301300128L, + -927889569251598514L, + -598220531698559825L, + 2933084143972969973L, + 1881216270838286368L, + -8591542187284077544L, + -2746195460013203014L, + -4115580643333612767L, + -2101698311751878965L, + 5245788963589320347L, + 4270169879132043112L, + -3833918223343506508L, + 942125237032353686L, + -6956461266653105716L, + 7913560303134573539L, + 8866560449264109272L, + 1772637526204651639L, + 6195153795464161383L, + 8993984678406525057L, + -4726061955654809508L, + 3735265735496936434L, + -6130568352441921952L, + 914728955300562981L, + -4063651775288818415L, + 7163723758837672393L, + 6047067511151254132L, + -85970498549649175L, + -9052941052352548153L, + 4240460500266637523L, + 5163784737021140449L, + -4716331032104787044L, + 5489681070460969049L, + -5530595986986981098L, + -5278261126239207272L, + -7077173381332846300L, + -7391343501975496029L, + 7813143400706294876L, + -829387125962495297L, + 4670865291775900382L, + 9020186365194420955L, + 6433988241346982419L, + 5456431567263680486L, + 577121399356211412L, + 4315536067351582084L, + -2651573533423085833L, + 7729294536223119956L, + 823406537236537172L, + -3197784427651817583L, + 3073787778728381013L, + -6145117092298484037L, + 825473167547740369L, + -6384124143193023811L, + 6743275140960345819L, + -6607284289920060697L, + 6113681357284605143L, + 7689553101083010355L, + 7733899730013301027L, + 2492677562497092915L, + 4728492123871940113L, + 6678104742805246060L, + 5109599002723184885L, + 1552728313401432217L, + 4260747280707230837L, + -593097661878040944L, + -5924961133842904285L, + 4723826630465061674L, + 268913169937480109L, + 2542402711842995289L, + -1051287017878596624L, + -444276555201322762L, + 7942493575456109374L, + 3061527869577259411L, + 4193974852415330113L, + -1301232869890041839L, + 7435225101451773213L, + -9001651199021564702L, + 6863640439001667225L, + 5554839952330233864L, + 1018125067733426387L, + 5106471895041805751L, + 6755291848201476506L, + 204883989932056912L, + -2918800393497291312L, + -361123969592716017L, + -3248350955607675877L, + -3093925735525511829L, + 3287300458522620431L, + 200614927215937352L, + -3637256374159515512L, + -7088130147825572228L, + -1454877327154711975L, + 200290346546176890L, + -5273070491678100412L, + 9126524747081374017L, + -2469359255503465276L, + -5451210609015247756L, + 1345843315473598819L, + 5658367014892979201L, + -418967882289891730L, + -8563171322679387325L, + 3076280980125057136L, + 7452927116456175377L, + 7779645020063005680L, + -1134607767941445560L, + -683371285258284330L, + 3622514687262401912L, + 2057491561658004489L, + 1274581986030567362L, + -7605424030712005369L, + -1904495568695037810L, + 7235082449551676221L, + 7691343848640211912L, + -2574437254990241198L, + 7672749762009557292L, }; } diff --git a/src/test/java/net/openhft/hashing/XxHashTest.java b/src/test/java/net/openhft/hashing/XxHashTest.java index c470335..2c5bd22 100644 --- a/src/test/java/net/openhft/hashing/XxHashTest.java +++ b/src/test/java/net/openhft/hashing/XxHashTest.java @@ -56,2086 +56,2086 @@ public void test(LongHashFunction city, long[] hashesOfLoopingBytes) { LongHashFunctionTest.test(city, data, hashesOfLoopingBytes[len]); } -/** - * Test data is output of the following program with xxHash implementation - * from https://github.com/Cyan4973/xxHash - * - * #include "xxhash.c" - * #include - * #include - * int main() - * { - * char* src = (char*) malloc(1024); - * const int N = 1024; - * for (int i = 0; i < N; i++) { - * src[i] = (char) i; - * } - * - * printf("without seed\n"); - * for (int i = 0; i <= N; i++) { - * printf("%lldL,\n", (long long) XXH64(src, i, 0)); - * } - * - * printf("with seed 42\n"); - * for (int i = 0; i <= N; i++) { - * printf("%lldL,\n", (long long) XXH64(src, i, 42)); - * } - * } - */ + /** + * Test data is output of the following program with xxHash implementation + * from https://github.com/Cyan4973/xxHash + *

+ * #include "xxhash.c" + * #include + * #include + * int main() + * { + * char* src = (char*) malloc(1024); + * const int N = 1024; + * for (int i = 0; i < N; i++) { + * src[i] = (char) i; + * } + *

+ * printf("without seed\n"); + * for (int i = 0; i <= N; i++) { + * printf("%lldL,\n", (long long) XXH64(src, i, 0)); + * } + *

+ * printf("with seed 42\n"); + * for (int i = 0; i <= N; i++) { + * printf("%lldL,\n", (long long) XXH64(src, i, 42)); + * } + * } + */ public static final long[] HASHES_OF_LOOPING_BYTES_WITHOUT_SEED = { - -1205034819632174695L, - -1642502924627794072L, - 5216751715308240086L, - -1889335612763511331L, - -13835840860730338L, - -2521325055659080948L, - 4867868962443297827L, - 1498682999415010002L, - -8626056615231480947L, - 7482827008138251355L, - -617731006306969209L, - 7289733825183505098L, - 4776896707697368229L, - 1428059224718910376L, - 6690813482653982021L, - -6248474067697161171L, - 4951407828574235127L, - 6198050452789369270L, - 5776283192552877204L, - -626480755095427154L, - -6637184445929957204L, - 8370873622748562952L, - -1705978583731280501L, - -7898818752540221055L, - -2516210193198301541L, - 8356900479849653862L, - -4413748141896466000L, - -6040072975510680789L, - 1451490609699316991L, - -7948005844616396060L, - 8567048088357095527L, - -4375578310507393311L, - -3749919242623962444L, - 888155921178136237L, - -228195649085979072L, - -521095004075279741L, - -2458702038214709156L, - -2792334161285995319L, - 7509323632532862410L, - 46046374822258777L, - -731200582691896855L, - 933917387460394992L, - 5623144551929396680L, - 6456984547425914359L, - -6398540474588876142L, - 1224372500617079775L, - -931727396974525131L, - 979677643219401656L, - -8078270932489049756L, - -92767506898879473L, - 2379112167176776082L, - 2065719310945572007L, - -4972682801816081667L, - -7346559332994187462L, - 4674729779638751546L, - 5844780159702313017L, - 925606237565008152L, - 8164325403643669774L, - 5124005065773312983L, - -4646462236086916483L, - 4733593776494364101L, - -6408850806317360L, - 7405089268865026700L, - -2131704682637193649L, - -592659849139514384L, - -4386868621773355429L, - -2216833672566288862L, - 4022619316305276641L, - -60464713570988944L, - 2416749694506796597L, - 3576590985110933976L, - 3368688771415645536L, - -357157638897078259L, - 3484358739758473117L, - 2078888409435083535L, - 8053093288416703076L, - -4934736471585554038L, - -7784370683223414061L, - -4109284735634941390L, - 5982490102027564625L, - -4991107002810882893L, - 8664747912276562373L, - 8536879438728327651L, - 2358675440174594061L, - 5352236919104495867L, - 6340852522718110192L, - 5075606340464035668L, - -6313168920073458239L, - -6428599582591385786L, - -7278654800402467208L, - -6630626099856243581L, - -7548742438664634646L, - 5514383762309532642L, - -5996126265702944431L, - 4011116741319319261L, - -7289240093981845088L, - 4975257207486779926L, - -3945500877932691916L, - 1973955144068521079L, - 3884425912161913184L, - 7692681977284421015L, - -1616730378439673826L, - 4799493270916844476L, - -6107310582897997679L, - 3643294092300179537L, - 5406040598516899149L, - -3032420409304067208L, - 5044227119457305622L, - 9165032773225506149L, - 7553488247682850248L, - 2247298339072845043L, - 7380491470304042584L, - -456791943260357427L, - -1906500292613319324L, - -4025157985304129897L, - 6167829983725509611L, - -8678196943431064825L, - -636391087313417831L, - 5757999497725839182L, - 8999325347316115948L, - -6042339776328081249L, - 7988836354190359013L, - 2818448030979902104L, - -8484201484113382447L, - -1140175406473847155L, - 3042776987426497381L, - 3147338037480432386L, - 5065714330193756569L, - 8827021486636772242L, - 838335823706922959L, - 481844220820054909L, - 5333474685474667077L, - -3722898251196013565L, - 7909417627390150381L, - 7116148225996109646L, - 7520381989775811302L, - 6045444672904719015L, - 169039646730338133L, - -2144629916252757106L, - -3752608501798118554L, - 8374704774878780935L, - -5830926781667225570L, - 3202139393110256022L, - 4400219135677717216L, - -5663710220155589201L, - -2589002340345751622L, - -8240133511464343390L, - -4036798392879835146L, - 501599054729008501L, - -4851415719238782188L, - 7565157933617774080L, - -6428091359957700043L, - 4081845077806300175L, - -9016659258880122392L, - 7811786097015457596L, - 1357606791019752376L, - 6522211979684949668L, - -3462397075047559451L, - 3075504459164148117L, - 3055992297861390732L, - -7230492327399411047L, - -1128103378253532506L, - 1834607408788151585L, - 7065978976369231860L, - 6566122632438908362L, - -3440855531356735824L, - 6271453770746181891L, - 413365468403580071L, - -8342682158827061522L, - -3713303136987568731L, - -8959326895824091541L, - -2793862582117663595L, - -184756427409317729L, - -7052502019782453427L, - 3666196071825438258L, - 170204095295428634L, - -1880693509859077843L, - 5179169206996749826L, - 2866097700453114958L, - 1859104195026275510L, - 3782323564639128125L, - -6485194456269981193L, - 6761934873296236857L, - 5764605515941066448L, - 597754945258033208L, - -4888986062036739232L, - -6490228233091577705L, - 3234089784845854336L, - -5506883591180767430L, - 1491493862343818933L, - 3232293217886687768L, - -4079803366160739972L, - 4884134040093556099L, - -7274733680156962461L, - 5265680254123454403L, - 1036855740788018258L, - 423439784169709263L, - -3627743032115866622L, - -6311378083791982305L, - -3058076915688265687L, - 5826550132901840796L, - 8049712006832885455L, - 1707844692241288946L, - -3293048440386932248L, - -2458638193238955307L, - 943059295184967928L, - 3899561579431348819L, - -1516862862245909493L, - 4448476568037673976L, - 8738531437146688925L, - -1033913449611929894L, - 733668166271378558L, - 438686375775205249L, - -4325889118346169305L, - -238178883117433622L, - -7972205050662019794L, - -1263398103237492853L, - -8333197763892905802L, - 7796341294364809534L, - -1381767618016537445L, - 2892579485651013970L, - -3376209887503828920L, - -8575120126045607817L, - -1609355362031172055L, - -386138918275547508L, - 4598874691849543747L, - -2961781601824749597L, - -3032925351997820092L, - -4256249198066449735L, - 6712291718681474012L, - -4281614253751277086L, - 3727487933918100016L, - -2744649548868700294L, - 8662377383917584333L, - -9154398439761221404L, - -6895275824272461794L, - 3394857180017540444L, - 2010825527298793302L, - 4894417464710366872L, - -6879244364314087051L, - 83677167865178033L, - -8258406393927169823L, - 5042126978317943321L, - 6485279223034053259L, - 4442956705009100620L, - 316801800427881731L, - 1381431847939703076L, - 5172932759041399062L, - -69656533526213521L, - -5302643413630076306L, - -3956089084400440856L, - 372087412941022771L, - 4711314482928419386L, - 3255220726505012060L, - 8917854303046844847L, - 1116214654602499731L, - 2282408585429094475L, - -9207590323584417562L, - 8881688165595519866L, - 1731908113181957442L, - 3847295165012256987L, - 4457829016858233661L, - 4944046822375522396L, - 3445091217248591320L, - -5055680960069278553L, - -399195423199498362L, - -8109174165388156886L, - 4967185977968814820L, - -5911973391056763118L, - 2239508324487797550L, - -954783563382788523L, - 8523699184200726144L, - 932575865292832326L, - -7491448407022023047L, - 1809887519026638446L, - -8610524715250756725L, - 6158809695983348998L, - 4948400960714316843L, - -4513370424175692831L, - -3955280856263842959L, - 6440233015885550592L, - 8756942107256956958L, - 7895095834297147376L, - 370033091003609904L, - 948078545203432448L, - -8523229038380945151L, - 100794871657160943L, - -2186420796072284323L, - -9221115378196347951L, - 8102537654803861332L, - 5857339063191690550L, - -4554257374958739421L, - 6607496554818971053L, - -778402196622557070L, - -3817535277727878318L, - 3564122000469288769L, - -44446230828995950L, - 1322708749649533240L, - 6150374672341998205L, - -3300275952549095391L, - 5700833512536085850L, - -8559358370491270937L, - 5434443260519512697L, - -8031025173259990945L, - 7117462129248544172L, - 5425177419943569451L, - -7215427371174054838L, - -5728669976971194528L, - -2096361446095323077L, - -4247416835972286805L, - 4912769047482466787L, - 7755341152739082452L, - 6797061233443658471L, - 4089361562209715474L, - 5830701413838808929L, - 5514515889578551370L, - 609334005368729318L, - 177310574483850759L, - -820431153866372784L, - 7188454041446661654L, - 7480194911613035473L, - 4564607884390103056L, - 888496928954372093L, - -5480535802290619117L, - 9100964700413324707L, - 510523132632789099L, - 8249362675875046694L, - 5340321809639671537L, - -4633081050124361874L, - -839915092967986193L, - -7377542419053401928L, - 1820485955145562839L, - 8517645770425584256L, - -1877318739474090786L, - 7674371564231889244L, - -3311130470964498678L, - -880090321525066135L, - -5670998531776225745L, - -8828737503035152589L, - -6029750416835830307L, - -6535608738168818581L, - -550872341393232043L, - 2831504667559924912L, - -4613341433216920241L, - 502960879991989691L, - 576723875877375776L, - -2575765564594953903L, - -4642144349520453953L, - 7939746291681241029L, - 6486356905694539404L, - -9086235573768687853L, - 5369903658359590823L, - 3199947475395774092L, - 8384948078622146995L, - -3365598033653273878L, - -2525526479099052030L, - 2648498634302427751L, - 3715448294999624219L, - -4734466095330028983L, - -8440427851760401644L, - -371198022355334589L, - 8864079431738600817L, - -4205600060099565684L, - 6617166152874298882L, - -6515522971156180292L, - 7254251246745292298L, - -420587237082849417L, - 1190495815435763349L, - -474540026828753709L, - -8150622114536376016L, - -5790621848044235275L, - -2780522220219318167L, - -2991155855957250848L, - 1692932912262846366L, - 8814949734565782733L, - -8746818869495012552L, - 7931250816026891600L, - -7434629709560596700L, - 4388261932396122996L, - 7154847153195510802L, - -2810154398655124882L, - 2601892684639182965L, - 7781574423676509607L, - -6647000723020388462L, - -8679132292226137672L, - -2447013202020963672L, - 3658855631326217196L, - 2176620921764007759L, - 3654402165357492705L, - 4511989090021652156L, - -3254638803798424003L, - 9050506214967102331L, - 922579360317805810L, - 609820949221381248L, - 5723875594772949290L, - 4637721466210023638L, - 6195303339320487374L, - -38202587086649325L, - -2142927092331878341L, - 5355751314914287101L, - -7170892783575760055L, - -7506612729078573199L, - 8645580445823695595L, - 3221950179890871958L, - 1638211443525398634L, - 7356718304253861777L, - -296260062751271549L, - -1790105985391377345L, - -7004118620405119098L, - 7056012094479909462L, - -7673357898031223798L, - -8929502135696203556L, - 7527161467311997998L, - 6182865571027510002L, - -2163310275402596869L, - 6285112477695252864L, - 3703909999924067987L, - 962491298117560533L, - 138936592567072793L, - 6094857527471100960L, - 5914305068838335718L, - -8896724991235492552L, - -2667562314507789198L, - -7456492499188304500L, - -3422709784851063201L, - -1511644999824238281L, - -7130158069449057322L, - 6243266426571961929L, - 2713895636371672711L, - 5765589573821453640L, - 2624585483746388367L, - 3933828437519859601L, - -5664404238108533781L, - 7086393398544811684L, - 1322058227068490376L, - -8232508114671021371L, - -5963804389649678229L, - -3318229976491806899L, - -6261789542948241754L, - 199130260709663583L, - 7521707465510595039L, - 507353862067534334L, - -7737968456769005928L, - -8964687882992257099L, - -7735003539801528311L, - 6989812739838460574L, - -6986289777499051441L, - 1881562796144865699L, - -6077719780113966592L, - -5427071388091979746L, - 1660707436425817310L, - -4338189980197421104L, - 5330934977599207307L, - 4461280425701571033L, - -7426107478263746863L, - 4258305289832328199L, - -8003283151332860979L, - -2500604212764835216L, - -8883941775298564436L, - -5059709834257638733L, - -4582947579039913741L, - 1371959565630689983L, - -1925163414161391371L, - -1180269729544278896L, - -6603171789097590304L, - 8985062706306079731L, - -3588748723254272836L, - -6052032019910018725L, - 6200960040430493088L, - 2146343936795524980L, - 7785948646708747443L, - 4524411768393719400L, - 749211414228926779L, - -163844243342465015L, - 1066801203344117463L, - -3687825939602944988L, - -4873811917429870500L, - -3765115783578949524L, - 3344884226049804020L, - -22793631121165636L, - -5636541624133159076L, - -6201449576244177151L, - -4533734412127714050L, - -2064657727206266594L, - -1325853623186040989L, - -2651306529045029511L, - 903264360879626406L, - 6082283797495873520L, - 6185446819995987847L, - -5727850940826115079L, - 8356646143516726527L, - -7705915341280821272L, - 9137633133909463406L, - 6613483969797411894L, - 8598514961735984460L, - 6805925079991408361L, - 6009403222422527608L, - 2216303622650116705L, - -3736062178532154638L, - -7139008962939637477L, - -1537711200058404375L, - 8896755073380580322L, - -6063426810787442347L, - -3472064301690015285L, - -4568131486464952371L, - -8141256104294687045L, - 5627435360893599536L, - 1136003802967708029L, - 2730027518034735037L, - 1985287040172139729L, - -3643431491383365431L, - -9042919736106376701L, - 8879968900590373568L, - 8504486139877409399L, - 5832665747670146536L, - 4202923651402292496L, - 1738511892080946286L, - 4512683881549777042L, - 9200194457599870145L, - -1948301178705617139L, - 8655715314401162523L, - 412698981651521600L, - -1479274044808688580L, - 2688302549664693359L, - -3059920027366623178L, - -4275753325231806565L, - -8321791698013769889L, - -3678119714812414102L, - -2500922551770832553L, - 9018541633115002061L, - 5713301371152396803L, - 4180584812840471799L, - 3062416401091271879L, - -8125716681035757962L, - -2076056159878596225L, - 8855540523533374738L, - 2402007906402689092L, - 2020584786288649542L, - 1707405964421070701L, - -3681994462249973122L, - -3982567775984742012L, - 7133200226358561844L, - -5270514263562558963L, - 9060760368219219429L, - -6967162372382490281L, - -9094664463528453384L, - -3968518633408880046L, - 8618660189330281694L, - -4668946581954397558L, - -8596433172676363407L, - -1264942061713169049L, - -5309493221793643795L, - -1099320768477039529L, - 8925041285873295227L, - -6809278181760513499L, - -7039439984223885585L, - 6188209901527865226L, - 1487353394192637059L, - 2402097349430126337L, - -3818359601525025681L, - 4123217079279439249L, - -1424515143377220376L, - 1742298536803356877L, - -2836832784751148874L, - -4838603242771410698L, - 2383745618623084414L, - -2790832243316548423L, - -1176683649587660160L, - 1862928178605117401L, - 5208694030074527671L, - 4339841406618876548L, - -7704801448691668472L, - 500068664415229033L, - -2111184635274274347L, - -1387769336519960517L, - -2368660677263980293L, - -4980481392402938776L, - -6856361166068680884L, - 1708658704968066797L, - -9013068514618931938L, - -2616479975851677179L, - 7121103440247327570L, - -7094192881960646061L, - -4042342930006488618L, - 5294323611741266775L, - 5235545113690922502L, - -2562011392475214878L, - -4613304566070234734L, - -3784386310583029381L, - -4526148219816534267L, - -8643470129031767968L, - -4573761335510927866L, - -8255399593563317902L, - -1925488377092111963L, - -1747797357090594237L, - 7292772921748919564L, - 3951718848780851600L, - 5339305877764077075L, - 7889570407201305102L, - -8935437555550449315L, - -1858205318388884024L, - 381779657795494278L, - -3769854251228686168L, - -7957724087073627355L, - 4349540075286824743L, - -2476434494603040708L, - -4506107235113109706L, - -7120863144673563848L, - -8534342596639587598L, - 2205658724629050493L, - 604438195864305027L, - 4530331938860561927L, - -2074141653226683751L, - -1114378227875974007L, - 3377301950002508302L, - 5369356700690664306L, - -1747063224581819445L, - -6320380781966280801L, - -2075443262555773155L, - 1028541493355576591L, - -4694402890123574860L, - -5250660999767019003L, - 3847087895315315136L, - -4448050214964317066L, - -4591316307978008151L, - 4894820902772635901L, - 3088847887353411593L, - -6699208183127463352L, - 4636731998354510780L, - 9095126525233209263L, - 4135373626035182291L, - 3835688804093949701L, - -3490782692819028324L, - -561453348486424761L, - -3329283619698366365L, - 3251154327320814221L, - -8006986328190314286L, - 5856651505286251345L, - -8871425101391073L, - 7806993676637210959L, - 7586479850833664643L, - -7091216108599847229L, - -3410137297792125447L, - -8251963871271100526L, - -8849730915506517177L, - 8400334327557485676L, - 1676125861848906502L, - -8480324002538122254L, - -1402216371589796114L, - 5951911012328622382L, - 8596811512609928773L, - -2266336480397111285L, - -8840962712683931463L, - 4301675602445909557L, - 1843369157327547440L, - 2169755460218905712L, - -1592865257954325910L, - -8763867324602133653L, - -4283855559993550994L, - -7577702976577664015L, - -5152834259238990784L, - 4596243922610406362L, - -4326545138850544854L, - 1480440096894990716L, - 8548031958586152418L, - 6705615952497668303L, - -2915454802887967935L, - -6137002913510169520L, - 2908515186908319288L, - 5834242853393037250L, - -6721431559266056630L, - -7810820823419696676L, - 1954209413716096740L, - 6657013078387802473L, - 2214178984740031680L, - 8789512881373922013L, - 1240231669311237626L, - 8694612319028097761L, - 492180561068515854L, - -6047127535609489112L, - 7436686740711762797L, - -4520261623507558716L, - 938282189116272147L, - 3232025564608101134L, - -5425498066931840551L, - 932123105892452494L, - 9054941090932531526L, - 8066693670021084601L, - 764877609198828864L, - -489112437588815338L, - 4827691353685521957L, - 1948321254606741278L, - 6117773063719937712L, - 4645962658121906639L, - -7846887104148029590L, - 4210795945791252618L, - -8879516722990993098L, - -2621063563373927241L, - 2094675051444850863L, - -8681225697045319537L, - 6072534474938492189L, - 6181923696407824226L, - 5463607676777614919L, - 3708342890820711111L, - 8844501223821777366L, - -1459359143442302680L, - 2225439088478089068L, - -3866259492807347627L, - 5715020051188773955L, - 3922300588924895992L, - -9142841818158905228L, - 2234845285375211931L, - 2466598091809457099L, - -5086614780930363190L, - -59740786891006359L, - 3484340182077240897L, - 5684798394905475931L, - 8492255409537329167L, - 5276601975076232447L, - -723955912320185993L, - 9032937149732310432L, - 2226206333274026280L, - 5631303328800272036L, - 3943832708526382713L, - -3756282686478033644L, - -5407377327559185078L, - 2025162219823732106L, - -8802502232162774782L, - 9039368856081455195L, - 663058667658971174L, - 3624269418844967319L, - 1835338408542062149L, - 6821836507221295281L, - 6273547355770435776L, - -3104373869480308814L, - 1150888014781722836L, - 7638478751521711777L, - -6407096352658729423L, - -2242514077180426481L, - -3181824045541296523L, - -4562287221569080073L, - -5550768647534615669L, - -5786611484859469238L, - -6147722345444149090L, - 3737249616177808079L, - 3401215612108618403L, - -713522925214097648L, - 7938558781452631257L, - -2822931074351003413L, - -6484774850345918944L, - 3384659068511379086L, - 6976459554734427695L, - 4254162229878558339L, - -3312164339867139602L, - 7263045146222903358L, - 4561625003713187235L, - -3350421200373539593L, - -6329267008823047447L, - -6889593333717619051L, - -6470291206680780949L, - -1925391510610223335L, - 4955720513801530785L, - -6515999401129420095L, - -5146900596178823847L, - 2572121582663686783L, - -4958678197003031937L, - -1295912792184970105L, - -8320363273488883198L, - -8213501149234986129L, - -3883775881968950160L, - -8925953418077243474L, - 3199784299548492168L, - -6836506744583692202L, - -5007347279129330642L, - 7387675960164975441L, - -5841389805259238070L, - 6263589037534776610L, - 3327727201189139791L, - 3673450414312153409L, - -1563909967243907088L, - -3758518049401683145L, - 6368282934319908146L, - -6025191831649813215L, - 1223512633484628943L, - -8540335264335924099L, - -8569704496403127098L, - -5712355262561236939L, - -6468621715016340600L, - 7015005898276272746L, - -1037164971883038884L, - -6108649908647520338L, - -6781540054819591698L, - -2762739023866345855L, - -270930832663123436L, - -2387080926579956105L, - -3984603512651136889L, - 2367015942733558542L, - 2997123688964990405L, - -424413420483149165L, - 2906467516125124288L, - 7979917630945955701L, - 2879736983084566817L, - 558436267366797870L, - 6471658168855475843L, - -3453803644372811678L, - 95470628886709014L, - 5666911245054448862L, - 1594133734978640945L, - 3790246368687946045L, - 8636400206261643605L, - 5901994795106283147L, - -6774812279971490610L, - -4622588246534854941L, - 5395884908872287278L, - 7381412950348018556L, - 5461775216423433041L, - 2851500852422732203L, - 1153428834012773824L, - 2567326223464897798L, - 6290362916558214218L, - 6095765709335097474L, - -3526424734043456674L, - -8411274175041022530L, - 7565408328520233290L, - -1318636864706103626L, - 1261242784453012654L, - -472643963000448611L, - -7126293899612852456L, - 5072187962931197668L, - 4775251504230927816L, - -1624676500499667689L, - 2252385971292411863L, - 7908437759266752884L, - -8948829914565397845L, - 5258787823809553293L, - 3885696202809019506L, - -4551784314460062669L, - 5315762970089305011L, - 7218180419200466576L, - 109471822471146966L, - 3901499100759315793L, - -5613018173558603696L, - 5782419706003468119L, - 8285176821902721729L, - -2944182278904878473L, - 8089487615165958290L, - 6934039118340963316L, - 8481603619533191729L, - -6321491167299496492L, - 6441589800192421521L, - 6436057639713571196L, - 6819921695214365155L, - 1185928916708893611L, - 2597068862418243401L, - -7637601550649263782L, - 9129303862479379164L, - 4047905726243458335L, - 6672087858539795207L, - -4841432774404255351L, - 5501215987763227677L, - -5300305896512100453L, - 1635946349436492617L, - -5017459781050596604L, - -7313558338536196566L, - 4625509831332846264L, - -1241826701278444028L, - 2916178164108211239L, - -6947453283344846915L, - 5520544791845620925L, - 5009241392834567026L, - -630825152277572403L, - 6246654103747517292L, - -5632205909016659384L, - -5099826214945383802L, - 2466330894206710401L, - -1463559257726812272L, - 4922422449110036517L, - -4940410396057186660L, - 8835766963654337957L, - -1984334093384497740L, - 5616151800825184227L, - -8442970605804311782L, - -5396399970392474268L, - 2711274356126287353L, - -5090439840321959043L, - 6638617029380445409L, - -6424875729377006548L, - -7243574969986334324L, - -904268348341193502L, - -6196811069886893217L, - -7742123331454617135L, - 1449632469607275832L, - 3212140938119717436L, - 8676942774083692265L, - -6625590425417154859L, - 8720904664575676760L, - 9151723732605931383L, - 7642401923610349184L, - -3454390566366389884L, - -232373658792783206L, - -8933620623437682010L, - 2514068248201398743L, - 6757007617821370359L, - -2870340646674679163L, - 416331333845426881L, - -5319172016123138702L, - 3294412564645954555L, - 2812538484970453169L, - -9128349093860081905L, - 6784456254618976198L, - -2861881330654872638L, - 3912429093271518508L, - -2562542119887175820L, - 4835616088583228965L, - 427639171891209425L, - 2590582080178010045L, - -6288067880951692635L, - -3204510905067065501L, - 9008426291442999873L, - -4085962609397876083L, - -3786041297813905157L, - -6006475053574578261L, - -6174022276199807178L, - 7958957647277035097L, - 2915785807118517755L, - 2139592530283433011L, - -8562048562533248017L, - -4991735207930685025L, - 393144860250454082L, - -5852177196425420458L, - -2652303154023739579L, - 2079679586901234739L, - -1386526064824772584L, - 1574420554361329695L, - -855542130447493508L, - 8291940350733154044L, - -5330200233059892402L, - 5140782607921164290L, - -977254437067235218L, - -261520846651909307L, - -7369143208070837455L, - -4728766390712852111L, - -8572213434879266955L, - -6754813768712497692L, - 7946121307356573089L, - 504268959085012646L, - -5536654029698676818L, - -6021520522792328781L, - 6968613512520500871L, - 4029920623217569312L, - 2738878342460920492L, - 4562432005481165726L, - -1279037845195368028L, - 1746645308450474697L, - 2538150989161378915L, - 2012299649948738944L, - -3997559675475377347L, - -5939431505669672858L, - 2077103722387383456L, - -6188261335534632204L, - 8772504603740967633L, - -1653698997940568281L, - 1676948989756529271L, - 2377579815165102226L, - -2667481192445387240L, - -5498860615033631762L, - -2490865541169744469L, - -1233441883399707566L, - 5445263795307566596L, - 2288458809413275798L, - -5908274826918996877L, - 2909363406069168415L, - 2376032171261335687L, - -5215189045919902574L, - -6083327007632847329L, - 2462785604224107327L, - -6684045035730714275L, - 2409356208468676804L, - 2814747114160772803L, - -4529204412661254980L, - -8437511853472556883L, - 1819323657613892915L, - 6862685309651627151L, - -9210337863564319258L, - -3641041551811494963L, - -6791020794026796740L, - -5261661996953805298L, - -1953516254626596632L, - -5901591005960707793L, - -7413695905040596911L, - 2952256922297384020L, - -8427771021447591769L, - -6920139339436245233L, - 2967149838604559395L, - -3253499104068010353L, - -8473804925120692039L, - -3561285603521886085L, - -4453849179065102447L, - 2050092642498054323L, - -5626434133619314199L, - 7995075368278704248L, - 7685996432951370136L, - -8037783900933102779L, - 4601459625295412851L, - -4491938778497306775L, - -9089886217821142309L, - -3947191644612298897L, - 1364225714229764884L, - 2580394324892542249L, - -3765315378396862242L, - 6023794482194323576L, - -662753714084561214L, - 3080495347149127717L, - 911710215008202776L, - -803705685664586056L, - -6101059689379533503L, - -2122356322512227634L, - 8012110874513406695L, - -4158551223425336367L, - 8282080141813519654L, - 4172879384244246799L, - 708522065347490110L, - -6997269001146828181L, - 1887955086977822594L, - 8014460039616323415L + -1205034819632174695L, + -1642502924627794072L, + 5216751715308240086L, + -1889335612763511331L, + -13835840860730338L, + -2521325055659080948L, + 4867868962443297827L, + 1498682999415010002L, + -8626056615231480947L, + 7482827008138251355L, + -617731006306969209L, + 7289733825183505098L, + 4776896707697368229L, + 1428059224718910376L, + 6690813482653982021L, + -6248474067697161171L, + 4951407828574235127L, + 6198050452789369270L, + 5776283192552877204L, + -626480755095427154L, + -6637184445929957204L, + 8370873622748562952L, + -1705978583731280501L, + -7898818752540221055L, + -2516210193198301541L, + 8356900479849653862L, + -4413748141896466000L, + -6040072975510680789L, + 1451490609699316991L, + -7948005844616396060L, + 8567048088357095527L, + -4375578310507393311L, + -3749919242623962444L, + 888155921178136237L, + -228195649085979072L, + -521095004075279741L, + -2458702038214709156L, + -2792334161285995319L, + 7509323632532862410L, + 46046374822258777L, + -731200582691896855L, + 933917387460394992L, + 5623144551929396680L, + 6456984547425914359L, + -6398540474588876142L, + 1224372500617079775L, + -931727396974525131L, + 979677643219401656L, + -8078270932489049756L, + -92767506898879473L, + 2379112167176776082L, + 2065719310945572007L, + -4972682801816081667L, + -7346559332994187462L, + 4674729779638751546L, + 5844780159702313017L, + 925606237565008152L, + 8164325403643669774L, + 5124005065773312983L, + -4646462236086916483L, + 4733593776494364101L, + -6408850806317360L, + 7405089268865026700L, + -2131704682637193649L, + -592659849139514384L, + -4386868621773355429L, + -2216833672566288862L, + 4022619316305276641L, + -60464713570988944L, + 2416749694506796597L, + 3576590985110933976L, + 3368688771415645536L, + -357157638897078259L, + 3484358739758473117L, + 2078888409435083535L, + 8053093288416703076L, + -4934736471585554038L, + -7784370683223414061L, + -4109284735634941390L, + 5982490102027564625L, + -4991107002810882893L, + 8664747912276562373L, + 8536879438728327651L, + 2358675440174594061L, + 5352236919104495867L, + 6340852522718110192L, + 5075606340464035668L, + -6313168920073458239L, + -6428599582591385786L, + -7278654800402467208L, + -6630626099856243581L, + -7548742438664634646L, + 5514383762309532642L, + -5996126265702944431L, + 4011116741319319261L, + -7289240093981845088L, + 4975257207486779926L, + -3945500877932691916L, + 1973955144068521079L, + 3884425912161913184L, + 7692681977284421015L, + -1616730378439673826L, + 4799493270916844476L, + -6107310582897997679L, + 3643294092300179537L, + 5406040598516899149L, + -3032420409304067208L, + 5044227119457305622L, + 9165032773225506149L, + 7553488247682850248L, + 2247298339072845043L, + 7380491470304042584L, + -456791943260357427L, + -1906500292613319324L, + -4025157985304129897L, + 6167829983725509611L, + -8678196943431064825L, + -636391087313417831L, + 5757999497725839182L, + 8999325347316115948L, + -6042339776328081249L, + 7988836354190359013L, + 2818448030979902104L, + -8484201484113382447L, + -1140175406473847155L, + 3042776987426497381L, + 3147338037480432386L, + 5065714330193756569L, + 8827021486636772242L, + 838335823706922959L, + 481844220820054909L, + 5333474685474667077L, + -3722898251196013565L, + 7909417627390150381L, + 7116148225996109646L, + 7520381989775811302L, + 6045444672904719015L, + 169039646730338133L, + -2144629916252757106L, + -3752608501798118554L, + 8374704774878780935L, + -5830926781667225570L, + 3202139393110256022L, + 4400219135677717216L, + -5663710220155589201L, + -2589002340345751622L, + -8240133511464343390L, + -4036798392879835146L, + 501599054729008501L, + -4851415719238782188L, + 7565157933617774080L, + -6428091359957700043L, + 4081845077806300175L, + -9016659258880122392L, + 7811786097015457596L, + 1357606791019752376L, + 6522211979684949668L, + -3462397075047559451L, + 3075504459164148117L, + 3055992297861390732L, + -7230492327399411047L, + -1128103378253532506L, + 1834607408788151585L, + 7065978976369231860L, + 6566122632438908362L, + -3440855531356735824L, + 6271453770746181891L, + 413365468403580071L, + -8342682158827061522L, + -3713303136987568731L, + -8959326895824091541L, + -2793862582117663595L, + -184756427409317729L, + -7052502019782453427L, + 3666196071825438258L, + 170204095295428634L, + -1880693509859077843L, + 5179169206996749826L, + 2866097700453114958L, + 1859104195026275510L, + 3782323564639128125L, + -6485194456269981193L, + 6761934873296236857L, + 5764605515941066448L, + 597754945258033208L, + -4888986062036739232L, + -6490228233091577705L, + 3234089784845854336L, + -5506883591180767430L, + 1491493862343818933L, + 3232293217886687768L, + -4079803366160739972L, + 4884134040093556099L, + -7274733680156962461L, + 5265680254123454403L, + 1036855740788018258L, + 423439784169709263L, + -3627743032115866622L, + -6311378083791982305L, + -3058076915688265687L, + 5826550132901840796L, + 8049712006832885455L, + 1707844692241288946L, + -3293048440386932248L, + -2458638193238955307L, + 943059295184967928L, + 3899561579431348819L, + -1516862862245909493L, + 4448476568037673976L, + 8738531437146688925L, + -1033913449611929894L, + 733668166271378558L, + 438686375775205249L, + -4325889118346169305L, + -238178883117433622L, + -7972205050662019794L, + -1263398103237492853L, + -8333197763892905802L, + 7796341294364809534L, + -1381767618016537445L, + 2892579485651013970L, + -3376209887503828920L, + -8575120126045607817L, + -1609355362031172055L, + -386138918275547508L, + 4598874691849543747L, + -2961781601824749597L, + -3032925351997820092L, + -4256249198066449735L, + 6712291718681474012L, + -4281614253751277086L, + 3727487933918100016L, + -2744649548868700294L, + 8662377383917584333L, + -9154398439761221404L, + -6895275824272461794L, + 3394857180017540444L, + 2010825527298793302L, + 4894417464710366872L, + -6879244364314087051L, + 83677167865178033L, + -8258406393927169823L, + 5042126978317943321L, + 6485279223034053259L, + 4442956705009100620L, + 316801800427881731L, + 1381431847939703076L, + 5172932759041399062L, + -69656533526213521L, + -5302643413630076306L, + -3956089084400440856L, + 372087412941022771L, + 4711314482928419386L, + 3255220726505012060L, + 8917854303046844847L, + 1116214654602499731L, + 2282408585429094475L, + -9207590323584417562L, + 8881688165595519866L, + 1731908113181957442L, + 3847295165012256987L, + 4457829016858233661L, + 4944046822375522396L, + 3445091217248591320L, + -5055680960069278553L, + -399195423199498362L, + -8109174165388156886L, + 4967185977968814820L, + -5911973391056763118L, + 2239508324487797550L, + -954783563382788523L, + 8523699184200726144L, + 932575865292832326L, + -7491448407022023047L, + 1809887519026638446L, + -8610524715250756725L, + 6158809695983348998L, + 4948400960714316843L, + -4513370424175692831L, + -3955280856263842959L, + 6440233015885550592L, + 8756942107256956958L, + 7895095834297147376L, + 370033091003609904L, + 948078545203432448L, + -8523229038380945151L, + 100794871657160943L, + -2186420796072284323L, + -9221115378196347951L, + 8102537654803861332L, + 5857339063191690550L, + -4554257374958739421L, + 6607496554818971053L, + -778402196622557070L, + -3817535277727878318L, + 3564122000469288769L, + -44446230828995950L, + 1322708749649533240L, + 6150374672341998205L, + -3300275952549095391L, + 5700833512536085850L, + -8559358370491270937L, + 5434443260519512697L, + -8031025173259990945L, + 7117462129248544172L, + 5425177419943569451L, + -7215427371174054838L, + -5728669976971194528L, + -2096361446095323077L, + -4247416835972286805L, + 4912769047482466787L, + 7755341152739082452L, + 6797061233443658471L, + 4089361562209715474L, + 5830701413838808929L, + 5514515889578551370L, + 609334005368729318L, + 177310574483850759L, + -820431153866372784L, + 7188454041446661654L, + 7480194911613035473L, + 4564607884390103056L, + 888496928954372093L, + -5480535802290619117L, + 9100964700413324707L, + 510523132632789099L, + 8249362675875046694L, + 5340321809639671537L, + -4633081050124361874L, + -839915092967986193L, + -7377542419053401928L, + 1820485955145562839L, + 8517645770425584256L, + -1877318739474090786L, + 7674371564231889244L, + -3311130470964498678L, + -880090321525066135L, + -5670998531776225745L, + -8828737503035152589L, + -6029750416835830307L, + -6535608738168818581L, + -550872341393232043L, + 2831504667559924912L, + -4613341433216920241L, + 502960879991989691L, + 576723875877375776L, + -2575765564594953903L, + -4642144349520453953L, + 7939746291681241029L, + 6486356905694539404L, + -9086235573768687853L, + 5369903658359590823L, + 3199947475395774092L, + 8384948078622146995L, + -3365598033653273878L, + -2525526479099052030L, + 2648498634302427751L, + 3715448294999624219L, + -4734466095330028983L, + -8440427851760401644L, + -371198022355334589L, + 8864079431738600817L, + -4205600060099565684L, + 6617166152874298882L, + -6515522971156180292L, + 7254251246745292298L, + -420587237082849417L, + 1190495815435763349L, + -474540026828753709L, + -8150622114536376016L, + -5790621848044235275L, + -2780522220219318167L, + -2991155855957250848L, + 1692932912262846366L, + 8814949734565782733L, + -8746818869495012552L, + 7931250816026891600L, + -7434629709560596700L, + 4388261932396122996L, + 7154847153195510802L, + -2810154398655124882L, + 2601892684639182965L, + 7781574423676509607L, + -6647000723020388462L, + -8679132292226137672L, + -2447013202020963672L, + 3658855631326217196L, + 2176620921764007759L, + 3654402165357492705L, + 4511989090021652156L, + -3254638803798424003L, + 9050506214967102331L, + 922579360317805810L, + 609820949221381248L, + 5723875594772949290L, + 4637721466210023638L, + 6195303339320487374L, + -38202587086649325L, + -2142927092331878341L, + 5355751314914287101L, + -7170892783575760055L, + -7506612729078573199L, + 8645580445823695595L, + 3221950179890871958L, + 1638211443525398634L, + 7356718304253861777L, + -296260062751271549L, + -1790105985391377345L, + -7004118620405119098L, + 7056012094479909462L, + -7673357898031223798L, + -8929502135696203556L, + 7527161467311997998L, + 6182865571027510002L, + -2163310275402596869L, + 6285112477695252864L, + 3703909999924067987L, + 962491298117560533L, + 138936592567072793L, + 6094857527471100960L, + 5914305068838335718L, + -8896724991235492552L, + -2667562314507789198L, + -7456492499188304500L, + -3422709784851063201L, + -1511644999824238281L, + -7130158069449057322L, + 6243266426571961929L, + 2713895636371672711L, + 5765589573821453640L, + 2624585483746388367L, + 3933828437519859601L, + -5664404238108533781L, + 7086393398544811684L, + 1322058227068490376L, + -8232508114671021371L, + -5963804389649678229L, + -3318229976491806899L, + -6261789542948241754L, + 199130260709663583L, + 7521707465510595039L, + 507353862067534334L, + -7737968456769005928L, + -8964687882992257099L, + -7735003539801528311L, + 6989812739838460574L, + -6986289777499051441L, + 1881562796144865699L, + -6077719780113966592L, + -5427071388091979746L, + 1660707436425817310L, + -4338189980197421104L, + 5330934977599207307L, + 4461280425701571033L, + -7426107478263746863L, + 4258305289832328199L, + -8003283151332860979L, + -2500604212764835216L, + -8883941775298564436L, + -5059709834257638733L, + -4582947579039913741L, + 1371959565630689983L, + -1925163414161391371L, + -1180269729544278896L, + -6603171789097590304L, + 8985062706306079731L, + -3588748723254272836L, + -6052032019910018725L, + 6200960040430493088L, + 2146343936795524980L, + 7785948646708747443L, + 4524411768393719400L, + 749211414228926779L, + -163844243342465015L, + 1066801203344117463L, + -3687825939602944988L, + -4873811917429870500L, + -3765115783578949524L, + 3344884226049804020L, + -22793631121165636L, + -5636541624133159076L, + -6201449576244177151L, + -4533734412127714050L, + -2064657727206266594L, + -1325853623186040989L, + -2651306529045029511L, + 903264360879626406L, + 6082283797495873520L, + 6185446819995987847L, + -5727850940826115079L, + 8356646143516726527L, + -7705915341280821272L, + 9137633133909463406L, + 6613483969797411894L, + 8598514961735984460L, + 6805925079991408361L, + 6009403222422527608L, + 2216303622650116705L, + -3736062178532154638L, + -7139008962939637477L, + -1537711200058404375L, + 8896755073380580322L, + -6063426810787442347L, + -3472064301690015285L, + -4568131486464952371L, + -8141256104294687045L, + 5627435360893599536L, + 1136003802967708029L, + 2730027518034735037L, + 1985287040172139729L, + -3643431491383365431L, + -9042919736106376701L, + 8879968900590373568L, + 8504486139877409399L, + 5832665747670146536L, + 4202923651402292496L, + 1738511892080946286L, + 4512683881549777042L, + 9200194457599870145L, + -1948301178705617139L, + 8655715314401162523L, + 412698981651521600L, + -1479274044808688580L, + 2688302549664693359L, + -3059920027366623178L, + -4275753325231806565L, + -8321791698013769889L, + -3678119714812414102L, + -2500922551770832553L, + 9018541633115002061L, + 5713301371152396803L, + 4180584812840471799L, + 3062416401091271879L, + -8125716681035757962L, + -2076056159878596225L, + 8855540523533374738L, + 2402007906402689092L, + 2020584786288649542L, + 1707405964421070701L, + -3681994462249973122L, + -3982567775984742012L, + 7133200226358561844L, + -5270514263562558963L, + 9060760368219219429L, + -6967162372382490281L, + -9094664463528453384L, + -3968518633408880046L, + 8618660189330281694L, + -4668946581954397558L, + -8596433172676363407L, + -1264942061713169049L, + -5309493221793643795L, + -1099320768477039529L, + 8925041285873295227L, + -6809278181760513499L, + -7039439984223885585L, + 6188209901527865226L, + 1487353394192637059L, + 2402097349430126337L, + -3818359601525025681L, + 4123217079279439249L, + -1424515143377220376L, + 1742298536803356877L, + -2836832784751148874L, + -4838603242771410698L, + 2383745618623084414L, + -2790832243316548423L, + -1176683649587660160L, + 1862928178605117401L, + 5208694030074527671L, + 4339841406618876548L, + -7704801448691668472L, + 500068664415229033L, + -2111184635274274347L, + -1387769336519960517L, + -2368660677263980293L, + -4980481392402938776L, + -6856361166068680884L, + 1708658704968066797L, + -9013068514618931938L, + -2616479975851677179L, + 7121103440247327570L, + -7094192881960646061L, + -4042342930006488618L, + 5294323611741266775L, + 5235545113690922502L, + -2562011392475214878L, + -4613304566070234734L, + -3784386310583029381L, + -4526148219816534267L, + -8643470129031767968L, + -4573761335510927866L, + -8255399593563317902L, + -1925488377092111963L, + -1747797357090594237L, + 7292772921748919564L, + 3951718848780851600L, + 5339305877764077075L, + 7889570407201305102L, + -8935437555550449315L, + -1858205318388884024L, + 381779657795494278L, + -3769854251228686168L, + -7957724087073627355L, + 4349540075286824743L, + -2476434494603040708L, + -4506107235113109706L, + -7120863144673563848L, + -8534342596639587598L, + 2205658724629050493L, + 604438195864305027L, + 4530331938860561927L, + -2074141653226683751L, + -1114378227875974007L, + 3377301950002508302L, + 5369356700690664306L, + -1747063224581819445L, + -6320380781966280801L, + -2075443262555773155L, + 1028541493355576591L, + -4694402890123574860L, + -5250660999767019003L, + 3847087895315315136L, + -4448050214964317066L, + -4591316307978008151L, + 4894820902772635901L, + 3088847887353411593L, + -6699208183127463352L, + 4636731998354510780L, + 9095126525233209263L, + 4135373626035182291L, + 3835688804093949701L, + -3490782692819028324L, + -561453348486424761L, + -3329283619698366365L, + 3251154327320814221L, + -8006986328190314286L, + 5856651505286251345L, + -8871425101391073L, + 7806993676637210959L, + 7586479850833664643L, + -7091216108599847229L, + -3410137297792125447L, + -8251963871271100526L, + -8849730915506517177L, + 8400334327557485676L, + 1676125861848906502L, + -8480324002538122254L, + -1402216371589796114L, + 5951911012328622382L, + 8596811512609928773L, + -2266336480397111285L, + -8840962712683931463L, + 4301675602445909557L, + 1843369157327547440L, + 2169755460218905712L, + -1592865257954325910L, + -8763867324602133653L, + -4283855559993550994L, + -7577702976577664015L, + -5152834259238990784L, + 4596243922610406362L, + -4326545138850544854L, + 1480440096894990716L, + 8548031958586152418L, + 6705615952497668303L, + -2915454802887967935L, + -6137002913510169520L, + 2908515186908319288L, + 5834242853393037250L, + -6721431559266056630L, + -7810820823419696676L, + 1954209413716096740L, + 6657013078387802473L, + 2214178984740031680L, + 8789512881373922013L, + 1240231669311237626L, + 8694612319028097761L, + 492180561068515854L, + -6047127535609489112L, + 7436686740711762797L, + -4520261623507558716L, + 938282189116272147L, + 3232025564608101134L, + -5425498066931840551L, + 932123105892452494L, + 9054941090932531526L, + 8066693670021084601L, + 764877609198828864L, + -489112437588815338L, + 4827691353685521957L, + 1948321254606741278L, + 6117773063719937712L, + 4645962658121906639L, + -7846887104148029590L, + 4210795945791252618L, + -8879516722990993098L, + -2621063563373927241L, + 2094675051444850863L, + -8681225697045319537L, + 6072534474938492189L, + 6181923696407824226L, + 5463607676777614919L, + 3708342890820711111L, + 8844501223821777366L, + -1459359143442302680L, + 2225439088478089068L, + -3866259492807347627L, + 5715020051188773955L, + 3922300588924895992L, + -9142841818158905228L, + 2234845285375211931L, + 2466598091809457099L, + -5086614780930363190L, + -59740786891006359L, + 3484340182077240897L, + 5684798394905475931L, + 8492255409537329167L, + 5276601975076232447L, + -723955912320185993L, + 9032937149732310432L, + 2226206333274026280L, + 5631303328800272036L, + 3943832708526382713L, + -3756282686478033644L, + -5407377327559185078L, + 2025162219823732106L, + -8802502232162774782L, + 9039368856081455195L, + 663058667658971174L, + 3624269418844967319L, + 1835338408542062149L, + 6821836507221295281L, + 6273547355770435776L, + -3104373869480308814L, + 1150888014781722836L, + 7638478751521711777L, + -6407096352658729423L, + -2242514077180426481L, + -3181824045541296523L, + -4562287221569080073L, + -5550768647534615669L, + -5786611484859469238L, + -6147722345444149090L, + 3737249616177808079L, + 3401215612108618403L, + -713522925214097648L, + 7938558781452631257L, + -2822931074351003413L, + -6484774850345918944L, + 3384659068511379086L, + 6976459554734427695L, + 4254162229878558339L, + -3312164339867139602L, + 7263045146222903358L, + 4561625003713187235L, + -3350421200373539593L, + -6329267008823047447L, + -6889593333717619051L, + -6470291206680780949L, + -1925391510610223335L, + 4955720513801530785L, + -6515999401129420095L, + -5146900596178823847L, + 2572121582663686783L, + -4958678197003031937L, + -1295912792184970105L, + -8320363273488883198L, + -8213501149234986129L, + -3883775881968950160L, + -8925953418077243474L, + 3199784299548492168L, + -6836506744583692202L, + -5007347279129330642L, + 7387675960164975441L, + -5841389805259238070L, + 6263589037534776610L, + 3327727201189139791L, + 3673450414312153409L, + -1563909967243907088L, + -3758518049401683145L, + 6368282934319908146L, + -6025191831649813215L, + 1223512633484628943L, + -8540335264335924099L, + -8569704496403127098L, + -5712355262561236939L, + -6468621715016340600L, + 7015005898276272746L, + -1037164971883038884L, + -6108649908647520338L, + -6781540054819591698L, + -2762739023866345855L, + -270930832663123436L, + -2387080926579956105L, + -3984603512651136889L, + 2367015942733558542L, + 2997123688964990405L, + -424413420483149165L, + 2906467516125124288L, + 7979917630945955701L, + 2879736983084566817L, + 558436267366797870L, + 6471658168855475843L, + -3453803644372811678L, + 95470628886709014L, + 5666911245054448862L, + 1594133734978640945L, + 3790246368687946045L, + 8636400206261643605L, + 5901994795106283147L, + -6774812279971490610L, + -4622588246534854941L, + 5395884908872287278L, + 7381412950348018556L, + 5461775216423433041L, + 2851500852422732203L, + 1153428834012773824L, + 2567326223464897798L, + 6290362916558214218L, + 6095765709335097474L, + -3526424734043456674L, + -8411274175041022530L, + 7565408328520233290L, + -1318636864706103626L, + 1261242784453012654L, + -472643963000448611L, + -7126293899612852456L, + 5072187962931197668L, + 4775251504230927816L, + -1624676500499667689L, + 2252385971292411863L, + 7908437759266752884L, + -8948829914565397845L, + 5258787823809553293L, + 3885696202809019506L, + -4551784314460062669L, + 5315762970089305011L, + 7218180419200466576L, + 109471822471146966L, + 3901499100759315793L, + -5613018173558603696L, + 5782419706003468119L, + 8285176821902721729L, + -2944182278904878473L, + 8089487615165958290L, + 6934039118340963316L, + 8481603619533191729L, + -6321491167299496492L, + 6441589800192421521L, + 6436057639713571196L, + 6819921695214365155L, + 1185928916708893611L, + 2597068862418243401L, + -7637601550649263782L, + 9129303862479379164L, + 4047905726243458335L, + 6672087858539795207L, + -4841432774404255351L, + 5501215987763227677L, + -5300305896512100453L, + 1635946349436492617L, + -5017459781050596604L, + -7313558338536196566L, + 4625509831332846264L, + -1241826701278444028L, + 2916178164108211239L, + -6947453283344846915L, + 5520544791845620925L, + 5009241392834567026L, + -630825152277572403L, + 6246654103747517292L, + -5632205909016659384L, + -5099826214945383802L, + 2466330894206710401L, + -1463559257726812272L, + 4922422449110036517L, + -4940410396057186660L, + 8835766963654337957L, + -1984334093384497740L, + 5616151800825184227L, + -8442970605804311782L, + -5396399970392474268L, + 2711274356126287353L, + -5090439840321959043L, + 6638617029380445409L, + -6424875729377006548L, + -7243574969986334324L, + -904268348341193502L, + -6196811069886893217L, + -7742123331454617135L, + 1449632469607275832L, + 3212140938119717436L, + 8676942774083692265L, + -6625590425417154859L, + 8720904664575676760L, + 9151723732605931383L, + 7642401923610349184L, + -3454390566366389884L, + -232373658792783206L, + -8933620623437682010L, + 2514068248201398743L, + 6757007617821370359L, + -2870340646674679163L, + 416331333845426881L, + -5319172016123138702L, + 3294412564645954555L, + 2812538484970453169L, + -9128349093860081905L, + 6784456254618976198L, + -2861881330654872638L, + 3912429093271518508L, + -2562542119887175820L, + 4835616088583228965L, + 427639171891209425L, + 2590582080178010045L, + -6288067880951692635L, + -3204510905067065501L, + 9008426291442999873L, + -4085962609397876083L, + -3786041297813905157L, + -6006475053574578261L, + -6174022276199807178L, + 7958957647277035097L, + 2915785807118517755L, + 2139592530283433011L, + -8562048562533248017L, + -4991735207930685025L, + 393144860250454082L, + -5852177196425420458L, + -2652303154023739579L, + 2079679586901234739L, + -1386526064824772584L, + 1574420554361329695L, + -855542130447493508L, + 8291940350733154044L, + -5330200233059892402L, + 5140782607921164290L, + -977254437067235218L, + -261520846651909307L, + -7369143208070837455L, + -4728766390712852111L, + -8572213434879266955L, + -6754813768712497692L, + 7946121307356573089L, + 504268959085012646L, + -5536654029698676818L, + -6021520522792328781L, + 6968613512520500871L, + 4029920623217569312L, + 2738878342460920492L, + 4562432005481165726L, + -1279037845195368028L, + 1746645308450474697L, + 2538150989161378915L, + 2012299649948738944L, + -3997559675475377347L, + -5939431505669672858L, + 2077103722387383456L, + -6188261335534632204L, + 8772504603740967633L, + -1653698997940568281L, + 1676948989756529271L, + 2377579815165102226L, + -2667481192445387240L, + -5498860615033631762L, + -2490865541169744469L, + -1233441883399707566L, + 5445263795307566596L, + 2288458809413275798L, + -5908274826918996877L, + 2909363406069168415L, + 2376032171261335687L, + -5215189045919902574L, + -6083327007632847329L, + 2462785604224107327L, + -6684045035730714275L, + 2409356208468676804L, + 2814747114160772803L, + -4529204412661254980L, + -8437511853472556883L, + 1819323657613892915L, + 6862685309651627151L, + -9210337863564319258L, + -3641041551811494963L, + -6791020794026796740L, + -5261661996953805298L, + -1953516254626596632L, + -5901591005960707793L, + -7413695905040596911L, + 2952256922297384020L, + -8427771021447591769L, + -6920139339436245233L, + 2967149838604559395L, + -3253499104068010353L, + -8473804925120692039L, + -3561285603521886085L, + -4453849179065102447L, + 2050092642498054323L, + -5626434133619314199L, + 7995075368278704248L, + 7685996432951370136L, + -8037783900933102779L, + 4601459625295412851L, + -4491938778497306775L, + -9089886217821142309L, + -3947191644612298897L, + 1364225714229764884L, + 2580394324892542249L, + -3765315378396862242L, + 6023794482194323576L, + -662753714084561214L, + 3080495347149127717L, + 911710215008202776L, + -803705685664586056L, + -6101059689379533503L, + -2122356322512227634L, + 8012110874513406695L, + -4158551223425336367L, + 8282080141813519654L, + 4172879384244246799L, + 708522065347490110L, + -6997269001146828181L, + 1887955086977822594L, + 8014460039616323415L }; public static final long[] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = { - -7444071767201028348L, - -8959994473701255385L, - 7116559933691734543L, - 6019482000716350659L, - -6625277557348586272L, - -5507563483608914162L, - 1540412690865189709L, - 4522324563441226749L, - -7143238906056518746L, - -7989831429045113014L, - -7103973673268129917L, - -2319060423616348937L, - -7576144055863289344L, - -8903544572546912743L, - 6376815151655939880L, - 5913754614426879871L, - 6466567997237536608L, - -869838547529805462L, - -2416009472486582019L, - -3059673981515537339L, - 4211239092494362041L, - 1414635639471257331L, - 166863084165354636L, - -3761330575439628223L, - 3524931906845391329L, - 6070229753198168844L, - -3740381894759773016L, - -1268276809699008557L, - 1518581707938531581L, - 7988048690914090770L, - -4510281763783422346L, - -8988936099728967847L, - -8644129751861931918L, - 2046936095001747419L, - 339737284852751748L, - -8493525091666023417L, - -3962890767051635164L, - -5799948707353228709L, - -6503577434416464161L, - 7718729912902936653L, - 191197390694726650L, - -2677870679247057207L, - 20411540801847004L, - 2738354376741059902L, - -3754251900675510347L, - -3208495075154651980L, - 5505877218642938179L, - 6710910171520780908L, - -9060809096139575515L, - 6936438027860748388L, - -6675099569841255629L, - -5358120966884144380L, - -4970515091611332076L, - -1810965683604454696L, - -516197887510505242L, - 1240864593087756274L, - 6033499571835033332L, - 7223146028771530185L, - 909128106589125206L, - 1567720774747329341L, - -1867353301780159863L, - 4655107429511759333L, - 5356891185236995950L, - 182631115370802890L, - -3582744155969569138L, - 595148673029792797L, - 495183136068540256L, - 5536689004903505647L, - -8472683670935785889L, - -4335021702965928166L, - 7306662983232020244L, - 4285260837125010956L, - 8288813008819191181L, - -3442351913745287612L, - 4883297703151707194L, - 9135546183059994964L, - 123663780425483012L, - 509606241253238381L, - 5940344208569311369L, - -2650142344608291176L, - 3232776678942440459L, - -922581627593772181L, - 7617977317085633049L, - 7154902266379028518L, - -5806388675416795571L, - 4368003766009575737L, - -2922716024457242064L, - 4771160713173250118L, - 3275897444752647349L, - -297220751499763878L, - 5095659287766176401L, - 1181843887132908826L, - 9058283605301070357L, - 3984713963471276643L, - 6050484112980480005L, - 1551535065359244224L, - 565337293533335618L, - 7412521035272884309L, - -4735469481351389369L, - 6998597101178745656L, - -9107075101236275961L, - 5879828914430779796L, - 6034964979406620806L, - 5666406915264701514L, - -4666218379625258428L, - 2749972203764815656L, - -782986256139071446L, - 6830581400521008570L, - 2588852022632995043L, - -5484725487363818922L, - -3319556935687817112L, - 6481961252981840893L, - 2204492445852963006L, - -5301091763401031066L, - -2615065677047206256L, - -6769817545131782460L, - -8421640685322953142L, - -3669062629317949176L, - -9167016978640750490L, - 2783671191687959562L, - -7599469568522039782L, - -7589134103255480011L, - -5932706841188717592L, - -8689756354284562694L, - -3934347391198581249L, - -1344748563236040701L, - 2172701592984478834L, - -5322052340624064417L, - -8493945390573620511L, - 3349021988137788403L, - -1806262525300459538L, - -8091524448239736618L, - 4022306289903960690L, - -8346915997379834224L, - -2106001381993805461L, - -5784123934724688161L, - 6775158099649720388L, - -3869682756870293568L, - 4356490186652082006L, - 8469371446702290916L, - -2972961082318458602L, - -7188106622222784561L, - -4961006366631572412L, - 3199991182014172900L, - 2917435868590434179L, - 8385845305547872127L, - 7706824402560674655L, - -1587379863634865277L, - -4212156212298809650L, - -1305209322000720233L, - -7866728337506665880L, - 8195089740529247049L, - -4876930125798534239L, - 798222697981617129L, - -2441020897729372845L, - -3926158482651178666L, - -1254795122048514130L, - 5192463866522217407L, - -5426289318796042964L, - -3267454004443530826L, - 471043133625225785L, - -660956397365869974L, - -6149209189144999161L, - -2630977660039166559L, - 8512219789663151219L, - -3309844068134074620L, - -6211275327487847132L, - -2130171729366885995L, - 6569302074205462321L, - 4855778342281619706L, - 3867211421508653033L, - -3002480002418725542L, - -8297543107467502696L, - 8049642289208775831L, - -5439825716055425635L, - 7251760070798756432L, - -4774526021749797528L, - -3892389575184442548L, - 5162451061244344424L, - 6000530226398686578L, - -5713092252241819676L, - 8740913206879606081L, - -8693282419677309723L, - 1576205127972543824L, - 5760354502610401246L, - 3173225529903529385L, - 1785166236732849743L, - -1024443476832068882L, - -7389053248306187459L, - 1171021620017782166L, - 1471572212217428724L, - 7720766400407679932L, - -8844781213239282804L, - -7030159830170200877L, - 2195066352895261150L, - 1343620937208608634L, - 9178233160016731645L, - -757883447602665223L, - 3303032934975960867L, - -3685775162104101116L, - -4454903657585596656L, - -5721532367620482629L, - 8453227136542829644L, - 5397498317904798888L, - 7820279586106842836L, - -2369852356421022546L, - 3910437403657116169L, - 6072677490463894877L, - -2651044781586183960L, - 5173762670440434510L, - -2970017317595590978L, - -1024698859439768763L, - -3098335260967738522L, - -1983156467650050768L, - -8132353894276010246L, - -1088647368768943835L, - -3942884234250555927L, - 7169967005748210436L, - 2870913702735953746L, - -2207022373847083021L, - 1104181306093040609L, - 5026420573696578749L, - -5874879996794598513L, - -4777071762424874671L, - -7506667858329720470L, - -2926679936584725232L, - -5530649174168373609L, - 5282408526788020384L, - 3589529249264153135L, - -6220724706210580398L, - -7141769650716479812L, - 5142537361821482047L, - -7029808662366864423L, - -6593520217660744466L, - 1454581737122410695L, - -139542971769349865L, - 1727752089112067235L, - -775001449688420017L, - -5011311035350652032L, - -8671171179275033159L, - -2850915129917664667L, - -5258897903906998781L, - -6954153088230718761L, - -4070351752166223959L, - -6902592976462171099L, - -7850366369290661391L, - -4562443925864904705L, - 3186922928616271015L, - 2208521081203400591L, - -2727824999830592777L, - -3817861137262331295L, - 2236720618756809066L, - -4888946967413746075L, - -446884183491477687L, - -43021963625359034L, - -5857689226703189898L, - -2156533592262354883L, - -2027655907961967077L, - 7151844076490292500L, - -5029149124756905464L, - 526404452686156976L, - 8741076980297445408L, - 7962851518384256467L, - -105985852299572102L, - -2614605270539434398L, - -8265006689379110448L, - 8158561071761524496L, - -6923530157382047308L, - 5551949335037580397L, - 565709346370307061L, - -4780869469938333359L, - 6931895917517004830L, - 565234767538051407L, - -8663136372880869656L, - 1427340323685448983L, - 6492705666640232290L, - 1481585578088475369L, - -1712711110946325531L, - 3281685342714380741L, - 6441384790483098576L, - -1073539554682358394L, - 5704050067194788964L, - -5495724689443043319L, - -5425043165837577535L, - 8349736730194941321L, - -4123620508872850061L, - 4687874980541143573L, - -468891940172550975L, - -3212254545038049829L, - -6830802881920725628L, - 9033050533972480988L, - 4204031879107709260L, - -677513987701096310L, - -3286978557209370155L, - 1644111582609113135L, - 2040089403280131741L, - 3323690950628902653L, - -7686964480987925756L, - -4664519769497402737L, - 3358384147145476542L, - -4699919744264452277L, - -4795197464927839170L, - 5051607253379734527L, - -8987703459734976898L, - 8993686795574431834L, - -2688919474688811047L, - 375938183536293311L, - 1049459889197081920L, - -1213022037395838295L, - 4932989235110984138L, - -6647247877090282452L, - -7698817539128166242L, - -3264029336002462659L, - 6487828018122309795L, - -2660821091484592878L, - 7104391069028909121L, - -1765840012354703384L, - 85428166783788931L, - -6732726318028261938L, - 7566202549055682933L, - 229664898114413280L, - -1474237851782211353L, - -1571058880058007603L, - -7926453582850712144L, - 2487148368914275243L, - 8740031015380673473L, - 1908345726881363169L, - -2510061320536523178L, - 7854780026906019630L, - -6023415596650016493L, - -6264841978089051107L, - 4024998278016087488L, - -4266288992025826072L, - -3222176619422665563L, - -1999258726038299316L, - 1715270077442385636L, - 6764658837948099754L, - -8646962299105812577L, - -51484064212171546L, - -1482515279051057493L, - -8663965522608868414L, - -256555202123523670L, - 1973279596140303801L, - -7280796173024508575L, - -5691760367231354704L, - -5915786562256300861L, - -3697715074906156565L, - 3710290115318541949L, - 6796151623958134374L, - -935299482515386356L, - -7078378973978660385L, - 5379481350768846927L, - -9011221735308556302L, - 5936568631579608418L, - -6060732654964511813L, - -4243141607840017809L, - 3198488845875349355L, - -7809288876010447646L, - 4371587872421472389L, - -1304197371105522943L, - 7389861473143460103L, - -1892352887992004024L, - 2214828764044713398L, - 6347546952883613388L, - 1275694314105480954L, - -5262663163358903733L, - 1524757505892047607L, - 1474285098416162746L, - -7976447341881911786L, - 4014100291977623265L, - 8994982266451461043L, - -7737118961020539453L, - -2303955536994331092L, - 1383016539349937136L, - 1771516393548245271L, - -5441914919967503849L, - 5449813464890411403L, - -3321280356474552496L, - 4084073849712624363L, - 4290039323210935932L, - 2449523715173349652L, - 7494827882138362156L, - 9035007221503623051L, - 5722056230130603177L, - -5443061851556843748L, - -7554957764207092109L, - 447883090204372074L, - 533916651576859197L, - -3104765246501904165L, - -4002281505194601516L, - -8402008431255610992L, - -408273018037005304L, - 214196458752109430L, - 6458513309998070914L, - 2665048360156607904L, - 96698248584467992L, - -3238403026096269033L, - 6759639479763272920L, - -4231971627796170796L, - -2149574977639731179L, - -1437035755788460036L, - -6000005629185669767L, - 145244292800946348L, - -3056352941404947199L, - 3748284277779018970L, - 7328354565489106580L, - -2176895260373660284L, - 3077983936372755601L, - 1215485830019410079L, - 683050801367331140L, - -3173237622987755212L, - -1951990779107873701L, - -4714366021269652421L, - 4934690664256059008L, - 1674823104333774474L, - -3974408282362828040L, - 2001478896492417760L, - -4115105568354384199L, - -2039694725495941666L, - -587763432329933431L, - -391276713546911316L, - -5543400904809469053L, - 1882564440421402418L, - -4991793588968693036L, - 3454088185914578321L, - 2290855447126188424L, - 3027910585026909453L, - 2136873580213167431L, - -6243562989966916730L, - 5887939953208193029L, - -3491821629467655741L, - -3138303216306660662L, - 8572629205737718669L, - 4154439973110146459L, - 5542921963475106759L, - -2025215496720103521L, - -4047933760493641640L, - -169455456138383823L, - -1164572689128024473L, - -8551078127234162906L, - -7247713218016599028L, - 8725299775220778242L, - 6263466461599623132L, - 7931568057263751768L, - 7365493014712655238L, - -7343740914722477108L, - 8294118602089088477L, - 7677867223984211483L, - -7052188421655969232L, - -3739992520633991431L, - 772835781531324307L, - 881441588914692737L, - 6321450879891466401L, - 5682516032668315027L, - 8493068269270840662L, - -3895212467022280567L, - -3241911302335746277L, - -7199586338775635848L, - -4606922569968527974L, - -806850906331637768L, - 2433670352784844513L, - -5787982146811444512L, - 7852193425348711165L, - 8669396209073850051L, - -6898875695148963118L, - 6523939610287206782L, - -8084962379210153174L, - 8159432443823995836L, - -2631068535470883494L, - -338649779993793113L, - 6514650029997052016L, - 3926259678521802094L, - 5443275905907218528L, - 7312187582713433551L, - -2993773587362997676L, - -1068335949405953411L, - 4499730398606216151L, - 8538015793827433712L, - -4057209365270423575L, - -1504284818438273559L, - -6460688570035010846L, - 1765077117408991117L, - 8278320303525164177L, - 8510128922449361533L, - 1305722765578569816L, - 7250861238779078656L, - -576624504295396147L, - -4363714566147521011L, - -5932111494795524073L, - 1837387625936544674L, - -4186755953373944712L, - -7657073597826358867L, - 140408487263951108L, - 5578463635002659628L, - 3400326044813475885L, - -6092804808386714986L, - -2410324417287268694L, - 3222007930183458970L, - 4932471983280850419L, - 3554114546976144528L, - -7216067928362857082L, - -6115289896923351748L, - -6769646077108881947L, - 4263895947722578066L, - 2939136721007694271L, - 1426030606447416658L, - -1316192446807442076L, - 5366182640480055129L, - 6527003877470258527L, - 5849680119000207603L, - 5263993237214222328L, - -6936533648789185663L, - -9063642143790846605L, - 3795892210758087672L, - 4987213125282940176L, - 2505500970421590750L, - -1014022559552365387L, - -3574736245968367770L, - 1180676507127340259L, - -2261908445207512503L, - -8416682633172243509L, - 1114990703652673283L, - 7753746660364401380L, - 1874908722469707905L, - 2033421444403047677L, - 21412168602505589L, - 385957952615286205L, - 2053171460074727107L, - 1915131899400103774L, - 6680879515029368390L, - 568807208929724162L, - -6211541450459087674L, - -5026690733412145448L, - 1384781941404886235L, - -98027820852587266L, - 1806580495924249669L, - 6322077317403503963L, - 9078162931419569939L, - -2809061215428363978L, - 7697867577577415733L, - -5270063855897737274L, - 5649864555290587388L, - -6970990547695444247L, - 579684606137331754L, - 3871931565451195154L, - 2030008578322050218L, - -5012357307111799829L, - -2271365921756144065L, - 4551962665158074190L, - -3385474923040271312L, - -7647625164191633577L, - 6634635380316963029L, - -5201190933687061585L, - 8864818738548593973L, - 2855828214210882907L, - 9154512990734024165L, - -6945306719789457786L, - 1200243352799481087L, - 875998327415853787L, - 1275313054449881011L, - -6105772045375948736L, - -2926927684328291437L, - 9200050852144954779L, - 5188726645765880663L, - 5197037323312705176L, - 3434926231010121611L, - -5054013669361906544L, - 2582959199749224670L, - -6053757512723474059L, - -5016308176846054473L, - -2509827316698626133L, - 7700343644503853204L, - -1997627249894596731L, - 3993168688325352290L, - -8181743677541277704L, - 3719056119682565597L, - -7264411659282947790L, - 7177028972346484464L, - -5460831176884283278L, - 1799904662416293978L, - -6549616005092764514L, - 5472403994001122052L, - 8683463751708388502L, - -7873363037838316398L, - 689134758256487260L, - -1287443614028696450L, - 4452712919702709507L, - 762909374167538893L, - 6594302592326281411L, - 1183786629674781984L, - 5021847859620133476L, - -2490098069181538915L, - 5105145136026716679L, - 4437836948098585718L, - 1987270426215858862L, - 6170312798826946249L, - 634297557126003407L, - -1672811625495999581L, - 6282971595586218191L, - 4549149305727581687L, - -5652165370435317782L, - 1064501550023753890L, - -5334885527127139723L, - -6904378001629481237L, - -1807576691784201230L, - -205688432992053911L, - 7621619053293393289L, - 6258649161313982470L, - -1111634238359342096L, - -8044260779481691987L, - 400270655839010807L, - -7806833581382890725L, - -2970563349459508036L, - -7392591524816802798L, - 2918924613160219805L, - -6444161627929149002L, - 6096497501321778876L, - -1477975665655830038L, - 1690651307597306138L, - -2364076888826085362L, - -6521987420014905821L, - -4419193480146960582L, - 3538587780233092477L, - 8374665961716940404L, - 7492412312405424500L, - 6311662249091276767L, - -1240235198282023566L, - 5478559631401166447L, - 3476714419313462133L, - 377427285984503784L, - 2570472638778991109L, - -2741381313777447835L, - -7123472905503039596L, - 2493658686946955193L, - 1024677789035847585L, - -2916713904339582981L, - -4532003852004642304L, - -2202143560366234111L, - 5832267856442755135L, - -261740607772957384L, - 239435959690278014L, - 5755548341947719409L, - 6138795458221887696L, - -7709506987360146385L, - -6657487758065140444L, - -7006376793203657499L, - 6544409861846502033L, - 3171929352014159247L, - 1051041925048792869L, - 2617300158375649749L, - 952652799620095175L, - -576661730162168147L, - -1634191369221345988L, - 4833656816115993519L, - 647566759700005786L, - 2473810683785291822L, - 3005977181064745326L, - -3321881966853149523L, - 7595337666427588699L, - 6004093624251057224L, - -563917505657690279L, - 6117428527147449302L, - -6287297509522976113L, - -4527219334756214406L, - 742626429298092489L, - 3057351806086972041L, - 645967551210272605L, - -4428701157828864227L, - 3236379103879435414L, - -8477089892132066300L, - -6127365537275859058L, - -4052490484706946358L, - -8004854976625046469L, - -3679456917426613424L, - -8212793762082595299L, - -818288739465424130L, - 1358812099481667095L, - 7835987612195254310L, - -3663247409614323059L, - -2931105150130396604L, - 7296136776835614792L, - -2014557408985889628L, - 7267662411237959788L, - 3699280615819277743L, - -212010675469091396L, - -6518374332458360120L, - 145026010541628849L, - 1879297324213501001L, - -7146296067751816833L, - -5002958800391379931L, - 6060682439924517608L, - -432234782921170964L, - -6669688947353256956L, - 7728943532792041267L, - 830911367341171721L, - 3396934884314289432L, - -779464156662780749L, - 2330041851883352285L, - -4783350380736276693L, - -5758476056890049254L, - -7551552301614791791L, - 1253334187723911710L, - -2685018208308798978L, - 5379636036360946454L, - 6154668487114681217L, - -8641287462255458898L, - 4676087643800649558L, - -2405142641398691475L, - 1088685126864246881L, - 6431149082338374041L, - -607357695335069155L, - -720970692129524140L, - 2648766932394044468L, - 8408344790179354573L, - -6193808387735667350L, - 7722524628524697419L, - -6975433852560238120L, - -2925851029234475295L, - -4274458387165211028L, - -8355836377702147319L, - 5278146397877332061L, - 8502098812383680707L, - 2292836642336580326L, - -6127608082651070062L, - 2222301962240611208L, - -1930887695854799378L, - 7640503480494894592L, - 1162652186586436094L, - -1918002592943761683L, - 7648998601717261840L, - -8472603250832757057L, - -988877663117552456L, - 2368458128168026494L, - -6480813811998475245L, - -5896967824416018967L, - -2593783161701820446L, - 6950098417530252598L, - 6362589545555771236L, - 7981389665448567125L, - 3954017080198558850L, - 1626078615050230622L, - 6650159066527969109L, - 697345338922935394L, - -1226816215461768626L, - 8740408765973837440L, - -4194155864629568323L, - 7016680023232424746L, - 6043281358142429469L, - -4201005667174376809L, - 1216727117859013155L, - 6367202436544203935L, - 35414869396444636L, - 3715622794033998412L, - 488654435687670554L, - -2503747297224687460L, - 3147101919441470388L, - -8248611218693190922L, - 970697264481229955L, - 3411465763826851418L, - 9117405004661599969L, - -5204346498331519734L, - -19637460819385174L, - -5039124225167977219L, - 2990108874601696668L, - -2623857460235459202L, - 4256291692861397446L, - 6724147860870760443L, - 3558616688507246537L, - 6487680097936412800L, - -6470792832935928161L, - 4314814550912237614L, - -1292878983006062345L, - 6791915152630414174L, - 5971652079925815310L, - 2557529546662864312L, - 466175054322801580L, - -585216717310746872L, - -2486640422147349036L, - 7212029603994220134L, - 3958995069888972500L, - 4950471855791412790L, - -3721948842035712763L, - -6184503487488243051L, - 4079570444585775332L, - -3952156172546996872L, - 4543894231118208322L, - -1739995588466209963L, - 9155948355455935530L, - 5821980345462207860L, - -2431287667309520417L, - -3890108130519441316L, - -558124689277030490L, - 6079823537335801717L, - 5409742395192364262L, - -2329885777717160453L, - -7332804342513677651L, - 1466490574975950555L, - -420549419907427929L, - -5249909814389692516L, - -5145692168206210661L, - 5934113980649113921L, - 3241618428555359661L, - -6622110266160980250L, - 5048250878669516223L, - 5747219637359976174L, - 2975906212588223728L, - 5730216838646273215L, - -176713127129024690L, - 6734624279336671146L, - 5127866734316017180L, - 7111761230887705595L, - 3457811808274317235L, - 3362961434604932375L, - -1877869936854991246L, - 7171428594877765665L, - -8252167178400462374L, - -6306888185035821047L, - -6684702191247683887L, - -7754928454824190529L, - -1902605599135704386L, - -4037319846689421239L, - 8493746058123583457L, - -8156648963857047193L, - 2051510355149839497L, - -1256416624177218909L, - -3344927996254072010L, - -1838853051925943568L, - 316927471680974556L, - -1502257066700798003L, - -5836095610125837606L, - -1594125583615895424L, - 1442211486559637962L, - -144295071206619569L, - 5159850900959273410L, - 4589139881166423678L, - -7038726987463097509L, - 2886082400772974595L, - 2780759114707171916L, - 5694649587906297495L, - 1260349041268169667L, - 4921517488271434890L, - 644696475796073018L, - 6262811963753436289L, - -6128198676595868773L, - -3625352083004760261L, - -8751453332943236675L, - 8749249479868749221L, - -2450808199545048250L, - -6517435817046180917L, - -3433321727429234998L, - -2591586258908763451L, - 3847750870868804507L, - 6603614438546398643L, - -7598682191291031287L, - 8710261565627204971L, - 4753389483755344355L, - -4645333069458786881L, - -6742695046613492214L, - 643070478568866643L, - -7543096104151965610L, - 7171495384655926161L, - 595063872610714431L, - 3292310150781130424L, - 4326847806055440904L, - -4580020566072794152L, - 3142286571820373678L, - 5530356537440155930L, - 546372639737516181L, - 7401214477400367500L, - 7406531960402873109L, - 3287639667219172570L, - 4977301681213633671L, - 5253257820925174498L, - 2906216636104297878L, - 6142955758238347523L, - -3498651268741727235L, - -5875053958265588593L, - 3896719087169993883L, - -910904726885775073L, - 380107493197368177L, - -4993591912695447004L, - 2970487257212582761L, - 2551762717569548774L, - 953061649962736812L, - 8949739538606589463L, - -2962839167079475801L, - -1375673191272573835L, - 3761793818361866390L, - -389577789190726878L, - 5661262051502180269L, - -6558556411143987683L, - -702798336372315031L, - -336662820551371779L, - 998576401126580155L, - -5945021269112582755L, - 6108533925730179871L, - 2207095297001999618L, - -9042779159998880435L, - -6177868444342118372L, - 6775965402605895077L, - -3788428885163306576L, - 7790055010527190387L, - 3581587652196995358L, - -6176354155561607694L, - -5859381340906321207L, - 395898765763528395L, - 8132967590863909348L, - -3329092504090544483L, - -6785855381158040247L, - 1497218517051796750L, - -5352392845588925911L, - -6271364901230559194L, - 2314830370653350118L, - -7617588269001325450L, - 1423166885758213795L, - 8538612578307869519L, - -61918791718295474L, - -8177103503192338593L, - -4740086042584326695L, - 3677931948215558698L, - 6558856291580149558L, - 2674975452453336335L, - 5133796555646930522L, - 5139252693299337100L, - 7949476871295347205L, - 4407815324662880678L, - -3758305875280581215L, - 6066309507576587415L, - -7368508486398350973L, - -3181640264332856492L, - 6905100869343314145L, - 3677177673848733417L, - 8862933624870506941L, - -8575223195813810568L, - 9178470351355678144L, - 4677809017145408358L, - -1194833416287894989L, - 3436364743255571183L, - -5204770725795363579L, - 560599448536335263L, - -3192077522964776200L, - -751575299648803575L, - 6334581746534596579L, - -8358187891202563300L, - -1462480609823525055L, - 5605961062646987941L, - 4968399805931440889L, - 7968693270782626653L, - -5868205923557518188L, - 1830234928743560617L, - -8435261076693154407L, - 2138416970728681332L, - 8088740745199685138L, - 806532400344230520L, - 1800590379902909333L, - -8909128842071238901L, - -7357495566969170860L, - 3679766664126940553L, - 2060050474865839094L, - 2363972840121763414L, - 525695004292982714L, - -1224842191746529593L, - 7011317848855545003L, - -6337167558180299938L, - -5184688833363785939L, - -8426673387248359061L, - -5035438815930785229L, - 3521810320608058994L, - 4803742557254962242L, - 6623527039545786598L, - -1221475882122634738L, - -3344794405518401087L, - 6510298498414053658L, - 2844753907937720338L, - 90502309714994895L, - -750403235344282494L, - -4825474181021465833L, - -3405519947983849510L, - 3503875590944089793L, - 7286294700691822468L, - 7828126881500292486L, - 8437899353709338096L, - 136052254470293480L, - 1113259077339995086L, - -8244887265606191121L, - 8089569503800461649L, - -1429698194850157567L, - 1575595674002364989L, - 3576095286627428675L, - -7653655285807569222L, - -6053506977362539111L, - -3923855345805787169L, - -8001149080454232377L, - -4382867706931832271L, - 4212860258835896297L, - 4207674254247034014L, - 5519424058779519159L, - -754483042161434654L, - 1434113479814210082L, - -6416645032698336896L, - 5624329676066514819L, - -8229557208322175959L, - 3922640911653270376L, - 7826932478782081910L, - -4862787164488635842L, - 1449234668827944573L, - -1781657689570106327L, - 5442827552725289699L, - 3589862161007644641L, - 4787115581650652778L, - -3512152721942525726L, - -6750103117958685206L, - 5012970446659949261L, - 6797752795961689017L, - 5086454597639943700L, - -7616068364979994076L, - 1492846825433110217L, - 2967476304433704510L, - -8413824338284112078L, - -1319049442043273974L, - -1756090916806844109L, - -9061091728950139525L, - -6864767830358160810L, - 4879532090226251157L, - 5528644708740739488L + -7444071767201028348L, + -8959994473701255385L, + 7116559933691734543L, + 6019482000716350659L, + -6625277557348586272L, + -5507563483608914162L, + 1540412690865189709L, + 4522324563441226749L, + -7143238906056518746L, + -7989831429045113014L, + -7103973673268129917L, + -2319060423616348937L, + -7576144055863289344L, + -8903544572546912743L, + 6376815151655939880L, + 5913754614426879871L, + 6466567997237536608L, + -869838547529805462L, + -2416009472486582019L, + -3059673981515537339L, + 4211239092494362041L, + 1414635639471257331L, + 166863084165354636L, + -3761330575439628223L, + 3524931906845391329L, + 6070229753198168844L, + -3740381894759773016L, + -1268276809699008557L, + 1518581707938531581L, + 7988048690914090770L, + -4510281763783422346L, + -8988936099728967847L, + -8644129751861931918L, + 2046936095001747419L, + 339737284852751748L, + -8493525091666023417L, + -3962890767051635164L, + -5799948707353228709L, + -6503577434416464161L, + 7718729912902936653L, + 191197390694726650L, + -2677870679247057207L, + 20411540801847004L, + 2738354376741059902L, + -3754251900675510347L, + -3208495075154651980L, + 5505877218642938179L, + 6710910171520780908L, + -9060809096139575515L, + 6936438027860748388L, + -6675099569841255629L, + -5358120966884144380L, + -4970515091611332076L, + -1810965683604454696L, + -516197887510505242L, + 1240864593087756274L, + 6033499571835033332L, + 7223146028771530185L, + 909128106589125206L, + 1567720774747329341L, + -1867353301780159863L, + 4655107429511759333L, + 5356891185236995950L, + 182631115370802890L, + -3582744155969569138L, + 595148673029792797L, + 495183136068540256L, + 5536689004903505647L, + -8472683670935785889L, + -4335021702965928166L, + 7306662983232020244L, + 4285260837125010956L, + 8288813008819191181L, + -3442351913745287612L, + 4883297703151707194L, + 9135546183059994964L, + 123663780425483012L, + 509606241253238381L, + 5940344208569311369L, + -2650142344608291176L, + 3232776678942440459L, + -922581627593772181L, + 7617977317085633049L, + 7154902266379028518L, + -5806388675416795571L, + 4368003766009575737L, + -2922716024457242064L, + 4771160713173250118L, + 3275897444752647349L, + -297220751499763878L, + 5095659287766176401L, + 1181843887132908826L, + 9058283605301070357L, + 3984713963471276643L, + 6050484112980480005L, + 1551535065359244224L, + 565337293533335618L, + 7412521035272884309L, + -4735469481351389369L, + 6998597101178745656L, + -9107075101236275961L, + 5879828914430779796L, + 6034964979406620806L, + 5666406915264701514L, + -4666218379625258428L, + 2749972203764815656L, + -782986256139071446L, + 6830581400521008570L, + 2588852022632995043L, + -5484725487363818922L, + -3319556935687817112L, + 6481961252981840893L, + 2204492445852963006L, + -5301091763401031066L, + -2615065677047206256L, + -6769817545131782460L, + -8421640685322953142L, + -3669062629317949176L, + -9167016978640750490L, + 2783671191687959562L, + -7599469568522039782L, + -7589134103255480011L, + -5932706841188717592L, + -8689756354284562694L, + -3934347391198581249L, + -1344748563236040701L, + 2172701592984478834L, + -5322052340624064417L, + -8493945390573620511L, + 3349021988137788403L, + -1806262525300459538L, + -8091524448239736618L, + 4022306289903960690L, + -8346915997379834224L, + -2106001381993805461L, + -5784123934724688161L, + 6775158099649720388L, + -3869682756870293568L, + 4356490186652082006L, + 8469371446702290916L, + -2972961082318458602L, + -7188106622222784561L, + -4961006366631572412L, + 3199991182014172900L, + 2917435868590434179L, + 8385845305547872127L, + 7706824402560674655L, + -1587379863634865277L, + -4212156212298809650L, + -1305209322000720233L, + -7866728337506665880L, + 8195089740529247049L, + -4876930125798534239L, + 798222697981617129L, + -2441020897729372845L, + -3926158482651178666L, + -1254795122048514130L, + 5192463866522217407L, + -5426289318796042964L, + -3267454004443530826L, + 471043133625225785L, + -660956397365869974L, + -6149209189144999161L, + -2630977660039166559L, + 8512219789663151219L, + -3309844068134074620L, + -6211275327487847132L, + -2130171729366885995L, + 6569302074205462321L, + 4855778342281619706L, + 3867211421508653033L, + -3002480002418725542L, + -8297543107467502696L, + 8049642289208775831L, + -5439825716055425635L, + 7251760070798756432L, + -4774526021749797528L, + -3892389575184442548L, + 5162451061244344424L, + 6000530226398686578L, + -5713092252241819676L, + 8740913206879606081L, + -8693282419677309723L, + 1576205127972543824L, + 5760354502610401246L, + 3173225529903529385L, + 1785166236732849743L, + -1024443476832068882L, + -7389053248306187459L, + 1171021620017782166L, + 1471572212217428724L, + 7720766400407679932L, + -8844781213239282804L, + -7030159830170200877L, + 2195066352895261150L, + 1343620937208608634L, + 9178233160016731645L, + -757883447602665223L, + 3303032934975960867L, + -3685775162104101116L, + -4454903657585596656L, + -5721532367620482629L, + 8453227136542829644L, + 5397498317904798888L, + 7820279586106842836L, + -2369852356421022546L, + 3910437403657116169L, + 6072677490463894877L, + -2651044781586183960L, + 5173762670440434510L, + -2970017317595590978L, + -1024698859439768763L, + -3098335260967738522L, + -1983156467650050768L, + -8132353894276010246L, + -1088647368768943835L, + -3942884234250555927L, + 7169967005748210436L, + 2870913702735953746L, + -2207022373847083021L, + 1104181306093040609L, + 5026420573696578749L, + -5874879996794598513L, + -4777071762424874671L, + -7506667858329720470L, + -2926679936584725232L, + -5530649174168373609L, + 5282408526788020384L, + 3589529249264153135L, + -6220724706210580398L, + -7141769650716479812L, + 5142537361821482047L, + -7029808662366864423L, + -6593520217660744466L, + 1454581737122410695L, + -139542971769349865L, + 1727752089112067235L, + -775001449688420017L, + -5011311035350652032L, + -8671171179275033159L, + -2850915129917664667L, + -5258897903906998781L, + -6954153088230718761L, + -4070351752166223959L, + -6902592976462171099L, + -7850366369290661391L, + -4562443925864904705L, + 3186922928616271015L, + 2208521081203400591L, + -2727824999830592777L, + -3817861137262331295L, + 2236720618756809066L, + -4888946967413746075L, + -446884183491477687L, + -43021963625359034L, + -5857689226703189898L, + -2156533592262354883L, + -2027655907961967077L, + 7151844076490292500L, + -5029149124756905464L, + 526404452686156976L, + 8741076980297445408L, + 7962851518384256467L, + -105985852299572102L, + -2614605270539434398L, + -8265006689379110448L, + 8158561071761524496L, + -6923530157382047308L, + 5551949335037580397L, + 565709346370307061L, + -4780869469938333359L, + 6931895917517004830L, + 565234767538051407L, + -8663136372880869656L, + 1427340323685448983L, + 6492705666640232290L, + 1481585578088475369L, + -1712711110946325531L, + 3281685342714380741L, + 6441384790483098576L, + -1073539554682358394L, + 5704050067194788964L, + -5495724689443043319L, + -5425043165837577535L, + 8349736730194941321L, + -4123620508872850061L, + 4687874980541143573L, + -468891940172550975L, + -3212254545038049829L, + -6830802881920725628L, + 9033050533972480988L, + 4204031879107709260L, + -677513987701096310L, + -3286978557209370155L, + 1644111582609113135L, + 2040089403280131741L, + 3323690950628902653L, + -7686964480987925756L, + -4664519769497402737L, + 3358384147145476542L, + -4699919744264452277L, + -4795197464927839170L, + 5051607253379734527L, + -8987703459734976898L, + 8993686795574431834L, + -2688919474688811047L, + 375938183536293311L, + 1049459889197081920L, + -1213022037395838295L, + 4932989235110984138L, + -6647247877090282452L, + -7698817539128166242L, + -3264029336002462659L, + 6487828018122309795L, + -2660821091484592878L, + 7104391069028909121L, + -1765840012354703384L, + 85428166783788931L, + -6732726318028261938L, + 7566202549055682933L, + 229664898114413280L, + -1474237851782211353L, + -1571058880058007603L, + -7926453582850712144L, + 2487148368914275243L, + 8740031015380673473L, + 1908345726881363169L, + -2510061320536523178L, + 7854780026906019630L, + -6023415596650016493L, + -6264841978089051107L, + 4024998278016087488L, + -4266288992025826072L, + -3222176619422665563L, + -1999258726038299316L, + 1715270077442385636L, + 6764658837948099754L, + -8646962299105812577L, + -51484064212171546L, + -1482515279051057493L, + -8663965522608868414L, + -256555202123523670L, + 1973279596140303801L, + -7280796173024508575L, + -5691760367231354704L, + -5915786562256300861L, + -3697715074906156565L, + 3710290115318541949L, + 6796151623958134374L, + -935299482515386356L, + -7078378973978660385L, + 5379481350768846927L, + -9011221735308556302L, + 5936568631579608418L, + -6060732654964511813L, + -4243141607840017809L, + 3198488845875349355L, + -7809288876010447646L, + 4371587872421472389L, + -1304197371105522943L, + 7389861473143460103L, + -1892352887992004024L, + 2214828764044713398L, + 6347546952883613388L, + 1275694314105480954L, + -5262663163358903733L, + 1524757505892047607L, + 1474285098416162746L, + -7976447341881911786L, + 4014100291977623265L, + 8994982266451461043L, + -7737118961020539453L, + -2303955536994331092L, + 1383016539349937136L, + 1771516393548245271L, + -5441914919967503849L, + 5449813464890411403L, + -3321280356474552496L, + 4084073849712624363L, + 4290039323210935932L, + 2449523715173349652L, + 7494827882138362156L, + 9035007221503623051L, + 5722056230130603177L, + -5443061851556843748L, + -7554957764207092109L, + 447883090204372074L, + 533916651576859197L, + -3104765246501904165L, + -4002281505194601516L, + -8402008431255610992L, + -408273018037005304L, + 214196458752109430L, + 6458513309998070914L, + 2665048360156607904L, + 96698248584467992L, + -3238403026096269033L, + 6759639479763272920L, + -4231971627796170796L, + -2149574977639731179L, + -1437035755788460036L, + -6000005629185669767L, + 145244292800946348L, + -3056352941404947199L, + 3748284277779018970L, + 7328354565489106580L, + -2176895260373660284L, + 3077983936372755601L, + 1215485830019410079L, + 683050801367331140L, + -3173237622987755212L, + -1951990779107873701L, + -4714366021269652421L, + 4934690664256059008L, + 1674823104333774474L, + -3974408282362828040L, + 2001478896492417760L, + -4115105568354384199L, + -2039694725495941666L, + -587763432329933431L, + -391276713546911316L, + -5543400904809469053L, + 1882564440421402418L, + -4991793588968693036L, + 3454088185914578321L, + 2290855447126188424L, + 3027910585026909453L, + 2136873580213167431L, + -6243562989966916730L, + 5887939953208193029L, + -3491821629467655741L, + -3138303216306660662L, + 8572629205737718669L, + 4154439973110146459L, + 5542921963475106759L, + -2025215496720103521L, + -4047933760493641640L, + -169455456138383823L, + -1164572689128024473L, + -8551078127234162906L, + -7247713218016599028L, + 8725299775220778242L, + 6263466461599623132L, + 7931568057263751768L, + 7365493014712655238L, + -7343740914722477108L, + 8294118602089088477L, + 7677867223984211483L, + -7052188421655969232L, + -3739992520633991431L, + 772835781531324307L, + 881441588914692737L, + 6321450879891466401L, + 5682516032668315027L, + 8493068269270840662L, + -3895212467022280567L, + -3241911302335746277L, + -7199586338775635848L, + -4606922569968527974L, + -806850906331637768L, + 2433670352784844513L, + -5787982146811444512L, + 7852193425348711165L, + 8669396209073850051L, + -6898875695148963118L, + 6523939610287206782L, + -8084962379210153174L, + 8159432443823995836L, + -2631068535470883494L, + -338649779993793113L, + 6514650029997052016L, + 3926259678521802094L, + 5443275905907218528L, + 7312187582713433551L, + -2993773587362997676L, + -1068335949405953411L, + 4499730398606216151L, + 8538015793827433712L, + -4057209365270423575L, + -1504284818438273559L, + -6460688570035010846L, + 1765077117408991117L, + 8278320303525164177L, + 8510128922449361533L, + 1305722765578569816L, + 7250861238779078656L, + -576624504295396147L, + -4363714566147521011L, + -5932111494795524073L, + 1837387625936544674L, + -4186755953373944712L, + -7657073597826358867L, + 140408487263951108L, + 5578463635002659628L, + 3400326044813475885L, + -6092804808386714986L, + -2410324417287268694L, + 3222007930183458970L, + 4932471983280850419L, + 3554114546976144528L, + -7216067928362857082L, + -6115289896923351748L, + -6769646077108881947L, + 4263895947722578066L, + 2939136721007694271L, + 1426030606447416658L, + -1316192446807442076L, + 5366182640480055129L, + 6527003877470258527L, + 5849680119000207603L, + 5263993237214222328L, + -6936533648789185663L, + -9063642143790846605L, + 3795892210758087672L, + 4987213125282940176L, + 2505500970421590750L, + -1014022559552365387L, + -3574736245968367770L, + 1180676507127340259L, + -2261908445207512503L, + -8416682633172243509L, + 1114990703652673283L, + 7753746660364401380L, + 1874908722469707905L, + 2033421444403047677L, + 21412168602505589L, + 385957952615286205L, + 2053171460074727107L, + 1915131899400103774L, + 6680879515029368390L, + 568807208929724162L, + -6211541450459087674L, + -5026690733412145448L, + 1384781941404886235L, + -98027820852587266L, + 1806580495924249669L, + 6322077317403503963L, + 9078162931419569939L, + -2809061215428363978L, + 7697867577577415733L, + -5270063855897737274L, + 5649864555290587388L, + -6970990547695444247L, + 579684606137331754L, + 3871931565451195154L, + 2030008578322050218L, + -5012357307111799829L, + -2271365921756144065L, + 4551962665158074190L, + -3385474923040271312L, + -7647625164191633577L, + 6634635380316963029L, + -5201190933687061585L, + 8864818738548593973L, + 2855828214210882907L, + 9154512990734024165L, + -6945306719789457786L, + 1200243352799481087L, + 875998327415853787L, + 1275313054449881011L, + -6105772045375948736L, + -2926927684328291437L, + 9200050852144954779L, + 5188726645765880663L, + 5197037323312705176L, + 3434926231010121611L, + -5054013669361906544L, + 2582959199749224670L, + -6053757512723474059L, + -5016308176846054473L, + -2509827316698626133L, + 7700343644503853204L, + -1997627249894596731L, + 3993168688325352290L, + -8181743677541277704L, + 3719056119682565597L, + -7264411659282947790L, + 7177028972346484464L, + -5460831176884283278L, + 1799904662416293978L, + -6549616005092764514L, + 5472403994001122052L, + 8683463751708388502L, + -7873363037838316398L, + 689134758256487260L, + -1287443614028696450L, + 4452712919702709507L, + 762909374167538893L, + 6594302592326281411L, + 1183786629674781984L, + 5021847859620133476L, + -2490098069181538915L, + 5105145136026716679L, + 4437836948098585718L, + 1987270426215858862L, + 6170312798826946249L, + 634297557126003407L, + -1672811625495999581L, + 6282971595586218191L, + 4549149305727581687L, + -5652165370435317782L, + 1064501550023753890L, + -5334885527127139723L, + -6904378001629481237L, + -1807576691784201230L, + -205688432992053911L, + 7621619053293393289L, + 6258649161313982470L, + -1111634238359342096L, + -8044260779481691987L, + 400270655839010807L, + -7806833581382890725L, + -2970563349459508036L, + -7392591524816802798L, + 2918924613160219805L, + -6444161627929149002L, + 6096497501321778876L, + -1477975665655830038L, + 1690651307597306138L, + -2364076888826085362L, + -6521987420014905821L, + -4419193480146960582L, + 3538587780233092477L, + 8374665961716940404L, + 7492412312405424500L, + 6311662249091276767L, + -1240235198282023566L, + 5478559631401166447L, + 3476714419313462133L, + 377427285984503784L, + 2570472638778991109L, + -2741381313777447835L, + -7123472905503039596L, + 2493658686946955193L, + 1024677789035847585L, + -2916713904339582981L, + -4532003852004642304L, + -2202143560366234111L, + 5832267856442755135L, + -261740607772957384L, + 239435959690278014L, + 5755548341947719409L, + 6138795458221887696L, + -7709506987360146385L, + -6657487758065140444L, + -7006376793203657499L, + 6544409861846502033L, + 3171929352014159247L, + 1051041925048792869L, + 2617300158375649749L, + 952652799620095175L, + -576661730162168147L, + -1634191369221345988L, + 4833656816115993519L, + 647566759700005786L, + 2473810683785291822L, + 3005977181064745326L, + -3321881966853149523L, + 7595337666427588699L, + 6004093624251057224L, + -563917505657690279L, + 6117428527147449302L, + -6287297509522976113L, + -4527219334756214406L, + 742626429298092489L, + 3057351806086972041L, + 645967551210272605L, + -4428701157828864227L, + 3236379103879435414L, + -8477089892132066300L, + -6127365537275859058L, + -4052490484706946358L, + -8004854976625046469L, + -3679456917426613424L, + -8212793762082595299L, + -818288739465424130L, + 1358812099481667095L, + 7835987612195254310L, + -3663247409614323059L, + -2931105150130396604L, + 7296136776835614792L, + -2014557408985889628L, + 7267662411237959788L, + 3699280615819277743L, + -212010675469091396L, + -6518374332458360120L, + 145026010541628849L, + 1879297324213501001L, + -7146296067751816833L, + -5002958800391379931L, + 6060682439924517608L, + -432234782921170964L, + -6669688947353256956L, + 7728943532792041267L, + 830911367341171721L, + 3396934884314289432L, + -779464156662780749L, + 2330041851883352285L, + -4783350380736276693L, + -5758476056890049254L, + -7551552301614791791L, + 1253334187723911710L, + -2685018208308798978L, + 5379636036360946454L, + 6154668487114681217L, + -8641287462255458898L, + 4676087643800649558L, + -2405142641398691475L, + 1088685126864246881L, + 6431149082338374041L, + -607357695335069155L, + -720970692129524140L, + 2648766932394044468L, + 8408344790179354573L, + -6193808387735667350L, + 7722524628524697419L, + -6975433852560238120L, + -2925851029234475295L, + -4274458387165211028L, + -8355836377702147319L, + 5278146397877332061L, + 8502098812383680707L, + 2292836642336580326L, + -6127608082651070062L, + 2222301962240611208L, + -1930887695854799378L, + 7640503480494894592L, + 1162652186586436094L, + -1918002592943761683L, + 7648998601717261840L, + -8472603250832757057L, + -988877663117552456L, + 2368458128168026494L, + -6480813811998475245L, + -5896967824416018967L, + -2593783161701820446L, + 6950098417530252598L, + 6362589545555771236L, + 7981389665448567125L, + 3954017080198558850L, + 1626078615050230622L, + 6650159066527969109L, + 697345338922935394L, + -1226816215461768626L, + 8740408765973837440L, + -4194155864629568323L, + 7016680023232424746L, + 6043281358142429469L, + -4201005667174376809L, + 1216727117859013155L, + 6367202436544203935L, + 35414869396444636L, + 3715622794033998412L, + 488654435687670554L, + -2503747297224687460L, + 3147101919441470388L, + -8248611218693190922L, + 970697264481229955L, + 3411465763826851418L, + 9117405004661599969L, + -5204346498331519734L, + -19637460819385174L, + -5039124225167977219L, + 2990108874601696668L, + -2623857460235459202L, + 4256291692861397446L, + 6724147860870760443L, + 3558616688507246537L, + 6487680097936412800L, + -6470792832935928161L, + 4314814550912237614L, + -1292878983006062345L, + 6791915152630414174L, + 5971652079925815310L, + 2557529546662864312L, + 466175054322801580L, + -585216717310746872L, + -2486640422147349036L, + 7212029603994220134L, + 3958995069888972500L, + 4950471855791412790L, + -3721948842035712763L, + -6184503487488243051L, + 4079570444585775332L, + -3952156172546996872L, + 4543894231118208322L, + -1739995588466209963L, + 9155948355455935530L, + 5821980345462207860L, + -2431287667309520417L, + -3890108130519441316L, + -558124689277030490L, + 6079823537335801717L, + 5409742395192364262L, + -2329885777717160453L, + -7332804342513677651L, + 1466490574975950555L, + -420549419907427929L, + -5249909814389692516L, + -5145692168206210661L, + 5934113980649113921L, + 3241618428555359661L, + -6622110266160980250L, + 5048250878669516223L, + 5747219637359976174L, + 2975906212588223728L, + 5730216838646273215L, + -176713127129024690L, + 6734624279336671146L, + 5127866734316017180L, + 7111761230887705595L, + 3457811808274317235L, + 3362961434604932375L, + -1877869936854991246L, + 7171428594877765665L, + -8252167178400462374L, + -6306888185035821047L, + -6684702191247683887L, + -7754928454824190529L, + -1902605599135704386L, + -4037319846689421239L, + 8493746058123583457L, + -8156648963857047193L, + 2051510355149839497L, + -1256416624177218909L, + -3344927996254072010L, + -1838853051925943568L, + 316927471680974556L, + -1502257066700798003L, + -5836095610125837606L, + -1594125583615895424L, + 1442211486559637962L, + -144295071206619569L, + 5159850900959273410L, + 4589139881166423678L, + -7038726987463097509L, + 2886082400772974595L, + 2780759114707171916L, + 5694649587906297495L, + 1260349041268169667L, + 4921517488271434890L, + 644696475796073018L, + 6262811963753436289L, + -6128198676595868773L, + -3625352083004760261L, + -8751453332943236675L, + 8749249479868749221L, + -2450808199545048250L, + -6517435817046180917L, + -3433321727429234998L, + -2591586258908763451L, + 3847750870868804507L, + 6603614438546398643L, + -7598682191291031287L, + 8710261565627204971L, + 4753389483755344355L, + -4645333069458786881L, + -6742695046613492214L, + 643070478568866643L, + -7543096104151965610L, + 7171495384655926161L, + 595063872610714431L, + 3292310150781130424L, + 4326847806055440904L, + -4580020566072794152L, + 3142286571820373678L, + 5530356537440155930L, + 546372639737516181L, + 7401214477400367500L, + 7406531960402873109L, + 3287639667219172570L, + 4977301681213633671L, + 5253257820925174498L, + 2906216636104297878L, + 6142955758238347523L, + -3498651268741727235L, + -5875053958265588593L, + 3896719087169993883L, + -910904726885775073L, + 380107493197368177L, + -4993591912695447004L, + 2970487257212582761L, + 2551762717569548774L, + 953061649962736812L, + 8949739538606589463L, + -2962839167079475801L, + -1375673191272573835L, + 3761793818361866390L, + -389577789190726878L, + 5661262051502180269L, + -6558556411143987683L, + -702798336372315031L, + -336662820551371779L, + 998576401126580155L, + -5945021269112582755L, + 6108533925730179871L, + 2207095297001999618L, + -9042779159998880435L, + -6177868444342118372L, + 6775965402605895077L, + -3788428885163306576L, + 7790055010527190387L, + 3581587652196995358L, + -6176354155561607694L, + -5859381340906321207L, + 395898765763528395L, + 8132967590863909348L, + -3329092504090544483L, + -6785855381158040247L, + 1497218517051796750L, + -5352392845588925911L, + -6271364901230559194L, + 2314830370653350118L, + -7617588269001325450L, + 1423166885758213795L, + 8538612578307869519L, + -61918791718295474L, + -8177103503192338593L, + -4740086042584326695L, + 3677931948215558698L, + 6558856291580149558L, + 2674975452453336335L, + 5133796555646930522L, + 5139252693299337100L, + 7949476871295347205L, + 4407815324662880678L, + -3758305875280581215L, + 6066309507576587415L, + -7368508486398350973L, + -3181640264332856492L, + 6905100869343314145L, + 3677177673848733417L, + 8862933624870506941L, + -8575223195813810568L, + 9178470351355678144L, + 4677809017145408358L, + -1194833416287894989L, + 3436364743255571183L, + -5204770725795363579L, + 560599448536335263L, + -3192077522964776200L, + -751575299648803575L, + 6334581746534596579L, + -8358187891202563300L, + -1462480609823525055L, + 5605961062646987941L, + 4968399805931440889L, + 7968693270782626653L, + -5868205923557518188L, + 1830234928743560617L, + -8435261076693154407L, + 2138416970728681332L, + 8088740745199685138L, + 806532400344230520L, + 1800590379902909333L, + -8909128842071238901L, + -7357495566969170860L, + 3679766664126940553L, + 2060050474865839094L, + 2363972840121763414L, + 525695004292982714L, + -1224842191746529593L, + 7011317848855545003L, + -6337167558180299938L, + -5184688833363785939L, + -8426673387248359061L, + -5035438815930785229L, + 3521810320608058994L, + 4803742557254962242L, + 6623527039545786598L, + -1221475882122634738L, + -3344794405518401087L, + 6510298498414053658L, + 2844753907937720338L, + 90502309714994895L, + -750403235344282494L, + -4825474181021465833L, + -3405519947983849510L, + 3503875590944089793L, + 7286294700691822468L, + 7828126881500292486L, + 8437899353709338096L, + 136052254470293480L, + 1113259077339995086L, + -8244887265606191121L, + 8089569503800461649L, + -1429698194850157567L, + 1575595674002364989L, + 3576095286627428675L, + -7653655285807569222L, + -6053506977362539111L, + -3923855345805787169L, + -8001149080454232377L, + -4382867706931832271L, + 4212860258835896297L, + 4207674254247034014L, + 5519424058779519159L, + -754483042161434654L, + 1434113479814210082L, + -6416645032698336896L, + 5624329676066514819L, + -8229557208322175959L, + 3922640911653270376L, + 7826932478782081910L, + -4862787164488635842L, + 1449234668827944573L, + -1781657689570106327L, + 5442827552725289699L, + 3589862161007644641L, + 4787115581650652778L, + -3512152721942525726L, + -6750103117958685206L, + 5012970446659949261L, + 6797752795961689017L, + 5086454597639943700L, + -7616068364979994076L, + 1492846825433110217L, + 2967476304433704510L, + -8413824338284112078L, + -1319049442043273974L, + -1756090916806844109L, + -9061091728950139525L, + -6864767830358160810L, + 4879532090226251157L, + 5528644708740739488L }; } From 1384df8cce8e4d3998aca136e5da7a0ca5d5450c Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Tue, 28 Oct 2025 11:04:12 +0000 Subject: [PATCH 10/14] Refine AsciiDoc formatting for consistency and clarity --- LICENSE.adoc | 2 +- README.adoc | 17 +-- src/main/docs/algorithm-profiles.adoc | 107 +++++++++++-------- src/main/docs/architecture-overview.adoc | 3 +- src/main/docs/performance-benchmarks.adoc | 4 +- src/main/docs/testing-strategy.adoc | 11 +- src/main/docs/unsafe-and-platform-notes.adoc | 6 +- 7 files changed, 85 insertions(+), 65 deletions(-) diff --git a/LICENSE.adoc b/LICENSE.adoc index 5c5c264..f450566 100644 --- a/LICENSE.adoc +++ b/LICENSE.adoc @@ -6,4 +6,4 @@ You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and limitations under the License. \ No newline at end of file +See the License for the specific language governing permissions and limitations under the License. diff --git a/README.adoc b/README.adoc index 6afc2a5..3dcd576 100644 --- a/README.adoc +++ b/README.adoc @@ -1,10 +1,11 @@ == Zero-Allocation Hashing +:pp: ++ Chronicle Software image:https://maven-badges.herokuapp.com/maven-central/net.openhft/zero-allocation-hashing/badge.svg[caption="",link=https://maven-badges.herokuapp.com/maven-central/net.openhft/zero-allocation-hashing] image:https://javadoc.io/badge2/net.openhft/zero-allocation-hashing/javadoc.svg[link="https://www.javadoc.io/doc/net.openhft/zero-allocation-hashing/latest/index.html"] -//image:https://javadoc-badge.appspot.com/net.openhft/zero-allocation-hashing.svg?label=javadoc[JavaDoc, link=https://www.javadoc.io/doc/net.openhft/zero-allocation-hashing] +// image:https://javadoc-badge.appspot.com/net.openhft/zero-allocation-hashing.svg?label=javadoc[JavaDoc, link=https://www.javadoc.io/doc/net.openhft/zero-allocation-hashing] image:https://img.shields.io/github/license/OpenHFT/Zero-Allocation-Hashing[GitHub] image:https://img.shields.io/badge/release%20notes-subscribe-brightgreen[link="https://chronicle.software/release-notes/"] image:https://sonarcloud.io/api/project_badges/measure?project=OpenHFT_Zero-Allocation-Hashing&metric=alert_status[link="https://sonarcloud.io/dashboard?id=OpenHFT_Zero-Allocation-Hashing"] @@ -25,19 +26,19 @@ This provides consistent results whatever the byte order, while only moderately Currently `long`-valued hash function interface is defined for 64-bit hash, and `long[]`-valued hash function interface for more than 64-bit hash, with the following implementations (in alphabetical order): -- *https://github.com/google/cityhash[CityHash], version 1.1* (latest; 1.1.1 is a C++ language-specific maintenance release). +* *https://github.com/google/cityhash[CityHash], version 1.1* (latest; 1.1.1 is a C{pp} language-specific maintenance release). -- Two algorithms from *https://github.com/google/farmhash[FarmHash]*: `farmhashna` (introduced in FarmHash 1.0) and `farmhashuo` (introduced in FarmHash 1.1). +* Two algorithms from *https://github.com/google/farmhash[FarmHash]*: `farmhashna` (introduced in FarmHash 1.0) and `farmhashuo` (introduced in FarmHash 1.1). -- *https://github.com/jandrewrogers/MetroHash[MetroHash]* (using the metrohash64_2 initialization vector). +* *https://github.com/jandrewrogers/MetroHash[MetroHash]* (using the metrohash64_2 initialization vector). -- *https://github.com/aappleby/smhasher/wiki/MurmurHash3[MurmurHash3]* 128-bit and low 64-bit. +* *https://github.com/aappleby/smhasher/wiki/MurmurHash3[MurmurHash3]* 128-bit and low 64-bit. -- *https://github.com/wangyi-fudan/wyhash[wyHash]*, version 3. +* *https://github.com/wangyi-fudan/wyhash[wyHash]*, version 3. -- *https://github.com/Cyan4973/xxHash[xxHash]*. +* *https://github.com/Cyan4973/xxHash[xxHash]*. -- *https://github.com/Cyan4973/xxHash[xxh3, xxh128]*, 128-bit and 64 bit. +* *https://github.com/Cyan4973/xxHash[xxh3, xxh128]*, 128-bit and 64 bit. These are thoroughly tested with *https://www.oracle.com/java/technologies/java-se-support-roadmap.html[LTS JDKs]* diff --git a/src/main/docs/algorithm-profiles.adoc b/src/main/docs/algorithm-profiles.adoc index 3096c98..f62b785 100644 --- a/src/main/docs/algorithm-profiles.adoc +++ b/src/main/docs/algorithm-profiles.adoc @@ -1,4 +1,5 @@ == Algorithm Profiles +:pp: ++ Chronicle Software @@ -6,72 +7,88 @@ toc::[] === CityHash 1.1 -* **Factories:** `LongHashFunction.city_1_1()`, `.city_1_1(long)`, `.city_1_1(long, long)` (`LongHashFunction.java:53-115`). -* **Implementation:** `net.openhft.hashing.CityAndFarmHash_1_1` ports Google’s CityHash64 v1.1 (`CityAndFarmHash_1_1.java`). -* **Key traits:** -- Normalises inputs to little-endian and forwards short-length cases to specialised mix routines (1–3, 4–7, 8–16 byte fast paths). -- Produces identical output across host endianness; big-endian incurs the expected byte swapping cost. -- Provides seedless, single-seed, and dual-seed variants mirroring the upstream API. +Factories :: +`LongHashFunction.city_1_1()`, `.city_1_1(long)`, `.city_1_1(long, long)` (`LongHashFunction.java:53-115`). +Implementation :: +`net.openhft.hashing.CityAndFarmHash_1_1` ports Google’s CityHash64 v1.1 (`CityAndFarmHash_1_1.java`). +Key traits :: +* Normalises inputs to little-endian and forwards short-length cases to specialised mix routines (1–3, 4–7, 8–16 byte fast paths). +* Produces identical output across host endianness; big-endian incurs the expected byte swapping cost. +* Provides seedless, single-seed, and dual-seed variants mirroring the upstream API. === FarmHash NA (1.0) -* **Factories:** `LongHashFunction.farmNa()`, `.farmNa(long)`, `.farmNa(long, long)` (`LongHashFunction.java:117-179`). -* **Implementation:** Shares `CityAndFarmHash_1_1` with CityHash; the class carries the `farmhashna` logic, including the <32 byte shortcut to CityHash output. -* **Key traits:** -- Deterministic across endianness; the mixing rounds assume little-endian inputs and convert when necessary. -- Seeds map directly onto the upstream `farmhashna` parameters. +Factories :: +`LongHashFunction.farmNa()`, `.farmNa(long)`, `.farmNa(long, long)` (`LongHashFunction.java:117-179`). +Implementation :: +Shares `CityAndFarmHash_1_1` with CityHash; the class carries the `farmhashna` logic, including the <32 byte shortcut to CityHash output. +Key traits :: +* Deterministic across endianness; the mixing rounds assume little-endian inputs and convert when necessary. +* Seeds map directly onto the upstream `farmhashna` parameters. === FarmHash UO (1.1) -* **Factories:** `LongHashFunction.farmUo()`, `.farmUo(long)`, `.farmUo(long, long)` (`LongHashFunction.java:181-243`). -* **Implementation:** Also hosted in `CityAndFarmHash_1_1`, which covers the 1.1 update’s longer pipelines. -* **Key traits:** -- Maintains parity with Google’s C++ release for test vectors. -- Endianness neutral: always routes through an `Access` view that matches the algorithm’s little-endian assumptions. +Factories :: +`LongHashFunction.farmUo()`, `.farmUo(long)`, `.farmUo(long, long)` (`LongHashFunction.java:181-243`). +Implementation :: +Also hosted in `CityAndFarmHash_1_1`, which covers the 1.1 update’s longer pipelines. +Key traits :: +* Maintains parity with Google’s C{pp} release for test vectors. +* Endianness neutral: always routes through an `Access` view that matches the algorithm’s little-endian assumptions. === MurmurHash3 -* **Factories:** `LongHashFunction.murmur_3()`, `.murmur_3(long)` for 64-bit (`LongHashFunction.java:245-268`); `LongTupleHashFunction.murmur_3()`, `.murmur_3(long)` for 128-bit (`LongTupleHashFunction.java:35-69`). -* **Implementation:** `net.openhft.hashing.MurmurHash_3` adapts Austin Appleby’s x64 variants. +Factories :: +`LongHashFunction.murmur_3()`, `.murmur_3(long)` for 64-bit (`LongHashFunction.java:245-268`); `LongTupleHashFunction.murmur_3()`, `.murmur_3(long)` for 128-bit (`LongTupleHashFunction.java:35-69`). +Implementation :: +`net.openhft.hashing.MurmurHash_3` adapts Austin Appleby’s x64 variants. It extends `DualHashFunction` so the 128-bit engine also exposes the low 64 bits through `LongHashFunction`. -* **Key traits:** -- Little-endian canonicalisation via `Access.byteOrder`. -- Supports zero-length hashing through pre-computed constants to keep `hashVoid()` stable. +Key traits :: +* Little-endian canonicalisation via `Access.byteOrder`. +* Supports zero-length hashing through pre-computed constants to keep `hashVoid()` stable. === xxHash (XXH64) -* **Factories:** `LongHashFunction.xx()`, `.xx(long)` (`LongHashFunction.java:270-298`). -* **Implementation:** `net.openhft.hashing.XxHash` ports the official XXH64 reference and keeps the unsigned prime constants as signed Java longs. -* **Key traits:** -- Uses four-lane accumulation for ≥32 byte inputs, matching upstream behaviour bit-for-bit. -- Applies the canonical avalanche round in `XxHash.finalize` for all lengths. -- Seeded and seedless instances differ only by the stored `seed()` override; serialisation preserves both forms. +Factories :: +`LongHashFunction.xx()`, `.xx(long)` (`LongHashFunction.java:270-298`). +Implementation :: +`net.openhft.hashing.XxHash` ports the official XXH64 reference and keeps the unsigned prime constants as signed Java longs. +Key traits :: +* Uses four-lane accumulation for ≥32 byte inputs, matching upstream behaviour bit-for-bit. +* Applies the canonical avalanche round in `XxHash.finalize` for all lengths. +* Seeded and seedless instances differ only by the stored `seed()` override; serialisation preserves both forms. === XXH3 / XXH128 -* **Factories:** `LongHashFunction.xx3()`, `.xx3(long)` for 64-bit, plus `.xx128low()` / `.xx128low(long)` for the low 64 bits of XXH128 (`LongHashFunction.java:300-341`). +Factories :: +`LongHashFunction.xx3()`, `.xx3(long)` for 64-bit, plus `.xx128low()` / `.xx128low(long)` for the low 64 bits of XXH128 (`LongHashFunction.java:300-341`). Full 128-bit results live behind `LongTupleHashFunction.xx128()` and `.xx128(long)` (`LongTupleHashFunction.java:71-104`). -* **Implementation:** `net.openhft.hashing.XXH3` keeps the FARSH-derived 192 byte secret and streaming logic. +Implementation :: +`net.openhft.hashing.XXH3` keeps the FARSH-derived 192 byte secret and streaming logic. It defines distinct entry points for 64-bit, 128-bit, and low-64-bit projections. -* **Key traits:** -- Optimises for short messages with dedicated 1–3, 4–8, 9–16, 17–128, and 129–240 byte paths. -- Uses `UnsafeAccess.INSTANCE.byteOrder(null, LITTLE_ENDIAN)` once to avoid per-call adapter allocation. -- The 128-bit variant reuses the same mixing core; exposing the low 64 bits avoids extra copies for callers that only need a single `long`. +Key traits :: +* Optimises for short messages with dedicated 1–3, 4–8, 9–16, 17–128, and 129–240 byte paths. +* Uses `UnsafeAccess.INSTANCE.byteOrder(null, LITTLE_ENDIAN)` once to avoid per-call adapter allocation. +* The 128-bit variant reuses the same mixing core; exposing the low 64 bits avoids extra copies for callers that only need a single `long`. === wyHash v3 -* **Factories:** `LongHashFunction.wy_3()`, `.wy_3(long)` (`LongHashFunction.java:343-369`). -* **Implementation:** `net.openhft.hashing.WyHash` mirrors Wang Yi’s version 3 reference, including the `_wymum` 128-bit multiply-fold helper built on `Maths.unsignedLongMulXorFold`. -* **Key traits:** -- Supports streaming chunks up to 256 bytes per loop iteration; beyond that it accumulates in 32 byte strides. -- Handles ≤3, ≤8, ≤16, ≤24, ≤32 byte inputs with the same branching as the C code. -- Maintains deterministic output across architectures while acknowledging the performance hit on big-endian systems. +Factories :: +`LongHashFunction.wy_3()`, `.wy_3(long)` (`LongHashFunction.java:343-369`). +Implementation :: +`net.openhft.hashing.WyHash` mirrors Wang Yi’s version 3 reference, including the `_wymum` 128-bit multiply-fold helper built on `Maths.unsignedLongMulXorFold`. +Key traits :: +* Supports streaming chunks up to 256 bytes per loop iteration; beyond that it accumulates in 32 byte strides. +* Handles ≤3, ≤8, ≤16, ≤24, ≤32 byte inputs with the same branching as the C code. +* Maintains deterministic output across architectures while acknowledging the performance hit on big-endian systems. === MetroHash (metrohash64_2) -* **Factories:** `LongHashFunction.metro()`, `.metro(long)` (`LongHashFunction.java:371-389`). -* **Implementation:** `net.openhft.hashing.MetroHash` implements the 64-bit metrohash variant with the `_2` initialisation vector, matching the original author’s reference. -* **Key traits:** -- Performs four-lane unrolled mixing for ≥32 byte inputs and cascades down to 16, 8, 4, 2, and 1 byte tails. -- Uses deterministic finalisation (`MetroHash.finalize`) shared by scalar and streaming paths. -- Seeded instances override `seed()` and cache the pre-hashed `hashVoid()` constant to avoid re-computation. +Factories :: +`LongHashFunction.metro()`, `.metro(long)` (`LongHashFunction.java:371-389`). +Implementation :: +`net.openhft.hashing.MetroHash` implements the 64-bit metrohash variant with the `_2` initialisation vector, matching the original author’s reference. +Key traits :: +* Performs four-lane unrolled mixing for ≥32 byte inputs and cascades down to 16, 8, 4, 2, and 1 byte tails. +* Uses deterministic finalisation (`MetroHash.finalize`) shared by scalar and streaming paths. +* Seeded instances override `seed()` and cache the pre-hashed `hashVoid()` constant to avoid re-computation. diff --git a/src/main/docs/architecture-overview.adoc b/src/main/docs/architecture-overview.adoc index 0eed745..72775ef 100644 --- a/src/main/docs/architecture-overview.adoc +++ b/src/main/docs/architecture-overview.adoc @@ -1,4 +1,5 @@ == Zero-Allocation Hashing Architecture Overview +:pp: ++ Chronicle Software @@ -22,7 +23,7 @@ It currently delivers 128-bit MurmurHash3 and XXH3 outputs and mirrors the singl === Algorithm Implementations * Each upstream hash family lives in its own package-private class and exposes seed-aware factories back to the public façade. -** `CityAndFarmHash_1_1` adapts CityHash64 1.1 plus FarmHash NA/UO variants, including the short-input specialisations from the original C++ sources. +** `CityAndFarmHash_1_1` adapts CityHash64 1.1 plus FarmHash NA/UO variants, including the short-input specialisations from the original C{pp} sources. ** `MurmurHash_3` contains both 64-bit and 128-bit variants, reusing `DualHashFunction` to provide `LongHashFunction` and `LongTupleHashFunction` accessors. ** `XxHash` implements XXH64 with the upstream prime constants and treats all inputs as little-endian via `Access.byteOrder` (`XxHash.java`). ** `XXH3` delivers XXH3 64-bit and 128-bit functions, including the FARSH-derived secret and block-stripe accumulation strategy (`XXH3.java`). diff --git a/src/main/docs/performance-benchmarks.adoc b/src/main/docs/performance-benchmarks.adoc index 7bc6901..a3121a4 100644 --- a/src/main/docs/performance-benchmarks.adoc +++ b/src/main/docs/performance-benchmarks.adoc @@ -18,8 +18,8 @@ Bench figures are captured offline and copied into the documentation. * Use a harness that exercises each `LongHashFunction` via the public API (for example, `hashBytes(byte[])`) over representative buffer sizes. Warm up the JVM until results stabilise before sampling throughput. * Record: -- **Speed (GB/s):** sustained throughput while hashing large buffers in steady state. -- **Bootstrap (ns):** per-call overhead measured on very small inputs (e.g., empty or sub-cache-line data). +** *Speed (GB/s):* sustained throughput while hashing large buffers in steady state. +** *Bootstrap (ns):* per-call overhead measured on very small inputs (e.g., empty or sub-cache-line data). * Capture both native and non-native endianness where practical; conversion overhead on big-endian systems should be noted if it materially deviates from little-endian results. === Reporting Guidelines diff --git a/src/main/docs/testing-strategy.adoc b/src/main/docs/testing-strategy.adoc index d4723c7..8f277bc 100644 --- a/src/main/docs/testing-strategy.adoc +++ b/src/main/docs/testing-strategy.adoc @@ -1,4 +1,5 @@ == Testing Strategy +:pp: ++ Chronicle Software @@ -12,7 +13,7 @@ All algorithm-specific tests delegate to this helper when checking new vectors ( === Reference Vectors -* CityHash and FarmHash tests (`City64_1_1_Test`, `FarmHashTest`, `OriginalFarmHashTest`) replay the official C++ outputs for inputs up to 1024 bytes with deterministic seeds. +* CityHash and FarmHash tests (`City64_1_1_Test`, `FarmHashTest`, `OriginalFarmHashTest`) replay the official C{pp} outputs for inputs up to 1024 bytes with deterministic seeds. The source programs used to generate those vectors are embedded in each test for reproducibility. * XXH64 (`XxHashTest`), XXH3 (`XXH3Test`), and XXH128 (`XXH128Test`) load tables generated by the upstream xxHash project, covering lengths up to two full XXH3 blocks. * MetroHash (`MetroHashTest`) and wyHash (`WyHashTest`) follow the same pattern with public reference implementations, ensuring the adapted Java code remains bit-for-bit compatible. @@ -25,10 +26,10 @@ The source programs used to generate those vectors are embedded in each test for === Adding or Modifying Algorithms -1. Generate authoritative reference hashes using the upstream implementation (the existing tests include example C or C++ snippets). -2. Create or extend a parameterised JUnit test that iterates over message lengths (the standard pattern covers lengths `[0, N]` with `N` at least 1024). -3. Feed the new vectors through `LongHashFunctionTest.test` (or the tuple equivalent) to validate all API entry points. -4. Augment `LongHashFunctionTest` if the algorithm exposes new surface area (for example, additional primitive types or new `Access` strategies). +. Generate authoritative reference hashes using the upstream implementation (the existing tests include example C or C{pp} snippets). +. Create or extend a parameterised JUnit test that iterates over message lengths (the standard pattern covers lengths `[0, N]` with `N` at least 1024). +. Feed the new vectors through `LongHashFunctionTest.test` (or the tuple equivalent) to validate all API entry points. +. Augment `LongHashFunctionTest` if the algorithm exposes new surface area (for example, additional primitive types or new `Access` strategies). === Build and Verification diff --git a/src/main/docs/unsafe-and-platform-notes.adoc b/src/main/docs/unsafe-and-platform-notes.adoc index 8180ad7..f14fbfc 100644 --- a/src/main/docs/unsafe-and-platform-notes.adoc +++ b/src/main/docs/unsafe-and-platform-notes.adoc @@ -17,9 +17,9 @@ Older HotSpot builds and other JVMs fall back to UTF-16 behaviour through `Moder * On Java 9 and newer, strong encapsulation may block reflective access to the JDK internals above. Add the following opens/exports when running with a strict module layer: -- `--add-opens java.base/sun.misc=ALL-UNNAMED` (access to `Unsafe.theUnsafe`). -- `--add-exports java.base/sun.nio.ch=ALL-UNNAMED` (casts to `DirectBuffer`). -- `--add-opens java.base/java.lang=ALL-UNNAMED` (reading `String.value` for compact strings). +** `--add-opens java.base/sun.misc=ALL-UNNAMED` (access to `Unsafe.theUnsafe`). +** `--add-exports java.base/sun.nio.ch=ALL-UNNAMED` (casts to `DirectBuffer`). +** `--add-opens java.base/java.lang=ALL-UNNAMED` (reading `String.value` for compact strings). * The library does not automatically request these permissions. Applications embedding Zero-Allocation Hashing must configure the JVM command line or module descriptors accordingly. From e89b1921363e92e3bce5826809e405684d54d249 Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Tue, 28 Oct 2025 12:32:53 +0000 Subject: [PATCH 11/14] Uses Java 8 compatible version --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 57dc0c5..241406c 100644 --- a/pom.xml +++ b/pom.xml @@ -54,8 +54,8 @@ https://sonarcloud.io 3.6.0 - 10.26.1 - 4.9.8.1 + 8.45.1 + 4.8.6.6 1.14.0 3.28.0 0.8.14 From 38d9babf9606fd7ab75aa6c1aa4d07f6d09bd4bb Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Tue, 28 Oct 2025 12:54:12 +0000 Subject: [PATCH 12/14] Remove Maven Enforcer from build --- pom.xml | 53 ----------------------------------------------------- 1 file changed, 53 deletions(-) diff --git a/pom.xml b/pom.xml index 241406c..698edb6 100644 --- a/pom.xml +++ b/pom.xml @@ -40,9 +40,6 @@ 8 - ${project.target.release} - 3.5.0 - ${project.target.release} ${project.target.release} @@ -118,33 +115,6 @@ - - maven-enforcer-plugin - - - enforce-versions - - enforce - - - - - [${project.maven.min-version},) - - - [${project.jdk.min-version},) - - - project.target.release - Target Java SE release must be at least 7! - ^([7-9]|[1-9]\d+)$ - - - - - - - maven-compiler-plugin 3.8.1 @@ -565,29 +535,6 @@ - - org.apache.maven.plugins - maven-enforcer-plugin - 3.5.0 - - - enforce - - enforce - - - - - [${project.jdk.min-version},) - - - [${project.maven.min-version},) - - - - - - From 7bd4cac55a28363421f1ebc59809cede703c81fb Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Tue, 28 Oct 2025 13:19:56 +0000 Subject: [PATCH 13/14] Update parent POM version to 1.27ea1 and adjust coverage properties --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 698edb6..1857092 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ net.openhft java-parent-pom - 1.27ea0 + 1.27ea1 From d7faa5ce555f0f03d604dfba1cadf15fe673231d Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Tue, 28 Oct 2025 13:30:18 +0000 Subject: [PATCH 14/14] Update character-set policy from ASCII-7 to ISO-8859-1 in AGENTS.md --- AGENTS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e125d8e..ae1e74b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,8 +11,8 @@ LLM-based agents can accelerate development only if they respect our house rules | Requirement | Rationale | |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------| | **British English** spelling (`organisation`, `licence`, *not* `organization`, `license`) except technical US spellings like `synchronized` | Keeps wording consistent with Chronicle's London HQ and existing docs. See the University of Oxford style guide for reference. | -| **ASCII-7 only** (code-points 0-127). Avoid smart quotes, non-breaking spaces and accented characters. | ASCII-7 survives every toolchain Chronicle uses, incl. low-latency binary wire formats that expect the 8th bit to be 0. | -| If a symbol is not available in ASCII-7, use a textual form such as `micro-second`, `>=`, `:alpha:`, `:yes:`. This is the preferred approach and Unicode must not be inserted. | Extended or '8-bit ASCII' variants are *not* portable and are therefore disallowed. | +| **ISO-8859-1** (code-points 0-255). Avoid smart quotes, non-breaking spaces and accented characters. | ISO-8859-1 survives every toolchain Chronicle uses, incl. low-latency binary wire formats that expect the 8th bit to be 0. | +| If a symbol is not available in ISO-8859-1, use a textual form such as `micro-second`, `>=`, `:alpha:`, `:yes:`. This is the preferred approach and Unicode must not be inserted. | Extended or '8-bit ASCII' variants are *not* portable and are therefore disallowed. | ## Javadoc guidelines @@ -92,7 +92,7 @@ This tight loop informs the AI accurately and creates immediate clarity for all When using AI agents to assist with development, please adhere to the following guidelines: * **Respect the Language & Character-set Policy**: Ensure all AI-generated content follows the British English and - ASCII-7 guidelines outlined above. + ISO-8859-1 guidelines outlined above. Focus on Clarity: AI-generated documentation should be clear and concise and add value beyond what is already present in the code or existing documentation. * **Avoid Redundancy**: Do not generate content that duplicates existing documentation or code comments unless it