mirror of https://gitee.com/openkylin/abseil.git
sync upstream patches
This commit is contained in:
parent
1b780cbb88
commit
d612db1f7d
|
@ -1,9 +0,0 @@
|
|||
Abseil for Debian
|
||||
-----------------
|
||||
|
||||
libabsl-dev installs a number of files to 'internal' directories. In general,
|
||||
your project should not directly include any files from these directories; they
|
||||
may change without warning. If you think you need something from one of those
|
||||
files, please report a bug with reportbug(1).
|
||||
|
||||
-- Benjamin Barenblat <bbaren@debian.org> Thu, 07 May 2020 11:35:28 -0400
|
|
@ -1,3 +1,9 @@
|
|||
abseil (20220623.1-ok2) yangtze; urgency=medium
|
||||
|
||||
* Sync upstream patches.
|
||||
|
||||
-- zhouganqing <zhouganqing@kylinos.cn> Wed, 04 Jan 2023 09:58:34 +0800
|
||||
|
||||
abseil (20220623.1-ok1) yangtze; urgency=medium
|
||||
|
||||
* New upstream version 20220623.1
|
||||
|
|
|
@ -14,17 +14,17 @@
|
|||
|
||||
Source: abseil
|
||||
Priority: optional
|
||||
Maintainer: Benjamin Barenblat <bbaren@debian.org>
|
||||
Maintainer: OpenKylin Developers <packaging@lists.openkylin.top>
|
||||
Build-Depends:
|
||||
cmake (>= 3.5),
|
||||
debhelper-compat (= 12),
|
||||
googletest (>= 1.10.0.20200926) [!hppa !mipsel !ppc64]
|
||||
googletest (>= 1.12) [!mipsel !ppc64] <!nocheck>
|
||||
Rules-Requires-Root: no
|
||||
Standards-Version: 4.6.0
|
||||
Standards-Version: 4.6.1
|
||||
Section: libs
|
||||
Homepage: https://abseil.io/
|
||||
Vcs-Browser: https://salsa.debian.org/debian/abseil
|
||||
Vcs-Git: https://salsa.debian.org/debian/abseil.git
|
||||
Vcs-Browser: https://gitee.com/openkylin/abseil
|
||||
Vcs-Git: https://gitee.com/openkylin/abseil.git
|
||||
Description: extensions to the C++ standard library
|
||||
Abseil is an open-source collection of C++ library code designed to augment the
|
||||
C++ standard library. The Abseil library code is collected from Google's C++
|
||||
|
@ -37,7 +37,7 @@ Architecture: any
|
|||
Multi-Arch: same
|
||||
Section: libdevel
|
||||
Depends:
|
||||
libabsl20210324 (= ${binary:Version}),
|
||||
libabsl20220623 (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
Recommends: cmake (>= 2.6) | pkg-config, g++ (>= 5.1)
|
||||
Description: ${source:Synopsis} (development files)
|
||||
|
@ -46,7 +46,7 @@ Description: ${source:Synopsis} (development files)
|
|||
This package contains header files and other data necessary for developing with
|
||||
Abseil.
|
||||
|
||||
Package: libabsl20210324
|
||||
Package: libabsl20220623
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
|
|
|
@ -12,7 +12,7 @@ Copyright:
|
|||
License: Apache-2.0
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2020 Google LLC
|
||||
Copyright: 2020-2022 Google LLC
|
||||
License: Apache-2.0
|
||||
|
||||
License: Apache-2.0
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
# Copyright 2020 Google LLC
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# https://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.
|
||||
|
||||
libabsl20210324: hardening-no-fortify-functions [usr/lib/*/libabsl_base.so*]
|
||||
libabsl20210324: hardening-no-fortify-functions [usr/lib/*/libabsl_debugging_internal.so*]
|
||||
libabsl20210324: hardening-no-fortify-functions [usr/lib/*/libabsl_random_internal_seed_material.so*]
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_bad_any_cast_impl.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_bad_optional_access.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_bad_variant_access.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_exponential_biased.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_flags_commandlineflag.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_flags_commandlineflag_internal.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_hash.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_hashtablez_sampler.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_log_severity.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_periodic_sampler.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_random_internal_randen.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_random_internal_randen_hwaes_impl.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_random_internal_randen_slow.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_stacktrace.so*
|
||||
libabsl20210324: library-not-linked-against-libc usr/lib/*/libabsl_throw_delegate.so*
|
||||
libabsl20210324: no-symbols-control-file usr/lib/*/libabsl_*
|
||||
libabsl20210324: package-name-doesnt-match-sonames libabsl-*
|
||||
libabsl20210324: shared-library-lacks-prerequisites usr/lib/*/libabsl_city.so*
|
||||
libabsl20210324: shared-library-lacks-prerequisites usr/lib/*/libabsl_leak_check.so*
|
||||
libabsl20210324: shared-library-lacks-prerequisites usr/lib/*/libabsl_leak_check_disable.so*
|
||||
libabsl20210324: shared-library-lacks-prerequisites usr/lib/*/libabsl_random_internal_platform.so*
|
||||
libabsl20210324: shared-library-lacks-prerequisites usr/lib/*/libabsl_random_internal_randen_hwaes.so*
|
||||
libabsl20210324: shared-library-lacks-prerequisites usr/lib/*/libabsl_wyhash.so*
|
|
@ -1,74 +0,0 @@
|
|||
# Copyright 2020 Google LLC
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# https://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.
|
||||
#
|
||||
libabsl_bad_any_cast_impl 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_bad_optional_access 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_bad_variant_access 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_base 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_city 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_civil_time 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_cord 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_debugging_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_demangle_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_examine_stack 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_exponential_biased 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_failure_signal_handler 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_commandlineflag 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_commandlineflag_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_config 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_marshalling 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_parse 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_private_handle_accessor 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_program_name 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_reflection 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_usage 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_flags_usage_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_graphcycles_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_hash 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_hashtablez_sampler 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_int128 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_leak_check 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_leak_check_disable 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_log_severity 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_malloc_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_periodic_sampler 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_distributions 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_distribution_test_util 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_platform 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_pool_urbg 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_randen 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_randen_hwaes 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_randen_hwaes_impl 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_randen_slow 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_internal_seed_material 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_seed_gen_exception 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_random_seed_sequences 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_raw_hash_set 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_raw_logging_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_scoped_set_env 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_spinlock_wait 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_stacktrace 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_status 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_statusor 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_str_format_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_strerror 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_strings 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_strings_internal 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_symbolize 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_synchronization 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_throw_delegate 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_time 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_time_zone 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
||||
libabsl_wyhash 20210324 libabsl20210324 (>= 0~20210324.2-1)
|
|
@ -0,0 +1,40 @@
|
|||
# Copyright 2022 Google LLC
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# https://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.
|
||||
|
||||
libabsl20220623: hardening-no-fortify-functions [usr/lib/*/libabsl_base.so*]
|
||||
libabsl20220623: hardening-no-fortify-functions [usr/lib/*/libabsl_debugging_internal.so*]
|
||||
libabsl20220623: hardening-no-fortify-functions [usr/lib/*/libabsl_random_internal_seed_material.so*]
|
||||
libabsl20220623: hardening-no-fortify-functions [usr/lib/*/libabsl_time_zone.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_bad_any_cast_impl.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_bad_optional_access.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_bad_variant_access.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_cordz_functions.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_cordz_sample_token.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_exponential_biased.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_flags_commandlineflag.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_flags_commandlineflag_internal.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_hash.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_log_severity.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_periodic_sampler.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_random_internal_randen.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_random_internal_randen_hwaes_impl.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_random_internal_randen_slow.so*]
|
||||
libabsl20220623: library-not-linked-against-libc [usr/lib/*/libabsl_throw_delegate.so*]
|
||||
libabsl20220623: no-symbols-control-file usr/lib/*/libabsl_*
|
||||
libabsl20220623: package-name-doesnt-match-sonames libabsl-*
|
||||
libabsl20220623: shared-library-lacks-prerequisites [usr/lib/*/libabsl_city.so*]
|
||||
libabsl20220623: shared-library-lacks-prerequisites [usr/lib/*/libabsl_leak_check.so*]
|
||||
libabsl20220623: shared-library-lacks-prerequisites [usr/lib/*/libabsl_low_level_hash.so*]
|
||||
libabsl20220623: shared-library-lacks-prerequisites [usr/lib/*/libabsl_random_internal_platform.so*]
|
||||
libabsl20220623: shared-library-lacks-prerequisites [usr/lib/*/libabsl_random_internal_randen_hwaes.so*]
|
|
@ -0,0 +1,78 @@
|
|||
# Copyright 2022 Google LLC
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# https://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.
|
||||
#
|
||||
libabsl_bad_any_cast_impl 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_bad_optional_access 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_bad_variant_access 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_base 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_city 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_civil_time 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_cord 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_cord_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_cordz_functions 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_cordz_handle 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_cordz_info 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_cordz_sample_token 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_debugging_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_demangle_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_examine_stack 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_exponential_biased 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_failure_signal_handler 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_commandlineflag 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_commandlineflag_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_config 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_marshalling 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_parse 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_private_handle_accessor 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_program_name 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_reflection 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_usage 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_flags_usage_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_graphcycles_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_hash 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_hashtablez_sampler 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_int128 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_leak_check 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_log_severity 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_low_level_hash 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_malloc_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_periodic_sampler 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_distributions 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_distribution_test_util 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_platform 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_pool_urbg 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_randen 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_randen_hwaes 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_randen_hwaes_impl 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_randen_slow 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_internal_seed_material 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_seed_gen_exception 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_random_seed_sequences 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_raw_hash_set 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_raw_logging_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_scoped_set_env 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_spinlock_wait 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_stacktrace 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_status 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_statusor 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_str_format_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_strerror 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_strings 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_strings_internal 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_symbolize 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_synchronization 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_throw_delegate 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_time 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
||||
libabsl_time_zone 20220623 libabsl20220623 (>= 0~20220623.0-1)
|
|
@ -1,71 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: =?utf-8?q?Don=E2=80=99t_examine_irrelevant_destination_buckets_in_?=
|
||||
=?utf-8?q?DiscreteDistributionTest?=
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Abseil generates discrete distributions using Walker’s aliasing
|
||||
algorithm. This creates uniformly distributed buckets, each with a
|
||||
probability of sending traffic to a different bucket. Abseil represents
|
||||
a bucket as a pair
|
||||
|
||||
(probability of retaining traffic ×
|
||||
alternate bucket if traffic is passed)
|
||||
|
||||
and a distribution as a vector of such pairs. For example, {(0.3, 1),
|
||||
(1.0, 1)} represents a distribution with two buckets, the zeroth of
|
||||
which passes 70% of its traffic to bucket 1 and the first of which holds
|
||||
on to all its traffic.
|
||||
|
||||
This representation is not unique: When a bucket retains traffic with
|
||||
probability 1, the alternate bucket is irrelevant. Continuing the
|
||||
example above, {(0.3, 1), (1.0, 0)} _also_ represents a two-bucket
|
||||
distribution where the zeroth bucket passes 70% of its traffic to the
|
||||
first and the first hangs on to all traffic. Exactly what representation
|
||||
Abseil generates for a given input is related to how much precision is
|
||||
used in intermediate floating-point operations, which is an
|
||||
architectural implementation detail. Remove sensitivity to that detail
|
||||
by not examining the alternate bucket when the retention probability is
|
||||
1.0.
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 372993410 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/random/discrete_distribution_test.cc | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/absl/random/discrete_distribution_test.cc b/absl/random/discrete_distribution_test.cc
|
||||
index 6d00700..415b14c 100644
|
||||
--- a/absl/random/discrete_distribution_test.cc
|
||||
+++ b/absl/random/discrete_distribution_test.cc
|
||||
@@ -99,6 +99,7 @@ TYPED_TEST(DiscreteDistributionTypeTest, Constructor) {
|
||||
}
|
||||
|
||||
TEST(DiscreteDistributionTest, InitDiscreteDistribution) {
|
||||
+ using testing::_;
|
||||
using testing::Pair;
|
||||
|
||||
{
|
||||
@@ -111,8 +112,8 @@ TEST(DiscreteDistributionTest, InitDiscreteDistribution) {
|
||||
// Each bucket is p=1/3, so bucket 0 will send half it's traffic
|
||||
// to bucket 2, while the rest will retain all of their traffic.
|
||||
EXPECT_THAT(q, testing::ElementsAre(Pair(0.5, 2), //
|
||||
- Pair(1.0, 1), //
|
||||
- Pair(1.0, 2)));
|
||||
+ Pair(1.0, _), //
|
||||
+ Pair(1.0, _)));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -135,7 +136,7 @@ TEST(DiscreteDistributionTest, InitDiscreteDistribution) {
|
||||
|
||||
EXPECT_THAT(q, testing::ElementsAre(Pair(b0, 3), //
|
||||
Pair(b1, 3), //
|
||||
- Pair(1.0, 2), //
|
||||
+ Pair(1.0, _), //
|
||||
Pair(b3, 2), //
|
||||
Pair(b1, 3)));
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Disable SysinfoTest.NominalCPUFrequency on armel/armhf
|
||||
|
||||
NominalCPUFrequency has different behavior on 32-bit and 64-bit ARM
|
||||
kernels. The Debian arm64 buildds assume they can build 32-bit ARM
|
||||
packages, but if they do, the NominalCPUFrequency test will fail.
|
||||
Disable the test when building for 32-bit ARM.
|
||||
---
|
||||
absl/base/internal/sysinfo_test.cc | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/absl/base/internal/sysinfo_test.cc b/absl/base/internal/sysinfo_test.cc
|
||||
index 5f9e45f..9849aac 100644
|
||||
--- a/absl/base/internal/sysinfo_test.cc
|
||||
+++ b/absl/base/internal/sysinfo_test.cc
|
||||
@@ -43,7 +43,13 @@ TEST(SysinfoTest, NumCPUs) {
|
||||
// POWER is particularly problematic here; some Linux kernels expose the CPU
|
||||
// frequency, while others do not. Since we can't predict a priori what a given
|
||||
// machine is going to do, just disable this test on POWER on Linux.
|
||||
-#if !(defined(__linux) && (defined(__ppc64__) || defined(__PPC64__)))
|
||||
+//
|
||||
+// Debian also disables this test on armel and armhf, since tests for those
|
||||
+// platforms could either be run on a 32-bit ARM system (where
|
||||
+// NominalCPUFrequency returns a reasonable value) or a 64-bit ARM system (where
|
||||
+// it does not).
|
||||
+#if !(defined(__linux) && \
|
||||
+ (defined(__ppc64__) || defined(__PPC64__) || defined(__arm__)))
|
||||
TEST(SysinfoTest, NominalCPUFrequency) {
|
||||
// Linux only exposes the CPU frequency on certain architectures, and
|
||||
// Emscripten doesn't expose it at all.
|
|
@ -1,729 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Restructure wyhash_test.cc to separate golden values
|
||||
|
||||
This patch is a subset of the referenced commit, which originally also changed
|
||||
the mix function on arm64. The original message is as follows:
|
||||
|
||||
Alternative bit mixer for LowLevelHash on ARM
|
||||
|
||||
LowLevelHash's bit-mixer is inefficient on ARM because it calculates
|
||||
a 128-bit product of two 64-bit numbers. On ARM, this requires a
|
||||
sequence of two instructions with a high combined latency and poor
|
||||
throughput. This change provides alternative bit-mixing code for ARM
|
||||
that uses only 64-bit arithmetic (multiplication, xor, and
|
||||
left-shifts) and speeds things up considerably.
|
||||
|
||||
The bit-mixing code for ARM was inspired by by Woothash[1] and
|
||||
xxh3[1]. Once I landed on a sequence of operations that provided
|
||||
good mixing, I used a test harness to search for the combination of
|
||||
shift / rotate factors that provided the best mixing, as indicated
|
||||
by SMHasher hash quality tests. The new mixing code passes 13 out of
|
||||
15 of the hash quality test suites in SMHasher, with the two
|
||||
failures being in the noise range: e.g. 1 collision vs. zero
|
||||
expected in a keyset of ~8m keys.
|
||||
|
||||
[1]: https://github.com/tommyettinger/waterhash/blob/49f5cf0b63b9/woothash.h#L16-L20
|
||||
[2]: https://github.com/Cyan4973/xxHash/blob/6853ddc36e46/xxhash.h#L3240-L3265
|
||||
|
||||
PiperOrigin-RevId: 391833008
|
||||
|
||||
This restructuring is a prerequisite for big-endian-hash2.diff.
|
||||
---
|
||||
absl/hash/internal/wyhash_test.cc | 436 +++++++++++++++++++-------------------
|
||||
1 file changed, 216 insertions(+), 220 deletions(-)
|
||||
|
||||
diff --git a/absl/hash/internal/wyhash_test.cc b/absl/hash/internal/wyhash_test.cc
|
||||
index 9fb06d2..9e2d106 100644
|
||||
--- a/absl/hash/internal/wyhash_test.cc
|
||||
+++ b/absl/hash/internal/wyhash_test.cc
|
||||
@@ -14,473 +14,469 @@
|
||||
|
||||
#include "absl/hash/internal/wyhash.h"
|
||||
|
||||
-#include "absl/strings/escaping.h"
|
||||
+#include <cinttypes>
|
||||
+
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
+#include "absl/strings/escaping.h"
|
||||
+
|
||||
+#define UPDATE_GOLDEN 0
|
||||
|
||||
namespace {
|
||||
|
||||
-static const uint64_t kCurrentSeed = 0;
|
||||
static const uint64_t kSalt[5] = {0xa0761d6478bd642f, 0xe7037ed1a0b428dbl,
|
||||
0x8ebc6af09c88c6e3, 0x589965cc75374cc3l,
|
||||
0x1d8e4e27c47d124f};
|
||||
|
||||
-// Note: We don't account for endianness, so the values here are only correct if
|
||||
-// you're also running on a little endian platform.
|
||||
-
|
||||
-TEST(WyhashTest, EmptyString) {
|
||||
- const std::string s = "";
|
||||
- EXPECT_EQ(
|
||||
- absl::hash_internal::Wyhash(s.c_str(), s.length(), kCurrentSeed, kSalt),
|
||||
- 4808886099364463827);
|
||||
-}
|
||||
-
|
||||
-TEST(WyhashTest, Spaces) {
|
||||
- const std::string s = " ";
|
||||
- EXPECT_EQ(
|
||||
- absl::hash_internal::Wyhash(s.c_str(), s.length(), kCurrentSeed, kSalt),
|
||||
- 1686201463024549249);
|
||||
-}
|
||||
-
|
||||
-TEST(WyhashTest, RepeatingString) {
|
||||
- const std::string s = "aaaa";
|
||||
- EXPECT_EQ(
|
||||
- absl::hash_internal::Wyhash(s.c_str(), s.length(), kCurrentSeed, kSalt),
|
||||
- 6646112255271966632);
|
||||
-}
|
||||
-
|
||||
-TEST(WyhashTest, HexString) {
|
||||
- const std::string small = "\x01\x02\x03";
|
||||
- const std::string med = "\x01\x02\x03\x04";
|
||||
-
|
||||
- EXPECT_EQ(absl::hash_internal::Wyhash(small.c_str(), small.length(),
|
||||
- kCurrentSeed, kSalt),
|
||||
- 11989428023081740911ULL);
|
||||
- EXPECT_EQ(absl::hash_internal::Wyhash(med.c_str(), med.length(), kCurrentSeed,
|
||||
- kSalt),
|
||||
- 9765997711188871556ULL);
|
||||
-}
|
||||
-
|
||||
-TEST(WyhashTest, Words) {
|
||||
- const std::string s = "third_party|wyhash|64";
|
||||
- EXPECT_EQ(
|
||||
- absl::hash_internal::Wyhash(s.c_str(), s.length(), kCurrentSeed, kSalt),
|
||||
- 3702018632387611330);
|
||||
-}
|
||||
-
|
||||
-TEST(WyhashTest, LongString) {
|
||||
- const std::string s =
|
||||
- "AbCdEfGhIjKlMnOpQrStUvWxYz0123456789AbCdEfGhIjKlMnOpQrStUvWxYz"
|
||||
- "0123456789AbCdEfGhIjKlMnOpQrStUvWxYz0123456789AbCdEfGhIjKlMnOp"
|
||||
- "QrStUvWxYz0123456789AbCdEfGhIjKlMnOpQrStUvWxYz0123456789AbCdEf"
|
||||
- "GhIjKlMnOpQrStUvWxYz0123456789AbCdEfGhIjKlMnOpQrStUvWxYz012345"
|
||||
- "6789AbCdEfGhIjKlMnOpQrStUvWxYz0123456789";
|
||||
-
|
||||
- EXPECT_EQ(
|
||||
- absl::hash_internal::Wyhash(s.c_str(), s.length(), kCurrentSeed, kSalt),
|
||||
- 9245411362605796064ULL);
|
||||
-}
|
||||
-
|
||||
-TEST(WyhashTest, BigReference) {
|
||||
- struct ExpectedResult {
|
||||
+TEST(WyhashTest, VerifyGolden) {
|
||||
+ constexpr size_t kNumGoldenOutputs = 134;
|
||||
+ static struct {
|
||||
absl::string_view base64_data;
|
||||
uint64_t seed;
|
||||
- uint64_t hash;
|
||||
- } expected_results[] = {
|
||||
- {"", uint64_t{0xec42b7ab404b8acb}, uint64_t{0xe5a40d39ab796423}},
|
||||
- {"Zw==", uint64_t{0xeeee074043a3ee0f}, uint64_t{0xa6564b468248c683}},
|
||||
- {"xmk=", uint64_t{0x857902089c393de}, uint64_t{0xef192f401b116e1c}},
|
||||
- {"c1H/", uint64_t{0x993df040024ca3af}, uint64_t{0xbe8dc0c54617639d}},
|
||||
- {"SuwpzQ==", uint64_t{0xc4e4c2acea740e96}, uint64_t{0x93d7f665b5521c8e}},
|
||||
- {"uqvy++M=", uint64_t{0x6a214b3db872d0cf}, uint64_t{0x646d70bb42445f28}},
|
||||
- {"RnzCVPgb", uint64_t{0x44343db6a89dba4d}, uint64_t{0x96a7b1e3cc9bd426}},
|
||||
- {"6OeNdlouYw==", uint64_t{0x77b5d6d1ae1dd483},
|
||||
- uint64_t{0x76020289ab0790c4}},
|
||||
- {"M5/JmmYyDbc=", uint64_t{0x89ab8ecb44d221f1},
|
||||
- uint64_t{0x39f842e4133b9b44}},
|
||||
- {"MVijWiVdBRdY", uint64_t{0x60244b17577ca81b},
|
||||
- uint64_t{0x2b8d7047be4bcaab}},
|
||||
- {"6V7Uq7LNxpu0VA==", uint64_t{0x59a08dcee0717067},
|
||||
- uint64_t{0x99628abef6716a97}},
|
||||
- {"EQ6CdEEhPdyHcOk=", uint64_t{0xf5f20db3ade57396},
|
||||
- uint64_t{0x4432e02ba42b2740}},
|
||||
- {"PqFB4fxnPgF+l+rc", uint64_t{0xbf8dee0751ad3efb},
|
||||
- uint64_t{0x74d810efcad7918a}},
|
||||
- {"a5aPOFwq7LA7+zKvPA==", uint64_t{0x6b7a06b268d63e30},
|
||||
- uint64_t{0x88c84e986002507f}},
|
||||
- {"VOwY21wCGv5D+/qqOvs=", uint64_t{0xb8c37f0ae0f54c82},
|
||||
- uint64_t{0x4f99acf193cf39b9}},
|
||||
- {"KdHmBTx8lHXYvmGJ+Vy7", uint64_t{0x9fcbed0c38e50eef},
|
||||
- uint64_t{0xd90e7a3655891e37}},
|
||||
- {"qJkPlbHr8bMF7/cA6aE65Q==", uint64_t{0x2af4bade1d8e3a1d},
|
||||
- uint64_t{0x3bb378b1d4df8fcf}},
|
||||
- {"ygvL0EhHZL0fIx6oHHtkxRQ=", uint64_t{0x714e3aa912da2f2c},
|
||||
- uint64_t{0xf78e94045c052d47}},
|
||||
- {"c1rFXkt5YztwZCQRngncqtSs", uint64_t{0xf5ee75e3cbb82c1c},
|
||||
- uint64_t{0x26da0b2130da6b40}},
|
||||
- {"8hsQrzszzeNQSEcVXLtvIhm6mw==", uint64_t{0x620e7007321b93b9},
|
||||
- uint64_t{0x30b4d426af8c6986}},
|
||||
- {"ffUL4RocfyP4KfikGxO1yk7omDI=", uint64_t{0xc08528cac2e551fc},
|
||||
- uint64_t{0x5413b4aaf3baaeae}},
|
||||
- {"OOB5TT00vF9Od/rLbAWshiErqhpV", uint64_t{0x6a1debf9cc3ad39},
|
||||
- uint64_t{0x756ab265370a1597}},
|
||||
- {"or5wtXM7BFzTNpSzr+Lw5J5PMhVJ/Q==", uint64_t{0x7e0a3c88111fc226},
|
||||
- uint64_t{0xdaf5f4b7d09814fb}},
|
||||
- {"gk6pCHDUsoopVEiaCrzVDhioRKxb844=", uint64_t{0x1301fef15df39edb},
|
||||
- uint64_t{0x8f874ae37742b75e}},
|
||||
- {"TNctmwlC5QbEM6/No4R/La3UdkfeMhzs", uint64_t{0x64e181f3d5817ab},
|
||||
- uint64_t{0x8fecd03956121ce8}},
|
||||
- {"SsQw9iAjhWz7sgcE9OwLuSC6hsM+BfHs2Q==", uint64_t{0xafafc44961078ecb},
|
||||
- uint64_t{0x229c292ea7a08285}},
|
||||
- {"ZzO3mVCj4xTT2TT3XqDyEKj2BZQBvrS8RHg=", uint64_t{0x4f7bb45549250094},
|
||||
- uint64_t{0xbb4bf0692d14bae}},
|
||||
- {"+klp5iPQGtppan5MflEls0iEUzqU+zGZkDJX", uint64_t{0xa30061abaa2818c},
|
||||
- uint64_t{0x207b24ca3bdac1db}},
|
||||
- {"RO6bvOnlJc8I9eniXlNgqtKy0IX6VNg16NRmgg==", uint64_t{0xd902ee3e44a5705f},
|
||||
- uint64_t{0x64f6cd6745d3825b}},
|
||||
- {"ZJjZqId1ZXBaij9igClE3nyliU5XWdNRrayGlYA=", uint64_t{0x316d36da516f583},
|
||||
- uint64_t{0xa2b2e1656b58df1e}},
|
||||
- {"7BfkhfGMDGbxfMB8uyL85GbaYQtjr2K8g7RpLzr/", uint64_t{0x402d83f9f834f616},
|
||||
- uint64_t{0xd01d30d9ee7a148}},
|
||||
+ } cases[] = {
|
||||
+ {"", uint64_t{0xec42b7ab404b8acb}},
|
||||
+ {"ICAg", uint64_t{0}},
|
||||
+ {"YWFhYQ==", uint64_t{0}},
|
||||
+ {"AQID", uint64_t{0}},
|
||||
+ {"AQIDBA==", uint64_t{0}},
|
||||
+ {"dGhpcmRfcGFydHl8d3loYXNofDY0", uint64_t{0}},
|
||||
+ {"Zw==", uint64_t{0xeeee074043a3ee0f}},
|
||||
+ {"xmk=", uint64_t{0x857902089c393de}},
|
||||
+ {"c1H/", uint64_t{0x993df040024ca3af}},
|
||||
+ {"SuwpzQ==", uint64_t{0xc4e4c2acea740e96}},
|
||||
+ {"uqvy++M=", uint64_t{0x6a214b3db872d0cf}},
|
||||
+ {"RnzCVPgb", uint64_t{0x44343db6a89dba4d}},
|
||||
+ {"6OeNdlouYw==", uint64_t{0x77b5d6d1ae1dd483}},
|
||||
+ {"M5/JmmYyDbc=", uint64_t{0x89ab8ecb44d221f1}},
|
||||
+ {"MVijWiVdBRdY", uint64_t{0x60244b17577ca81b}},
|
||||
+ {"6V7Uq7LNxpu0VA==", uint64_t{0x59a08dcee0717067}},
|
||||
+ {"EQ6CdEEhPdyHcOk=", uint64_t{0xf5f20db3ade57396}},
|
||||
+ {"PqFB4fxnPgF+l+rc", uint64_t{0xbf8dee0751ad3efb}},
|
||||
+ {"a5aPOFwq7LA7+zKvPA==", uint64_t{0x6b7a06b268d63e30}},
|
||||
+ {"VOwY21wCGv5D+/qqOvs=", uint64_t{0xb8c37f0ae0f54c82}},
|
||||
+ {"KdHmBTx8lHXYvmGJ+Vy7", uint64_t{0x9fcbed0c38e50eef}},
|
||||
+ {"qJkPlbHr8bMF7/cA6aE65Q==", uint64_t{0x2af4bade1d8e3a1d}},
|
||||
+ {"ygvL0EhHZL0fIx6oHHtkxRQ=", uint64_t{0x714e3aa912da2f2c}},
|
||||
+ {"c1rFXkt5YztwZCQRngncqtSs", uint64_t{0xf5ee75e3cbb82c1c}},
|
||||
+ {"8hsQrzszzeNQSEcVXLtvIhm6mw==", uint64_t{0x620e7007321b93b9}},
|
||||
+ {"ffUL4RocfyP4KfikGxO1yk7omDI=", uint64_t{0xc08528cac2e551fc}},
|
||||
+ {"OOB5TT00vF9Od/rLbAWshiErqhpV", uint64_t{0x6a1debf9cc3ad39}},
|
||||
+ {"or5wtXM7BFzTNpSzr+Lw5J5PMhVJ/Q==", uint64_t{0x7e0a3c88111fc226}},
|
||||
+ {"gk6pCHDUsoopVEiaCrzVDhioRKxb844=", uint64_t{0x1301fef15df39edb}},
|
||||
+ {"TNctmwlC5QbEM6/No4R/La3UdkfeMhzs", uint64_t{0x64e181f3d5817ab}},
|
||||
+ {"SsQw9iAjhWz7sgcE9OwLuSC6hsM+BfHs2Q==", uint64_t{0xafafc44961078ecb}},
|
||||
+ {"ZzO3mVCj4xTT2TT3XqDyEKj2BZQBvrS8RHg=", uint64_t{0x4f7bb45549250094}},
|
||||
+ {"+klp5iPQGtppan5MflEls0iEUzqU+zGZkDJX", uint64_t{0xa30061abaa2818c}},
|
||||
+ {"RO6bvOnlJc8I9eniXlNgqtKy0IX6VNg16NRmgg==",
|
||||
+ uint64_t{0xd902ee3e44a5705f}},
|
||||
+ {"ZJjZqId1ZXBaij9igClE3nyliU5XWdNRrayGlYA=", uint64_t{0x316d36da516f583}},
|
||||
+ {"7BfkhfGMDGbxfMB8uyL85GbaYQtjr2K8g7RpLzr/",
|
||||
+ uint64_t{0x402d83f9f834f616}},
|
||||
{"rycWk6wHH7htETQtje9PidS2YzXBx+Qkg2fY7ZYS7A==",
|
||||
- uint64_t{0x9c604164c016b72c}, uint64_t{0x1cb4cd00ab804e3b}},
|
||||
+ uint64_t{0x9c604164c016b72c}},
|
||||
{"RTkC2OUK+J13CdGllsH0H5WqgspsSa6QzRZouqx6pvI=",
|
||||
- uint64_t{0x3f4507e01f9e73ba}, uint64_t{0x4697f2637fd90999}},
|
||||
+ uint64_t{0x3f4507e01f9e73ba}},
|
||||
{"tKjKmbLCNyrLCM9hycOAXm4DKNpM12oZ7dLTmUx5iwAi",
|
||||
- uint64_t{0xc3fe0d5be8d2c7c7}, uint64_t{0x8383a756b5688c07}},
|
||||
+ uint64_t{0xc3fe0d5be8d2c7c7}},
|
||||
{"VprUGNH+5NnNRaORxgH/ySrZFQFDL+4VAodhfBNinmn8cg==",
|
||||
- uint64_t{0x531858a40bfa7ea1}, uint64_t{0x695c29cb3696a975}},
|
||||
+ uint64_t{0x531858a40bfa7ea1}},
|
||||
{"gc1xZaY+q0nPcUvOOnWnT3bqfmT/geth/f7Dm2e/DemMfk4=",
|
||||
- uint64_t{0x86689478a7a7e8fa}, uint64_t{0xda2e5a5a5e971521}},
|
||||
+ uint64_t{0x86689478a7a7e8fa}},
|
||||
{"Mr35fIxqx1ukPAL0su1yFuzzAU3wABCLZ8+ZUFsXn47UmAph",
|
||||
- uint64_t{0x4ec948b8e7f27288}, uint64_t{0x7935d4befa056b2b}},
|
||||
+ uint64_t{0x4ec948b8e7f27288}},
|
||||
{"A9G8pw2+m7+rDtWYAdbl8tb2fT7FFo4hLi2vAsa5Y8mKH3CX3g==",
|
||||
- uint64_t{0xce46c7213c10032}, uint64_t{0x38dd541ca95420fe}},
|
||||
+ uint64_t{0xce46c7213c10032}},
|
||||
{"DFaJGishGwEHDdj9ixbCoaTjz9KS0phLNWHVVdFsM93CvPft3hM=",
|
||||
- uint64_t{0xf63e96ee6f32a8b6}, uint64_t{0xcc06c7a4963f967f}},
|
||||
+ uint64_t{0xf63e96ee6f32a8b6}},
|
||||
{"7+Ugx+Kr3aRNgYgcUxru62YkTDt5Hqis+2po81hGBkcrJg4N0uuy",
|
||||
- uint64_t{0x1cfe85e65fc5225}, uint64_t{0xbf0f6f66e232fb20}},
|
||||
+ uint64_t{0x1cfe85e65fc5225}},
|
||||
{"H2w6O8BUKqu6Tvj2xxaecxEI2wRgIgqnTTG1WwOgDSINR13Nm4d4Vg==",
|
||||
- uint64_t{0x45c474f1cee1d2e8}, uint64_t{0xf7efb32d373fe71a}},
|
||||
+ uint64_t{0x45c474f1cee1d2e8}},
|
||||
{"1XBMnIbqD5jy65xTDaf6WtiwtdtQwv1dCVoqpeKj+7cTR1SaMWMyI04=",
|
||||
- uint64_t{0x6e024e14015f329c}, uint64_t{0xe2e64634b1c12660}},
|
||||
+ uint64_t{0x6e024e14015f329c}},
|
||||
{"znZbdXG2TSFrKHEuJc83gPncYpzXGbAebUpP0XxzH0rpe8BaMQ17nDbt",
|
||||
- uint64_t{0x760c40502103ae1c}, uint64_t{0x285b8fd1638e306d}},
|
||||
+ uint64_t{0x760c40502103ae1c}},
|
||||
{"ylu8Atu13j1StlcC1MRMJJXIl7USgDDS22HgVv0WQ8hx/8pNtaiKB17hCQ==",
|
||||
- uint64_t{0x17fd05c3c560c320}, uint64_t{0x658e8a4e3b714d6c}},
|
||||
+ uint64_t{0x17fd05c3c560c320}},
|
||||
{"M6ZVVzsd7vAvbiACSYHioH/440dp4xG2mLlBnxgiqEvI/aIEGpD0Sf4VS0g=",
|
||||
- uint64_t{0x8b34200a6f8e90d9}, uint64_t{0xf391fb968e0eb398}},
|
||||
+ uint64_t{0x8b34200a6f8e90d9}},
|
||||
{"li3oFSXLXI+ubUVGJ4blP6mNinGKLHWkvGruun85AhVn6iuMtocbZPVhqxzn",
|
||||
- uint64_t{0x6be89e50818bdf69}, uint64_t{0x744a9ea0cc144bf2}},
|
||||
+ uint64_t{0x6be89e50818bdf69}},
|
||||
{"kFuQHuUCqBF3Tc3hO4dgdIp223ShaCoog48d5Do5zMqUXOh5XpGK1t5XtxnfGA==",
|
||||
- uint64_t{0xfb389773315b47d8}, uint64_t{0x12636f2be11012f1}},
|
||||
+ uint64_t{0xfb389773315b47d8}},
|
||||
{"jWmOad0v0QhXVJd1OdGuBZtDYYS8wBVHlvOeTQx9ZZnm8wLEItPMeihj72E0nWY=",
|
||||
- uint64_t{0x4f2512a23f61efee}, uint64_t{0x29c57de825948f80}},
|
||||
+ uint64_t{0x4f2512a23f61efee}},
|
||||
{"z+DHU52HaOQdW4JrZwDQAebEA6rm13Zg/9lPYA3txt3NjTBqFZlOMvTRnVzRbl23",
|
||||
- uint64_t{0x59ccd92fc16c6fda}, uint64_t{0x58c6f99ab0d1c021}},
|
||||
+ uint64_t{0x59ccd92fc16c6fda}},
|
||||
{"MmBiGDfYeTayyJa/tVycg+rN7f9mPDFaDc+23j0TlW9094er0ADigsl4QX7V3gG/qw==",
|
||||
- uint64_t{0x25c5a7f5bd330919}, uint64_t{0x13e7b5a7b82fe3bb}},
|
||||
+ uint64_t{0x25c5a7f5bd330919}},
|
||||
{"774RK+9rOL4iFvs1q2qpo/JVc/I39buvNjqEFDtDvyoB0FXxPI2vXqOrk08VPfIHkmU=",
|
||||
- uint64_t{0x51df4174d34c97d7}, uint64_t{0x10fbc87901e02b63}},
|
||||
+ uint64_t{0x51df4174d34c97d7}},
|
||||
{"+slatXiQ7/2lK0BkVUI1qzNxOOLP3I1iK6OfHaoxgqT63FpzbElwEXSwdsryq3UlHK0I",
|
||||
- uint64_t{0x80ce6d76f89cb57}, uint64_t{0xa24c9184901b748b}},
|
||||
+ uint64_t{0x80ce6d76f89cb57}},
|
||||
{"64mVTbQ47dHjHlOHGS/hjJwr/"
|
||||
"K2frCNpn87exOqMzNUVYiPKmhCbfS7vBUce5tO6Ec9osQ==",
|
||||
- uint64_t{0x20961c911965f684}, uint64_t{0xcac4fd4c5080e581}},
|
||||
+ uint64_t{0x20961c911965f684}},
|
||||
{"fIsaG1r530SFrBqaDj1kqE0AJnvvK8MNEZbII2Yw1OK77v0V59xabIh0B5axaz/"
|
||||
"+a2V5WpA=",
|
||||
- uint64_t{0x4e5b926ec83868e7}, uint64_t{0xc38bdb7483ba68e1}},
|
||||
+ uint64_t{0x4e5b926ec83868e7}},
|
||||
{"PGih0zDEOWCYGxuHGDFu9Ivbff/"
|
||||
"iE7BNUq65tycTR2R76TerrXALRosnzaNYO5fjFhTi+CiS",
|
||||
- uint64_t{0x3927b30b922eecef}, uint64_t{0xdb2a8069b2ceaffa}},
|
||||
+ uint64_t{0x3927b30b922eecef}},
|
||||
{"RnpA/"
|
||||
"zJnEnnLjmICORByRVb9bCOgxF44p3VMiW10G7PvW7IhwsWajlP9kIwNA9FjAD2GoQHk2Q="
|
||||
"=",
|
||||
- uint64_t{0xbd0291284a49b61c}, uint64_t{0xdf9fe91d0d1c7887}},
|
||||
+ uint64_t{0xbd0291284a49b61c}},
|
||||
{"qFklMceaTHqJpy2qavJE+EVBiNFOi6OxjOA3LeIcBop1K7w8xQi3TrDk+"
|
||||
"BrWPRIbfprszSaPfrI=",
|
||||
- uint64_t{0x73a77c575bcc956}, uint64_t{0xe83f49e96e2e6a08}},
|
||||
+ uint64_t{0x73a77c575bcc956}},
|
||||
{"cLbfUtLl3EcQmITWoTskUR8da/VafRDYF/ylPYwk7/"
|
||||
"zazk6ssyrzxMN3mmSyvrXR2yDGNZ3WDrTT",
|
||||
- uint64_t{0x766a0e2ade6d09a6}, uint64_t{0xc69e61b62ca2b62}},
|
||||
+ uint64_t{0x766a0e2ade6d09a6}},
|
||||
{"s/"
|
||||
"Jf1+"
|
||||
"FbsbCpXWPTUSeWyMH6e4CvTFvPE5Fs6Z8hvFITGyr0dtukHzkI84oviVLxhM1xMxrMAy1db"
|
||||
"w==",
|
||||
- uint64_t{0x2599f4f905115869}, uint64_t{0xb4a4f3f85f8298fe}},
|
||||
+ uint64_t{0x2599f4f905115869}},
|
||||
{"FvyQ00+j7nmYZVQ8hI1Edxd0AWplhTfWuFGiu34AK5X8u2hLX1bE97sZM0CmeLe+"
|
||||
"7LgoUT1fJ/axybE=",
|
||||
- uint64_t{0xd8256e5444d21e53}, uint64_t{0x167a1b39e1e95f41}},
|
||||
+ uint64_t{0xd8256e5444d21e53}},
|
||||
{"L8ncxMaYLBH3g9buPu8hfpWZNlOF7nvWLNv9IozH07uQsIBWSKxoPy8+"
|
||||
"LW4tTuzC6CIWbRGRRD1sQV/4",
|
||||
- uint64_t{0xf664a91333fb8dfd}, uint64_t{0xf8a2a5649855ee41}},
|
||||
+ uint64_t{0xf664a91333fb8dfd}},
|
||||
{"CDK0meI07yrgV2kQlZZ+"
|
||||
"wuVqhc2NmzqeLH7bmcA6kchsRWFPeVF5Wqjjaj556ABeUoUr3yBmfU3kWOakkg==",
|
||||
- uint64_t{0x9625b859be372cd1}, uint64_t{0x27992565b595c498}},
|
||||
+ uint64_t{0x9625b859be372cd1}},
|
||||
{"d23/vc5ONh/"
|
||||
"HkMiq+gYk4gaCNYyuFKwUkvn46t+dfVcKfBTYykr4kdvAPNXGYLjM4u1YkAEFpJP+"
|
||||
"nX7eOvs=",
|
||||
- uint64_t{0x7b99940782e29898}, uint64_t{0x3e08cca5b71f9346}},
|
||||
+ uint64_t{0x7b99940782e29898}},
|
||||
{"NUR3SRxBkxTSbtQORJpu/GdR6b/h6sSGfsMj/KFd99ahbh+9r7LSgSGmkGVB/"
|
||||
"mGoT0pnMTQst7Lv2q6QN6Vm",
|
||||
- uint64_t{0x4fe12fa5383b51a8}, uint64_t{0xad406b10c770a6d2}},
|
||||
+ uint64_t{0x4fe12fa5383b51a8}},
|
||||
{"2BOFlcI3Z0RYDtS9T9Ie9yJoXlOdigpPeeT+CRujb/"
|
||||
"O39Ih5LPC9hP6RQk1kYESGyaLZZi3jtabHs7DiVx/VDg==",
|
||||
- uint64_t{0xe2ccb09ac0f5b4b6}, uint64_t{0xd1713ce6e552bcf2}},
|
||||
+ uint64_t{0xe2ccb09ac0f5b4b6}},
|
||||
{"FF2HQE1FxEvWBpg6Z9zAMH+Zlqx8S1JD/"
|
||||
"wIlViL6ZDZY63alMDrxB0GJQahmAtjlm26RGLnjW7jmgQ4Ie3I+014=",
|
||||
- uint64_t{0x7d0a37adbd7b753b}, uint64_t{0x753b287194c73ad3}},
|
||||
+ uint64_t{0x7d0a37adbd7b753b}},
|
||||
{"tHmO7mqVL/PX11nZrz50Hc+M17Poj5lpnqHkEN+4bpMx/"
|
||||
"YGbkrGOaYjoQjgmt1X2QyypK7xClFrjeWrCMdlVYtbW",
|
||||
- uint64_t{0xd3ae96ef9f7185f2}, uint64_t{0x5ae41a95f600af1c}},
|
||||
+ uint64_t{0xd3ae96ef9f7185f2}},
|
||||
{"/WiHi9IQcxRImsudkA/KOTqGe8/"
|
||||
"gXkhKIHkjddv5S9hi02M049dIK3EUyAEjkjpdGLUs+BN0QzPtZqjIYPOgwsYE9g==",
|
||||
- uint64_t{0x4fb88ea63f79a0d8}, uint64_t{0x4a61163b86a8bb4c}},
|
||||
+ uint64_t{0x4fb88ea63f79a0d8}},
|
||||
{"qds+1ExSnU11L4fTSDz/QE90g4Jh6ioqSh3KDOTOAo2pQGL1k/"
|
||||
"9CCC7J23YF27dUTzrWsCQA2m4epXoCc3yPHb3xElA=",
|
||||
- uint64_t{0xed564e259bb5ebe9}, uint64_t{0x42eeaa79e760c7e4}},
|
||||
+ uint64_t{0xed564e259bb5ebe9}},
|
||||
{"8FVYHx40lSQPTHheh08Oq0/"
|
||||
"pGm2OlG8BEf8ezvAxHuGGdgCkqpXIueJBF2mQJhTfDy5NncO8ntS7vaKs7sCNdDaNGOEi",
|
||||
- uint64_t{0x3e3256b60c428000}, uint64_t{0x698df622ef465b0a}},
|
||||
+ uint64_t{0x3e3256b60c428000}},
|
||||
{"4ZoEIrJtstiCkeew3oRzmyJHVt/pAs2pj0HgHFrBPztbQ10NsQ/"
|
||||
"lM6DM439QVxpznnBSiHMgMQJhER+70l72LqFTO1JiIQ==",
|
||||
- uint64_t{0xfb05bad59ec8705}, uint64_t{0x157583111e1a6026}},
|
||||
+ uint64_t{0xfb05bad59ec8705}},
|
||||
{"hQPtaYI+wJyxXgwD5n8jGIKFKaFA/"
|
||||
"P83KqCKZfPthnjwdOFysqEOYwAaZuaaiv4cDyi9TyS8hk5cEbNP/jrI7q6pYGBLbsM=",
|
||||
- uint64_t{0xafdc251dbf97b5f8}, uint64_t{0xaa1388f078e793e0}},
|
||||
+ uint64_t{0xafdc251dbf97b5f8}},
|
||||
{"S4gpMSKzMD7CWPsSfLeYyhSpfWOntyuVZdX1xSBjiGvsspwOZcxNKCRIOqAA0moUfOh3I5+"
|
||||
"juQV4rsqYElMD/gWfDGpsWZKQ",
|
||||
- uint64_t{0x10ec9c92ddb5dcbc}, uint64_t{0xf10d68d0f3309360}},
|
||||
+ uint64_t{0x10ec9c92ddb5dcbc}},
|
||||
{"oswxop+"
|
||||
"bthuDLT4j0PcoSKby4LhF47ZKg8K17xxHf74UsGCzTBbOz0MM8hQEGlyqDT1iUiAYnaPaUp"
|
||||
"L2mRK0rcIUYA4qLt5uOw==",
|
||||
- uint64_t{0x9a767d5822c7dac4}, uint64_t{0x2af056184457a3de}},
|
||||
+ uint64_t{0x9a767d5822c7dac4}},
|
||||
{"0II/"
|
||||
"697p+"
|
||||
"BtLSjxj5989OXI004TogEb94VUnDzOVSgMXie72cuYRvTFNIBgtXlKfkiUjeqVpd4a+"
|
||||
"n5bxNOD1TGrjQtzKU5r7obo=",
|
||||
- uint64_t{0xee46254080d6e2db}, uint64_t{0x6d0058e1590b2489}},
|
||||
+ uint64_t{0xee46254080d6e2db}},
|
||||
{"E84YZW2qipAlMPmctrg7TKlwLZ68l4L+c0xRDUfyyFrA4MAti0q9sHq3TDFviH0Y+"
|
||||
"Kq3tEE5srWFA8LM9oomtmvm5PYxoaarWPLc",
|
||||
- uint64_t{0xbbb669588d8bf398}, uint64_t{0x638f287f68817f12}},
|
||||
+ uint64_t{0xbbb669588d8bf398}},
|
||||
{"x3pa4HIElyZG0Nj7Vdy9IdJIR4izLmypXw5PCmZB5y68QQ4uRaVVi3UthsoJROvbjDJkP2D"
|
||||
"Q6L/eN8pFeLFzNPKBYzcmuMOb5Ull7w==",
|
||||
- uint64_t{0xdc2afaa529beef44}, uint64_t{0xc46b71fecefd5467}},
|
||||
+ uint64_t{0xdc2afaa529beef44}},
|
||||
{"jVDKGYIuWOP/"
|
||||
"QKLdd2wi8B2VJA8Wh0c8PwrXJVM8FOGM3voPDVPyDJOU6QsBDPseoR8uuKd19OZ/"
|
||||
"zAvSCB+zlf6upAsBlheUKgCfKww=",
|
||||
- uint64_t{0xf1f67391d45013a8}, uint64_t{0x2c8e94679d964e0a}},
|
||||
+ uint64_t{0xf1f67391d45013a8}},
|
||||
{"mkquunhmYe1aR2wmUz4vcvLEcKBoe6H+kjUok9VUn2+eTSkWs4oDDtJvNCWtY5efJwg/"
|
||||
"j4PgjRYWtqnrCkhaqJaEvkkOwVfgMIwF3e+d",
|
||||
- uint64_t{0x16fce2b8c65a3429}, uint64_t{0x8612b797ce22503a}},
|
||||
+ uint64_t{0x16fce2b8c65a3429}},
|
||||
{"fRelvKYonTQ+s+rnnvQw+JzGfFoPixtna0vzcSjiDqX5s2Kg2//"
|
||||
"UGrK+AVCyMUhO98WoB1DDbrsOYSw2QzrcPe0+3ck9sePvb+Q/IRaHbw==",
|
||||
- uint64_t{0xf4b096699f49fe67}, uint64_t{0x59f929babfba7170}},
|
||||
+ uint64_t{0xf4b096699f49fe67}},
|
||||
{"DUwXFJzagljo44QeJ7/"
|
||||
"6ZKw4QXV18lhkYT2jglMr8WB3CHUU4vdsytvw6AKv42ZcG6fRkZkq9fpnmXy6xG0aO3WPT1"
|
||||
"eHuyFirAlkW+zKtwg=",
|
||||
- uint64_t{0xca584c4bc8198682}, uint64_t{0x9527556923fb49a0}},
|
||||
+ uint64_t{0xca584c4bc8198682}},
|
||||
{"cYmZCrOOBBongNTr7e4nYn52uQUy2mfe48s50JXx2AZ6cRAt/"
|
||||
"xRHJ5QbEoEJOeOHsJyM4nbzwFm++SlT6gFZZHJpkXJ92JkR86uS/eV1hJUR",
|
||||
- uint64_t{0xed269fc3818b6aad}, uint64_t{0x1039ab644f5e150b}},
|
||||
+ uint64_t{0xed269fc3818b6aad}},
|
||||
{"EXeHBDfhwzAKFhsMcH9+2RHwV+mJaN01+9oacF6vgm8mCXRd6jeN9U2oAb0of5c5cO4i+"
|
||||
"Vb/LlHZSMI490SnHU0bejhSCC2gsC5d2K30ER3iNA==",
|
||||
- uint64_t{0x33f253cbb8fe66a8}, uint64_t{0x7816c83f3aa05e6d}},
|
||||
+ uint64_t{0x33f253cbb8fe66a8}},
|
||||
{"FzkzRYoNjkxFhZDso94IHRZaJUP61nFYrh5MwDwv9FNoJ5jyNCY/"
|
||||
"eazPZk+tbmzDyJIGw2h3GxaWZ9bSlsol/vK98SbkMKCQ/wbfrXRLcDzdd/8=",
|
||||
- uint64_t{0xd0b76b2c1523d99c}, uint64_t{0xf51d2f564518c619}},
|
||||
+ uint64_t{0xd0b76b2c1523d99c}},
|
||||
{"Re4aXISCMlYY/XsX7zkIFR04ta03u4zkL9dVbLXMa/q6hlY/CImVIIYRN3VKP4pnd0AUr/"
|
||||
"ugkyt36JcstAInb4h9rpAGQ7GMVOgBniiMBZ/MGU7H",
|
||||
- uint64_t{0xfd28f0811a2a237f}, uint64_t{0x67d494cff03ac004}},
|
||||
+ uint64_t{0xfd28f0811a2a237f}},
|
||||
{"ueLyMcqJXX+MhO4UApylCN9WlTQ+"
|
||||
"ltJmItgG7vFUtqs2qNwBMjmAvr5u0sAKd8jpzV0dDPTwchbIeAW5zbtkA2NABJV6hFM48ib"
|
||||
"4/J3A5mseA3cS8w==",
|
||||
- uint64_t{0x6261fb136482e84}, uint64_t{0x2802d636ced1cfbb}},
|
||||
+ uint64_t{0x6261fb136482e84}},
|
||||
{"6Si7Yi11L+jZMkwaN+GUuzXMrlvEqviEkGOilNq0h8TdQyYKuFXzkYc/"
|
||||
"q74gP3pVCyiwz9KpVGMM9vfnq36riMHRknkmhQutxLZs5fbmOgEO69HglCU=",
|
||||
- uint64_t{0x458efc750bca7c3a}, uint64_t{0xf64e20bad771cb12}},
|
||||
+ uint64_t{0x458efc750bca7c3a}},
|
||||
{"Q6AbOofGuTJOegPh9Clm/"
|
||||
"9crtUMQqylKrTc1fhfJo1tqvpXxhU4k08kntL1RG7woRnFrVh2UoMrL1kjin+s9CanT+"
|
||||
"y4hHwLqRranl9FjvxfVKm3yvg68",
|
||||
- uint64_t{0xa7e69ff84e5e7c27}, uint64_t{0xb9a6cf84a83e15e}},
|
||||
+ uint64_t{0xa7e69ff84e5e7c27}},
|
||||
{"ieQEbIPvqY2YfIjHnqfJiO1/MIVRk0RoaG/WWi3kFrfIGiNLCczYoklgaecHMm/"
|
||||
"1sZ96AjO+a5stQfZbJQwS7Sc1ODABEdJKcTsxeW2hbh9A6CFzpowP1A==",
|
||||
- uint64_t{0x3c59bfd0c29efe9e}, uint64_t{0x8da6630319609301}},
|
||||
+ uint64_t{0x3c59bfd0c29efe9e}},
|
||||
{"zQUv8hFB3zh2GGl3KTvCmnfzE+"
|
||||
"SUgQPVaSVIELFX5H9cE3FuVFGmymkPQZJLAyzC90Cmi8GqYCvPqTuAAB//"
|
||||
"XTJxy4bCcVArgZG9zJXpjowpNBfr3ngWrSE=",
|
||||
- uint64_t{0x10befacc6afd298d}, uint64_t{0x40946a86e2a996f3}},
|
||||
+ uint64_t{0x10befacc6afd298d}},
|
||||
{"US4hcC1+op5JKGC7eIs8CUgInjKWKlvKQkapulxW262E/"
|
||||
"B2ye79QxOexf188u2mFwwe3WTISJHRZzS61IwljqAWAWoBAqkUnW8SHmIDwHUP31J0p5sGd"
|
||||
"P47L",
|
||||
- uint64_t{0x41d5320b0a38efa7}, uint64_t{0xcab7f5997953fa76}},
|
||||
+ uint64_t{0x41d5320b0a38efa7}},
|
||||
{"9bHUWFna2LNaGF6fQLlkx1Hkt24nrkLE2CmFdWgTQV3FFbUe747SSqYw6ebpTa07MWSpWRP"
|
||||
"sHesVo2B9tqHbe7eQmqYebPDFnNqrhSdZwFm9arLQVs+7a3Ic6A==",
|
||||
- uint64_t{0x58db1c7450fe17f3}, uint64_t{0x39129ca0e04fc465}},
|
||||
+ uint64_t{0x58db1c7450fe17f3}},
|
||||
{"Kb3DpHRUPhtyqgs3RuXjzA08jGb59hjKTOeFt1qhoINfYyfTt2buKhD6YVffRCPsgK9SeqZ"
|
||||
"qRPJSyaqsa0ovyq1WnWW8jI/NhvAkZTVHUrX2pC+cD3OPYT05Dag=",
|
||||
- uint64_t{0x6098c055a335b7a6}, uint64_t{0x5238221fd685e1b8}},
|
||||
+ uint64_t{0x6098c055a335b7a6}},
|
||||
{"gzxyMJIPlU+bJBwhFUCHSofZ/"
|
||||
"319LxqMoqnt3+L6h2U2+ZXJCSsYpE80xmR0Ta77Jq54o92SMH87HV8dGOaCTuAYF+"
|
||||
"lDL42SY1P316Cl0sZTS2ow3ZqwGbcPNs/1",
|
||||
- uint64_t{0x1bbacec67845a801}, uint64_t{0x175130c407dbcaab}},
|
||||
+ uint64_t{0x1bbacec67845a801}},
|
||||
{"uR7V0TW+FGVMpsifnaBAQ3IGlr1wx5sKd7TChuqRe6OvUXTlD4hKWy8S+"
|
||||
"8yyOw8lQabism19vOQxfmocEOW/"
|
||||
"vzY0pEa87qHrAZy4s9fH2Bltu8vaOIe+agYohhYORQ==",
|
||||
- uint64_t{0xc419cfc7442190}, uint64_t{0x2f20e7536c0b0df}},
|
||||
+ uint64_t{0xc419cfc7442190}},
|
||||
{"1UR5eoo2aCwhacjZHaCh9bkOsITp6QunUxHQ2SfeHv0imHetzt/"
|
||||
"Z70mhyWZBalv6eAx+YfWKCUib2SHDtz/"
|
||||
"A2dc3hqUWX5VfAV7FQsghPUAtu6IiRatq4YSLpDvKZBQ=",
|
||||
- uint64_t{0xc95e510d94ba270c}, uint64_t{0x2742cb488a04ad56}},
|
||||
+ uint64_t{0xc95e510d94ba270c}},
|
||||
{"opubR7H63BH7OtY+Avd7QyQ25UZ8kLBdFDsBTwZlY6gA/"
|
||||
"u+x+"
|
||||
"czC9AaZMgmQrUy15DH7YMGsvdXnviTtI4eVI4aF1H9Rl3NXMKZgwFOsdTfdcZeeHVRzBBKX"
|
||||
"8jUfh1il",
|
||||
- uint64_t{0xff1ae05c98089c3f}, uint64_t{0xd6afb593879ff93b}},
|
||||
+ uint64_t{0xff1ae05c98089c3f}},
|
||||
{"DC0kXcSXtfQ9FbSRwirIn5tgPri0sbzHSa78aDZVDUKCMaBGyFU6BmrulywYX8yzvwprdLs"
|
||||
"oOwTWN2wMjHlPDqrvVHNEjnmufRDblW+nSS+xtKNs3N5xsxXdv6JXDrAB/Q==",
|
||||
- uint64_t{0x90c02b8dceced493}, uint64_t{0xf50ad64caac0ca7f}},
|
||||
+ uint64_t{0x90c02b8dceced493}},
|
||||
{"BXRBk+3wEP3Lpm1y75wjoz+PgB0AMzLe8tQ1AYU2/"
|
||||
"oqrQB2YMC6W+9QDbcOfkGbeH+b7IBkt/"
|
||||
"gwCMw2HaQsRFEsurXtcQ3YwRuPz5XNaw5NAvrNa67Fm7eRzdE1+hWLKtA8=",
|
||||
- uint64_t{0x9f8a76697ab1aa36}, uint64_t{0x2ade95c4261364ae}},
|
||||
+ uint64_t{0x9f8a76697ab1aa36}},
|
||||
{"RRBSvEGYnzR9E45Aps/+WSnpCo/X7gJLO4DRnUqFrJCV/kzWlusLE/"
|
||||
"6ZU6RoUf2ROwcgEvUiXTGjLs7ts3t9SXnJHxC1KiOzxHdYLMhVvgNd3hVSAXODpKFSkVXND"
|
||||
"55G2L1W",
|
||||
- uint64_t{0x6ba1bf3d811a531d}, uint64_t{0x5c4f3299faacd07a}},
|
||||
+ uint64_t{0x6ba1bf3d811a531d}},
|
||||
{"jeh6Qazxmdi57pa9S3XSnnZFIRrnc6s8QLrah5OX3SB/V2ErSPoEAumavzQPkdKF1/"
|
||||
"SfvmdL+qgF1C+Yawy562QaFqwVGq7+tW0yxP8FStb56ZRgNI4IOmI30s1Ei7iops9Uuw==",
|
||||
- uint64_t{0x6a418974109c67b4}, uint64_t{0xfffe3bff0ae5e9bc}},
|
||||
+ uint64_t{0x6a418974109c67b4}},
|
||||
{"6QO5nnDrY2/"
|
||||
"wrUXpltlKy2dSBcmK15fOY092CR7KxAjNfaY+"
|
||||
"aAmtWbbzQk3MjBg03x39afSUN1fkrWACdyQKRaGxgwq6MGNxI6W+8DLWJBHzIXrntrE/"
|
||||
"ml6fnNXEpxplWJ1vEs4=",
|
||||
- uint64_t{0x8472f1c2b3d230a3}, uint64_t{0x1db785c0005166e4}},
|
||||
+ uint64_t{0x8472f1c2b3d230a3}},
|
||||
{"0oPxeEHhqhcFuwonNfLd5jF3RNATGZS6NPoS0WklnzyokbTqcl4BeBkMn07+fDQv83j/"
|
||||
"BpGUwcWO05f3+DYzocfnizpFjLJemFGsls3gxcBYxcbqWYev51tG3lN9EvRE+X9+Pwww",
|
||||
- uint64_t{0x5e06068f884e73a7}, uint64_t{0xea000d962ad18418}},
|
||||
+ uint64_t{0x5e06068f884e73a7}},
|
||||
{"naSBSjtOKgAOg8XVbR5cHAW3Y+QL4Pb/JO9/"
|
||||
"oy6L08wvVRZqo0BrssMwhzBP401Um7A4ppAupbQeJFdMrysY34AuSSNvtNUy5VxjNECwiNt"
|
||||
"gwYHw7yakDUv8WvonctmnoSPKENegQg==",
|
||||
- uint64_t{0x55290b1a8f170f59}, uint64_t{0xe42aef38359362d9}},
|
||||
+ uint64_t{0x55290b1a8f170f59}},
|
||||
{"vPyl8DxVeRe1OpilKb9KNwpGkQRtA94UpAHetNh+"
|
||||
"95V7nIW38v7PpzhnTWIml5kw3So1Si0TXtIUPIbsu32BNhoH7QwFvLM+"
|
||||
"JACgSpc5e3RjsL6Qwxxi11npwxRmRUqATDeMUfRAjxg=",
|
||||
- uint64_t{0x5501cfd83dfe706a}, uint64_t{0xc8e95657348a3891}},
|
||||
+ uint64_t{0x5501cfd83dfe706a}},
|
||||
{"QC9i2GjdTMuNC1xQJ74ngKfrlA4w3o58FhvNCltdIpuMhHP1YsDA78scQPLbZ3OCUgeQguY"
|
||||
"f/vw6zAaVKSgwtaykqg5ka/4vhz4hYqWU5ficdXqClHl+zkWEY26slCNYOM5nnDlly8Cj",
|
||||
- uint64_t{0xe43ed13d13a66990}, uint64_t{0xc162eca864f238c6}},
|
||||
+ uint64_t{0xe43ed13d13a66990}},
|
||||
{"7CNIgQhAHX27nxI0HeB5oUTnTdgKpRDYDKwRcXfSFGP1XeT9nQF6WKCMjL1tBV6x7KuJ91G"
|
||||
"Zz11F4c+8s+MfqEAEpd4FHzamrMNjGcjCyrVtU6y+7HscMVzr7Q/"
|
||||
"ODLcPEFztFnwjvCjmHw==",
|
||||
- uint64_t{0xdf43bc375cf5283f}, uint64_t{0xbe1fb373e20579ad}},
|
||||
+ uint64_t{0xdf43bc375cf5283f}},
|
||||
{"Qa/hC2RPXhANSospe+gUaPfjdK/yhQvfm4cCV6/pdvCYWPv8p1kMtKOX3h5/"
|
||||
"8oZ31fsmx4Axphu5qXJokuhZKkBUJueuMpxRyXpwSWz2wELx5glxF7CM0Fn+"
|
||||
"OevnkhUn5jsPlG2r5jYlVn8=",
|
||||
- uint64_t{0x8112b806d288d7b5}, uint64_t{0x628a1d4f40aa6ffd}},
|
||||
+ uint64_t{0x8112b806d288d7b5}},
|
||||
{"kUw/0z4l3a89jTwN5jpG0SHY5km/"
|
||||
"IVhTjgM5xCiPRLncg40aqWrJ5vcF891AOq5hEpSq0bUCJUMFXgct7kvnys905HjerV7Vs1G"
|
||||
"y84tgVJ70/2+pAZTsB/PzNOE/G6sOj4+GbTzkQu819OLB",
|
||||
- uint64_t{0xd52a18abb001cb46}, uint64_t{0xa87bdb7456340f90}},
|
||||
+ uint64_t{0xd52a18abb001cb46}},
|
||||
{"VDdfSDbO8Tdj3T5W0XM3EI7iHh5xpIutiM6dvcJ/fhe23V/srFEkDy5iZf/"
|
||||
"VnA9kfi2C79ENnFnbOReeuZW1b3MUXB9lgC6U4pOTuC+"
|
||||
"jHK3Qnpyiqzj7h3ISJSuo2pob7vY6VHZo6Fn7exEqHg==",
|
||||
- uint64_t{0xe12b76a2433a1236}, uint64_t{0x5960ef3ba982c801}},
|
||||
+ uint64_t{0xe12b76a2433a1236}},
|
||||
{"Ldfvy3ORdquM/R2fIkhH/ONi69mcP1AEJ6n/"
|
||||
"oropwecAsLJzQSgezSY8bEiEs0VnFTBBsW+RtZY6tDj03fnb3amNUOq1b7jbqyQkL9hpl+"
|
||||
"2Z2J8IaVSeownWl+bQcsR5/xRktIMckC5AtF4YHfU=",
|
||||
- uint64_t{0x175bf7319cf1fa00}, uint64_t{0x5026586df9a431ec}},
|
||||
+ uint64_t{0x175bf7319cf1fa00}},
|
||||
{"BrbNpb42+"
|
||||
"VzZAjJw6QLirXzhweCVRfwlczzZ0VX2xluskwBqyfnGovz5EuX79JJ31VNXa5hTkAyQat3l"
|
||||
"YKRADTdAdwE5PqM1N7YaMqqsqoAAAeuYVXuk5eWCykYmClNdSspegwgCuT+403JigBzi",
|
||||
- uint64_t{0xd63d57b3f67525ae}, uint64_t{0xfe4b8a20fdf0840b}},
|
||||
+ uint64_t{0xd63d57b3f67525ae}},
|
||||
{"gB3NGHJJvVcuPyF0ZSvHwnWSIfmaI7La24VMPQVoIIWF7Z74NltPZZpx2f+cocESM+"
|
||||
"ILzQW9p+BC8x5IWz7N4Str2WLGKMdgmaBfNkEhSHQDU0IJEOnpUt0HmjhFaBlx0/"
|
||||
"LTmhua+rQ6Wup8ezLwfg==",
|
||||
- uint64_t{0x933faea858832b73}, uint64_t{0xdcb761867da7072f}},
|
||||
+ uint64_t{0x933faea858832b73}},
|
||||
{"hTKHlRxx6Pl4gjG+6ksvvj0CWFicUg3WrPdSJypDpq91LUWRni2KF6+"
|
||||
"81ZoHBFhEBrCdogKqeK+hy9bLDnx7g6rAFUjtn1+cWzQ2YjiOpz4+"
|
||||
"ROBB7lnwjyTGWzJD1rXtlso1g2qVH8XJVigC5M9AIxM=",
|
||||
- uint64_t{0x53d061e5f8e7c04f}, uint64_t{0xc10d4653667275b7}},
|
||||
+ uint64_t{0x53d061e5f8e7c04f}},
|
||||
{"IWQBelSQnhrr0F3BhUpXUIDauhX6f95Qp+A0diFXiUK7irwPG1oqBiqHyK/SH/"
|
||||
"9S+"
|
||||
"rln9DlFROAmeFdH0OCJi2tFm4afxYzJTFR4HnR4cG4x12JqHaZLQx6iiu6CE3rtWBVz99oA"
|
||||
"wCZUOEXIsLU24o2Y",
|
||||
- uint64_t{0xdb4124556dd515e0}, uint64_t{0x727720deec13110b}},
|
||||
+ uint64_t{0xdb4124556dd515e0}},
|
||||
{"TKo+l+"
|
||||
"1dOXdLvIrFqeLaHdm0HZnbcdEgOoLVcGRiCbAMR0j5pIFw8D36tefckAS1RCFOH5IgP8yiF"
|
||||
"T0Gd0a2hI3+"
|
||||
"fTKA7iK96NekxWeoeqzJyctc6QsoiyBlkZerRxs5RplrxoeNg29kKDTM0K94mnhD9g==",
|
||||
- uint64_t{0x4fb31a0dd681ee71}, uint64_t{0x710b009662858dc9}},
|
||||
+ uint64_t{0x4fb31a0dd681ee71}},
|
||||
{"YU4e7G6EfQYvxCFoCrrT0EFgVLHFfOWRTJQJ5gxM3G2b+"
|
||||
"1kJf9YPrpsxF6Xr6nYtS8reEEbDoZJYqnlk9lXSkVArm88Cqn6d25VCx3+"
|
||||
"49MqC0trIlXtb7SXUUhwpJK16T0hJUfPH7s5cMZXc6YmmbFuBNPE=",
|
||||
- uint64_t{0x27cc72eefa138e4c}, uint64_t{0xfbf8f7a3ecac1eb7}},
|
||||
+ uint64_t{0x27cc72eefa138e4c}},
|
||||
{"/I/"
|
||||
"eImMwPo1U6wekNFD1Jxjk9XQVi1D+"
|
||||
"FPdqcHifYXQuP5aScNQfxMAmaPR2XhuOQhADV5tTVbBKwCDCX4E3jcDNHzCiPvViZF1W27t"
|
||||
"xaf2BbFQdwKrNCmrtzcluBFYu0XZfc7RU1RmxK/RtnF1qHsq/O4pp",
|
||||
- uint64_t{0x44bc2dfba4bd3ced}, uint64_t{0xb6fc4fcd0722e3df}},
|
||||
+ uint64_t{0x44bc2dfba4bd3ced}},
|
||||
{"CJTT9WGcY2XykTdo8KodRIA29qsqY0iHzWZRjKHb9alwyJ7RZAE3V5Juv4MY3MeYEr1EPCC"
|
||||
"MxO7yFXqT8XA8YTjaMp3bafRt17Pw8JC4iKJ1zN+WWKOESrj+"
|
||||
"3aluGQqn8z1EzqY4PH7rLG575PYeWsP98BugdA==",
|
||||
- uint64_t{0x242da1e3a439bed8}, uint64_t{0x7cb86dcc55104aac}},
|
||||
+ uint64_t{0x242da1e3a439bed8}},
|
||||
{"ZlhyQwLhXQyIUEnMH/"
|
||||
"AEW27vh9xrbNKJxpWGtrEmKhd+nFqAfbeNBQjW0SfG1YI0xQkQMHXjuTt4P/"
|
||||
"EpZRtA47ibZDVS8TtaxwyBjuIDwqcN09eCtpC+Ls+"
|
||||
"vWDTLmBeDM3u4hmzz4DQAYsLiZYSJcldg9Q3wszw=",
|
||||
- uint64_t{0xdc559c746e35c139}, uint64_t{0x19e71e9b45c3a51e}},
|
||||
+ uint64_t{0xdc559c746e35c139}},
|
||||
{"v2KU8y0sCrBghmnm8lzGJlwo6D6ObccAxCf10heoDtYLosk4ztTpLlpSFEyu23MLA1tJkcg"
|
||||
"Rko04h19QMG0mOw/"
|
||||
"wc93EXAweriBqXfvdaP85sZABwiKO+6rtS9pacRVpYYhHJeVTQ5NzrvBvi1huxAr+"
|
||||
"xswhVMfL",
|
||||
- uint64_t{0xd0b0350275b9989}, uint64_t{0x51de38573c2bea48}},
|
||||
+ uint64_t{0xd0b0350275b9989}},
|
||||
{"QhKlnIS6BuVCTQsnoE67E/"
|
||||
"yrgogE8EwO7xLaEGei26m0gEU4OksefJgppDh3X0x0Cs78Dr9IHK5b977CmZlrTRmwhlP8p"
|
||||
"M+UzXPNRNIZuN3ntOum/QhUWP8SGpirheXENWsXMQ/"
|
||||
"nxtxakyEtrNkKk471Oov9juP8oQ==",
|
||||
- uint64_t{0xb04489e41d17730c}, uint64_t{0xa73ab6996d6df158}},
|
||||
+ uint64_t{0xb04489e41d17730c}},
|
||||
{"/ZRMgnoRt+Uo6fUPr9FqQvKX7syhgVqWu+"
|
||||
"WUSsiQ68UlN0efSP6Eced5gJZL6tg9gcYJIkhjuQNITU0Q3TjVAnAcobgbJikCn6qZ6pRxK"
|
||||
"BY4MTiAlfGD3T7R7hwJwx554MAy++Zb/YUFlnCaCJiwQMnowF7aQzwYFCo=",
|
||||
- uint64_t{0x2217285eb4572156}, uint64_t{0x55ef2b8c930817b2}},
|
||||
+ uint64_t{0x2217285eb4572156}},
|
||||
{"NB7tU5fNE8nI+SXGfipc7sRkhnSkUF1krjeo6k+8FITaAtdyz+"
|
||||
"o7mONgXmGLulBPH9bEwyYhKNVY0L+njNQrZ9YC2aXsFD3PdZsxAFaBT3VXEzh+"
|
||||
"NGBTjDASNL3mXyS8Yv1iThGfHoY7T4aR0NYGJ+k+pR6f+KrPC96M",
|
||||
- uint64_t{0x12c2e8e68aede73b}, uint64_t{0xb2850bf5fae87157}},
|
||||
+ uint64_t{0x12c2e8e68aede73b}},
|
||||
{"8T6wrqCtEO6/rwxF6lvMeyuigVOLwPipX/FULvwyu+1wa5sQGav/"
|
||||
"2FsLHUVn6cGSi0LlFwLewGHPFJDLR0u4t7ZUyM//"
|
||||
"x6da0sWgOa5hzDqjsVGmjxEHXiaXKW3i4iSZNuxoNbMQkIbVML+"
|
||||
"DkYu9ND0O2swg4itGeVSzXA==",
|
||||
- uint64_t{0x4d612125bdc4fd00}, uint64_t{0xecf3de1acd04651f}},
|
||||
+ uint64_t{0x4d612125bdc4fd00}},
|
||||
{"Ntf1bMRdondtMv1CYr3G80iDJ4WSAlKy5H34XdGruQiCrnRGDBa+"
|
||||
"eUi7vKp4gp3BBcVGl8eYSasVQQjn7MLvb3BjtXx6c/"
|
||||
"bCL7JtpzQKaDnPr9GWRxpBXVxKREgMM7d8lm35EODv0w+"
|
||||
"hQLfVSh8OGs7fsBb68nNWPLeeSOo=",
|
||||
- uint64_t{0x81826b553954464e}, uint64_t{0xcc0a40552559ff32}},
|
||||
+ uint64_t{0x81826b553954464e}},
|
||||
{"VsSAw72Ro6xks02kaiLuiTEIWBC5bgqr4WDnmP8vglXzAhixk7td926rm9jNimL+"
|
||||
"kroPSygZ9gl63aF5DCPOACXmsbmhDrAQuUzoh9ZKhWgElLQsrqo1KIjWoZT5b5QfVUXY9lS"
|
||||
"IBg3U75SqORoTPq7HalxxoIT5diWOcJQi",
|
||||
- uint64_t{0xc2e5d345dc0ddd2d}, uint64_t{0xc385c374f20315b1}},
|
||||
+ uint64_t{0xc2e5d345dc0ddd2d}},
|
||||
{"j+loZ+C87+"
|
||||
"bJxNVebg94gU0mSLeDulcHs84tQT7BZM2rzDSLiCNxUedHr1ZWJ9ejTiBa0dqy2I2ABc++"
|
||||
"xzOLcv+//YfibtjKtYggC6/3rv0XCc7xu6d/"
|
||||
"O6xO+XOBhOWAQ+IHJVHf7wZnDxIXB8AUHsnjEISKj7823biqXjyP3g==",
|
||||
- uint64_t{0x3da6830a9e32631e}, uint64_t{0xb90208a4c7234183}},
|
||||
+ uint64_t{0x3da6830a9e32631e}},
|
||||
{"f3LlpcPElMkspNtDq5xXyWU62erEaKn7RWKlo540gR6mZsNpK1czV/"
|
||||
"sOmqaq8XAQLEn68LKj6/"
|
||||
"cFkJukxRzCa4OF1a7cCAXYFp9+wZDu0bw4y63qbpjhdCl8GO6Z2lkcXy7KOzbPE01ukg7+"
|
||||
"gN+7uKpoohgAhIwpAKQXmX5xtd0=",
|
||||
- uint64_t{0xc9ae5c8759b4877a}, uint64_t{0x58aa1ca7a4c075d9}},
|
||||
+ uint64_t{0xc9ae5c8759b4877a}},
|
||||
+ };
|
||||
+
|
||||
+ constexpr uint64_t kGolden[kNumGoldenOutputs] = {
|
||||
+ 0xe5a40d39ab796423, 0x1766974bf7527d81, 0x5c3bbbe230db17a8,
|
||||
+ 0xa6630143a7e6aa6f, 0x8787cb2d04b0c984, 0x33603654ff574ac2,
|
||||
+ 0xa6564b468248c683, 0xef192f401b116e1c, 0xbe8dc0c54617639d,
|
||||
+ 0x93d7f665b5521c8e, 0x646d70bb42445f28, 0x96a7b1e3cc9bd426,
|
||||
+ 0x76020289ab0790c4, 0x39f842e4133b9b44, 0x2b8d7047be4bcaab,
|
||||
+ 0x99628abef6716a97, 0x4432e02ba42b2740, 0x74d810efcad7918a,
|
||||
+ 0x88c84e986002507f, 0x4f99acf193cf39b9, 0xd90e7a3655891e37,
|
||||
+ 0x3bb378b1d4df8fcf, 0xf78e94045c052d47, 0x26da0b2130da6b40,
|
||||
+ 0x30b4d426af8c6986, 0x5413b4aaf3baaeae, 0x756ab265370a1597,
|
||||
+ 0xdaf5f4b7d09814fb, 0x8f874ae37742b75e, 0x8fecd03956121ce8,
|
||||
+ 0x229c292ea7a08285, 0x0bb4bf0692d14bae, 0x207b24ca3bdac1db,
|
||||
+ 0x64f6cd6745d3825b, 0xa2b2e1656b58df1e, 0x0d01d30d9ee7a148,
|
||||
+ 0x1cb4cd00ab804e3b, 0x4697f2637fd90999, 0x8383a756b5688c07,
|
||||
+ 0x695c29cb3696a975, 0xda2e5a5a5e971521, 0x7935d4befa056b2b,
|
||||
+ 0x38dd541ca95420fe, 0xcc06c7a4963f967f, 0xbf0f6f66e232fb20,
|
||||
+ 0xf7efb32d373fe71a, 0xe2e64634b1c12660, 0x285b8fd1638e306d,
|
||||
+ 0x658e8a4e3b714d6c, 0xf391fb968e0eb398, 0x744a9ea0cc144bf2,
|
||||
+ 0x12636f2be11012f1, 0x29c57de825948f80, 0x58c6f99ab0d1c021,
|
||||
+ 0x13e7b5a7b82fe3bb, 0x10fbc87901e02b63, 0xa24c9184901b748b,
|
||||
+ 0xcac4fd4c5080e581, 0xc38bdb7483ba68e1, 0xdb2a8069b2ceaffa,
|
||||
+ 0xdf9fe91d0d1c7887, 0xe83f49e96e2e6a08, 0x0c69e61b62ca2b62,
|
||||
+ 0xb4a4f3f85f8298fe, 0x167a1b39e1e95f41, 0xf8a2a5649855ee41,
|
||||
+ 0x27992565b595c498, 0x3e08cca5b71f9346, 0xad406b10c770a6d2,
|
||||
+ 0xd1713ce6e552bcf2, 0x753b287194c73ad3, 0x5ae41a95f600af1c,
|
||||
+ 0x4a61163b86a8bb4c, 0x42eeaa79e760c7e4, 0x698df622ef465b0a,
|
||||
+ 0x157583111e1a6026, 0xaa1388f078e793e0, 0xf10d68d0f3309360,
|
||||
+ 0x2af056184457a3de, 0x6d0058e1590b2489, 0x638f287f68817f12,
|
||||
+ 0xc46b71fecefd5467, 0x2c8e94679d964e0a, 0x8612b797ce22503a,
|
||||
+ 0x59f929babfba7170, 0x9527556923fb49a0, 0x1039ab644f5e150b,
|
||||
+ 0x7816c83f3aa05e6d, 0xf51d2f564518c619, 0x67d494cff03ac004,
|
||||
+ 0x2802d636ced1cfbb, 0xf64e20bad771cb12, 0x0b9a6cf84a83e15e,
|
||||
+ 0x8da6630319609301, 0x40946a86e2a996f3, 0xcab7f5997953fa76,
|
||||
+ 0x39129ca0e04fc465, 0x5238221fd685e1b8, 0x175130c407dbcaab,
|
||||
+ 0x02f20e7536c0b0df, 0x2742cb488a04ad56, 0xd6afb593879ff93b,
|
||||
+ 0xf50ad64caac0ca7f, 0x2ade95c4261364ae, 0x5c4f3299faacd07a,
|
||||
+ 0xfffe3bff0ae5e9bc, 0x1db785c0005166e4, 0xea000d962ad18418,
|
||||
+ 0xe42aef38359362d9, 0xc8e95657348a3891, 0xc162eca864f238c6,
|
||||
+ 0xbe1fb373e20579ad, 0x628a1d4f40aa6ffd, 0xa87bdb7456340f90,
|
||||
+ 0x5960ef3ba982c801, 0x5026586df9a431ec, 0xfe4b8a20fdf0840b,
|
||||
+ 0xdcb761867da7072f, 0xc10d4653667275b7, 0x727720deec13110b,
|
||||
+ 0x710b009662858dc9, 0xfbf8f7a3ecac1eb7, 0xb6fc4fcd0722e3df,
|
||||
+ 0x7cb86dcc55104aac, 0x19e71e9b45c3a51e, 0x51de38573c2bea48,
|
||||
+ 0xa73ab6996d6df158, 0x55ef2b8c930817b2, 0xb2850bf5fae87157,
|
||||
+ 0xecf3de1acd04651f, 0xcc0a40552559ff32, 0xc385c374f20315b1,
|
||||
+ 0xb90208a4c7234183, 0x58aa1ca7a4c075d9,
|
||||
};
|
||||
|
||||
- for (const auto& expected_result : expected_results) {
|
||||
+#if UPDATE_GOLDEN
|
||||
+ (void)kGolden; // Silence warning.
|
||||
+ for (size_t i = 0; i < kNumGoldenOutputs; ++i) {
|
||||
+ std::string str;
|
||||
+ ASSERT_TRUE(absl::Base64Unescape(cases[i].base64_data, &str));
|
||||
+ uint64_t h = absl::hash_internal::Wyhash(str.data(), str.size(),
|
||||
+ cases[i].seed, kSalt);
|
||||
+ printf("0x%016" PRIx64 ", ", h);
|
||||
+ if (i % 3 == 2) {
|
||||
+ printf("\n");
|
||||
+ }
|
||||
+ }
|
||||
+ printf("\n\n\n");
|
||||
+ EXPECT_FALSE(true);
|
||||
+#else
|
||||
+ for (size_t i = 0; i < kNumGoldenOutputs; ++i) {
|
||||
+ SCOPED_TRACE(::testing::Message()
|
||||
+ << "i = " << i << "; input = " << cases[i].base64_data);
|
||||
std::string str;
|
||||
- ASSERT_TRUE(absl::Base64Unescape(expected_result.base64_data, &str));
|
||||
- EXPECT_EQ(absl::hash_internal::Wyhash(str.data(), str.size(),
|
||||
- expected_result.seed, kSalt),
|
||||
- expected_result.hash);
|
||||
+ ASSERT_TRUE(absl::Base64Unescape(cases[i].base64_data, &str));
|
||||
+ EXPECT_EQ(absl::hash_internal::Wyhash(str.data(), str.size(), cases[i].seed,
|
||||
+ kSalt),
|
||||
+ kGolden[i]);
|
||||
}
|
||||
+#endif
|
||||
}
|
||||
|
||||
} // namespace
|
|
@ -1,170 +0,0 @@
|
|||
From: Milad Fa <46688537+miladfarca@users.noreply.github.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Fix hashing on big endian platforms (#1028)
|
||||
|
||||
Avoid using libstdc++'s implementation of std::hash<std::bitset> and
|
||||
std::hash<std::vector> on big endian platforms in the implementation
|
||||
of absl::Hash.
|
||||
|
||||
This is a workaround for a buggy implementation that results in many
|
||||
collisions.
|
||||
|
||||
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102531
|
||||
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98731
|
||||
---
|
||||
absl/hash/internal/hash.h | 52 +++++++++++++++++++++++++++++++++++----
|
||||
absl/hash/internal/wyhash_test.cc | 50 +++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 97 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/absl/hash/internal/hash.h b/absl/hash/internal/hash.h
|
||||
index 7fb0af0..8747137 100644
|
||||
--- a/absl/hash/internal/hash.h
|
||||
+++ b/absl/hash/internal/hash.h
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
+#include <bitset>
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
#include <deque>
|
||||
@@ -489,8 +490,9 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
||||
|
||||
// AbslHashValue for hashing std::vector
|
||||
//
|
||||
-// Do not use this for vector<bool>. It does not have a .data(), and a fallback
|
||||
-// for std::hash<> is most likely faster.
|
||||
+// Do not use this for vector<bool> on platforms that have a working
|
||||
+// implementation of std::hash. It does not have a .data(), and a fallback for
|
||||
+// std::hash<> is most likely faster.
|
||||
template <typename H, typename T, typename Allocator>
|
||||
typename std::enable_if<is_hashable<T>::value && !std::is_same<T, bool>::value,
|
||||
H>::type
|
||||
@@ -500,6 +502,27 @@ AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
|
||||
vector.size());
|
||||
}
|
||||
|
||||
+#if defined(ABSL_IS_BIG_ENDIAN) && \
|
||||
+ (defined(__GLIBCXX__) || defined(__GLIBCPP__))
|
||||
+// AbslHashValue for hashing std::vector<bool>
|
||||
+//
|
||||
+// std::hash in libstdc++ does not work correctly with vector<bool> on Big
|
||||
+// Endian platforms therefore we need to implement a custom AbslHashValue for
|
||||
+// it. More details on the bug:
|
||||
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102531
|
||||
+template <typename H, typename T, typename Allocator>
|
||||
+typename std::enable_if<is_hashable<T>::value && std::is_same<T, bool>::value,
|
||||
+ H>::type
|
||||
+AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
|
||||
+ typename H::AbslInternalPiecewiseCombiner combiner;
|
||||
+ for (const auto& i : vector) {
|
||||
+ unsigned char c = static_cast<unsigned char>(i);
|
||||
+ hash_state = combiner.add_buffer(std::move(hash_state), &c, sizeof(c));
|
||||
+ }
|
||||
+ return H::combine(combiner.finalize(std::move(hash_state)), vector.size());
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
// -----------------------------------------------------------------------------
|
||||
// AbslHashValue for Ordered Associative Containers
|
||||
// -----------------------------------------------------------------------------
|
||||
@@ -592,9 +615,28 @@ AbslHashValue(H hash_state, const absl::variant<T...>& v) {
|
||||
// AbslHashValue for Other Types
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
-// AbslHashValue for hashing std::bitset is not defined, for the same reason as
|
||||
-// for vector<bool> (see std::vector above): It does not expose the raw bytes,
|
||||
-// and a fallback to std::hash<> is most likely faster.
|
||||
+// AbslHashValue for hashing std::bitset is not defined on Little Endian
|
||||
+// platforms, for the same reason as for vector<bool> (see std::vector above):
|
||||
+// It does not expose the raw bytes, and a fallback to std::hash<> is most
|
||||
+// likely faster.
|
||||
+
|
||||
+#if defined(ABSL_IS_BIG_ENDIAN) && \
|
||||
+ (defined(__GLIBCXX__) || defined(__GLIBCPP__))
|
||||
+// AbslHashValue for hashing std::bitset
|
||||
+//
|
||||
+// std::hash in libstdc++ does not work correctly with std::bitset on Big Endian
|
||||
+// platforms therefore we need to implement a custom AbslHashValue for it. More
|
||||
+// details on the bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102531
|
||||
+template <typename H, size_t N>
|
||||
+H AbslHashValue(H hash_state, const std::bitset<N>& set) {
|
||||
+ typename H::AbslInternalPiecewiseCombiner combiner;
|
||||
+ for (int i = 0; i < N; i++) {
|
||||
+ unsigned char c = static_cast<unsigned char>(set[i]);
|
||||
+ hash_state = combiner.add_buffer(std::move(hash_state), &c, sizeof(c));
|
||||
+ }
|
||||
+ return H::combine(combiner.finalize(std::move(hash_state)), N);
|
||||
+}
|
||||
+#endif
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
diff --git a/absl/hash/internal/wyhash_test.cc b/absl/hash/internal/wyhash_test.cc
|
||||
index 9e2d106..6717924 100644
|
||||
--- a/absl/hash/internal/wyhash_test.cc
|
||||
+++ b/absl/hash/internal/wyhash_test.cc
|
||||
@@ -404,6 +404,55 @@ TEST(WyhashTest, VerifyGolden) {
|
||||
uint64_t{0xc9ae5c8759b4877a}},
|
||||
};
|
||||
|
||||
+#if defined(ABSL_IS_BIG_ENDIAN)
|
||||
+ constexpr uint64_t kGolden[kNumGoldenOutputs] = {
|
||||
+ 0xe5a40d39ab796423, 0x1766974bf7527d81, 0x5c3bbbe230db17a8,
|
||||
+ 0xa6630143a7e6aa6f, 0x17645cb7318b86b, 0x218b175f30ba61f8,
|
||||
+ 0xa6564b468248c683, 0xef192f401b116e1c, 0xbe8dc0c54617639d,
|
||||
+ 0xe7b01610fc22dbb8, 0x99d9f694404af913, 0xf4eecd37464b45c5,
|
||||
+ 0x7d2c653d63596d9b, 0x3f15c8544ec5393a, 0x6b9dc0c1704f796c,
|
||||
+ 0xf1ded7a7eae5ed5a, 0x2db2fd7c6dd4641b, 0x151ca2d3d4cd33ab,
|
||||
+ 0xa5af5994ac2ccd64, 0x2b2a4ca3191d2fce, 0xf89e68c9364e7c05,
|
||||
+ 0x71724c70b799c21, 0x70536fabfd157369, 0xdee92794c3c3082b,
|
||||
+ 0xac033a6743d3b3eb, 0xed2956b506cd5151, 0xbd669644755264b6,
|
||||
+ 0x6ab1ff5d5f549a63, 0xf6bd551a2e3e04e, 0x7b5a8cef6875ea73,
|
||||
+ 0x22bccf4d4db0a91c, 0x4f2bc07754c7c7eb, 0xfb6b8342a86725db,
|
||||
+ 0x13a1a0d4c5854da, 0x5f6e44655f7dedac, 0x54a9198dff2bdf85,
|
||||
+ 0xdb17e6915d4e4042, 0xa69926cf5c3b89f, 0xf77f031bfd74c096,
|
||||
+ 0x1d6f916fdd50ec3c, 0x334ac76013ade393, 0x99370f899111de15,
|
||||
+ 0x352457a03ada6de, 0x341974d4f42d854d, 0xda89ab02872aeb5,
|
||||
+ 0x6ec2b74e143b10d9, 0x6f284c0b5cd60522, 0xf9670de353438f88,
|
||||
+ 0xde920913adf0a2b4, 0xb7a07d7c0c17a8ec, 0x879a69f558ba3a98,
|
||||
+ 0x360cf6d802df20f9, 0x53530f8046673738, 0xbd8f5f2bcf35e483,
|
||||
+ 0x3f171f047144b983, 0x644d04e820823465, 0x50e44773a20b2702,
|
||||
+ 0xe584ed4c05c745dd, 0x9a825c85b95ab6c0, 0xbce2931deb74e775,
|
||||
+ 0x10468e9e705c7cfe, 0x12e01de3104141e2, 0x5c11ae2ee3713abd,
|
||||
+ 0x6ac5ffb0860319e6, 0xc1e6da1849d30fc9, 0xa0e4d247a458b447,
|
||||
+ 0x4530d4615c32b89b, 0x116aa09107a76505, 0xf941339d00d9bb73,
|
||||
+ 0x573a0fc1615afb33, 0xa975c81dc868b258, 0x3ab2c5250ab54bda,
|
||||
+ 0x37f99f208a3e3b11, 0x4b49b0ff706689d, 0x30bafa0b8f0a87fe,
|
||||
+ 0xea6787a65cc20cdd, 0x55861729f1fc3ab8, 0xea38e009c5be9b72,
|
||||
+ 0xcb8522cba33c3c66, 0x352e77653fe306f3, 0xe0bb760793bac064,
|
||||
+ 0xf66ec59322662956, 0x637aa320455d56f8, 0x46ee546be5824a89,
|
||||
+ 0x9e6842421e83d8a4, 0xf98ac2bc96b9fb8c, 0xf2c1002fd9a70b99,
|
||||
+ 0x4c2b62b1e39e9405, 0x3248555fa3ade9c4, 0xd4d04c37f6417c21,
|
||||
+ 0xf40cd506b1bf5653, 0x6c45d6005c760d2f, 0x61d88a7e61ff0d7e,
|
||||
+ 0x131591e8a53cc967, 0xdae85cb9bc29bab6, 0xe98835334905e626,
|
||||
+ 0x7cce50a2b66b8754, 0x5b0b3d0c5ac498ae, 0xd35a218c974d1756,
|
||||
+ 0xfce436ddc1d003c, 0xd183901de90bb741, 0x9378f8f34974a66,
|
||||
+ 0x21f11ae0a0402368, 0xf2fbd7c94ef89cb6, 0xc329c69d0f0d080b,
|
||||
+ 0xf2841cba16216a61, 0x47aba97b44916df1, 0x724d4e00a8019fcf,
|
||||
+ 0x2df9005c2a728d63, 0xc788892a1a5d7515, 0x9e993a65f9df0480,
|
||||
+ 0x76876721ff49f969, 0xbe7a796cfba15bf5, 0xa4c8bd54586f5488,
|
||||
+ 0xb390a325275501ab, 0x893f11317427ccf1, 0x92f2bb57da5695b9,
|
||||
+ 0x30985b90da88269f, 0x2c690e268e086de8, 0x1c02df6097997196,
|
||||
+ 0x1f9778f8bbdf6455, 0x7d57378c7bf8416d, 0xba8582a5f8d84d38,
|
||||
+ 0xe8ca43b85050be4e, 0x5048cf6bed8a5d9f, 0xfbc5ba80917d0ea4,
|
||||
+ 0x8011026525bf1691, 0x26b8dc6aed9fb50d, 0x191f5bfee77c1fe3,
|
||||
+ 0xdd497891465a2cc1, 0x6f1fe8c57a33072e, 0x2c9f4ec078c460c0,
|
||||
+ 0x9a725bde8f6a1437, 0x6ce545fa3ef61e4d,
|
||||
+ };
|
||||
+#else
|
||||
constexpr uint64_t kGolden[kNumGoldenOutputs] = {
|
||||
0xe5a40d39ab796423, 0x1766974bf7527d81, 0x5c3bbbe230db17a8,
|
||||
0xa6630143a7e6aa6f, 0x8787cb2d04b0c984, 0x33603654ff574ac2,
|
||||
@@ -451,6 +500,7 @@ TEST(WyhashTest, VerifyGolden) {
|
||||
0xecf3de1acd04651f, 0xcc0a40552559ff32, 0xc385c374f20315b1,
|
||||
0xb90208a4c7234183, 0x58aa1ca7a4c075d9,
|
||||
};
|
||||
+#endif
|
||||
|
||||
#if UPDATE_GOLDEN
|
||||
(void)kGolden; // Silence warning.
|
|
@ -1,711 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Use absl::uint128 for AES random number generator
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Replace randen’s internal 128-bit integer struct, u64x2, with
|
||||
absl::uint128. This eliminates some code and improves support for
|
||||
big-endian platforms.
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 383475671 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/random/internal/BUILD.bazel | 2 +
|
||||
absl/random/internal/randen_hwaes.cc | 29 +--
|
||||
absl/random/internal/randen_slow.cc | 479 ++++++++++++++++-------------------
|
||||
3 files changed, 238 insertions(+), 272 deletions(-)
|
||||
|
||||
diff --git a/absl/random/internal/BUILD.bazel b/absl/random/internal/BUILD.bazel
|
||||
index 612b150..b3fa053 100644
|
||||
--- a/absl/random/internal/BUILD.bazel
|
||||
+++ b/absl/random/internal/BUILD.bazel
|
||||
@@ -296,6 +296,7 @@ cc_library(
|
||||
":platform",
|
||||
"//absl/base:config",
|
||||
"//absl/base:core_headers",
|
||||
+ "//absl/numeric:int128",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -336,6 +337,7 @@ cc_library(
|
||||
":platform",
|
||||
"//absl/base:config",
|
||||
"//absl/base:core_headers",
|
||||
+ "//absl/numeric:int128",
|
||||
],
|
||||
)
|
||||
|
||||
diff --git a/absl/random/internal/randen_hwaes.cc b/absl/random/internal/randen_hwaes.cc
|
||||
index b5a3f90..0a625bc 100644
|
||||
--- a/absl/random/internal/randen_hwaes.cc
|
||||
+++ b/absl/random/internal/randen_hwaes.cc
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <cstring>
|
||||
|
||||
#include "absl/base/attributes.h"
|
||||
+#include "absl/numeric/int128.h"
|
||||
#include "absl/random/internal/platform.h"
|
||||
#include "absl/random/internal/randen_traits.h"
|
||||
|
||||
@@ -120,11 +121,6 @@ namespace {
|
||||
|
||||
using absl::random_internal::RandenTraits;
|
||||
|
||||
-// Randen operates on 128-bit vectors.
|
||||
-struct alignas(16) u64x2 {
|
||||
- uint64_t data[2];
|
||||
-};
|
||||
-
|
||||
} // namespace
|
||||
|
||||
// TARGET_CRYPTO defines a crypto attribute for each architecture.
|
||||
@@ -186,7 +182,7 @@ inline ABSL_TARGET_CRYPTO Vector128 AesRound(const Vector128& state,
|
||||
}
|
||||
|
||||
// Enables native loads in the round loop by pre-swapping.
|
||||
-inline ABSL_TARGET_CRYPTO void SwapEndian(u64x2* state) {
|
||||
+inline ABSL_TARGET_CRYPTO void SwapEndian(absl::uint128* state) {
|
||||
for (uint32_t block = 0; block < RandenTraits::kFeistelBlocks; ++block) {
|
||||
Vector128Store(ReverseBytes(Vector128Load(state + block)), state + block);
|
||||
}
|
||||
@@ -327,7 +323,7 @@ namespace {
|
||||
|
||||
// Block shuffles applies a shuffle to the entire state between AES rounds.
|
||||
// Improved odd-even shuffle from "New criterion for diffusion property".
|
||||
-inline ABSL_TARGET_CRYPTO void BlockShuffle(u64x2* state) {
|
||||
+inline ABSL_TARGET_CRYPTO void BlockShuffle(absl::uint128* state) {
|
||||
static_assert(RandenTraits::kFeistelBlocks == 16,
|
||||
"Expecting 16 FeistelBlocks.");
|
||||
|
||||
@@ -374,8 +370,9 @@ inline ABSL_TARGET_CRYPTO void BlockShuffle(u64x2* state) {
|
||||
// per 16 bytes (vs. 10 for AES-CTR). Computing eight round functions in
|
||||
// parallel hides the 7-cycle AESNI latency on HSW. Note that the Feistel
|
||||
// XORs are 'free' (included in the second AES instruction).
|
||||
-inline ABSL_TARGET_CRYPTO const u64x2* FeistelRound(
|
||||
- u64x2* state, const u64x2* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
+inline ABSL_TARGET_CRYPTO const absl::uint128* FeistelRound(
|
||||
+ absl::uint128* state,
|
||||
+ const absl::uint128* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
static_assert(RandenTraits::kFeistelBlocks == 16,
|
||||
"Expecting 16 FeistelBlocks.");
|
||||
|
||||
@@ -436,7 +433,8 @@ inline ABSL_TARGET_CRYPTO const u64x2* FeistelRound(
|
||||
// 2^64 queries if the round function is a PRF. This is similar to the b=8 case
|
||||
// of Simpira v2, but more efficient than its generic construction for b=16.
|
||||
inline ABSL_TARGET_CRYPTO void Permute(
|
||||
- u64x2* state, const u64x2* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
+ absl::uint128* state,
|
||||
+ const absl::uint128* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
// (Successfully unrolled; the first iteration jumps into the second half)
|
||||
#ifdef __clang__
|
||||
#pragma clang loop unroll_count(2)
|
||||
@@ -473,10 +471,11 @@ void ABSL_TARGET_CRYPTO RandenHwAes::Absorb(const void* seed_void,
|
||||
static_assert(RandenTraits::kStateBytes / sizeof(Vector128) == 16,
|
||||
"Unexpected Randen kStateBlocks");
|
||||
|
||||
- auto* state =
|
||||
- reinterpret_cast<u64x2 * ABSL_RANDOM_INTERNAL_RESTRICT>(state_void);
|
||||
+ auto* state = reinterpret_cast<absl::uint128 * ABSL_RANDOM_INTERNAL_RESTRICT>(
|
||||
+ state_void);
|
||||
const auto* seed =
|
||||
- reinterpret_cast<const u64x2 * ABSL_RANDOM_INTERNAL_RESTRICT>(seed_void);
|
||||
+ reinterpret_cast<const absl::uint128 * ABSL_RANDOM_INTERNAL_RESTRICT>(
|
||||
+ seed_void);
|
||||
|
||||
Vector128 b1 = Vector128Load(state + 1);
|
||||
b1 ^= Vector128Load(seed + 0);
|
||||
@@ -545,8 +544,8 @@ void ABSL_TARGET_CRYPTO RandenHwAes::Generate(const void* keys_void,
|
||||
static_assert(RandenTraits::kCapacityBytes == sizeof(Vector128),
|
||||
"Capacity mismatch");
|
||||
|
||||
- auto* state = reinterpret_cast<u64x2*>(state_void);
|
||||
- const auto* keys = reinterpret_cast<const u64x2*>(keys_void);
|
||||
+ auto* state = reinterpret_cast<absl::uint128*>(state_void);
|
||||
+ const auto* keys = reinterpret_cast<const absl::uint128*>(keys_void);
|
||||
|
||||
const Vector128 prev_inner = Vector128Load(state);
|
||||
|
||||
diff --git a/absl/random/internal/randen_slow.cc b/absl/random/internal/randen_slow.cc
|
||||
index 4e5f3dc..56aeb03 100644
|
||||
--- a/absl/random/internal/randen_slow.cc
|
||||
+++ b/absl/random/internal/randen_slow.cc
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <cstring>
|
||||
|
||||
#include "absl/base/attributes.h"
|
||||
+#include "absl/numeric/int128.h"
|
||||
#include "absl/random/internal/platform.h"
|
||||
#include "absl/random/internal/randen_traits.h"
|
||||
|
||||
@@ -38,192 +39,193 @@
|
||||
namespace {
|
||||
|
||||
// AES portions based on rijndael-alg-fst.c,
|
||||
-// https://fastcrypto.org/front/misc/rijndael-alg-fst.c
|
||||
+// https://fastcrypto.org/front/misc/rijndael-alg-fst.c, and modified for
|
||||
+// little-endianness.
|
||||
//
|
||||
// Implementation of
|
||||
// http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf
|
||||
constexpr uint32_t te0[256] = {
|
||||
- 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd,
|
||||
- 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d,
|
||||
- 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d,
|
||||
- 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b,
|
||||
- 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7,
|
||||
- 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a,
|
||||
- 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4,
|
||||
- 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f,
|
||||
- 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1,
|
||||
- 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d,
|
||||
- 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e,
|
||||
- 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb,
|
||||
- 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e,
|
||||
- 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c,
|
||||
- 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46,
|
||||
- 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a,
|
||||
- 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7,
|
||||
- 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81,
|
||||
- 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe,
|
||||
- 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504,
|
||||
- 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a,
|
||||
- 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f,
|
||||
- 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2,
|
||||
- 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395,
|
||||
- 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e,
|
||||
- 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c,
|
||||
- 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256,
|
||||
- 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4,
|
||||
- 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4,
|
||||
- 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,
|
||||
- 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa,
|
||||
- 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,
|
||||
- 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1,
|
||||
- 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,
|
||||
- 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42,
|
||||
- 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12,
|
||||
- 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158,
|
||||
- 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,
|
||||
- 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22,
|
||||
- 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,
|
||||
- 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631,
|
||||
- 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,
|
||||
- 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a,
|
||||
+ 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6,
|
||||
+ 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
|
||||
+ 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f,
|
||||
+ 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
|
||||
+ 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453,
|
||||
+ 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
|
||||
+ 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, 0x5c343468, 0xf4a5a551,
|
||||
+ 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
|
||||
+ 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637,
|
||||
+ 0x0f05050a, 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
|
||||
+ 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, 0x9e83831d,
|
||||
+ 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
|
||||
+ 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, 0x7b292952, 0x3ee3e3dd,
|
||||
+ 0x712f2f5e, 0x97848413, 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
|
||||
+ 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d,
|
||||
+ 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
|
||||
+ 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, 0xc5434386, 0xd74d4d9a,
|
||||
+ 0x55333366, 0x94858511, 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
|
||||
+ 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d,
|
||||
+ 0xc0404080, 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
|
||||
+ 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, 0x1affffe5,
|
||||
+ 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
|
||||
+ 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, 0x57c4c493, 0xf2a7a755,
|
||||
+ 0x827e7efc, 0x473d3d7a, 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
|
||||
+ 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54,
|
||||
+ 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
|
||||
+ 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, 0x3be0e0db, 0x56323264,
|
||||
+ 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
|
||||
+ 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531,
|
||||
+ 0x37e4e4d3, 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
|
||||
+ 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, 0xfa5656ac,
|
||||
+ 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
|
||||
+ 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, 0x241c1c38, 0xf1a6a657,
|
||||
+ 0xc7b4b473, 0x51c6c697, 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
|
||||
+ 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c,
|
||||
+ 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
|
||||
+ 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, 0x91868617, 0x58c1c199,
|
||||
+ 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
|
||||
+ 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c,
|
||||
+ 0x92878715, 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
|
||||
+ 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, 0x31e6e6d7,
|
||||
+ 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
|
||||
+ 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c,
|
||||
};
|
||||
|
||||
constexpr uint32_t te1[256] = {
|
||||
- 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b,
|
||||
- 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
|
||||
- 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282,
|
||||
- 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,
|
||||
- 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4,
|
||||
- 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
|
||||
- 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5,
|
||||
- 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
|
||||
- 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696,
|
||||
- 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
|
||||
- 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383,
|
||||
- 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
|
||||
- 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3,
|
||||
- 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,
|
||||
- 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb,
|
||||
- 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
|
||||
- 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d,
|
||||
- 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,
|
||||
- 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3,
|
||||
- 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,
|
||||
- 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff,
|
||||
- 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
|
||||
- 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7,
|
||||
- 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
|
||||
- 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a,
|
||||
- 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
|
||||
- 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232,
|
||||
- 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,
|
||||
- 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595,
|
||||
- 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
|
||||
- 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656,
|
||||
- 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
|
||||
- 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6,
|
||||
- 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
|
||||
- 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e,
|
||||
- 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
|
||||
- 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1,
|
||||
- 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
|
||||
- 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e,
|
||||
- 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
|
||||
- 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6,
|
||||
- 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
|
||||
- 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616,
|
||||
+ 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d, 0xf2f2ff0d, 0x6b6bd6bd,
|
||||
+ 0x6f6fdeb1, 0xc5c59154, 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
|
||||
+ 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a, 0xcaca8f45, 0x82821f9d,
|
||||
+ 0xc9c98940, 0x7d7dfa87, 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
|
||||
+ 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea, 0x9c9c23bf, 0xa4a453f7,
|
||||
+ 0x7272e496, 0xc0c09b5b, 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
|
||||
+ 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f, 0x3434685c, 0xa5a551f4,
|
||||
+ 0xe5e5d134, 0xf1f1f908, 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
|
||||
+ 0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e, 0x18183028, 0x969637a1,
|
||||
+ 0x05050a0f, 0x9a9a2fb5, 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
|
||||
+ 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f, 0x0909121b, 0x83831d9e,
|
||||
+ 0x2c2c5874, 0x1a1a342e, 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
|
||||
+ 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce, 0x2929527b, 0xe3e3dd3e,
|
||||
+ 0x2f2f5e71, 0x84841397, 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
|
||||
+ 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed, 0x6a6ad4be, 0xcbcb8d46,
|
||||
+ 0xbebe67d9, 0x3939724b, 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
|
||||
+ 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16, 0x434386c5, 0x4d4d9ad7,
|
||||
+ 0x33336655, 0x85851194, 0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
|
||||
+ 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3, 0x5151a2f3, 0xa3a35dfe,
|
||||
+ 0x404080c0, 0x8f8f058a, 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
|
||||
+ 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263, 0x10102030, 0xffffe51a,
|
||||
+ 0xf3f3fd0e, 0xd2d2bf6d, 0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
|
||||
+ 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39, 0xc4c49357, 0xa7a755f2,
|
||||
+ 0x7e7efc82, 0x3d3d7a47, 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
|
||||
+ 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f, 0x22224466, 0x2a2a547e,
|
||||
+ 0x90903bab, 0x88880b83, 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
|
||||
+ 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76, 0xe0e0db3b, 0x32326456,
|
||||
+ 0x3a3a744e, 0x0a0a141e, 0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
|
||||
+ 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6, 0x919139a8, 0x959531a4,
|
||||
+ 0xe4e4d337, 0x7979f28b, 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
|
||||
+ 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0, 0x6c6cd8b4, 0x5656acfa,
|
||||
+ 0xf4f4f307, 0xeaeacf25, 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
|
||||
+ 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72, 0x1c1c3824, 0xa6a657f1,
|
||||
+ 0xb4b473c7, 0xc6c69751, 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
|
||||
+ 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85, 0x7070e090, 0x3e3e7c42,
|
||||
+ 0xb5b571c4, 0x6666ccaa, 0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
|
||||
+ 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0, 0x86861791, 0xc1c19958,
|
||||
+ 0x1d1d3a27, 0x9e9e27b9, 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
|
||||
+ 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7, 0x9b9b2db6, 0x1e1e3c22,
|
||||
+ 0x87871592, 0xe9e9c920, 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
|
||||
+ 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17, 0xbfbf65da, 0xe6e6d731,
|
||||
+ 0x424284c6, 0x6868d0b8, 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
|
||||
+ 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a,
|
||||
};
|
||||
|
||||
constexpr uint32_t te2[256] = {
|
||||
- 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b,
|
||||
- 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b,
|
||||
- 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82,
|
||||
- 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0,
|
||||
- 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4,
|
||||
- 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26,
|
||||
- 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5,
|
||||
- 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15,
|
||||
- 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796,
|
||||
- 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2,
|
||||
- 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83,
|
||||
- 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0,
|
||||
- 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3,
|
||||
- 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed,
|
||||
- 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb,
|
||||
- 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf,
|
||||
- 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d,
|
||||
- 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f,
|
||||
- 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3,
|
||||
- 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5,
|
||||
- 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff,
|
||||
- 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec,
|
||||
- 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7,
|
||||
- 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673,
|
||||
- 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a,
|
||||
- 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814,
|
||||
- 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432,
|
||||
- 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c,
|
||||
- 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195,
|
||||
- 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,
|
||||
- 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56,
|
||||
- 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008,
|
||||
- 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6,
|
||||
- 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,
|
||||
- 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e,
|
||||
- 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e,
|
||||
- 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1,
|
||||
- 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,
|
||||
- 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e,
|
||||
- 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,
|
||||
- 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6,
|
||||
- 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f,
|
||||
- 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16,
|
||||
+ 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b, 0xf2ff0df2, 0x6bd6bd6b,
|
||||
+ 0x6fdeb16f, 0xc59154c5, 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
|
||||
+ 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76, 0xca8f45ca, 0x821f9d82,
|
||||
+ 0xc98940c9, 0x7dfa877d, 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
|
||||
+ 0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf, 0x9c23bf9c, 0xa453f7a4,
|
||||
+ 0x72e49672, 0xc09b5bc0, 0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
|
||||
+ 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc, 0x34685c34, 0xa551f4a5,
|
||||
+ 0xe5d134e5, 0xf1f908f1, 0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
|
||||
+ 0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3, 0x18302818, 0x9637a196,
|
||||
+ 0x050a0f05, 0x9a2fb59a, 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
|
||||
+ 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75, 0x09121b09, 0x831d9e83,
|
||||
+ 0x2c58742c, 0x1a342e1a, 0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
|
||||
+ 0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3, 0x29527b29, 0xe3dd3ee3,
|
||||
+ 0x2f5e712f, 0x84139784, 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
|
||||
+ 0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b, 0x6ad4be6a, 0xcb8d46cb,
|
||||
+ 0xbe67d9be, 0x39724b39, 0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
|
||||
+ 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb, 0x4386c543, 0x4d9ad74d,
|
||||
+ 0x33665533, 0x85119485, 0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
|
||||
+ 0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8, 0x51a2f351, 0xa35dfea3,
|
||||
+ 0x4080c040, 0x8f058a8f, 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
|
||||
+ 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321, 0x10203010, 0xffe51aff,
|
||||
+ 0xf3fd0ef3, 0xd2bf6dd2, 0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
|
||||
+ 0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917, 0xc49357c4, 0xa755f2a7,
|
||||
+ 0x7efc827e, 0x3d7a473d, 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
|
||||
+ 0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc, 0x22446622, 0x2a547e2a,
|
||||
+ 0x903bab90, 0x880b8388, 0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
|
||||
+ 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db, 0xe0db3be0, 0x32645632,
|
||||
+ 0x3a744e3a, 0x0a141e0a, 0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
|
||||
+ 0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662, 0x9139a891, 0x9531a495,
|
||||
+ 0xe4d337e4, 0x79f28b79, 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
|
||||
+ 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9, 0x6cd8b46c, 0x56acfa56,
|
||||
+ 0xf4f307f4, 0xeacf25ea, 0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
|
||||
+ 0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e, 0x1c38241c, 0xa657f1a6,
|
||||
+ 0xb473c7b4, 0xc69751c6, 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
|
||||
+ 0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a, 0x70e09070, 0x3e7c423e,
|
||||
+ 0xb571c4b5, 0x66ccaa66, 0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
|
||||
+ 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9, 0x86179186, 0xc19958c1,
|
||||
+ 0x1d3a271d, 0x9e27b99e, 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
|
||||
+ 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794, 0x9b2db69b, 0x1e3c221e,
|
||||
+ 0x87159287, 0xe9c920e9, 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
|
||||
+ 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d, 0xbf65dabf, 0xe6d731e6,
|
||||
+ 0x4284c642, 0x68d0b868, 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
|
||||
+ 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16,
|
||||
};
|
||||
|
||||
constexpr uint32_t te3[256] = {
|
||||
- 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6,
|
||||
- 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56,
|
||||
- 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f,
|
||||
- 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb,
|
||||
- 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753,
|
||||
- 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c,
|
||||
- 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451,
|
||||
- 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a,
|
||||
- 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137,
|
||||
- 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf,
|
||||
- 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d,
|
||||
- 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b,
|
||||
- 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd,
|
||||
- 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1,
|
||||
- 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d,
|
||||
- 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85,
|
||||
- 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a,
|
||||
- 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe,
|
||||
- 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d,
|
||||
- 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1,
|
||||
- 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5,
|
||||
- 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3,
|
||||
- 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255,
|
||||
- 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6,
|
||||
- 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54,
|
||||
- 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28,
|
||||
- 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664,
|
||||
- 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8,
|
||||
- 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431,
|
||||
- 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,
|
||||
- 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac,
|
||||
- 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810,
|
||||
- 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157,
|
||||
- 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,
|
||||
- 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c,
|
||||
- 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c,
|
||||
- 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899,
|
||||
- 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,
|
||||
- 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c,
|
||||
- 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,
|
||||
- 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7,
|
||||
- 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e,
|
||||
- 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c,
|
||||
+ 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b, 0xff0df2f2, 0xd6bd6b6b,
|
||||
+ 0xdeb16f6f, 0x9154c5c5, 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
|
||||
+ 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676, 0x8f45caca, 0x1f9d8282,
|
||||
+ 0x8940c9c9, 0xfa877d7d, 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
|
||||
+ 0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf, 0x23bf9c9c, 0x53f7a4a4,
|
||||
+ 0xe4967272, 0x9b5bc0c0, 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
|
||||
+ 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc, 0x685c3434, 0x51f4a5a5,
|
||||
+ 0xd134e5e5, 0xf908f1f1, 0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
|
||||
+ 0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3, 0x30281818, 0x37a19696,
|
||||
+ 0x0a0f0505, 0x2fb59a9a, 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
|
||||
+ 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575, 0x121b0909, 0x1d9e8383,
|
||||
+ 0x58742c2c, 0x342e1a1a, 0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
|
||||
+ 0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3, 0x527b2929, 0xdd3ee3e3,
|
||||
+ 0x5e712f2f, 0x13978484, 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
|
||||
+ 0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b, 0xd4be6a6a, 0x8d46cbcb,
|
||||
+ 0x67d9bebe, 0x724b3939, 0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
|
||||
+ 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb, 0x86c54343, 0x9ad74d4d,
|
||||
+ 0x66553333, 0x11948585, 0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
|
||||
+ 0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8, 0xa2f35151, 0x5dfea3a3,
|
||||
+ 0x80c04040, 0x058a8f8f, 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
|
||||
+ 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121, 0x20301010, 0xe51affff,
|
||||
+ 0xfd0ef3f3, 0xbf6dd2d2, 0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
|
||||
+ 0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717, 0x9357c4c4, 0x55f2a7a7,
|
||||
+ 0xfc827e7e, 0x7a473d3d, 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
|
||||
+ 0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc, 0x44662222, 0x547e2a2a,
|
||||
+ 0x3bab9090, 0x0b838888, 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
|
||||
+ 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb, 0xdb3be0e0, 0x64563232,
|
||||
+ 0x744e3a3a, 0x141e0a0a, 0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
|
||||
+ 0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262, 0x39a89191, 0x31a49595,
|
||||
+ 0xd337e4e4, 0xf28b7979, 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
|
||||
+ 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9, 0xd8b46c6c, 0xacfa5656,
|
||||
+ 0xf307f4f4, 0xcf25eaea, 0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
|
||||
+ 0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e, 0x38241c1c, 0x57f1a6a6,
|
||||
+ 0x73c7b4b4, 0x9751c6c6, 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
|
||||
+ 0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a, 0xe0907070, 0x7c423e3e,
|
||||
+ 0x71c4b5b5, 0xccaa6666, 0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
|
||||
+ 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9, 0x17918686, 0x9958c1c1,
|
||||
+ 0x3a271d1d, 0x27b99e9e, 0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
|
||||
+ 0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494, 0x2db69b9b, 0x3c221e1e,
|
||||
+ 0x15928787, 0xc920e9e9, 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
|
||||
+ 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d, 0x65dabfbf, 0xd731e6e6,
|
||||
+ 0x84c64242, 0xd0b86868, 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
|
||||
+ 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616,
|
||||
};
|
||||
|
||||
// Software implementation of the Vector128 class, using uint32_t
|
||||
@@ -235,45 +237,13 @@ struct alignas(16) Vector128 {
|
||||
inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE Vector128
|
||||
Vector128Load(const void* from) {
|
||||
Vector128 result;
|
||||
- const uint8_t* src = reinterpret_cast<const uint8_t*>(from);
|
||||
- result.s[0] = static_cast<uint32_t>(src[0]) << 24 |
|
||||
- static_cast<uint32_t>(src[1]) << 16 |
|
||||
- static_cast<uint32_t>(src[2]) << 8 |
|
||||
- static_cast<uint32_t>(src[3]);
|
||||
- result.s[1] = static_cast<uint32_t>(src[4]) << 24 |
|
||||
- static_cast<uint32_t>(src[5]) << 16 |
|
||||
- static_cast<uint32_t>(src[6]) << 8 |
|
||||
- static_cast<uint32_t>(src[7]);
|
||||
- result.s[2] = static_cast<uint32_t>(src[8]) << 24 |
|
||||
- static_cast<uint32_t>(src[9]) << 16 |
|
||||
- static_cast<uint32_t>(src[10]) << 8 |
|
||||
- static_cast<uint32_t>(src[11]);
|
||||
- result.s[3] = static_cast<uint32_t>(src[12]) << 24 |
|
||||
- static_cast<uint32_t>(src[13]) << 16 |
|
||||
- static_cast<uint32_t>(src[14]) << 8 |
|
||||
- static_cast<uint32_t>(src[15]);
|
||||
+ std::memcpy(result.s, from, sizeof(Vector128));
|
||||
return result;
|
||||
}
|
||||
|
||||
inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void Vector128Store(
|
||||
const Vector128& v, void* to) {
|
||||
- uint8_t* dst = reinterpret_cast<uint8_t*>(to);
|
||||
- dst[0] = static_cast<uint8_t>(v.s[0] >> 24);
|
||||
- dst[1] = static_cast<uint8_t>(v.s[0] >> 16);
|
||||
- dst[2] = static_cast<uint8_t>(v.s[0] >> 8);
|
||||
- dst[3] = static_cast<uint8_t>(v.s[0]);
|
||||
- dst[4] = static_cast<uint8_t>(v.s[1] >> 24);
|
||||
- dst[5] = static_cast<uint8_t>(v.s[1] >> 16);
|
||||
- dst[6] = static_cast<uint8_t>(v.s[1] >> 8);
|
||||
- dst[7] = static_cast<uint8_t>(v.s[1]);
|
||||
- dst[8] = static_cast<uint8_t>(v.s[2] >> 24);
|
||||
- dst[9] = static_cast<uint8_t>(v.s[2] >> 16);
|
||||
- dst[10] = static_cast<uint8_t>(v.s[2] >> 8);
|
||||
- dst[11] = static_cast<uint8_t>(v.s[2]);
|
||||
- dst[12] = static_cast<uint8_t>(v.s[3] >> 24);
|
||||
- dst[13] = static_cast<uint8_t>(v.s[3] >> 16);
|
||||
- dst[14] = static_cast<uint8_t>(v.s[3] >> 8);
|
||||
- dst[15] = static_cast<uint8_t>(v.s[3]);
|
||||
+ std::memcpy(to, v.s, sizeof(Vector128));
|
||||
}
|
||||
|
||||
// One round of AES. "round_key" is a public constant for breaking the
|
||||
@@ -282,38 +252,33 @@ inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE Vector128
|
||||
AesRound(const Vector128& state, const Vector128& round_key) {
|
||||
Vector128 result;
|
||||
result.s[0] = round_key.s[0] ^ //
|
||||
- te0[uint8_t(state.s[0] >> 24)] ^ //
|
||||
- te1[uint8_t(state.s[1] >> 16)] ^ //
|
||||
- te2[uint8_t(state.s[2] >> 8)] ^ //
|
||||
- te3[uint8_t(state.s[3])];
|
||||
+ te0[uint8_t(state.s[0])] ^ //
|
||||
+ te1[uint8_t(state.s[1] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[2] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[3] >> 24)];
|
||||
result.s[1] = round_key.s[1] ^ //
|
||||
- te0[uint8_t(state.s[1] >> 24)] ^ //
|
||||
- te1[uint8_t(state.s[2] >> 16)] ^ //
|
||||
- te2[uint8_t(state.s[3] >> 8)] ^ //
|
||||
- te3[uint8_t(state.s[0])];
|
||||
+ te0[uint8_t(state.s[1])] ^ //
|
||||
+ te1[uint8_t(state.s[2] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[3] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[0] >> 24)];
|
||||
result.s[2] = round_key.s[2] ^ //
|
||||
- te0[uint8_t(state.s[2] >> 24)] ^ //
|
||||
- te1[uint8_t(state.s[3] >> 16)] ^ //
|
||||
- te2[uint8_t(state.s[0] >> 8)] ^ //
|
||||
- te3[uint8_t(state.s[1])];
|
||||
+ te0[uint8_t(state.s[2])] ^ //
|
||||
+ te1[uint8_t(state.s[3] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[0] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[1] >> 24)];
|
||||
result.s[3] = round_key.s[3] ^ //
|
||||
- te0[uint8_t(state.s[3] >> 24)] ^ //
|
||||
- te1[uint8_t(state.s[0] >> 16)] ^ //
|
||||
- te2[uint8_t(state.s[1] >> 8)] ^ //
|
||||
- te3[uint8_t(state.s[2])];
|
||||
+ te0[uint8_t(state.s[3])] ^ //
|
||||
+ te1[uint8_t(state.s[0] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[1] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[2] >> 24)];
|
||||
return result;
|
||||
}
|
||||
|
||||
using ::absl::random_internal::RandenTraits;
|
||||
|
||||
-// Randen operates on 128-bit vectors.
|
||||
-struct alignas(16) u64x2 {
|
||||
- uint64_t data[2];
|
||||
-};
|
||||
-
|
||||
// The improved Feistel block shuffle function for 16 blocks.
|
||||
inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void BlockShuffle(
|
||||
- u64x2* state) {
|
||||
+ absl::uint128* state) {
|
||||
static_assert(RandenTraits::kFeistelBlocks == 16,
|
||||
"Feistel block shuffle only works for 16 blocks.");
|
||||
|
||||
@@ -323,31 +288,31 @@ inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void BlockShuffle(
|
||||
// The fully unrolled loop without the memcpy improves the speed by about
|
||||
// 30% over the equivalent:
|
||||
#if 0
|
||||
- u64x2 source[RandenTraits::kFeistelBlocks];
|
||||
+ absl::uint128 source[RandenTraits::kFeistelBlocks];
|
||||
std::memcpy(source, state, sizeof(source));
|
||||
for (size_t i = 0; i < RandenTraits::kFeistelBlocks; i++) {
|
||||
- const u64x2 v0 = source[shuffle[i]];
|
||||
+ const absl::uint128 v0 = source[shuffle[i]];
|
||||
state[i] = v0;
|
||||
}
|
||||
return;
|
||||
#endif
|
||||
|
||||
- const u64x2 v0 = state[shuffle[0]];
|
||||
- const u64x2 v1 = state[shuffle[1]];
|
||||
- const u64x2 v2 = state[shuffle[2]];
|
||||
- const u64x2 v3 = state[shuffle[3]];
|
||||
- const u64x2 v4 = state[shuffle[4]];
|
||||
- const u64x2 v5 = state[shuffle[5]];
|
||||
- const u64x2 v6 = state[shuffle[6]];
|
||||
- const u64x2 v7 = state[shuffle[7]];
|
||||
- const u64x2 w0 = state[shuffle[8]];
|
||||
- const u64x2 w1 = state[shuffle[9]];
|
||||
- const u64x2 w2 = state[shuffle[10]];
|
||||
- const u64x2 w3 = state[shuffle[11]];
|
||||
- const u64x2 w4 = state[shuffle[12]];
|
||||
- const u64x2 w5 = state[shuffle[13]];
|
||||
- const u64x2 w6 = state[shuffle[14]];
|
||||
- const u64x2 w7 = state[shuffle[15]];
|
||||
+ const absl::uint128 v0 = state[shuffle[0]];
|
||||
+ const absl::uint128 v1 = state[shuffle[1]];
|
||||
+ const absl::uint128 v2 = state[shuffle[2]];
|
||||
+ const absl::uint128 v3 = state[shuffle[3]];
|
||||
+ const absl::uint128 v4 = state[shuffle[4]];
|
||||
+ const absl::uint128 v5 = state[shuffle[5]];
|
||||
+ const absl::uint128 v6 = state[shuffle[6]];
|
||||
+ const absl::uint128 v7 = state[shuffle[7]];
|
||||
+ const absl::uint128 w0 = state[shuffle[8]];
|
||||
+ const absl::uint128 w1 = state[shuffle[9]];
|
||||
+ const absl::uint128 w2 = state[shuffle[10]];
|
||||
+ const absl::uint128 w3 = state[shuffle[11]];
|
||||
+ const absl::uint128 w4 = state[shuffle[12]];
|
||||
+ const absl::uint128 w5 = state[shuffle[13]];
|
||||
+ const absl::uint128 w6 = state[shuffle[14]];
|
||||
+ const absl::uint128 w7 = state[shuffle[15]];
|
||||
state[0] = v0;
|
||||
state[1] = v1;
|
||||
state[2] = v2;
|
||||
@@ -371,9 +336,9 @@ inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void BlockShuffle(
|
||||
// per 16 bytes (vs. 10 for AES-CTR). Computing eight round functions in
|
||||
// parallel hides the 7-cycle AESNI latency on HSW. Note that the Feistel
|
||||
// XORs are 'free' (included in the second AES instruction).
|
||||
-inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE const u64x2* FeistelRound(
|
||||
- u64x2* ABSL_RANDOM_INTERNAL_RESTRICT state,
|
||||
- const u64x2* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
+inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE const absl::uint128*
|
||||
+FeistelRound(absl::uint128* ABSL_RANDOM_INTERNAL_RESTRICT state,
|
||||
+ const absl::uint128* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
for (size_t branch = 0; branch < RandenTraits::kFeistelBlocks; branch += 4) {
|
||||
const Vector128 s0 = Vector128Load(state + branch);
|
||||
const Vector128 s1 = Vector128Load(state + branch + 1);
|
||||
@@ -398,7 +363,8 @@ inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE const u64x2* FeistelRound(
|
||||
// 2^64 queries if the round function is a PRF. This is similar to the b=8 case
|
||||
// of Simpira v2, but more efficient than its generic construction for b=16.
|
||||
inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void Permute(
|
||||
- u64x2* state, const u64x2* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
+ absl::uint128* state,
|
||||
+ const absl::uint128* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
|
||||
for (size_t round = 0; round < RandenTraits::kFeistelRounds; ++round) {
|
||||
keys = FeistelRound(state, keys);
|
||||
BlockShuffle(state);
|
||||
@@ -437,19 +403,18 @@ void RandenSlow::Absorb(const void* seed_void, void* state_void) {
|
||||
}
|
||||
|
||||
void RandenSlow::Generate(const void* keys_void, void* state_void) {
|
||||
- static_assert(RandenTraits::kCapacityBytes == sizeof(u64x2),
|
||||
+ static_assert(RandenTraits::kCapacityBytes == sizeof(absl::uint128),
|
||||
"Capacity mismatch");
|
||||
|
||||
- auto* state = reinterpret_cast<u64x2*>(state_void);
|
||||
- const auto* keys = reinterpret_cast<const u64x2*>(keys_void);
|
||||
+ auto* state = reinterpret_cast<absl::uint128*>(state_void);
|
||||
+ const auto* keys = reinterpret_cast<const absl::uint128*>(keys_void);
|
||||
|
||||
- const u64x2 prev_inner = state[0];
|
||||
+ const absl::uint128 prev_inner = state[0];
|
||||
|
||||
Permute(state, keys);
|
||||
|
||||
// Ensure backtracking resistance.
|
||||
- state[0].data[0] ^= prev_inner.data[0];
|
||||
- state[0].data[1] ^= prev_inner.data[1];
|
||||
+ *state ^= prev_inner;
|
||||
}
|
||||
|
||||
} // namespace random_internal
|
|
@ -1,97 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Make randen_slow endian-correct
|
||||
|
||||
Pay attention to the platform endianness when pulling bytes out of each
|
||||
AES block, and use platform-endian round keys.
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 383878281 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/random/internal/BUILD.bazel | 1 +
|
||||
absl/random/internal/randen_slow.cc | 30 +++++++++++++++++++++++++++++-
|
||||
2 files changed, 30 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/absl/random/internal/BUILD.bazel b/absl/random/internal/BUILD.bazel
|
||||
index b3fa053..64cd7d6 100644
|
||||
--- a/absl/random/internal/BUILD.bazel
|
||||
+++ b/absl/random/internal/BUILD.bazel
|
||||
@@ -296,6 +296,7 @@ cc_library(
|
||||
":platform",
|
||||
"//absl/base:config",
|
||||
"//absl/base:core_headers",
|
||||
+ "//absl/base:endian",
|
||||
"//absl/numeric:int128",
|
||||
],
|
||||
)
|
||||
diff --git a/absl/random/internal/randen_slow.cc b/absl/random/internal/randen_slow.cc
|
||||
index 56aeb03..d5c9347 100644
|
||||
--- a/absl/random/internal/randen_slow.cc
|
||||
+++ b/absl/random/internal/randen_slow.cc
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <cstring>
|
||||
|
||||
#include "absl/base/attributes.h"
|
||||
+#include "absl/base/internal/endian.h"
|
||||
#include "absl/numeric/int128.h"
|
||||
#include "absl/random/internal/platform.h"
|
||||
#include "absl/random/internal/randen_traits.h"
|
||||
@@ -40,7 +41,7 @@ namespace {
|
||||
|
||||
// AES portions based on rijndael-alg-fst.c,
|
||||
// https://fastcrypto.org/front/misc/rijndael-alg-fst.c, and modified for
|
||||
-// little-endianness.
|
||||
+// platform-endianness.
|
||||
//
|
||||
// Implementation of
|
||||
// http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf
|
||||
@@ -251,6 +252,7 @@ inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void Vector128Store(
|
||||
inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE Vector128
|
||||
AesRound(const Vector128& state, const Vector128& round_key) {
|
||||
Vector128 result;
|
||||
+#ifdef ABSL_IS_LITTLE_ENDIAN
|
||||
result.s[0] = round_key.s[0] ^ //
|
||||
te0[uint8_t(state.s[0])] ^ //
|
||||
te1[uint8_t(state.s[1] >> 8)] ^ //
|
||||
@@ -271,6 +273,28 @@ AesRound(const Vector128& state, const Vector128& round_key) {
|
||||
te1[uint8_t(state.s[0] >> 8)] ^ //
|
||||
te2[uint8_t(state.s[1] >> 16)] ^ //
|
||||
te3[uint8_t(state.s[2] >> 24)];
|
||||
+#else
|
||||
+ result.s[0] = round_key.s[0] ^ //
|
||||
+ te0[uint8_t(state.s[0])] ^ //
|
||||
+ te1[uint8_t(state.s[3] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[2] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[1] >> 24)];
|
||||
+ result.s[1] = round_key.s[1] ^ //
|
||||
+ te0[uint8_t(state.s[1])] ^ //
|
||||
+ te1[uint8_t(state.s[0] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[3] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[2] >> 24)];
|
||||
+ result.s[2] = round_key.s[2] ^ //
|
||||
+ te0[uint8_t(state.s[2])] ^ //
|
||||
+ te1[uint8_t(state.s[1] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[0] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[3] >> 24)];
|
||||
+ result.s[3] = round_key.s[3] ^ //
|
||||
+ te0[uint8_t(state.s[3])] ^ //
|
||||
+ te1[uint8_t(state.s[2] >> 8)] ^ //
|
||||
+ te2[uint8_t(state.s[1] >> 16)] ^ //
|
||||
+ te3[uint8_t(state.s[0] >> 24)];
|
||||
+#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -380,7 +404,11 @@ namespace random_internal {
|
||||
const void* RandenSlow::GetKeys() {
|
||||
// Round keys for one AES per Feistel round and branch.
|
||||
// The canonical implementation uses first digits of Pi.
|
||||
+#ifdef ABSL_IS_LITTLE_ENDIAN
|
||||
return kRandenRoundKeys;
|
||||
+#else
|
||||
+ return kRandenRoundKeysBE;
|
||||
+#endif
|
||||
}
|
||||
|
||||
void RandenSlow::Absorb(const void* seed_void, void* state_void) {
|
|
@ -1,86 +0,0 @@
|
|||
From: Laramie Leavitt <lar@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Also use uint8_t golden values in randen_test.cc
|
||||
|
||||
Also use uint8_t golden values in randen_test.cc
|
||||
|
||||
This makes randen_test, randen_slow_test, and randen_hwaes_test essentially
|
||||
identical, as is the intent.
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 405484423 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/random/internal/randen_test.cc | 45 ++++++++++++++++++++-----------------
|
||||
1 file changed, 25 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/absl/random/internal/randen_test.cc b/absl/random/internal/randen_test.cc
|
||||
index c186fe0..92773b8 100644
|
||||
--- a/absl/random/internal/randen_test.cc
|
||||
+++ b/absl/random/internal/randen_test.cc
|
||||
@@ -23,9 +23,6 @@ namespace {
|
||||
|
||||
using absl::random_internal::Randen;
|
||||
|
||||
-// Local state parameters.
|
||||
-constexpr size_t kStateSizeT = Randen::kStateBytes / sizeof(uint64_t);
|
||||
-
|
||||
TEST(RandenTest, CopyAndMove) {
|
||||
static_assert(std::is_copy_constructible<Randen>::value,
|
||||
"Randen must be copy constructible");
|
||||
@@ -41,30 +38,38 @@ TEST(RandenTest, CopyAndMove) {
|
||||
}
|
||||
|
||||
TEST(RandenTest, Default) {
|
||||
- constexpr uint64_t kGolden[] = {
|
||||
- 0x6c6534090ee6d3ee, 0x044e2b9b9d5333c6, 0xc3c14f134e433977,
|
||||
- 0xdda9f47cd90410ee, 0x887bf3087fd8ca10, 0xf0b780f545c72912,
|
||||
- 0x15dbb1d37696599f, 0x30ec63baff3c6d59, 0xb29f73606f7f20a6,
|
||||
- 0x02808a316f49a54c, 0x3b8feaf9d5c8e50e, 0x9cbf605e3fd9de8a,
|
||||
- 0xc970ae1a78183bbb, 0xd8b2ffd356301ed5, 0xf4b327fe0fc73c37,
|
||||
- 0xcdfd8d76eb8f9a19, 0xc3a506eb91420c9d, 0xd5af05dd3eff9556,
|
||||
- 0x48db1bb78f83c4a1, 0x7023920e0d6bfe8c, 0x58d3575834956d42,
|
||||
- 0xed1ef4c26b87b840, 0x8eef32a23e0b2df3, 0x497cabf3431154fc,
|
||||
- 0x4e24370570029a8b, 0xd88b5749f090e5ea, 0xc651a582a970692f,
|
||||
- 0x78fcec2cbb6342f5, 0x463cb745612f55db, 0x352ee4ad1816afe3,
|
||||
- 0x026ff374c101da7e, 0x811ef0821c3de851,
|
||||
+ constexpr uint8_t kGolden[] = {
|
||||
+ 0xee, 0xd3, 0xe6, 0x0e, 0x09, 0x34, 0x65, 0x6c, 0xc6, 0x33, 0x53, 0x9d,
|
||||
+ 0x9b, 0x2b, 0x4e, 0x04, 0x77, 0x39, 0x43, 0x4e, 0x13, 0x4f, 0xc1, 0xc3,
|
||||
+ 0xee, 0x10, 0x04, 0xd9, 0x7c, 0xf4, 0xa9, 0xdd, 0x10, 0xca, 0xd8, 0x7f,
|
||||
+ 0x08, 0xf3, 0x7b, 0x88, 0x12, 0x29, 0xc7, 0x45, 0xf5, 0x80, 0xb7, 0xf0,
|
||||
+ 0x9f, 0x59, 0x96, 0x76, 0xd3, 0xb1, 0xdb, 0x15, 0x59, 0x6d, 0x3c, 0xff,
|
||||
+ 0xba, 0x63, 0xec, 0x30, 0xa6, 0x20, 0x7f, 0x6f, 0x60, 0x73, 0x9f, 0xb2,
|
||||
+ 0x4c, 0xa5, 0x49, 0x6f, 0x31, 0x8a, 0x80, 0x02, 0x0e, 0xe5, 0xc8, 0xd5,
|
||||
+ 0xf9, 0xea, 0x8f, 0x3b, 0x8a, 0xde, 0xd9, 0x3f, 0x5e, 0x60, 0xbf, 0x9c,
|
||||
+ 0xbb, 0x3b, 0x18, 0x78, 0x1a, 0xae, 0x70, 0xc9, 0xd5, 0x1e, 0x30, 0x56,
|
||||
+ 0xd3, 0xff, 0xb2, 0xd8, 0x37, 0x3c, 0xc7, 0x0f, 0xfe, 0x27, 0xb3, 0xf4,
|
||||
+ 0x19, 0x9a, 0x8f, 0xeb, 0x76, 0x8d, 0xfd, 0xcd, 0x9d, 0x0c, 0x42, 0x91,
|
||||
+ 0xeb, 0x06, 0xa5, 0xc3, 0x56, 0x95, 0xff, 0x3e, 0xdd, 0x05, 0xaf, 0xd5,
|
||||
+ 0xa1, 0xc4, 0x83, 0x8f, 0xb7, 0x1b, 0xdb, 0x48, 0x8c, 0xfe, 0x6b, 0x0d,
|
||||
+ 0x0e, 0x92, 0x23, 0x70, 0x42, 0x6d, 0x95, 0x34, 0x58, 0x57, 0xd3, 0x58,
|
||||
+ 0x40, 0xb8, 0x87, 0x6b, 0xc2, 0xf4, 0x1e, 0xed, 0xf3, 0x2d, 0x0b, 0x3e,
|
||||
+ 0xa2, 0x32, 0xef, 0x8e, 0xfc, 0x54, 0x11, 0x43, 0xf3, 0xab, 0x7c, 0x49,
|
||||
+ 0x8b, 0x9a, 0x02, 0x70, 0x05, 0x37, 0x24, 0x4e, 0xea, 0xe5, 0x90, 0xf0,
|
||||
+ 0x49, 0x57, 0x8b, 0xd8, 0x2f, 0x69, 0x70, 0xa9, 0x82, 0xa5, 0x51, 0xc6,
|
||||
+ 0xf5, 0x42, 0x63, 0xbb, 0x2c, 0xec, 0xfc, 0x78, 0xdb, 0x55, 0x2f, 0x61,
|
||||
+ 0x45, 0xb7, 0x3c, 0x46, 0xe3, 0xaf, 0x16, 0x18, 0xad, 0xe4, 0x2e, 0x35,
|
||||
+ 0x7e, 0xda, 0x01, 0xc1, 0x74, 0xf3, 0x6f, 0x02, 0x51, 0xe8, 0x3d, 0x1c,
|
||||
+ 0x82, 0xf0, 0x1e, 0x81,
|
||||
};
|
||||
|
||||
- alignas(16) uint64_t state[kStateSizeT];
|
||||
+ alignas(16) uint8_t state[Randen::kStateBytes];
|
||||
std::memset(state, 0, sizeof(state));
|
||||
|
||||
Randen r;
|
||||
r.Generate(state);
|
||||
|
||||
- auto id = std::begin(state);
|
||||
- for (const auto& elem : kGolden) {
|
||||
- EXPECT_EQ(elem, *id++);
|
||||
- }
|
||||
+ EXPECT_EQ(0, std::memcmp(state, kGolden, sizeof(state)));
|
||||
}
|
||||
|
||||
} // namespace
|
|
@ -1,82 +0,0 @@
|
|||
From: Milad Fa <46688537+miladfarca@users.noreply.github.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Fix Randen and PCG on Big Endian platforms (#1031)
|
||||
|
||||
---
|
||||
absl/random/internal/explicit_seed_seq.h | 2 +-
|
||||
absl/random/internal/randen_engine.h | 7 +++++++
|
||||
absl/random/internal/randen_slow.cc | 21 +++++++++++++++++++++
|
||||
3 files changed, 29 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/absl/random/internal/explicit_seed_seq.h b/absl/random/internal/explicit_seed_seq.h
|
||||
index e3aa31a..25f7915 100644
|
||||
--- a/absl/random/internal/explicit_seed_seq.h
|
||||
+++ b/absl/random/internal/explicit_seed_seq.h
|
||||
@@ -74,7 +74,7 @@ class ExplicitSeedSeq {
|
||||
template <typename OutIterator>
|
||||
void generate(OutIterator begin, OutIterator end) {
|
||||
for (size_t index = 0; begin != end; begin++) {
|
||||
- *begin = state_.empty() ? 0 : little_endian::FromHost32(state_[index++]);
|
||||
+ *begin = state_.empty() ? 0 : state_[index++];
|
||||
if (index >= state_.size()) {
|
||||
index = 0;
|
||||
}
|
||||
diff --git a/absl/random/internal/randen_engine.h b/absl/random/internal/randen_engine.h
|
||||
index 92bb890..372c3ac 100644
|
||||
--- a/absl/random/internal/randen_engine.h
|
||||
+++ b/absl/random/internal/randen_engine.h
|
||||
@@ -121,6 +121,13 @@ class alignas(16) randen_engine {
|
||||
const size_t requested_entropy = (entropy_size == 0) ? 8u : entropy_size;
|
||||
std::fill(std::begin(buffer) + requested_entropy, std::end(buffer), 0);
|
||||
seq.generate(std::begin(buffer), std::begin(buffer) + requested_entropy);
|
||||
+#ifdef ABSL_IS_BIG_ENDIAN
|
||||
+ // Randen expects the seed buffer to be in Little Endian; reverse it on
|
||||
+ // Big Endian platforms.
|
||||
+ for (sequence_result_type& e : buffer) {
|
||||
+ e = absl::little_endian::FromHost(e);
|
||||
+ }
|
||||
+#endif
|
||||
// The Randen paper suggests preferentially initializing even-numbered
|
||||
// 128-bit vectors of the randen state (there are 16 such vectors).
|
||||
// The seed data is merged into the state offset by 128-bits, which
|
||||
diff --git a/absl/random/internal/randen_slow.cc b/absl/random/internal/randen_slow.cc
|
||||
index d5c9347..9bfd2a4 100644
|
||||
--- a/absl/random/internal/randen_slow.cc
|
||||
+++ b/absl/random/internal/randen_slow.cc
|
||||
@@ -395,6 +395,23 @@ inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void Permute(
|
||||
}
|
||||
}
|
||||
|
||||
+// Enables native loads in the round loop by pre-swapping.
|
||||
+inline ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE void SwapEndian(
|
||||
+ absl::uint128* state) {
|
||||
+#ifdef ABSL_IS_BIG_ENDIAN
|
||||
+ for (uint32_t block = 0; block < RandenTraits::kFeistelBlocks; ++block) {
|
||||
+ uint64_t new_lo = absl::little_endian::ToHost64(
|
||||
+ static_cast<uint64_t>(state[block] >> 64));
|
||||
+ uint64_t new_hi = absl::little_endian::ToHost64(
|
||||
+ static_cast<uint64_t>((state[block] << 64) >> 64));
|
||||
+ state[block] = (static_cast<absl::uint128>(new_hi) << 64) | new_lo;
|
||||
+ }
|
||||
+#else
|
||||
+ // Avoid warning about unused variable.
|
||||
+ (void)state;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
} // namespace
|
||||
|
||||
namespace absl {
|
||||
@@ -439,8 +456,12 @@ void RandenSlow::Generate(const void* keys_void, void* state_void) {
|
||||
|
||||
const absl::uint128 prev_inner = state[0];
|
||||
|
||||
+ SwapEndian(state);
|
||||
+
|
||||
Permute(state, keys);
|
||||
|
||||
+ SwapEndian(state);
|
||||
+
|
||||
// Ensure backtracking resistance.
|
||||
*state ^= prev_inner;
|
||||
}
|
|
@ -1,126 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:41 +0800
|
||||
Subject: Set package configuration options
|
||||
|
||||
Configure Abseil for Debian.
|
||||
|
||||
- Set the SONAME appropriately.
|
||||
|
||||
- To minimize the possibility of future ABI breakage, treat absl::any,
|
||||
absl::optional, absl::string_view, and absl::variant as their own types
|
||||
(rather than aliases for the std:: versions), and compile everything in an
|
||||
inline namespace.
|
||||
|
||||
- Enable upstream's hardened build mode.
|
||||
|
||||
- Disable Intel SSE2 on i386, since Debian supports some i386 processors
|
||||
without that extension. Keep it enabled on amd64, since all amd64 processors
|
||||
have it.
|
||||
|
||||
- Disable Intel SSSE3 entirely, since no i386 processor supports it and Debian
|
||||
supports amd64 processors without it.
|
||||
---
|
||||
CMake/AbseilHelpers.cmake | 3 ++-
|
||||
absl/base/options.h | 12 ++++++------
|
||||
absl/container/internal/have_sse.h | 10 +---------
|
||||
3 files changed, 9 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake
|
||||
index 54fb8df..eb3eea2 100644
|
||||
--- a/CMake/AbseilHelpers.cmake
|
||||
+++ b/CMake/AbseilHelpers.cmake
|
||||
@@ -263,7 +263,8 @@ Cflags: -I\${includedir}${PC_CFLAGS}\n")
|
||||
if(ABSL_ENABLE_INSTALL)
|
||||
set_target_properties(${_NAME} PROPERTIES
|
||||
OUTPUT_NAME "absl_${_NAME}"
|
||||
- SOVERSION "2103.0.1"
|
||||
+ SOVERSION 20210324
|
||||
+ VERSION "20210324.0.0"
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
diff --git a/absl/base/options.h b/absl/base/options.h
|
||||
index eca879a..6fa836f 100644
|
||||
--- a/absl/base/options.h
|
||||
+++ b/absl/base/options.h
|
||||
@@ -100,7 +100,7 @@
|
||||
// User code should not inspect this macro. To check in the preprocessor if
|
||||
// absl::any is a typedef of std::any, use the feature macro ABSL_USES_STD_ANY.
|
||||
|
||||
-#define ABSL_OPTION_USE_STD_ANY 2
|
||||
+#define ABSL_OPTION_USE_STD_ANY 0
|
||||
|
||||
|
||||
// ABSL_OPTION_USE_STD_OPTIONAL
|
||||
@@ -127,7 +127,7 @@
|
||||
// absl::optional is a typedef of std::optional, use the feature macro
|
||||
// ABSL_USES_STD_OPTIONAL.
|
||||
|
||||
-#define ABSL_OPTION_USE_STD_OPTIONAL 2
|
||||
+#define ABSL_OPTION_USE_STD_OPTIONAL 0
|
||||
|
||||
|
||||
// ABSL_OPTION_USE_STD_STRING_VIEW
|
||||
@@ -154,7 +154,7 @@
|
||||
// absl::string_view is a typedef of std::string_view, use the feature macro
|
||||
// ABSL_USES_STD_STRING_VIEW.
|
||||
|
||||
-#define ABSL_OPTION_USE_STD_STRING_VIEW 2
|
||||
+#define ABSL_OPTION_USE_STD_STRING_VIEW 0
|
||||
|
||||
// ABSL_OPTION_USE_STD_VARIANT
|
||||
//
|
||||
@@ -180,7 +180,7 @@
|
||||
// absl::variant is a typedef of std::variant, use the feature macro
|
||||
// ABSL_USES_STD_VARIANT.
|
||||
|
||||
-#define ABSL_OPTION_USE_STD_VARIANT 2
|
||||
+#define ABSL_OPTION_USE_STD_VARIANT 0
|
||||
|
||||
|
||||
// ABSL_OPTION_USE_INLINE_NAMESPACE
|
||||
@@ -206,7 +206,7 @@
|
||||
// allowed.
|
||||
|
||||
#define ABSL_OPTION_USE_INLINE_NAMESPACE 1
|
||||
-#define ABSL_OPTION_INLINE_NAMESPACE_NAME lts_20210324
|
||||
+#define ABSL_OPTION_INLINE_NAMESPACE_NAME debian2
|
||||
|
||||
// ABSL_OPTION_HARDENED
|
||||
//
|
||||
@@ -233,6 +233,6 @@
|
||||
// checks enabled by this option may abort the program in a different way and
|
||||
// log additional information when `NDEBUG` is not defined.
|
||||
|
||||
-#define ABSL_OPTION_HARDENED 0
|
||||
+#define ABSL_OPTION_HARDENED 1
|
||||
|
||||
#endif // ABSL_BASE_OPTIONS_H_
|
||||
diff --git a/absl/container/internal/have_sse.h b/absl/container/internal/have_sse.h
|
||||
index e75e1a1..4c9a0bc 100644
|
||||
--- a/absl/container/internal/have_sse.h
|
||||
+++ b/absl/container/internal/have_sse.h
|
||||
@@ -17,22 +17,14 @@
|
||||
#define ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_
|
||||
|
||||
#ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
||||
-#if defined(__SSE2__) || \
|
||||
- (defined(_MSC_VER) && \
|
||||
- (defined(_M_X64) || (defined(_M_IX86) && _M_IX86_FP >= 2)))
|
||||
+#if defined(__x86_64__) || (defined(_MSC_VER) && defined(_M_X64))
|
||||
#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 1
|
||||
#else
|
||||
#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
-#ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
|
||||
-#ifdef __SSSE3__
|
||||
-#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 1
|
||||
-#else
|
||||
#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 0
|
||||
-#endif
|
||||
-#endif
|
||||
|
||||
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 && \
|
||||
!ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
|
@ -1,24 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Fix typo in CordRepRing error message
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 367481280 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/strings/internal/cord_rep_ring.cc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/absl/strings/internal/cord_rep_ring.cc b/absl/strings/internal/cord_rep_ring.cc
|
||||
index 4d31d1d..39ac4e9 100644
|
||||
--- a/absl/strings/internal/cord_rep_ring.cc
|
||||
+++ b/absl/strings/internal/cord_rep_ring.cc
|
||||
@@ -301,7 +301,7 @@ bool CordRepRing::IsValid(std::ostream& output) const {
|
||||
if (offset >= child->length || entry_length > child->length - offset) {
|
||||
output << "entry[" << head << "] has offset " << offset
|
||||
<< " and entry length " << entry_length
|
||||
- << " which are outside of the childs length of " << child->length;
|
||||
+ << " which are outside of the child's length of " << child->length;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Eliminate libabsl_flags.so and libabsl_flags.a
|
||||
|
||||
The libabsl_flags library only contains code when compiling with MSVC, which
|
||||
Debian doesn't use. Skip compiling absl/flags/flag.cc, and make the Abseil flags
|
||||
library header-only.
|
||||
---
|
||||
absl/flags/CMakeLists.txt | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/absl/flags/CMakeLists.txt b/absl/flags/CMakeLists.txt
|
||||
index caac69c..9c00d4e 100644
|
||||
--- a/absl/flags/CMakeLists.txt
|
||||
+++ b/absl/flags/CMakeLists.txt
|
||||
@@ -197,8 +197,6 @@ absl_cc_library(
|
||||
absl_cc_library(
|
||||
NAME
|
||||
flags
|
||||
- SRCS
|
||||
- "flag.cc"
|
||||
HDRS
|
||||
"declare.h"
|
||||
"flag.h"
|
|
@ -1,53 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Round floats using round(x), not static_cast<int>(x + 0.5)
|
||||
|
||||
Adding 0.5 to an IEEE float may cause one bit of precision loss, which
|
||||
is enough to change the result in certain cases. For example,
|
||||
|
||||
static_cast<int>(std::round(0.49999999999999994)) == 0
|
||||
static_cast<int>(0.49999999999999994 + 0.5) == 1
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 369926519 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/time/duration_test.cc | 4 ++--
|
||||
absl/time/time.h | 2 +-
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/absl/time/duration_test.cc b/absl/time/duration_test.cc
|
||||
index fb28fa9..a3617e7 100644
|
||||
--- a/absl/time/duration_test.cc
|
||||
+++ b/absl/time/duration_test.cc
|
||||
@@ -1320,7 +1320,7 @@ TEST(Duration, SmallConversions) {
|
||||
|
||||
EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(0));
|
||||
// TODO(bww): Is the next one OK?
|
||||
- EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(0.124999999e-9));
|
||||
+ EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(std::nextafter(0.125e-9, 0)));
|
||||
EXPECT_EQ(absl::Nanoseconds(1) / 4, absl::Seconds(0.125e-9));
|
||||
EXPECT_EQ(absl::Nanoseconds(1) / 4, absl::Seconds(0.250e-9));
|
||||
EXPECT_EQ(absl::Nanoseconds(1) / 2, absl::Seconds(0.375e-9));
|
||||
@@ -1330,7 +1330,7 @@ TEST(Duration, SmallConversions) {
|
||||
EXPECT_EQ(absl::Nanoseconds(1), absl::Seconds(0.875e-9));
|
||||
EXPECT_EQ(absl::Nanoseconds(1), absl::Seconds(1.000e-9));
|
||||
|
||||
- EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(-0.124999999e-9));
|
||||
+ EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(std::nextafter(-0.125e-9, 0)));
|
||||
EXPECT_EQ(-absl::Nanoseconds(1) / 4, absl::Seconds(-0.125e-9));
|
||||
EXPECT_EQ(-absl::Nanoseconds(1) / 4, absl::Seconds(-0.250e-9));
|
||||
EXPECT_EQ(-absl::Nanoseconds(1) / 2, absl::Seconds(-0.375e-9));
|
||||
diff --git a/absl/time/time.h b/absl/time/time.h
|
||||
index 2df6858..48982df 100644
|
||||
--- a/absl/time/time.h
|
||||
+++ b/absl/time/time.h
|
||||
@@ -1352,7 +1352,7 @@ constexpr Duration MakeDuration(int64_t hi, int64_t lo) {
|
||||
inline Duration MakePosDoubleDuration(double n) {
|
||||
const int64_t int_secs = static_cast<int64_t>(n);
|
||||
const uint32_t ticks = static_cast<uint32_t>(
|
||||
- (n - static_cast<double>(int_secs)) * kTicksPerSecond + 0.5);
|
||||
+ std::round((n - static_cast<double>(int_secs)) * kTicksPerSecond));
|
||||
return ticks < kTicksPerSecond
|
||||
? MakeDuration(int_secs, ticks)
|
||||
: MakeDuration(int_secs + 1, ticks - kTicksPerSecond);
|
|
@ -1,160 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Skip floating-point edge-case tests when using an x87
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
32-bit Intel CPUs use 80-bit floats for intermediate values, which can
|
||||
change the results of floating point computations from what we normally
|
||||
expect. Identify tests that are sensitive to the x87, and skip them when
|
||||
we’re on 32-bit Intel.
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 378722613 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/random/beta_distribution_test.cc | 9 +++++++++
|
||||
absl/random/distributions_test.cc | 10 ++++++++++
|
||||
absl/random/exponential_distribution_test.cc | 10 ++++++++++
|
||||
absl/random/uniform_real_distribution_test.cc | 9 +++++++++
|
||||
absl/time/duration_test.cc | 9 +++++++++
|
||||
5 files changed, 47 insertions(+)
|
||||
|
||||
diff --git a/absl/random/beta_distribution_test.cc b/absl/random/beta_distribution_test.cc
|
||||
index 44cdfdd..d980c96 100644
|
||||
--- a/absl/random/beta_distribution_test.cc
|
||||
+++ b/absl/random/beta_distribution_test.cc
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "absl/random/beta_distribution.h"
|
||||
|
||||
#include <algorithm>
|
||||
+#include <cfloat>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <iterator>
|
||||
@@ -558,6 +559,14 @@ TEST(BetaDistributionTest, StabilityTest) {
|
||||
// dependencies of the distribution change, such as RandU64ToDouble, then this
|
||||
// is also likely to change.
|
||||
TEST(BetaDistributionTest, AlgorithmBounds) {
|
||||
+#if (defined(__i386__) || defined(_M_IX86)) && FLT_EVAL_METHOD != 0
|
||||
+ // We're using an x87-compatible FPU, and intermediate operations are
|
||||
+ // performed with 80-bit floats. This produces slightly different results from
|
||||
+ // what we expect below.
|
||||
+ GTEST_SKIP()
|
||||
+ << "Skipping the test because we detected x87 floating-point semantics";
|
||||
+#endif
|
||||
+
|
||||
{
|
||||
absl::random_internal::sequence_urbg urbg(
|
||||
{0x7fbe76c8b4395800ull, 0x8000000000000000ull});
|
||||
diff --git a/absl/random/distributions_test.cc b/absl/random/distributions_test.cc
|
||||
index 5866a07..d3a5dd7 100644
|
||||
--- a/absl/random/distributions_test.cc
|
||||
+++ b/absl/random/distributions_test.cc
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
#include "absl/random/distributions.h"
|
||||
|
||||
+#include <cfloat>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <random>
|
||||
@@ -224,6 +225,15 @@ TEST_F(RandomDistributionsTest, UniformNoBounds) {
|
||||
TEST_F(RandomDistributionsTest, UniformNonsenseRanges) {
|
||||
// The ranges used in this test are undefined behavior.
|
||||
// The results are arbitrary and subject to future changes.
|
||||
+
|
||||
+#if (defined(__i386__) || defined(_M_IX86)) && FLT_EVAL_METHOD != 0
|
||||
+ // We're using an x87-compatible FPU, and intermediate operations can be
|
||||
+ // performed with 80-bit floats. This produces slightly different results from
|
||||
+ // what we expect below.
|
||||
+ GTEST_SKIP()
|
||||
+ << "Skipping the test because we detected x87 floating-point semantics";
|
||||
+#endif
|
||||
+
|
||||
absl::InsecureBitGen gen;
|
||||
|
||||
// <uint>
|
||||
diff --git a/absl/random/exponential_distribution_test.cc b/absl/random/exponential_distribution_test.cc
|
||||
index af11d61..81a5d17 100644
|
||||
--- a/absl/random/exponential_distribution_test.cc
|
||||
+++ b/absl/random/exponential_distribution_test.cc
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "absl/random/exponential_distribution.h"
|
||||
|
||||
#include <algorithm>
|
||||
+#include <cfloat>
|
||||
#include <cmath>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
@@ -384,6 +385,15 @@ TEST(ExponentialDistributionTest, StabilityTest) {
|
||||
TEST(ExponentialDistributionTest, AlgorithmBounds) {
|
||||
// Relies on absl::uniform_real_distribution, so some of these comments
|
||||
// reference that.
|
||||
+
|
||||
+#if (defined(__i386__) || defined(_M_IX86)) && FLT_EVAL_METHOD != 0
|
||||
+ // We're using an x87-compatible FPU, and intermediate operations can be
|
||||
+ // performed with 80-bit floats. This produces slightly different results from
|
||||
+ // what we expect below.
|
||||
+ GTEST_SKIP()
|
||||
+ << "Skipping the test because we detected x87 floating-point semantics";
|
||||
+#endif
|
||||
+
|
||||
absl::exponential_distribution<double> dist;
|
||||
|
||||
{
|
||||
diff --git a/absl/random/uniform_real_distribution_test.cc b/absl/random/uniform_real_distribution_test.cc
|
||||
index 18bcd3b..035bd28 100644
|
||||
--- a/absl/random/uniform_real_distribution_test.cc
|
||||
+++ b/absl/random/uniform_real_distribution_test.cc
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
#include "absl/random/uniform_real_distribution.h"
|
||||
|
||||
+#include <cfloat>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <iterator>
|
||||
@@ -70,6 +71,14 @@ using RealTypes =
|
||||
TYPED_TEST_SUITE(UniformRealDistributionTest, RealTypes);
|
||||
|
||||
TYPED_TEST(UniformRealDistributionTest, ParamSerializeTest) {
|
||||
+#if (defined(__i386__) || defined(_M_IX86)) && FLT_EVAL_METHOD != 0
|
||||
+ // We're using an x87-compatible FPU, and intermediate operations are
|
||||
+ // performed with 80-bit floats. This produces slightly different results from
|
||||
+ // what we expect below.
|
||||
+ GTEST_SKIP()
|
||||
+ << "Skipping the test because we detected x87 floating-point semantics";
|
||||
+#endif
|
||||
+
|
||||
using param_type =
|
||||
typename absl::uniform_real_distribution<TypeParam>::param_type;
|
||||
|
||||
diff --git a/absl/time/duration_test.cc b/absl/time/duration_test.cc
|
||||
index a3617e7..b7209e1 100644
|
||||
--- a/absl/time/duration_test.cc
|
||||
+++ b/absl/time/duration_test.cc
|
||||
@@ -17,6 +17,7 @@
|
||||
#endif
|
||||
|
||||
#include <chrono> // NOLINT(build/c++11)
|
||||
+#include <cfloat>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <ctime>
|
||||
@@ -1390,6 +1391,14 @@ void VerifyApproxSameAsMul(double time_as_seconds, int* const misses) {
|
||||
// Seconds(point) returns a duration near point * Seconds(1.0). (They may
|
||||
// not be exactly equal due to fused multiply/add contraction.)
|
||||
TEST(Duration, ToDoubleSecondsCheckEdgeCases) {
|
||||
+#if (defined(__i386__) || defined(_M_IX86)) && FLT_EVAL_METHOD != 0
|
||||
+ // We're using an x87-compatible FPU, and intermediate operations can be
|
||||
+ // performed with 80-bit floats. This means the edge cases are different than
|
||||
+ // what we expect here, so just skip this test.
|
||||
+ GTEST_SKIP()
|
||||
+ << "Skipping the test because we detected x87 floating-point semantics";
|
||||
+#endif
|
||||
+
|
||||
constexpr uint32_t kTicksPerSecond = absl::time_internal::kTicksPerSecond;
|
||||
constexpr auto duration_tick = absl::time_internal::MakeDuration(0, 1u);
|
||||
int misses = 0;
|
|
@ -1,25 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Use libatomic if necessary
|
||||
|
||||
On some architectures, notably armel, Abseil needs symbols defined in
|
||||
libatomic. Abseil does not currently have a well-developed system to
|
||||
declare external library dependencies, so just have the linker determine
|
||||
if anything needs libatomic and add the DT_NEEDED entry where necessary.
|
||||
---
|
||||
absl/copts/AbseilConfigureCopts.cmake | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/absl/copts/AbseilConfigureCopts.cmake b/absl/copts/AbseilConfigureCopts.cmake
|
||||
index 942ce90..231182a 100644
|
||||
--- a/absl/copts/AbseilConfigureCopts.cmake
|
||||
+++ b/absl/copts/AbseilConfigureCopts.cmake
|
||||
@@ -62,4 +62,8 @@ else()
|
||||
set(ABSL_TEST_COPTS "")
|
||||
endif()
|
||||
|
||||
+list(APPEND ABSL_DEFAULT_LINKOPTS
|
||||
+ "-Wl,--push-state,--as-needed" "-latomic" "-Wl,--pop-state"
|
||||
+)
|
||||
+
|
||||
set(ABSL_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
|
|
@ -1,49 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Round a double multiplication before casting it to integer
|
||||
|
||||
The code
|
||||
|
||||
static_cast<int>(x * y)
|
||||
|
||||
(for double x and y) performs a double multiplication into a temporary
|
||||
that, by standard, may have excess precision. The subsequent cast to int
|
||||
discards the excess precision. However, the cast may examine the excess
|
||||
precision during conversion, producing surprising results like
|
||||
|
||||
static_cast<int>(1.7 * 10) == 16
|
||||
|
||||
on certain systems. Correct this case by explicitly rounding 1.7 * 10
|
||||
before casting it.
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 378922064 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/random/mocking_bit_gen_test.cc | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/absl/random/mocking_bit_gen_test.cc b/absl/random/mocking_bit_gen_test.cc
|
||||
index f63b6e4..c713cea 100644
|
||||
--- a/absl/random/mocking_bit_gen_test.cc
|
||||
+++ b/absl/random/mocking_bit_gen_test.cc
|
||||
@@ -15,6 +15,7 @@
|
||||
//
|
||||
#include "absl/random/mocking_bit_gen.h"
|
||||
|
||||
+#include <cmath>
|
||||
#include <numeric>
|
||||
#include <random>
|
||||
|
||||
@@ -328,8 +329,9 @@ TEST(BasicMocking, WillByDefaultWithArgs) {
|
||||
|
||||
absl::MockingBitGen gen;
|
||||
ON_CALL(absl::MockPoisson<int>(), Call(gen, _))
|
||||
- .WillByDefault(
|
||||
- [](double lambda) { return static_cast<int>(lambda * 10); });
|
||||
+ .WillByDefault([](double lambda) {
|
||||
+ return static_cast<int>(std::rint(lambda * 10));
|
||||
+ });
|
||||
EXPECT_EQ(absl::Poisson<int>(gen, 1.7), 17);
|
||||
EXPECT_EQ(absl::Poisson<int>(gen, 0.03), 0);
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
From: Benjamin Barenblat <bbaren@google.com>
|
||||
Date: Tue, 24 May 2022 23:47:42 +0800
|
||||
Subject: Correct Thumb function bound computation in the symbolizer
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
On 32-bit ARM, all functions are aligned to multiples of two bytes, and
|
||||
the lowest-order bit in a function’s address is ignored by the CPU when
|
||||
computing branch targets. That bit is still present in instructions and
|
||||
ELF symbol tables, though; it’s repurposed to indicate whether the
|
||||
function contains ARM or Thumb code. If the symbolizer doesn’t ignore
|
||||
that bit, it will believe Thumb functions have boundaries that are off
|
||||
by one byte, so instruct the symbolizer to null out the lowest-order bit
|
||||
after retrieving it from the symbol table.
|
||||
|
||||
The author works at Google. Upstream applied this patch as Piper
|
||||
revision 369254082 and exported it to GitHub; the Applied-Upstream URL
|
||||
above points to the exported commit.
|
||||
---
|
||||
absl/debugging/symbolize_elf.inc | 10 ++++++++++
|
||||
absl/debugging/symbolize_test.cc | 43 ++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 53 insertions(+)
|
||||
|
||||
diff --git a/absl/debugging/symbolize_elf.inc b/absl/debugging/symbolize_elf.inc
|
||||
index f4d5727..87dbd07 100644
|
||||
--- a/absl/debugging/symbolize_elf.inc
|
||||
+++ b/absl/debugging/symbolize_elf.inc
|
||||
@@ -701,6 +701,16 @@ static ABSL_ATTRIBUTE_NOINLINE FindSymbolResult FindSymbol(
|
||||
const char *start_address =
|
||||
ComputeOffset(original_start_address, relocation);
|
||||
|
||||
+#ifdef __arm__
|
||||
+ // ARM functions are always aligned to multiples of two bytes; the
|
||||
+ // lowest-order bit in start_address is ignored by the CPU and indicates
|
||||
+ // whether the function contains ARM (0) or Thumb (1) code. We don't care
|
||||
+ // about what encoding is being used; we just want the real start address
|
||||
+ // of the function.
|
||||
+ start_address = reinterpret_cast<const char *>(
|
||||
+ reinterpret_cast<uintptr_t>(start_address) & ~1);
|
||||
+#endif
|
||||
+
|
||||
if (deref_function_descriptor_pointer &&
|
||||
InSection(original_start_address, opd)) {
|
||||
// The opd section is mapped into memory. Just dereference
|
||||
diff --git a/absl/debugging/symbolize_test.cc b/absl/debugging/symbolize_test.cc
|
||||
index a2dd495..35de02e 100644
|
||||
--- a/absl/debugging/symbolize_test.cc
|
||||
+++ b/absl/debugging/symbolize_test.cc
|
||||
@@ -477,6 +477,46 @@ void ABSL_ATTRIBUTE_NOINLINE TestWithReturnAddress() {
|
||||
#endif
|
||||
}
|
||||
|
||||
+#if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
|
||||
+// Test that we correctly identify bounds of Thumb functions on ARM.
|
||||
+//
|
||||
+// Thumb functions have the lowest-order bit set in their addresses in the ELF
|
||||
+// symbol table. This requires some extra logic to properly compute function
|
||||
+// bounds. To test this logic, nudge a Thumb function right up against an ARM
|
||||
+// function and try to symbolize the ARM function.
|
||||
+//
|
||||
+// A naive implementation will simply use the Thumb function's entry point as
|
||||
+// written in the symbol table and will therefore treat the Thumb function as
|
||||
+// extending one byte further in the instruction stream than it actually does.
|
||||
+// When asked to symbolize the start of the ARM function, it will identify an
|
||||
+// overlap between the Thumb and ARM functions, and it will return the name of
|
||||
+// the Thumb function.
|
||||
+//
|
||||
+// A correct implementation, on the other hand, will null out the lowest-order
|
||||
+// bit in the Thumb function's entry point. It will correctly compute the end of
|
||||
+// the Thumb function, it will find no overlap between the Thumb and ARM
|
||||
+// functions, and it will return the name of the ARM function.
|
||||
+
|
||||
+__attribute__((target("thumb"))) int ArmThumbOverlapThumb(int x) {
|
||||
+ return x * x * x;
|
||||
+}
|
||||
+
|
||||
+__attribute__((target("arm"))) int ArmThumbOverlapArm(int x) {
|
||||
+ return x * x * x;
|
||||
+}
|
||||
+
|
||||
+void ABSL_ATTRIBUTE_NOINLINE TestArmThumbOverlap() {
|
||||
+#if defined(ABSL_HAVE_ATTRIBUTE_NOINLINE)
|
||||
+ const char *symbol = TrySymbolize((void *)&ArmThumbOverlapArm);
|
||||
+ ABSL_RAW_CHECK(symbol != nullptr, "TestArmThumbOverlap failed");
|
||||
+ ABSL_RAW_CHECK(strcmp("ArmThumbOverlapArm()", symbol) == 0,
|
||||
+ "TestArmThumbOverlap failed");
|
||||
+ std::cout << "TestArmThumbOverlap passed" << std::endl;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+#endif // defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
|
||||
+
|
||||
#elif defined(_WIN32)
|
||||
#if !defined(ABSL_CONSUME_DLL)
|
||||
|
||||
@@ -551,6 +591,9 @@ int main(int argc, char **argv) {
|
||||
TestWithPCInsideInlineFunction();
|
||||
TestWithPCInsideNonInlineFunction();
|
||||
TestWithReturnAddress();
|
||||
+#if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
|
||||
+ TestArmThumbOverlap();
|
||||
+#endif
|
||||
#endif
|
||||
|
||||
return RUN_ALL_TESTS();
|
|
@ -19,9 +19,12 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+bindnow reproducible=+fixfilepath
|
|||
|
||||
# Unit tests require more than 2 GB of RAM, so disable them on mipsel.
|
||||
#
|
||||
# Unit tests are not yet passing on hppa or ppc64, so disable them there as
|
||||
# well.
|
||||
ifneq ($(filter $(DEB_HOST_ARCH),hppa mipsel ppc64),)
|
||||
# Unit tests are not yet passing on ppc64, so disable them there as well.
|
||||
#
|
||||
# Disable unit tests unconditionally if nocheck is set.
|
||||
ifneq ($(filter $(DEB_HOST_ARCH),mipsel ppc64),)
|
||||
ABSL_RUN_TESTS=OFF
|
||||
else ifneq ($(filter nocheck,$(DEB_BUILD_OPTIONS)),)
|
||||
ABSL_RUN_TESTS=OFF
|
||||
else
|
||||
ABSL_RUN_TESTS=ON
|
||||
|
@ -35,11 +38,11 @@ override_dh_auto_clean:
|
|||
$(RM) -r $(CURDIR)/shared
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -Bstatic -- -DCMAKE_CXX_STANDARD=14 -DBUILD_SHARED_LIBS=OFF
|
||||
dh_auto_configure -Bstatic -- -DCMAKE_CXX_STANDARD=17 -DBUILD_SHARED_LIBS=OFF
|
||||
ifeq ($(ABSL_RUN_TESTS),ON)
|
||||
dh_auto_configure -Bshared -- -DCMAKE_CXX_STANDARD=14 -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DABSL_USE_GOOGLETEST_HEAD=OFF
|
||||
dh_auto_configure -Bshared -- -DCMAKE_CXX_STANDARD=17 -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DABSL_BUILD_TESTING=ON -DABSL_USE_GOOGLETEST_HEAD=OFF
|
||||
else
|
||||
dh_auto_configure -Bshared -- -DCMAKE_CXX_STANDARD=14 -DBUILD_SHARED_LIBS=ON
|
||||
dh_auto_configure -Bshared -- -DCMAKE_CXX_STANDARD=17 -DBUILD_SHARED_LIBS=ON
|
||||
endif
|
||||
|
||||
override_dh_auto_build:
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2020 Google LLC
|
||||
#!/bin/sh
|
||||
# Copyright 2022 Google LLC
|
||||
#
|
||||
# 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
|
||||
|
@ -12,5 +13,12 @@
|
|||
# License for the specific language governing permissions and limitations under
|
||||
# the License.
|
||||
|
||||
[DEFAULT]
|
||||
upstream-tag = 20210324.2
|
||||
set -eu
|
||||
|
||||
readonly TMP="$(mktemp -d)"
|
||||
trap "rm -rf \"$TMP\"" EXIT
|
||||
cd "$TMP"
|
||||
|
||||
echo 'int main() {}' >noop.cc
|
||||
|
||||
g++ -o noop noop.cc $(pkg-config --cflags absl_base) $(pkg-config --libs absl_base)
|
|
@ -32,7 +32,7 @@ EOF
|
|||
cat >CMakeLists.txt <<EOF
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
project(test CXX)
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
add_executable(test test.cc)
|
||||
find_package(absl REQUIRED)
|
||||
target_link_libraries(test absl::strings)
|
||||
|
|
|
@ -17,3 +17,6 @@ Depends: @, g++, libgtest-dev
|
|||
|
||||
Tests: cmake
|
||||
Depends: @, cmake (>= 3.5), g++, make
|
||||
|
||||
Tests: bug1011294
|
||||
Depends: @, g++, pkg-config
|
||||
|
|
Loading…
Reference in New Issue