diff options
141 files changed, 3280 insertions, 1939 deletions
diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index 9cffa58229e..86b1201792d 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -1570,7 +1570,8 @@ function(qt_run_config_compile_test name) endif() if(arg_CXX_STANDARD) - if(${arg_CXX_STANDARD} LESS 23 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20") + if((${arg_CXX_STANDARD} LESS 23 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20") AND + (${arg_CXX_STANDARD} LESS 26 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25")) set(CMAKE_CXX_STANDARD "${arg_CXX_STANDARD}") set(CMAKE_CXX_STANDARD_REQUIRED OFF) endif() diff --git a/cmake/QtFlagHandlingHelpers.cmake b/cmake/QtFlagHandlingHelpers.cmake index 1747e7c7197..67d6f37e36d 100644 --- a/cmake/QtFlagHandlingHelpers.cmake +++ b/cmake/QtFlagHandlingHelpers.cmake @@ -359,7 +359,9 @@ endfunction() function(qt_set_language_standards) ## Use the latest standard the compiler supports (same as qt_common.prf) - if (QT_FEATURE_cxx2b) + if (QT_FEATURE_cxx2c) + set(CMAKE_CXX_STANDARD 26 PARENT_SCOPE) + elseif (QT_FEATURE_cxx2b) set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE) elseif (QT_FEATURE_cxx20) set(CMAKE_CXX_STANDARD 20 PARENT_SCOPE) diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake index a1f4cb7281c..1b0adccd5b5 100644 --- a/cmake/QtInternalTargets.cmake +++ b/cmake/QtInternalTargets.cmake @@ -94,6 +94,18 @@ function(qt_internal_set_warnings_are_errors_flags target target_scope) ${language_args} ) endif() + if(APPLE) + qt_internal_add_compiler_dependent_flags("${target}" ${target_scope} + COMPILERS CLANG AppleClang + CONDITIONS $<BOOL:$<TARGET_PROPERTY:UNITY_BUILD>> + OPTIONS + -Wno-error=nullability-completeness + COMMON_CONDITIONS + ${common_conditions} + LANGUAGES + OBJCXX + ) + endif() # Other options are gated at compile time that are not likely to change between different build # environments of other modules. if(ANDROID) diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake index ecfdb740d71..f7ab67455ce 100644 --- a/cmake/QtModuleHelpers.cmake +++ b/cmake/QtModuleHelpers.cmake @@ -1554,8 +1554,9 @@ function(qt_describe_module target) endif() if(ANDROID) string(APPEND targets_information - "${indent5}\"api_version\": \"${QT_ANDROID_API_USED_FOR_JAVA}\", -${indent5}\"ndk_version\": \"${ANDROID_NDK_REVISION}\",\n") + "${indent5}\"api_version\": \"${QT_ANDROID_API_USED_FOR_JAVA}\",\n" + "${indent5}\"ndk_version\": \"${ANDROID_NDK_REVISION}\",\n" + "${indent5}\"android_platform\": \"${ANDROID_PLATFORM}\",\n") endif() string(APPEND targets_information "${indent5}\"architecture\": \"${architecture}\",\n") string(APPEND targets_information "${indent5}\"abi\": \"${TEST_arch_${architecture}_abi}\"\n") diff --git a/cmake/QtPublicWasmToolchainHelpers.cmake b/cmake/QtPublicWasmToolchainHelpers.cmake index ecdca052113..32309ed05ba 100644 --- a/cmake/QtPublicWasmToolchainHelpers.cmake +++ b/cmake/QtPublicWasmToolchainHelpers.cmake @@ -53,7 +53,7 @@ endfunction() function(__qt_internal_get_emcc_recommended_version out_var) # This version of Qt needs this version of emscripten. - set(QT_EMCC_RECOMMENDED_VERSION "3.1.70") + set(QT_EMCC_RECOMMENDED_VERSION "4.0.7") set(${out_var} "${QT_EMCC_RECOMMENDED_VERSION}" PARENT_SCOPE) endfunction() diff --git a/coin/instructions/cmake_run_ctest.yaml b/coin/instructions/cmake_run_ctest.yaml index 0c58a83b209..43963fc172b 100644 --- a/coin/instructions/cmake_run_ctest.yaml +++ b/coin/instructions/cmake_run_ctest.yaml @@ -151,6 +151,8 @@ instructions: userMessageOnFailure: > Failed to copy LastTest.log to testresults directory. executeOn: always + maxTimeInSeconds: 20 + maxTimeBetweenOutput: 20 - type: Group enable_if: condition: runtime diff --git a/configure.cmake b/configure.cmake index 4ca5f7f07d2..92fe4dba448 100644 --- a/configure.cmake +++ b/configure.cmake @@ -292,6 +292,25 @@ int main(void) CXX_STANDARD 23 ) +qt_config_compile_test(cxx2c + LABEL "C++2c support" + CODE +"#if __cplusplus > 202302L +// Compiler claims to support C++2c, trust it +#else +# error __cplusplus must be > 202302L (the value for C++23) +#endif + +int main(void) +{ + /* BEGIN TEST: */ + /* END TEST: */ + return 0; +} +" + CXX_STANDARD 26 +) + qt_config_compiler_supports_flag_test(optimize_debug LABEL "-Og support" FLAG "-Og" @@ -730,6 +749,12 @@ qt_feature("c++2b" PUBLIC CONDITION QT_FEATURE_cxx20 AND (CMAKE_VERSION VERSION_GREATER_EQUAL "3.20") AND TEST_cxx2b ) qt_feature_config("c++2b" QMAKE_PUBLIC_QT_CONFIG) +qt_feature("c++2c" PUBLIC + LABEL "C++2c" + AUTODETECT OFF + CONDITION QT_FEATURE_cxx2b AND (CMAKE_VERSION VERSION_GREATER_EQUAL "3.25") AND TEST_cxx2c +) +qt_feature_config("c++2c" QMAKE_PUBLIC_QT_CONFIG) set(__qt_ltcg_detected FALSE) if(CMAKE_INTERPROCEDURAL_OPTIMIZATION) set(__qt_ltcg_detected TRUE) diff --git a/licenseRule.json b/licenseRule.json index e35e8ba7fd1..b40e225e347 100644 --- a/licenseRule.json +++ b/licenseRule.json @@ -119,7 +119,7 @@ "file type": "test", "spdx": ["LicenseRef-Qt-Commercial OR GPL-3.0-only"] }, - "ests/auto/testlib/selftests/": { + "tests/auto/testlib/selftests/(?!README)": { "comment": "Exception. Those are test files", "file type": "test", "spdx": ["LicenseRef-Qt-Commercial OR GPL-3.0-only"] diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf index 6eb08a9d2fa..82c6173a037 100644 --- a/mkspecs/common/clang.conf +++ b/mkspecs/common/clang.conf @@ -36,11 +36,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y QMAKE_CXXFLAGS_CXX1Z = -std=c++1z QMAKE_CXXFLAGS_CXX2A = -std=c++2a QMAKE_CXXFLAGS_CXX2B = -std=c++2b +QMAKE_CXXFLAGS_CXX2C = -std=c++2c QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11 QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b +QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c QMAKE_LFLAGS_CXX11 = QMAKE_LFLAGS_CXX14 = diff --git a/mkspecs/common/g++-base.conf b/mkspecs/common/g++-base.conf index d392879f66d..e12e41506ae 100644 --- a/mkspecs/common/g++-base.conf +++ b/mkspecs/common/g++-base.conf @@ -34,11 +34,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y QMAKE_CXXFLAGS_CXX1Z = -std=c++1z QMAKE_CXXFLAGS_CXX2A = -std=c++2a QMAKE_CXXFLAGS_CXX2B = -std=c++2b +QMAKE_CXXFLAGS_CXX2C = -std=c++2c QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11 QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b +QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c QMAKE_LFLAGS_CXX11 = QMAKE_LFLAGS_CXX14 = QMAKE_LFLAGS_CXX1Z = diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf index 303b341e9d7..0130542ddb9 100644 --- a/mkspecs/common/msvc-version.conf +++ b/mkspecs/common/msvc-version.conf @@ -121,6 +121,7 @@ greaterThan(QMAKE_MSC_VER, 1919) { MSVC_TOOLSET_VER = 142 QMAKE_CXXFLAGS_CXX2A = -std:c++latest QMAKE_CXXFLAGS_CXX2B = -std:c++latest + QMAKE_CXXFLAGS_CXX2C = -std:c++latest QMAKE_CXXFLAGS += -Zc:externConstexpr } diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index a44d03c91bb..cf48bfda07f 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -124,17 +124,18 @@ breakpad { c++17: CONFIG += c++1z c++20: CONFIG += c++2a c++23: CONFIG += c++2b -c++latest: CONFIG *= c++2b c++2a c++1z c++14 c++11 +c++latest: CONFIG *= c++2c c++2b c++2a c++1z c++14 c++11 -!c++1z:!c++2a:!c++2b { +!c++1z:!c++2a:!c++2b:!c++2c { # Qt requires C++17 QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "") !greaterThan(QT_COMPILER_STDCXX_no_L, 201402): CONFIG += c++1z } -c++1z|c++2a|c++2b { +c++1z|c++2a|c++2b|c++2c { # Disable special compiler flags for host builds !host_build|!cross_compile { - c++2b: cxxstd = CXX2B + c++2c: cxxstd = CXX2C + else:c++2b: cxxstd = CXX2B else:c++2a: cxxstd = CXX2A else: cxxstd = CXX1Z } else { diff --git a/mkspecs/features/wasm/emcc_ver.prf b/mkspecs/features/wasm/emcc_ver.prf index 2f801228797..bb59844c4d5 100644 --- a/mkspecs/features/wasm/emcc_ver.prf +++ b/mkspecs/features/wasm/emcc_ver.prf @@ -1,5 +1,5 @@ defineReplace(qtEmccRecommendedVersion) { - return (3.1.70) + return (4.0.7) } defineReplace(qtSystemEmccVersion) { diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp index 96036eba701..9c29b26fb82 100644 --- a/qmake/generators/unix/unixmake2.cpp +++ b/qmake/generators/unix/unixmake2.cpp @@ -804,7 +804,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) QString icon = fileFixify(var("ICON")); t << "@$(DEL_FILE) " << info_plist_out << "\n\t" - << "@plutil -convert xml1 -o - " << info_plist << " | " + << "@set -o pipefail && plutil -convert xml1 -o - " << info_plist << " | " << "sed "; for (const ProString &arg : std::as_const(commonSedArgs)) t << arg; @@ -837,7 +837,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) if (!isShallowBundle) symlinks[bundle_dir + "Resources"] = "Versions/Current/Resources"; t << "@$(DEL_FILE) " << info_plist_out << "\n\t" - << "@plutil -convert xml1 -o - " << info_plist << " | " + << "@set -o pipefail && plutil -convert xml1 -o - " << info_plist << " | " << "sed "; for (const ProString &arg : std::as_const(commonSedArgs)) t << arg; diff --git a/qt_cmdline.cmake b/qt_cmdline.cmake index 3abd265e9c7..8f68a40f3ff 100644 --- a/qt_cmdline.cmake +++ b/qt_cmdline.cmake @@ -174,12 +174,19 @@ function(qt_commandline_cxxstd arg val nextok) if(val MATCHES "(c\\+\\+)?(17|1z)") qtConfCommandlineDisableFeature(c++20) qtConfCommandlineDisableFeature(c++2b) + qtConfCommandlineDisableFeature(c++2c) elseif(val MATCHES "(c\\+\\+)?(20|2a)") qtConfCommandlineEnableFeature(c++20) qtConfCommandlineDisableFeature(c++2b) + qtConfCommandlineDisableFeature(c++2c) elseif(val MATCHES "(c\\+\\+)?(23|2b)") qtConfCommandlineEnableFeature(c++20) qtConfCommandlineEnableFeature(c++2b) + qtConfCommandlineDisableFeature(c++2c) + elseif(val MATCHES "(c\\+\\+)?(2c)") + qtConfCommandlineEnableFeature(c++20) + qtConfCommandlineEnableFeature(c++2b) + qtConfCommandlineEnableFeature(c++2c) else() qtConfAddError("Invalid argument '${val}' to command line parameter '${arg}'") endif() diff --git a/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java index 542d05627c9..61f8f4b8d53 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java @@ -28,10 +28,6 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate // all low positive ints should be fine. static final int INVALID_ID = 333; // half evil - // The platform might ask for the class implementing the "view". - // Pretend to be an inner class of the QtSurface. - private static final String DEFAULT_CLASS_NAME = "$VirtualChild"; - private View m_view = null; private AccessibilityManager m_manager; private QtLayout m_layout; @@ -247,7 +243,7 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate AccessibilityEvent.obtain(AccessibilityEvent.TYPE_ANNOUNCEMENT); event.setEnabled(true); - event.setClassName(m_view.getClass().getName() + DEFAULT_CLASS_NAME); + event.setClassName(getNodeForVirtualViewId(viewId).getClassName()); event.setContentDescription(value); @@ -323,7 +319,7 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate final AccessibilityEvent event = AccessibilityEvent.obtain(eventType); event.setEnabled(true); - event.setClassName(m_view.getClass().getName() + DEFAULT_CLASS_NAME); + event.setClassName(getNodeForVirtualViewId(virtualViewId).getClassName()); event.setContentDescription(QtNativeAccessibility.descriptionForAccessibleObject(virtualViewId)); if (event.getText().isEmpty() && TextUtils.isEmpty(event.getContentDescription())) @@ -419,7 +415,6 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate final AccessibilityNodeInfo node = AccessibilityNodeInfo.obtain(); - node.setClassName(m_view.getClass().getName() + DEFAULT_CLASS_NAME); node.setPackageName(m_view.getContext().getPackageName()); if (m_layout.getChildCount() == 0 || !QtNativeAccessibility.populateNode(virtualViewId, node)) { diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake index 3f5f9180805..7b522f99abb 100644 --- a/src/corelib/Qt6CoreMacros.cmake +++ b/src/corelib/Qt6CoreMacros.cmake @@ -3799,7 +3799,7 @@ function(qt6_generate_deploy_app_script) qt6_generate_deploy_script(${generate_args} CONTENT " qt6_deploy_runtime_dependencies( - EXECUTABLE $<TARGET_FILE_NAME:${arg_TARGET}>.app + EXECUTABLE \"$<TARGET_FILE_NAME:${arg_TARGET}>.app\" ${common_deploy_args}) ") @@ -3807,7 +3807,7 @@ ${common_deploy_args}) qt6_generate_deploy_script(${generate_args} CONTENT " qt6_deploy_runtime_dependencies( - EXECUTABLE $<TARGET_FILE:${arg_TARGET}> + EXECUTABLE \"$<TARGET_FILE:${arg_TARGET}>\" GENERATE_QT_CONF ${common_deploy_args}) ") @@ -3817,7 +3817,7 @@ ${common_deploy_args}) qt6_generate_deploy_script(${generate_args} CONTENT " qt6_deploy_runtime_dependencies( - EXECUTABLE $<TARGET_FILE:${arg_TARGET}> + EXECUTABLE \"$<TARGET_FILE:${arg_TARGET}>\" GENERATE_QT_CONF ${common_deploy_args}) ") diff --git a/src/corelib/doc/src/cmake/qt_add_resources.qdoc b/src/corelib/doc/src/cmake/qt_add_resources.qdoc index 570272c6097..445e37e000a 100644 --- a/src/corelib/doc/src/cmake/qt_add_resources.qdoc +++ b/src/corelib/doc/src/cmake/qt_add_resources.qdoc @@ -111,5 +111,9 @@ resources linked into the final target. This especially affects static builds. There, the same resource name in different static libraries conflict in the consuming target. +In contrast to \l{qmake}'s \c{RESOURCES}, \c qt_add_resources does not +attempt to compile any QML or JavaScript files using \l{qmlcachegen}. Use +\l{qt_add_qml_module} for this. + \sa {qt6_add_big_resources}{qt_add_big_resources()} */ diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 1ecec63aed4..d1fc672564f 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2021 The Qt Company Ltd. // Copyright (C) 2021 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:execute-external-code #include "qdir.h" #include "qstringlist.h" diff --git a/src/corelib/global/qnumeric.cpp b/src/corelib/global/qnumeric.cpp index 16b2b7ca408..8b153bcdb84 100644 --- a/src/corelib/global/qnumeric.cpp +++ b/src/corelib/global/qnumeric.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2019 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:data-parser #include "qnumeric.h" #include "qnumeric_p.h" diff --git a/src/corelib/global/qnumeric.h b/src/corelib/global/qnumeric.h index 2c7110c97a6..bc2bbf9e53e 100644 --- a/src/corelib/global/qnumeric.h +++ b/src/corelib/global/qnumeric.h @@ -1,6 +1,7 @@ // Copyright (C) 2021 The Qt Company Ltd. // Copyright (C) 2025 Klarälvdalens Datakonsult AB, a KDAB Group company, [email protected], author Giuseppe D'Angelo <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:data-parser #ifndef QNUMERIC_H #define QNUMERIC_H diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp index fd742898f81..dab903f51fb 100644 --- a/src/corelib/global/qrandom.cpp +++ b/src/corelib/global/qrandom.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2021 Intel Corporation. // Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:cryptography // for rand_s #define _CRT_RAND_S diff --git a/src/corelib/global/qrandom.h b/src/corelib/global/qrandom.h index 5ac864e79ef..30599413d75 100644 --- a/src/corelib/global/qrandom.h +++ b/src/corelib/global/qrandom.h @@ -1,5 +1,6 @@ // Copyright (C) 2020 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:cryptography #ifndef QRANDOM_H #define QRANDOM_H diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 6f995fe082e..5a0be1d895e 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -893,6 +893,12 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM { Q_CHECK_FILE_NAME(entry, false); + // Detection of WasDeletedAttribute is imperfect: in general, if we can + // successfully stat() or access() a file, it hasn't been deleted (though + // there are exceptions, like /proc/XXX/fd/ entries on Linux). So we have + // to restore this flag in case we fail to stat() anything. + auto hadBeenDeleted = data.entryFlags & QFileSystemMetaData::WasDeletedAttribute; + #if defined(Q_OS_DARWIN) if (what & (QFileSystemMetaData::BundleType | QFileSystemMetaData::CaseSensitive)) { if (!data.hasFlags(QFileSystemMetaData::DirectoryType)) @@ -1103,6 +1109,11 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM if (entryErrno != 0) { what &= ~QFileSystemMetaData::LinkType; // don't clear link: could be broken symlink data.clearFlags(what); + + // see comment at the top + data.entryFlags |= hadBeenDeleted; + data.knownFlagsMask |= hadBeenDeleted; + return false; } return true; diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp index 064be4c2112..cd72f21acdf 100644 --- a/src/corelib/io/qfilesystemwatcher.cpp +++ b/src/corelib/io/qfilesystemwatcher.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qfilesystemwatcher.h" #include "qfilesystemwatcher_p.h" diff --git a/src/corelib/io/qfilesystemwatcher.h b/src/corelib/io/qfilesystemwatcher.h index 668bc143b20..9523945435e 100644 --- a/src/corelib/io/qfilesystemwatcher.h +++ b/src/corelib/io/qfilesystemwatcher.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QFILESYSTEMWATCHER_H #define QFILESYSTEMWATCHER_H diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.mm b/src/corelib/io/qfilesystemwatcher_fsevents.mm index 0d9b84890ae..0f49d43bc02 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents.mm +++ b/src/corelib/io/qfilesystemwatcher_fsevents.mm @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include <qplatformdefs.h> diff --git a/src/corelib/io/qfilesystemwatcher_fsevents_p.h b/src/corelib/io/qfilesystemwatcher_fsevents_p.h index d6ce176a30f..2fc95a99931 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents_p.h +++ b/src/corelib/io/qfilesystemwatcher_fsevents_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QFILESYSTEMWATCHER_FSEVENTS_P_H #define QFILESYSTEMWATCHER_FSEVENTS_P_H diff --git a/src/corelib/io/qfilesystemwatcher_inotify.cpp b/src/corelib/io/qfilesystemwatcher_inotify.cpp index e60f6881109..4971b41c102 100644 --- a/src/corelib/io/qfilesystemwatcher_inotify.cpp +++ b/src/corelib/io/qfilesystemwatcher_inotify.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qfilesystemwatcher.h" #include "qfilesystemwatcher_inotify_p.h" diff --git a/src/corelib/io/qfilesystemwatcher_inotify_p.h b/src/corelib/io/qfilesystemwatcher_inotify_p.h index 05f87df14c1..705fe71725a 100644 --- a/src/corelib/io/qfilesystemwatcher_inotify_p.h +++ b/src/corelib/io/qfilesystemwatcher_inotify_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QFILESYSTEMWATCHER_INOTIFY_P_H #define QFILESYSTEMWATCHER_INOTIFY_P_H diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 7a9be337bf8..bc331c9dd2a 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include <qplatformdefs.h> diff --git a/src/corelib/io/qfilesystemwatcher_kqueue_p.h b/src/corelib/io/qfilesystemwatcher_kqueue_p.h index 05844d5be95..a460da6882e 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue_p.h +++ b/src/corelib/io/qfilesystemwatcher_kqueue_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QFILESYSTEMWATCHER_KQUEUE_P_H #define QFILESYSTEMWATCHER_KQUEUE_P_H diff --git a/src/corelib/io/qfilesystemwatcher_p.h b/src/corelib/io/qfilesystemwatcher_p.h index c34e3e2408f..79cf7443e37 100644 --- a/src/corelib/io/qfilesystemwatcher_p.h +++ b/src/corelib/io/qfilesystemwatcher_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QFILESYSTEMWATCHER_P_H #define QFILESYSTEMWATCHER_P_H diff --git a/src/corelib/io/qfilesystemwatcher_polling.cpp b/src/corelib/io/qfilesystemwatcher_polling.cpp index 5ec13a77f6c..ea374141563 100644 --- a/src/corelib/io/qfilesystemwatcher_polling.cpp +++ b/src/corelib/io/qfilesystemwatcher_polling.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qfilesystemwatcher_polling_p.h" diff --git a/src/corelib/io/qfilesystemwatcher_polling_p.h b/src/corelib/io/qfilesystemwatcher_polling_p.h index 80d7b7d1526..2ace2947be4 100644 --- a/src/corelib/io/qfilesystemwatcher_polling_p.h +++ b/src/corelib/io/qfilesystemwatcher_polling_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QFILESYSTEMWATCHER_POLLING_P_H #define QFILESYSTEMWATCHER_POLLING_P_H diff --git a/src/corelib/io/qfilesystemwatcher_win.cpp b/src/corelib/io/qfilesystemwatcher_win.cpp index 5418265ba2c..3a2cb02c3d7 100644 --- a/src/corelib/io/qfilesystemwatcher_win.cpp +++ b/src/corelib/io/qfilesystemwatcher_win.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qfilesystemwatcher.h" #include "qfilesystemwatcher_win_p.h" diff --git a/src/corelib/io/qfilesystemwatcher_win_p.h b/src/corelib/io/qfilesystemwatcher_win_p.h index f6c6fd6c923..0687080b0ed 100644 --- a/src/corelib/io/qfilesystemwatcher_win_p.h +++ b/src/corelib/io/qfilesystemwatcher_win_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QFILESYSTEMWATCHER_WIN_P_H #define QFILESYSTEMWATCHER_WIN_P_H diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index 585a07158ea..9c1bb45dd2d 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:network-protocol //#define QIODEVICE_DEBUG @@ -1308,8 +1309,11 @@ QByteArray QIODevice::readAll() The newline character ('\\n') is included in the buffer. If a newline is not encountered before maxSize - 1 bytes are read, a - newline will not be inserted into the buffer. On windows newline - characters are replaced with '\\n'. + newline will not be inserted into the buffer. + + \note Newline translation(e.g., converting \r to \n) is performed + only when the device is opened for reading with QIODevice::Text + flag. Note that on sequential devices, data may not be immediately available, which may result in a partial line being returned. By calling the diff --git a/src/corelib/io/qiodevice.h b/src/corelib/io/qiodevice.h index 6bf7149e9af..263214ff012 100644 --- a/src/corelib/io/qiodevice.h +++ b/src/corelib/io/qiodevice.h @@ -1,5 +1,6 @@ // Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:header-decls-only #ifndef QIODEVICE_H #define QIODEVICE_H diff --git a/src/corelib/io/qiodevice_p.h b/src/corelib/io/qiodevice_p.h index 151548fb04e..6a1a91e1dea 100644 --- a/src/corelib/io/qiodevice_p.h +++ b/src/corelib/io/qiodevice_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:network-protocol #ifndef QIODEVICE_P_H #define QIODEVICE_P_H diff --git a/src/corelib/io/qstorageinfo.cpp b/src/corelib/io/qstorageinfo.cpp index 950af69ab82..aa7c67e8596 100644 --- a/src/corelib/io/qstorageinfo.cpp +++ b/src/corelib/io/qstorageinfo.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2015 Ivan Komissarov <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qstorageinfo.h" #include "qstorageinfo_p.h" @@ -12,6 +13,7 @@ QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY(lcStorageInfo, "qt.core.qstorageinfo", QtWarningMsg) QT_IMPL_METATYPE_EXTERN(QStorageInfo) +QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QStorageInfoPrivate) /*! \class QStorageInfo @@ -75,7 +77,7 @@ QStorageInfo::QStorageInfo() \sa setPath() */ QStorageInfo::QStorageInfo(const QString &path) - : d(new QStorageInfoPrivate) + : QStorageInfo() { setPath(path); } @@ -85,39 +87,45 @@ QStorageInfo::QStorageInfo(const QString &path) containing the \a dir folder. */ QStorageInfo::QStorageInfo(const QDir &dir) - : d(new QStorageInfoPrivate) + : QStorageInfo(dir.absolutePath()) { - setPath(dir.absolutePath()); } /*! Constructs a new QStorageInfo object that is a copy of the \a other QStorageInfo object. */ QStorageInfo::QStorageInfo(const QStorageInfo &other) - : d(other.d) -{ -} + = default; + +/*! + \since 6.10 + \fn QStorageInfo::QStorageInfo(QStorageInfo &&other) + + Move-constructs a new QStorageInfo from \a other. + + The moved-from object \a other is placed in a partially-formed state, in + which the only valid operations are destruction and assignment of a new + value. +*/ /*! Destroys the QStorageInfo object and frees its resources. */ QStorageInfo::~QStorageInfo() -{ -} + = default; /*! Makes a copy of the QStorageInfo object \a other and assigns it to this QStorageInfo object. */ QStorageInfo &QStorageInfo::operator=(const QStorageInfo &other) -{ - d = other.d; - return *this; -} + = default; /*! \fn QStorageInfo &QStorageInfo::operator=(QStorageInfo &&other) - Assigns \a other to this QStorageInfo instance. + Move-assigns \a other to this QStorageInfo instance. + + The moved-from object \a other is placed in a valid, but unspecified state. */ /*! diff --git a/src/corelib/io/qstorageinfo.h b/src/corelib/io/qstorageinfo.h index 2d7c60ec915..846cfaf4f41 100644 --- a/src/corelib/io/qstorageinfo.h +++ b/src/corelib/io/qstorageinfo.h @@ -1,5 +1,6 @@ // Copyright (C) 2014 Ivan Komissarov <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QSTORAGEINFO_H #define QSTORAGEINFO_H @@ -17,6 +18,7 @@ QT_BEGIN_NAMESPACE class QDebug; class QStorageInfoPrivate; +QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QStorageInfoPrivate) class Q_CORE_EXPORT QStorageInfo { public: @@ -24,6 +26,7 @@ public: explicit QStorageInfo(const QString &path); explicit QStorageInfo(const QDir &dir); QStorageInfo(const QStorageInfo &other); + QStorageInfo(QStorageInfo &&) noexcept = default; ~QStorageInfo(); QStorageInfo &operator=(const QStorageInfo &other); diff --git a/src/corelib/io/qstorageinfo_linux.cpp b/src/corelib/io/qstorageinfo_linux.cpp index 00331a57127..f706650c637 100644 --- a/src/corelib/io/qstorageinfo_linux.cpp +++ b/src/corelib/io/qstorageinfo_linux.cpp @@ -3,6 +3,7 @@ // Copyright (C) 2016 Intel Corporation. // Copyright (C) 2023 Ahmad Samir <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qstorageinfo_linux_p.h" diff --git a/src/corelib/io/qstorageinfo_linux_p.h b/src/corelib/io/qstorageinfo_linux_p.h index 8f92b9e9783..26a60dcbc13 100644 --- a/src/corelib/io/qstorageinfo_linux_p.h +++ b/src/corelib/io/qstorageinfo_linux_p.h @@ -3,6 +3,7 @@ // Copyright (C) 2016 Intel Corporation. // Copyright (C) 2023 Ahmad Samir <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QSTORAGEINFO_LINUX_P_H #define QSTORAGEINFO_LINUX_P_H diff --git a/src/corelib/io/qstorageinfo_mac.cpp b/src/corelib/io/qstorageinfo_mac.cpp index c6c0f501dab..acfa21d8146 100644 --- a/src/corelib/io/qstorageinfo_mac.cpp +++ b/src/corelib/io/qstorageinfo_mac.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2014 Ivan Komissarov <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qstorageinfo_p.h" diff --git a/src/corelib/io/qstorageinfo_p.h b/src/corelib/io/qstorageinfo_p.h index a917763fe36..0e3f81151e7 100644 --- a/src/corelib/io/qstorageinfo_p.h +++ b/src/corelib/io/qstorageinfo_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2014 Ivan Komissarov <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QSTORAGEINFO_P_H #define QSTORAGEINFO_P_H diff --git a/src/corelib/io/qstorageinfo_stub.cpp b/src/corelib/io/qstorageinfo_stub.cpp index f2f7d2eb656..805b66b893c 100644 --- a/src/corelib/io/qstorageinfo_stub.cpp +++ b/src/corelib/io/qstorageinfo_stub.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qstorageinfo_p.h" diff --git a/src/corelib/io/qstorageinfo_unix.cpp b/src/corelib/io/qstorageinfo_unix.cpp index 40580e3be17..34ba7b9682b 100644 --- a/src/corelib/io/qstorageinfo_unix.cpp +++ b/src/corelib/io/qstorageinfo_unix.cpp @@ -2,6 +2,7 @@ // Copyright (C) 2014 Ivan Komissarov <[email protected]> // Copyright (C) 2016 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qstorageinfo_p.h" diff --git a/src/corelib/io/qstorageinfo_win.cpp b/src/corelib/io/qstorageinfo_win.cpp index 3582612508c..cbaf01848e2 100644 --- a/src/corelib/io/qstorageinfo_win.cpp +++ b/src/corelib/io/qstorageinfo_win.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2014 Ivan Komissarov <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qstorageinfo_p.h" diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index c1f01267949..73e25c85ddf 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2016 The Qt Company Ltd. // Copyright (C) 2017 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:critical reason:data-parser #include "qtemporaryfile.h" diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 565ce04c6ce..a4fbf69da8b 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -3660,17 +3660,29 @@ QList<QUrl> QUrl::fromStringList(const QStringList &urls, ParsingMode mode) */ size_t qHash(const QUrl &url, size_t seed) noexcept { + QtPrivate::QHashCombineWithSeed hasher(seed); + + // non-commutative, we must hash the port first if (!url.d) - return qHash(-1, seed); // the hash of an unset port (-1) - - return qHash(url.d->scheme) ^ - qHash(url.d->userName) ^ - qHash(url.d->password) ^ - qHash(url.d->host) ^ - qHash(url.d->port, seed) ^ - qHash(url.d->path) ^ - qHash(url.d->query) ^ - qHash(url.d->fragment); + return hasher(0, -1); + size_t state = hasher(0, url.d->port); + + if (url.d->hasScheme()) + state = hasher(state, url.d->scheme); + if (url.d->hasUserInfo()) { + // see presentSections(), appendUserName(), etc. + state = hasher(state, url.d->userName); + state = hasher(state, url.d->password); + } + if (url.d->hasHost() || url.d->isLocalFile()) // for XDG compatibility + state = hasher(state, url.d->host); + if (url.d->hasPath()) + state = hasher(state, url.d->path); + if (url.d->hasQuery()) + state = hasher(state, url.d->query); + if (url.d->hasFragment()) + state = hasher(state, url.d->fragment); + return state; } static QUrl adjustFtpPath(QUrl url) diff --git a/src/corelib/ipc/qsharedmemory.cpp b/src/corelib/ipc/qsharedmemory.cpp index a2f6e42579e..7345753ce5b 100644 --- a/src/corelib/ipc/qsharedmemory.cpp +++ b/src/corelib/ipc/qsharedmemory.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsharedmemory.h" #include "qsharedmemory_p.h" diff --git a/src/corelib/ipc/qsharedmemory.h b/src/corelib/ipc/qsharedmemory.h index ab448b15c16..eec7d82160c 100644 --- a/src/corelib/ipc/qsharedmemory.h +++ b/src/corelib/ipc/qsharedmemory.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QSHAREDMEMORY_H #define QSHAREDMEMORY_H diff --git a/src/corelib/ipc/qsharedmemory_p.h b/src/corelib/ipc/qsharedmemory_p.h index 82cce8919ac..df0a6963598 100644 --- a/src/corelib/ipc/qsharedmemory_p.h +++ b/src/corelib/ipc/qsharedmemory_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QSHAREDMEMORY_P_H #define QSHAREDMEMORY_P_H diff --git a/src/corelib/ipc/qsharedmemory_posix.cpp b/src/corelib/ipc/qsharedmemory_posix.cpp index 582c6628e19..fa215c3b538 100644 --- a/src/corelib/ipc/qsharedmemory_posix.cpp +++ b/src/corelib/ipc/qsharedmemory_posix.cpp @@ -2,6 +2,7 @@ // Copyright (C) 2016 The Qt Company Ltd. // Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, [email protected], author Tobias Koenig <[email protected]> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsharedmemory.h" #include "qsharedmemory_p.h" diff --git a/src/corelib/ipc/qsharedmemory_systemv.cpp b/src/corelib/ipc/qsharedmemory_systemv.cpp index dc9de11091d..1777236bacc 100644 --- a/src/corelib/ipc/qsharedmemory_systemv.cpp +++ b/src/corelib/ipc/qsharedmemory_systemv.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsharedmemory.h" #include "qsharedmemory_p.h" diff --git a/src/corelib/ipc/qsharedmemory_win.cpp b/src/corelib/ipc/qsharedmemory_win.cpp index 472f34f9a18..b46d0da0c8c 100644 --- a/src/corelib/ipc/qsharedmemory_win.cpp +++ b/src/corelib/ipc/qsharedmemory_win.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsharedmemory.h" #include "qsharedmemory_p.h" diff --git a/src/corelib/ipc/qsystemsemaphore.cpp b/src/corelib/ipc/qsystemsemaphore.cpp index 24f4789f975..67e8c4bf757 100644 --- a/src/corelib/ipc/qsystemsemaphore.cpp +++ b/src/corelib/ipc/qsystemsemaphore.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsystemsemaphore.h" #include "qsystemsemaphore_p.h" diff --git a/src/corelib/ipc/qsystemsemaphore.h b/src/corelib/ipc/qsystemsemaphore.h index 0981a7eecee..2d80955b85c 100644 --- a/src/corelib/ipc/qsystemsemaphore.h +++ b/src/corelib/ipc/qsystemsemaphore.h @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QSYSTEMSEMAPHORE_H #define QSYSTEMSEMAPHORE_H diff --git a/src/corelib/ipc/qsystemsemaphore_p.h b/src/corelib/ipc/qsystemsemaphore_p.h index 788c4fb7844..5b4630a20a8 100644 --- a/src/corelib/ipc/qsystemsemaphore_p.h +++ b/src/corelib/ipc/qsystemsemaphore_p.h @@ -1,6 +1,7 @@ // Copyright (C) 2016 The Qt Company Ltd. // Copyright (C) 2022 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QSYSTEMSEMAPHORE_P_H #define QSYSTEMSEMAPHORE_P_H diff --git a/src/corelib/ipc/qsystemsemaphore_posix.cpp b/src/corelib/ipc/qsystemsemaphore_posix.cpp index 7df9593513c..89a75048b4c 100644 --- a/src/corelib/ipc/qsystemsemaphore_posix.cpp +++ b/src/corelib/ipc/qsystemsemaphore_posix.cpp @@ -3,6 +3,7 @@ // Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, [email protected], author Tobias Koenig <[email protected]> // Copyright (C) 2022 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsystemsemaphore.h" #include "qsystemsemaphore_p.h" diff --git a/src/corelib/ipc/qsystemsemaphore_systemv.cpp b/src/corelib/ipc/qsystemsemaphore_systemv.cpp index e5d231d1d42..54e62c615cf 100644 --- a/src/corelib/ipc/qsystemsemaphore_systemv.cpp +++ b/src/corelib/ipc/qsystemsemaphore_systemv.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2016 The Qt Company Ltd. // Copyright (C) 2022 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsystemsemaphore.h" #include "qsystemsemaphore_p.h" diff --git a/src/corelib/ipc/qsystemsemaphore_win.cpp b/src/corelib/ipc/qsystemsemaphore_win.cpp index f42fecf71f6..a157dec0dd2 100644 --- a/src/corelib/ipc/qsystemsemaphore_win.cpp +++ b/src/corelib/ipc/qsystemsemaphore_win.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qsystemsemaphore.h" #include "qsystemsemaphore_p.h" diff --git a/src/corelib/ipc/qtipccommon.cpp b/src/corelib/ipc/qtipccommon.cpp index 355f6fbc602..e56046497c5 100644 --- a/src/corelib/ipc/qtipccommon.cpp +++ b/src/corelib/ipc/qtipccommon.cpp @@ -1,5 +1,6 @@ // Copyright (C) 2022 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #include "qtipccommon.h" #include "qtipccommon_p.h" diff --git a/src/corelib/ipc/qtipccommon.h b/src/corelib/ipc/qtipccommon.h index 658a426914f..375100f9837 100644 --- a/src/corelib/ipc/qtipccommon.h +++ b/src/corelib/ipc/qtipccommon.h @@ -1,5 +1,6 @@ // Copyright (C) 2022 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QTIPCCOMMON_H #define QTIPCCOMMON_H diff --git a/src/corelib/ipc/qtipccommon_p.h b/src/corelib/ipc/qtipccommon_p.h index 8836cd64421..dc8619299fc 100644 --- a/src/corelib/ipc/qtipccommon_p.h +++ b/src/corelib/ipc/qtipccommon_p.h @@ -1,5 +1,6 @@ // Copyright (C) 2022 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// Qt-Security score:significant reason:default #ifndef QTIPCCOMMON_P_H #define QTIPCCOMMON_P_H diff --git a/src/corelib/itemmodels/qrangemodel_impl.h b/src/corelib/itemmodels/qrangemodel_impl.h index 849d6084b80..38378fdcc64 100644 --- a/src/corelib/itemmodels/qrangemodel_impl.h +++ b/src/corelib/itemmodels/qrangemodel_impl.h @@ -952,7 +952,7 @@ public: if constexpr (multi_role::int_key) return std::as_const(value).find(Qt::ItemDataRole(role)); else - return std::as_const(value).find(roleNames().value(role)); + return std::as_const(value).find(itemModel().roleNames().value(role)); }(); if (it != value.cend()) { result = QRangeModelDetails::value(it); @@ -981,13 +981,20 @@ public: if constexpr (std::is_convertible_v<value_type, decltype(result)>) { result = value; } else { + const auto roleNames = [this]() -> QHash<int, QByteArray> { + Q_UNUSED(this); + if constexpr (!multi_role::int_key) + return itemModel().roleNames(); + else + return {}; + }(); for (auto it = std::cbegin(value); it != std::cend(value); ++it) { - int role = [this, key = QRangeModelDetails::key(it)]() { - Q_UNUSED(this); + const int role = [&roleNames, key = QRangeModelDetails::key(it)]() { + Q_UNUSED(roleNames); if constexpr (multi_role::int_key) return int(key); else - return roleNames().key(key.toUtf8(), -1); + return roleNames.key(key.toUtf8(), -1); }(); if (role != -1) @@ -999,7 +1006,7 @@ public: tried = true; using meta_type = QRangeModelDetails::wrapped_t<value_type>; const QMetaObject &mo = meta_type::staticMetaObject; - for (auto &&[role, roleName] : roleNames().asKeyValueRange()) { + for (auto &&[role, roleName] : itemModel().roleNames().asKeyValueRange()) { QVariant data; if constexpr (std::is_base_of_v<QObject, meta_type>) { if (value) @@ -1064,19 +1071,26 @@ public: Qt::ItemDataRole roleToSet = Qt::ItemDataRole(role); // If there is an entry for EditRole, overwrite that; otherwise, // set the entry for DisplayRole. + const auto roleNames = [this]() -> QHash<int, QByteArray> { + Q_UNUSED(this); + if constexpr (!multi_role::int_key) + return itemModel().roleNames(); + else + return {}; + }(); if (role == Qt::EditRole) { if constexpr (multi_role::int_key) { if (target.find(roleToSet) == target.end()) roleToSet = Qt::DisplayRole; } else { - if (target.find(roleNames().value(roleToSet)) == target.end()) + if (target.find(roleNames.value(roleToSet)) == target.end()) roleToSet = Qt::DisplayRole; } } if constexpr (multi_role::int_key) return write(target[roleToSet], data); else - return write(target[roleNames().value(roleToSet)], data); + return write(target[roleNames.value(roleToSet)], data); } else if (role == Qt::DisplayRole || role == Qt::EditRole) { return write(target, data); } @@ -1108,7 +1122,9 @@ public: if constexpr (multi_role()) { using key_type = typename value_type::key_type; tried = true; - const auto roleName = [map = roleNames()](int role) { return map.value(role); }; + const auto roleName = [map = itemModel().roleNames()](int role) { + return map.value(role); + }; // transactional: only update target if all values from data // can be stored. Storing never fails with int-keys. @@ -1148,8 +1164,9 @@ public: else // can't copy - targetCopy is now a pointer return &origin; }(target); + const auto roleNames = itemModel().roleNames(); for (auto &&[role, value] : data.asKeyValueRange()) { - const QByteArray roleName = roleNames().value(role); + const QByteArray roleName = roleNames.value(role); bool written = false; if constexpr (std::is_base_of_v<QObject, meta_type>) { if (targetCopy) @@ -1547,7 +1564,7 @@ protected: QMetaProperty roleProperty(int role) const { const QMetaObject *mo = &ItemType::staticMetaObject; - const QByteArray roleName = roleNames().value(role); + const QByteArray roleName = itemModel().roleNames().value(role); if (const int index = mo->indexOfProperty(roleName.data()); index >= 0) return mo->property(index); return {}; diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index a19e39685f1..3b92c5f48f2 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -2189,7 +2189,7 @@ bool QCoreApplication::installTranslator(QTranslator *translationFile) QCoreApplicationPrivate *d = self->d_func(); { - QMutexLocker locker(&d->translateMutex); + QWriteLocker locker(&d->translateMutex); d->translators.prepend(translationFile); } @@ -2221,7 +2221,7 @@ bool QCoreApplication::removeTranslator(QTranslator *translationFile) if (!QCoreApplicationPrivate::checkInstance("removeTranslator")) return false; QCoreApplicationPrivate *d = self->d_func(); - QMutexLocker locker(&d->translateMutex); + QWriteLocker locker(&d->translateMutex); if (d->translators.removeAll(translationFile)) { #ifndef QT_NO_QOBJECT locker.unlock(); @@ -2306,7 +2306,7 @@ QString QCoreApplication::translate(const char *context, const char *sourceText, if (self) { QCoreApplicationPrivate *d = self->d_func(); - QMutexLocker locker(&d->translateMutex); + QReadLocker locker(&d->translateMutex); if (!d->translators.isEmpty()) { QList<QTranslator*>::ConstIterator it; QTranslator *translationFile; @@ -2332,23 +2332,13 @@ QString qtTrId(const char *id, int n) return QCoreApplication::translate(nullptr, id, nullptr, n); } -/*! - \internal - Returns a locked mutex handle if \a translator is registered in QCoreApplication, - and might be therefore queried for translations from other threads. - Returns an unlocked/dummy QMutexLocker otherwise. - */ -std::unique_lock<QMutex> QCoreApplicationPrivate::mutexLockerForTranslator(QTranslator *translator) +bool QCoreApplicationPrivate::isTranslatorInstalled(QTranslator *translator) { if (!QCoreApplication::self) - return std::unique_lock<QMutex>(); - + return false; QCoreApplicationPrivate *d = QCoreApplication::self->d_func(); - std::unique_lock<QMutex> locker(d->translateMutex); - if (!d->translators.contains(translator)) - locker.unlock(); - - return locker; + QReadLocker locker(&d->translateMutex); + return d->translators.contains(translator); } #else diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index 4cb6254e98d..0027b1ad57f 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -30,12 +30,10 @@ #include "private/qcore_mac_p.h" #endif -#ifndef QT_NO_TRANSLATION -#include <mutex> -#endif - QT_BEGIN_NAMESPACE +typedef QList<QTranslator*> QTranslatorList; + class QAbstractEventDispatcher; #ifndef QT_NO_QOBJECT @@ -149,9 +147,9 @@ public: static bool is_app_closing; #endif #ifndef QT_NO_TRANSLATION - QList<QTranslator*> translators; - QMutex translateMutex; - static std::unique_lock<QMutex> mutexLockerForTranslator(QTranslator *translator); + QTranslatorList translators; + QReadWriteLock translateMutex; + static bool isTranslatorInstalled(QTranslator *translator); #endif static bool setuidAllowed; diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp index 60bcdedba13..7fe36d37bce 100644 --- a/src/corelib/kernel/qmetaobjectbuilder.cpp +++ b/src/corelib/kernel/qmetaobjectbuilder.cpp @@ -2080,6 +2080,17 @@ bool QMetaPropertyBuilder::isBindable() const else return false; } +/*! + Returns \c true if the property is required. + The default is \c false. + */ +bool QMetaPropertyBuilder::isRequired() const +{ + if (auto d = d_func()) + return d->flag(Bindable); + else + return false; +} /*! Sets this property to readable if \a value is true. @@ -2236,6 +2247,15 @@ void QMetaPropertyBuilder::setBindable(bool value) } /*! + Sets the\c REQUIRED flag on this property to \a value + */ +void QMetaPropertyBuilder::setRequired(bool value) +{ + if (auto d = d_func()) + d->setFlag(Required, value); +} + +/*! Returns the revision of this property. \sa setRevision() diff --git a/src/corelib/kernel/qmetaobjectbuilder_p.h b/src/corelib/kernel/qmetaobjectbuilder_p.h index cf64e51c30c..36cd08d908c 100644 --- a/src/corelib/kernel/qmetaobjectbuilder_p.h +++ b/src/corelib/kernel/qmetaobjectbuilder_p.h @@ -216,6 +216,7 @@ public: bool isFinal() const; bool isAlias() const; bool isBindable() const; + bool isRequired() const; void setReadable(bool value); void setWritable(bool value); @@ -230,6 +231,7 @@ public: void setFinal(bool value); void setAlias(bool value); void setBindable(bool value); + void setRequired(bool value); int revision() const; void setRevision(int revision); diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 1242a40f185..45c947004f5 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -981,12 +981,6 @@ void QMetaType::unregisterMetaType(QMetaType type) than the QMetaType \a rhs, otherwise returns \c false. */ -/*! \internal */ -bool QMetaTypeModuleHelper::convert(const void *, int, void *, int) const -{ - return false; -} - static constexpr auto createStaticTypeToIdMap() { #define QT_ADD_STATIC_METATYPE(MetaTypeName, MetaTypeId, RealName) \ @@ -1049,8 +1043,8 @@ static bool qIntegerConversionFromFPHelper(From from, To *to) return true; } -// NOLINTNEXTLINE(cppcoreguidelines-virtual-class-destructor): this is not a base class -static constexpr struct : QMetaTypeModuleHelper +namespace { +struct QCoreVariantHelper : QMetaTypeModuleHelper { template<typename T, typename LiteralWrapper = std::conditional_t<std::is_same_v<T, QString>, QLatin1StringView, const char *>> @@ -1060,7 +1054,8 @@ static constexpr struct : QMetaTypeModuleHelper return !(str.isEmpty() || str == LiteralWrapper("0") || str == LiteralWrapper("false")); } - const QtPrivate::QMetaTypeInterface *interfaceForType(int type) const override { + static const QtPrivate::QMetaTypeInterface *interfaceForType(int type) + { switch (type) { QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(QT_METATYPE_CONVERT_ID_TO_TYPE) QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(QT_METATYPE_CONVERT_ID_TO_TYPE) @@ -1072,11 +1067,14 @@ static constexpr struct : QMetaTypeModuleHelper } } -#ifndef QT_BOOTSTRAPPED - bool convert(const void *from, int fromTypeId, void *to, int toTypeId) const override + static bool convert(const void *from, int fromTypeId, void *to, int toTypeId) { Q_ASSERT(fromTypeId != toTypeId); +#ifdef QT_BOOTSTRAPPED + Q_UNUSED(from); + Q_UNUSED(to); +#else // canConvert calls with two nullptr bool onlyCheck = (from == nullptr && to == nullptr); @@ -1747,26 +1745,28 @@ QT_WARNING_DISABLE_CLANG("-Wtautological-compare") QT_WARNING_POP } +#endif // !QT_BOOTSTRAPPED return false; } -#endif // !QT_BOOTSTRAPPED -} metatypeHelper = {}; +}; +} // unnamed namespace -Q_CONSTINIT Q_CORE_EXPORT const QMetaTypeModuleHelper *qMetaTypeGuiHelper = nullptr; -Q_CONSTINIT Q_CORE_EXPORT const QMetaTypeModuleHelper *qMetaTypeWidgetsHelper = nullptr; +Q_CONSTINIT Q_CORE_EXPORT QMetaTypeModuleHelper qMetaTypeGuiHelper = {}; +Q_CONSTINIT Q_CORE_EXPORT QMetaTypeModuleHelper qMetaTypeWidgetsHelper = {}; -static const QMetaTypeModuleHelper *qModuleHelperForType(int type) +#ifndef QT_BOOTSTRAPPED +static bool tryConvertBuiltinTypes(const void *from, int fromTypeId, void *to, int toTypeId) { + int type = qMax(fromTypeId, toTypeId); if (type <= QMetaType::LastCoreType) - return &metatypeHelper; + return QCoreVariantHelper::convert(from, fromTypeId, to, toTypeId); if (type >= QMetaType::FirstGuiType && type <= QMetaType::LastGuiType) - return qMetaTypeGuiHelper; + return qMetaTypeGuiHelper.convert(from, fromTypeId, to, toTypeId); else if (type >= QMetaType::FirstWidgetsType && type <= QMetaType::LastWidgetsType) - return qMetaTypeWidgetsHelper; - return nullptr; + return qMetaTypeWidgetsHelper.convert(from, fromTypeId, to, toTypeId); + return false; } -#ifndef QT_BOOTSTRAPPED template<typename T, typename Key> class QMetaTypeFunctionRegistry { @@ -2471,10 +2471,8 @@ bool QMetaType::convert(QMetaType fromType, const void *from, QMetaType toType, int fromTypeId = fromType.id(); int toTypeId = toType.id(); - if (auto moduleHelper = qModuleHelperForType(qMax(fromTypeId, toTypeId))) { - if (moduleHelper->convert(from, fromTypeId, to, toTypeId)) - return true; - } + if (tryConvertBuiltinTypes(from, fromTypeId, to, toTypeId)) + return true; const auto f = customTypesConversionRegistry()->function({fromTypeId, toTypeId}); if (f) return (*f)(from, to); @@ -2676,10 +2674,9 @@ bool QMetaType::canConvert(QMetaType fromType, QMetaType toType) if (fromTypeId == toTypeId) return true; - if (auto moduleHelper = qModuleHelperForType(qMax(fromTypeId, toTypeId))) { - if (moduleHelper->convert(nullptr, fromTypeId, nullptr, toTypeId)) - return true; - } + if (tryConvertBuiltinTypes(nullptr, fromTypeId, nullptr, toTypeId)) + return true; + const ConverterFunction * const f = customTypesConversionRegistry()->function(std::make_pair(fromTypeId, toTypeId)); if (f) @@ -2879,8 +2876,12 @@ void QMetaType::registerNormalizedTypedef(const NS(QByteArray) & normalizedTypeN static const QtPrivate::QMetaTypeInterface *interfaceForStaticType(int typeId) { Q_ASSERT(typeId < QMetaType::User); - if (auto moduleHelper = qModuleHelperForType(typeId)) - return moduleHelper->interfaceForType(typeId); + if (typeId <= QMetaType::LastCoreType) + return QCoreVariantHelper::interfaceForType(typeId); + if (typeId >= QMetaType::FirstGuiType && typeId <= QMetaType::LastGuiType) + return qMetaTypeGuiHelper.interfaceForType(typeId); + if (typeId >= QMetaType::FirstWidgetsType && typeId <= QMetaType::LastWidgetsType) + return qMetaTypeWidgetsHelper.interfaceForType(typeId); return nullptr; } @@ -2909,40 +2910,18 @@ bool QMetaType::isRegistered(int type) return interfaceForTypeNoWarning(type) != nullptr; } -namespace { -enum NormalizeTypeMode { - DontNormalizeType, - TryNormalizeType -}; -} -template <NormalizeTypeMode tryNormalizedType> static inline -const QtPrivate::QMetaTypeInterface *qMetaTypeTypeImpl(QByteArrayView name) +static const QtPrivate::QMetaTypeInterface *findMetaTypeByName(QByteArrayView name) { - if (name.isEmpty()) - return nullptr; - + Q_PRE(!name.isEmpty()); int type = qMetaTypeStaticType(name); if (type != QMetaType::UnknownType) { return interfaceForStaticType(type); #ifndef QT_BOOTSTRAPPED - } else { - QReadLocker locker(&customTypeRegistry()->lock); + } else if (customTypeRegistry.exists()) { + QReadLocker locker(&customTypeRegistry->lock); auto it = customTypeRegistry->aliases.constFind(name); if (it != customTypeRegistry->aliases.constEnd()) return it.value().data(); - -#ifndef QT_NO_QOBJECT - if (tryNormalizedType) { - const char *typeName = name.constData(); - const NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName); - type = qMetaTypeStaticType(normalizedTypeName); - if (type == QMetaType::UnknownType) { - return customTypeRegistry->aliases.value(normalizedTypeName).data(); - } else { - return interfaceForStaticType(type); - } - } -#endif #endif } return nullptr; @@ -2969,7 +2948,9 @@ const QtPrivate::QMetaTypeInterface *qMetaTypeTypeImpl(QByteArrayView name) */ int qMetaTypeTypeInternal(QByteArrayView name) { - const QtPrivate::QMetaTypeInterface *iface = qMetaTypeTypeImpl<DontNormalizeType>(name); + const QtPrivate::QMetaTypeInterface *iface = nullptr; + if (!name.isEmpty()) + iface = findMetaTypeByName(name); return iface ? iface->typeId.loadRelaxed() : QMetaType::UnknownType; } @@ -3138,7 +3119,20 @@ QMetaType QMetaType::underlyingType() const */ QMetaType QMetaType::fromName(QByteArrayView typeName) { - return QMetaType(qMetaTypeTypeImpl<TryNormalizeType>(typeName)); + if (typeName.isEmpty()) + return QMetaType(); + + const QtPrivate::QMetaTypeInterface *iface = findMetaTypeByName(typeName); + if (iface) + return QMetaType(iface); + +#if !defined(QT_NO_QOBJECT) + const NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName.constData()); + if (normalizedTypeName != typeName) + iface = findMetaTypeByName(normalizedTypeName); +#endif + + return QMetaType(iface); } /*! diff --git a/src/corelib/kernel/qmetatype_p.h b/src/corelib/kernel/qmetatype_p.h index c05bce5fc8f..b39e1de0be2 100644 --- a/src/corelib/kernel/qmetatype_p.h +++ b/src/corelib/kernel/qmetatype_p.h @@ -40,25 +40,29 @@ QT_BEGIN_NAMESPACE assign_and_return \ } -class Q_CORE_EXPORT QMetaTypeModuleHelper +struct QMetaTypeModuleHelper { - Q_DISABLE_COPY_MOVE(QMetaTypeModuleHelper) -protected: - QMetaTypeModuleHelper() = default; - ~QMetaTypeModuleHelper() = default; -public: - Q_WEAK_OVERLOAD // prevent it from entering the ABI and rendering constexpr useless static constexpr auto makePair(int from, int to) -> quint64 { return (quint64(from) << 32) + quint64(to); } - virtual const QtPrivate::QMetaTypeInterface *interfaceForType(int) const = 0; - virtual bool convert(const void *, int, void *, int) const; + static const QtPrivate::QMetaTypeInterface *interfaceForType_dummy(int) + { + return nullptr; + } + + static bool convert_dummy(const void *, int, void *, int) + { + return false; + } + + decltype(&interfaceForType_dummy) interfaceForType = &interfaceForType_dummy; + decltype(&convert_dummy) convert = &convert_dummy; }; -extern Q_CORE_EXPORT const QMetaTypeModuleHelper *qMetaTypeGuiHelper; -extern Q_CORE_EXPORT const QMetaTypeModuleHelper *qMetaTypeWidgetsHelper; +extern Q_CORE_EXPORT QMetaTypeModuleHelper qMetaTypeGuiHelper; +extern Q_CORE_EXPORT QMetaTypeModuleHelper qMetaTypeWidgetsHelper; namespace QtMetaTypePrivate { template<typename T> diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp index 384253265be..7368af2df6e 100644 --- a/src/corelib/kernel/qproperty.cpp +++ b/src/corelib/kernel/qproperty.cpp @@ -1385,6 +1385,7 @@ QString QPropertyBindingError::description() const /*! \fn template <typename T> template <typename Functor> QPropertyBinding<T> QProperty<T>::setBinding(Functor f) \overload + \since 6.0 Associates the value of this property with the provided functor \a f and returns the previously associated binding. The property's value is set to the @@ -1442,6 +1443,7 @@ QString QPropertyBindingError::description() const /*! \fn template <typename T> template <typename Functor> QPropertyChangeHandler<T, Functor> QProperty<T>::subscribe(Functor f) + \since 6.0 Subscribes the given functor \a f as a callback that is called immediately and whenever the value of the property changes in the future. On each value @@ -1459,6 +1461,7 @@ QString QPropertyBindingError::description() const /*! \fn template <typename T> template <typename Functor> QPropertyNotifier QProperty<T>::addNotifier(Functor f) + \since 6.2 Subscribes the given functor \a f as a callback that is called whenever the value of the property changes. @@ -1948,6 +1951,7 @@ QString QPropertyBindingError::description() const \brief The QPropertyNotifier class controls the lifecycle of change callback installed on a QProperty. \ingroup tools + \since 6.2 QPropertyNotifier is created when registering a callback on a QProperty to listen to changes to the property's value, using QProperty::addNotifier. As diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index 47483dc6470..6b68cb7a513 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -463,12 +463,6 @@ bool QTranslator::load(const QString & filename, const QString & directory, const QString & suffix) { Q_D(QTranslator); - - std::unique_lock locker = QCoreApplicationPrivate::mutexLockerForTranslator(this); - if (locker.owns_lock()) - QCoreApplication::postEvent(QCoreApplication::instance(), - new QEvent(QEvent::LanguageChange)); - d->clear(); QString prefix; @@ -744,12 +738,6 @@ bool QTranslator::load(const QLocale & locale, const QString & suffix) { Q_D(QTranslator); - - std::unique_lock locker = QCoreApplicationPrivate::mutexLockerForTranslator(this); - if (locker.owns_lock()) - QCoreApplication::postEvent(QCoreApplication::instance(), - new QEvent(QEvent::LanguageChange)); - d->clear(); return d->load_translation(locale, filename, prefix, directory, suffix); } @@ -769,12 +757,6 @@ bool QTranslator::load(const QLocale & locale, bool QTranslator::load(const uchar *data, int len, const QString &directory) { Q_D(QTranslator); - - std::unique_lock locker = QCoreApplicationPrivate::mutexLockerForTranslator(this); - if (locker.owns_lock()) - QCoreApplication::postEvent(QCoreApplication::instance(), - new QEvent(QEvent::LanguageChange)); - d->clear(); if (!data || len < MagicLength || memcmp(data, magic, MagicLength)) @@ -1048,6 +1030,7 @@ searchDependencies: void QTranslatorPrivate::clear() { + Q_Q(QTranslator); if (unmapPointer && unmapLength) { #if defined(QT_USE_MMAP) if (used_mmap) { @@ -1075,6 +1058,10 @@ void QTranslatorPrivate::clear() language.clear(); filePath.clear(); + + if (QCoreApplicationPrivate::isTranslatorInstalled(q)) + QCoreApplication::postEvent(QCoreApplication::instance(), + new QEvent(QEvent::LanguageChange)); } /*! diff --git a/src/corelib/serialization/qcborarray.cpp b/src/corelib/serialization/qcborarray.cpp index e00b7a4571f..9a566b999b4 100644 --- a/src/corelib/serialization/qcborarray.cpp +++ b/src/corelib/serialization/qcborarray.cpp @@ -98,6 +98,17 @@ QCborArray::QCborArray(const QCborArray &other) noexcept } /*! + \fn QCborArray::QCborArray(QCborArray &&other) + \since 6.10 + + Move-constructor. + + The moved-from object \a other is placed in the default-constructed state. + + \sa QCborArray::QCborArray() +*/ + +/*! \fn QCborArray::QCborArray(std::initializer_list<QCborValue> args) Initializes this QCborArray from the C++ brace-enclosed list found in \a @@ -126,6 +137,15 @@ QCborArray &QCborArray::operator=(const QCborArray &other) noexcept } /*! + \fn QCborArray &QCborArray::operator=(QCborArray &&other) + \since 6.10 + + Move-assignment operator. + + The moved-from object \a other is placed in a valid, but unspecified state. +*/ + +/*! \fn void QCborArray::swap(QCborArray &other) \memberswap{array} */ diff --git a/src/corelib/serialization/qcborarray.h b/src/corelib/serialization/qcborarray.h index dd24e5604c0..208d5bcc9a1 100644 --- a/src/corelib/serialization/qcborarray.h +++ b/src/corelib/serialization/qcborarray.h @@ -204,7 +204,9 @@ public: QCborArray() noexcept; QCborArray(const QCborArray &other) noexcept; + QCborArray(QCborArray &&other) noexcept = default; QCborArray &operator=(const QCborArray &other) noexcept; + QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCborArray) QCborArray(std::initializer_list<QCborValue> args) : QCborArray() { diff --git a/src/corelib/serialization/qcborcommon.h b/src/corelib/serialization/qcborcommon.h index b9f7a66ae2f..5183a90937f 100644 --- a/src/corelib/serialization/qcborcommon.h +++ b/src/corelib/serialization/qcborcommon.h @@ -7,6 +7,7 @@ #include <QtCore/qobjectdefs.h> #include <QtCore/qmetatype.h> +#include <QtCore/qshareddata.h> #if 0 #pragma qt_class(QtCborCommon) @@ -22,6 +23,9 @@ QT_BEGIN_NAMESPACE class QDebug; +class QCborContainerPrivate; +QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QCborContainerPrivate) // defined in qcborvalue.cpp + enum class QCborSimpleType : quint8 { False = 20, True = 21, diff --git a/src/corelib/serialization/qcbormap.cpp b/src/corelib/serialization/qcbormap.cpp index 6166775c8ce..e6075dcfc36 100644 --- a/src/corelib/serialization/qcbormap.cpp +++ b/src/corelib/serialization/qcbormap.cpp @@ -276,6 +276,17 @@ QCborMap::QCborMap(const QCborMap &other) noexcept } /*! + \fn QCborMap::QCborMap(QCborMap &&other) + \since 6.10 + + Move-constructor. + + The moved-from object \a other is placed in the default-constructed state. + + \sa QCborMap::QCborMap() +*/ + +/*! \fn QCborMap::QCborMap(std::initializer_list<value_type> args) Constructs a QCborMap with items from a brace-initialization list found in @@ -309,6 +320,15 @@ QCborMap &QCborMap::operator=(const QCborMap &other) noexcept } /*! + \fn QCborMap &QCborMap::operator=(QCborMap &&other) + \since 6.10 + + Move-assignment operator. + + The moved-from object \a other is placed in a valid, but unspecified state. +*/ + +/*! \fn void QCborMap::swap(QCborMap &other) \memberswap{map} */ diff --git a/src/corelib/serialization/qcbormap.h b/src/corelib/serialization/qcbormap.h index 039c436c76b..e2945621451 100644 --- a/src/corelib/serialization/qcbormap.h +++ b/src/corelib/serialization/qcbormap.h @@ -239,7 +239,9 @@ public: QCborMap() noexcept; QCborMap(const QCborMap &other) noexcept; + QCborMap(QCborMap &&other) noexcept = default; QCborMap &operator=(const QCborMap &other) noexcept; + QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCborMap) QCborMap(std::initializer_list<value_type> args) : QCborMap() { diff --git a/src/corelib/serialization/qcborvalue.cpp b/src/corelib/serialization/qcborvalue.cpp index fabed2f06e1..5b7ec705079 100644 --- a/src/corelib/serialization/qcborvalue.cpp +++ b/src/corelib/serialization/qcborvalue.cpp @@ -28,6 +28,8 @@ QT_BEGIN_NAMESPACE +QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QCborContainerPrivate) + // Worst case memory allocation for a corrupt stream: 256 MB for 32-bit, 1 GB for 64-bit static constexpr quint64 MaxAcceptableMemoryUse = (sizeof(void*) == 4 ? 256 : 1024) * 1024 * 1024; diff --git a/src/corelib/thread/qatomicwait.cpp b/src/corelib/thread/qatomicwait.cpp index 3d70333ca7b..25ca771643b 100644 --- a/src/corelib/thread/qatomicwait.cpp +++ b/src/corelib/thread/qatomicwait.cpp @@ -4,6 +4,7 @@ #include "qatomicwait_p.h" #include <qendian.h> +#include "qfutex_p.h" #include "qwaitcondition_p.h" #include <array> @@ -96,8 +97,21 @@ struct QAtomicWaitLocks }; } // unnamed namespace +static inline void checkFutexUse() +{ +#if !defined(QATOMICWAIT_USE_FALLBACK) + if (QtFutex::futexAvailable()) { + // This will disable the code and data on systems where futexes are + // always available (currently: FreeBSD, Linux, Windows). + qFatal("Implementation should have used futex!"); + } +#endif +} + static QAtomicWaitLocks &atomicLocks() noexcept { + checkFutexUse(); + static QAtomicWaitLocks global {}; return global; } diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp index 42011993243..43b16cd0f4f 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp @@ -405,13 +405,16 @@ static int fromOffsetString(QStringView offsetString, bool *valid) noexcept \section2 Range of Valid Dates - Dates are stored internally as a Julian Day number, an integer count of - every day in a contiguous range, with 24 November 4714 BCE in the Gregorian - calendar being Julian Day 0 (1 January 4713 BCE in the Julian calendar). - As well as being an efficient and accurate way of storing an absolute date, - it is suitable for converting a date into other calendar systems such as - Hebrew, Islamic or Chinese. The Julian Day number can be obtained using - QDate::toJulianDay() and can be set using QDate::fromJulianDay(). + Dates are stored internally as a modified Julian Day number, an integer + count of every day in a contiguous range, with 24 November 4714 BCE in the + Gregorian calendar being Julian Day 0 (1 January 4713 BCE in the Julian + calendar). As well as being an efficient and accurate way of storing an + absolute date, it is suitable for converting a date into other calendar + systems such as Hebrew, Islamic or Chinese. For the purposes of QDate, + Julian Days are delimited at midnight and, for those of QDateTime, in the + zone used by the datetime. (This departs from the formal definition, which + delimits Julian Days at UTC noon.) The Julian Day number can be obtained + using QDate::toJulianDay() and can be set using QDate::fromJulianDay(). The range of Julian Day numbers that QDate can represent is, for technical reasons, limited to between -784350574879 and 784354017364, which means from diff --git a/src/corelib/time/qtimezonelocale_data_p.h b/src/corelib/time/qtimezonelocale_data_p.h index 9afb12406c0..9e179369254 100644 --- a/src/corelib/time/qtimezonelocale_data_p.h +++ b/src/corelib/time/qtimezonelocale_data_p.h @@ -58,7 +58,7 @@ namespace QtTimeZoneLocale { // GENERATED PART STARTS HERE /* - This part of the file was generated on 2025-06-17 from the + This part of the file was generated on 2025-07-01 from the Common Locale Data Repository v47 http://www.unicode.org/cldr/ @@ -49804,7 +49804,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 5130, 88357, 11, }, // Africa/Dar_es_Salaam { 687, 5043, 88368, 6, }, // Africa/Djibouti { 687, 5243, 88374, 5, }, // Africa/Douala - { 687, 5166, 221031, 9, }, // Africa/El_Aaiun + { 687, 5166, 88379, 8, }, // Africa/El_Aaiun { 687, 6853, 88387, 9, }, // Africa/Freetown { 687, 4906, 88396, 7, }, // Africa/Gaborone { 687, 5015, 88403, 5, }, // Africa/Harare @@ -49925,7 +49925,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 5897, 89278, 7, }, // America/Marigot { 687, 5805, 89285, 9, }, // America/Martinique { 687, 8184, 89294, 9, }, // America/Matamoros - { 687, 2917, 221040, 8, }, // America/Mazatlan + { 687, 2917, 221031, 8, }, // America/Mazatlan { 687, 8202, 89312, 8, }, // America/Menominee { 687, 8220, 31158, 6, }, // America/Merida { 687, 8235, 89320, 12, }, // America/Metlakatla @@ -50012,7 +50012,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 4540, 89984, 7, }, // Asia/Damascus { 687, 1093, 89991, 4, }, // Asia/Dhaka { 687, 6192, 89995, 4, }, // Asia/Dili - { 687, 3596, 221048, 3, }, // Asia/Dubai + { 687, 3596, 221039, 3, }, // Asia/Dubai { 687, 6159, 90003, 7, }, // Asia/Dushanbe { 687, 8636, 90010, 11, }, // Asia/Famagusta { 687, 8651, 90021, 5, }, // Asia/Gaza @@ -50024,7 +50024,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 7006, 90073, 7, }, // Asia/Jakarta { 687, 6992, 31943, 7, }, // Asia/Jayapura { 687, 1290, 90080, 6, }, // Asia/Jerusalem - { 687, 3560, 221051, 4, }, // Asia/Kabul + { 687, 3560, 221042, 4, }, // Asia/Kabul { 687, 4316, 90091, 7, }, // Asia/Kamchatka { 687, 4239, 31972, 5, }, // Asia/Karachi { 687, 1185, 90098, 8, }, // Asia/Kathmandu @@ -50080,7 +50080,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 1395, 90429, 5, }, // Atlantic/Faroe { 687, 8736, 90434, 5, }, // Atlantic/Madeira { 687, 2748, 90439, 9, }, // Atlantic/Reykjavik - { 687, 7272, 221055, 13, }, // Atlantic/South_Georgia + { 687, 7272, 221046, 13, }, // Atlantic/South_Georgia { 687, 6821, 90463, 11, }, // Atlantic/St_Helena { 687, 6644, 90474, 7, }, // Atlantic/Stanley { 687, 1670, 90481, 6, }, // Australia/Adelaide @@ -50094,7 +50094,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 1727, 90537, 8, }, // Australia/Melbourne { 687, 1762, 90545, 4, }, // Australia/Perth { 687, 1463, 32494, 5, }, // Australia/Sydney - { 687, 6441, 221068, 9, }, // Europe/Amsterdam + { 687, 6441, 221059, 9, }, // Europe/Amsterdam { 687, 6216, 90559, 6, }, // Europe/Andorra { 687, 3620, 90565, 10, }, // Europe/Astrakhan { 687, 2300, 90575, 5, }, // Europe/Athens @@ -50128,7 +50128,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 6410, 90773, 6, }, // Europe/Monaco { 687, 3537, 90779, 6, }, // Europe/Moscow { 687, 6458, 90785, 5, }, // Europe/Oslo - { 687, 4284, 221077, 4, }, // Europe/Paris + { 687, 4284, 221068, 4, }, // Europe/Paris { 687, 6424, 90790, 10, }, // Europe/Podgorica { 687, 6275, 90800, 5, }, // Europe/Prague { 687, 8837, 90805, 4, }, // Europe/Riga @@ -50154,7 +50154,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 6540, 90946, 9, }, // Europe/Zurich { 687, 5078, 90955, 11, }, // Indian/Antananarivo { 687, 6947, 90966, 5, }, // Indian/Chagos - { 687, 6046, 221081, 8, }, // Indian/Christmas + { 687, 6046, 221072, 8, }, // Indian/Christmas { 687, 6063, 90978, 5, }, // Indian/Cocos { 687, 5029, 90983, 6, }, // Indian/Comoro { 687, 6661, 90989, 7, }, // Indian/Kerguelen @@ -50177,7 +50177,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 6696, 91094, 7, }, // Pacific/Gambier { 687, 3822, 91101, 10, }, // Pacific/Guadalcanal { 687, 6018, 31112, 4, }, // Pacific/Guam - { 687, 3049, 221089, 5, }, // Pacific/Kanton + { 687, 3049, 221080, 5, }, // Pacific/Kanton { 687, 3998, 33132, 10, }, // Pacific/Kiritimati { 687, 7019, 91126, 6, }, // Pacific/Kosrae { 687, 2842, 91132, 10, }, // Pacific/Kwajalein @@ -50188,7 +50188,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 687, 7132, 91165, 4, }, // Pacific/Niue { 687, 4168, 91169, 7, }, // Pacific/Norfolk { 687, 7098, 91176, 6, }, // Pacific/Noumea - { 687, 3126, 221094, 9, }, // Pacific/Pago_Pago + { 687, 3126, 221085, 9, }, // Pacific/Pago_Pago { 687, 7155, 91191, 4, }, // Pacific/Palau { 687, 7194, 33210, 8, }, // Pacific/Pitcairn { 687, 3096, 91195, 6, }, // Pacific/Pohnpei @@ -50203,650 +50203,650 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 688, 6788, 195501, 6, }, // Africa/Abidjan Venetian/Latin/Italy { 688, 6760, 74129, 4, }, // Africa/Accra { 688, 5059, 35821, 10, }, // Africa/Addis_Ababa - { 688, 7420, 221103, 6, }, // Africa/Algiers - { 688, 14, 221109, 6, }, // Africa/Asmara - { 688, 5257, 221115, 6, }, // Africa/Bangui - { 688, 7435, 221121, 5, }, // Africa/Bissau - { 688, 4922, 221126, 9, }, // Africa/Bujumbura + { 688, 7420, 221094, 6, }, // Africa/Algiers + { 688, 14, 221100, 6, }, // Africa/Asmara + { 688, 5257, 221106, 6, }, // Africa/Bangui + { 688, 7435, 221112, 5, }, // Africa/Bissau + { 688, 4922, 221117, 9, }, // Africa/Bujumbura { 688, 2320, 161877, 8, }, // Africa/Cairo - { 688, 4117, 221135, 10, }, // Africa/Casablanca + { 688, 4117, 221126, 10, }, // Africa/Casablanca { 688, 7449, 166781, 5, }, // Africa/Ceuta { 688, 6773, 157976, 7, }, // Africa/Conakry { 688, 5130, 21354, 12, }, // Africa/Dar_es_Salaam { 688, 5043, 158501, 6, }, // Africa/Djibouti { 688, 5243, 21372, 5, }, // Africa/Douala { 688, 5166, 6393, 7, }, // Africa/El_Aaiun - { 688, 5151, 221145, 7, }, // Africa/Kampala + { 688, 5151, 221136, 7, }, // Africa/Kampala { 688, 4524, 157994, 6, }, // Africa/Khartoum { 688, 6869, 20418, 4, }, // Africa/Lome - { 688, 4939, 221152, 10, }, // Africa/Lubumbashi - { 688, 5197, 221162, 6, }, // Africa/Maseru - { 688, 5182, 221168, 7, }, // Africa/Mbabane - { 688, 5113, 221175, 8, }, // Africa/Mogadishu + { 688, 4939, 221143, 10, }, // Africa/Lubumbashi + { 688, 5197, 221153, 6, }, // Africa/Maseru + { 688, 5182, 221159, 7, }, // Africa/Mbabane + { 688, 5113, 221166, 8, }, // Africa/Mogadishu { 688, 5271, 195575, 6, }, // Africa/Ndjamena { 688, 6803, 147724, 8, }, // Africa/Nouakchott - { 688, 6727, 221183, 8, }, // Africa/Ouagadougou + { 688, 6727, 221174, 8, }, // Africa/Ouagadougou { 688, 5225, 26542, 10, }, // Africa/Porto-Novo - { 688, 4435, 221191, 15, }, // Africa/Sao_Tome + { 688, 4435, 221182, 15, }, // Africa/Sao_Tome { 688, 2866, 164486, 7, }, // Africa/Tripoli - { 688, 6554, 221206, 6, }, // Africa/Tunis + { 688, 6554, 221197, 6, }, // Africa/Tunis { 688, 5607, 4775, 7, }, // America/Anguilla - { 688, 270, 221212, 7, }, // America/Argentina/Cordoba - { 688, 7489, 221219, 11, }, // America/Argentina/Rio_Gallegos + { 688, 270, 221203, 7, }, // America/Argentina/Cordoba + { 688, 7489, 221210, 11, }, // America/Argentina/Rio_Gallegos { 688, 4252, 6592, 8, }, // America/Asuncion { 688, 237, 22, 8, }, // America/Atikokan - { 688, 7623, 221230, 16, }, // America/Bahia_Banderas + { 688, 7623, 221221, 16, }, // America/Bahia_Banderas { 688, 4361, 44161, 6, }, // America/Bogota - { 688, 7735, 221246, 12, }, // America/Campo_Grande + { 688, 7735, 221237, 12, }, // America/Campo_Grande { 688, 3868, 33314, 6, }, // America/Cancun { 688, 4345, 147758, 6, }, // America/Cayenne { 688, 5496, 44173, 6, }, // America/Cayman { 688, 7774, 60, 6, }, // America/Ciudad_Juarez - { 688, 3791, 221258, 6, }, // America/Cuiaba + { 688, 3791, 221249, 6, }, // America/Cuiaba { 688, 5723, 66, 7, }, // America/Curacao - { 688, 805, 221264, 6, }, // America/Denver - { 688, 5739, 221270, 8, }, // America/Dominica + { 688, 805, 221255, 6, }, // America/Denver + { 688, 5739, 221261, 8, }, // America/Dominica { 688, 7869, 26580, 8, }, // America/Eirunepe { 688, 5770, 20519, 7, }, // America/Grenada { 688, 5786, 95109, 9, }, // America/Guadeloupe { 688, 2281, 95118, 7, }, // America/Havana - { 688, 348, 221278, 12, }, // America/Indiana/Indianapolis - { 688, 481, 221290, 14, }, // America/Indiana/Knox - { 688, 7961, 221304, 17, }, // America/Indiana/Marengo - { 688, 7985, 221321, 20, }, // America/Indiana/Petersburg - { 688, 8012, 221341, 19, }, // America/Indiana/Tell_City - { 688, 8038, 221360, 15, }, // America/Indiana/Vevay - { 688, 8060, 221375, 19, }, // America/Indiana/Vincennes - { 688, 8086, 221394, 17, }, // America/Indiana/Winamac - { 688, 2799, 221411, 7, }, // America/Jamaica - { 688, 8125, 221418, 21, }, // America/Kentucky/Monticello - { 688, 3239, 221439, 11, }, // America/Los_Angeles + { 688, 348, 221269, 12, }, // America/Indiana/Indianapolis + { 688, 481, 221281, 14, }, // America/Indiana/Knox + { 688, 7961, 221295, 17, }, // America/Indiana/Marengo + { 688, 7985, 221312, 20, }, // America/Indiana/Petersburg + { 688, 8012, 221332, 19, }, // America/Indiana/Tell_City + { 688, 8038, 221351, 15, }, // America/Indiana/Vevay + { 688, 8060, 221366, 19, }, // America/Indiana/Vincennes + { 688, 8086, 221385, 17, }, // America/Indiana/Winamac + { 688, 2799, 221402, 7, }, // America/Jamaica + { 688, 8125, 221409, 21, }, // America/Kentucky/Monticello + { 688, 3239, 221430, 11, }, // America/Los_Angeles { 688, 5932, 207, 22, }, // America/Lower_Princes { 688, 8153, 26588, 6, }, // America/Maceio - { 688, 5805, 221450, 9, }, // America/Martinique + { 688, 5805, 221441, 9, }, // America/Martinique { 688, 8220, 229, 6, }, // America/Merida - { 688, 2949, 221459, 16, }, // America/Mexico_City - { 688, 4391, 221475, 8, }, // America/Miquelon + { 688, 2949, 221450, 16, }, // America/Mexico_City + { 688, 4391, 221466, 8, }, // America/Miquelon { 688, 8270, 21944, 8, }, // America/Monterrey { 688, 5824, 7172, 9, }, // America/Montserrat { 688, 1850, 235, 19, }, // America/Noronha - { 688, 8301, 221483, 20, }, // America/North_Dakota/Beulah - { 688, 8329, 221503, 20, }, // America/North_Dakota/Center - { 688, 8357, 221523, 23, }, // America/North_Dakota/New_Salem + { 688, 8301, 221474, 20, }, // America/North_Dakota/Beulah + { 688, 8329, 221494, 20, }, // America/North_Dakota/Center + { 688, 8357, 221514, 23, }, // America/North_Dakota/New_Salem { 688, 393, 317, 4, }, // America/Nuuk { 688, 2356, 164613, 6, }, // America/Panama - { 688, 3945, 221546, 14, }, // America/Port-au-Prince - { 688, 5954, 221560, 15, }, // America/Port_of_Spain + { 688, 3945, 221537, 14, }, // America/Port-au-Prince + { 688, 5954, 221551, 15, }, // America/Port_of_Spain { 688, 5843, 95222, 9, }, // America/Puerto_Rico - { 688, 1878, 221575, 8, }, // America/Sao_Paulo + { 688, 1878, 221566, 8, }, // America/Sao_Paulo { 688, 6899, 321, 16, }, // America/Scoresbysund - { 688, 8508, 221583, 13, }, // America/St_Barthelemy - { 688, 2061, 221596, 8, }, // America/St_Johns - { 688, 5863, 221604, 12, }, // America/St_Kitts - { 688, 5880, 221616, 8, }, // America/St_Lucia - { 688, 855, 221197, 9, }, // America/St_Thomas - { 688, 5913, 221624, 11, }, // America/St_Vincent + { 688, 8508, 221574, 13, }, // America/St_Barthelemy + { 688, 2061, 221587, 8, }, // America/St_Johns + { 688, 5863, 221595, 12, }, // America/St_Kitts + { 688, 5880, 221607, 8, }, // America/St_Lucia + { 688, 855, 221188, 9, }, // America/St_Thomas + { 688, 5913, 221615, 11, }, // America/St_Vincent { 688, 5688, 148000, 7, }, // America/Tortola { 688, 6133, 400, 16, }, // Antarctica/DumontDUrville - { 688, 8568, 221635, 15, }, // Antarctica/Macquarie + { 688, 8568, 221626, 15, }, // Antarctica/Macquarie { 688, 5395, 7594, 6, }, // Asia/Almaty { 688, 3968, 5605, 4, }, // Asia/Amman - { 688, 5511, 221650, 6, }, // Asia/Anadyr - { 688, 5523, 221656, 5, }, // Asia/Aqtau + { 688, 5511, 221641, 6, }, // Asia/Anadyr + { 688, 5523, 221647, 5, }, // Asia/Aqtau { 688, 5368, 7606, 6, }, // Asia/Aqtobe - { 688, 964, 221661, 7, }, // Asia/Ashgabat - { 688, 8624, 221668, 6, }, // Asia/Atyrau + { 688, 964, 221652, 7, }, // Asia/Ashgabat + { 688, 8624, 221659, 6, }, // Asia/Atyrau { 688, 3607, 4162, 6, }, // Asia/Baghdad { 688, 5534, 63955, 6, }, // Asia/Bahrain { 688, 3778, 91536, 6, }, // Asia/Bishkek { 688, 5989, 20751, 6, }, // Asia/Brunei { 688, 4601, 93254, 4, }, // Asia/Chita - { 688, 4511, 221674, 7, }, // Asia/Colombo + { 688, 4511, 221665, 7, }, // Asia/Colombo { 688, 4540, 74438, 7, }, // Asia/Damascus { 688, 1093, 158496, 4, }, // Asia/Dhaka - { 688, 3596, 221681, 5, }, // Asia/Dubai - { 688, 6159, 221686, 7, }, // Asia/Dushanbe + { 688, 3596, 221672, 5, }, // Asia/Dubai + { 688, 6159, 221677, 7, }, // Asia/Dushanbe { 688, 8636, 95258, 9, }, // Asia/Famagusta { 688, 1259, 432, 11, }, // Asia/Ho_Chi_Minh { 688, 1290, 123559, 10, }, // Asia/Jerusalem { 688, 4316, 162180, 9, }, // Asia/Kamchatka - { 688, 1185, 221693, 8, }, // Asia/Kathmandu - { 688, 8661, 221701, 7, }, // Asia/Khandyga + { 688, 1185, 221684, 8, }, // Asia/Kathmandu + { 688, 8661, 221692, 7, }, // Asia/Khandyga { 688, 992, 20838, 7, }, // Asia/Kolkata - { 688, 4197, 221708, 11, }, // Asia/Krasnoyarsk - { 688, 4859, 221719, 12, }, // Asia/Kuala_Lumpur - { 688, 1211, 221731, 5, }, // Asia/Macau + { 688, 4197, 221699, 11, }, // Asia/Krasnoyarsk + { 688, 4859, 221710, 12, }, // Asia/Kuala_Lumpur + { 688, 1211, 221722, 5, }, // Asia/Macau { 688, 1349, 7736, 7, }, // Asia/Makassar { 688, 6920, 20857, 7, }, // Asia/Muscat - { 688, 8675, 221736, 13, }, // Asia/Novokuznetsk + { 688, 8675, 221727, 13, }, // Asia/Novokuznetsk { 688, 7145, 65240, 5, }, // Asia/Oral { 688, 6961, 22518, 8, }, // Asia/Phnom_Penh { 688, 5559, 73150, 5, }, // Asia/Qatar - { 688, 8708, 221749, 8, }, // Asia/Qostanay + { 688, 8708, 221740, 8, }, // Asia/Qostanay { 688, 4269, 7778, 9, }, // Asia/Qyzylorda { 688, 3584, 7787, 4, }, // Asia/Riyadh { 688, 4408, 158282, 7, }, // Asia/Sakhalin { 688, 7245, 20886, 10, }, // Asia/Samarkand { 688, 3279, 7798, 4, }, // Asia/Seoul - { 688, 1053, 221757, 8, }, // Asia/Shanghai - { 688, 4297, 221765, 13, }, // Asia/Srednekolymsk + { 688, 1053, 221748, 8, }, // Asia/Shanghai + { 688, 4297, 221756, 13, }, // Asia/Srednekolymsk { 688, 3263, 177683, 6, }, // Asia/Taipei { 688, 4781, 91755, 7, }, // Asia/Tashkent { 688, 3915, 220114, 7, }, // Asia/Tbilisi { 688, 2772, 7842, 7, }, // Asia/Tehran - { 688, 1317, 221778, 5, }, // Asia/Thimphu - { 688, 1021, 221783, 10, }, // Asia/Ulaanbaatar + { 688, 1317, 221769, 5, }, // Asia/Thimphu + { 688, 1021, 221774, 10, }, // Asia/Ulaanbaatar { 688, 1159, 202026, 7, }, // Asia/Urumqi - { 688, 8722, 221793, 9, }, // Asia/Ust-Nera + { 688, 8722, 221784, 9, }, // Asia/Ust-Nera { 688, 6977, 26939, 8, }, // Asia/Vientiane { 688, 1235, 477, 6, }, // Asia/Yangon - { 688, 3883, 221802, 14, }, // Asia/Yekaterinburg - { 688, 3747, 221816, 7, }, // Asia/Yerevan - { 688, 3663, 221823, 11, }, // Atlantic/Azores - { 688, 6628, 221834, 13, }, // Atlantic/Canary - { 688, 3727, 221847, 9, }, // Atlantic/Cape_Verde - { 688, 1395, 221856, 11, }, // Atlantic/Faroe - { 688, 8736, 221867, 13, }, // Atlantic/Madeira - { 688, 2748, 221880, 8, }, // Atlantic/Reykjavik - { 688, 7272, 221888, 16, }, // Atlantic/South_Georgia - { 688, 6821, 221904, 14, }, // Atlantic/St_Helena - { 688, 1670, 221918, 8, }, // Australia/Adelaide - { 688, 1635, 221926, 8, }, // Australia/Brisbane - { 688, 1547, 221934, 15, }, // Australia/Lord_Howe - { 688, 6441, 221949, 9, }, // Europe/Amsterdam + { 688, 3883, 221793, 14, }, // Asia/Yekaterinburg + { 688, 3747, 221807, 7, }, // Asia/Yerevan + { 688, 3663, 221814, 11, }, // Atlantic/Azores + { 688, 6628, 221825, 13, }, // Atlantic/Canary + { 688, 3727, 221838, 9, }, // Atlantic/Cape_Verde + { 688, 1395, 221847, 11, }, // Atlantic/Faroe + { 688, 8736, 221858, 13, }, // Atlantic/Madeira + { 688, 2748, 221871, 8, }, // Atlantic/Reykjavik + { 688, 7272, 221879, 16, }, // Atlantic/South_Georgia + { 688, 6821, 221895, 14, }, // Atlantic/St_Helena + { 688, 1670, 221909, 8, }, // Australia/Adelaide + { 688, 1635, 221917, 8, }, // Australia/Brisbane + { 688, 1547, 221925, 15, }, // Australia/Lord_Howe + { 688, 6441, 221940, 9, }, // Europe/Amsterdam { 688, 6216, 33638, 6, }, // Europe/Andorra { 688, 3620, 33644, 8, }, // Europe/Astrakhan { 688, 2300, 5911, 5, }, // Europe/Athens { 688, 6336, 58906, 8, }, // Europe/Belgrade - { 688, 6488, 221958, 10, }, // Europe/Bratislava + { 688, 6488, 221949, 10, }, // Europe/Bratislava { 688, 2167, 27022, 6, }, // Europe/Brussels { 688, 3928, 21073, 8, }, // Europe/Bucharest { 688, 8772, 27037, 8, }, // Europe/Busingen { 688, 6289, 95331, 10, }, // Europe/Copenhagen - { 688, 6307, 221968, 9, }, // Europe/Gibraltar - { 688, 8804, 221977, 12, }, // Europe/Isle_of_Man + { 688, 6307, 221959, 9, }, // Europe/Gibraltar + { 688, 8804, 221968, 12, }, // Europe/Isle_of_Man { 688, 1130, 164893, 8, }, // Europe/Istanbul { 688, 3979, 63006, 12, }, // Europe/Kaliningrad { 688, 2527, 8148, 4, }, // Europe/Kyiv { 688, 3213, 157721, 7, }, // Europe/Lisbon - { 688, 6506, 221989, 8, }, // Europe/Ljubljana + { 688, 6506, 221980, 8, }, // Europe/Ljubljana { 688, 2501, 95370, 6, }, // Europe/London - { 688, 6365, 221997, 10, }, // Europe/Luxembourg + { 688, 6365, 221988, 10, }, // Europe/Luxembourg { 688, 6410, 44570, 6, }, // Europe/Monaco { 688, 3537, 95387, 5, }, // Europe/Moscow - { 688, 6458, 222007, 4, }, // Europe/Oslo - { 688, 4284, 222011, 6, }, // Europe/Paris + { 688, 6458, 221998, 4, }, // Europe/Oslo + { 688, 4284, 222002, 6, }, // Europe/Paris { 688, 6424, 196828, 9, }, // Europe/Podgorica { 688, 6275, 21185, 5, }, // Europe/Prague { 688, 6324, 6064, 4, }, // Europe/Rome { 688, 6470, 65868, 9, }, // Europe/San_Marino - { 688, 8849, 222017, 11, }, // Europe/Simferopol - { 688, 6523, 222028, 8, }, // Europe/Stockholm + { 688, 8849, 222008, 11, }, // Europe/Simferopol + { 688, 6523, 222019, 8, }, // Europe/Stockholm { 688, 8867, 8250, 5, }, // Europe/Tallinn { 688, 6202, 21213, 6, }, // Europe/Tirane - { 688, 8882, 222036, 8, }, // Europe/Ulyanovsk - { 688, 6567, 222044, 7, }, // Europe/Vatican + { 688, 8882, 222027, 8, }, // Europe/Ulyanovsk + { 688, 6567, 222035, 7, }, // Europe/Vatican { 688, 6231, 21230, 5, }, // Europe/Vienna { 688, 4727, 63187, 10, }, // Europe/Volgograd { 688, 3190, 95436, 8, }, // Europe/Warsaw { 688, 6540, 95452, 6, }, // Europe/Zurich - { 688, 6947, 222051, 6, }, // Indian/Chagos - { 688, 6046, 222057, 15, }, // Indian/Christmas - { 688, 6063, 222072, 11, }, // Indian/Cocos - { 688, 5029, 222083, 12, }, // Indian/Comoro + { 688, 6947, 222042, 6, }, // Indian/Chagos + { 688, 6046, 222048, 15, }, // Indian/Christmas + { 688, 6063, 222063, 11, }, // Indian/Cocos + { 688, 5029, 222074, 12, }, // Indian/Comoro { 688, 7260, 27115, 4, }, // Indian/Mahe - { 688, 7050, 222095, 13, }, // Indian/Maldives - { 688, 4069, 222108, 14, }, // Indian/Mauritius - { 688, 5098, 222122, 12, }, // Indian/Mayotte - { 688, 7211, 222134, 13, }, // Indian/Reunion - { 688, 3706, 222147, 18, }, // Pacific/Bougainville - { 688, 3015, 222165, 12, }, // Pacific/Chatham - { 688, 3157, 222177, 11, }, // Pacific/Chuuk - { 688, 2237, 222188, 15, }, // Pacific/Easter - { 688, 7360, 222203, 11, }, // Pacific/Efate - { 688, 7327, 222214, 13, }, // Pacific/Fakaofo - { 688, 7343, 222227, 14, }, // Pacific/Funafuti + { 688, 7050, 222086, 13, }, // Indian/Maldives + { 688, 4069, 222099, 14, }, // Indian/Mauritius + { 688, 5098, 222113, 12, }, // Indian/Mayotte + { 688, 7211, 222125, 13, }, // Indian/Reunion + { 688, 3706, 222138, 18, }, // Pacific/Bougainville + { 688, 3015, 222156, 12, }, // Pacific/Chatham + { 688, 3157, 222168, 11, }, // Pacific/Chuuk + { 688, 2237, 222179, 15, }, // Pacific/Easter + { 688, 7360, 222194, 11, }, // Pacific/Efate + { 688, 7327, 222205, 13, }, // Pacific/Fakaofo + { 688, 7343, 222218, 14, }, // Pacific/Funafuti { 688, 6678, 167332, 9, }, // Pacific/Galapagos - { 688, 6696, 222241, 13, }, // Pacific/Gambier - { 688, 3822, 222254, 17, }, // Pacific/Guadalcanal - { 688, 3049, 222271, 12, }, // Pacific/Kanton - { 688, 3998, 222283, 16, }, // Pacific/Kiritimati - { 688, 7019, 222299, 12, }, // Pacific/Kosrae - { 688, 2842, 222311, 15, }, // Pacific/Kwajalein - { 688, 4051, 222326, 14, }, // Pacific/Marquesas - { 688, 8914, 222340, 12, }, // Pacific/Midway - { 688, 7084, 222352, 11, }, // Pacific/Nauru - { 688, 7132, 222363, 10, }, // Pacific/Niue - { 688, 4168, 222373, 13, }, // Pacific/Norfolk + { 688, 6696, 222232, 13, }, // Pacific/Gambier + { 688, 3822, 222245, 17, }, // Pacific/Guadalcanal + { 688, 3049, 222262, 12, }, // Pacific/Kanton + { 688, 3998, 222274, 16, }, // Pacific/Kiritimati + { 688, 7019, 222290, 12, }, // Pacific/Kosrae + { 688, 2842, 222302, 15, }, // Pacific/Kwajalein + { 688, 4051, 222317, 14, }, // Pacific/Marquesas + { 688, 8914, 222331, 12, }, // Pacific/Midway + { 688, 7084, 222343, 11, }, // Pacific/Nauru + { 688, 7132, 222354, 10, }, // Pacific/Niue + { 688, 4168, 222364, 13, }, // Pacific/Norfolk { 688, 7098, 4628, 6, }, // Pacific/Noumea { 688, 3126, 135456, 11, }, // Pacific/Pago_Pago - { 688, 7155, 222386, 5, }, // Pacific/Palau - { 688, 7194, 222391, 14, }, // Pacific/Pitcairn - { 688, 3096, 222405, 12, }, // Pacific/Pohnpei - { 688, 4807, 222417, 13, }, // Pacific/Port_Moresby - { 688, 6076, 222430, 15, }, // Pacific/Rarotonga - { 688, 6031, 222445, 12, }, // Pacific/Saipan - { 688, 7312, 222457, 11, }, // Pacific/Tahiti - { 688, 6712, 222468, 13, }, // Pacific/Tarawa - { 688, 4583, 222481, 15, }, // Pacific/Tongatapu - { 688, 7392, 222496, 10, }, // Pacific/Wake - { 688, 7405, 222506, 12, }, // Pacific/Wallis - { 689, 6788, 222518, 7, }, // Africa/Abidjan Kuvi/Latin/India - { 689, 6760, 222525, 4, }, // Africa/Accra - { 689, 5059, 222529, 10, }, // Africa/Addis_Ababa - { 689, 7420, 222539, 7, }, // Africa/Algiers - { 689, 14, 222546, 6, }, // Africa/Asmara - { 689, 44, 222552, 6, }, // Africa/Bamako - { 689, 5257, 222558, 6, }, // Africa/Bangui - { 689, 6746, 222564, 6, }, // Africa/Banjul - { 689, 7435, 222570, 6, }, // Africa/Bissau - { 689, 4957, 222576, 8, }, // Africa/Blantyre - { 689, 5287, 222584, 9, }, // Africa/Brazzaville - { 689, 4922, 222593, 9, }, // Africa/Bujumbura - { 689, 2320, 222602, 5, }, // Africa/Cairo - { 689, 4117, 222607, 10, }, // Africa/Casablanca - { 689, 7449, 222617, 5, }, // Africa/Ceuta - { 689, 6773, 222622, 7, }, // Africa/Conakry - { 689, 6840, 222629, 4, }, // Africa/Dakar - { 689, 5130, 222633, 13, }, // Africa/Dar_es_Salaam + { 688, 7155, 222377, 5, }, // Pacific/Palau + { 688, 7194, 222382, 14, }, // Pacific/Pitcairn + { 688, 3096, 222396, 12, }, // Pacific/Pohnpei + { 688, 4807, 222408, 13, }, // Pacific/Port_Moresby + { 688, 6076, 222421, 15, }, // Pacific/Rarotonga + { 688, 6031, 222436, 12, }, // Pacific/Saipan + { 688, 7312, 222448, 11, }, // Pacific/Tahiti + { 688, 6712, 222459, 13, }, // Pacific/Tarawa + { 688, 4583, 222472, 15, }, // Pacific/Tongatapu + { 688, 7392, 222487, 10, }, // Pacific/Wake + { 688, 7405, 222497, 12, }, // Pacific/Wallis + { 689, 6788, 222509, 7, }, // Africa/Abidjan Kuvi/Latin/India + { 689, 6760, 222516, 4, }, // Africa/Accra + { 689, 5059, 222520, 10, }, // Africa/Addis_Ababa + { 689, 7420, 222530, 7, }, // Africa/Algiers + { 689, 14, 222537, 6, }, // Africa/Asmara + { 689, 44, 222543, 6, }, // Africa/Bamako + { 689, 5257, 222549, 6, }, // Africa/Bangui + { 689, 6746, 222555, 6, }, // Africa/Banjul + { 689, 7435, 222561, 6, }, // Africa/Bissau + { 689, 4957, 222567, 8, }, // Africa/Blantyre + { 689, 5287, 222575, 9, }, // Africa/Brazzaville + { 689, 4922, 222584, 9, }, // Africa/Bujumbura + { 689, 2320, 222593, 5, }, // Africa/Cairo + { 689, 4117, 222598, 10, }, // Africa/Casablanca + { 689, 7449, 222608, 5, }, // Africa/Ceuta + { 689, 6773, 222613, 7, }, // Africa/Conakry + { 689, 6840, 222620, 4, }, // Africa/Dakar + { 689, 5130, 222624, 13, }, // Africa/Dar_es_Salaam { 689, 5043, 26493, 6, }, // Africa/Djibouti - { 689, 5243, 222646, 5, }, // Africa/Douala - { 689, 5166, 222651, 9, }, // Africa/El_Aaiun - { 689, 6853, 222660, 7, }, // Africa/Freetown - { 689, 4906, 222667, 7, }, // Africa/Gaborone - { 689, 5015, 222674, 5, }, // Africa/Harare - { 689, 4479, 222679, 12, }, // Africa/Johannesburg - { 689, 4499, 222691, 4, }, // Africa/Juba - { 689, 5151, 222695, 6, }, // Africa/Kampala - { 689, 4524, 222701, 7, }, // Africa/Khartoum - { 689, 4973, 222708, 6, }, // Africa/Kigali - { 689, 5306, 222714, 7, }, // Africa/Kinshasa - { 689, 4744, 222721, 5, }, // Africa/Lagos - { 689, 5336, 222726, 9, }, // Africa/Libreville + { 689, 5243, 222637, 5, }, // Africa/Douala + { 689, 5166, 222642, 9, }, // Africa/El_Aaiun + { 689, 6853, 222651, 7, }, // Africa/Freetown + { 689, 4906, 222658, 7, }, // Africa/Gaborone + { 689, 5015, 222665, 5, }, // Africa/Harare + { 689, 4479, 222670, 12, }, // Africa/Johannesburg + { 689, 4499, 222682, 4, }, // Africa/Juba + { 689, 5151, 222686, 6, }, // Africa/Kampala + { 689, 4524, 222692, 7, }, // Africa/Khartoum + { 689, 4973, 222699, 6, }, // Africa/Kigali + { 689, 5306, 222705, 7, }, // Africa/Kinshasa + { 689, 4744, 222712, 5, }, // Africa/Lagos + { 689, 5336, 222717, 9, }, // Africa/Libreville { 689, 6869, 4087, 3, }, // Africa/Lome - { 689, 5211, 222735, 6, }, // Africa/Luanda - { 689, 4939, 222741, 9, }, // Africa/Lubumbashi - { 689, 5001, 222750, 6, }, // Africa/Lusaka - { 689, 5322, 222756, 6, }, // Africa/Malabo - { 689, 4987, 222762, 6, }, // Africa/Maputo - { 689, 5197, 222768, 6, }, // Africa/Maseru - { 689, 5182, 222774, 7, }, // Africa/Mbabane - { 689, 5113, 222781, 8, }, // Africa/Mogadishu - { 689, 7034, 222789, 8, }, // Africa/Monrovia - { 689, 3853, 222797, 7, }, // Africa/Nairobi - { 689, 5271, 222804, 7, }, // Africa/Ndjamena - { 689, 5354, 222811, 6, }, // Africa/Niamey - { 689, 6803, 222817, 6, }, // Africa/Nouakchott - { 689, 6727, 222823, 7, }, // Africa/Ouagadougou - { 689, 5225, 222830, 10, }, // Africa/Porto-Novo - { 689, 4435, 222840, 7, }, // Africa/Sao_Tome - { 689, 2866, 222847, 7, }, // Africa/Tripoli - { 689, 6554, 222854, 5, }, // Africa/Tunis - { 689, 4152, 222859, 7, }, // Africa/Windhoek - { 689, 132, 222866, 4, }, // America/Adak - { 689, 3346, 222870, 7, }, // America/Anchorage - { 689, 5607, 222877, 8, }, // America/Anguilla - { 689, 5624, 222885, 7, }, // America/Antigua - { 689, 4554, 222892, 9, }, // America/Araguaina - { 689, 166, 222901, 13, }, // America/Argentina/Buenos_Aires - { 689, 91, 222914, 9, }, // America/Argentina/Catamarca - { 689, 270, 222923, 7, }, // America/Argentina/Cordoba - { 689, 441, 222930, 5, }, // America/Argentina/Jujuy - { 689, 7462, 222935, 8, }, // America/Argentina/La_Rioja - { 689, 565, 222943, 7, }, // America/Argentina/Mendoza - { 689, 7489, 222950, 13, }, // America/Argentina/Rio_Gallegos - { 689, 7520, 222963, 5, }, // America/Argentina/Salta - { 689, 7544, 222968, 8, }, // America/Argentina/San_Juan - { 689, 5580, 222976, 8, }, // America/Argentina/San_Luis - { 689, 7571, 222984, 6, }, // America/Argentina/Tucuman - { 689, 7597, 222990, 7, }, // America/Argentina/Ushuaia - { 689, 5640, 222997, 5, }, // America/Aruba - { 689, 4252, 223002, 8, }, // America/Asuncion - { 689, 237, 223010, 8, }, // America/Atikokan - { 689, 3679, 223018, 5, }, // America/Bahia - { 689, 7623, 223023, 13, }, // America/Bahia_Banderas - { 689, 5654, 223036, 8, }, // America/Barbados - { 689, 7646, 223044, 5, }, // America/Belem - { 689, 5407, 223049, 5, }, // America/Belize - { 689, 7660, 223054, 12, }, // America/Blanc-Sablon - { 689, 7681, 223066, 9, }, // America/Boa_Vista - { 689, 4361, 223075, 6, }, // America/Bogota - { 689, 7699, 223081, 5, }, // America/Boise - { 689, 7713, 223086, 10, }, // America/Cambridge_Bay - { 689, 7735, 223096, 12, }, // America/Campo_Grande - { 689, 3868, 223108, 6, }, // America/Cancun - { 689, 4694, 223114, 7, }, // America/Caracas - { 689, 4345, 223121, 5, }, // America/Cayenne - { 689, 5496, 223126, 6, }, // America/Cayman - { 689, 2260, 223132, 6, }, // America/Chicago - { 689, 7756, 223138, 9, }, // America/Chihuahua + { 689, 5211, 222726, 6, }, // Africa/Luanda + { 689, 4939, 222732, 9, }, // Africa/Lubumbashi + { 689, 5001, 222741, 6, }, // Africa/Lusaka + { 689, 5322, 222747, 6, }, // Africa/Malabo + { 689, 4987, 222753, 6, }, // Africa/Maputo + { 689, 5197, 222759, 6, }, // Africa/Maseru + { 689, 5182, 222765, 7, }, // Africa/Mbabane + { 689, 5113, 222772, 8, }, // Africa/Mogadishu + { 689, 7034, 222780, 8, }, // Africa/Monrovia + { 689, 3853, 222788, 7, }, // Africa/Nairobi + { 689, 5271, 222795, 7, }, // Africa/Ndjamena + { 689, 5354, 222802, 6, }, // Africa/Niamey + { 689, 6803, 222808, 6, }, // Africa/Nouakchott + { 689, 6727, 222814, 7, }, // Africa/Ouagadougou + { 689, 5225, 222821, 10, }, // Africa/Porto-Novo + { 689, 4435, 222831, 7, }, // Africa/Sao_Tome + { 689, 2866, 222838, 7, }, // Africa/Tripoli + { 689, 6554, 222845, 5, }, // Africa/Tunis + { 689, 4152, 222850, 7, }, // Africa/Windhoek + { 689, 132, 222857, 4, }, // America/Adak + { 689, 3346, 222861, 7, }, // America/Anchorage + { 689, 5607, 222868, 8, }, // America/Anguilla + { 689, 5624, 222876, 7, }, // America/Antigua + { 689, 4554, 222883, 9, }, // America/Araguaina + { 689, 166, 222892, 13, }, // America/Argentina/Buenos_Aires + { 689, 91, 222905, 9, }, // America/Argentina/Catamarca + { 689, 270, 222914, 7, }, // America/Argentina/Cordoba + { 689, 441, 222921, 5, }, // America/Argentina/Jujuy + { 689, 7462, 222926, 8, }, // America/Argentina/La_Rioja + { 689, 565, 222934, 7, }, // America/Argentina/Mendoza + { 689, 7489, 222941, 13, }, // America/Argentina/Rio_Gallegos + { 689, 7520, 222954, 5, }, // America/Argentina/Salta + { 689, 7544, 222959, 8, }, // America/Argentina/San_Juan + { 689, 5580, 222967, 8, }, // America/Argentina/San_Luis + { 689, 7571, 222975, 6, }, // America/Argentina/Tucuman + { 689, 7597, 222981, 7, }, // America/Argentina/Ushuaia + { 689, 5640, 222988, 5, }, // America/Aruba + { 689, 4252, 222993, 8, }, // America/Asuncion + { 689, 237, 223001, 8, }, // America/Atikokan + { 689, 3679, 223009, 5, }, // America/Bahia + { 689, 7623, 223014, 13, }, // America/Bahia_Banderas + { 689, 5654, 223027, 8, }, // America/Barbados + { 689, 7646, 223035, 5, }, // America/Belem + { 689, 5407, 223040, 5, }, // America/Belize + { 689, 7660, 223045, 12, }, // America/Blanc-Sablon + { 689, 7681, 223057, 9, }, // America/Boa_Vista + { 689, 4361, 223066, 6, }, // America/Bogota + { 689, 7699, 223072, 5, }, // America/Boise + { 689, 7713, 223077, 10, }, // America/Cambridge_Bay + { 689, 7735, 223087, 12, }, // America/Campo_Grande + { 689, 3868, 223099, 6, }, // America/Cancun + { 689, 4694, 223105, 7, }, // America/Caracas + { 689, 4345, 223112, 5, }, // America/Cayenne + { 689, 5496, 223117, 6, }, // America/Cayman + { 689, 2260, 223123, 6, }, // America/Chicago + { 689, 7756, 223129, 9, }, // America/Chihuahua { 689, 7774, 53, 13, }, // America/Ciudad_Juarez - { 689, 5422, 223147, 10, }, // America/Costa_Rica - { 689, 7796, 223157, 7, }, // America/Creston - { 689, 3791, 223164, 6, }, // America/Cuiaba - { 689, 5723, 223170, 7, }, // America/Curacao - { 689, 7812, 223177, 11, }, // America/Danmarkshavn - { 689, 7833, 223188, 5, }, // America/Dawson - { 689, 7848, 223193, 11, }, // America/Dawson_Creek - { 689, 805, 223204, 6, }, // America/Denver - { 689, 3465, 223210, 7, }, // America/Detroit - { 689, 5739, 223217, 8, }, // America/Dominica - { 689, 893, 223225, 8, }, // America/Edmonton - { 689, 7869, 223233, 8, }, // America/Eirunepe - { 689, 5441, 223241, 11, }, // America/El_Salvador - { 689, 7886, 223252, 11, }, // America/Fort_Nelson - { 689, 7906, 223263, 9, }, // America/Fortaleza - { 689, 7924, 223272, 8, }, // America/Glace_Bay - { 689, 6881, 223280, 7, }, // America/Goose_Bay - { 689, 4612, 223287, 10, }, // America/Grand_Turk - { 689, 5770, 223297, 7, }, // America/Grenada - { 689, 5786, 223304, 10, }, // America/Guadeloupe - { 689, 3760, 223314, 9, }, // America/Guatemala - { 689, 4841, 223323, 8, }, // America/Guayaquil - { 689, 6932, 223331, 6, }, // America/Guyana - { 689, 1939, 223337, 8, }, // America/Halifax - { 689, 2281, 223345, 6, }, // America/Havana + { 689, 5422, 223138, 10, }, // America/Costa_Rica + { 689, 7796, 223148, 7, }, // America/Creston + { 689, 3791, 223155, 6, }, // America/Cuiaba + { 689, 5723, 223161, 7, }, // America/Curacao + { 689, 7812, 223168, 11, }, // America/Danmarkshavn + { 689, 7833, 223179, 5, }, // America/Dawson + { 689, 7848, 223184, 11, }, // America/Dawson_Creek + { 689, 805, 223195, 6, }, // America/Denver + { 689, 3465, 223201, 7, }, // America/Detroit + { 689, 5739, 223208, 8, }, // America/Dominica + { 689, 893, 223216, 8, }, // America/Edmonton + { 689, 7869, 223224, 8, }, // America/Eirunepe + { 689, 5441, 223232, 11, }, // America/El_Salvador + { 689, 7886, 223243, 11, }, // America/Fort_Nelson + { 689, 7906, 223254, 9, }, // America/Fortaleza + { 689, 7924, 223263, 8, }, // America/Glace_Bay + { 689, 6881, 223271, 7, }, // America/Goose_Bay + { 689, 4612, 223278, 10, }, // America/Grand_Turk + { 689, 5770, 223288, 7, }, // America/Grenada + { 689, 5786, 223295, 10, }, // America/Guadeloupe + { 689, 3760, 223305, 9, }, // America/Guatemala + { 689, 4841, 223314, 8, }, // America/Guayaquil + { 689, 6932, 223322, 6, }, // America/Guyana + { 689, 1939, 223328, 8, }, // America/Halifax + { 689, 2281, 223336, 6, }, // America/Havana { 689, 7942, 6920, 8, }, // America/Hermosillo - { 689, 348, 223351, 12, }, // America/Indiana/Indianapolis - { 689, 481, 223363, 14, }, // America/Indiana/Knox - { 689, 7961, 223377, 17, }, // America/Indiana/Marengo - { 689, 7985, 223394, 20, }, // America/Indiana/Petersburg - { 689, 8012, 223414, 19, }, // America/Indiana/Tell_City - { 689, 8038, 223433, 14, }, // America/Indiana/Vevay - { 689, 8060, 223447, 17, }, // America/Indiana/Vincennes - { 689, 8086, 223464, 17, }, // America/Indiana/Winamac - { 689, 8110, 223481, 6, }, // America/Inuvik - { 689, 660, 223487, 7, }, // America/Iqaluit - { 689, 2799, 223494, 7, }, // America/Jamaica - { 689, 5380, 223501, 5, }, // America/Juneau - { 689, 521, 223506, 9, }, // America/Kentucky/Louisville - { 689, 8125, 223515, 19, }, // America/Kentucky/Monticello - { 689, 5704, 223534, 10, }, // America/Kralendijk - { 689, 4376, 223544, 6, }, // America/La_Paz + { 689, 348, 223342, 12, }, // America/Indiana/Indianapolis + { 689, 481, 223354, 14, }, // America/Indiana/Knox + { 689, 7961, 223368, 17, }, // America/Indiana/Marengo + { 689, 7985, 223385, 20, }, // America/Indiana/Petersburg + { 689, 8012, 223405, 19, }, // America/Indiana/Tell_City + { 689, 8038, 223424, 14, }, // America/Indiana/Vevay + { 689, 8060, 223438, 17, }, // America/Indiana/Vincennes + { 689, 8086, 223455, 17, }, // America/Indiana/Winamac + { 689, 8110, 223472, 6, }, // America/Inuvik + { 689, 660, 223478, 7, }, // America/Iqaluit + { 689, 2799, 223485, 7, }, // America/Jamaica + { 689, 5380, 223492, 5, }, // America/Juneau + { 689, 521, 223497, 9, }, // America/Kentucky/Louisville + { 689, 8125, 223506, 19, }, // America/Kentucky/Monticello + { 689, 5704, 223525, 10, }, // America/Kralendijk + { 689, 4376, 223535, 6, }, // America/La_Paz { 689, 7169, 157373, 4, }, // America/Lima - { 689, 3239, 223550, 11, }, // America/Los_Angeles - { 689, 5932, 223561, 21, }, // America/Lower_Princes - { 689, 8153, 223582, 5, }, // America/Maceio - { 689, 8168, 223587, 7, }, // America/Managua - { 689, 1908, 223594, 6, }, // America/Manaus - { 689, 5897, 223600, 7, }, // America/Marigot - { 689, 5805, 223607, 8, }, // America/Martinique - { 689, 8184, 223615, 9, }, // America/Matamoros - { 689, 2917, 223624, 8, }, // America/Mazatlan - { 689, 8202, 223632, 8, }, // America/Menominee - { 689, 8220, 223640, 6, }, // America/Merida - { 689, 8235, 223646, 10, }, // America/Metlakatla - { 689, 2949, 223656, 12, }, // America/Mexico_City - { 689, 4391, 223668, 7, }, // America/Miquelon - { 689, 8254, 223675, 7, }, // America/Moncton - { 689, 8270, 223682, 8, }, // America/Monterrey - { 689, 4098, 223690, 10, }, // America/Montevideo - { 689, 5824, 223700, 10, }, // America/Montserrat - { 689, 5481, 223710, 5, }, // America/Nassau - { 689, 2379, 223715, 9, }, // America/New_York + { 689, 3239, 223541, 11, }, // America/Los_Angeles + { 689, 5932, 223552, 21, }, // America/Lower_Princes + { 689, 8153, 223573, 5, }, // America/Maceio + { 689, 8168, 223578, 7, }, // America/Managua + { 689, 1908, 223585, 6, }, // America/Manaus + { 689, 5897, 223591, 7, }, // America/Marigot + { 689, 5805, 223598, 8, }, // America/Martinique + { 689, 8184, 223606, 9, }, // America/Matamoros + { 689, 2917, 223615, 8, }, // America/Mazatlan + { 689, 8202, 223623, 8, }, // America/Menominee + { 689, 8220, 223631, 6, }, // America/Merida + { 689, 8235, 223637, 10, }, // America/Metlakatla + { 689, 2949, 223647, 12, }, // America/Mexico_City + { 689, 4391, 223659, 7, }, // America/Miquelon + { 689, 8254, 223666, 7, }, // America/Moncton + { 689, 8270, 223673, 8, }, // America/Monterrey + { 689, 4098, 223681, 10, }, // America/Montevideo + { 689, 5824, 223691, 10, }, // America/Montserrat + { 689, 5481, 223701, 5, }, // America/Nassau + { 689, 2379, 223706, 9, }, // America/New_York { 689, 8288, 7120, 3, }, // America/Nome - { 689, 1850, 223724, 7, }, // America/Noronha - { 689, 8301, 223731, 20, }, // America/North_Dakota/Beulah - { 689, 8329, 223751, 19, }, // America/North_Dakota/Center - { 689, 8357, 223770, 23, }, // America/North_Dakota/New_Salem - { 689, 393, 223793, 3, }, // America/Nuuk - { 689, 8388, 223796, 7, }, // America/Ojinaga - { 689, 2356, 223803, 6, }, // America/Panama - { 689, 6173, 223809, 10, }, // America/Paramaribo - { 689, 2973, 223819, 6, }, // America/Phoenix - { 689, 3945, 223825, 14, }, // America/Port-au-Prince - { 689, 5954, 223839, 13, }, // America/Port_of_Spain - { 689, 8404, 223852, 11, }, // America/Porto_Velho - { 689, 5843, 223863, 11, }, // America/Puerto_Rico - { 689, 4030, 223874, 12, }, // America/Punta_Arenas - { 689, 8424, 223886, 13, }, // America/Rankin_Inlet - { 689, 8445, 223899, 6, }, // America/Recife - { 689, 1995, 223905, 6, }, // America/Regina - { 689, 8460, 223911, 8, }, // America/Resolute - { 689, 695, 223919, 10, }, // America/Rio_Branco - { 689, 8477, 223929, 6, }, // America/Santarem - { 689, 2201, 223935, 8, }, // America/Santiago - { 689, 6111, 223943, 13, }, // America/Santo_Domingo - { 689, 1878, 223956, 9, }, // America/Sao_Paulo - { 689, 6899, 223965, 11, }, // America/Scoresbysund - { 689, 8494, 223976, 5, }, // America/Sitka - { 689, 8508, 223981, 14, }, // America/St_Barthelemy - { 689, 2061, 223995, 9, }, // America/St_Johns - { 689, 5863, 224004, 10, }, // America/St_Kitts - { 689, 5880, 224014, 10, }, // America/St_Lucia - { 689, 855, 224024, 10, }, // America/St_Thomas - { 689, 5913, 224034, 12, }, // America/St_Vincent - { 689, 8530, 224046, 13, }, // America/Swift_Current - { 689, 5461, 224059, 4, }, // America/Tegucigalpa - { 689, 5756, 224063, 4, }, // America/Thule - { 689, 313, 224067, 7, }, // America/Tijuana - { 689, 608, 224074, 7, }, // America/Toronto - { 689, 5688, 224081, 7, }, // America/Tortola - { 689, 2093, 224088, 8, }, // America/Vancouver - { 689, 2144, 224096, 9, }, // America/Whitehorse - { 689, 734, 224105, 8, }, // America/Winnipeg - { 689, 8552, 224113, 7, }, // America/Yakutat - { 689, 6001, 224120, 5, }, // Antarctica/Casey - { 689, 6094, 224125, 5, }, // Antarctica/Davis - { 689, 6133, 224130, 17, }, // Antarctica/DumontDUrville - { 689, 8568, 224147, 7, }, // Antarctica/Macquarie - { 689, 7066, 224154, 6, }, // Antarctica/Mawson - { 689, 7113, 224160, 9, }, // Antarctica/McMurdo - { 689, 8589, 224169, 6, }, // Antarctica/Palmer - { 689, 7226, 224175, 6, }, // Antarctica/Rothera - { 689, 7295, 224181, 5, }, // Antarctica/Syowa - { 689, 8607, 224186, 5, }, // Antarctica/Troll - { 689, 7374, 224191, 6, }, // Antarctica/Vostok - { 689, 1429, 224197, 10, }, // Arctic/Longyearbyen - { 689, 5570, 224207, 4, }, // Asia/Aden - { 689, 5395, 224211, 6, }, // Asia/Almaty - { 689, 3968, 224217, 5, }, // Asia/Amman - { 689, 5511, 224222, 6, }, // Asia/Anadyr - { 689, 5523, 224228, 5, }, // Asia/Aqtau - { 689, 5368, 224233, 7, }, // Asia/Aqtobe - { 689, 964, 224240, 7, }, // Asia/Ashgabat - { 689, 8624, 224247, 6, }, // Asia/Atyrau - { 689, 3607, 224253, 6, }, // Asia/Baghdad - { 689, 5534, 224259, 7, }, // Asia/Bahrain - { 689, 3653, 224266, 4, }, // Asia/Baku - { 689, 4466, 224270, 7, }, // Asia/Bangkok - { 689, 3571, 224277, 7, }, // Asia/Barnaul - { 689, 4086, 224284, 6, }, // Asia/Beirut - { 689, 3778, 224290, 6, }, // Asia/Bishkek - { 689, 5989, 224296, 6, }, // Asia/Brunei - { 689, 4601, 224302, 4, }, // Asia/Chita - { 689, 4511, 224306, 7, }, // Asia/Colombo - { 689, 4540, 224313, 8, }, // Asia/Damascus - { 689, 1093, 222867, 4, }, // Asia/Dhaka - { 689, 6192, 224321, 4, }, // Asia/Dili - { 689, 3596, 224325, 5, }, // Asia/Dubai - { 689, 6159, 224330, 7, }, // Asia/Dushanbe - { 689, 8636, 224337, 9, }, // Asia/Famagusta - { 689, 8651, 224346, 4, }, // Asia/Gaza - { 689, 4795, 224350, 6, }, // Asia/Hebron - { 689, 1259, 224356, 15, }, // Asia/Ho_Chi_Minh - { 689, 2704, 224371, 9, }, // Asia/Hong_Kong + { 689, 1850, 223715, 7, }, // America/Noronha + { 689, 8301, 223722, 20, }, // America/North_Dakota/Beulah + { 689, 8329, 223742, 19, }, // America/North_Dakota/Center + { 689, 8357, 223761, 23, }, // America/North_Dakota/New_Salem + { 689, 393, 223784, 3, }, // America/Nuuk + { 689, 8388, 223787, 7, }, // America/Ojinaga + { 689, 2356, 223794, 6, }, // America/Panama + { 689, 6173, 223800, 10, }, // America/Paramaribo + { 689, 2973, 223810, 6, }, // America/Phoenix + { 689, 3945, 223816, 14, }, // America/Port-au-Prince + { 689, 5954, 223830, 13, }, // America/Port_of_Spain + { 689, 8404, 223843, 11, }, // America/Porto_Velho + { 689, 5843, 223854, 11, }, // America/Puerto_Rico + { 689, 4030, 223865, 12, }, // America/Punta_Arenas + { 689, 8424, 223877, 13, }, // America/Rankin_Inlet + { 689, 8445, 223890, 6, }, // America/Recife + { 689, 1995, 223896, 6, }, // America/Regina + { 689, 8460, 223902, 8, }, // America/Resolute + { 689, 695, 223910, 10, }, // America/Rio_Branco + { 689, 8477, 223920, 6, }, // America/Santarem + { 689, 2201, 223926, 8, }, // America/Santiago + { 689, 6111, 223934, 13, }, // America/Santo_Domingo + { 689, 1878, 223947, 9, }, // America/Sao_Paulo + { 689, 6899, 223956, 11, }, // America/Scoresbysund + { 689, 8494, 223967, 5, }, // America/Sitka + { 689, 8508, 223972, 14, }, // America/St_Barthelemy + { 689, 2061, 223986, 9, }, // America/St_Johns + { 689, 5863, 223995, 10, }, // America/St_Kitts + { 689, 5880, 224005, 10, }, // America/St_Lucia + { 689, 855, 224015, 10, }, // America/St_Thomas + { 689, 5913, 224025, 12, }, // America/St_Vincent + { 689, 8530, 224037, 13, }, // America/Swift_Current + { 689, 5461, 224050, 4, }, // America/Tegucigalpa + { 689, 5756, 224054, 4, }, // America/Thule + { 689, 313, 224058, 7, }, // America/Tijuana + { 689, 608, 224065, 7, }, // America/Toronto + { 689, 5688, 224072, 7, }, // America/Tortola + { 689, 2093, 224079, 8, }, // America/Vancouver + { 689, 2144, 224087, 9, }, // America/Whitehorse + { 689, 734, 224096, 8, }, // America/Winnipeg + { 689, 8552, 224104, 7, }, // America/Yakutat + { 689, 6001, 224111, 5, }, // Antarctica/Casey + { 689, 6094, 224116, 5, }, // Antarctica/Davis + { 689, 6133, 224121, 17, }, // Antarctica/DumontDUrville + { 689, 8568, 224138, 7, }, // Antarctica/Macquarie + { 689, 7066, 224145, 6, }, // Antarctica/Mawson + { 689, 7113, 224151, 9, }, // Antarctica/McMurdo + { 689, 8589, 224160, 6, }, // Antarctica/Palmer + { 689, 7226, 224166, 6, }, // Antarctica/Rothera + { 689, 7295, 224172, 5, }, // Antarctica/Syowa + { 689, 8607, 224177, 5, }, // Antarctica/Troll + { 689, 7374, 224182, 6, }, // Antarctica/Vostok + { 689, 1429, 224188, 10, }, // Arctic/Longyearbyen + { 689, 5570, 224198, 4, }, // Asia/Aden + { 689, 5395, 224202, 6, }, // Asia/Almaty + { 689, 3968, 224208, 5, }, // Asia/Amman + { 689, 5511, 224213, 6, }, // Asia/Anadyr + { 689, 5523, 224219, 5, }, // Asia/Aqtau + { 689, 5368, 224224, 7, }, // Asia/Aqtobe + { 689, 964, 224231, 7, }, // Asia/Ashgabat + { 689, 8624, 224238, 6, }, // Asia/Atyrau + { 689, 3607, 224244, 6, }, // Asia/Baghdad + { 689, 5534, 224250, 7, }, // Asia/Bahrain + { 689, 3653, 224257, 4, }, // Asia/Baku + { 689, 4466, 224261, 7, }, // Asia/Bangkok + { 689, 3571, 224268, 7, }, // Asia/Barnaul + { 689, 4086, 224275, 6, }, // Asia/Beirut + { 689, 3778, 224281, 6, }, // Asia/Bishkek + { 689, 5989, 224287, 6, }, // Asia/Brunei + { 689, 4601, 224293, 4, }, // Asia/Chita + { 689, 4511, 224297, 7, }, // Asia/Colombo + { 689, 4540, 224304, 8, }, // Asia/Damascus + { 689, 1093, 222858, 4, }, // Asia/Dhaka + { 689, 6192, 224312, 4, }, // Asia/Dili + { 689, 3596, 224316, 5, }, // Asia/Dubai + { 689, 6159, 224321, 7, }, // Asia/Dushanbe + { 689, 8636, 224328, 9, }, // Asia/Famagusta + { 689, 8651, 224337, 4, }, // Asia/Gaza + { 689, 4795, 224341, 6, }, // Asia/Hebron + { 689, 1259, 224347, 15, }, // Asia/Ho_Chi_Minh + { 689, 2704, 224362, 9, }, // Asia/Hong_Kong { 689, 4771, 26836, 4, }, // Asia/Hovd - { 689, 4184, 224380, 7, }, // Asia/Irkutsk + { 689, 4184, 224371, 7, }, // Asia/Irkutsk { 689, 7006, 4248, 7, }, // Asia/Jakarta - { 689, 6992, 224387, 8, }, // Asia/Jayapura - { 689, 1290, 224395, 9, }, // Asia/Jerusalem - { 689, 3560, 224404, 5, }, // Asia/Kabul - { 689, 4316, 224409, 8, }, // Asia/Kamchatka - { 689, 4239, 224417, 6, }, // Asia/Karachi - { 689, 1185, 224423, 8, }, // Asia/Kathmandu - { 689, 8661, 224431, 7, }, // Asia/Khandyga - { 689, 992, 224438, 7, }, // Asia/Kolkata - { 689, 4197, 224445, 11, }, // Asia/Krasnoyarsk - { 689, 4859, 224456, 12, }, // Asia/Kuala_Lumpur - { 689, 5976, 224468, 6, }, // Asia/Kuching - { 689, 5547, 224474, 6, }, // Asia/Kuwait - { 689, 1211, 224480, 4, }, // Asia/Macau - { 689, 4017, 224484, 7, }, // Asia/Magadan - { 689, 1349, 224491, 7, }, // Asia/Makassar - { 689, 7182, 224498, 6, }, // Asia/Manila - { 689, 6920, 224504, 6, }, // Asia/Muscat - { 689, 2554, 224510, 8, }, // Asia/Nicosia - { 689, 8675, 224518, 12, }, // Asia/Novokuznetsk - { 689, 4135, 224530, 11, }, // Asia/Novosibirsk + { 689, 6992, 224378, 8, }, // Asia/Jayapura + { 689, 1290, 224386, 9, }, // Asia/Jerusalem + { 689, 3560, 224395, 5, }, // Asia/Kabul + { 689, 4316, 224400, 8, }, // Asia/Kamchatka + { 689, 4239, 224408, 6, }, // Asia/Karachi + { 689, 1185, 224414, 8, }, // Asia/Kathmandu + { 689, 8661, 224422, 7, }, // Asia/Khandyga + { 689, 992, 224429, 7, }, // Asia/Kolkata + { 689, 4197, 224436, 11, }, // Asia/Krasnoyarsk + { 689, 4859, 224447, 12, }, // Asia/Kuala_Lumpur + { 689, 5976, 224459, 6, }, // Asia/Kuching + { 689, 5547, 224465, 6, }, // Asia/Kuwait + { 689, 1211, 224471, 4, }, // Asia/Macau + { 689, 4017, 224475, 7, }, // Asia/Magadan + { 689, 1349, 224482, 7, }, // Asia/Makassar + { 689, 7182, 224489, 6, }, // Asia/Manila + { 689, 6920, 224495, 6, }, // Asia/Muscat + { 689, 2554, 224501, 8, }, // Asia/Nicosia + { 689, 8675, 224509, 12, }, // Asia/Novokuznetsk + { 689, 4135, 224521, 11, }, // Asia/Novosibirsk { 689, 4229, 123801, 4, }, // Asia/Omsk { 689, 7145, 91266, 4, }, // Asia/Oral - { 689, 6961, 224541, 9, }, // Asia/Phnom_Penh - { 689, 8693, 224550, 9, }, // Asia/Pontianak - { 689, 4214, 224559, 9, }, // Asia/Pyongyang + { 689, 6961, 224532, 9, }, // Asia/Phnom_Penh + { 689, 8693, 224541, 9, }, // Asia/Pontianak + { 689, 4214, 224550, 9, }, // Asia/Pyongyang { 689, 5559, 210375, 5, }, // Asia/Qatar - { 689, 8708, 224568, 7, }, // Asia/Qostanay - { 689, 4269, 224575, 8, }, // Asia/Qyzylorda - { 689, 3584, 224583, 5, }, // Asia/Riyadh - { 689, 4408, 224588, 7, }, // Asia/Sakhalin - { 689, 7245, 224595, 9, }, // Asia/Samarkand - { 689, 3279, 224604, 4, }, // Asia/Seoul - { 689, 1053, 224608, 6, }, // Asia/Shanghai - { 689, 3300, 224614, 8, }, // Asia/Singapore - { 689, 4297, 224622, 13, }, // Asia/Srednekolymsk - { 689, 3263, 224635, 6, }, // Asia/Taipei - { 689, 4781, 224641, 7, }, // Asia/Tashkent - { 689, 3915, 224648, 7, }, // Asia/Tbilisi - { 689, 2772, 224655, 6, }, // Asia/Tehran - { 689, 1317, 224661, 6, }, // Asia/Thimphu - { 689, 2821, 224667, 5, }, // Asia/Tokyo - { 689, 4572, 224672, 5, }, // Asia/Tomsk - { 689, 1021, 224677, 9, }, // Asia/Ulaanbaatar - { 689, 1159, 224686, 6, }, // Asia/Urumqi - { 689, 8722, 224692, 9, }, // Asia/Ust-Nera - { 689, 6977, 224701, 9, }, // Asia/Vientiane - { 689, 4710, 224710, 11, }, // Asia/Vladivostok - { 689, 4828, 224721, 7, }, // Asia/Yakutsk - { 689, 1235, 224728, 6, }, // Asia/Yangon - { 689, 3883, 224734, 13, }, // Asia/Yekaterinburg - { 689, 3747, 224747, 7, }, // Asia/Yerevan - { 689, 3663, 224754, 6, }, // Atlantic/Azores - { 689, 5671, 224760, 7, }, // Atlantic/Bermuda - { 689, 6628, 224767, 6, }, // Atlantic/Canary - { 689, 3727, 224773, 9, }, // Atlantic/Cape_Verde - { 689, 1395, 224782, 4, }, // Atlantic/Faroe - { 689, 8736, 224786, 7, }, // Atlantic/Madeira - { 689, 2748, 224793, 9, }, // Atlantic/Reykjavik - { 689, 7272, 224802, 11, }, // Atlantic/South_Georgia - { 689, 6821, 224813, 11, }, // Atlantic/St_Helena - { 689, 6644, 224824, 6, }, // Atlantic/Stanley - { 689, 1670, 224830, 8, }, // Australia/Adelaide - { 689, 1635, 224838, 8, }, // Australia/Brisbane - { 689, 1799, 224846, 11, }, // Australia/Broken_Hill - { 689, 1583, 224857, 6, }, // Australia/Darwin - { 689, 3637, 224863, 5, }, // Australia/Eucla - { 689, 1516, 224868, 6, }, // Australia/Hobart - { 689, 8753, 224874, 9, }, // Australia/Lindeman - { 689, 1547, 224883, 9, }, // Australia/Lord_Howe - { 689, 1727, 224892, 8, }, // Australia/Melbourne - { 689, 1762, 224900, 4, }, // Australia/Perth - { 689, 1463, 224904, 5, }, // Australia/Sydney - { 689, 6441, 224909, 9, }, // Europe/Amsterdam - { 689, 6216, 224918, 7, }, // Europe/Andorra - { 689, 3620, 224925, 9, }, // Europe/Astrakhan - { 689, 2300, 224934, 5, }, // Europe/Athens - { 689, 6336, 224939, 8, }, // Europe/Belgrade - { 689, 4757, 224947, 6, }, // Europe/Berlin - { 689, 6488, 224953, 10, }, // Europe/Bratislava - { 689, 2167, 224963, 8, }, // Europe/Brussels - { 689, 3928, 224971, 8, }, // Europe/Bucharest - { 689, 3806, 224979, 8, }, // Europe/Budapest - { 689, 8772, 224987, 8, }, // Europe/Busingen - { 689, 2583, 224995, 7, }, // Europe/Chisinau - { 689, 6289, 225002, 10, }, // Europe/Copenhagen - { 689, 2338, 225012, 5, }, // Europe/Dublin - { 689, 6307, 225017, 9, }, // Europe/Gibraltar - { 689, 8788, 225026, 6, }, // Europe/Guernsey - { 689, 6612, 225032, 8, }, // Europe/Helsinki - { 689, 8804, 225040, 11, }, // Europe/Isle_of_Man - { 689, 1130, 225051, 8, }, // Europe/Istanbul - { 689, 8823, 225059, 5, }, // Europe/Jersey - { 689, 3979, 225064, 11, }, // Europe/Kaliningrad - { 689, 8929, 225075, 5, }, // Europe/Kirov - { 689, 2527, 225080, 4, }, // Europe/Kyiv - { 689, 3213, 225084, 6, }, // Europe/Lisbon - { 689, 6506, 225090, 9, }, // Europe/Ljubljana - { 689, 2501, 225099, 4, }, // Europe/London - { 689, 6365, 225103, 8, }, // Europe/Luxembourg - { 689, 4892, 225111, 6, }, // Europe/Madrid - { 689, 6397, 225117, 5, }, // Europe/Malta - { 689, 6582, 225122, 8, }, // Europe/Mariehamn - { 689, 3693, 225130, 5, }, // Europe/Minsk - { 689, 6410, 225135, 6, }, // Europe/Monaco - { 689, 3537, 225141, 5, }, // Europe/Moscow - { 689, 6458, 225146, 4, }, // Europe/Oslo - { 689, 4284, 225150, 5, }, // Europe/Paris - { 689, 6424, 225155, 9, }, // Europe/Podgorica - { 689, 6275, 225164, 4, }, // Europe/Prague - { 689, 8837, 225168, 4, }, // Europe/Riga + { 689, 8708, 224559, 7, }, // Asia/Qostanay + { 689, 4269, 224566, 8, }, // Asia/Qyzylorda + { 689, 3584, 224574, 5, }, // Asia/Riyadh + { 689, 4408, 224579, 7, }, // Asia/Sakhalin + { 689, 7245, 224586, 9, }, // Asia/Samarkand + { 689, 3279, 224595, 4, }, // Asia/Seoul + { 689, 1053, 224599, 6, }, // Asia/Shanghai + { 689, 3300, 224605, 8, }, // Asia/Singapore + { 689, 4297, 224613, 13, }, // Asia/Srednekolymsk + { 689, 3263, 224626, 6, }, // Asia/Taipei + { 689, 4781, 224632, 7, }, // Asia/Tashkent + { 689, 3915, 224639, 7, }, // Asia/Tbilisi + { 689, 2772, 224646, 6, }, // Asia/Tehran + { 689, 1317, 224652, 6, }, // Asia/Thimphu + { 689, 2821, 224658, 5, }, // Asia/Tokyo + { 689, 4572, 224663, 5, }, // Asia/Tomsk + { 689, 1021, 224668, 9, }, // Asia/Ulaanbaatar + { 689, 1159, 224677, 6, }, // Asia/Urumqi + { 689, 8722, 224683, 9, }, // Asia/Ust-Nera + { 689, 6977, 224692, 9, }, // Asia/Vientiane + { 689, 4710, 224701, 11, }, // Asia/Vladivostok + { 689, 4828, 224712, 7, }, // Asia/Yakutsk + { 689, 1235, 224719, 6, }, // Asia/Yangon + { 689, 3883, 224725, 13, }, // Asia/Yekaterinburg + { 689, 3747, 224738, 7, }, // Asia/Yerevan + { 689, 3663, 224745, 6, }, // Atlantic/Azores + { 689, 5671, 224751, 7, }, // Atlantic/Bermuda + { 689, 6628, 224758, 6, }, // Atlantic/Canary + { 689, 3727, 224764, 9, }, // Atlantic/Cape_Verde + { 689, 1395, 224773, 4, }, // Atlantic/Faroe + { 689, 8736, 224777, 7, }, // Atlantic/Madeira + { 689, 2748, 224784, 9, }, // Atlantic/Reykjavik + { 689, 7272, 224793, 11, }, // Atlantic/South_Georgia + { 689, 6821, 224804, 11, }, // Atlantic/St_Helena + { 689, 6644, 224815, 6, }, // Atlantic/Stanley + { 689, 1670, 224821, 8, }, // Australia/Adelaide + { 689, 1635, 224829, 8, }, // Australia/Brisbane + { 689, 1799, 224837, 11, }, // Australia/Broken_Hill + { 689, 1583, 224848, 6, }, // Australia/Darwin + { 689, 3637, 224854, 5, }, // Australia/Eucla + { 689, 1516, 224859, 6, }, // Australia/Hobart + { 689, 8753, 224865, 9, }, // Australia/Lindeman + { 689, 1547, 224874, 9, }, // Australia/Lord_Howe + { 689, 1727, 224883, 8, }, // Australia/Melbourne + { 689, 1762, 224891, 4, }, // Australia/Perth + { 689, 1463, 224895, 5, }, // Australia/Sydney + { 689, 6441, 224900, 9, }, // Europe/Amsterdam + { 689, 6216, 224909, 7, }, // Europe/Andorra + { 689, 3620, 224916, 9, }, // Europe/Astrakhan + { 689, 2300, 224925, 5, }, // Europe/Athens + { 689, 6336, 224930, 8, }, // Europe/Belgrade + { 689, 4757, 224938, 6, }, // Europe/Berlin + { 689, 6488, 224944, 10, }, // Europe/Bratislava + { 689, 2167, 224954, 8, }, // Europe/Brussels + { 689, 3928, 224962, 8, }, // Europe/Bucharest + { 689, 3806, 224970, 8, }, // Europe/Budapest + { 689, 8772, 224978, 8, }, // Europe/Busingen + { 689, 2583, 224986, 7, }, // Europe/Chisinau + { 689, 6289, 224993, 10, }, // Europe/Copenhagen + { 689, 2338, 225003, 5, }, // Europe/Dublin + { 689, 6307, 225008, 9, }, // Europe/Gibraltar + { 689, 8788, 225017, 6, }, // Europe/Guernsey + { 689, 6612, 225023, 8, }, // Europe/Helsinki + { 689, 8804, 225031, 11, }, // Europe/Isle_of_Man + { 689, 1130, 225042, 8, }, // Europe/Istanbul + { 689, 8823, 225050, 5, }, // Europe/Jersey + { 689, 3979, 225055, 11, }, // Europe/Kaliningrad + { 689, 8929, 225066, 5, }, // Europe/Kirov + { 689, 2527, 225071, 4, }, // Europe/Kyiv + { 689, 3213, 225075, 6, }, // Europe/Lisbon + { 689, 6506, 225081, 9, }, // Europe/Ljubljana + { 689, 2501, 225090, 4, }, // Europe/London + { 689, 6365, 225094, 8, }, // Europe/Luxembourg + { 689, 4892, 225102, 6, }, // Europe/Madrid + { 689, 6397, 225108, 5, }, // Europe/Malta + { 689, 6582, 225113, 8, }, // Europe/Mariehamn + { 689, 3693, 225121, 5, }, // Europe/Minsk + { 689, 6410, 225126, 6, }, // Europe/Monaco + { 689, 3537, 225132, 5, }, // Europe/Moscow + { 689, 6458, 225137, 4, }, // Europe/Oslo + { 689, 4284, 225141, 5, }, // Europe/Paris + { 689, 6424, 225146, 9, }, // Europe/Podgorica + { 689, 6275, 225155, 4, }, // Europe/Prague + { 689, 8837, 225159, 4, }, // Europe/Riga { 689, 6324, 27088, 3, }, // Europe/Rome - { 689, 4331, 225172, 6, }, // Europe/Samara - { 689, 6470, 225178, 10, }, // Europe/San_Marino - { 689, 6245, 225188, 8, }, // Europe/Sarajevo - { 689, 4451, 225196, 7, }, // Europe/Saratov - { 689, 8849, 225203, 10, }, // Europe/Simferopol - { 689, 6383, 225213, 5, }, // Europe/Skopje - { 689, 6599, 225218, 6, }, // Europe/Sofia - { 689, 6523, 225224, 7, }, // Europe/Stockholm - { 689, 8867, 225231, 5, }, // Europe/Tallinn - { 689, 6202, 225236, 6, }, // Europe/Tirane - { 689, 8882, 225242, 9, }, // Europe/Ulyanovsk - { 689, 6352, 225251, 5, }, // Europe/Vaduz - { 689, 6567, 225256, 7, }, // Europe/Vatican - { 689, 6231, 225263, 6, }, // Europe/Vienna - { 689, 8899, 225269, 7, }, // Europe/Vilnius - { 689, 4727, 225276, 9, }, // Europe/Volgograd - { 689, 3190, 225285, 5, }, // Europe/Warsaw - { 689, 6261, 225290, 11, }, // Europe/Zagreb - { 689, 6540, 225301, 5, }, // Europe/Zurich - { 689, 5078, 225306, 9, }, // Indian/Antananarivo - { 689, 6947, 225315, 6, }, // Indian/Chagos - { 689, 6046, 225321, 8, }, // Indian/Christmas - { 689, 6063, 225329, 5, }, // Indian/Cocos - { 689, 5029, 225334, 6, }, // Indian/Comoro - { 689, 6661, 225340, 9, }, // Indian/Kerguelen - { 689, 7260, 225349, 4, }, // Indian/Mahe - { 689, 7050, 225353, 8, }, // Indian/Maldives - { 689, 4069, 225361, 9, }, // Indian/Mauritius - { 689, 5098, 225370, 5, }, // Indian/Mayotte - { 689, 7211, 225375, 7, }, // Indian/Reunion - { 689, 4422, 225382, 4, }, // Pacific/Apia - { 689, 932, 225386, 6, }, // Pacific/Auckland - { 689, 3706, 225392, 10, }, // Pacific/Bougainville - { 689, 3015, 225402, 5, }, // Pacific/Chatham - { 689, 3157, 225407, 3, }, // Pacific/Chuuk - { 689, 2237, 225410, 5, }, // Pacific/Easter - { 689, 7360, 225415, 5, }, // Pacific/Efate - { 689, 7327, 225420, 7, }, // Pacific/Fakaofo - { 689, 3902, 225427, 4, }, // Pacific/Fiji - { 689, 7343, 225431, 8, }, // Pacific/Funafuti - { 689, 6678, 225439, 9, }, // Pacific/Galapagos - { 689, 6696, 225448, 7, }, // Pacific/Gambier - { 689, 3822, 225455, 11, }, // Pacific/Guadalcanal - { 689, 6018, 223591, 4, }, // Pacific/Guam - { 689, 3049, 225466, 6, }, // Pacific/Kanton - { 689, 3998, 225472, 10, }, // Pacific/Kiritimati - { 689, 7019, 225482, 6, }, // Pacific/Kosrae - { 689, 2842, 225488, 9, }, // Pacific/Kwajalein - { 689, 4877, 225497, 6, }, // Pacific/Majuro - { 689, 4051, 225503, 8, }, // Pacific/Marquesas - { 689, 8914, 225511, 6, }, // Pacific/Midway - { 689, 7084, 225517, 5, }, // Pacific/Nauru - { 689, 7132, 225522, 4, }, // Pacific/Niue - { 689, 4168, 225526, 6, }, // Pacific/Norfolk - { 689, 7098, 225532, 5, }, // Pacific/Noumea - { 689, 3126, 225537, 11, }, // Pacific/Pago_Pago - { 689, 7155, 225548, 5, }, // Pacific/Palau - { 689, 7194, 225553, 7, }, // Pacific/Pitcairn - { 689, 3096, 225560, 6, }, // Pacific/Pohnpei - { 689, 4807, 225566, 12, }, // Pacific/Port_Moresby - { 689, 6076, 225578, 9, }, // Pacific/Rarotonga - { 689, 6031, 225587, 6, }, // Pacific/Saipan - { 689, 7312, 225593, 6, }, // Pacific/Tahiti - { 689, 6712, 225599, 6, }, // Pacific/Tarawa - { 689, 4583, 225605, 9, }, // Pacific/Tongatapu - { 689, 7392, 225614, 3, }, // Pacific/Wake - { 689, 7405, 225617, 6, }, // Pacific/Wallis + { 689, 4331, 225163, 6, }, // Europe/Samara + { 689, 6470, 225169, 10, }, // Europe/San_Marino + { 689, 6245, 225179, 8, }, // Europe/Sarajevo + { 689, 4451, 225187, 7, }, // Europe/Saratov + { 689, 8849, 225194, 10, }, // Europe/Simferopol + { 689, 6383, 225204, 5, }, // Europe/Skopje + { 689, 6599, 225209, 6, }, // Europe/Sofia + { 689, 6523, 225215, 7, }, // Europe/Stockholm + { 689, 8867, 225222, 5, }, // Europe/Tallinn + { 689, 6202, 225227, 6, }, // Europe/Tirane + { 689, 8882, 225233, 9, }, // Europe/Ulyanovsk + { 689, 6352, 225242, 5, }, // Europe/Vaduz + { 689, 6567, 225247, 7, }, // Europe/Vatican + { 689, 6231, 225254, 6, }, // Europe/Vienna + { 689, 8899, 225260, 7, }, // Europe/Vilnius + { 689, 4727, 225267, 9, }, // Europe/Volgograd + { 689, 3190, 225276, 5, }, // Europe/Warsaw + { 689, 6261, 225281, 11, }, // Europe/Zagreb + { 689, 6540, 225292, 5, }, // Europe/Zurich + { 689, 5078, 225297, 9, }, // Indian/Antananarivo + { 689, 6947, 225306, 6, }, // Indian/Chagos + { 689, 6046, 225312, 8, }, // Indian/Christmas + { 689, 6063, 225320, 5, }, // Indian/Cocos + { 689, 5029, 225325, 6, }, // Indian/Comoro + { 689, 6661, 225331, 9, }, // Indian/Kerguelen + { 689, 7260, 225340, 4, }, // Indian/Mahe + { 689, 7050, 225344, 8, }, // Indian/Maldives + { 689, 4069, 225352, 9, }, // Indian/Mauritius + { 689, 5098, 225361, 5, }, // Indian/Mayotte + { 689, 7211, 225366, 7, }, // Indian/Reunion + { 689, 4422, 225373, 4, }, // Pacific/Apia + { 689, 932, 225377, 6, }, // Pacific/Auckland + { 689, 3706, 225383, 10, }, // Pacific/Bougainville + { 689, 3015, 225393, 5, }, // Pacific/Chatham + { 689, 3157, 225398, 3, }, // Pacific/Chuuk + { 689, 2237, 225401, 5, }, // Pacific/Easter + { 689, 7360, 225406, 5, }, // Pacific/Efate + { 689, 7327, 225411, 7, }, // Pacific/Fakaofo + { 689, 3902, 225418, 4, }, // Pacific/Fiji + { 689, 7343, 225422, 8, }, // Pacific/Funafuti + { 689, 6678, 225430, 9, }, // Pacific/Galapagos + { 689, 6696, 225439, 7, }, // Pacific/Gambier + { 689, 3822, 225446, 11, }, // Pacific/Guadalcanal + { 689, 6018, 223582, 4, }, // Pacific/Guam + { 689, 3049, 225457, 6, }, // Pacific/Kanton + { 689, 3998, 225463, 10, }, // Pacific/Kiritimati + { 689, 7019, 225473, 6, }, // Pacific/Kosrae + { 689, 2842, 225479, 9, }, // Pacific/Kwajalein + { 689, 4877, 225488, 6, }, // Pacific/Majuro + { 689, 4051, 225494, 8, }, // Pacific/Marquesas + { 689, 8914, 225502, 6, }, // Pacific/Midway + { 689, 7084, 225508, 5, }, // Pacific/Nauru + { 689, 7132, 225513, 4, }, // Pacific/Niue + { 689, 4168, 225517, 6, }, // Pacific/Norfolk + { 689, 7098, 225523, 5, }, // Pacific/Noumea + { 689, 3126, 225528, 11, }, // Pacific/Pago_Pago + { 689, 7155, 225539, 5, }, // Pacific/Palau + { 689, 7194, 225544, 7, }, // Pacific/Pitcairn + { 689, 3096, 225551, 6, }, // Pacific/Pohnpei + { 689, 4807, 225557, 12, }, // Pacific/Port_Moresby + { 689, 6076, 225569, 9, }, // Pacific/Rarotonga + { 689, 6031, 225578, 6, }, // Pacific/Saipan + { 689, 7312, 225584, 6, }, // Pacific/Tahiti + { 689, 6712, 225590, 6, }, // Pacific/Tarawa + { 689, 4583, 225596, 9, }, // Pacific/Tongatapu + { 689, 7392, 225605, 3, }, // Pacific/Wake + { 689, 7405, 225608, 6, }, // Pacific/Wallis { 690, 6788, 29964, 7, }, // Africa/Abidjan Kuvi/Devanagari/India { 690, 6760, 88252, 5, }, // Africa/Accra { 690, 5059, 88257, 10, }, // Africa/Addis_Ababa @@ -50854,7 +50854,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 14, 88276, 7, }, // Africa/Asmara { 690, 44, 88283, 6, }, // Africa/Bamako { 690, 5257, 88289, 6, }, // Africa/Bangui - { 690, 6746, 225623, 9, }, // Africa/Banjul + { 690, 6746, 225614, 9, }, // Africa/Banjul { 690, 7435, 88301, 5, }, // Africa/Bissau { 690, 4957, 88306, 9, }, // Africa/Blantyre { 690, 5287, 88315, 11, }, // Africa/Brazzaville @@ -50868,31 +50868,31 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 5043, 88368, 6, }, // Africa/Djibouti { 690, 5243, 88374, 5, }, // Africa/Douala { 690, 5166, 88379, 8, }, // Africa/El_Aaiun - { 690, 6853, 225632, 9, }, // Africa/Freetown + { 690, 6853, 225623, 9, }, // Africa/Freetown { 690, 4906, 88396, 7, }, // Africa/Gaborone { 690, 5015, 88403, 5, }, // Africa/Harare { 690, 4479, 88408, 10, }, // Africa/Johannesburg { 690, 4499, 30154, 4, }, // Africa/Juba { 690, 5151, 88418, 6, }, // Africa/Kampala - { 690, 4524, 225641, 7, }, // Africa/Khartoum + { 690, 4524, 225632, 7, }, // Africa/Khartoum { 690, 4973, 88424, 6, }, // Africa/Kigali - { 690, 5306, 225648, 7, }, // Africa/Kinshasa + { 690, 5306, 225639, 7, }, // Africa/Kinshasa { 690, 4744, 88437, 5, }, // Africa/Lagos { 690, 5336, 88442, 10, }, // Africa/Libreville { 690, 6869, 88452, 3, }, // Africa/Lome { 690, 5211, 88455, 6, }, // Africa/Luanda - { 690, 4939, 225655, 9, }, // Africa/Lubumbashi + { 690, 4939, 225646, 9, }, // Africa/Lubumbashi { 690, 5001, 30221, 6, }, // Africa/Lusaka { 690, 5322, 88470, 5, }, // Africa/Malabo { 690, 4987, 88475, 6, }, // Africa/Maputo { 690, 5197, 30239, 6, }, // Africa/Maseru - { 690, 5182, 225664, 9, }, // Africa/Mbabane - { 690, 5113, 225673, 8, }, // Africa/Mogadishu + { 690, 5182, 225655, 9, }, // Africa/Mbabane + { 690, 5113, 225664, 8, }, // Africa/Mogadishu { 690, 7034, 88496, 9, }, // Africa/Monrovia - { 690, 3853, 225681, 7, }, // Africa/Nairobi + { 690, 3853, 225672, 7, }, // Africa/Nairobi { 690, 5271, 88513, 8, }, // Africa/Ndjamena { 690, 5354, 88521, 6, }, // Africa/Niamey - { 690, 6803, 225688, 7, }, // Africa/Nouakchott + { 690, 6803, 225679, 7, }, // Africa/Nouakchott { 690, 6727, 88534, 7, }, // Africa/Ouagadougou { 690, 5225, 88541, 11, }, // Africa/Porto-Novo { 690, 4435, 88552, 7, }, // Africa/Sao_Tome @@ -50912,45 +50912,45 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 565, 88633, 8, }, // America/Argentina/Mendoza { 690, 7489, 88641, 12, }, // America/Argentina/Rio_Gallegos { 690, 7520, 30437, 6, }, // America/Argentina/Salta - { 690, 7544, 225695, 11, }, // America/Argentina/San_Juan - { 690, 5580, 225706, 10, }, // America/Argentina/San_Luis + { 690, 7544, 225686, 11, }, // America/Argentina/San_Juan + { 690, 5580, 225697, 10, }, // America/Argentina/San_Luis { 690, 7571, 88669, 6, }, // America/Argentina/Tucuman - { 690, 7597, 225716, 7, }, // America/Argentina/Ushuaia + { 690, 7597, 225707, 7, }, // America/Argentina/Ushuaia { 690, 5640, 88682, 5, }, // America/Aruba - { 690, 4252, 225723, 8, }, // America/Asuncion + { 690, 4252, 225714, 8, }, // America/Asuncion { 690, 237, 88695, 8, }, // America/Atikokan { 690, 3679, 88703, 5, }, // America/Bahia { 690, 7623, 88708, 15, }, // America/Bahia_Banderas { 690, 5654, 88723, 8, }, // America/Barbados { 690, 7646, 30526, 5, }, // America/Belem { 690, 5407, 88731, 6, }, // America/Belize - { 690, 7660, 225731, 12, }, // America/Blanc-Sablon + { 690, 7660, 225722, 12, }, // America/Blanc-Sablon { 690, 7681, 88750, 10, }, // America/Boa_Vista { 690, 4361, 88760, 6, }, // America/Bogota { 690, 7699, 88766, 5, }, // America/Boise - { 690, 7713, 225743, 12, }, // America/Cambridge_Bay - { 690, 7735, 225755, 16, }, // America/Campo_Grande - { 690, 3868, 225771, 8, }, // America/Cancun + { 690, 7713, 225734, 12, }, // America/Cambridge_Bay + { 690, 7735, 225746, 16, }, // America/Campo_Grande + { 690, 3868, 225762, 8, }, // America/Cancun { 690, 4694, 88805, 6, }, // America/Caracas { 690, 4345, 30609, 5, }, // America/Cayenne { 690, 5496, 138409, 7, }, // America/Cayman - { 690, 2260, 225779, 6, }, // America/Chicago + { 690, 2260, 225770, 6, }, // America/Chicago { 690, 7756, 88817, 8, }, // America/Chihuahua { 690, 5422, 88841, 11, }, // America/Costa_Rica { 690, 7796, 30642, 8, }, // America/Creston { 690, 3791, 88852, 7, }, // America/Cuiaba { 690, 5723, 88859, 7, }, // America/Curacao - { 690, 7812, 225785, 11, }, // America/Danmarkshavn + { 690, 7812, 225776, 11, }, // America/Danmarkshavn { 690, 7833, 88877, 4, }, // America/Dawson { 690, 7848, 88881, 10, }, // America/Dawson_Creek { 690, 805, 88891, 5, }, // America/Denver { 690, 3465, 88896, 8, }, // America/Detroit { 690, 5739, 88904, 8, }, // America/Dominica { 690, 893, 88912, 6, }, // America/Edmonton - { 690, 7869, 225796, 8, }, // America/Eirunepe + { 690, 7869, 225787, 8, }, // America/Eirunepe { 690, 5441, 88918, 11, }, // America/El_Salvador - { 690, 7886, 225804, 13, }, // America/Fort_Nelson - { 690, 7906, 225817, 12, }, // America/Fortaleza + { 690, 7886, 225795, 13, }, // America/Fort_Nelson + { 690, 7906, 225808, 12, }, // America/Fortaleza { 690, 7924, 30760, 8, }, // America/Glace_Bay { 690, 6881, 113910, 6, }, // America/Goose_Bay { 690, 4612, 88974, 11, }, // America/Grand_Turk @@ -50959,7 +50959,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 3760, 30806, 10, }, // America/Guatemala { 690, 4841, 88994, 9, }, // America/Guayaquil { 690, 6932, 89003, 5, }, // America/Guyana - { 690, 1939, 225829, 9, }, // America/Halifax + { 690, 1939, 225820, 9, }, // America/Halifax { 690, 2281, 89018, 5, }, // America/Havana { 690, 7942, 89023, 11, }, // America/Hermosillo { 690, 348, 89034, 13, }, // America/Indiana/Indianapolis @@ -50971,20 +50971,20 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 8060, 89131, 18, }, // America/Indiana/Vincennes { 690, 8086, 89149, 17, }, // America/Indiana/Winamac { 690, 8110, 30999, 6, }, // America/Inuvik - { 690, 660, 225838, 8, }, // America/Iqaluit + { 690, 660, 225829, 8, }, // America/Iqaluit { 690, 2799, 138734, 6, }, // America/Jamaica { 690, 5380, 89178, 7, }, // America/Juneau { 690, 521, 89185, 8, }, // America/Kentucky/Louisville { 690, 8125, 89193, 17, }, // America/Kentucky/Monticello - { 690, 5704, 225846, 13, }, // America/Kralendijk + { 690, 5704, 225837, 13, }, // America/Kralendijk { 690, 4376, 89222, 7, }, // America/La_Paz { 690, 7169, 31064, 4, }, // America/Lima { 690, 3239, 89229, 11, }, // America/Los_Angeles { 690, 5932, 89240, 22, }, // America/Lower_Princes { 690, 8153, 89262, 5, }, // America/Maceio { 690, 8168, 89267, 7, }, // America/Managua - { 690, 1908, 225859, 4, }, // America/Manaus - { 690, 5897, 225863, 7, }, // America/Marigot + { 690, 1908, 225850, 4, }, // America/Manaus + { 690, 5897, 225854, 7, }, // America/Marigot { 690, 5805, 89285, 9, }, // America/Martinique { 690, 8184, 89294, 9, }, // America/Matamoros { 690, 2917, 89303, 9, }, // America/Mazatlan @@ -51001,43 +51001,43 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 2379, 89392, 9, }, // America/New_York { 690, 8288, 89314, 3, }, // America/Nome { 690, 1850, 89401, 8, }, // America/Noronha - { 690, 8301, 225870, 19, }, // America/North_Dakota/Beulah - { 690, 8329, 225889, 18, }, // America/North_Dakota/Center - { 690, 8357, 225907, 23, }, // America/North_Dakota/New_Salem + { 690, 8301, 225861, 19, }, // America/North_Dakota/Beulah + { 690, 8329, 225880, 18, }, // America/North_Dakota/Center + { 690, 8357, 225898, 23, }, // America/North_Dakota/New_Salem { 690, 393, 89472, 3, }, // America/Nuuk - { 690, 8388, 225930, 9, }, // America/Ojinaga + { 690, 8388, 225921, 9, }, // America/Ojinaga { 690, 2356, 89484, 5, }, // America/Panama { 690, 6173, 89489, 10, }, // America/Paramaribo - { 690, 2973, 225939, 8, }, // America/Phoenix + { 690, 2973, 225930, 8, }, // America/Phoenix { 690, 3945, 89507, 14, }, // America/Port-au-Prince - { 690, 5954, 225947, 15, }, // America/Port_of_Spain + { 690, 5954, 225938, 15, }, // America/Port_of_Spain { 690, 8404, 89536, 13, }, // America/Porto_Velho { 690, 5843, 89549, 11, }, // America/Puerto_Rico { 690, 4030, 89560, 12, }, // America/Punta_Arenas { 690, 8424, 89572, 12, }, // America/Rankin_Inlet - { 690, 8445, 225962, 7, }, // America/Recife + { 690, 8445, 225953, 7, }, // America/Recife { 690, 1995, 31431, 6, }, // America/Regina { 690, 8460, 89591, 9, }, // America/Resolute { 690, 695, 89600, 12, }, // America/Rio_Branco - { 690, 8477, 225969, 9, }, // America/Santarem - { 690, 2201, 225978, 8, }, // America/Santiago + { 690, 8477, 225960, 9, }, // America/Santarem + { 690, 2201, 225969, 8, }, // America/Santiago { 690, 6111, 89629, 13, }, // America/Santo_Domingo { 690, 1878, 89642, 9, }, // America/Sao_Paulo { 690, 6899, 89651, 13, }, // America/Scoresbysund { 690, 8494, 89664, 6, }, // America/Sitka - { 690, 8508, 225986, 15, }, // America/St_Barthelemy + { 690, 8508, 225977, 15, }, // America/St_Barthelemy { 690, 2061, 114496, 10, }, // America/St_Johns { 690, 5863, 89694, 10, }, // America/St_Kitts { 690, 5880, 89704, 11, }, // America/St_Lucia - { 690, 855, 226001, 9, }, // America/St_Thomas + { 690, 855, 225992, 9, }, // America/St_Thomas { 690, 5913, 89724, 12, }, // America/St_Vincent - { 690, 8530, 226010, 13, }, // America/Swift_Current + { 690, 8530, 226001, 13, }, // America/Swift_Current { 690, 5461, 89749, 11, }, // America/Tegucigalpa { 690, 5756, 129890, 4, }, // America/Thule { 690, 313, 89766, 7, }, // America/Tijuana { 690, 608, 89773, 6, }, // America/Toronto { 690, 5688, 89779, 8, }, // America/Tortola - { 690, 2093, 226023, 10, }, // America/Vancouver + { 690, 2093, 226014, 10, }, // America/Vancouver { 690, 2144, 89794, 11, }, // America/Whitehorse { 690, 734, 89805, 7, }, // America/Winnipeg { 690, 8552, 89812, 7, }, // America/Yakutat @@ -51046,37 +51046,37 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 6133, 89824, 19, }, // Antarctica/DumontDUrville { 690, 8568, 89843, 7, }, // Antarctica/Macquarie { 690, 7066, 89850, 4, }, // Antarctica/Mawson - { 690, 7113, 226033, 11, }, // Antarctica/McMurdo + { 690, 7113, 226024, 11, }, // Antarctica/McMurdo { 690, 8589, 89863, 4, }, // Antarctica/Palmer { 690, 7226, 89867, 6, }, // Antarctica/Rothera { 690, 7295, 89873, 6, }, // Antarctica/Syowa { 690, 8607, 89879, 5, }, // Antarctica/Troll { 690, 7374, 89884, 7, }, // Antarctica/Vostok - { 690, 1429, 226044, 12, }, // Arctic/Longyearbyen + { 690, 1429, 226035, 12, }, // Arctic/Longyearbyen { 690, 5570, 89904, 4, }, // Asia/Aden { 690, 5395, 89908, 7, }, // Asia/Almaty { 690, 3968, 89915, 6, }, // Asia/Amman { 690, 5511, 89921, 6, }, // Asia/Anadyr { 690, 5523, 31778, 6, }, // Asia/Aqtau { 690, 5368, 114670, 7, }, // Asia/Aqtobe - { 690, 964, 226056, 8, }, // Asia/Ashgabat + { 690, 964, 226047, 8, }, // Asia/Ashgabat { 690, 8624, 89933, 5, }, // Asia/Atyrau { 690, 3607, 89938, 5, }, // Asia/Baghdad { 690, 5534, 89943, 5, }, // Asia/Bahrain { 690, 3653, 88857, 4, }, // Asia/Baku - { 690, 4466, 226064, 9, }, // Asia/Bangkok + { 690, 4466, 226055, 9, }, // Asia/Bangkok { 690, 3571, 89954, 6, }, // Asia/Barnaul { 690, 4086, 89960, 5, }, // Asia/Beirut - { 690, 3778, 226073, 7, }, // Asia/Bishkek - { 690, 5989, 226080, 8, }, // Asia/Brunei - { 690, 4601, 226088, 6, }, // Asia/Chita + { 690, 3778, 226064, 7, }, // Asia/Bishkek + { 690, 5989, 226071, 8, }, // Asia/Brunei + { 690, 4601, 226079, 6, }, // Asia/Chita { 690, 4511, 89978, 6, }, // Asia/Colombo { 690, 4540, 89984, 7, }, // Asia/Damascus { 690, 1093, 89991, 4, }, // Asia/Dhaka { 690, 6192, 89995, 4, }, // Asia/Dili - { 690, 3596, 226094, 5, }, // Asia/Dubai - { 690, 6159, 226099, 7, }, // Asia/Dushanbe - { 690, 8636, 226106, 11, }, // Asia/Famagusta + { 690, 3596, 226085, 5, }, // Asia/Dubai + { 690, 6159, 226090, 7, }, // Asia/Dushanbe + { 690, 8636, 226097, 11, }, // Asia/Famagusta { 690, 8651, 90021, 5, }, // Asia/Gaza { 690, 4795, 90026, 7, }, // Asia/Hebron { 690, 1259, 90033, 16, }, // Asia/Ho_Chi_Minh @@ -51085,12 +51085,12 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 4184, 90063, 10, }, // Asia/Irkutsk { 690, 7006, 90073, 7, }, // Asia/Jakarta { 690, 6992, 31943, 7, }, // Asia/Jayapura - { 690, 1290, 226117, 8, }, // Asia/Jerusalem + { 690, 1290, 226108, 8, }, // Asia/Jerusalem { 690, 3560, 90086, 5, }, // Asia/Kabul { 690, 4316, 90091, 7, }, // Asia/Kamchatka { 690, 4239, 31972, 5, }, // Asia/Karachi { 690, 1185, 90098, 8, }, // Asia/Kathmandu - { 690, 8661, 226125, 7, }, // Asia/Khandyga + { 690, 8661, 226116, 7, }, // Asia/Khandyga { 690, 992, 90113, 7, }, // Asia/Kolkata { 690, 4197, 90120, 15, }, // Asia/Krasnoyarsk { 690, 4859, 90135, 10, }, // Asia/Kuala_Lumpur @@ -51106,22 +51106,22 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 4135, 90184, 13, }, // Asia/Novosibirsk { 690, 4229, 90197, 6, }, // Asia/Omsk { 690, 7145, 90203, 3, }, // Asia/Oral - { 690, 6961, 226132, 10, }, // Asia/Phnom_Penh + { 690, 6961, 226123, 10, }, // Asia/Phnom_Penh { 690, 8693, 90215, 9, }, // Asia/Pontianak { 690, 4214, 90224, 10, }, // Asia/Pyongyang { 690, 5559, 90234, 3, }, // Asia/Qatar { 690, 8708, 90237, 8, }, // Asia/Qostanay - { 690, 4269, 226142, 10, }, // Asia/Qyzylorda + { 690, 4269, 226133, 10, }, // Asia/Qyzylorda { 690, 3584, 90256, 5, }, // Asia/Riyadh - { 690, 4408, 226152, 7, }, // Asia/Sakhalin + { 690, 4408, 226143, 7, }, // Asia/Sakhalin { 690, 7245, 90267, 6, }, // Asia/Samarkand { 690, 3279, 90273, 4, }, // Asia/Seoul - { 690, 1053, 226159, 6, }, // Asia/Shanghai + { 690, 1053, 226150, 6, }, // Asia/Shanghai { 690, 3300, 32190, 8, }, // Asia/Singapore { 690, 4297, 90282, 16, }, // Asia/Srednekolymsk - { 690, 3263, 226165, 8, }, // Asia/Taipei - { 690, 4781, 226173, 6, }, // Asia/Tashkent - { 690, 3915, 226179, 9, }, // Asia/Tbilisi + { 690, 3263, 226156, 8, }, // Asia/Taipei + { 690, 4781, 226164, 6, }, // Asia/Tashkent + { 690, 3915, 226170, 9, }, // Asia/Tbilisi { 690, 2772, 32236, 6, }, // Asia/Tehran { 690, 1317, 90317, 5, }, // Asia/Thimphu { 690, 2821, 90322, 6, }, // Asia/Tokyo @@ -51132,19 +51132,19 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 6977, 90360, 9, }, // Asia/Vientiane { 690, 4710, 90369, 13, }, // Asia/Vladivostok { 690, 4828, 32305, 9, }, // Asia/Yakutsk - { 690, 1235, 226188, 6, }, // Asia/Yangon + { 690, 1235, 226179, 6, }, // Asia/Yangon { 690, 3883, 90382, 13, }, // Asia/Yekaterinburg { 690, 3747, 90395, 7, }, // Asia/Yerevan { 690, 3663, 90402, 7, }, // Atlantic/Azores { 690, 5671, 90409, 6, }, // Atlantic/Bermuda - { 690, 6628, 226194, 8, }, // Atlantic/Canary + { 690, 6628, 226185, 8, }, // Atlantic/Canary { 690, 3727, 90421, 8, }, // Atlantic/Cape_Verde - { 690, 1395, 226202, 6, }, // Atlantic/Faroe + { 690, 1395, 226193, 6, }, // Atlantic/Faroe { 690, 8736, 90434, 5, }, // Atlantic/Madeira { 690, 2748, 90439, 9, }, // Atlantic/Reykjavik - { 690, 7272, 226208, 18, }, // Atlantic/South_Georgia + { 690, 7272, 226199, 18, }, // Atlantic/South_Georgia { 690, 6821, 90463, 11, }, // Atlantic/St_Helena - { 690, 6644, 226226, 9, }, // Atlantic/Stanley + { 690, 6644, 226217, 9, }, // Atlantic/Stanley { 690, 1670, 90481, 6, }, // Australia/Adelaide { 690, 1635, 90487, 8, }, // Australia/Brisbane { 690, 1799, 90495, 10, }, // Australia/Broken_Hill @@ -51158,8 +51158,8 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 1463, 32494, 5, }, // Australia/Sydney { 690, 6441, 90549, 10, }, // Europe/Amsterdam { 690, 6216, 90559, 6, }, // Europe/Andorra - { 690, 3620, 226235, 10, }, // Europe/Astrakhan - { 690, 2300, 226245, 6, }, // Europe/Athens + { 690, 3620, 226226, 10, }, // Europe/Astrakhan + { 690, 2300, 226236, 6, }, // Europe/Athens { 690, 6336, 32532, 8, }, // Europe/Belgrade { 690, 4757, 90580, 6, }, // Europe/Berlin { 690, 6488, 90586, 12, }, // Europe/Bratislava @@ -51173,7 +51173,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 6307, 90657, 10, }, // Europe/Gibraltar { 690, 8788, 90667, 6, }, // Europe/Guernsey { 690, 6612, 90673, 8, }, // Europe/Helsinki - { 690, 8804, 226251, 13, }, // Europe/Isle_of_Man + { 690, 8804, 226242, 13, }, // Europe/Isle_of_Man { 690, 1130, 90692, 9, }, // Europe/Istanbul { 690, 8823, 90701, 5, }, // Europe/Jersey { 690, 3979, 90706, 12, }, // Europe/Kaliningrad @@ -51199,9 +51199,9 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 6470, 90814, 10, }, // Europe/San_Marino { 690, 6245, 90824, 8, }, // Europe/Sarajevo { 690, 4451, 90832, 7, }, // Europe/Saratov - { 690, 8849, 226264, 12, }, // Europe/Simferopol - { 690, 6383, 226276, 8, }, // Europe/Skopje - { 690, 6599, 226284, 7, }, // Europe/Sofia + { 690, 8849, 226255, 12, }, // Europe/Simferopol + { 690, 6383, 226267, 8, }, // Europe/Skopje + { 690, 6599, 226275, 7, }, // Europe/Sofia { 690, 6523, 90866, 8, }, // Europe/Stockholm { 690, 8867, 90874, 5, }, // Europe/Tallinn { 690, 6202, 90879, 6, }, // Europe/Tirane @@ -51213,7 +51213,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 4727, 90922, 11, }, // Europe/Volgograd { 690, 3190, 90933, 5, }, // Europe/Warsaw { 690, 6261, 90938, 8, }, // Europe/Zagreb - { 690, 6540, 226291, 9, }, // Europe/Zurich + { 690, 6540, 226282, 9, }, // Europe/Zurich { 690, 5078, 90955, 11, }, // Indian/Antananarivo { 690, 6947, 115401, 5, }, // Indian/Chagos { 690, 6046, 90971, 7, }, // Indian/Christmas @@ -51222,38 +51222,38 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 6661, 90989, 7, }, // Indian/Kerguelen { 690, 7260, 32983, 4, }, // Indian/Mahe { 690, 7050, 90996, 6, }, // Indian/Maldives - { 690, 4069, 226300, 6, }, // Indian/Mauritius + { 690, 4069, 226291, 6, }, // Indian/Mauritius { 690, 5098, 91008, 8, }, // Indian/Mayotte { 690, 7211, 91016, 8, }, // Indian/Reunion { 690, 4422, 91024, 5, }, // Pacific/Apia - { 690, 932, 226306, 6, }, // Pacific/Auckland + { 690, 932, 226297, 6, }, // Pacific/Auckland { 690, 3706, 91035, 8, }, // Pacific/Bougainville - { 690, 3015, 226312, 6, }, // Pacific/Chatham + { 690, 3015, 226303, 6, }, // Pacific/Chatham { 690, 3157, 91047, 2, }, // Pacific/Chuuk - { 690, 2237, 226318, 6, }, // Pacific/Easter - { 690, 7360, 226324, 5, }, // Pacific/Efate - { 690, 7327, 226329, 9, }, // Pacific/Fakaofo - { 690, 3902, 226338, 5, }, // Pacific/Fiji - { 690, 7343, 226343, 12, }, // Pacific/Funafuti + { 690, 2237, 226309, 6, }, // Pacific/Easter + { 690, 7360, 226315, 5, }, // Pacific/Efate + { 690, 7327, 226320, 9, }, // Pacific/Fakaofo + { 690, 3902, 226329, 5, }, // Pacific/Fiji + { 690, 7343, 226334, 12, }, // Pacific/Funafuti { 690, 6678, 91085, 9, }, // Pacific/Galapagos - { 690, 6696, 226355, 9, }, // Pacific/Gambier + { 690, 6696, 226346, 9, }, // Pacific/Gambier { 690, 3822, 91101, 10, }, // Pacific/Guadalcanal { 690, 6018, 31112, 4, }, // Pacific/Guam - { 690, 3049, 226364, 5, }, // Pacific/Kanton + { 690, 3049, 226355, 5, }, // Pacific/Kanton { 690, 3998, 33132, 10, }, // Pacific/Kiritimati { 690, 7019, 91126, 6, }, // Pacific/Kosrae { 690, 2842, 91132, 10, }, // Pacific/Kwajalein { 690, 4877, 91142, 6, }, // Pacific/Majuro { 690, 4051, 91148, 8, }, // Pacific/Marquesas { 690, 8914, 91156, 5, }, // Pacific/Midway - { 690, 7084, 226369, 6, }, // Pacific/Nauru + { 690, 7084, 226360, 6, }, // Pacific/Nauru { 690, 7132, 91165, 4, }, // Pacific/Niue - { 690, 4168, 226375, 7, }, // Pacific/Norfolk - { 690, 7098, 226382, 6, }, // Pacific/Noumea + { 690, 4168, 226366, 7, }, // Pacific/Norfolk + { 690, 7098, 226373, 6, }, // Pacific/Noumea { 690, 3126, 91182, 9, }, // Pacific/Pago_Pago { 690, 7155, 91191, 4, }, // Pacific/Palau { 690, 7194, 137202, 8, }, // Pacific/Pitcairn - { 690, 3096, 226388, 7, }, // Pacific/Pohnpei + { 690, 3096, 226379, 7, }, // Pacific/Pohnpei { 690, 4807, 91201, 14, }, // Pacific/Port_Moresby { 690, 6076, 91215, 9, }, // Pacific/Rarotonga { 690, 6031, 91224, 6, }, // Pacific/Saipan @@ -51263,7 +51263,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 690, 7392, 33268, 3, }, // Pacific/Wake { 690, 7405, 33271, 5, }, // Pacific/Wallis { 691, 6788, 148234, 7, }, // Africa/Abidjan Kuvi/Odia/India - { 691, 6760, 226395, 5, }, // Africa/Accra + { 691, 6760, 226386, 5, }, // Africa/Accra { 691, 5059, 148246, 12, }, // Africa/Addis_Ababa { 691, 7420, 148258, 8, }, // Africa/Algiers { 691, 14, 148266, 5, }, // Africa/Asmara @@ -51272,217 +51272,217 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 691, 6746, 148284, 7, }, // Africa/Banjul { 691, 7435, 148291, 5, }, // Africa/Bissau { 691, 4957, 148296, 13, }, // Africa/Blantyre - { 691, 5287, 226400, 12, }, // Africa/Brazzaville - { 691, 4922, 226412, 10, }, // Africa/Bujumbura + { 691, 5287, 226391, 12, }, // Africa/Brazzaville + { 691, 4922, 226403, 10, }, // Africa/Bujumbura { 691, 2320, 148331, 4, }, // Africa/Cairo { 691, 4117, 148336, 12, }, // Africa/Casablanca { 691, 7449, 148348, 5, }, // Africa/Ceuta - { 691, 6773, 226422, 7, }, // Africa/Conakry + { 691, 6773, 226413, 7, }, // Africa/Conakry { 691, 6840, 148361, 4, }, // Africa/Dakar { 691, 5130, 148365, 15, }, // Africa/Dar_es_Salaam - { 691, 5043, 226429, 5, }, // Africa/Djibouti + { 691, 5043, 226420, 5, }, // Africa/Djibouti { 691, 5243, 148386, 4, }, // Africa/Douala { 691, 5166, 148390, 9, }, // Africa/El_Aaiun - { 691, 6853, 226434, 10, }, // Africa/Freetown - { 691, 4906, 226444, 8, }, // Africa/Gaborone + { 691, 6853, 226425, 10, }, // Africa/Freetown + { 691, 4906, 226435, 8, }, // Africa/Gaborone { 691, 5015, 148418, 5, }, // Africa/Harare - { 691, 4479, 226452, 10, }, // Africa/Johannesburg + { 691, 4479, 226443, 10, }, // Africa/Johannesburg { 691, 4499, 148434, 4, }, // Africa/Juba { 691, 5151, 148438, 8, }, // Africa/Kampala - { 691, 4524, 226462, 7, }, // Africa/Khartoum + { 691, 4524, 226453, 7, }, // Africa/Khartoum { 691, 4973, 148453, 6, }, // Africa/Kigali { 691, 5306, 148459, 8, }, // Africa/Kinshasa - { 691, 4744, 226469, 6, }, // Africa/Lagos - { 691, 5336, 226475, 12, }, // Africa/Libreville - { 691, 6869, 226487, 4, }, // Africa/Lome + { 691, 4744, 226460, 6, }, // Africa/Lagos + { 691, 5336, 226466, 12, }, // Africa/Libreville + { 691, 6869, 226478, 4, }, // Africa/Lome { 691, 5211, 148491, 7, }, // Africa/Luanda { 691, 4939, 148498, 10, }, // Africa/Lubumbashi { 691, 5001, 148508, 6, }, // Africa/Lusaka { 691, 5322, 148514, 5, }, // Africa/Malabo { 691, 4987, 148520, 6, }, // Africa/Maputo { 691, 5197, 148526, 6, }, // Africa/Maseru - { 691, 5182, 226491, 9, }, // Africa/Mbabane - { 691, 5113, 226500, 8, }, // Africa/Mogadishu - { 691, 7034, 226508, 7, }, // Africa/Monrovia - { 691, 3853, 226515, 6, }, // Africa/Nairobi + { 691, 5182, 226482, 9, }, // Africa/Mbabane + { 691, 5113, 226491, 8, }, // Africa/Mogadishu + { 691, 7034, 226499, 7, }, // Africa/Monrovia + { 691, 3853, 226506, 6, }, // Africa/Nairobi { 691, 5271, 148561, 6, }, // Africa/Ndjamena { 691, 5354, 148567, 5, }, // Africa/Niamey - { 691, 6803, 226521, 6, }, // Africa/Nouakchott - { 691, 6727, 226527, 6, }, // Africa/Ouagadougou - { 691, 5225, 226533, 7, }, // Africa/Porto-Novo - { 691, 4435, 226540, 7, }, // Africa/Sao_Tome - { 691, 2866, 226547, 7, }, // Africa/Tripoli + { 691, 6803, 226512, 6, }, // Africa/Nouakchott + { 691, 6727, 226518, 6, }, // Africa/Ouagadougou + { 691, 5225, 226524, 7, }, // Africa/Porto-Novo + { 691, 4435, 226531, 7, }, // Africa/Sao_Tome + { 691, 2866, 226538, 7, }, // Africa/Tripoli { 691, 6554, 148614, 7, }, // Africa/Tunis - { 691, 4152, 226554, 8, }, // Africa/Windhoek + { 691, 4152, 226545, 8, }, // Africa/Windhoek { 691, 132, 148631, 5, }, // America/Adak { 691, 3346, 148636, 8, }, // America/Anchorage { 691, 5607, 148644, 8, }, // America/Anguilla { 691, 5624, 148652, 8, }, // America/Antigua { 691, 4554, 148660, 8, }, // America/Araguaina - { 691, 166, 226562, 13, }, // America/Argentina/Buenos_Aires - { 691, 91, 226575, 10, }, // America/Argentina/Catamarca - { 691, 270, 226585, 6, }, // America/Argentina/Cordoba - { 691, 441, 226591, 5, }, // America/Argentina/Jujuy - { 691, 7462, 226596, 9, }, // America/Argentina/La_Rioja - { 691, 565, 226605, 7, }, // America/Argentina/Mendoza - { 691, 7489, 226612, 12, }, // America/Argentina/Rio_Gallegos - { 691, 7520, 226624, 6, }, // America/Argentina/Salta - { 691, 7544, 226630, 11, }, // America/Argentina/San_Juan - { 691, 5580, 226641, 9, }, // America/Argentina/San_Luis - { 691, 7571, 226650, 6, }, // America/Argentina/Tucuman - { 691, 7597, 226656, 7, }, // America/Argentina/Ushuaia - { 691, 5640, 226663, 5, }, // America/Aruba + { 691, 166, 226553, 13, }, // America/Argentina/Buenos_Aires + { 691, 91, 226566, 10, }, // America/Argentina/Catamarca + { 691, 270, 226576, 6, }, // America/Argentina/Cordoba + { 691, 441, 226582, 5, }, // America/Argentina/Jujuy + { 691, 7462, 226587, 9, }, // America/Argentina/La_Rioja + { 691, 565, 226596, 7, }, // America/Argentina/Mendoza + { 691, 7489, 226603, 12, }, // America/Argentina/Rio_Gallegos + { 691, 7520, 226615, 6, }, // America/Argentina/Salta + { 691, 7544, 226621, 11, }, // America/Argentina/San_Juan + { 691, 5580, 226632, 9, }, // America/Argentina/San_Luis + { 691, 7571, 226641, 6, }, // America/Argentina/Tucuman + { 691, 7597, 226647, 7, }, // America/Argentina/Ushuaia + { 691, 5640, 226654, 5, }, // America/Aruba { 691, 4252, 148781, 9, }, // America/Asuncion { 691, 237, 148790, 9, }, // America/Atikokan { 691, 3679, 148799, 5, }, // America/Bahia { 691, 7623, 148804, 18, }, // America/Bahia_Banderas - { 691, 5654, 226668, 7, }, // America/Barbados + { 691, 5654, 226659, 7, }, // America/Barbados { 691, 7646, 148832, 5, }, // America/Belem { 691, 5407, 148837, 6, }, // America/Belize - { 691, 7660, 226675, 14, }, // America/Blanc-Sablon - { 691, 7681, 226689, 10, }, // America/Boa_Vista - { 691, 4361, 226699, 4, }, // America/Bogota - { 691, 7699, 226703, 4, }, // America/Boise + { 691, 7660, 226666, 14, }, // America/Blanc-Sablon + { 691, 7681, 226680, 10, }, // America/Boa_Vista + { 691, 4361, 226690, 4, }, // America/Bogota + { 691, 7699, 226694, 4, }, // America/Boise { 691, 7713, 148879, 13, }, // America/Cambridge_Bay - { 691, 7735, 226707, 14, }, // America/Campo_Grande + { 691, 7735, 226698, 14, }, // America/Campo_Grande { 691, 3868, 148907, 7, }, // America/Cancun { 691, 4694, 148914, 8, }, // America/Caracas { 691, 4345, 148922, 8, }, // America/Cayenne { 691, 5496, 148930, 9, }, // America/Cayman - { 691, 2260, 226721, 5, }, // America/Chicago + { 691, 2260, 226712, 5, }, // America/Chicago { 691, 7756, 148945, 8, }, // America/Chihuahua - { 691, 5422, 226726, 10, }, // America/Costa_Rica - { 691, 7796, 226736, 9, }, // America/Creston + { 691, 5422, 226717, 10, }, // America/Costa_Rica + { 691, 7796, 226727, 9, }, // America/Creston { 691, 3791, 148989, 5, }, // America/Cuiaba { 691, 5723, 148994, 5, }, // America/Curacao { 691, 7812, 149000, 13, }, // America/Danmarkshavn { 691, 7833, 149013, 5, }, // America/Dawson { 691, 7848, 149018, 12, }, // America/Dawson_Creek - { 691, 805, 226745, 7, }, // America/Denver - { 691, 3465, 226752, 8, }, // America/Detroit - { 691, 5739, 226760, 7, }, // America/Dominica - { 691, 893, 226767, 9, }, // America/Edmonton + { 691, 805, 226736, 7, }, // America/Denver + { 691, 3465, 226743, 8, }, // America/Detroit + { 691, 5739, 226751, 7, }, // America/Dominica + { 691, 893, 226758, 9, }, // America/Edmonton { 691, 7869, 149063, 7, }, // America/Eirunepe - { 691, 5441, 226776, 13, }, // America/El_Salvador - { 691, 7886, 226789, 11, }, // America/Fort_Nelson - { 691, 7906, 226800, 8, }, // America/Fortaleza + { 691, 5441, 226767, 13, }, // America/El_Salvador + { 691, 7886, 226780, 11, }, // America/Fort_Nelson + { 691, 7906, 226791, 8, }, // America/Fortaleza { 691, 7924, 149106, 9, }, // America/Glace_Bay { 691, 6881, 149115, 7, }, // America/Goose_Bay { 691, 4612, 149122, 14, }, // America/Grand_Turk { 691, 5770, 149136, 8, }, // America/Grenada - { 691, 5786, 226808, 9, }, // America/Guadeloupe - { 691, 3760, 226817, 9, }, // America/Guatemala + { 691, 5786, 226799, 9, }, // America/Guadeloupe + { 691, 3760, 226808, 9, }, // America/Guatemala { 691, 4841, 149163, 9, }, // America/Guayaquil { 691, 6932, 149172, 5, }, // America/Guyana { 691, 1939, 149177, 12, }, // America/Halifax - { 691, 2281, 226826, 5, }, // America/Havana - { 691, 7942, 226831, 8, }, // America/Hermosillo - { 691, 348, 226839, 13, }, // America/Indiana/Indianapolis + { 691, 2281, 226817, 5, }, // America/Havana + { 691, 7942, 226822, 8, }, // America/Hermosillo + { 691, 348, 226830, 13, }, // America/Indiana/Indianapolis { 691, 481, 149218, 17, }, // America/Indiana/Knox - { 691, 7961, 226852, 16, }, // America/Indiana/Marengo + { 691, 7961, 226843, 16, }, // America/Indiana/Marengo { 691, 7985, 149252, 22, }, // America/Indiana/Petersburg { 691, 8012, 149274, 19, }, // America/Indiana/Tell_City - { 691, 8038, 226868, 15, }, // America/Indiana/Vevay + { 691, 8038, 226859, 15, }, // America/Indiana/Vevay { 691, 8060, 149308, 21, }, // America/Indiana/Vincennes { 691, 8086, 149329, 18, }, // America/Indiana/Winamac - { 691, 8110, 226883, 7, }, // America/Inuvik + { 691, 8110, 226874, 7, }, // America/Inuvik { 691, 660, 149354, 10, }, // America/Iqaluit { 691, 2799, 149364, 7, }, // America/Jamaica { 691, 5380, 149371, 6, }, // America/Juneau - { 691, 521, 226890, 10, }, // America/Kentucky/Louisville - { 691, 8125, 226900, 20, }, // America/Kentucky/Monticello - { 691, 5704, 226920, 13, }, // America/Kralendijk + { 691, 521, 226881, 10, }, // America/Kentucky/Louisville + { 691, 8125, 226891, 20, }, // America/Kentucky/Monticello + { 691, 5704, 226911, 13, }, // America/Kralendijk { 691, 4376, 149420, 6, }, // America/La_Paz { 691, 7169, 149428, 4, }, // America/Lima { 691, 3239, 149432, 13, }, // America/Los_Angeles { 691, 5932, 149445, 23, }, // America/Lower_Princes - { 691, 8153, 226933, 5, }, // America/Maceio + { 691, 8153, 226924, 5, }, // America/Maceio { 691, 8168, 149473, 7, }, // America/Managua { 691, 1908, 149480, 8, }, // America/Manaus - { 691, 5897, 226938, 7, }, // America/Marigot + { 691, 5897, 226929, 7, }, // America/Marigot { 691, 5805, 149496, 12, }, // America/Martinique - { 691, 8184, 226945, 8, }, // America/Matamoros - { 691, 2917, 226953, 9, }, // America/Mazatlan + { 691, 8184, 226936, 8, }, // America/Matamoros + { 691, 2917, 226944, 9, }, // America/Mazatlan { 691, 8202, 149527, 8, }, // America/Menominee { 691, 8220, 149535, 6, }, // America/Merida { 691, 8235, 149541, 10, }, // America/Metlakatla { 691, 2949, 149551, 13, }, // America/Mexico_City - { 691, 4391, 226962, 9, }, // America/Miquelon - { 691, 8254, 226971, 7, }, // America/Moncton - { 691, 8270, 226978, 7, }, // America/Monterrey - { 691, 4098, 226985, 10, }, // America/Montevideo - { 691, 5824, 226995, 10, }, // America/Montserrat + { 691, 4391, 226953, 9, }, // America/Miquelon + { 691, 8254, 226962, 7, }, // America/Moncton + { 691, 8270, 226969, 7, }, // America/Monterrey + { 691, 4098, 226976, 10, }, // America/Montevideo + { 691, 5824, 226986, 10, }, // America/Montserrat { 691, 5481, 149611, 5, }, // America/Nassau - { 691, 2379, 227005, 10, }, // America/New_York + { 691, 2379, 226996, 10, }, // America/New_York { 691, 8288, 149627, 4, }, // America/Nome - { 691, 1850, 227015, 5, }, // America/Noronha - { 691, 8301, 227020, 19, }, // America/North_Dakota/Beulah - { 691, 8329, 227039, 20, }, // America/North_Dakota/Center - { 691, 8357, 227059, 24, }, // America/North_Dakota/New_Salem + { 691, 1850, 227006, 5, }, // America/Noronha + { 691, 8301, 227011, 19, }, // America/North_Dakota/Beulah + { 691, 8329, 227030, 20, }, // America/North_Dakota/Center + { 691, 8357, 227050, 24, }, // America/North_Dakota/New_Salem { 691, 393, 149705, 5, }, // America/Nuuk - { 691, 8388, 227083, 7, }, // America/Ojinaga + { 691, 8388, 227074, 7, }, // America/Ojinaga { 691, 2356, 149717, 6, }, // America/Panama { 691, 6173, 149723, 9, }, // America/Paramaribo - { 691, 2973, 227090, 7, }, // America/Phoenix - { 691, 3945, 227097, 17, }, // America/Port-au-Prince - { 691, 5954, 227114, 16, }, // America/Port_of_Spain + { 691, 2973, 227081, 7, }, // America/Phoenix + { 691, 3945, 227088, 17, }, // America/Port-au-Prince + { 691, 5954, 227105, 16, }, // America/Port_of_Spain { 691, 8404, 149776, 11, }, // America/Porto_Velho - { 691, 5843, 227130, 10, }, // America/Puerto_Rico + { 691, 5843, 227121, 10, }, // America/Puerto_Rico { 691, 4030, 149799, 15, }, // America/Punta_Arenas { 691, 8424, 149814, 14, }, // America/Rankin_Inlet - { 691, 8445, 227140, 6, }, // America/Recife + { 691, 8445, 227131, 6, }, // America/Recife { 691, 1995, 149834, 6, }, // America/Regina { 691, 8460, 149840, 8, }, // America/Resolute - { 691, 695, 227146, 11, }, // America/Rio_Branco - { 691, 8477, 227157, 9, }, // America/Santarem + { 691, 695, 227137, 11, }, // America/Rio_Branco + { 691, 8477, 227148, 9, }, // America/Santarem { 691, 2201, 149871, 8, }, // America/Santiago - { 691, 6111, 227166, 12, }, // America/Santo_Domingo + { 691, 6111, 227157, 12, }, // America/Santo_Domingo { 691, 1878, 149895, 9, }, // America/Sao_Paulo - { 691, 6899, 227178, 14, }, // America/Scoresbysund + { 691, 6899, 227169, 14, }, // America/Scoresbysund { 691, 8494, 149921, 5, }, // America/Sitka - { 691, 8508, 227192, 16, }, // America/St_Barthelemy + { 691, 8508, 227183, 16, }, // America/St_Barthelemy { 691, 2061, 149944, 12, }, // America/St_Johns - { 691, 5863, 227208, 13, }, // America/St_Kitts + { 691, 5863, 227199, 13, }, // America/St_Kitts { 691, 5880, 149969, 13, }, // America/St_Lucia - { 691, 855, 227221, 13, }, // America/St_Thomas - { 691, 5913, 227234, 17, }, // America/St_Vincent + { 691, 855, 227212, 13, }, // America/St_Thomas + { 691, 5913, 227225, 17, }, // America/St_Vincent { 691, 8530, 150013, 15, }, // America/Swift_Current { 691, 5461, 150028, 11, }, // America/Tegucigalpa - { 691, 5756, 227251, 4, }, // America/Thule + { 691, 5756, 227242, 4, }, // America/Thule { 691, 313, 150043, 7, }, // America/Tijuana - { 691, 608, 227255, 5, }, // America/Toronto - { 691, 5688, 227260, 5, }, // America/Tortola - { 691, 2093, 227265, 9, }, // America/Vancouver + { 691, 608, 227246, 5, }, // America/Toronto + { 691, 5688, 227251, 5, }, // America/Tortola + { 691, 2093, 227256, 9, }, // America/Vancouver { 691, 2144, 150074, 11, }, // America/Whitehorse { 691, 734, 150085, 8, }, // America/Winnipeg { 691, 8552, 150093, 8, }, // America/Yakutat - { 691, 6001, 227274, 4, }, // Antarctica/Casey - { 691, 6094, 227278, 6, }, // Antarctica/Davis - { 691, 6133, 227284, 19, }, // Antarctica/DumontDUrville - { 691, 8568, 227303, 7, }, // Antarctica/Macquarie - { 691, 7066, 227310, 5, }, // Antarctica/Mawson - { 691, 7113, 227315, 10, }, // Antarctica/McMurdo - { 691, 8589, 227325, 5, }, // Antarctica/Palmer - { 691, 7226, 227330, 6, }, // Antarctica/Rothera + { 691, 6001, 227265, 4, }, // Antarctica/Casey + { 691, 6094, 227269, 6, }, // Antarctica/Davis + { 691, 6133, 227275, 19, }, // Antarctica/DumontDUrville + { 691, 8568, 227294, 7, }, // Antarctica/Macquarie + { 691, 7066, 227301, 5, }, // Antarctica/Mawson + { 691, 7113, 227306, 10, }, // Antarctica/McMurdo + { 691, 8589, 227316, 5, }, // Antarctica/Palmer + { 691, 7226, 227321, 6, }, // Antarctica/Rothera { 691, 7295, 150167, 4, }, // Antarctica/Syowa - { 691, 8607, 227336, 4, }, // Antarctica/Troll - { 691, 7374, 227340, 7, }, // Antarctica/Vostok - { 691, 1429, 227347, 10, }, // Arctic/Longyearbyen + { 691, 8607, 227327, 4, }, // Antarctica/Troll + { 691, 7374, 227331, 7, }, // Antarctica/Vostok + { 691, 1429, 227338, 10, }, // Arctic/Longyearbyen { 691, 5570, 150199, 6, }, // Asia/Aden { 691, 5395, 150205, 6, }, // Asia/Almaty { 691, 3968, 150211, 6, }, // Asia/Amman { 691, 5511, 150217, 8, }, // Asia/Anadyr { 691, 5523, 150225, 5, }, // Asia/Aqtau - { 691, 5368, 227357, 6, }, // Asia/Aqtobe - { 691, 964, 227363, 9, }, // Asia/Ashgabat + { 691, 5368, 227348, 6, }, // Asia/Aqtobe + { 691, 964, 227354, 9, }, // Asia/Ashgabat { 691, 8624, 150248, 6, }, // Asia/Atyrau { 691, 3607, 150254, 8, }, // Asia/Baghdad - { 691, 5534, 227372, 6, }, // Asia/Bahrain + { 691, 5534, 227363, 6, }, // Asia/Bahrain { 691, 3653, 148992, 4, }, // Asia/Baku { 691, 4466, 150270, 11, }, // Asia/Bangkok { 691, 3571, 150281, 8, }, // Asia/Barnaul { 691, 4086, 150289, 7, }, // Asia/Beirut - { 691, 3778, 227378, 8, }, // Asia/Bishkek + { 691, 3778, 227369, 8, }, // Asia/Bishkek { 691, 5989, 150304, 7, }, // Asia/Brunei { 691, 4601, 150311, 4, }, // Asia/Chita { 691, 4511, 150315, 6, }, // Asia/Colombo @@ -51490,24 +51490,24 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 691, 1093, 150849, 4, }, // Asia/Dhaka { 691, 6192, 150334, 6, }, // Asia/Dili { 691, 3596, 150340, 5, }, // Asia/Dubai - { 691, 6159, 227386, 7, }, // Asia/Dushanbe - { 691, 8636, 227393, 10, }, // Asia/Famagusta + { 691, 6159, 227377, 7, }, // Asia/Dushanbe + { 691, 8636, 227384, 10, }, // Asia/Famagusta { 691, 8651, 150362, 4, }, // Asia/Gaza { 691, 4795, 150366, 8, }, // Asia/Hebron - { 691, 1259, 227403, 15, }, // Asia/Ho_Chi_Minh + { 691, 1259, 227394, 15, }, // Asia/Ho_Chi_Minh { 691, 2704, 150390, 5, }, // Asia/Hong_Kong - { 691, 4771, 227418, 6, }, // Asia/Hovd + { 691, 4771, 227409, 6, }, // Asia/Hovd { 691, 4184, 150401, 8, }, // Asia/Irkutsk - { 691, 7006, 227424, 7, }, // Asia/Jakarta + { 691, 7006, 227415, 7, }, // Asia/Jakarta { 691, 6992, 150418, 6, }, // Asia/Jayapura { 691, 1290, 150424, 8, }, // Asia/Jerusalem - { 691, 3560, 227431, 5, }, // Asia/Kabul + { 691, 3560, 227422, 5, }, // Asia/Kabul { 691, 4316, 150437, 8, }, // Asia/Kamchatka { 691, 4239, 150445, 5, }, // Asia/Karachi - { 691, 1185, 227436, 9, }, // Asia/Kathmandu - { 691, 8661, 227445, 9, }, // Asia/Khandyga + { 691, 1185, 227427, 9, }, // Asia/Kathmandu + { 691, 8661, 227436, 9, }, // Asia/Khandyga { 691, 992, 150468, 7, }, // Asia/Kolkata - { 691, 4197, 227454, 12, }, // Asia/Krasnoyarsk + { 691, 4197, 227445, 12, }, // Asia/Krasnoyarsk { 691, 4859, 150488, 12, }, // Asia/Kuala_Lumpur { 691, 5976, 150500, 5, }, // Asia/Kuching { 691, 5547, 150505, 4, }, // Asia/Kuwait @@ -51516,83 +51516,83 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 691, 1349, 150522, 9, }, // Asia/Makassar { 691, 7182, 150531, 6, }, // Asia/Manila { 691, 6920, 150537, 8, }, // Asia/Muscat - { 691, 2554, 227466, 6, }, // Asia/Nicosia - { 691, 8675, 227472, 11, }, // Asia/Novokuznetsk - { 691, 4135, 227483, 10, }, // Asia/Novosibirsk + { 691, 2554, 227457, 6, }, // Asia/Nicosia + { 691, 8675, 227463, 11, }, // Asia/Novokuznetsk + { 691, 4135, 227474, 10, }, // Asia/Novosibirsk { 691, 4229, 150577, 5, }, // Asia/Omsk - { 691, 7145, 227493, 6, }, // Asia/Oral - { 691, 6961, 227499, 10, }, // Asia/Phnom_Penh - { 691, 8693, 227509, 11, }, // Asia/Pontianak + { 691, 7145, 227484, 6, }, // Asia/Oral + { 691, 6961, 227490, 10, }, // Asia/Phnom_Penh + { 691, 8693, 227500, 11, }, // Asia/Pontianak { 691, 4214, 150611, 11, }, // Asia/Pyongyang { 691, 5559, 150622, 5, }, // Asia/Qatar - { 691, 8708, 227520, 6, }, // Asia/Qostanay - { 691, 4269, 227526, 9, }, // Asia/Qyzylorda + { 691, 8708, 227511, 6, }, // Asia/Qostanay + { 691, 4269, 227517, 9, }, // Asia/Qyzylorda { 691, 3584, 150644, 4, }, // Asia/Riyadh - { 691, 4408, 227535, 7, }, // Asia/Sakhalin + { 691, 4408, 227526, 7, }, // Asia/Sakhalin { 691, 7245, 150655, 7, }, // Asia/Samarkand - { 691, 3279, 227542, 4, }, // Asia/Seoul - { 691, 1053, 227546, 5, }, // Asia/Shanghai + { 691, 3279, 227533, 4, }, // Asia/Seoul + { 691, 1053, 227537, 5, }, // Asia/Shanghai { 691, 3300, 150672, 11, }, // Asia/Singapore - { 691, 4297, 227551, 14, }, // Asia/Srednekolymsk + { 691, 4297, 227542, 14, }, // Asia/Srednekolymsk { 691, 3263, 150698, 6, }, // Asia/Taipei - { 691, 4781, 227565, 8, }, // Asia/Tashkent + { 691, 4781, 227556, 8, }, // Asia/Tashkent { 691, 3915, 150712, 8, }, // Asia/Tbilisi { 691, 2772, 150720, 8, }, // Asia/Tehran - { 691, 1317, 227573, 6, }, // Asia/Thimphu - { 691, 2821, 227579, 4, }, // Asia/Tokyo - { 691, 4572, 227583, 5, }, // Asia/Tomsk + { 691, 1317, 227564, 6, }, // Asia/Thimphu + { 691, 2821, 227570, 4, }, // Asia/Tokyo + { 691, 4572, 227574, 5, }, // Asia/Tomsk { 691, 1021, 150745, 12, }, // Asia/Ulaanbaatar { 691, 1159, 150757, 6, }, // Asia/Urumqi - { 691, 8722, 227588, 11, }, // Asia/Ust-Nera - { 691, 6977, 227599, 11, }, // Asia/Vientiane - { 691, 4710, 227610, 13, }, // Asia/Vladivostok + { 691, 8722, 227579, 11, }, // Asia/Ust-Nera + { 691, 6977, 227590, 11, }, // Asia/Vientiane + { 691, 4710, 227601, 13, }, // Asia/Vladivostok { 691, 4828, 150798, 8, }, // Asia/Yakutsk { 691, 1235, 150806, 9, }, // Asia/Yangon { 691, 3883, 150815, 14, }, // Asia/Yekaterinburg - { 691, 3747, 227623, 8, }, // Asia/Yerevan - { 691, 3663, 227631, 6, }, // Atlantic/Azores - { 691, 5671, 227637, 6, }, // Atlantic/Bermuda + { 691, 3747, 227614, 8, }, // Asia/Yerevan + { 691, 3663, 227622, 6, }, // Atlantic/Azores + { 691, 5671, 227628, 6, }, // Atlantic/Bermuda { 691, 6628, 150851, 6, }, // Atlantic/Canary - { 691, 3727, 227643, 11, }, // Atlantic/Cape_Verde - { 691, 1395, 227654, 3, }, // Atlantic/Faroe + { 691, 3727, 227634, 11, }, // Atlantic/Cape_Verde + { 691, 1395, 227645, 3, }, // Atlantic/Faroe { 691, 8736, 150873, 7, }, // Atlantic/Madeira - { 691, 2748, 227657, 9, }, // Atlantic/Reykjavik + { 691, 2748, 227648, 9, }, // Atlantic/Reykjavik { 691, 7272, 150890, 13, }, // Atlantic/South_Georgia { 691, 6821, 150903, 14, }, // Atlantic/St_Helena - { 691, 6644, 227666, 8, }, // Atlantic/Stanley - { 691, 1670, 227674, 7, }, // Australia/Adelaide - { 691, 1635, 227681, 8, }, // Australia/Brisbane - { 691, 1799, 227689, 10, }, // Australia/Broken_Hill - { 691, 1583, 227699, 8, }, // Australia/Darwin + { 691, 6644, 227657, 8, }, // Atlantic/Stanley + { 691, 1670, 227665, 7, }, // Australia/Adelaide + { 691, 1635, 227672, 8, }, // Australia/Brisbane + { 691, 1799, 227680, 10, }, // Australia/Broken_Hill + { 691, 1583, 227690, 8, }, // Australia/Darwin { 691, 3637, 150965, 5, }, // Australia/Eucla { 691, 1516, 150970, 7, }, // Australia/Hobart - { 691, 8753, 227707, 9, }, // Australia/Lindeman - { 691, 1547, 227716, 10, }, // Australia/Lord_Howe - { 691, 1727, 227726, 7, }, // Australia/Melbourne - { 691, 1762, 227733, 4, }, // Australia/Perth + { 691, 8753, 227698, 9, }, // Australia/Lindeman + { 691, 1547, 227707, 10, }, // Australia/Lord_Howe + { 691, 1727, 227717, 7, }, // Australia/Melbourne + { 691, 1762, 227724, 4, }, // Australia/Perth { 691, 1463, 151017, 5, }, // Australia/Sydney - { 691, 6441, 227737, 12, }, // Europe/Amsterdam - { 691, 6216, 227749, 6, }, // Europe/Andorra - { 691, 3620, 227755, 10, }, // Europe/Astrakhan - { 691, 2300, 227765, 6, }, // Europe/Athens - { 691, 6336, 227771, 9, }, // Europe/Belgrade + { 691, 6441, 227728, 12, }, // Europe/Amsterdam + { 691, 6216, 227740, 6, }, // Europe/Andorra + { 691, 3620, 227746, 10, }, // Europe/Astrakhan + { 691, 2300, 227756, 6, }, // Europe/Athens + { 691, 6336, 227762, 9, }, // Europe/Belgrade { 691, 4757, 151065, 7, }, // Europe/Berlin - { 691, 6488, 227780, 11, }, // Europe/Bratislava - { 691, 2167, 227791, 10, }, // Europe/Brussels - { 691, 3928, 227801, 9, }, // Europe/Bucharest - { 691, 3806, 227810, 9, }, // Europe/Budapest + { 691, 6488, 227771, 11, }, // Europe/Bratislava + { 691, 2167, 227782, 10, }, // Europe/Brussels + { 691, 3928, 227792, 9, }, // Europe/Bucharest + { 691, 3806, 227801, 9, }, // Europe/Budapest { 691, 8772, 151111, 9, }, // Europe/Busingen - { 691, 2583, 227819, 7, }, // Europe/Chisinau - { 691, 6289, 227826, 10, }, // Europe/Copenhagen + { 691, 2583, 227810, 7, }, // Europe/Chisinau + { 691, 6289, 227817, 10, }, // Europe/Copenhagen { 691, 2338, 151137, 6, }, // Europe/Dublin { 691, 6307, 151143, 11, }, // Europe/Gibraltar { 691, 8788, 151154, 7, }, // Europe/Guernsey { 691, 6612, 151161, 8, }, // Europe/Helsinki - { 691, 8804, 227836, 15, }, // Europe/Isle_of_Man + { 691, 8804, 227827, 15, }, // Europe/Isle_of_Man { 691, 1130, 151182, 9, }, // Europe/Istanbul { 691, 8823, 151191, 5, }, // Europe/Jersey { 691, 3979, 151196, 13, }, // Europe/Kaliningrad - { 691, 8929, 227851, 4, }, // Europe/Kirov + { 691, 8929, 227842, 4, }, // Europe/Kirov { 691, 2527, 151214, 5, }, // Europe/Kyiv { 691, 3213, 151219, 7, }, // Europe/Lisbon { 691, 6506, 151226, 10, }, // Europe/Ljubljana @@ -51600,61 +51600,61 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 691, 6365, 151242, 9, }, // Europe/Luxembourg { 691, 4892, 151251, 8, }, // Europe/Madrid { 691, 6397, 151259, 5, }, // Europe/Malta - { 691, 6582, 227855, 9, }, // Europe/Mariehamn + { 691, 6582, 227846, 9, }, // Europe/Mariehamn { 691, 3693, 151274, 6, }, // Europe/Minsk - { 691, 6410, 227864, 4, }, // Europe/Monaco + { 691, 6410, 227855, 4, }, // Europe/Monaco { 691, 3537, 150537, 4, }, // Europe/Moscow - { 691, 6458, 227868, 4, }, // Europe/Oslo + { 691, 6458, 227859, 4, }, // Europe/Oslo { 691, 4284, 151295, 6, }, // Europe/Paris - { 691, 6424, 227872, 7, }, // Europe/Podgorica + { 691, 6424, 227863, 7, }, // Europe/Podgorica { 691, 6275, 151310, 6, }, // Europe/Prague { 691, 8837, 151316, 4, }, // Europe/Riga - { 691, 6324, 227879, 3, }, // Europe/Rome + { 691, 6324, 227870, 3, }, // Europe/Rome { 691, 4331, 151324, 6, }, // Europe/Samara { 691, 6470, 151330, 11, }, // Europe/San_Marino - { 691, 6245, 227882, 7, }, // Europe/Sarajevo - { 691, 4451, 227889, 7, }, // Europe/Saratov - { 691, 8849, 227896, 9, }, // Europe/Simferopol - { 691, 6383, 227905, 6, }, // Europe/Skopje - { 691, 6599, 227911, 5, }, // Europe/Sofia - { 691, 6523, 227916, 10, }, // Europe/Stockholm + { 691, 6245, 227873, 7, }, // Europe/Sarajevo + { 691, 4451, 227880, 7, }, // Europe/Saratov + { 691, 8849, 227887, 9, }, // Europe/Simferopol + { 691, 6383, 227896, 6, }, // Europe/Skopje + { 691, 6599, 227902, 5, }, // Europe/Sofia + { 691, 6523, 227907, 10, }, // Europe/Stockholm { 691, 8867, 151389, 7, }, // Europe/Tallinn - { 691, 6202, 227926, 7, }, // Europe/Tirane - { 691, 8882, 227933, 10, }, // Europe/Ulyanovsk - { 691, 6352, 227943, 5, }, // Europe/Vaduz - { 691, 6567, 227948, 8, }, // Europe/Vatican - { 691, 6231, 227956, 5, }, // Europe/Vienna - { 691, 8899, 227961, 8, }, // Europe/Vilnius - { 691, 4727, 227969, 9, }, // Europe/Volgograd + { 691, 6202, 227917, 7, }, // Europe/Tirane + { 691, 8882, 227924, 10, }, // Europe/Ulyanovsk + { 691, 6352, 227934, 5, }, // Europe/Vaduz + { 691, 6567, 227939, 8, }, // Europe/Vatican + { 691, 6231, 227947, 5, }, // Europe/Vienna + { 691, 8899, 227952, 8, }, // Europe/Vilnius + { 691, 4727, 227960, 9, }, // Europe/Volgograd { 691, 3190, 151450, 6, }, // Europe/Warsaw { 691, 6261, 151456, 8, }, // Europe/Zagreb { 691, 6540, 151464, 6, }, // Europe/Zurich { 691, 5078, 151470, 12, }, // Indian/Antananarivo { 691, 6947, 151483, 7, }, // Indian/Chagos - { 691, 6046, 227978, 12, }, // Indian/Christmas - { 691, 6063, 227990, 5, }, // Indian/Cocos - { 691, 5029, 227995, 3, }, // Indian/Comoro - { 691, 6661, 227998, 8, }, // Indian/Kerguelen + { 691, 6046, 227969, 12, }, // Indian/Christmas + { 691, 6063, 227981, 5, }, // Indian/Cocos + { 691, 5029, 227986, 3, }, // Indian/Comoro + { 691, 6661, 227989, 8, }, // Indian/Kerguelen { 691, 7260, 151522, 4, }, // Indian/Mahe { 691, 7050, 151526, 8, }, // Indian/Maldives - { 691, 4069, 228006, 6, }, // Indian/Mauritius - { 691, 5098, 228012, 5, }, // Indian/Mayotte + { 691, 4069, 227997, 6, }, // Indian/Mauritius + { 691, 5098, 228003, 5, }, // Indian/Mayotte { 691, 7211, 151547, 10, }, // Indian/Reunion { 691, 4422, 151557, 4, }, // Pacific/Apia { 691, 932, 151561, 7, }, // Pacific/Auckland - { 691, 3706, 228017, 12, }, // Pacific/Bougainville - { 691, 3015, 228029, 7, }, // Pacific/Chatham + { 691, 3706, 228008, 12, }, // Pacific/Bougainville + { 691, 3015, 228020, 7, }, // Pacific/Chatham { 691, 3157, 151588, 5, }, // Pacific/Chuuk { 691, 2237, 151593, 7, }, // Pacific/Easter { 691, 7360, 151600, 6, }, // Pacific/Efate - { 691, 7327, 228036, 5, }, // Pacific/Fakaofo - { 691, 3902, 228041, 4, }, // Pacific/Fiji + { 691, 7327, 228027, 5, }, // Pacific/Fakaofo + { 691, 3902, 228032, 4, }, // Pacific/Fiji { 691, 7343, 151617, 8, }, // Pacific/Funafuti - { 691, 6678, 228045, 8, }, // Pacific/Galapagos + { 691, 6678, 228036, 8, }, // Pacific/Galapagos { 691, 6696, 151634, 10, }, // Pacific/Gambier { 691, 3822, 151644, 11, }, // Pacific/Guadalcanal { 691, 6018, 149477, 4, }, // Pacific/Guam - { 691, 3049, 228053, 6, }, // Pacific/Kanton + { 691, 3049, 228044, 6, }, // Pacific/Kanton { 691, 3998, 151673, 10, }, // Pacific/Kiritimati { 691, 7019, 151683, 6, }, // Pacific/Kosrae { 691, 2842, 151689, 11, }, // Pacific/Kwajalein @@ -51663,18 +51663,18 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 691, 8914, 151719, 7, }, // Pacific/Midway { 691, 7084, 151726, 5, }, // Pacific/Nauru { 691, 7132, 151731, 4, }, // Pacific/Niue - { 691, 4168, 228059, 6, }, // Pacific/Norfolk - { 691, 7098, 228065, 5, }, // Pacific/Noumea + { 691, 4168, 228050, 6, }, // Pacific/Norfolk + { 691, 7098, 228056, 5, }, // Pacific/Noumea { 691, 3126, 151747, 9, }, // Pacific/Pago_Pago { 691, 7155, 151756, 5, }, // Pacific/Palau { 691, 7194, 151761, 10, }, // Pacific/Pitcairn - { 691, 3096, 228070, 6, }, // Pacific/Pohnpei - { 691, 4807, 228076, 13, }, // Pacific/Port_Moresby - { 691, 6076, 228089, 8, }, // Pacific/Rarotonga + { 691, 3096, 228061, 6, }, // Pacific/Pohnpei + { 691, 4807, 228067, 13, }, // Pacific/Port_Moresby + { 691, 6076, 228080, 8, }, // Pacific/Rarotonga { 691, 6031, 151803, 7, }, // Pacific/Saipan { 691, 7312, 151810, 6, }, // Pacific/Tahiti { 691, 6712, 151816, 5, }, // Pacific/Tarawa - { 691, 4583, 228097, 9, }, // Pacific/Tongatapu + { 691, 4583, 228088, 9, }, // Pacific/Tongatapu { 691, 7392, 151831, 4, }, // Pacific/Wake { 691, 7405, 151835, 7, }, // Pacific/Wallis { 692, 6788, 186476, 9, }, // Africa/Abidjan Kuvi/Telugu/India @@ -51731,7 +51731,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 692, 4152, 186868, 9, }, // Africa/Windhoek { 692, 132, 186877, 5, }, // America/Adak { 692, 3346, 186882, 8, }, // America/Anchorage - { 692, 5607, 228106, 10, }, // America/Anguilla + { 692, 5607, 228097, 10, }, // America/Anguilla { 692, 5624, 186900, 8, }, // America/Antigua { 692, 4554, 186908, 11, }, // America/Araguaina { 692, 166, 186919, 16, }, // America/Argentina/Buenos_Aires @@ -51975,7 +51975,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 692, 7272, 189115, 15, }, // Atlantic/South_Georgia { 692, 6821, 189130, 14, }, // Atlantic/St_Helena { 692, 6644, 189144, 8, }, // Atlantic/Stanley - { 692, 1670, 228116, 36, }, // Australia/Adelaide + { 692, 1670, 228107, 36, }, // Australia/Adelaide { 692, 1635, 189159, 13, }, // Australia/Brisbane { 692, 1799, 189172, 13, }, // Australia/Broken_Hill { 692, 1583, 189185, 8, }, // Australia/Darwin @@ -52069,7 +52069,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 692, 6696, 189891, 9, }, // Pacific/Gambier { 692, 3822, 189900, 13, }, // Pacific/Guadalcanal { 692, 6018, 189913, 6, }, // Pacific/Guam - { 692, 3049, 228152, 6, }, // Pacific/Kanton + { 692, 3049, 228143, 6, }, // Pacific/Kanton { 692, 3998, 189936, 10, }, // Pacific/Kiritimati { 692, 7019, 189946, 6, }, // Pacific/Kosrae { 692, 2842, 189952, 10, }, // Pacific/Kwajalein @@ -52137,12 +52137,12 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 695, 14, 0, 6, }, // Africa/Asmara Swampy Cree/Canadian Aboriginal/Canada { 695, 4435, 6, 8, }, // Africa/Sao_Tome { 695, 4252, 14, 8, }, // America/Asuncion - { 695, 237, 228158, 6, }, // America/Atikokan + { 695, 237, 228149, 6, }, // America/Atikokan { 695, 7623, 30, 17, }, // America/Bahia_Banderas { 695, 3868, 47, 6, }, // America/Cancun { 695, 7774, 53, 13, }, // America/Ciudad_Juarez { 695, 5723, 66, 7, }, // America/Curacao - { 695, 893, 228164, 6, }, // America/Edmonton + { 695, 893, 228155, 6, }, // America/Edmonton { 695, 481, 73, 13, }, // America/Indiana/Knox { 695, 7961, 86, 16, }, // America/Indiana/Marengo { 695, 7985, 102, 19, }, // America/Indiana/Petersburg @@ -52150,8 +52150,8 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 695, 8038, 139, 14, }, // America/Indiana/Vevay { 695, 8060, 153, 18, }, // America/Indiana/Vincennes { 695, 8086, 171, 16, }, // America/Indiana/Winamac - { 695, 8110, 228170, 4, }, // America/Inuvik - { 695, 660, 228174, 6, }, // America/Iqaluit + { 695, 8110, 228161, 4, }, // America/Inuvik + { 695, 660, 228165, 6, }, // America/Iqaluit { 695, 8125, 187, 20, }, // America/Kentucky/Monticello { 695, 5932, 207, 22, }, // America/Lower_Princes { 695, 8220, 229, 6, }, // America/Merida @@ -52167,8 +52167,8 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = { { 695, 5880, 370, 9, }, // America/St_Lucia { 695, 855, 379, 10, }, // America/St_Thomas { 695, 5913, 389, 11, }, // America/St_Vincent - { 695, 8530, 228180, 7, }, // America/Swift_Current - { 695, 734, 228187, 4, }, // America/Winnipeg + { 695, 8530, 228171, 7, }, // America/Swift_Current + { 695, 734, 228178, 4, }, // America/Winnipeg { 695, 6133, 400, 16, }, // Antarctica/DumontDUrville { 695, 1259, 432, 11, }, // Asia/Ho_Chi_Minh { 695, 1185, 448, 9, }, // Asia/Kathmandu @@ -102034,603 +102034,603 @@ static inline constexpr char16_t exemplarCityTable[] = { 0x62, 0x69, 0x69, 0x52, 0x61, 0x72, 0x6f, 0x74, 0x254, 0x14b, 0x67, 0x61, 0x53, 0x61, 0x269, 0x70, 0x61, 0x6e, 0x54, 0x61, 0x72, 0x61, 0x77, 0x61, 0x61, 0x54, 0x254, 0x14b, 0x67, 0x61, 0x74, 0x61, 0x70, 0x75, 0x75, 0x57, -0x65, 0x65, 0x6b, 0x905, 0x932, 0x20, 0x906, 0x907, 0x92f, 0x942, 0x928, 0x3c, -0x92e, 0x91c, 0x93c, 0x93e, 0x91f, 0x932, 0x93e, 0x928, 0x921, 0x92c, 0x908, 0x915, -0x93e, 0x92c, 0x932, 0x926, 0x916, 0x923, 0x940, 0x20, 0x91c, 0x949, 0x930, 0x94d, -0x91c, 0x93f, 0x92f, 0x93e, 0x90f, 0x92e, 0x94d, 0x938, 0x94d, 0x91f, 0x930, 0x921, -0x92e, 0x92a, 0x948, 0x930, 0x938, 0x915, 0x94d, 0x930, 0x93f, 0x938, 0x92e, 0x93f, -0x938, 0x915, 0x948, 0x902, 0x91f, 0x928, 0x92a, 0x93e, 0x917, 0x94b, 0x20, 0x917, -0x902, 0x917, 0x94b, 0x41, 0x6c, 0x6a, 0x65, 0x72, 0x69, 0x41, 0x7a, 0x6d, -0x61, 0x72, 0x61, 0x42, 0x61, 0x6e, 0x67, 0x68, 0xec, 0x42, 0x69, 0x73, -0xe0, 0x6f, 0x42, 0x75, 0x6a, 0x75, 0x6e, 0x62, 0x75, 0x72, 0x61, 0x43, -0x61, 0x7a, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x61, 0x4b, 0x61, 0x6e, -0x70, 0x61, 0x6c, 0x61, 0x4c, 0x75, 0x62, 0x75, 0x6e, 0x62, 0x61, 0x73, -0x68, 0x69, 0x4d, 0x61, 0x7a, 0x65, 0x72, 0x75, 0x4e, 0x62, 0x61, 0x62, -0x61, 0x6e, 0x65, 0x4d, 0x6f, 0x67, 0x61, 0x64, 0x69, 0x73, 0x6f, 0x55, -0x61, 0x67, 0x61, 0x64, 0x75, 0x67, 0xf9, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, -0x20, 0x53, 0x2e, 0x20, 0x54, 0x6f, 0x6d, 0x61, 0x7a, 0x6f, 0x54, 0xf9, -0x6e, 0x65, 0x7a, 0x69, 0x43, 0xf2, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x52, -0x69, 0x6f, 0x20, 0x47, 0xe0, 0x6c, 0x65, 0x67, 0x6f, 0x73, 0x42, 0x61, -0x69, 0x61, 0x20, 0x64, 0x65, 0x20, 0x42, 0x61, 0x6e, 0x64, 0x65, 0x72, -0x61, 0x73, 0x43, 0x61, 0x6e, 0x70, 0x6f, 0x20, 0x47, 0x72, 0x61, 0x6e, -0x64, 0x65, 0x43, 0x75, 0x69, 0x61, 0x62, 0xe0, 0x44, 0xe8, 0x6e, 0x76, -0x65, 0x72, 0x44, 0x6f, 0x6d, 0xe9, 0x6e, 0x65, 0x67, 0x61, 0x49, 0x6e, -0x64, 0x69, 0x61, 0x6e, 0xe0, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x4b, 0x6e, -0x6f, 0x78, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, -0x4d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x28, 0x49, 0x6e, 0x64, -0x69, 0x61, 0x6e, 0x61, 0x29, 0x50, 0x65, 0x74, 0x65, 0x72, 0x73, 0x62, -0x75, 0x72, 0x67, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, -0x29, 0x54, 0x65, 0x6c, 0x6c, 0x20, 0x43, 0x69, 0x74, 0x79, 0x20, 0x28, -0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x56, 0x65, 0x76, 0x61, +0x65, 0x65, 0x6b, 0x92e, 0x91c, 0x93c, 0x93e, 0x91f, 0x932, 0x93e, 0x928, 0x921, +0x92c, 0x908, 0x915, 0x93e, 0x92c, 0x932, 0x926, 0x916, 0x923, 0x940, 0x20, 0x91c, +0x949, 0x930, 0x94d, 0x91c, 0x93f, 0x92f, 0x93e, 0x90f, 0x92e, 0x94d, 0x938, 0x94d, +0x91f, 0x930, 0x921, 0x92e, 0x92a, 0x948, 0x930, 0x938, 0x915, 0x94d, 0x930, 0x93f, +0x938, 0x92e, 0x93f, 0x938, 0x915, 0x948, 0x902, 0x91f, 0x928, 0x92a, 0x93e, 0x917, +0x94b, 0x20, 0x917, 0x902, 0x917, 0x94b, 0x41, 0x6c, 0x6a, 0x65, 0x72, 0x69, +0x41, 0x7a, 0x6d, 0x61, 0x72, 0x61, 0x42, 0x61, 0x6e, 0x67, 0x68, 0xec, +0x42, 0x69, 0x73, 0xe0, 0x6f, 0x42, 0x75, 0x6a, 0x75, 0x6e, 0x62, 0x75, +0x72, 0x61, 0x43, 0x61, 0x7a, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x61, +0x4b, 0x61, 0x6e, 0x70, 0x61, 0x6c, 0x61, 0x4c, 0x75, 0x62, 0x75, 0x6e, +0x62, 0x61, 0x73, 0x68, 0x69, 0x4d, 0x61, 0x7a, 0x65, 0x72, 0x75, 0x4e, +0x62, 0x61, 0x62, 0x61, 0x6e, 0x65, 0x4d, 0x6f, 0x67, 0x61, 0x64, 0x69, +0x73, 0x6f, 0x55, 0x61, 0x67, 0x61, 0x64, 0x75, 0x67, 0xf9, 0xcc, 0x7a, +0x6f, 0x6c, 0x61, 0x20, 0x53, 0x2e, 0x20, 0x54, 0x6f, 0x6d, 0x61, 0x7a, +0x6f, 0x54, 0xf9, 0x6e, 0x65, 0x7a, 0x69, 0x43, 0xf2, 0x72, 0x64, 0x6f, +0x62, 0x61, 0x52, 0x69, 0x6f, 0x20, 0x47, 0xe0, 0x6c, 0x65, 0x67, 0x6f, +0x73, 0x42, 0x61, 0x69, 0x61, 0x20, 0x64, 0x65, 0x20, 0x42, 0x61, 0x6e, +0x64, 0x65, 0x72, 0x61, 0x73, 0x43, 0x61, 0x6e, 0x70, 0x6f, 0x20, 0x47, +0x72, 0x61, 0x6e, 0x64, 0x65, 0x43, 0x75, 0x69, 0x61, 0x62, 0xe0, 0x44, +0xe8, 0x6e, 0x76, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0xe9, 0x6e, 0x65, 0x67, +0x61, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0xe0, 0x70, 0x6f, 0x6c, 0x69, +0x73, 0x4b, 0x6e, 0x6f, 0x78, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, +0x6e, 0x61, 0x29, 0x4d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x28, +0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x50, 0x65, 0x74, 0x65, +0x72, 0x73, 0x62, 0x75, 0x72, 0x67, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, +0x61, 0x6e, 0x61, 0x29, 0x54, 0x65, 0x6c, 0x6c, 0x20, 0x43, 0x69, 0x74, 0x79, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x56, -0x69, 0x6e, 0x63, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x20, 0x28, 0x49, 0x6e, -0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x57, 0x69, 0x6e, 0x61, 0x6d, 0x61, -0x63, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x4a, -0x61, 0x6d, 0xe0, 0x65, 0x67, 0x61, 0x4d, 0x6f, 0x6e, 0x74, 0x69, 0x63, -0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x28, 0x4b, 0x65, 0x6e, 0x74, 0x75, 0x63, -0x6b, 0x79, 0x29, 0x4c, 0x6f, 0x73, 0x20, 0xc0, 0x6e, 0x67, 0x65, 0x6c, -0x65, 0x73, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x69, 0x67, 0x61, 0x53, -0x69, 0x74, 0xe0, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20, 0x4d, 0xe8, 0x73, -0x65, 0x67, 0x6f, 0x4d, 0x69, 0x63, 0x68, 0x65, 0x6c, 0x6f, 0x6e, 0x42, -0x65, 0x75, 0x6c, 0x61, 0x68, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, -0x44, 0x61, 0x6b, 0x6f, 0x74, 0x61, 0x29, 0x43, 0x65, 0x6e, 0x74, 0x65, -0x72, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44, 0x61, 0x6b, 0x6f, -0x74, 0x61, 0x29, 0x4e, 0x65, 0x77, 0x20, 0x53, 0x61, 0x6c, 0x65, 0x6d, -0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44, 0x61, 0x6b, 0x6f, 0x74, -0x61, 0x29, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x50, 0x72, 0xec, 0x6e, -0x73, 0x69, 0x70, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x64, 0x65, -0x20, 0x53, 0x70, 0x61, 0x67, 0x6e, 0x61, 0x53, 0x61, 0x6e, 0x20, 0x50, -0x6f, 0x6c, 0x6f, 0x53, 0x2e, 0x20, 0x42, 0x61, 0x72, 0x74, 0x6f, 0x6c, -0x6f, 0x6d, 0xe8, 0x6f, 0x53, 0x2e, 0x20, 0x4a, 0x6f, 0x61, 0x6e, 0x69, -0x53, 0x2e, 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x66, 0x65, 0x72, -0x53, 0x2e, 0x20, 0x4c, 0x75, 0x73, 0xec, 0x61, 0x53, 0x2e, 0x20, 0x56, -0x69, 0x6e, 0x63, 0x65, 0x6e, 0x73, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, -0x20, 0x4d, 0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69, 0x65, 0x41, 0x6e, -0xe0, 0x64, 0x79, 0x72, 0x41, 0x6b, 0x74, 0xe0, 0x75, 0x41, 0x7a, 0x67, -0x61, 0x62, 0x61, 0x64, 0x41, 0x74, 0x79, 0x72, 0xe0, 0x75, 0x43, 0x6f, -0x6c, 0x6f, 0x6e, 0x62, 0x6f, 0x44, 0x75, 0x62, 0xe0, 0x69, 0x44, 0x75, -0x73, 0x61, 0x6e, 0x62, 0xe9, 0x4b, 0x61, 0x74, 0x6d, 0x61, 0x6e, 0x64, -0xf9, 0x48, 0xe0, 0x6e, 0x64, 0x69, 0x67, 0x61, 0x4b, 0x72, 0x61, 0x7a, -0x6e, 0x61, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x4b, 0x75, 0x61, 0x6c, 0x61, -0x20, 0x4c, 0x75, 0x6e, 0x70, 0x75, 0x72, 0x4d, 0x61, 0x63, 0xe0, 0x6f, -0x4e, 0x6f, 0x76, 0x6f, 0x6b, 0x75, 0x7a, 0x6e, 0x69, 0x65, 0x74, 0x73, -0x6b, 0x4b, 0x6f, 0x73, 0x74, 0x61, 0x6e, 0xe0, 0x69, 0x53, 0x68, 0x61, -0x6e, 0x67, 0x68, 0xe0, 0x69, 0x5a, 0x72, 0xe9, 0x64, 0x6e, 0x65, 0x6b, -0x6f, 0x6c, 0x69, 0x6d, 0x73, 0x6b, 0x54, 0x69, 0x6e, 0x70, 0x75, 0x55, -0x6c, 0x61, 0x6e, 0x20, 0x42, 0xe0, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x74, -0x2d, 0x47, 0x6e, 0x65, 0x72, 0x61, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x65, -0x72, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4a, 0xe8, 0x72, 0x65, -0x76, 0x61, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x41, 0x7a, 0x6f, -0x72, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x61, 0x6e, 0x61, -0x72, 0x69, 0x65, 0x43, 0x61, 0x6f, 0x20, 0x56, 0x65, 0x72, 0x64, 0x6f, -0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x46, 0xe0, 0x72, 0x6f, 0x65, 0xcc, -0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4d, 0x61, 0x64, 0xe8, 0x69, 0x72, 0x61, -0x52, 0x65, 0x6b, 0x69, 0x61, 0x76, 0x69, 0x6b, 0x47, 0x65, 0x6f, 0x72, -0x67, 0x69, 0x61, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20, 0x73, 0x75, 0x64, -0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x2e, 0x20, 0x45, 0x6c, 0x65, -0x6e, 0x61, 0x41, 0x64, 0x65, 0x6c, 0xe0, 0x69, 0x64, 0x65, 0x42, 0x72, -0x69, 0x7a, 0x62, 0x61, 0x6e, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, -0x4c, 0x6f, 0x72, 0x64, 0x20, 0x48, 0x6f, 0x77, 0x65, 0xc0, 0x6d, 0x73, -0x74, 0x65, 0x72, 0x64, 0x61, 0x6d, 0x42, 0x72, 0x61, 0x74, 0x69, 0x7a, -0x6c, 0x61, 0x76, 0x61, 0x4a, 0x69, 0x62, 0x69, 0x6c, 0x74, 0x65, 0x72, -0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x4d, 0x61, -0x6e, 0x4c, 0x75, 0x62, 0x6c, 0x69, 0x61, 0x6e, 0x61, 0x4c, 0x75, 0x73, -0x65, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4f, 0x7a, 0x6c, 0x6f, 0x50, -0x61, 0x72, 0x69, 0x6a, 0x69, 0x53, 0x69, 0x6e, 0x66, 0x65, 0x72, 0xf2, -0x70, 0x6f, 0x6c, 0x69, 0x53, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x6d, 0x61, -0x55, 0x6c, 0x69, 0xe0, 0x6e, 0x6f, 0x73, 0x6b, 0x56, 0x61, 0x74, 0x65, -0x67, 0x61, 0x6e, 0x43, 0x69, 0x61, 0x67, 0x6f, 0x73, 0xcc, 0x7a, 0x6f, -0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x4e, 0x61, 0x64, 0x61, 0x6c, 0x65, -0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x63, 0x6f, 0x73, 0xcc, -0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x6f, 0x72, 0x65, 0xcc, -0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x65, -0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x73, -0x69, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x69, 0x6f, -0x74, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x52, 0x65, 0x75, 0x6e, -0x69, 0x6f, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x42, 0x6f, 0x75, -0x67, 0x61, 0x69, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0xcc, 0x7a, 0x6f, -0x6c, 0x65, 0x20, 0x43, 0x69, 0x61, 0x74, 0x65, 0x6d, 0xcc, 0x7a, 0x6f, -0x6c, 0x65, 0x20, 0x43, 0x68, 0x75, 0x75, 0x6b, 0xcc, 0x7a, 0x6f, 0x6c, -0x61, 0x20, 0x64, 0x65, 0x20, 0x50, 0x61, 0x73, 0x63, 0x75, 0x61, 0xcc, -0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x45, 0x66, 0x61, 0x74, 0x65, 0x41, 0x74, -0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x61, 0x6b, 0x61, 0x6f, 0x66, 0x6f, 0x41, -0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x75, 0x6e, 0x61, 0x66, 0x75, 0x74, -0x69, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x47, 0x61, 0x6d, 0x62, 0x69, -0x65, 0x72, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x47, 0x75, 0x61, 0x64, -0x61, 0x6c, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x41, 0x74, 0x6f, 0x6c, 0x6f, -0x20, 0x43, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x41, 0x74, 0x6f, 0x6c, 0x6f, -0x20, 0x4b, 0x69, 0x72, 0x69, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x69, 0xcc, -0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4b, 0x6f, 0x73, 0x72, 0x61, 0x65, 0x41, -0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x4b, 0x77, 0x61, 0x6a, 0x61, 0x6c, 0x65, -0x69, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x72, 0x63, -0x68, 0x65, 0x7a, 0x69, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x4d, 0x69, -0x64, 0x77, 0x61, 0x79, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x61, -0x75, 0x72, 0x75, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x69, 0x75, -0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x6f, 0x72, 0x66, 0x6f, -0x6c, 0x6b, 0x50, 0x61, 0x6c, 0xe0, 0x75, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, -0x20, 0x50, 0x69, 0x74, 0x63, 0x61, 0x69, 0x72, 0x6e, 0xcc, 0x7a, 0x6f, -0x6c, 0x61, 0x20, 0x50, 0x6f, 0x6e, 0x70, 0xe8, 0x69, 0x50, 0x6f, 0x72, -0x74, 0x6f, 0x20, 0x4d, 0x6f, 0x72, 0x65, 0x73, 0x62, 0x79, 0xcc, 0x7a, -0x6f, 0x6c, 0x61, 0x20, 0x52, 0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x67, -0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x61, 0x69, 0x70, 0xe0, -0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x61, 0x69, 0x74, 0x69, -0x41, 0x74, 0x6f, 0x6c, 0x6c, 0x6f, 0x20, 0x54, 0x61, 0x72, 0x61, 0x77, -0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x6f, 0x6e, 0x67, 0x61, -0x74, 0x61, 0x70, 0x75, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x57, 0x61, -0x6b, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x57, 0x61, 0x6c, 0x6c, -0x69, 0x73, 0x61, 0x62, 0x69, 0x64, 0x6a, 0x61, 0x6e, 0x65, 0x63, 0x72, -0x61, 0x61, 0x1e0d, 0x69, 0x73, 0x20, 0x61, 0x62, 0x61, 0x62, 0x61, 0x61, -0x6c, 0x6a, 0x12b, 0x79, 0x72, 0x73, 0x61, 0x73, 0x6d, 0x61, 0x72, 0x61, -0x62, 0x61, 0x6d, 0x61, 0x6b, 0x6f, 0x62, 0x61, 0x6e, 0x67, 0x75, 0x69, -0x62, 0x61, 0x6e, 0x6a, 0x75, 0x6c, 0x62, 0x69, 0x73, 0x73, 0x61, 0x75, -0x62, 0x6c, 0x61, 0x6e, 0x1e6d, 0x61, 0x65, 0x72, 0x62, 0x72, 0x61, 0x6a, -0x61, 0x76, 0x69, 0x6c, 0x6c, 0x62, 0x75, 0x6a, 0x75, 0x6d, 0x62, 0x75, -0x72, 0x61, 0x6b, 0x61, 0x69, 0x72, 0x6f, 0x6b, 0x61, 0x73, 0x61, 0x62, -0x6c, 0x61, 0x6e, 0x6b, 0x61, 0x73, 0x65, 0x75, 0x1e6d, 0x61, 0x6b, 0x6f, -0x6e, 0x61, 0x6b, 0x72, 0x12b, 0x1e0d, 0x6b, 0x61, 0x72, 0x64, 0x61, 0x72, -0x20, 0x65, 0x73, 0x20, 0x73, 0x61, 0x6c, 0x61, 0x61, 0x6d, 0x64, 0x75, -0x61, 0x6c, 0x61, 0x65, 0x6c, 0x20, 0x61, 0x61, 0x69, 0x79, 0x75, 0x6e, -0x70, 0x72, 0x12b, 0x1e6d, 0x61, 0x75, 0x6e, 0x67, 0x61, 0x62, 0x6f, 0x72, -0x6f, 0x6e, 0x68, 0x72, 0x61, 0x72, 0x65, 0x6a, 0x6f, 0x68, 0x61, 0x6e, -0x6e, 0x65, 0x73, 0x62, 0x75, 0x72, 0x67, 0x6a, 0x75, 0x62, 0x61, 0x6b, -0x6d, 0x70, 0x61, 0x6c, 0x61, 0x6b, 0x61, 0x72, 0x1e6d, 0x6f, 0x75, 0x6d, -0x6b, 0x69, 0x67, 0x61, 0x6c, 0x69, 0x6b, 0x69, 0x6e, 0x73, 0x61, 0x73, -0x61, 0x6c, 0x61, 0x67, 0x6f, 0x73, 0x6c, 0x69, 0x62, 0x72, 0x65, 0x76, -0x69, 0x6c, 0x6c, 0x6c, 0x75, 0x61, 0x6e, 0x1e0d, 0x61, 0x6c, 0x75, 0x62, -0x75, 0x6d, 0x62, 0x61, 0x73, 0x69, 0x6c, 0x75, 0x73, 0x61, 0x6b, 0x61, -0x6d, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x6d, 0x61, 0x70, 0x75, 0x1e6d, 0x75, -0x6d, 0x61, 0x73, 0x65, 0x72, 0x75, 0x6d, 0x62, 0x61, 0x62, 0x61, 0x6e, -0x65, 0x6d, 0x6f, 0x67, 0x61, 0x1e0d, 0x69, 0x73, 0x75, 0x6d, 0x6f, 0x6e, -0x72, 0x6f, 0x76, 0x69, 0x61, 0x6e, 0x61, 0x69, 0x72, 0x6f, 0x62, 0x69, -0x6e, 0x6a, 0x61, 0x6d, 0x65, 0x6e, 0x61, 0x6e, 0x69, 0x79, 0x61, 0x6d, -0x65, 0x6e, 0x75, 0x65, 0x6b, 0x73, 0x61, 0x76, 0x61, 0x67, 0x64, 0x75, -0x67, 0x75, 0x70, 0x6f, 0x72, 0x1e6d, 0x6f, 0x2d, 0x1e47, 0x6f, 0x76, 0x6f, -0x73, 0x61, 0x6f, 0x20, 0x1e6d, 0x6f, 0x6d, 0x74, 0x72, 0x69, 0x70, 0x6f, -0x6c, 0x69, 0x1e6d, 0x75, 0x6e, 0x69, 0x73, 0x76, 0x69, 0x6e, 0x64, 0x68, -0x75, 0x6b, 0x61, 0x1e0d, 0x61, 0x6b, 0x61, 0x6e, 0x6b, 0x6f, 0x72, 0x61, -0x6a, 0x65, 0x6e, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x61, 0x65, 0x6e, 0x1e6d, -0x69, 0x67, 0x75, 0x61, 0x61, 0x72, 0x61, 0x67, 0x76, 0x61, 0x69, 0x6e, -0x61, 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x75, 0x73, 0x20, 0x61, 0x69, 0x72, -0x65, 0x73, 0x6b, 0x61, 0x74, 0x61, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x6b, -0x6f, 0x72, 0x1e0d, 0x61, 0x62, 0x61, 0x68, 0x75, 0x68, 0x75, 0x65, 0x6c, -0x61, 0x20, 0x72, 0x69, 0x6f, 0x6a, 0x61, 0x6d, 0x65, 0x6e, 0x1e0d, 0x6f, -0x6a, 0x61, 0x72, 0x69, 0x79, 0x6f, 0x20, 0x67, 0x61, 0x6c, 0x6c, 0x65, -0x67, 0x6f, 0x73, 0x73, 0x61, 0x6c, 0x1e6d, 0x61, 0x73, 0x61, 0x6e, 0x20, -0x68, 0x75, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x20, 0x6c, 0x75, 0x69, 0x73, -0x1e6d, 0x75, 0x6b, 0x16b, 0x6d, 0x6e, 0x75, 0x73, 0x76, 0x61, 0x69, 0x79, -0x61, 0x61, 0x72, 0x75, 0x62, 0x61, 0x65, 0x73, 0x75, 0x6e, 0x73, 0x69, -0x6f, 0x6e, 0x65, 0x1e6d, 0x69, 0x6b, 0x6f, 0x6b, 0x65, 0x6e, 0x62, 0x61, -0x68, 0x69, 0x61, 0x62, 0x61, 0x69, 0x61, 0x20, 0x62, 0x61, 0x6e, 0x1e0d, -0x65, 0x72, 0x61, 0x73, 0x62, 0x61, 0x72, 0x62, 0x61, 0x1e0d, 0x6f, 0x73, -0x62, 0x65, 0x6c, 0x65, 0x6d, 0x62, 0x65, 0x6c, 0x69, 0x6a, 0x62, 0x6c, -0x61, 0x6e, 0x6b, 0x2d, 0x73, 0x61, 0x62, 0x6c, 0x6f, 0x6e, 0x62, 0x6f, -0x61, 0x20, 0x76, 0x69, 0x73, 0x74, 0x61, 0x62, 0x6f, 0x67, 0x6f, 0x1e6d, -0x61, 0x62, 0x6f, 0x69, 0x73, 0x12b, 0x6b, 0x65, 0x6d, 0x62, 0x72, 0x69, -0x6a, 0x20, 0x62, 0x65, 0x6b, 0x61, 0x6d, 0x70, 0x6f, 0x20, 0x67, 0x72, -0x61, 0x6e, 0x1e0d, 0x65, 0x6b, 0x61, 0x6e, 0x6b, 0x75, 0x6e, 0x6b, 0x61, -0x72, 0x61, 0x6b, 0x61, 0x73, 0x6b, 0x65, 0x79, 0x65, 0x6e, 0x6b, 0x65, -0x69, 0x6d, 0x61, 0x6e, 0x63, 0x69, 0x6b, 0x61, 0x67, 0x6f, 0x63, 0x68, -0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61, 0x6b, 0x6f, 0x73, 0x1e6d, 0x61, -0x20, 0x72, 0x69, 0x6b, 0x61, 0x6b, 0x72, 0x65, 0x73, 0x1e6d, 0x6f, 0x6e, -0x6b, 0x75, 0x61, 0x61, 0x62, 0x61, 0x6b, 0x79, 0x75, 0x72, 0x61, 0x73, -0x6f, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x61, 0x76, 0x6e, -0x1e0d, 0x61, 0x6f, 0x73, 0x6e, 0x1e0d, 0x61, 0x6f, 0x73, 0x6f, 0x6e, 0x20, -0x6b, 0x72, 0x12b, 0x6b, 0x1e0d, 0x65, 0x6e, 0x76, 0x65, 0x72, 0x1e0d, 0x65, -0x1e6d, 0x72, 0x6f, 0x69, 0x1e6d, 0x1e0d, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x6b, -0x61, 0x65, 0x1e0d, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x6e, 0x65, 0x69, 0x72, -0x75, 0x6e, 0x65, 0x70, 0x65, 0x65, 0x6c, 0x20, 0x73, 0x61, 0x6c, 0x76, -0x61, 0x1e0d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x65, -0x6c, 0x73, 0x6e, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x6a, 0x61, -0x67, 0x6c, 0x61, 0x73, 0x20, 0x62, 0x61, 0x79, 0x67, 0x6f, 0x6f, 0x73, -0x20, 0x62, 0x65, 0x67, 0x72, 0x61, 0x6e, 0x1e0d, 0x20, 0x1e6d, 0x75, 0x72, -0x6b, 0x67, 0x72, 0x65, 0x6e, 0x61, 0x1e0d, 0x61, 0x67, 0x75, 0x61, 0x1e0d, -0x65, 0x6c, 0x6f, 0x75, 0x70, 0x65, 0x67, 0x75, 0x61, 0x74, 0x65, 0x6d, -0x61, 0x6c, 0x61, 0x67, 0x75, 0x61, 0x6a, 0x61, 0x6b, 0x69, 0x6c, 0x67, -0x75, 0x79, 0x61, 0x6e, 0x61, 0x68, 0x65, 0x6c, 0x69, 0x70, 0x61, 0x6b, -0x73, 0x68, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x69, 0x6e, 0x1e0d, 0x69, 0x61, -0x6e, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x6e, 0x6f, 0x6b, 0x73, 0x2c, -0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x72, -0x65, 0x6e, 0x67, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, -0x6e, 0x61, 0x70, 0x69, 0x1e6d, 0x74, 0x72, 0x73, 0x62, 0x65, 0x72, 0x67, -0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x1e6d, 0x65, -0x6c, 0x6c, 0x20, 0x73, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, -0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69, 0x76, 0x69, 0x2c, 0x20, 0x69, -0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69, 0x6e, 0x63, 0x65, -0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, -0x76, 0x69, 0x6e, 0x61, 0x6d, 0x61, 0x6b, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, -0x69, 0x79, 0x61, 0x6e, 0x61, 0x69, 0x6e, 0x16b, 0x76, 0x69, 0x6b, 0x69, -0x6b, 0x61, 0x6c, 0x75, 0x69, 0x1e6d, 0x6a, 0x61, 0x6d, 0x61, 0x69, 0x6b, -0x61, 0x6a, 0x75, 0x6e, 0x6f, 0x76, 0x6c, 0x6f, 0x75, 0x69, 0x76, 0x69, -0x6c, 0x6c, 0x65, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x69, 0x73, 0x65, 0x6c, 0x6c, -0x6f, 0x2c, 0x20, 0x6b, 0x65, 0x6e, 0x1e6d, 0x75, 0x6b, 0x12b, 0x6b, 0x72, -0x65, 0x6c, 0x65, 0x6e, 0x1e0d, 0x65, 0x69, 0x6b, 0x6c, 0x61, 0x20, 0x70, -0x61, 0x6a, 0x6c, 0x6f, 0x73, 0x20, 0x61, 0x6e, 0x6a, 0x65, 0x6c, 0x65, -0x73, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, -0x2019, 0x73, 0x20, 0x6b, 0x75, 0x76, 0x61, 0x1e6d, 0x61, 0x72, 0x6d, 0x61, -0x73, 0x12b, 0x6f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x75, 0x61, 0x6d, 0x61, -0x6e, 0x61, 0x75, 0x73, 0x6d, 0x61, 0x72, 0x69, 0x67, 0x6f, 0x1e6d, 0x6d, -0x61, 0x72, 0x1e6d, 0x69, 0x6e, 0x69, 0x6b, 0x6d, 0x61, 0x1e6d, 0x61, 0x6d, -0x6f, 0x72, 0x6f, 0x73, 0x6d, 0x61, 0x73, 0x61, 0x1e6d, 0x6c, 0x61, 0x6e, -0x6d, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x12b, 0x6d, 0x65, 0x72, 0x69, -0x1e0d, 0x61, 0x6d, 0x65, 0x1e6d, 0x6c, 0x61, 0x6b, 0x61, 0x1e6d, 0x6c, 0x61, -0x6d, 0x65, 0x6b, 0x73, 0x69, 0x63, 0x6f, 0x20, 0x73, 0x69, 0x1e6d, 0x79, -0x6d, 0x69, 0x6b, 0x76, 0x69, 0x6c, 0xf5, 0x6d, 0x6f, 0x6e, 0x6b, 0x1e6d, -0x6f, 0x6e, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x65, 0x72, 0x72, 0x65, 0x6d, 0x6f, -0x6e, 0x1e6d, 0x65, 0x76, 0x69, 0x64, 0x69, 0x6f, 0x6d, 0x6f, 0x6e, 0x1e6d, -0x73, 0x65, 0x72, 0x72, 0x65, 0x1e6d, 0x6e, 0x61, 0x73, 0x61, 0x75, 0x6e, -0x69, 0x79, 0x75, 0x20, 0x79, 0x6f, 0x72, 0x6b, 0x6e, 0x6f, 0x72, 0x6f, -0x6e, 0x68, 0x61, 0x62, 0x69, 0x79, 0x75, 0x6c, 0x61, 0x2c, 0x20, 0x75, -0x74, 0x74, 0x61, 0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6d, -0x61, 0x1e0d, 0x69, 0x6e, 0x12b, 0x20, 0x75, 0x74, 0x74, 0x61, 0x72, 0x20, -0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x65, 0x75, 0x20, 0x73, 0x61, -0x6c, 0x65, 0x6d, 0x2c, 0x20, 0x75, 0x74, 0x74, 0x61, 0x72, 0x20, 0x1e0d, -0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x16b, 0x6b, 0x6f, 0x6a, 0x69, 0x6e, -0x61, 0x67, 0x61, 0x70, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x70, 0x61, 0x72, -0x61, 0x6d, 0x61, 0x72, 0x69, 0x62, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x6b, -0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x61, 0x75, 0x2d, 0x70, 0x72, 0x69, -0x6e, 0x73, 0x65, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x61, 0x70, 0x20, 0x73, -0x70, 0x61, 0x69, 0x6e, 0x70, 0x6f, 0x72, 0x1e6d, 0x70, 0x20, 0x76, 0x65, -0x6c, 0x68, 0x6f, 0x70, 0x75, 0x65, 0x72, 0x74, 0x6f, 0x20, 0x72, 0x69, -0x6b, 0x6f, 0x70, 0x75, 0x1e47, 0x1e6d, 0x61, 0x20, 0x65, 0x72, 0x65, 0x6e, -0x61, 0x73, 0x72, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x6c, -0x65, 0x64, 0x1e6d, 0x72, 0x65, 0x73, 0x69, 0x70, 0x69, 0x72, 0x65, 0x6a, -0x69, 0x6e, 0x61, 0x72, 0x65, 0x6a, 0x61, 0x6c, 0x79, 0x75, 0x1e6d, 0x72, -0x69, 0x6f, 0x20, 0x62, 0x72, 0x61, 0x6e, 0x6b, 0x6f, 0x73, 0x61, 0x74, -0x61, 0x72, 0x69, 0x73, 0x61, 0x6e, 0x1e6d, 0x69, 0x61, 0x67, 0x6f, 0x73, -0x65, 0x6e, 0x74, 0x6f, 0x20, 0x1e0d, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, -0x73, 0x61, 0x6f, 0x20, 0x70, 0x61, 0x75, 0x6c, 0x6f, 0x69, 0x1e6d, 0x6f, -0x6b, 0x6f, 0x1e6d, 0x6f, 0x72, 0x6d, 0x69, 0x1e6d, 0x73, 0x69, 0x74, 0x6b, -0x61, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x62, 0x61, 0x72, 0x74, 0x65, 0x6c, -0x65, 0x6d, 0x69, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x6a, 0x6f, 0x6e, 0x73, -0x73, 0x65, 0x6e, 0x74, 0x20, 0x6b, 0x69, 0x1e6d, 0x1e6d, 0x73, 0x73, 0x65, -0x6e, 0x74, 0x20, 0x6c, 0x75, 0x73, 0x69, 0x61, 0x73, 0x65, 0x6e, 0x1e6d, -0x20, 0x74, 0x6f, 0x6d, 0x61, 0x73, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x76, -0x69, 0x6e, 0x73, 0x65, 0x6e, 0x1e6d, 0x73, 0x76, 0x69, 0x70, 0x1e6d, 0x20, -0x6b, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x1e6d, 0x74, 0x65, 0x67, 0x75, 0x74, -0x75, 0x6c, 0x65, 0x74, 0x69, 0x68, 0x76, 0x61, 0x6e, 0x61, 0x1e6d, 0x6f, -0x72, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x1e6d, 0x6f, 0x72, 0x1e6d, 0x6f, 0x6c, 0x61, -0x76, 0x61, 0x6e, 0x6b, 0x16b, 0x76, 0x65, 0x72, 0x76, 0x68, 0x61, 0x69, -0x1e6d, 0x68, 0x6f, 0x72, 0x73, 0x76, 0x69, 0x6e, 0x6e, 0x69, 0x70, 0x65, -0x67, 0x79, 0x61, 0x6b, 0x75, 0x1e6d, 0x61, 0x1e6d, 0x6b, 0x65, 0x73, 0x65, -0x65, 0x1e0d, 0x65, 0x76, 0x69, 0x73, 0x1e0d, 0x79, 0x75, 0x6d, 0x6f, 0x6e, -0x74, 0x20, 0x64, 0x65, 0x20, 0x75, 0x72, 0x76, 0x69, 0x6c, 0x6c, 0x6d, -0x65, 0x6b, 0x76, 0x61, 0x72, 0x69, 0x6d, 0x61, 0x76, 0x73, 0x6f, 0x6e, -0x6d, 0x65, 0x6b, 0x20, 0x6d, 0x75, 0x72, 0x1e0d, 0x6f, 0x70, 0x61, 0x6c, -0x6d, 0x65, 0x72, 0x72, 0x6f, 0x74, 0x65, 0x72, 0x61, 0x73, 0x79, 0x6f, -0x76, 0x61, 0x1e6d, 0x72, 0x6f, 0x6c, 0x6c, 0x76, 0x6f, 0x73, 0x1e6d, 0x6f, -0x6b, 0x6c, 0x6e, 0x67, 0x79, 0x61, 0x72, 0x62, 0x79, 0x65, 0x6e, 0x65, -0x1e0d, 0x65, 0x6e, 0x61, 0x6c, 0x6d, 0x61, 0x1e6d, 0x79, 0x61, 0x6d, 0x6d, -0x61, 0x6e, 0x61, 0x6e, 0x61, 0x1e0d, 0x69, 0x72, 0x61, 0x6b, 0x74, 0x61, -0x75, 0x61, 0x61, 0x6b, 0x74, 0x6f, 0x62, 0x65, 0x61, 0x73, 0x67, 0x61, -0x62, 0x61, 0x1e6d, 0x61, 0x74, 0x61, 0x72, 0x61, 0x75, 0x62, 0x61, 0x67, -0x64, 0x61, 0x64, 0x62, 0x61, 0x68, 0x72, 0x61, 0x69, 0x6e, 0x62, 0x61, -0x6b, 0x75, 0x62, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b, 0x62, 0x61, 0x72, -0x6e, 0x61, 0x75, 0x6c, 0x62, 0x65, 0x69, 0x72, 0x75, 0x74, 0x62, 0x69, -0x73, 0x6b, 0x65, 0x6b, 0x62, 0x72, 0x75, 0x6e, 0x65, 0x69, 0x63, 0x69, -0x74, 0x61, 0x6b, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x6f, 0x1e0d, 0x61, 0x6d, -0x61, 0x73, 0x6b, 0x75, 0x73, 0x1e0d, 0x69, 0x6c, 0x69, 0x64, 0x75, 0x62, -0x61, 0x69, 0x64, 0x75, 0x73, 0x61, 0x6d, 0x62, 0x65, 0x70, 0x61, 0x6d, -0x61, 0x67, 0x75, 0x73, 0x74, 0x61, 0x67, 0x61, 0x6a, 0x61, 0x68, 0x65, -0x62, 0x72, 0x6f, 0x6e, 0x68, 0x6f, 0x20, 0x63, 0x69, 0x20, 0x6d, 0x69, -0x6e, 0x68, 0x20, 0x73, 0x69, 0x74, 0x69, 0x68, 0x6f, 0x6e, 0x67, 0x20, -0x6b, 0x6f, 0x6e, 0x67, 0x69, 0x72, 0x6b, 0x75, 0x1e6d, 0x73, 0x6b, 0x6a, -0x61, 0x79, 0x61, 0x70, 0x75, 0x72, 0x61, 0x6a, 0x65, 0x72, 0x75, 0x73, -0x61, 0x6c, 0x65, 0x6d, 0x6b, 0x61, 0x62, 0x75, 0x6c, 0x6b, 0x61, 0x6d, -0x63, 0x61, 0x1e6d, 0x6b, 0x61, 0x6b, 0x61, 0x72, 0x61, 0x63, 0x12b, 0x6b, -0x61, 0x1e6d, 0x6d, 0x61, 0x6e, 0x1e0d, 0x75, 0x6b, 0x61, 0x6e, 0x64, 0x69, -0x67, 0x61, 0x6b, 0x6f, 0x6c, 0x6b, 0x61, 0x74, 0x61, 0x6b, 0x72, 0x61, -0x73, 0x6e, 0x65, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x6b, 0x75, 0x61, 0x6c, -0x61, 0x20, 0x6c, 0x75, 0x6d, 0x70, 0x75, 0x72, 0x6b, 0x75, 0x63, 0x69, -0x6e, 0x67, 0x6b, 0x75, 0x76, 0x61, 0x69, 0x74, 0x6d, 0x6b, 0x61, 0x6f, -0x6d, 0x65, 0x67, 0x61, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61, 0x6b, 0x61, 0x73, -0x61, 0x72, 0x6d, 0x61, 0x6e, 0x12b, 0x6c, 0x61, 0x6d, 0x61, 0x73, 0x6b, -0x61, 0x74, 0x6e, 0x69, 0x6b, 0x6f, 0x73, 0x69, 0x79, 0x61, 0x6e, 0x65, -0x76, 0x6f, 0x6b, 0x75, 0x6a, 0x6e, 0x65, 0x1e6d, 0x73, 0x6b, 0x6e, 0x6f, -0x76, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x72, 0x73, 0x6b, 0x70, 0x6e, 0x6f, -0x6d, 0x20, 0x70, 0x65, 0x6e, 0x68, 0x70, 0x6f, 0x6e, 0x1e6d, 0x69, 0x61, -0x6e, 0x61, 0x6b, 0x70, 0x79, 0x6f, 0x6e, 0x67, 0x79, 0x61, 0x6e, 0x67, -0x6b, 0x6f, 0x73, 0x1e6d, 0x61, 0x6e, 0x65, 0x6b, 0x69, 0x6a, 0x75, 0x6f, -0x72, 0x64, 0x61, 0x72, 0x69, 0x79, 0x61, 0x64, 0x73, 0x61, 0x68, 0x61, -0x6c, 0x69, 0x6e, 0x73, 0x61, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x6e, 0x64, -0x73, 0x65, 0x6f, 0x6c, 0x73, 0x65, 0x6e, 0x67, 0x61, 0x69, 0x73, 0x69, -0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x73, 0x72, 0x65, 0x1e0d, 0x6e, 0x65, -0x6b, 0x6f, 0x6c, 0x79, 0x6d, 0x73, 0x6b, 0x74, 0x61, 0x69, 0x70, 0x65, -0x69, 0x74, 0x61, 0x73, 0x6b, 0x65, 0x6e, 0x1e6d, 0x74, 0x62, 0x69, 0x6c, -0x69, 0x73, 0x69, 0x74, 0x65, 0x68, 0x72, 0x61, 0x6e, 0x74, 0x69, 0x6d, -0x70, 0x68, 0x75, 0x1e6d, 0x6f, 0x6b, 0x79, 0x6f, 0x1e6d, 0x6f, 0x6d, 0x73, -0x6b, 0x75, 0x6c, 0x61, 0x6e, 0x62, 0x61, 0x1e6d, 0x61, 0x72, 0x75, 0x72, -0x75, 0x6d, 0x63, 0x69, 0x79, 0x75, 0x73, 0x74, 0x2d, 0x6e, 0x65, 0x72, -0x61, 0x76, 0x69, 0x65, 0x6e, 0x1e6d, 0x69, 0x61, 0x61, 0x6e, 0x76, 0x6c, -0x61, 0x1e0d, 0x69, 0x76, 0x6f, 0x73, 0x1e6d, 0x6f, 0x6b, 0x79, 0x61, 0x6b, -0x75, 0x1e6d, 0x73, 0x6b, 0x79, 0x61, 0x6e, 0x67, 0x6f, 0x6e, 0x79, 0x69, -0x6b, 0x61, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x79, -0x65, 0x72, 0x65, 0x76, 0x61, 0x6e, 0x61, 0x6a, 0x6f, 0x72, 0x65, 0x73, -0x62, 0x65, 0x72, 0x6d, 0x16b, 0x64, 0x61, 0x6b, 0x65, 0x6e, 0x65, 0x72, -0x69, 0x6b, 0x65, 0x70, 0x20, 0x76, 0x65, 0x72, 0x1e0d, 0x65, 0x70, 0x65, -0x72, 0x6f, 0x6d, 0x61, 0x1e0d, 0x69, 0x65, 0x72, 0x61, 0x72, 0x65, 0x79, -0x6b, 0x79, 0x61, 0x76, 0x69, 0x6b, 0x64, 0x6b, 0x69, 0x1e47, 0x20, 0x6a, -0x6f, 0x72, 0x6a, 0x69, 0x61, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x65, -0x6c, 0x65, 0x6e, 0x61, 0x73, 0x1e6d, 0x61, 0x6e, 0x6c, 0x69, 0x61, 0x65, -0x64, 0x69, 0x6c, 0x65, 0x69, 0x64, 0x62, 0x72, 0x69, 0x73, 0x62, 0x61, -0x6e, 0x65, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x68, 0x69, 0x6c, -0x6c, 0x1e0d, 0x61, 0x72, 0x76, 0x69, 0x6e, 0x79, 0x75, 0x6b, 0x6c, 0x61, -0x68, 0x6f, 0x62, 0x61, 0x72, 0x1e6d, 0x6c, 0x69, 0x6e, 0x1e0d, 0x65, 0x72, -0x6d, 0x61, 0x6e, 0x6c, 0x6f, 0x72, 0x1e0d, 0x20, 0x68, 0x6f, 0x76, 0x65, -0x6d, 0x65, 0x6c, 0x62, 0x6f, 0x72, 0x6e, 0x65, 0x70, 0x65, 0x72, 0x74, -0x73, 0x79, 0x1e0d, 0x6e, 0x12b, 0x61, 0x6d, 0x73, 0x1e6d, 0x65, 0x72, 0x1e0d, -0x61, 0x6d, 0x61, 0x61, 0x1e47, 0x1e0d, 0x6f, 0x72, 0x61, 0x61, 0x61, 0x73, -0x1e6d, 0x72, 0x61, 0x68, 0x61, 0x6e, 0x65, 0x74, 0x65, 0x6e, 0x73, 0x62, -0x65, 0x6c, 0x67, 0x72, 0x61, 0x1e0d, 0x65, 0x62, 0x65, 0x72, 0x6c, 0x69, -0x6e, 0x62, 0x72, 0x61, 0x1e6d, 0x69, 0x73, 0x6c, 0x61, 0x76, 0x61, 0x62, -0x72, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x73, 0x62, 0x75, 0x6b, 0x61, 0x72, -0x65, 0x73, 0x74, 0x62, 0x75, 0x1e0d, 0x61, 0x70, 0x65, 0x73, 0x74, 0x62, -0x75, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x6b, 0x69, 0x73, 0x69, 0x6e, -0x61, 0x75, 0x6b, 0x6f, 0x70, 0x65, 0x6e, 0x68, 0x61, 0x67, 0x65, 0x6e, -0x1e0d, 0x62, 0x6c, 0x69, 0x6e, 0x6a, 0x69, 0x62, 0x72, 0x61, 0x6c, 0x1e6d, -0x61, 0x72, 0x67, 0x65, 0x72, 0x6e, 0x73, 0x69, 0x68, 0x65, 0x6c, 0x73, -0x69, 0x6e, 0x6b, 0x69, 0x61, 0x61, 0x69, 0x6c, 0x20, 0x61, 0x70, 0x20, -0x6d, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x62, 0x75, 0x6c, 0x6a, -0x65, 0x72, 0x73, 0x69, 0x6b, 0x61, 0x6c, 0x69, 0x6e, 0x69, 0x6e, 0x67, -0x72, 0x61, 0x1e0d, 0x6b, 0x69, 0x72, 0x6f, 0x76, 0x6b, 0x69, 0x79, 0x76, -0x6c, 0x69, 0x73, 0x62, 0x6f, 0x6e, 0x6c, 0x79, 0x75, 0x62, 0x6c, 0x79, -0x61, 0x6e, 0x61, 0x6c, 0x6e, 0x1e0d, 0x6e, 0x6c, 0x6b, 0x73, 0x65, 0x6d, -0x62, 0x72, 0x67, 0x6d, 0x65, 0x1e0d, 0x72, 0x69, 0x1e0d, 0x6d, 0x61, 0x6c, -0x1e6d, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61, 0x6d, 0x6d, 0x69, -0x6e, 0x73, 0x6b, 0x6d, 0x6f, 0x6e, 0x61, 0x6b, 0x6f, 0x6d, 0x6f, 0x73, -0x6b, 0x6f, 0x6f, 0x73, 0x6c, 0x6f, 0x70, 0x61, 0x72, 0x69, 0x73, 0x70, -0x1e0d, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x73, 0x61, 0x70, 0x72, 0x61, 0x67, -0x72, 0x69, 0x67, 0x61, 0x73, 0x61, 0x6d, 0x61, 0x72, 0x61, 0x73, 0x61, -0x6e, 0x20, 0x6d, 0x61, 0x72, 0x69, 0x6e, 0x6f, 0x73, 0x61, 0x72, 0x61, -0x6a, 0x65, 0x76, 0x6f, 0x73, 0x61, 0x72, 0x61, 0x1e6d, 0x6f, 0x76, 0x73, -0x69, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x6f, -0x70, 0x69, 0x73, 0x6f, 0x70, 0x69, 0x79, 0x61, 0x73, 0x1e6d, 0x6f, 0x6b, -0x68, 0x6f, 0x6d, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x1e6d, 0x69, 0x72, 0x61, -0x6e, 0x65, 0x75, 0x6c, 0x79, 0x61, 0x6e, 0x6f, 0x76, 0x73, 0x6b, 0x76, -0x61, 0x1e0d, 0x75, 0x6a, 0x76, 0x61, 0x1e6d, 0x69, 0x6b, 0x61, 0x6e, 0x76, -0x69, 0x65, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x6c, 0x6e, 0x69, 0x75, 0x73, -0x76, 0x6f, 0x6c, 0x67, 0x6f, 0x67, 0x72, 0x61, 0x1e0d, 0x76, 0x61, 0x72, -0x73, 0x61, 0x74, 0x65, 0x67, 0x75, 0x73, 0x69, 0x67, 0x61, 0x6c, 0x70, -0x61, 0x6a, 0x75, 0x72, 0x69, 0x63, 0x1e6d, 0x61, 0x6e, 0x61, 0x6e, 0x61, -0x72, 0x69, 0x76, 0x63, 0x68, 0x61, 0x67, 0x6f, 0x73, 0x6b, 0x72, 0x69, -0x73, 0x1e6d, 0x6d, 0x61, 0x73, 0x6b, 0x6f, 0x6b, 0x6f, 0x73, 0x6b, 0x6f, -0x6d, 0x6f, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x67, 0x75, 0x65, 0x6c, 0x65, -0x6e, 0x6d, 0x61, 0x68, 0x65, 0x6d, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x65, -0x73, 0x6d, 0x61, 0x75, 0x72, 0x69, 0x73, 0x69, 0x75, 0x73, 0x6d, 0x61, -0x79, 0x6f, 0x1e6d, 0x72, 0x65, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x61, 0x70, -0x69, 0x61, 0x101, 0x6b, 0x6c, 0x61, 0x6e, 0x1e0d, 0x62, 0x6f, 0x75, 0x67, -0x61, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x63, 0x65, 0x1e6d, 0x61, 0x6d, 0x63, -0x16b, 0x6b, 0x12b, 0x73, 0x74, 0x65, 0x72, 0x69, 0x70, 0x65, 0x1e6d, 0x65, -0x70, 0x61, 0x6b, 0x61, 0x6f, 0x70, 0x6f, 0x70, 0x69, 0x6a, 0x69, 0x70, -0x75, 0x6e, 0x61, 0x70, 0x75, 0x74, 0x69, 0x67, 0x61, 0x6c, 0x61, 0x70, -0x61, 0x67, 0x6f, 0x73, 0x67, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x72, 0x67, -0x75, 0x61, 0x1e0d, 0x61, 0x6c, 0x6b, 0x65, 0x6e, 0x61, 0x6c, 0x6b, 0x61, -0x6e, 0x1e6d, 0x6f, 0x6e, 0x6b, 0x69, 0x72, 0x69, 0x74, 0x69, 0x6d, 0x61, -0x74, 0x69, 0x6b, 0x69, 0x73, 0x72, 0x61, 0x65, 0x6b, 0x76, 0x61, 0x6a, -0x61, 0x6c, 0x65, 0x69, 0x6e, 0x6d, 0x61, 0x6a, 0x75, 0x72, 0x6f, 0x6d, -0x61, 0x72, 0x6b, 0x69, 0x73, 0x61, 0x73, 0x6d, 0x69, 0x1e0d, 0x76, 0x61, -0x79, 0x6e, 0x61, 0x75, 0x72, 0x75, 0x6e, 0x69, 0x75, 0x65, 0x6e, 0x6f, -0x72, 0x70, 0x6f, 0x6b, 0x6e, 0x75, 0x6d, 0x69, 0x65, 0x70, 0x61, 0x6e, -0x67, 0x6f, 0x20, 0x70, 0x61, 0x6e, 0x67, 0x6f, 0x70, 0x61, 0x6c, 0x61, -0x75, 0x70, 0x69, 0x1e6d, 0x6b, 0x65, 0x72, 0x6e, 0x70, 0x6f, 0x6e, 0x70, -0x65, 0x69, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x73, -0x62, 0x69, 0x72, 0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x67, 0x61, 0x73, -0x61, 0x69, 0x70, 0x61, 0x6e, 0x1e6d, 0x61, 0x68, 0x69, 0x1e6d, 0x69, 0x74, -0x61, 0x72, 0x61, 0x76, 0x61, 0x1e6d, 0x6f, 0x6e, 0x67, 0x61, 0x1e6d, 0x61, -0x70, 0x75, 0x76, 0x65, 0x6b, 0x76, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x92c, -0x94d, 0x92f, 0x93e, 0x928, 0x94d, 0x91c, 0x941, 0x932, 0x92a, 0x93c, 0x94d, 0x930, -0x940, 0x91f, 0x93e, 0x909, 0x928, 0x915, 0x93e, 0x930, 0x94d, 0x924, 0x941, 0x92e, -0x915, 0x93f, 0x902, 0x938, 0x93e, 0x938, 0x93e, 0x932, 0x941, 0x92c, 0x941, 0x92e, -0x92c, 0x93e, 0x938, 0x940, 0x92e, 0x94d, 0x2d, 0x92c, 0x93e, 0x92c, 0x93e, 0x928, -0x947, 0x92e, 0x94b, 0x917, 0x93e, 0x926, 0x93f, 0x938, 0x941, 0x928, 0x93e, 0x907, -0x930, 0x94b, 0x92c, 0x93f, 0x928, 0x941, 0x906, 0x915, 0x91a, 0x949, 0x91f, 0x938, -0x94d, 0x92f, 0x93e, 0x928, 0x20, 0x939, 0x94d, 0x935, 0x93e, 0x928, 0x938, 0x94d, -0x92f, 0x93e, 0x928, 0x20, 0x932, 0x942, 0x924, 0x93f, 0x909, 0x938, 0x941, 0x906, -0x907, 0x92f, 0x93e, 0x90f, 0x938, 0x928, 0x938, 0x93f, 0x92f, 0x949, 0x928, 0x92c, -0x94d, 0x932, 0x93e, 0x902, 0x2d, 0x938, 0x947, 0x92c, 0x932, 0x94b, 0x928, 0x915, -0x947, 0x92e, 0x94d, 0x92c, 0x94d, 0x930, 0x93f, 0x91c, 0x20, 0x92c, 0x947, 0x915, -0x94d, 0x92f, 0x93e, 0x92e, 0x94d, 0x92a, 0x94b, 0x20, 0x917, 0x94d, 0x930, 0x93e, -0x902, 0x921, 0x947, 0x915, 0x94d, 0x92f, 0x93e, 0x928, 0x915, 0x941, 0x928, 0x938, -0x93f, 0x915, 0x93e, 0x917, 0x94b, 0x921, 0x947, 0x928, 0x92e, 0x93e, 0x930, 0x94d, -0x915, 0x938, 0x949, 0x928, 0x924, 0x93f, 0x930, 0x941, 0x928, 0x947, 0x92a, 0x947, -0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x928, 0x947, 0x932, 0x94d, 0x938, -0x928, 0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x93e, 0x932, 0x947, 0x91c, 0x93c, -0x93e, 0x939, 0x947, 0x932, 0x93f, 0x92a, 0x947, 0x915, 0x94d, 0x938, 0x907, 0x915, -0x93e, 0x932, 0x941, 0x924, 0x93f, 0x91f, 0x915, 0x94d, 0x930, 0x93e, 0x932, 0x947, -0x928, 0x94d, 0x921, 0x93f, 0x91c, 0x93f, 0x915, 0x92e, 0x928, 0x94b, 0x938, 0x92e, -0x947, 0x930, 0x93f, 0x917, 0x94b, 0x91f, 0x92c, 0x94d, 0x92f, 0x942, 0x932, 0x93e, -0x2c, 0x20, 0x909, 0x924, 0x949, 0x930, 0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f, -0x93e, 0x92e, 0x93e, 0x926, 0x93f, 0x928, 0x940, 0x20, 0x909, 0x924, 0x949, 0x930, -0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x928, 0x94d, 0x92f, 0x942, 0x20, -0x938, 0x93e, 0x932, 0x947, 0x92e, 0x2c, 0x20, 0x909, 0x924, 0x949, 0x930, 0x949, -0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x913, 0x915, 0x93e, 0x91c, 0x940, 0x928, -0x93e, 0x917, 0x93e, 0x92a, 0x93c, 0x940, 0x928, 0x93f, 0x915, 0x94d, 0x938, 0x92a, -0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x911, 0x92a, 0x93c, 0x20, 0x938, 0x94d, 0x92a, -0x947, 0x928, 0x930, 0x947, 0x938, 0x93e, 0x907, 0x92a, 0x93c, 0x938, 0x947, 0x928, -0x94d, 0x91f, 0x93e, 0x930, 0x947, 0x92e, 0x938, 0x947, 0x902, 0x924, 0x93f, 0x906, -0x917, 0x94b, 0x938, 0x947, 0x902, 0x91f, 0x20, 0x92c, 0x93e, 0x930, 0x94d, 0x924, -0x947, 0x932, 0x947, 0x92e, 0x93f, 0x938, 0x947, 0x902, 0x91f, 0x20, 0x924, 0x949, -0x92e, 0x938, 0x938, 0x94d, 0x935, 0x93f, 0x92a, 0x93c, 0x94d, 0x91f, 0x20, 0x915, -0x930, 0x902, 0x91f, 0x935, 0x94d, 0x92f, 0x93e, 0x928, 0x94d, 0x915, 0x942, 0x935, -0x930, 0x92e, 0x94d, 0x92f, 0x93e, 0x915, 0x92e, 0x941, 0x930, 0x94d, 0x921, 0x94b, -0x932, 0x949, 0x928, 0x94d, 0x917, 0x92f, 0x930, 0x92c, 0x94d, 0x92f, 0x947, 0x928, -0x905, 0x938, 0x94d, 0x917, 0x93e, 0x92c, 0x93e, 0x924, 0x92c, 0x94d, 0x92f, 0x93e, -0x902, 0x917, 0x915, 0x949, 0x915, 0x92c, 0x93f, 0x938, 0x94d, 0x915, 0x947, 0x915, -0x92c, 0x94d, 0x930, 0x942, 0x928, 0x947, 0x924, 0x93f, 0x924, 0x94d, 0x938, 0x93f, -0x924, 0x93e, 0x926, 0x941, 0x92c, 0x924, 0x93f, 0x926, 0x941, 0x938, 0x93e, 0x902, -0x92c, 0x947, 0x92a, 0x93c, 0x93e, 0x92e, 0x93e, 0x917, 0x941, 0x938, 0x94d, 0x924, -0x93e, 0x92f, 0x947, 0x930, 0x941, 0x938, 0x932, 0x947, 0x92e, 0x915, 0x93e, 0x921, -0x93f, 0x902, 0x917, 0x93e, 0x92a, 0x928, 0x949, 0x92e, 0x20, 0x92a, 0x947, 0x928, -0x94d, 0x939, 0x915, 0x93f, 0x91c, 0x93f, 0x932, 0x949, 0x930, 0x94d, 0x921, 0x93e, -0x938, 0x93e, 0x915, 0x93e, 0x932, 0x93f, 0x928, 0x938, 0x902, 0x918, 0x93e, 0x924, -0x93f, 0x924, 0x93e, 0x924, 0x93f, 0x92a, 0x947, 0x924, 0x93f, 0x924, 0x93e, 0x938, -0x915, 0x902, 0x924, 0x91f, 0x94d, 0x2d, 0x92c, 0x93f, 0x932, 0x93f, 0x938, 0x93f, -0x92f, 0x93e, 0x902, 0x917, 0x949, 0x928, 0x915, 0x94d, 0x92f, 0x93e, 0x928, 0x947, -0x930, 0x940, 0x92a, 0x94d, 0x92f, 0x93e, 0x930, 0x94b, 0x926, 0x93e, 0x945, 0x915, -0x93f, 0x923, 0x93e, 0x945, 0x20, 0x91c, 0x93e, 0x945, 0x930, 0x94d, 0x91c, 0x93f, -0x92f, 0x93e, 0x938, 0x94d, 0x91f, 0x94d, 0x92f, 0x93e, 0x928, 0x932, 0x940, 0x906, -0x938, 0x94d, 0x91f, 0x94d, 0x930, 0x93e, 0x915, 0x93e, 0x928, 0x90f, 0x924, 0x947, -0x928, 0x94d, 0x938, 0x906, 0x907, 0x932, 0x20, 0x911, 0x92a, 0x94d, 0x20, 0x92e, -0x94d, 0x92f, 0x93e, 0x928, 0x938, 0x93f, 0x92e, 0x94d, 0x92a, 0x93c, 0x947, 0x930, -0x94b, 0x92a, 0x94b, 0x932, 0x938, 0x94d, 0x915, 0x94b, 0x92a, 0x94d, 0x92f, 0x947, -0x938, 0x94b, 0x92a, 0x93c, 0x93f, 0x92f, 0x93e, 0x91c, 0x93c, 0x94d, 0x92f, 0x942, -0x930, 0x93f, 0x915, 0x93c, 0x92e, 0x949, 0x930, 0x940, 0x938, 0x938, 0x911, 0x915, -0x932, 0x947, 0x902, 0x921, 0x91a, 0x94d, 0x92f, 0x93e, 0x925, 0x92e, 0x924, 0x93f, -0x938, 0x94d, 0x91f, 0x930, 0x90f, 0x92a, 0x93c, 0x947, 0x91f, 0x92a, 0x93c, 0x93e, -0x915, 0x93e, 0x913, 0x92a, 0x93c, 0x94b, 0x92a, 0x93c, 0x93f, 0x91c, 0x940, 0x92a, -0x93c, 0x94d, 0x92f, 0x942, 0x928, 0x93e, 0x92a, 0x93c, 0x941, 0x91f, 0x940, 0x917, -0x94d, 0x92f, 0x93e, 0x92e, 0x92c, 0x93f, 0x92f, 0x930, 0x915, 0x947, 0x902, 0x91f, -0x928, 0x928, 0x93e, 0x945, 0x909, 0x930, 0x941, 0x928, 0x949, 0x930, 0x92a, 0x93c, -0x949, 0x915, 0x928, 0x949, 0x92e, 0x93f, 0x92f, 0x93e, 0x92a, 0x94b, 0x928, 0x92a, -0x947, 0x924, 0x93f, 0xb0f, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb2c, 0xb4d, 0xb30, 0xb3e, -0xb1c, 0xb3e, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb2c, 0xb41, 0xb1c, 0xb42, -0xb2e, 0xb4d, 0xb2c, 0xb41, 0xb30, 0xb3e, 0xb15, 0xb28, 0xb3e, 0xb15, 0xb4d, 0xb30, -0xb3f, 0xb1c, 0xb3f, 0xb2c, 0xb1f, 0xb3f, 0xb2a, 0xb4d, 0xb30, 0xb3f, 0xb1f, 0xb3e, -0xb09, 0xb28, 0xb4d, 0x200c, 0xb17, 0xb3e, 0xb2c, 0xb30, 0xb4d, 0xb23, 0xb4d, 0xb23, -0xb1c, 0xb39, 0xb3e, 0xb28, 0xb4d, 0xb38, 0xb2c, 0xb30, 0xb4d, 0xb17, 0xb15, 0xb30, -0xb1f, 0xb09, 0xb2e, 0xb4d, 0x200c, 0xb32, 0xb3e, 0xb17, 0xb38, 0xb4d, 0x200c, 0xb32, -0xb3f, 0xb2c, 0xb4d, 0xb30, 0xb47, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb32, -0xb2e, 0xb4d, 0x200c, 0xb2e, 0xb4d, 0x2d, 0xb2c, 0xb3e, 0xb2c, 0xb3e, 0xb28, 0xb47, -0xb2e, 0xb4b, 0xb17, 0xb3e, 0xb21, 0xb3f, 0xb38, 0xb41, 0xb2e, 0xb28, 0xb30, 0xb4b, -0xb2c, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb07, 0xb30, 0xb2c, 0xb3f, 0xb28, 0xb41, 0xb06, -0xb15, 0xb1a, 0xb1f, 0xb05, 0xb17, 0xb3e, 0xb21, 0xb17, 0xb41, 0xb2a, 0xb30, 0xb4d, -0xb1f, 0x2d, 0xb28, 0xb71, 0xb38, 0xb3e, 0xb05, 0x20, 0xb1f, 0xb2e, 0xb47, 0xb24, -0xb4d, 0xb30, 0xb3f, 0xb2a, 0xb32, 0xb3f, 0xb71, 0xb3f, 0xb23, 0xb4d, 0xb21, 0xb39, -0xb15, 0xb4d, 0xb2c, 0xb41, 0xb0f, 0xb28, 0xb38, 0xb4d, 0x20, 0xb06, 0xb07, 0xb30, -0xb47, 0xb38, 0xb4d, 0xb15, 0xb3e, 0xb3c, 0xb1f, 0xb3e, 0xb2e, 0xb3e, 0xb15, 0xb3e, -0xb01, 0xb15, 0xb4b, 0xb21, 0xb4b, 0xb2c, 0xb3e, 0xb1c, 0xb41, 0xb1c, 0xb4b, 0xb0f, -0xb32, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb4d, 0xb05, 0xb1c, 0xb3e, 0xb2e, 0xb47, 0xb23, -0xb4d, 0xb21, 0xb1c, 0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb4b, 0x20, 0xb17, 0xb3e, 0xb32, -0xb47, 0xb17, 0xb4b, 0xb38, 0xb38, 0xb3e, 0xb32, 0xb4d, 0xb1f, 0xb3e, 0xb38, 0xb3e, -0xb5f, 0xb3e, 0xb28, 0xb4d, 0x20, 0xb71, 0xb3e, 0xb28, 0xb4d, 0xb38, 0xb5f, 0xb3e, -0xb28, 0x20, 0xb32, 0xb41, 0xb07, 0xb38, 0xb1f, 0xb4b, 0xb15, 0xb41, 0xb2e, 0xb28, -0xb09, 0xb38, 0xb41, 0xb06, 0xb07, 0xb5f, 0xb3e, 0xb05, 0xb30, 0xb41, 0xb2c, 0xb3e, -0xb2c, 0xb3e, 0xb30, 0xb2c, 0xb3e, 0xb21, 0xb38, 0xb2c, 0xb4d, 0xb32, 0xb3e, 0xb19, -0xb4d, 0xb15, 0x2d, 0xb38, 0xb3e, 0xb2c, 0xb32, 0xb28, 0xb4d, 0xb2c, 0xb4b, 0xb06, -0x20, 0xb71, 0xb3f, 0xb38, 0xb4d, 0xb1f, 0xb3e, 0xb2c, 0xb17, 0xb1f, 0xb3e, 0xb2c, -0xb07, 0xb38, 0xb47, 0xb15, 0xb3e, 0xb2e, 0xb4d, 0xb2a, 0x20, 0xb17, 0xb4d, 0xb30, -0xb3e, 0xb23, 0xb4d, 0xb21, 0xb47, 0xb38, 0xb3f, 0xb15, 0xb3e, 0xb17, 0xb15, 0xb37, -0xb4d, 0xb1f, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb15, 0xb3e, 0xb15, 0xb4d, 0xb30, 0xb47, -0xb38, 0xb4d, 0x200d, 0xb1f, 0xb28, 0xb21, 0xb47, 0xb28, 0xb71, 0xb3f, 0xb30, 0xb4d, -0xb21, 0xb47, 0xb1f, 0xb4d, 0xb30, 0xb07, 0xb1f, 0xb4d, 0xb21, 0xb2e, 0xb3f, 0xb28, -0xb3f, 0xb15, 0xb3e, 0xb0f, 0xb21, 0xb4d, 0x200d, 0xb2e, 0xb28, 0xb1f, 0xb28, 0xb4d, -0xb0f, 0xb32, 0xb4d, 0x20, 0xb38, 0xb3e, 0xb32, 0xb71, 0xb3e, 0xb21, 0xb4b, 0xb30, -0xb4d, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0x20, 0xb28, 0xb47, 0xb32, 0xb38, 0xb28, 0xb4d, -0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb32, 0xb47, 0xb1c, 0xb3e, 0xb17, 0xb41, 0xb06, 0xb21, -0xb47, 0xb32, 0xb09, 0xb2a, 0xb47, 0xb17, 0xb41, 0xb06, 0xb24, 0xb47, 0xb2e, 0xb3e, -0xb32, 0xb3e, 0xb39, 0xb3e, 0xb71, 0xb28, 0xb3e, 0xb39, 0xb47, 0xb30, 0xb2e, 0xb38, -0xb3f, 0xb32, 0xb4b, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb2a, -0xb32, 0xb3f, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb30, 0xb47, 0xb28, 0xb17, 0x2c, 0x20, -0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb71, 0xb47, 0xb71, 0xb3e, -0xb5f, 0x2c, 0x20, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb07, -0xb28, 0xb41, 0xb71, 0xb3f, 0xb15, 0xb4d, 0xb32, 0xb09, 0xb07, 0xb38, 0xb71, 0xb3f, -0xb32, 0xb4d, 0xb32, 0xb47, 0xb2e, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb38, 0xb47, 0xb32, -0x2c, 0x20, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb09, 0xb15, 0xb3f, 0xb15, 0xb47, -0xb15, 0xb4d, 0xb30, 0xb3e, 0xb32, 0xb47, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb1c, 0xb3f, -0xb15, 0xb2e, 0xb3e, 0xb38, 0xb3f, 0xb05, 0xb2e, 0xb3e, 0xb30, 0xb3f, 0xb17, 0xb1f, -0xb4d, 0xb2e, 0xb3e, 0xb1f, 0xb3e, 0xb2e, 0xb30, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb1c, -0xb3e, 0xb1f, 0xb32, 0xb3e, 0xb28, 0xb4d, 0xb2e, 0xb3f, 0xb15, 0xb4d, 0xb35, 0xb47, -0xb32, 0xb28, 0xb4d, 0xb2e, 0xb3e, 0xb28, 0xb15, 0xb1f, 0xb28, 0xb4d, 0xb2e, 0xb28, -0xb1f, 0xb47, 0xb30, 0xb3f, 0xb0f, 0xb2e, 0xb23, 0xb4d, 0xb1f, 0xb47, 0xb2d, 0xb3f, -0xb21, 0xb3f, 0xb05, 0xb2e, 0xb28, 0xb1f, 0xb38, 0xb47, 0xb30, 0xb30, 0xb3e, 0xb1f, -0xb4d, 0xb28, 0xb4d, 0xb5f, 0xb41, 0x20, 0xb5f, 0xb30, 0xb4d, 0xb15, 0xb4d, 0xb28, -0xb30, 0xb39, 0xb4d, 0xb28, 0xb2c, 0xb47, 0xb09, 0xb32, 0xb3e, 0xb39, 0x2c, 0x20, -0xb09, 0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb15, -0xb47, 0xb28, 0xb4d, 0xb26, 0xb4d, 0xb30, 0x2c, 0x20, 0xb09, 0xb24, 0xb4d, 0xb24, -0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb28, 0xb4d, 0xb5f, 0xb41, 0x20, -0xb38, 0xb3e, 0xb32, 0xb47, 0xb2e, 0xb4d, 0x2c, 0x20, 0xb09, 0xb24, 0xb4d, 0xb24, -0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb05, 0xb1c, 0xb3f, 0xb28, 0xb3e, -0xb17, 0xb3e, 0xb2a, 0xb07, 0xb28, 0xb3f, 0xb15, 0xb4d, 0xb38, 0xb2a, 0xb30, 0xb4d, -0xb1f, 0x2d, 0xb0f, 0xb5f, 0xb41, 0x2d, 0xb2a, 0xb4d, 0xb30, 0xb3f, 0xb28, 0xb4d, -0x200d, 0xb38, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb05, 0xb2b, 0xb4d, 0x20, -0xb38, 0xb4d, 0xb2a, 0xb47, 0xb28, 0xb4d, 0xb2a, 0xb41, 0xb0f, 0xb30, 0xb4d, 0xb24, -0x20, 0xb30, 0xb3f, 0xb15, 0xb30, 0xb47, 0xb38, 0xb3f, 0xb2a, 0xb3f, 0xb30, 0xb3f, -0xb5f, 0x20, 0xb2c, 0xb4d, 0xb30, 0xb3e, 0xb19, 0xb4d, 0xb15, 0xb38, 0xb3e, 0xb28, -0xb4d, 0xb24, 0xb30, 0xb47, 0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb23, 0xb4d, 0xb1f, 0x20, -0xb21, 0xb2e, 0xb3f, 0xb19, 0xb4d, 0xb17, 0xb07, 0xb1f, 0xb4d, 0xb1f, 0xb15, 0xb4d, -0xb35, 0xb30, 0xb1f, 0xb30, 0xb2e, 0xb3f, 0xb1f, 0xb4d, 0xb38, 0xb47, 0xb23, 0xb4d, -0xb1f, 0x20, 0xb2c, 0xb3e, 0xb30, 0xb4d, 0xb24, 0xb47, 0xb32, 0xb47, 0xb2e, 0xb3f, -0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb15, 0xb3f, 0xb1f, 0xb4d, 0x200d, -0xb38, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e, 0x20, 0xb25, 0xb2e, 0xb3e, -0xb38, 0xb4d, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e, 0x20, 0xb71, 0xb3f, -0xb28, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0xb24, 0xb41, 0xb32, 0xb47, 0xb1f, -0xb30, 0xb23, 0xb4d, 0xb1f, 0xb1f, 0xb30, 0xb1f, 0xb32, 0xb3e, 0xb71, 0xb3e, 0xb19, -0xb4d, 0xb15, 0xb41, 0xb71, 0xb30, 0xb4d, 0xb15, 0xb47, 0xb38, 0xb3f, 0xb21, 0xb47, -0xb71, 0xb3f, 0xb38, 0xb4d, 0xb21, 0xb4d, 0xb5f, 0xb41, 0xb2e, 0xb3e, 0xb23, 0xb4d, -0xb1f, 0x20, 0xb21, 0xb3f, 0x20, 0xb09, 0xb30, 0xb71, 0xb3f, 0xb32, 0xb47, 0xb2e, -0xb15, 0xb4d, 0xb71, 0xb3e, 0xb30, 0xb3f, 0xb2e, 0xb3e, 0xb01, 0xb38, 0xb28, 0xb2e, -0xb4d, 0xb5f, 0xb3e, 0xb15, 0xb2e, 0xb41, 0xb30, 0xb4d, 0xb21, 0xb2a, 0xb3e, 0xb01, -0xb2e, 0xb30, 0xb30, 0xb4b, 0xb24, 0xb47, 0xb30, 0xb3e, 0xb1f, 0xb4b, 0xb32, 0xb4d, -0xb71, 0xb4b, 0xb38, 0xb4d, 0xb24, 0xb15, 0xb4b, 0xb33, 0xb19, 0xb4d, 0xb16, 0xb5f, -0xb3e, 0xb30, 0xb2c, 0xb47, 0xb28, 0xb06, 0xb15, 0xb4d, 0xb1f, 0xb2c, 0xb47, 0xb06, -0xb38, 0xb4d, 0x200d, 0xb17, 0xb3e, 0xb2c, 0xb1f, 0xb4d, 0xb2c, 0xb39, 0xb3e, 0xb30, -0xb47, 0xb28, 0xb2c, 0xb3f, 0xb38, 0xb15, 0xb47, 0xb15, 0xb4d, 0x200c, 0xb26, 0xb41, -0xb38, 0xb3e, 0xb28, 0xb2c, 0xb47, 0xb2a, 0xb3e, 0xb2e, 0xb3e, 0xb17, 0xb41, 0xb38, -0xb4d, 0xb1f, 0xb3e, 0xb39, 0x20, 0xb1a, 0xb3f, 0x20, 0xb2e, 0xb3f, 0xb28, 0xb4d, -0x200c, 0x20, 0xb38, 0xb3f, 0xb1f, 0xb3f, 0xb39, 0xb4b, 0xb71, 0xb21, 0xb4d, 0x200c, -0xb1c, 0xb3e, 0xb15, 0xb30, 0xb4d, 0xb24, 0xb3e, 0xb15, 0xb2c, 0xb41, 0xb32, 0xb4d, -0xb15, 0xb3e, 0xb1f, 0xb2e, 0xb3e, 0xb23, 0xb4d, 0xb21, 0xb41, 0xb15, 0xb3e, 0xb28, -0xb21, 0xb4d, 0xb5f, 0xb3e, 0xb17, 0xb3e, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb38, 0xb28, -0xb5f, 0xb3e, 0xb30, 0xb38, 0xb4d, 0xb15, 0xb28, 0xb3f, 0xb15, 0xb38, 0xb3f, 0xb06, -0xb28, 0xb71, 0xb15, 0xb41, 0xb1c, 0xb28, 0xb47, 0xb1f, 0xb38, 0xb4d, 0xb15, 0xb28, -0xb71, 0xb38, 0xb3f, 0xb2c, 0xb3f, 0xb30, 0xb38, 0xb4d, 0xb15, 0xb05, 0xb30, 0xb3e, -0xb32, 0xb4d, 0x200c, 0xb2a, 0xb28, 0xb2e, 0xb4d, 0x200c, 0x20, 0xb2a, 0xb47, 0xb28, -0xb39, 0xb2a, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb15, 0xb4d, 0x200c, -0xb15, 0xb37, 0xb4d, 0xb1f, 0xb28, 0xb47, 0xb15, 0xb40, 0xb1c, 0xb3f, 0xb32, 0xb30, -0xb4d, 0xb21, 0xb3e, 0xb38, 0xb15, 0xb3e, 0xb32, 0xb3f, 0xb28, 0xb4d, 0xb38, 0xb3f, -0xb05, 0xb32, 0xb38, 0xb02, 0xb17, 0xb3e, 0xb07, 0xb38, 0xb4d, 0xb30, 0xb47, 0xb21, -0xb28, 0xb47, 0xb15, 0xb32, 0xb5f, 0xb2e, 0xb38, 0xb4d, 0xb15, 0xb24, 0xb3e, 0xb38, -0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb24, 0xb3f, 0xb2e, 0xb4d, 0xb2a, 0xb41, 0xb1f, -0xb15, 0xb3f, 0xb05, 0xb1f, 0xb2e, 0xb38, 0xb4d, 0xb15, 0xb5f, 0xb41, 0xb38, 0xb4d, -0x200d, 0xb1f, 0x2d, 0xb28, 0xb47, 0xb30, 0xb3e, 0xb71, 0xb3f, 0xb0f, 0xb23, 0xb4d, -0xb1f, 0xb3f, 0xb0f, 0xb28, 0xb4d, 0x200c, 0xb71, 0xb4d, 0xb32, 0xb3e, 0xb21, 0xb3f, -0xb71, 0xb37, 0xb4d, 0xb1f, 0xb4b, 0xb15, 0xb4d, 0xb5f, 0xb47, 0xb30, 0xb47, 0xb2c, -0xb3e, 0xb28, 0xb4d, 0xb06, 0xb1c, 0xb30, 0xb47, 0xb38, 0xb4d, 0xb2c, 0xb30, 0xb2e, -0xb41, 0xb21, 0xb3e, 0xb15, 0xb47, 0xb2a, 0xb4d, 0x200c, 0x20, 0xb71, 0xb30, 0xb4d, -0xb26, 0xb47, 0xb2a, 0xb30, 0xb0f, 0xb30, 0xb47, 0xb15, 0xb4d, 0xb5f, 0xb3e, 0xb2c, -0xb3f, 0xb15, 0xb38, 0xb4d, 0x200d, 0xb1f, 0xb3e, 0xb32, 0xb3f, 0xb28, 0xb0f, 0xb21, -0xb3f, 0xb32, 0xb47, 0xb21, 0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb3f, 0xb38, 0xb2c, 0xb28, -0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb4b, 0xb15, 0xb28, 0x20, 0xb39, 0xb3f, 0xb32, 0xb21, -0xb3e, 0xb30, 0xb4d, 0xb71, 0xb3f, 0xb28, 0xb4d, 0xb32, 0xb3f, 0xb23, 0xb4d, 0xb21, -0xb47, 0xb2e, 0xb3e, 0xb28, 0xb32, 0xb30, 0xb4d, 0x200d, 0xb21, 0x20, 0xb39, 0xb3e, -0xb71, 0xb47, 0xb2e, 0xb47, 0xb32, 0xb2c, 0xb4b, 0xb28, 0xb01, 0xb2a, 0xb30, 0xb4d, -0xb24, 0xb06, 0xb2e, 0xb37, 0xb4d, 0xb1f, 0xb4d, 0xb30, 0xb47, 0xb21, 0xb3e, 0xb2e, -0xb4d, 0xb06, 0xb23, 0xb4d, 0xb21, 0xb30, 0xb3e, 0xb06, 0xb38, 0xb4d, 0x200d, 0xb1f, -0xb30, 0xb3e, 0xb15, 0xb3e, 0xb28, 0xb0f, 0xb24, 0xb47, 0xb28, 0xb4d, 0xb38, 0xb2c, -0xb47, 0xb32, 0xb17, 0xb4d, 0xb30, 0xb47, 0xb21, 0xb47, 0xb2c, 0xb4d, 0xb30, 0xb3e, -0xb1f, 0xb3f, 0xb38, 0xb32, 0xb3e, 0xb71, 0xb3e, 0xb2c, 0xb4d, 0xb30, 0xb41, 0xb38, -0xb3f, 0xb32, 0xb4d, 0x200d, 0xb38, 0xb2c, 0xb41, 0xb1a, 0xb3e, 0xb30, 0xb47, 0xb38, -0xb4d, 0xb1f, 0xb2c, 0xb41, 0xb21, 0xb3e, 0xb2a, 0xb47, 0xb38, 0xb4d, 0xb1f, 0xb1a, -0xb3f, 0xb38, 0xb3f, 0xb28, 0xb3e, 0xb09, 0xb15, 0xb2a, 0xb47, 0xb28, 0xb39, 0xb3e, -0xb17, 0xb47, 0xb28, 0xb4d, 0xb06, 0xb07, 0xb32, 0xb4d, 0x20, 0xb05, 0xb2a, 0xb4d, -0x20, 0xb2e, 0xb4d, 0xb5f, 0xb3e, 0xb28, 0xb4d, 0xb15, 0xb3f, 0xb30, 0xb71, 0xb2e, -0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb3e, 0xb39, 0xb47, 0xb2e, 0xb2e, 0xb28, 0xb3e, 0xb15, -0xb05, 0xb38, 0xb32, 0xb4b, 0xb2a, 0xb21, 0xb17, 0xb30, 0xb3f, 0xb15, 0xb3e, 0xb30, -0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb30, 0xb3e, 0xb1c, 0xb47, 0xb2c, 0xb38, 0xb3e, 0xb30, -0xb3e, 0xb1f, 0xb71, 0xb4d, 0xb38, 0xb3f, 0xb2e, 0xb2b, 0xb47, 0xb30, 0xb2a, 0xb32, -0xb4d, 0xb38, 0xb4d, 0xb15, 0xb2a, 0xb5f, 0xb47, 0xb38, 0xb2a, 0xb3f, 0xb5f, 0xb3e, -0xb38, 0xb4d, 0xb1f, 0xb15, 0xb4d, 0x20, 0xb39, 0xb2e, 0xb4d, 0x200c, 0xb1f, 0xb3e, -0xb07, 0xb30, 0xb47, 0xb28, 0xb4d, 0xb5f, 0xb41, 0xb32, 0xb5f, 0xb3e, 0xb28, 0xb71, -0xb38, 0xb4d, 0xb15, 0xb2c, 0xb3e, 0xb21, 0xb41, 0xb1c, 0xb71, 0xb3e, 0xb1f, 0xb3f, -0xb15, 0xb3e, 0xb28, 0xb4d, 0xb71, 0xb3f, 0xb0f, 0xb28, 0xb3e, 0xb71, 0xb3f, 0xb32, -0xb28, 0xb3f, 0xb09, 0xb38, 0xb4d, 0xb71, 0xb32, 0xb17, 0xb17, 0xb4d, 0xb30, 0xb3e, -0xb21, 0xb4d, 0xb16, 0xb4d, 0xb30, 0xb40, 0xb38, 0xb4d, 0x200d, 0xb1f, 0x20, 0xb2e, -0xb3e, 0xb38, 0xb15, 0xb15, 0xb38, 0xb4d, 0x200c, 0xb15, 0xb2e, 0xb30, 0xb15, 0xb47, -0xb30, 0xb17, 0xb41, 0xb32, 0xb47, 0xb28, 0xb2e, 0xb30, 0xb3f, 0xb38, 0xb38, 0xb4d, -0xb2e, 0xb3e, 0xb5f, 0xb1f, 0xb47, 0xb2c, 0xb17, 0xb47, 0xb28, 0xb4d, 0x200c, 0xb71, -0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb1a, 0xb3e, 0xb24, 0xb3e, 0xb2e, 0xb4d, 0x200c, -0xb2a, 0xb15, 0xb3e, 0xb05, 0xb2a, 0xb2a, 0xb3f, 0xb1c, 0xb3f, 0xb17, 0xb3e, 0xb32, -0xb3e, 0xb2a, 0xb3e, 0xb17, 0xb38, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb28, 0xb28, -0xb30, 0xb2a, 0xb15, 0xb4d, 0x200c, 0xb28, 0xb09, 0xb2e, 0xb3f, 0xb5f, 0xb2a, 0xb39, -0xb28, 0xb2a, 0xb47, 0xb07, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d, 0x200c, 0x20, 0xb2e, -0xb30, 0xb47, 0xb38, 0xb2c, 0xb3f, 0xb30, 0xb3e, 0xb30, 0xb1f, 0xb19, 0xb4d, 0xb17, -0xb3e, 0xb1f, 0xb19, 0xb4d, 0xb17, 0xb3e, 0xb1f, 0xb3e, 0xb2a, 0xb41, 0xc0e, 0xc02, -0xc17, 0xc4d, 0xc35, 0xc3f, 0xc32, 0xc4d, 0xc32, 0xc3e, 0x3c, 0x65, 0x78, 0x65, -0x6d, 0x70, 0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79, 0x3e, 0xc05, 0xc21, -0xc46, 0xc32, 0xc48, 0xc21, 0xc4d, 0x3c, 0x2f, 0x65, 0x78, 0x65, 0x6d, 0x70, -0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79, 0x3e, 0xc15, 0xc3e, 0xc02, 0xc1f, -0xc28, 0xc4d, 0x140a, 0x144e, 0x1426, 0x146f, 0x1472, 0x1423, 0x1401, 0x141f, 0x14aa, 0x1423, -0x1450, 0x1423, 0x1403, 0x14c4, 0x1431, 0x1420, 0x1403, 0x1473, 0x14eb, 0x1405, 0x1403, 0x141f, -0x14f4, 0x1422, 0x1473, 0x141f, 0x1489, 0x1418, 0x1423, 0x1411, 0x14c2, 0x142f, 0x1420 +0x65, 0x76, 0x61, 0x79, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, +0x61, 0x29, 0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x20, +0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x57, 0x69, 0x6e, +0x61, 0x6d, 0x61, 0x63, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, +0x61, 0x29, 0x4a, 0x61, 0x6d, 0xe0, 0x65, 0x67, 0x61, 0x4d, 0x6f, 0x6e, +0x74, 0x69, 0x63, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x28, 0x4b, 0x65, 0x6e, +0x74, 0x75, 0x63, 0x6b, 0x79, 0x29, 0x4c, 0x6f, 0x73, 0x20, 0xc0, 0x6e, +0x67, 0x65, 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x69, +0x67, 0x61, 0x53, 0x69, 0x74, 0xe0, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20, +0x4d, 0xe8, 0x73, 0x65, 0x67, 0x6f, 0x4d, 0x69, 0x63, 0x68, 0x65, 0x6c, +0x6f, 0x6e, 0x42, 0x65, 0x75, 0x6c, 0x61, 0x68, 0x20, 0x28, 0x4e, 0x6f, +0x72, 0x64, 0x20, 0x44, 0x61, 0x6b, 0x6f, 0x74, 0x61, 0x29, 0x43, 0x65, +0x6e, 0x74, 0x65, 0x72, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44, +0x61, 0x6b, 0x6f, 0x74, 0x61, 0x29, 0x4e, 0x65, 0x77, 0x20, 0x53, 0x61, +0x6c, 0x65, 0x6d, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44, 0x61, +0x6b, 0x6f, 0x74, 0x61, 0x29, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x50, +0x72, 0xec, 0x6e, 0x73, 0x69, 0x70, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x6f, +0x20, 0x64, 0x65, 0x20, 0x53, 0x70, 0x61, 0x67, 0x6e, 0x61, 0x53, 0x61, +0x6e, 0x20, 0x50, 0x6f, 0x6c, 0x6f, 0x53, 0x2e, 0x20, 0x42, 0x61, 0x72, +0x74, 0x6f, 0x6c, 0x6f, 0x6d, 0xe8, 0x6f, 0x53, 0x2e, 0x20, 0x4a, 0x6f, +0x61, 0x6e, 0x69, 0x53, 0x2e, 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f, +0x66, 0x65, 0x72, 0x53, 0x2e, 0x20, 0x4c, 0x75, 0x73, 0xec, 0x61, 0x53, +0x2e, 0x20, 0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x73, 0x6f, 0xcc, 0x7a, +0x6f, 0x6c, 0x61, 0x20, 0x4d, 0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69, +0x65, 0x41, 0x6e, 0xe0, 0x64, 0x79, 0x72, 0x41, 0x6b, 0x74, 0xe0, 0x75, +0x41, 0x7a, 0x67, 0x61, 0x62, 0x61, 0x64, 0x41, 0x74, 0x79, 0x72, 0xe0, +0x75, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x62, 0x6f, 0x44, 0x75, 0x62, 0xe0, +0x69, 0x44, 0x75, 0x73, 0x61, 0x6e, 0x62, 0xe9, 0x4b, 0x61, 0x74, 0x6d, +0x61, 0x6e, 0x64, 0xf9, 0x48, 0xe0, 0x6e, 0x64, 0x69, 0x67, 0x61, 0x4b, +0x72, 0x61, 0x7a, 0x6e, 0x61, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x4b, 0x75, +0x61, 0x6c, 0x61, 0x20, 0x4c, 0x75, 0x6e, 0x70, 0x75, 0x72, 0x4d, 0x61, +0x63, 0xe0, 0x6f, 0x4e, 0x6f, 0x76, 0x6f, 0x6b, 0x75, 0x7a, 0x6e, 0x69, +0x65, 0x74, 0x73, 0x6b, 0x4b, 0x6f, 0x73, 0x74, 0x61, 0x6e, 0xe0, 0x69, +0x53, 0x68, 0x61, 0x6e, 0x67, 0x68, 0xe0, 0x69, 0x5a, 0x72, 0xe9, 0x64, +0x6e, 0x65, 0x6b, 0x6f, 0x6c, 0x69, 0x6d, 0x73, 0x6b, 0x54, 0x69, 0x6e, +0x70, 0x75, 0x55, 0x6c, 0x61, 0x6e, 0x20, 0x42, 0xe0, 0x74, 0x6f, 0x72, +0x55, 0x73, 0x74, 0x2d, 0x47, 0x6e, 0x65, 0x72, 0x61, 0x59, 0x65, 0x6b, +0x61, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4a, +0xe8, 0x72, 0x65, 0x76, 0x61, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, +0x41, 0x7a, 0x6f, 0x72, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, +0x61, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x43, 0x61, 0x6f, 0x20, 0x56, 0x65, +0x72, 0x64, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x46, 0xe0, 0x72, +0x6f, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4d, 0x61, 0x64, 0xe8, +0x69, 0x72, 0x61, 0x52, 0x65, 0x6b, 0x69, 0x61, 0x76, 0x69, 0x6b, 0x47, +0x65, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20, +0x73, 0x75, 0x64, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x2e, 0x20, +0x45, 0x6c, 0x65, 0x6e, 0x61, 0x41, 0x64, 0x65, 0x6c, 0xe0, 0x69, 0x64, +0x65, 0x42, 0x72, 0x69, 0x7a, 0x62, 0x61, 0x6e, 0x65, 0xcc, 0x7a, 0x6f, +0x6c, 0x61, 0x20, 0x4c, 0x6f, 0x72, 0x64, 0x20, 0x48, 0x6f, 0x77, 0x65, +0xc0, 0x6d, 0x73, 0x74, 0x65, 0x72, 0x64, 0x61, 0x6d, 0x42, 0x72, 0x61, +0x74, 0x69, 0x7a, 0x6c, 0x61, 0x76, 0x61, 0x4a, 0x69, 0x62, 0x69, 0x6c, +0x74, 0x65, 0x72, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65, +0x20, 0x4d, 0x61, 0x6e, 0x4c, 0x75, 0x62, 0x6c, 0x69, 0x61, 0x6e, 0x61, +0x4c, 0x75, 0x73, 0x65, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4f, 0x7a, +0x6c, 0x6f, 0x50, 0x61, 0x72, 0x69, 0x6a, 0x69, 0x53, 0x69, 0x6e, 0x66, +0x65, 0x72, 0xf2, 0x70, 0x6f, 0x6c, 0x69, 0x53, 0x74, 0x6f, 0x63, 0x6f, +0x6c, 0x6d, 0x61, 0x55, 0x6c, 0x69, 0xe0, 0x6e, 0x6f, 0x73, 0x6b, 0x56, +0x61, 0x74, 0x65, 0x67, 0x61, 0x6e, 0x43, 0x69, 0x61, 0x67, 0x6f, 0x73, +0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x4e, 0x61, 0x64, +0x61, 0x6c, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x63, +0x6f, 0x73, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x6f, +0x72, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x6c, 0x64, +0x69, 0x76, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x75, +0x72, 0x69, 0x73, 0x69, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, +0x61, 0x69, 0x6f, 0x74, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x52, +0x65, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, +0x42, 0x6f, 0x75, 0x67, 0x61, 0x69, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x65, +0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x69, 0x61, 0x74, 0x65, 0x6d, +0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x68, 0x75, 0x75, 0x6b, 0xcc, +0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x50, 0x61, 0x73, 0x63, +0x75, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x45, 0x66, 0x61, 0x74, +0x65, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x61, 0x6b, 0x61, 0x6f, +0x66, 0x6f, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x75, 0x6e, 0x61, +0x66, 0x75, 0x74, 0x69, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x47, 0x61, +0x6d, 0x62, 0x69, 0x65, 0x72, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x47, +0x75, 0x61, 0x64, 0x61, 0x6c, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x41, 0x74, +0x6f, 0x6c, 0x6f, 0x20, 0x43, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x41, 0x74, +0x6f, 0x6c, 0x6f, 0x20, 0x4b, 0x69, 0x72, 0x69, 0x74, 0x69, 0x6d, 0x61, +0x74, 0x69, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4b, 0x6f, 0x73, 0x72, +0x61, 0x65, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x4b, 0x77, 0x61, 0x6a, +0x61, 0x6c, 0x65, 0x69, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, +0x61, 0x72, 0x63, 0x68, 0x65, 0x7a, 0x69, 0x41, 0x74, 0x6f, 0x6c, 0x6f, +0x20, 0x4d, 0x69, 0x64, 0x77, 0x61, 0x79, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, +0x20, 0x4e, 0x61, 0x75, 0x72, 0x75, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, +0x4e, 0x69, 0x75, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x6f, +0x72, 0x66, 0x6f, 0x6c, 0x6b, 0x50, 0x61, 0x6c, 0xe0, 0x75, 0xcc, 0x7a, +0x6f, 0x6c, 0x61, 0x20, 0x50, 0x69, 0x74, 0x63, 0x61, 0x69, 0x72, 0x6e, +0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x50, 0x6f, 0x6e, 0x70, 0xe8, 0x69, +0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x4d, 0x6f, 0x72, 0x65, 0x73, 0x62, +0x79, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x52, 0x61, 0x72, 0x6f, 0x74, +0x6f, 0x6e, 0x67, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x61, +0x69, 0x70, 0xe0, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x61, +0x69, 0x74, 0x69, 0x41, 0x74, 0x6f, 0x6c, 0x6c, 0x6f, 0x20, 0x54, 0x61, +0x72, 0x61, 0x77, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x6f, +0x6e, 0x67, 0x61, 0x74, 0x61, 0x70, 0x75, 0x41, 0x74, 0x6f, 0x6c, 0x6f, +0x20, 0x57, 0x61, 0x6b, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x57, +0x61, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x62, 0x69, 0x64, 0x6a, 0x61, 0x6e, +0x65, 0x63, 0x72, 0x61, 0x61, 0x1e0d, 0x69, 0x73, 0x20, 0x61, 0x62, 0x61, +0x62, 0x61, 0x61, 0x6c, 0x6a, 0x12b, 0x79, 0x72, 0x73, 0x61, 0x73, 0x6d, +0x61, 0x72, 0x61, 0x62, 0x61, 0x6d, 0x61, 0x6b, 0x6f, 0x62, 0x61, 0x6e, +0x67, 0x75, 0x69, 0x62, 0x61, 0x6e, 0x6a, 0x75, 0x6c, 0x62, 0x69, 0x73, +0x73, 0x61, 0x75, 0x62, 0x6c, 0x61, 0x6e, 0x1e6d, 0x61, 0x65, 0x72, 0x62, +0x72, 0x61, 0x6a, 0x61, 0x76, 0x69, 0x6c, 0x6c, 0x62, 0x75, 0x6a, 0x75, +0x6d, 0x62, 0x75, 0x72, 0x61, 0x6b, 0x61, 0x69, 0x72, 0x6f, 0x6b, 0x61, +0x73, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x61, 0x73, 0x65, 0x75, 0x1e6d, +0x61, 0x6b, 0x6f, 0x6e, 0x61, 0x6b, 0x72, 0x12b, 0x1e0d, 0x6b, 0x61, 0x72, +0x64, 0x61, 0x72, 0x20, 0x65, 0x73, 0x20, 0x73, 0x61, 0x6c, 0x61, 0x61, +0x6d, 0x64, 0x75, 0x61, 0x6c, 0x61, 0x65, 0x6c, 0x20, 0x61, 0x61, 0x69, +0x79, 0x75, 0x6e, 0x70, 0x72, 0x12b, 0x1e6d, 0x61, 0x75, 0x6e, 0x67, 0x61, +0x62, 0x6f, 0x72, 0x6f, 0x6e, 0x68, 0x72, 0x61, 0x72, 0x65, 0x6a, 0x6f, +0x68, 0x61, 0x6e, 0x6e, 0x65, 0x73, 0x62, 0x75, 0x72, 0x67, 0x6a, 0x75, +0x62, 0x61, 0x6b, 0x6d, 0x70, 0x61, 0x6c, 0x61, 0x6b, 0x61, 0x72, 0x1e6d, +0x6f, 0x75, 0x6d, 0x6b, 0x69, 0x67, 0x61, 0x6c, 0x69, 0x6b, 0x69, 0x6e, +0x73, 0x61, 0x73, 0x61, 0x6c, 0x61, 0x67, 0x6f, 0x73, 0x6c, 0x69, 0x62, +0x72, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x6c, 0x75, 0x61, 0x6e, 0x1e0d, 0x61, +0x6c, 0x75, 0x62, 0x75, 0x6d, 0x62, 0x61, 0x73, 0x69, 0x6c, 0x75, 0x73, +0x61, 0x6b, 0x61, 0x6d, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x6d, 0x61, 0x70, +0x75, 0x1e6d, 0x75, 0x6d, 0x61, 0x73, 0x65, 0x72, 0x75, 0x6d, 0x62, 0x61, +0x62, 0x61, 0x6e, 0x65, 0x6d, 0x6f, 0x67, 0x61, 0x1e0d, 0x69, 0x73, 0x75, +0x6d, 0x6f, 0x6e, 0x72, 0x6f, 0x76, 0x69, 0x61, 0x6e, 0x61, 0x69, 0x72, +0x6f, 0x62, 0x69, 0x6e, 0x6a, 0x61, 0x6d, 0x65, 0x6e, 0x61, 0x6e, 0x69, +0x79, 0x61, 0x6d, 0x65, 0x6e, 0x75, 0x65, 0x6b, 0x73, 0x61, 0x76, 0x61, +0x67, 0x64, 0x75, 0x67, 0x75, 0x70, 0x6f, 0x72, 0x1e6d, 0x6f, 0x2d, 0x1e47, +0x6f, 0x76, 0x6f, 0x73, 0x61, 0x6f, 0x20, 0x1e6d, 0x6f, 0x6d, 0x74, 0x72, +0x69, 0x70, 0x6f, 0x6c, 0x69, 0x1e6d, 0x75, 0x6e, 0x69, 0x73, 0x76, 0x69, +0x6e, 0x64, 0x68, 0x75, 0x6b, 0x61, 0x1e0d, 0x61, 0x6b, 0x61, 0x6e, 0x6b, +0x6f, 0x72, 0x61, 0x6a, 0x65, 0x6e, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x61, +0x65, 0x6e, 0x1e6d, 0x69, 0x67, 0x75, 0x61, 0x61, 0x72, 0x61, 0x67, 0x76, +0x61, 0x69, 0x6e, 0x61, 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x75, 0x73, 0x20, +0x61, 0x69, 0x72, 0x65, 0x73, 0x6b, 0x61, 0x74, 0x61, 0x6d, 0x61, 0x72, +0x6b, 0x61, 0x6b, 0x6f, 0x72, 0x1e0d, 0x61, 0x62, 0x61, 0x68, 0x75, 0x68, +0x75, 0x65, 0x6c, 0x61, 0x20, 0x72, 0x69, 0x6f, 0x6a, 0x61, 0x6d, 0x65, +0x6e, 0x1e0d, 0x6f, 0x6a, 0x61, 0x72, 0x69, 0x79, 0x6f, 0x20, 0x67, 0x61, +0x6c, 0x6c, 0x65, 0x67, 0x6f, 0x73, 0x73, 0x61, 0x6c, 0x1e6d, 0x61, 0x73, +0x61, 0x6e, 0x20, 0x68, 0x75, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x20, 0x6c, +0x75, 0x69, 0x73, 0x1e6d, 0x75, 0x6b, 0x16b, 0x6d, 0x6e, 0x75, 0x73, 0x76, +0x61, 0x69, 0x79, 0x61, 0x61, 0x72, 0x75, 0x62, 0x61, 0x65, 0x73, 0x75, +0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x1e6d, 0x69, 0x6b, 0x6f, 0x6b, 0x65, +0x6e, 0x62, 0x61, 0x68, 0x69, 0x61, 0x62, 0x61, 0x69, 0x61, 0x20, 0x62, +0x61, 0x6e, 0x1e0d, 0x65, 0x72, 0x61, 0x73, 0x62, 0x61, 0x72, 0x62, 0x61, +0x1e0d, 0x6f, 0x73, 0x62, 0x65, 0x6c, 0x65, 0x6d, 0x62, 0x65, 0x6c, 0x69, +0x6a, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x2d, 0x73, 0x61, 0x62, 0x6c, 0x6f, +0x6e, 0x62, 0x6f, 0x61, 0x20, 0x76, 0x69, 0x73, 0x74, 0x61, 0x62, 0x6f, +0x67, 0x6f, 0x1e6d, 0x61, 0x62, 0x6f, 0x69, 0x73, 0x12b, 0x6b, 0x65, 0x6d, +0x62, 0x72, 0x69, 0x6a, 0x20, 0x62, 0x65, 0x6b, 0x61, 0x6d, 0x70, 0x6f, +0x20, 0x67, 0x72, 0x61, 0x6e, 0x1e0d, 0x65, 0x6b, 0x61, 0x6e, 0x6b, 0x75, +0x6e, 0x6b, 0x61, 0x72, 0x61, 0x6b, 0x61, 0x73, 0x6b, 0x65, 0x79, 0x65, +0x6e, 0x6b, 0x65, 0x69, 0x6d, 0x61, 0x6e, 0x63, 0x69, 0x6b, 0x61, 0x67, +0x6f, 0x63, 0x68, 0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61, 0x6b, 0x6f, +0x73, 0x1e6d, 0x61, 0x20, 0x72, 0x69, 0x6b, 0x61, 0x6b, 0x72, 0x65, 0x73, +0x1e6d, 0x6f, 0x6e, 0x6b, 0x75, 0x61, 0x61, 0x62, 0x61, 0x6b, 0x79, 0x75, +0x72, 0x61, 0x73, 0x6f, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x73, +0x61, 0x76, 0x6e, 0x1e0d, 0x61, 0x6f, 0x73, 0x6e, 0x1e0d, 0x61, 0x6f, 0x73, +0x6f, 0x6e, 0x20, 0x6b, 0x72, 0x12b, 0x6b, 0x1e0d, 0x65, 0x6e, 0x76, 0x65, +0x72, 0x1e0d, 0x65, 0x1e6d, 0x72, 0x6f, 0x69, 0x1e6d, 0x1e0d, 0x6f, 0x6d, 0x69, +0x6e, 0x69, 0x6b, 0x61, 0x65, 0x1e0d, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x6e, +0x65, 0x69, 0x72, 0x75, 0x6e, 0x65, 0x70, 0x65, 0x65, 0x6c, 0x20, 0x73, +0x61, 0x6c, 0x76, 0x61, 0x1e0d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x72, 0x74, +0x20, 0x6e, 0x65, 0x6c, 0x73, 0x6e, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, +0x65, 0x6a, 0x61, 0x67, 0x6c, 0x61, 0x73, 0x20, 0x62, 0x61, 0x79, 0x67, +0x6f, 0x6f, 0x73, 0x20, 0x62, 0x65, 0x67, 0x72, 0x61, 0x6e, 0x1e0d, 0x20, +0x1e6d, 0x75, 0x72, 0x6b, 0x67, 0x72, 0x65, 0x6e, 0x61, 0x1e0d, 0x61, 0x67, +0x75, 0x61, 0x1e0d, 0x65, 0x6c, 0x6f, 0x75, 0x70, 0x65, 0x67, 0x75, 0x61, +0x74, 0x65, 0x6d, 0x61, 0x6c, 0x61, 0x67, 0x75, 0x61, 0x6a, 0x61, 0x6b, +0x69, 0x6c, 0x67, 0x75, 0x79, 0x61, 0x6e, 0x61, 0x68, 0x65, 0x6c, 0x69, +0x70, 0x61, 0x6b, 0x73, 0x68, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x69, 0x6e, +0x1e0d, 0x69, 0x61, 0x6e, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x6e, 0x6f, +0x6b, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, +0x6d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, +0x69, 0x79, 0x61, 0x6e, 0x61, 0x70, 0x69, 0x1e6d, 0x74, 0x72, 0x73, 0x62, +0x65, 0x72, 0x67, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, +0x61, 0x1e6d, 0x65, 0x6c, 0x6c, 0x20, 0x73, 0x69, 0x74, 0x79, 0x2c, 0x20, +0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69, 0x76, 0x69, +0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69, +0x6e, 0x63, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, +0x61, 0x6e, 0x61, 0x76, 0x69, 0x6e, 0x61, 0x6d, 0x61, 0x6b, 0x2c, 0x20, +0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x69, 0x6e, 0x16b, 0x76, +0x69, 0x6b, 0x69, 0x6b, 0x61, 0x6c, 0x75, 0x69, 0x1e6d, 0x6a, 0x61, 0x6d, +0x61, 0x69, 0x6b, 0x61, 0x6a, 0x75, 0x6e, 0x6f, 0x76, 0x6c, 0x6f, 0x75, +0x69, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x69, 0x73, +0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x6b, 0x65, 0x6e, 0x1e6d, 0x75, 0x6b, +0x12b, 0x6b, 0x72, 0x65, 0x6c, 0x65, 0x6e, 0x1e0d, 0x65, 0x69, 0x6b, 0x6c, +0x61, 0x20, 0x70, 0x61, 0x6a, 0x6c, 0x6f, 0x73, 0x20, 0x61, 0x6e, 0x6a, +0x65, 0x6c, 0x65, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x70, 0x72, +0x69, 0x6e, 0x63, 0x2019, 0x73, 0x20, 0x6b, 0x75, 0x76, 0x61, 0x1e6d, 0x61, +0x72, 0x6d, 0x61, 0x73, 0x12b, 0x6f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x75, +0x61, 0x6d, 0x61, 0x6e, 0x61, 0x75, 0x73, 0x6d, 0x61, 0x72, 0x69, 0x67, +0x6f, 0x1e6d, 0x6d, 0x61, 0x72, 0x1e6d, 0x69, 0x6e, 0x69, 0x6b, 0x6d, 0x61, +0x1e6d, 0x61, 0x6d, 0x6f, 0x72, 0x6f, 0x73, 0x6d, 0x61, 0x73, 0x61, 0x1e6d, +0x6c, 0x61, 0x6e, 0x6d, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x12b, 0x6d, +0x65, 0x72, 0x69, 0x1e0d, 0x61, 0x6d, 0x65, 0x1e6d, 0x6c, 0x61, 0x6b, 0x61, +0x1e6d, 0x6c, 0x61, 0x6d, 0x65, 0x6b, 0x73, 0x69, 0x63, 0x6f, 0x20, 0x73, +0x69, 0x1e6d, 0x79, 0x6d, 0x69, 0x6b, 0x76, 0x69, 0x6c, 0xf5, 0x6d, 0x6f, +0x6e, 0x6b, 0x1e6d, 0x6f, 0x6e, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x65, 0x72, 0x72, +0x65, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x65, 0x76, 0x69, 0x64, 0x69, 0x6f, 0x6d, +0x6f, 0x6e, 0x1e6d, 0x73, 0x65, 0x72, 0x72, 0x65, 0x1e6d, 0x6e, 0x61, 0x73, +0x61, 0x75, 0x6e, 0x69, 0x79, 0x75, 0x20, 0x79, 0x6f, 0x72, 0x6b, 0x6e, +0x6f, 0x72, 0x6f, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x79, 0x75, 0x6c, 0x61, +0x2c, 0x20, 0x75, 0x74, 0x74, 0x61, 0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f, +0x1e6d, 0x61, 0x6d, 0x61, 0x1e0d, 0x69, 0x6e, 0x12b, 0x20, 0x75, 0x74, 0x74, +0x61, 0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x65, 0x75, +0x20, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x2c, 0x20, 0x75, 0x74, 0x74, 0x61, +0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x16b, 0x6b, 0x6f, +0x6a, 0x69, 0x6e, 0x61, 0x67, 0x61, 0x70, 0x61, 0x6e, 0x61, 0x6d, 0x61, +0x70, 0x61, 0x72, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x62, 0x6f, 0x70, 0x69, +0x6e, 0x69, 0x6b, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x61, 0x75, 0x2d, +0x70, 0x72, 0x69, 0x6e, 0x73, 0x65, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x61, +0x70, 0x20, 0x73, 0x70, 0x61, 0x69, 0x6e, 0x70, 0x6f, 0x72, 0x1e6d, 0x70, +0x20, 0x76, 0x65, 0x6c, 0x68, 0x6f, 0x70, 0x75, 0x65, 0x72, 0x74, 0x6f, +0x20, 0x72, 0x69, 0x6b, 0x6f, 0x70, 0x75, 0x1e47, 0x1e6d, 0x61, 0x20, 0x65, +0x72, 0x65, 0x6e, 0x61, 0x73, 0x72, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x20, +0x69, 0x6e, 0x6c, 0x65, 0x64, 0x1e6d, 0x72, 0x65, 0x73, 0x69, 0x70, 0x69, +0x72, 0x65, 0x6a, 0x69, 0x6e, 0x61, 0x72, 0x65, 0x6a, 0x61, 0x6c, 0x79, +0x75, 0x1e6d, 0x72, 0x69, 0x6f, 0x20, 0x62, 0x72, 0x61, 0x6e, 0x6b, 0x6f, +0x73, 0x61, 0x74, 0x61, 0x72, 0x69, 0x73, 0x61, 0x6e, 0x1e6d, 0x69, 0x61, +0x67, 0x6f, 0x73, 0x65, 0x6e, 0x74, 0x6f, 0x20, 0x1e0d, 0x6f, 0x6d, 0x69, +0x6e, 0x67, 0x6f, 0x73, 0x61, 0x6f, 0x20, 0x70, 0x61, 0x75, 0x6c, 0x6f, +0x69, 0x1e6d, 0x6f, 0x6b, 0x6f, 0x1e6d, 0x6f, 0x72, 0x6d, 0x69, 0x1e6d, 0x73, +0x69, 0x74, 0x6b, 0x61, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x62, 0x61, 0x72, +0x74, 0x65, 0x6c, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x6a, +0x6f, 0x6e, 0x73, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6b, 0x69, 0x1e6d, 0x1e6d, +0x73, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x75, 0x73, 0x69, 0x61, 0x73, +0x65, 0x6e, 0x1e6d, 0x20, 0x74, 0x6f, 0x6d, 0x61, 0x73, 0x73, 0x65, 0x6e, +0x1e6d, 0x20, 0x76, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x1e6d, 0x73, 0x76, 0x69, +0x70, 0x1e6d, 0x20, 0x6b, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x1e6d, 0x74, 0x65, +0x67, 0x75, 0x74, 0x75, 0x6c, 0x65, 0x74, 0x69, 0x68, 0x76, 0x61, 0x6e, +0x61, 0x1e6d, 0x6f, 0x72, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x1e6d, 0x6f, 0x72, 0x1e6d, +0x6f, 0x6c, 0x61, 0x76, 0x61, 0x6e, 0x6b, 0x16b, 0x76, 0x65, 0x72, 0x76, +0x68, 0x61, 0x69, 0x1e6d, 0x68, 0x6f, 0x72, 0x73, 0x76, 0x69, 0x6e, 0x6e, +0x69, 0x70, 0x65, 0x67, 0x79, 0x61, 0x6b, 0x75, 0x1e6d, 0x61, 0x1e6d, 0x6b, +0x65, 0x73, 0x65, 0x65, 0x1e0d, 0x65, 0x76, 0x69, 0x73, 0x1e0d, 0x79, 0x75, +0x6d, 0x6f, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x20, 0x75, 0x72, 0x76, 0x69, +0x6c, 0x6c, 0x6d, 0x65, 0x6b, 0x76, 0x61, 0x72, 0x69, 0x6d, 0x61, 0x76, +0x73, 0x6f, 0x6e, 0x6d, 0x65, 0x6b, 0x20, 0x6d, 0x75, 0x72, 0x1e0d, 0x6f, +0x70, 0x61, 0x6c, 0x6d, 0x65, 0x72, 0x72, 0x6f, 0x74, 0x65, 0x72, 0x61, +0x73, 0x79, 0x6f, 0x76, 0x61, 0x1e6d, 0x72, 0x6f, 0x6c, 0x6c, 0x76, 0x6f, +0x73, 0x1e6d, 0x6f, 0x6b, 0x6c, 0x6e, 0x67, 0x79, 0x61, 0x72, 0x62, 0x79, +0x65, 0x6e, 0x65, 0x1e0d, 0x65, 0x6e, 0x61, 0x6c, 0x6d, 0x61, 0x1e6d, 0x79, +0x61, 0x6d, 0x6d, 0x61, 0x6e, 0x61, 0x6e, 0x61, 0x1e0d, 0x69, 0x72, 0x61, +0x6b, 0x74, 0x61, 0x75, 0x61, 0x61, 0x6b, 0x74, 0x6f, 0x62, 0x65, 0x61, +0x73, 0x67, 0x61, 0x62, 0x61, 0x1e6d, 0x61, 0x74, 0x61, 0x72, 0x61, 0x75, +0x62, 0x61, 0x67, 0x64, 0x61, 0x64, 0x62, 0x61, 0x68, 0x72, 0x61, 0x69, +0x6e, 0x62, 0x61, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b, +0x62, 0x61, 0x72, 0x6e, 0x61, 0x75, 0x6c, 0x62, 0x65, 0x69, 0x72, 0x75, +0x74, 0x62, 0x69, 0x73, 0x6b, 0x65, 0x6b, 0x62, 0x72, 0x75, 0x6e, 0x65, +0x69, 0x63, 0x69, 0x74, 0x61, 0x6b, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x6f, +0x1e0d, 0x61, 0x6d, 0x61, 0x73, 0x6b, 0x75, 0x73, 0x1e0d, 0x69, 0x6c, 0x69, +0x64, 0x75, 0x62, 0x61, 0x69, 0x64, 0x75, 0x73, 0x61, 0x6d, 0x62, 0x65, +0x70, 0x61, 0x6d, 0x61, 0x67, 0x75, 0x73, 0x74, 0x61, 0x67, 0x61, 0x6a, +0x61, 0x68, 0x65, 0x62, 0x72, 0x6f, 0x6e, 0x68, 0x6f, 0x20, 0x63, 0x69, +0x20, 0x6d, 0x69, 0x6e, 0x68, 0x20, 0x73, 0x69, 0x74, 0x69, 0x68, 0x6f, +0x6e, 0x67, 0x20, 0x6b, 0x6f, 0x6e, 0x67, 0x69, 0x72, 0x6b, 0x75, 0x1e6d, +0x73, 0x6b, 0x6a, 0x61, 0x79, 0x61, 0x70, 0x75, 0x72, 0x61, 0x6a, 0x65, +0x72, 0x75, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x6b, 0x61, 0x62, 0x75, 0x6c, +0x6b, 0x61, 0x6d, 0x63, 0x61, 0x1e6d, 0x6b, 0x61, 0x6b, 0x61, 0x72, 0x61, +0x63, 0x12b, 0x6b, 0x61, 0x1e6d, 0x6d, 0x61, 0x6e, 0x1e0d, 0x75, 0x6b, 0x61, +0x6e, 0x64, 0x69, 0x67, 0x61, 0x6b, 0x6f, 0x6c, 0x6b, 0x61, 0x74, 0x61, +0x6b, 0x72, 0x61, 0x73, 0x6e, 0x65, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x6b, +0x75, 0x61, 0x6c, 0x61, 0x20, 0x6c, 0x75, 0x6d, 0x70, 0x75, 0x72, 0x6b, +0x75, 0x63, 0x69, 0x6e, 0x67, 0x6b, 0x75, 0x76, 0x61, 0x69, 0x74, 0x6d, +0x6b, 0x61, 0x6f, 0x6d, 0x65, 0x67, 0x61, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61, +0x6b, 0x61, 0x73, 0x61, 0x72, 0x6d, 0x61, 0x6e, 0x12b, 0x6c, 0x61, 0x6d, +0x61, 0x73, 0x6b, 0x61, 0x74, 0x6e, 0x69, 0x6b, 0x6f, 0x73, 0x69, 0x79, +0x61, 0x6e, 0x65, 0x76, 0x6f, 0x6b, 0x75, 0x6a, 0x6e, 0x65, 0x1e6d, 0x73, +0x6b, 0x6e, 0x6f, 0x76, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x72, 0x73, 0x6b, +0x70, 0x6e, 0x6f, 0x6d, 0x20, 0x70, 0x65, 0x6e, 0x68, 0x70, 0x6f, 0x6e, +0x1e6d, 0x69, 0x61, 0x6e, 0x61, 0x6b, 0x70, 0x79, 0x6f, 0x6e, 0x67, 0x79, +0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x73, 0x1e6d, 0x61, 0x6e, 0x65, 0x6b, 0x69, +0x6a, 0x75, 0x6f, 0x72, 0x64, 0x61, 0x72, 0x69, 0x79, 0x61, 0x64, 0x73, +0x61, 0x68, 0x61, 0x6c, 0x69, 0x6e, 0x73, 0x61, 0x6d, 0x61, 0x72, 0x6b, +0x61, 0x6e, 0x64, 0x73, 0x65, 0x6f, 0x6c, 0x73, 0x65, 0x6e, 0x67, 0x61, +0x69, 0x73, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x73, 0x72, 0x65, +0x1e0d, 0x6e, 0x65, 0x6b, 0x6f, 0x6c, 0x79, 0x6d, 0x73, 0x6b, 0x74, 0x61, +0x69, 0x70, 0x65, 0x69, 0x74, 0x61, 0x73, 0x6b, 0x65, 0x6e, 0x1e6d, 0x74, +0x62, 0x69, 0x6c, 0x69, 0x73, 0x69, 0x74, 0x65, 0x68, 0x72, 0x61, 0x6e, +0x74, 0x69, 0x6d, 0x70, 0x68, 0x75, 0x1e6d, 0x6f, 0x6b, 0x79, 0x6f, 0x1e6d, +0x6f, 0x6d, 0x73, 0x6b, 0x75, 0x6c, 0x61, 0x6e, 0x62, 0x61, 0x1e6d, 0x61, +0x72, 0x75, 0x72, 0x75, 0x6d, 0x63, 0x69, 0x79, 0x75, 0x73, 0x74, 0x2d, +0x6e, 0x65, 0x72, 0x61, 0x76, 0x69, 0x65, 0x6e, 0x1e6d, 0x69, 0x61, 0x61, +0x6e, 0x76, 0x6c, 0x61, 0x1e0d, 0x69, 0x76, 0x6f, 0x73, 0x1e6d, 0x6f, 0x6b, +0x79, 0x61, 0x6b, 0x75, 0x1e6d, 0x73, 0x6b, 0x79, 0x61, 0x6e, 0x67, 0x6f, +0x6e, 0x79, 0x69, 0x6b, 0x61, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x62, 0x75, +0x72, 0x67, 0x79, 0x65, 0x72, 0x65, 0x76, 0x61, 0x6e, 0x61, 0x6a, 0x6f, +0x72, 0x65, 0x73, 0x62, 0x65, 0x72, 0x6d, 0x16b, 0x64, 0x61, 0x6b, 0x65, +0x6e, 0x65, 0x72, 0x69, 0x6b, 0x65, 0x70, 0x20, 0x76, 0x65, 0x72, 0x1e0d, +0x65, 0x70, 0x65, 0x72, 0x6f, 0x6d, 0x61, 0x1e0d, 0x69, 0x65, 0x72, 0x61, +0x72, 0x65, 0x79, 0x6b, 0x79, 0x61, 0x76, 0x69, 0x6b, 0x64, 0x6b, 0x69, +0x1e47, 0x20, 0x6a, 0x6f, 0x72, 0x6a, 0x69, 0x61, 0x73, 0x65, 0x6e, 0x74, +0x20, 0x68, 0x65, 0x6c, 0x65, 0x6e, 0x61, 0x73, 0x1e6d, 0x61, 0x6e, 0x6c, +0x69, 0x61, 0x65, 0x64, 0x69, 0x6c, 0x65, 0x69, 0x64, 0x62, 0x72, 0x69, +0x73, 0x62, 0x61, 0x6e, 0x65, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, +0x68, 0x69, 0x6c, 0x6c, 0x1e0d, 0x61, 0x72, 0x76, 0x69, 0x6e, 0x79, 0x75, +0x6b, 0x6c, 0x61, 0x68, 0x6f, 0x62, 0x61, 0x72, 0x1e6d, 0x6c, 0x69, 0x6e, +0x1e0d, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x6c, 0x6f, 0x72, 0x1e0d, 0x20, 0x68, +0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6c, 0x62, 0x6f, 0x72, 0x6e, 0x65, 0x70, +0x65, 0x72, 0x74, 0x73, 0x79, 0x1e0d, 0x6e, 0x12b, 0x61, 0x6d, 0x73, 0x1e6d, +0x65, 0x72, 0x1e0d, 0x61, 0x6d, 0x61, 0x61, 0x1e47, 0x1e0d, 0x6f, 0x72, 0x61, +0x61, 0x61, 0x73, 0x1e6d, 0x72, 0x61, 0x68, 0x61, 0x6e, 0x65, 0x74, 0x65, +0x6e, 0x73, 0x62, 0x65, 0x6c, 0x67, 0x72, 0x61, 0x1e0d, 0x65, 0x62, 0x65, +0x72, 0x6c, 0x69, 0x6e, 0x62, 0x72, 0x61, 0x1e6d, 0x69, 0x73, 0x6c, 0x61, +0x76, 0x61, 0x62, 0x72, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x73, 0x62, 0x75, +0x6b, 0x61, 0x72, 0x65, 0x73, 0x74, 0x62, 0x75, 0x1e0d, 0x61, 0x70, 0x65, +0x73, 0x74, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x6b, 0x69, +0x73, 0x69, 0x6e, 0x61, 0x75, 0x6b, 0x6f, 0x70, 0x65, 0x6e, 0x68, 0x61, +0x67, 0x65, 0x6e, 0x1e0d, 0x62, 0x6c, 0x69, 0x6e, 0x6a, 0x69, 0x62, 0x72, +0x61, 0x6c, 0x1e6d, 0x61, 0x72, 0x67, 0x65, 0x72, 0x6e, 0x73, 0x69, 0x68, +0x65, 0x6c, 0x73, 0x69, 0x6e, 0x6b, 0x69, 0x61, 0x61, 0x69, 0x6c, 0x20, +0x61, 0x70, 0x20, 0x6d, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x62, +0x75, 0x6c, 0x6a, 0x65, 0x72, 0x73, 0x69, 0x6b, 0x61, 0x6c, 0x69, 0x6e, +0x69, 0x6e, 0x67, 0x72, 0x61, 0x1e0d, 0x6b, 0x69, 0x72, 0x6f, 0x76, 0x6b, +0x69, 0x79, 0x76, 0x6c, 0x69, 0x73, 0x62, 0x6f, 0x6e, 0x6c, 0x79, 0x75, +0x62, 0x6c, 0x79, 0x61, 0x6e, 0x61, 0x6c, 0x6e, 0x1e0d, 0x6e, 0x6c, 0x6b, +0x73, 0x65, 0x6d, 0x62, 0x72, 0x67, 0x6d, 0x65, 0x1e0d, 0x72, 0x69, 0x1e0d, +0x6d, 0x61, 0x6c, 0x1e6d, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61, +0x6d, 0x6d, 0x69, 0x6e, 0x73, 0x6b, 0x6d, 0x6f, 0x6e, 0x61, 0x6b, 0x6f, +0x6d, 0x6f, 0x73, 0x6b, 0x6f, 0x6f, 0x73, 0x6c, 0x6f, 0x70, 0x61, 0x72, +0x69, 0x73, 0x70, 0x1e0d, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x73, 0x61, 0x70, +0x72, 0x61, 0x67, 0x72, 0x69, 0x67, 0x61, 0x73, 0x61, 0x6d, 0x61, 0x72, +0x61, 0x73, 0x61, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x69, 0x6e, 0x6f, 0x73, +0x61, 0x72, 0x61, 0x6a, 0x65, 0x76, 0x6f, 0x73, 0x61, 0x72, 0x61, 0x1e6d, +0x6f, 0x76, 0x73, 0x69, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x70, 0x6f, 0x6c, +0x73, 0x6b, 0x6f, 0x70, 0x69, 0x73, 0x6f, 0x70, 0x69, 0x79, 0x61, 0x73, +0x1e6d, 0x6f, 0x6b, 0x68, 0x6f, 0x6d, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x1e6d, +0x69, 0x72, 0x61, 0x6e, 0x65, 0x75, 0x6c, 0x79, 0x61, 0x6e, 0x6f, 0x76, +0x73, 0x6b, 0x76, 0x61, 0x1e0d, 0x75, 0x6a, 0x76, 0x61, 0x1e6d, 0x69, 0x6b, +0x61, 0x6e, 0x76, 0x69, 0x65, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x6c, 0x6e, +0x69, 0x75, 0x73, 0x76, 0x6f, 0x6c, 0x67, 0x6f, 0x67, 0x72, 0x61, 0x1e0d, +0x76, 0x61, 0x72, 0x73, 0x61, 0x74, 0x65, 0x67, 0x75, 0x73, 0x69, 0x67, +0x61, 0x6c, 0x70, 0x61, 0x6a, 0x75, 0x72, 0x69, 0x63, 0x1e6d, 0x61, 0x6e, +0x61, 0x6e, 0x61, 0x72, 0x69, 0x76, 0x63, 0x68, 0x61, 0x67, 0x6f, 0x73, +0x6b, 0x72, 0x69, 0x73, 0x1e6d, 0x6d, 0x61, 0x73, 0x6b, 0x6f, 0x6b, 0x6f, +0x73, 0x6b, 0x6f, 0x6d, 0x6f, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x67, 0x75, +0x65, 0x6c, 0x65, 0x6e, 0x6d, 0x61, 0x68, 0x65, 0x6d, 0x61, 0x6c, 0x64, +0x69, 0x76, 0x65, 0x73, 0x6d, 0x61, 0x75, 0x72, 0x69, 0x73, 0x69, 0x75, +0x73, 0x6d, 0x61, 0x79, 0x6f, 0x1e6d, 0x72, 0x65, 0x75, 0x6e, 0x69, 0x6f, +0x6e, 0x61, 0x70, 0x69, 0x61, 0x101, 0x6b, 0x6c, 0x61, 0x6e, 0x1e0d, 0x62, +0x6f, 0x75, 0x67, 0x61, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x63, 0x65, 0x1e6d, +0x61, 0x6d, 0x63, 0x16b, 0x6b, 0x12b, 0x73, 0x74, 0x65, 0x72, 0x69, 0x70, +0x65, 0x1e6d, 0x65, 0x70, 0x61, 0x6b, 0x61, 0x6f, 0x70, 0x6f, 0x70, 0x69, +0x6a, 0x69, 0x70, 0x75, 0x6e, 0x61, 0x70, 0x75, 0x74, 0x69, 0x67, 0x61, +0x6c, 0x61, 0x70, 0x61, 0x67, 0x6f, 0x73, 0x67, 0x61, 0x6d, 0x62, 0x69, +0x65, 0x72, 0x67, 0x75, 0x61, 0x1e0d, 0x61, 0x6c, 0x6b, 0x65, 0x6e, 0x61, +0x6c, 0x6b, 0x61, 0x6e, 0x1e6d, 0x6f, 0x6e, 0x6b, 0x69, 0x72, 0x69, 0x74, +0x69, 0x6d, 0x61, 0x74, 0x69, 0x6b, 0x69, 0x73, 0x72, 0x61, 0x65, 0x6b, +0x76, 0x61, 0x6a, 0x61, 0x6c, 0x65, 0x69, 0x6e, 0x6d, 0x61, 0x6a, 0x75, +0x72, 0x6f, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x73, 0x61, 0x73, 0x6d, 0x69, +0x1e0d, 0x76, 0x61, 0x79, 0x6e, 0x61, 0x75, 0x72, 0x75, 0x6e, 0x69, 0x75, +0x65, 0x6e, 0x6f, 0x72, 0x70, 0x6f, 0x6b, 0x6e, 0x75, 0x6d, 0x69, 0x65, +0x70, 0x61, 0x6e, 0x67, 0x6f, 0x20, 0x70, 0x61, 0x6e, 0x67, 0x6f, 0x70, +0x61, 0x6c, 0x61, 0x75, 0x70, 0x69, 0x1e6d, 0x6b, 0x65, 0x72, 0x6e, 0x70, +0x6f, 0x6e, 0x70, 0x65, 0x69, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x6d, 0x6f, +0x72, 0x65, 0x73, 0x62, 0x69, 0x72, 0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e, +0x67, 0x61, 0x73, 0x61, 0x69, 0x70, 0x61, 0x6e, 0x1e6d, 0x61, 0x68, 0x69, +0x1e6d, 0x69, 0x74, 0x61, 0x72, 0x61, 0x76, 0x61, 0x1e6d, 0x6f, 0x6e, 0x67, +0x61, 0x1e6d, 0x61, 0x70, 0x75, 0x76, 0x65, 0x6b, 0x76, 0x61, 0x6c, 0x6c, +0x69, 0x73, 0x92c, 0x94d, 0x92f, 0x93e, 0x928, 0x94d, 0x91c, 0x941, 0x932, 0x92a, +0x93c, 0x94d, 0x930, 0x940, 0x91f, 0x93e, 0x909, 0x928, 0x915, 0x93e, 0x930, 0x94d, +0x924, 0x941, 0x92e, 0x915, 0x93f, 0x902, 0x938, 0x93e, 0x938, 0x93e, 0x932, 0x941, +0x92c, 0x941, 0x92e, 0x92c, 0x93e, 0x938, 0x940, 0x92e, 0x94d, 0x2d, 0x92c, 0x93e, +0x92c, 0x93e, 0x928, 0x947, 0x92e, 0x94b, 0x917, 0x93e, 0x926, 0x93f, 0x938, 0x941, +0x928, 0x93e, 0x907, 0x930, 0x94b, 0x92c, 0x93f, 0x928, 0x941, 0x906, 0x915, 0x91a, +0x949, 0x91f, 0x938, 0x94d, 0x92f, 0x93e, 0x928, 0x20, 0x939, 0x94d, 0x935, 0x93e, +0x928, 0x938, 0x94d, 0x92f, 0x93e, 0x928, 0x20, 0x932, 0x942, 0x924, 0x93f, 0x909, +0x938, 0x941, 0x906, 0x907, 0x92f, 0x93e, 0x90f, 0x938, 0x928, 0x938, 0x93f, 0x92f, +0x949, 0x928, 0x92c, 0x94d, 0x932, 0x93e, 0x902, 0x2d, 0x938, 0x947, 0x92c, 0x932, +0x94b, 0x928, 0x915, 0x947, 0x92e, 0x94d, 0x92c, 0x94d, 0x930, 0x93f, 0x91c, 0x20, +0x92c, 0x947, 0x915, 0x94d, 0x92f, 0x93e, 0x92e, 0x94d, 0x92a, 0x94b, 0x20, 0x917, +0x94d, 0x930, 0x93e, 0x902, 0x921, 0x947, 0x915, 0x94d, 0x92f, 0x93e, 0x928, 0x915, +0x941, 0x928, 0x938, 0x93f, 0x915, 0x93e, 0x917, 0x94b, 0x921, 0x947, 0x928, 0x92e, +0x93e, 0x930, 0x94d, 0x915, 0x938, 0x949, 0x928, 0x924, 0x93f, 0x930, 0x941, 0x928, +0x947, 0x92a, 0x947, 0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x928, 0x947, +0x932, 0x94d, 0x938, 0x928, 0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x93e, 0x932, +0x947, 0x91c, 0x93c, 0x93e, 0x939, 0x947, 0x932, 0x93f, 0x92a, 0x947, 0x915, 0x94d, +0x938, 0x907, 0x915, 0x93e, 0x932, 0x941, 0x924, 0x93f, 0x91f, 0x915, 0x94d, 0x930, +0x93e, 0x932, 0x947, 0x928, 0x94d, 0x921, 0x93f, 0x91c, 0x93f, 0x915, 0x92e, 0x928, +0x94b, 0x938, 0x92e, 0x947, 0x930, 0x93f, 0x917, 0x94b, 0x91f, 0x92c, 0x94d, 0x92f, +0x942, 0x932, 0x93e, 0x2c, 0x20, 0x909, 0x924, 0x949, 0x930, 0x949, 0x20, 0x921, +0x915, 0x94b, 0x91f, 0x93e, 0x92e, 0x93e, 0x926, 0x93f, 0x928, 0x940, 0x20, 0x909, +0x924, 0x949, 0x930, 0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x928, 0x94d, +0x92f, 0x942, 0x20, 0x938, 0x93e, 0x932, 0x947, 0x92e, 0x2c, 0x20, 0x909, 0x924, +0x949, 0x930, 0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x913, 0x915, 0x93e, +0x91c, 0x940, 0x928, 0x93e, 0x917, 0x93e, 0x92a, 0x93c, 0x940, 0x928, 0x93f, 0x915, +0x94d, 0x938, 0x92a, 0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x911, 0x92a, 0x93c, 0x20, +0x938, 0x94d, 0x92a, 0x947, 0x928, 0x930, 0x947, 0x938, 0x93e, 0x907, 0x92a, 0x93c, +0x938, 0x947, 0x928, 0x94d, 0x91f, 0x93e, 0x930, 0x947, 0x92e, 0x938, 0x947, 0x902, +0x924, 0x93f, 0x906, 0x917, 0x94b, 0x938, 0x947, 0x902, 0x91f, 0x20, 0x92c, 0x93e, +0x930, 0x94d, 0x924, 0x947, 0x932, 0x947, 0x92e, 0x93f, 0x938, 0x947, 0x902, 0x91f, +0x20, 0x924, 0x949, 0x92e, 0x938, 0x938, 0x94d, 0x935, 0x93f, 0x92a, 0x93c, 0x94d, +0x91f, 0x20, 0x915, 0x930, 0x902, 0x91f, 0x935, 0x94d, 0x92f, 0x93e, 0x928, 0x94d, +0x915, 0x942, 0x935, 0x930, 0x92e, 0x94d, 0x92f, 0x93e, 0x915, 0x92e, 0x941, 0x930, +0x94d, 0x921, 0x94b, 0x932, 0x949, 0x928, 0x94d, 0x917, 0x92f, 0x930, 0x92c, 0x94d, +0x92f, 0x947, 0x928, 0x905, 0x938, 0x94d, 0x917, 0x93e, 0x92c, 0x93e, 0x924, 0x92c, +0x94d, 0x92f, 0x93e, 0x902, 0x917, 0x915, 0x949, 0x915, 0x92c, 0x93f, 0x938, 0x94d, +0x915, 0x947, 0x915, 0x92c, 0x94d, 0x930, 0x942, 0x928, 0x947, 0x924, 0x93f, 0x924, +0x94d, 0x938, 0x93f, 0x924, 0x93e, 0x926, 0x941, 0x92c, 0x924, 0x93f, 0x926, 0x941, +0x938, 0x93e, 0x902, 0x92c, 0x947, 0x92a, 0x93c, 0x93e, 0x92e, 0x93e, 0x917, 0x941, +0x938, 0x94d, 0x924, 0x93e, 0x92f, 0x947, 0x930, 0x941, 0x938, 0x932, 0x947, 0x92e, +0x915, 0x93e, 0x921, 0x93f, 0x902, 0x917, 0x93e, 0x92a, 0x928, 0x949, 0x92e, 0x20, +0x92a, 0x947, 0x928, 0x94d, 0x939, 0x915, 0x93f, 0x91c, 0x93f, 0x932, 0x949, 0x930, +0x94d, 0x921, 0x93e, 0x938, 0x93e, 0x915, 0x93e, 0x932, 0x93f, 0x928, 0x938, 0x902, +0x918, 0x93e, 0x924, 0x93f, 0x924, 0x93e, 0x924, 0x93f, 0x92a, 0x947, 0x924, 0x93f, +0x924, 0x93e, 0x938, 0x915, 0x902, 0x924, 0x91f, 0x94d, 0x2d, 0x92c, 0x93f, 0x932, +0x93f, 0x938, 0x93f, 0x92f, 0x93e, 0x902, 0x917, 0x949, 0x928, 0x915, 0x94d, 0x92f, +0x93e, 0x928, 0x947, 0x930, 0x940, 0x92a, 0x94d, 0x92f, 0x93e, 0x930, 0x94b, 0x926, +0x93e, 0x945, 0x915, 0x93f, 0x923, 0x93e, 0x945, 0x20, 0x91c, 0x93e, 0x945, 0x930, +0x94d, 0x91c, 0x93f, 0x92f, 0x93e, 0x938, 0x94d, 0x91f, 0x94d, 0x92f, 0x93e, 0x928, +0x932, 0x940, 0x906, 0x938, 0x94d, 0x91f, 0x94d, 0x930, 0x93e, 0x915, 0x93e, 0x928, +0x90f, 0x924, 0x947, 0x928, 0x94d, 0x938, 0x906, 0x907, 0x932, 0x20, 0x911, 0x92a, +0x94d, 0x20, 0x92e, 0x94d, 0x92f, 0x93e, 0x928, 0x938, 0x93f, 0x92e, 0x94d, 0x92a, +0x93c, 0x947, 0x930, 0x94b, 0x92a, 0x94b, 0x932, 0x938, 0x94d, 0x915, 0x94b, 0x92a, +0x94d, 0x92f, 0x947, 0x938, 0x94b, 0x92a, 0x93c, 0x93f, 0x92f, 0x93e, 0x91c, 0x93c, +0x94d, 0x92f, 0x942, 0x930, 0x93f, 0x915, 0x93c, 0x92e, 0x949, 0x930, 0x940, 0x938, +0x938, 0x911, 0x915, 0x932, 0x947, 0x902, 0x921, 0x91a, 0x94d, 0x92f, 0x93e, 0x925, +0x92e, 0x924, 0x93f, 0x938, 0x94d, 0x91f, 0x930, 0x90f, 0x92a, 0x93c, 0x947, 0x91f, +0x92a, 0x93c, 0x93e, 0x915, 0x93e, 0x913, 0x92a, 0x93c, 0x94b, 0x92a, 0x93c, 0x93f, +0x91c, 0x940, 0x92a, 0x93c, 0x94d, 0x92f, 0x942, 0x928, 0x93e, 0x92a, 0x93c, 0x941, +0x91f, 0x940, 0x917, 0x94d, 0x92f, 0x93e, 0x92e, 0x92c, 0x93f, 0x92f, 0x930, 0x915, +0x947, 0x902, 0x91f, 0x928, 0x928, 0x93e, 0x945, 0x909, 0x930, 0x941, 0x928, 0x949, +0x930, 0x92a, 0x93c, 0x949, 0x915, 0x928, 0x949, 0x92e, 0x93f, 0x92f, 0x93e, 0x92a, +0x94b, 0x928, 0x92a, 0x947, 0x924, 0x93f, 0xb0f, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb2c, +0xb4d, 0xb30, 0xb3e, 0xb1c, 0xb3e, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb2c, +0xb41, 0xb1c, 0xb42, 0xb2e, 0xb4d, 0xb2c, 0xb41, 0xb30, 0xb3e, 0xb15, 0xb28, 0xb3e, +0xb15, 0xb4d, 0xb30, 0xb3f, 0xb1c, 0xb3f, 0xb2c, 0xb1f, 0xb3f, 0xb2a, 0xb4d, 0xb30, +0xb3f, 0xb1f, 0xb3e, 0xb09, 0xb28, 0xb4d, 0x200c, 0xb17, 0xb3e, 0xb2c, 0xb30, 0xb4d, +0xb23, 0xb4d, 0xb23, 0xb1c, 0xb39, 0xb3e, 0xb28, 0xb4d, 0xb38, 0xb2c, 0xb30, 0xb4d, +0xb17, 0xb15, 0xb30, 0xb1f, 0xb09, 0xb2e, 0xb4d, 0x200c, 0xb32, 0xb3e, 0xb17, 0xb38, +0xb4d, 0x200c, 0xb32, 0xb3f, 0xb2c, 0xb4d, 0xb30, 0xb47, 0xb71, 0xb3f, 0xb32, 0xb4d, +0xb32, 0xb47, 0xb32, 0xb2e, 0xb4d, 0x200c, 0xb2e, 0xb4d, 0x2d, 0xb2c, 0xb3e, 0xb2c, +0xb3e, 0xb28, 0xb47, 0xb2e, 0xb4b, 0xb17, 0xb3e, 0xb21, 0xb3f, 0xb38, 0xb41, 0xb2e, +0xb28, 0xb30, 0xb4b, 0xb2c, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb07, 0xb30, 0xb2c, 0xb3f, +0xb28, 0xb41, 0xb06, 0xb15, 0xb1a, 0xb1f, 0xb05, 0xb17, 0xb3e, 0xb21, 0xb17, 0xb41, +0xb2a, 0xb30, 0xb4d, 0xb1f, 0x2d, 0xb28, 0xb71, 0xb38, 0xb3e, 0xb05, 0x20, 0xb1f, +0xb2e, 0xb47, 0xb24, 0xb4d, 0xb30, 0xb3f, 0xb2a, 0xb32, 0xb3f, 0xb71, 0xb3f, 0xb23, +0xb4d, 0xb21, 0xb39, 0xb15, 0xb4d, 0xb2c, 0xb41, 0xb0f, 0xb28, 0xb38, 0xb4d, 0x20, +0xb06, 0xb07, 0xb30, 0xb47, 0xb38, 0xb4d, 0xb15, 0xb3e, 0xb3c, 0xb1f, 0xb3e, 0xb2e, +0xb3e, 0xb15, 0xb3e, 0xb01, 0xb15, 0xb4b, 0xb21, 0xb4b, 0xb2c, 0xb3e, 0xb1c, 0xb41, +0xb1c, 0xb4b, 0xb0f, 0xb32, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb4d, 0xb05, 0xb1c, 0xb3e, +0xb2e, 0xb47, 0xb23, 0xb4d, 0xb21, 0xb1c, 0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb4b, 0x20, +0xb17, 0xb3e, 0xb32, 0xb47, 0xb17, 0xb4b, 0xb38, 0xb38, 0xb3e, 0xb32, 0xb4d, 0xb1f, +0xb3e, 0xb38, 0xb3e, 0xb5f, 0xb3e, 0xb28, 0xb4d, 0x20, 0xb71, 0xb3e, 0xb28, 0xb4d, +0xb38, 0xb5f, 0xb3e, 0xb28, 0x20, 0xb32, 0xb41, 0xb07, 0xb38, 0xb1f, 0xb4b, 0xb15, +0xb41, 0xb2e, 0xb28, 0xb09, 0xb38, 0xb41, 0xb06, 0xb07, 0xb5f, 0xb3e, 0xb05, 0xb30, +0xb41, 0xb2c, 0xb3e, 0xb2c, 0xb3e, 0xb30, 0xb2c, 0xb3e, 0xb21, 0xb38, 0xb2c, 0xb4d, +0xb32, 0xb3e, 0xb19, 0xb4d, 0xb15, 0x2d, 0xb38, 0xb3e, 0xb2c, 0xb32, 0xb28, 0xb4d, +0xb2c, 0xb4b, 0xb06, 0x20, 0xb71, 0xb3f, 0xb38, 0xb4d, 0xb1f, 0xb3e, 0xb2c, 0xb17, +0xb1f, 0xb3e, 0xb2c, 0xb07, 0xb38, 0xb47, 0xb15, 0xb3e, 0xb2e, 0xb4d, 0xb2a, 0x20, +0xb17, 0xb4d, 0xb30, 0xb3e, 0xb23, 0xb4d, 0xb21, 0xb47, 0xb38, 0xb3f, 0xb15, 0xb3e, +0xb17, 0xb15, 0xb37, 0xb4d, 0xb1f, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb15, 0xb3e, 0xb15, +0xb4d, 0xb30, 0xb47, 0xb38, 0xb4d, 0x200d, 0xb1f, 0xb28, 0xb21, 0xb47, 0xb28, 0xb71, +0xb3f, 0xb30, 0xb4d, 0xb21, 0xb47, 0xb1f, 0xb4d, 0xb30, 0xb07, 0xb1f, 0xb4d, 0xb21, +0xb2e, 0xb3f, 0xb28, 0xb3f, 0xb15, 0xb3e, 0xb0f, 0xb21, 0xb4d, 0x200d, 0xb2e, 0xb28, +0xb1f, 0xb28, 0xb4d, 0xb0f, 0xb32, 0xb4d, 0x20, 0xb38, 0xb3e, 0xb32, 0xb71, 0xb3e, +0xb21, 0xb4b, 0xb30, 0xb4d, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0x20, 0xb28, 0xb47, 0xb32, +0xb38, 0xb28, 0xb4d, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb32, 0xb47, 0xb1c, 0xb3e, 0xb17, +0xb41, 0xb06, 0xb21, 0xb47, 0xb32, 0xb09, 0xb2a, 0xb47, 0xb17, 0xb41, 0xb06, 0xb24, +0xb47, 0xb2e, 0xb3e, 0xb32, 0xb3e, 0xb39, 0xb3e, 0xb71, 0xb28, 0xb3e, 0xb39, 0xb47, +0xb30, 0xb2e, 0xb38, 0xb3f, 0xb32, 0xb4b, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, +0xb28, 0xb3e, 0xb2a, 0xb32, 0xb3f, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb30, 0xb47, 0xb28, +0xb17, 0x2c, 0x20, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb71, +0xb47, 0xb71, 0xb3e, 0xb5f, 0x2c, 0x20, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, +0xb28, 0xb3e, 0xb07, 0xb28, 0xb41, 0xb71, 0xb3f, 0xb15, 0xb4d, 0xb32, 0xb09, 0xb07, +0xb38, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb2e, 0xb23, 0xb4d, 0xb1f, 0xb3f, +0xb38, 0xb47, 0xb32, 0x2c, 0x20, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb09, 0xb15, +0xb3f, 0xb15, 0xb47, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb32, 0xb47, 0xb23, 0xb4d, 0xb21, +0xb3f, 0xb1c, 0xb3f, 0xb15, 0xb2e, 0xb3e, 0xb38, 0xb3f, 0xb05, 0xb2e, 0xb3e, 0xb30, +0xb3f, 0xb17, 0xb1f, 0xb4d, 0xb2e, 0xb3e, 0xb1f, 0xb3e, 0xb2e, 0xb30, 0xb38, 0xb4d, +0xb2e, 0xb3e, 0xb1c, 0xb3e, 0xb1f, 0xb32, 0xb3e, 0xb28, 0xb4d, 0xb2e, 0xb3f, 0xb15, +0xb4d, 0xb35, 0xb47, 0xb32, 0xb28, 0xb4d, 0xb2e, 0xb3e, 0xb28, 0xb15, 0xb1f, 0xb28, +0xb4d, 0xb2e, 0xb28, 0xb1f, 0xb47, 0xb30, 0xb3f, 0xb0f, 0xb2e, 0xb23, 0xb4d, 0xb1f, +0xb47, 0xb2d, 0xb3f, 0xb21, 0xb3f, 0xb05, 0xb2e, 0xb28, 0xb1f, 0xb38, 0xb47, 0xb30, +0xb30, 0xb3e, 0xb1f, 0xb4d, 0xb28, 0xb4d, 0xb5f, 0xb41, 0x20, 0xb5f, 0xb30, 0xb4d, +0xb15, 0xb4d, 0xb28, 0xb30, 0xb39, 0xb4d, 0xb28, 0xb2c, 0xb47, 0xb09, 0xb32, 0xb3e, +0xb39, 0x2c, 0x20, 0xb09, 0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15, +0xb1f, 0xb3e, 0xb15, 0xb47, 0xb28, 0xb4d, 0xb26, 0xb4d, 0xb30, 0x2c, 0x20, 0xb09, +0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb28, 0xb4d, +0xb5f, 0xb41, 0x20, 0xb38, 0xb3e, 0xb32, 0xb47, 0xb2e, 0xb4d, 0x2c, 0x20, 0xb09, +0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb05, 0xb1c, +0xb3f, 0xb28, 0xb3e, 0xb17, 0xb3e, 0xb2a, 0xb07, 0xb28, 0xb3f, 0xb15, 0xb4d, 0xb38, +0xb2a, 0xb30, 0xb4d, 0xb1f, 0x2d, 0xb0f, 0xb5f, 0xb41, 0x2d, 0xb2a, 0xb4d, 0xb30, +0xb3f, 0xb28, 0xb4d, 0x200d, 0xb38, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb05, +0xb2b, 0xb4d, 0x20, 0xb38, 0xb4d, 0xb2a, 0xb47, 0xb28, 0xb4d, 0xb2a, 0xb41, 0xb0f, +0xb30, 0xb4d, 0xb24, 0x20, 0xb30, 0xb3f, 0xb15, 0xb30, 0xb47, 0xb38, 0xb3f, 0xb2a, +0xb3f, 0xb30, 0xb3f, 0xb5f, 0x20, 0xb2c, 0xb4d, 0xb30, 0xb3e, 0xb19, 0xb4d, 0xb15, +0xb38, 0xb3e, 0xb28, 0xb4d, 0xb24, 0xb30, 0xb47, 0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb23, +0xb4d, 0xb1f, 0x20, 0xb21, 0xb2e, 0xb3f, 0xb19, 0xb4d, 0xb17, 0xb07, 0xb1f, 0xb4d, +0xb1f, 0xb15, 0xb4d, 0xb35, 0xb30, 0xb1f, 0xb30, 0xb2e, 0xb3f, 0xb1f, 0xb4d, 0xb38, +0xb47, 0xb23, 0xb4d, 0xb1f, 0x20, 0xb2c, 0xb3e, 0xb30, 0xb4d, 0xb24, 0xb47, 0xb32, +0xb47, 0xb2e, 0xb3f, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb15, 0xb3f, +0xb1f, 0xb4d, 0x200d, 0xb38, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e, 0x20, +0xb25, 0xb2e, 0xb3e, 0xb38, 0xb4d, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e, +0x20, 0xb71, 0xb3f, 0xb28, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0xb24, 0xb41, +0xb32, 0xb47, 0xb1f, 0xb30, 0xb23, 0xb4d, 0xb1f, 0xb1f, 0xb30, 0xb1f, 0xb32, 0xb3e, +0xb71, 0xb3e, 0xb19, 0xb4d, 0xb15, 0xb41, 0xb71, 0xb30, 0xb4d, 0xb15, 0xb47, 0xb38, +0xb3f, 0xb21, 0xb47, 0xb71, 0xb3f, 0xb38, 0xb4d, 0xb21, 0xb4d, 0xb5f, 0xb41, 0xb2e, +0xb3e, 0xb23, 0xb4d, 0xb1f, 0x20, 0xb21, 0xb3f, 0x20, 0xb09, 0xb30, 0xb71, 0xb3f, +0xb32, 0xb47, 0xb2e, 0xb15, 0xb4d, 0xb71, 0xb3e, 0xb30, 0xb3f, 0xb2e, 0xb3e, 0xb01, +0xb38, 0xb28, 0xb2e, 0xb4d, 0xb5f, 0xb3e, 0xb15, 0xb2e, 0xb41, 0xb30, 0xb4d, 0xb21, +0xb2a, 0xb3e, 0xb01, 0xb2e, 0xb30, 0xb30, 0xb4b, 0xb24, 0xb47, 0xb30, 0xb3e, 0xb1f, +0xb4b, 0xb32, 0xb4d, 0xb71, 0xb4b, 0xb38, 0xb4d, 0xb24, 0xb15, 0xb4b, 0xb33, 0xb19, +0xb4d, 0xb16, 0xb5f, 0xb3e, 0xb30, 0xb2c, 0xb47, 0xb28, 0xb06, 0xb15, 0xb4d, 0xb1f, +0xb2c, 0xb47, 0xb06, 0xb38, 0xb4d, 0x200d, 0xb17, 0xb3e, 0xb2c, 0xb1f, 0xb4d, 0xb2c, +0xb39, 0xb3e, 0xb30, 0xb47, 0xb28, 0xb2c, 0xb3f, 0xb38, 0xb15, 0xb47, 0xb15, 0xb4d, +0x200c, 0xb26, 0xb41, 0xb38, 0xb3e, 0xb28, 0xb2c, 0xb47, 0xb2a, 0xb3e, 0xb2e, 0xb3e, +0xb17, 0xb41, 0xb38, 0xb4d, 0xb1f, 0xb3e, 0xb39, 0x20, 0xb1a, 0xb3f, 0x20, 0xb2e, +0xb3f, 0xb28, 0xb4d, 0x200c, 0x20, 0xb38, 0xb3f, 0xb1f, 0xb3f, 0xb39, 0xb4b, 0xb71, +0xb21, 0xb4d, 0x200c, 0xb1c, 0xb3e, 0xb15, 0xb30, 0xb4d, 0xb24, 0xb3e, 0xb15, 0xb2c, +0xb41, 0xb32, 0xb4d, 0xb15, 0xb3e, 0xb1f, 0xb2e, 0xb3e, 0xb23, 0xb4d, 0xb21, 0xb41, +0xb15, 0xb3e, 0xb28, 0xb21, 0xb4d, 0xb5f, 0xb3e, 0xb17, 0xb3e, 0xb15, 0xb4d, 0xb30, +0xb3e, 0xb38, 0xb28, 0xb5f, 0xb3e, 0xb30, 0xb38, 0xb4d, 0xb15, 0xb28, 0xb3f, 0xb15, +0xb38, 0xb3f, 0xb06, 0xb28, 0xb71, 0xb15, 0xb41, 0xb1c, 0xb28, 0xb47, 0xb1f, 0xb38, +0xb4d, 0xb15, 0xb28, 0xb71, 0xb38, 0xb3f, 0xb2c, 0xb3f, 0xb30, 0xb38, 0xb4d, 0xb15, +0xb05, 0xb30, 0xb3e, 0xb32, 0xb4d, 0x200c, 0xb2a, 0xb28, 0xb2e, 0xb4d, 0x200c, 0x20, +0xb2a, 0xb47, 0xb28, 0xb39, 0xb2a, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb06, 0xb28, 0xb3e, +0xb15, 0xb4d, 0x200c, 0xb15, 0xb37, 0xb4d, 0xb1f, 0xb28, 0xb47, 0xb15, 0xb40, 0xb1c, +0xb3f, 0xb32, 0xb30, 0xb4d, 0xb21, 0xb3e, 0xb38, 0xb15, 0xb3e, 0xb32, 0xb3f, 0xb28, +0xb4d, 0xb38, 0xb3f, 0xb05, 0xb32, 0xb38, 0xb02, 0xb17, 0xb3e, 0xb07, 0xb38, 0xb4d, +0xb30, 0xb47, 0xb21, 0xb28, 0xb47, 0xb15, 0xb32, 0xb5f, 0xb2e, 0xb38, 0xb4d, 0xb15, +0xb24, 0xb3e, 0xb38, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb24, 0xb3f, 0xb2e, 0xb4d, +0xb2a, 0xb41, 0xb1f, 0xb15, 0xb3f, 0xb05, 0xb1f, 0xb2e, 0xb38, 0xb4d, 0xb15, 0xb5f, +0xb41, 0xb38, 0xb4d, 0x200d, 0xb1f, 0x2d, 0xb28, 0xb47, 0xb30, 0xb3e, 0xb71, 0xb3f, +0xb0f, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb0f, 0xb28, 0xb4d, 0x200c, 0xb71, 0xb4d, 0xb32, +0xb3e, 0xb21, 0xb3f, 0xb71, 0xb37, 0xb4d, 0xb1f, 0xb4b, 0xb15, 0xb4d, 0xb5f, 0xb47, +0xb30, 0xb47, 0xb2c, 0xb3e, 0xb28, 0xb4d, 0xb06, 0xb1c, 0xb30, 0xb47, 0xb38, 0xb4d, +0xb2c, 0xb30, 0xb2e, 0xb41, 0xb21, 0xb3e, 0xb15, 0xb47, 0xb2a, 0xb4d, 0x200c, 0x20, +0xb71, 0xb30, 0xb4d, 0xb26, 0xb47, 0xb2a, 0xb30, 0xb0f, 0xb30, 0xb47, 0xb15, 0xb4d, +0xb5f, 0xb3e, 0xb2c, 0xb3f, 0xb15, 0xb38, 0xb4d, 0x200d, 0xb1f, 0xb3e, 0xb32, 0xb3f, +0xb28, 0xb0f, 0xb21, 0xb3f, 0xb32, 0xb47, 0xb21, 0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb3f, +0xb38, 0xb2c, 0xb28, 0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb4b, 0xb15, 0xb28, 0x20, 0xb39, +0xb3f, 0xb32, 0xb21, 0xb3e, 0xb30, 0xb4d, 0xb71, 0xb3f, 0xb28, 0xb4d, 0xb32, 0xb3f, +0xb23, 0xb4d, 0xb21, 0xb47, 0xb2e, 0xb3e, 0xb28, 0xb32, 0xb30, 0xb4d, 0x200d, 0xb21, +0x20, 0xb39, 0xb3e, 0xb71, 0xb47, 0xb2e, 0xb47, 0xb32, 0xb2c, 0xb4b, 0xb28, 0xb01, +0xb2a, 0xb30, 0xb4d, 0xb24, 0xb06, 0xb2e, 0xb37, 0xb4d, 0xb1f, 0xb4d, 0xb30, 0xb47, +0xb21, 0xb3e, 0xb2e, 0xb4d, 0xb06, 0xb23, 0xb4d, 0xb21, 0xb30, 0xb3e, 0xb06, 0xb38, +0xb4d, 0x200d, 0xb1f, 0xb30, 0xb3e, 0xb15, 0xb3e, 0xb28, 0xb0f, 0xb24, 0xb47, 0xb28, +0xb4d, 0xb38, 0xb2c, 0xb47, 0xb32, 0xb17, 0xb4d, 0xb30, 0xb47, 0xb21, 0xb47, 0xb2c, +0xb4d, 0xb30, 0xb3e, 0xb1f, 0xb3f, 0xb38, 0xb32, 0xb3e, 0xb71, 0xb3e, 0xb2c, 0xb4d, +0xb30, 0xb41, 0xb38, 0xb3f, 0xb32, 0xb4d, 0x200d, 0xb38, 0xb2c, 0xb41, 0xb1a, 0xb3e, +0xb30, 0xb47, 0xb38, 0xb4d, 0xb1f, 0xb2c, 0xb41, 0xb21, 0xb3e, 0xb2a, 0xb47, 0xb38, +0xb4d, 0xb1f, 0xb1a, 0xb3f, 0xb38, 0xb3f, 0xb28, 0xb3e, 0xb09, 0xb15, 0xb2a, 0xb47, +0xb28, 0xb39, 0xb3e, 0xb17, 0xb47, 0xb28, 0xb4d, 0xb06, 0xb07, 0xb32, 0xb4d, 0x20, +0xb05, 0xb2a, 0xb4d, 0x20, 0xb2e, 0xb4d, 0xb5f, 0xb3e, 0xb28, 0xb4d, 0xb15, 0xb3f, +0xb30, 0xb71, 0xb2e, 0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb3e, 0xb39, 0xb47, 0xb2e, 0xb2e, +0xb28, 0xb3e, 0xb15, 0xb05, 0xb38, 0xb32, 0xb4b, 0xb2a, 0xb21, 0xb17, 0xb30, 0xb3f, +0xb15, 0xb3e, 0xb30, 0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb30, 0xb3e, 0xb1c, 0xb47, 0xb2c, +0xb38, 0xb3e, 0xb30, 0xb3e, 0xb1f, 0xb71, 0xb4d, 0xb38, 0xb3f, 0xb2e, 0xb2b, 0xb47, +0xb30, 0xb2a, 0xb32, 0xb4d, 0xb38, 0xb4d, 0xb15, 0xb2a, 0xb5f, 0xb47, 0xb38, 0xb2a, +0xb3f, 0xb5f, 0xb3e, 0xb38, 0xb4d, 0xb1f, 0xb15, 0xb4d, 0x20, 0xb39, 0xb2e, 0xb4d, +0x200c, 0xb1f, 0xb3e, 0xb07, 0xb30, 0xb47, 0xb28, 0xb4d, 0xb5f, 0xb41, 0xb32, 0xb5f, +0xb3e, 0xb28, 0xb71, 0xb38, 0xb4d, 0xb15, 0xb2c, 0xb3e, 0xb21, 0xb41, 0xb1c, 0xb71, +0xb3e, 0xb1f, 0xb3f, 0xb15, 0xb3e, 0xb28, 0xb4d, 0xb71, 0xb3f, 0xb0f, 0xb28, 0xb3e, +0xb71, 0xb3f, 0xb32, 0xb28, 0xb3f, 0xb09, 0xb38, 0xb4d, 0xb71, 0xb32, 0xb17, 0xb17, +0xb4d, 0xb30, 0xb3e, 0xb21, 0xb4d, 0xb16, 0xb4d, 0xb30, 0xb40, 0xb38, 0xb4d, 0x200d, +0xb1f, 0x20, 0xb2e, 0xb3e, 0xb38, 0xb15, 0xb15, 0xb38, 0xb4d, 0x200c, 0xb15, 0xb2e, +0xb30, 0xb15, 0xb47, 0xb30, 0xb17, 0xb41, 0xb32, 0xb47, 0xb28, 0xb2e, 0xb30, 0xb3f, +0xb38, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb5f, 0xb1f, 0xb47, 0xb2c, 0xb17, 0xb47, 0xb28, +0xb4d, 0x200c, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb1a, 0xb3e, 0xb24, 0xb3e, +0xb2e, 0xb4d, 0x200c, 0xb2a, 0xb15, 0xb3e, 0xb05, 0xb2a, 0xb2a, 0xb3f, 0xb1c, 0xb3f, +0xb17, 0xb3e, 0xb32, 0xb3e, 0xb2a, 0xb3e, 0xb17, 0xb38, 0xb15, 0xb47, 0xb23, 0xb4d, +0xb1f, 0xb28, 0xb28, 0xb30, 0xb2a, 0xb15, 0xb4d, 0x200c, 0xb28, 0xb09, 0xb2e, 0xb3f, +0xb5f, 0xb2a, 0xb39, 0xb28, 0xb2a, 0xb47, 0xb07, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d, +0x200c, 0x20, 0xb2e, 0xb30, 0xb47, 0xb38, 0xb2c, 0xb3f, 0xb30, 0xb3e, 0xb30, 0xb1f, +0xb19, 0xb4d, 0xb17, 0xb3e, 0xb1f, 0xb19, 0xb4d, 0xb17, 0xb3e, 0xb1f, 0xb3e, 0xb2a, +0xb41, 0xc0e, 0xc02, 0xc17, 0xc4d, 0xc35, 0xc3f, 0xc32, 0xc4d, 0xc32, 0xc3e, 0x3c, +0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79, +0x3e, 0xc05, 0xc21, 0xc46, 0xc32, 0xc48, 0xc21, 0xc4d, 0x3c, 0x2f, 0x65, 0x78, +0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79, 0x3e, 0xc15, +0xc3e, 0xc02, 0xc1f, 0xc28, 0xc4d, 0x140a, 0x144e, 0x1426, 0x146f, 0x1472, 0x1423, 0x1401, +0x141f, 0x14aa, 0x1423, 0x1450, 0x1423, 0x1403, 0x14c4, 0x1431, 0x1420, 0x1403, 0x1473, 0x14eb, +0x1405, 0x1403, 0x141f, 0x14f4, 0x1422, 0x1473, 0x141f, 0x1489, 0x1418, 0x1423, 0x1411, 0x14c2, +0x142f, 0x1420 }; static inline constexpr char16_t shortZoneNameTable[] = { diff --git a/src/corelib/tools/qarraydata.cpp b/src/corelib/tools/qarraydata.cpp index 37d6dea35f9..54bd971cb36 100644 --- a/src/corelib/tools/qarraydata.cpp +++ b/src/corelib/tools/qarraydata.cpp @@ -181,13 +181,12 @@ allocateHelper(qsizetype objectSize, qsizetype alignment, qsizetype capacity, return {}; void *data = nullptr; - QArrayData *header = static_cast<QArrayData *>(::malloc(size_t(allocSize))); - if (Q_LIKELY(header)) { - header->ref_.storeRelaxed(1); - header->flags = {}; + void *mem = ::malloc(size_t(allocSize)); + QArrayData *header = nullptr; + if (Q_LIKELY(mem)) { + header = new (mem) QArrayData{1, {}, capacity}; // find where offset should point to so that data() is aligned to alignment bytes data = QTypedArrayData<void>::dataStart(header, alignment); - header->alloc = capacity; } return { data, header }; @@ -245,8 +244,12 @@ QArrayData::reallocateUnaligned(QArrayData *data, void *dataPointer, Q_ASSERT(offset > 0); Q_ASSERT(offset <= allocSize); // equals when all free space is at the beginning - QArrayData *header = static_cast<QArrayData *>(::realloc(data, size_t(allocSize))); - if (header) { + const bool hadData = data; + void *mem = ::realloc(data, size_t(allocSize)); + QArrayData *header = static_cast<QArrayData *>(mem); + if (mem) { + if (!hadData) + header = new (mem) QArrayData{0, {}, {}}; header->alloc = capacity; dataPointer = reinterpret_cast<char *>(header) + offset; } else { diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h index 38d1091ac1f..71e183e646e 100644 --- a/src/corelib/tools/qarraydata.h +++ b/src/corelib/tools/qarraydata.h @@ -39,7 +39,7 @@ struct QArrayData }; Q_DECLARE_FLAGS(ArrayOptions, ArrayOption) - QBasicAtomicInt ref_; + QBasicAtomicInt m_ref; ArrayOptions flags; qsizetype alloc; @@ -56,19 +56,19 @@ struct QArrayData /// Returns true if sharing took place bool ref() noexcept { - ref_.ref(); + m_ref.ref(); return true; } /// Returns false if deallocation is necessary bool deref() noexcept { - return ref_.deref(); + return m_ref.deref(); } bool isShared() const noexcept { - return ref_.loadRelaxed() != 1; + return m_ref.loadRelaxed() != 1; } // Returns true if a detach is necessary before modifying the data @@ -76,7 +76,7 @@ struct QArrayData // detaching is necessary, you should be in a non-const function already bool needsDetach() noexcept { - return ref_.loadRelaxed() > 1; + return m_ref.loadRelaxed() > 1; } qsizetype detachCapacity(qsizetype newSize) const noexcept diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h index c20abd12c23..419585b0260 100644 --- a/src/corelib/tools/qarraydataops.h +++ b/src/corelib/tools/qarraydataops.h @@ -82,7 +82,7 @@ public: void destroyAll() noexcept // Call from destructors, ONLY! { Q_ASSERT(this->d); - Q_ASSERT(this->d->ref_.loadRelaxed() == 0); + Q_ASSERT(this->d->m_ref.loadRelaxed() == 0); // As this is to be called only from destructor, it doesn't need to be // exception safe; size not updated. @@ -345,7 +345,7 @@ public: // As this is to be called only from destructor, it doesn't need to be // exception safe; size not updated. - Q_ASSERT(this->d->ref_.loadRelaxed() == 0); + Q_ASSERT(this->d->m_ref.loadRelaxed() == 0); std::destroy(this->begin(), this->end()); } diff --git a/src/corelib/tools/qatomicscopedvaluerollback.h b/src/corelib/tools/qatomicscopedvaluerollback.h index 8f653acba5e..929a2e2d466 100644 --- a/src/corelib/tools/qatomicscopedvaluerollback.h +++ b/src/corelib/tools/qatomicscopedvaluerollback.h @@ -11,6 +11,7 @@ #include <QtCore/qtconfigmacros.h> #include <atomic> +#include <type_traits> QT_BEGIN_NAMESPACE @@ -122,6 +123,33 @@ template <typename T> QAtomicScopedValueRollback(QBasicAtomicPointer<T> &, std::memory_order) -> QAtomicScopedValueRollback<T*>; +template <typename T, typename V, + std::enable_if_t<std::is_convertible_v<V, T>, bool> = true> +QAtomicScopedValueRollback(std::atomic<T>&, V) + -> QAtomicScopedValueRollback<T>; +template <typename T, typename V, + std::enable_if_t<std::is_convertible_v<V, T>, bool> = true> +QAtomicScopedValueRollback(std::atomic<T>&, V, std::memory_order) + -> QAtomicScopedValueRollback<T>; + +template <typename T, typename V, + std::enable_if_t<std::is_convertible_v<V, T>, bool> = true> +QAtomicScopedValueRollback(QBasicAtomicInteger<T>&, V) + -> QAtomicScopedValueRollback<T>; +template <typename T, typename V, + std::enable_if_t<std::is_convertible_v<V, T>, bool> = true> +QAtomicScopedValueRollback(QBasicAtomicInteger<T>&, V, std::memory_order) + -> QAtomicScopedValueRollback<T>; + +template <typename T, typename V, + std::enable_if_t<std::is_convertible_v<V, T*>, bool> = true> +QAtomicScopedValueRollback(QBasicAtomicPointer<T>&, V) + -> QAtomicScopedValueRollback<T*>; +template <typename T, typename V, + std::enable_if_t<std::is_convertible_v<V, T*>, bool> = true> +QAtomicScopedValueRollback(QBasicAtomicPointer<T>&, V, std::memory_order) + -> QAtomicScopedValueRollback<T*>; + QT_END_NAMESPACE #endif // QATOMICASCOPEDVALUEROLLBACK_H diff --git a/src/corelib/tools/qfreelist_p.h b/src/corelib/tools/qfreelist_p.h index 5c12332aa4a..ecefd1f55df 100644 --- a/src/corelib/tools/qfreelist_p.h +++ b/src/corelib/tools/qfreelist_p.h @@ -199,27 +199,27 @@ inline typename QFreeList<T, ConstantsType>::ReferenceType QFreeList<T, Constant template <typename T, typename ConstantsType> inline int QFreeList<T, ConstantsType>::next() { - int id, newid, at; - ElementType *v; + int newid; + int id = _next.loadAcquire(); do { - id = _next.loadAcquire(); - - at = id & ConstantsType::IndexMask; + int at = id & ConstantsType::IndexMask; const int block = blockfor(at); - v = _v[block].loadAcquire(); + ElementType *v = _v[block].loadAcquire(); if (!v) { - v = allocate((id & ConstantsType::IndexMask) - at, ConstantsType::Sizes[block]); - if (!_v[block].testAndSetRelease(nullptr, v)) { + ElementType* const alloced = allocate((id & ConstantsType::IndexMask) - at, + ConstantsType::Sizes[block]); + if (_v[block].testAndSetRelease(nullptr, alloced, v)) { + v = alloced; + } else { // race with another thread lost - delete[] v; - v = _v[block].loadAcquire(); + delete[] alloced; Q_ASSERT(v != nullptr); } } newid = v[at].next.loadRelaxed() | (id & ~ConstantsType::IndexMask); - } while (!_next.testAndSetRelease(id, newid)); + } while (!_next.testAndSetOrdered(id, newid, id)); // qDebug("QFreeList::next(): returning %d (_next now %d, serial %d)", // id & ConstantsType::IndexMask, // newid & ConstantsType::IndexMask, @@ -232,7 +232,7 @@ inline void QFreeList<T, ConstantsType>::release(int id) { int at = id & ConstantsType::IndexMask; const int block = blockfor(at); - ElementType *v = _v[block].loadRelaxed(); + ElementType *v = _v[block].loadAcquire(); int x, newid; do { diff --git a/src/corelib/tools/qhashfunctions.h b/src/corelib/tools/qhashfunctions.h index cbe217db11e..3e44f5f3442 100644 --- a/src/corelib/tools/qhashfunctions.h +++ b/src/corelib/tools/qhashfunctions.h @@ -298,19 +298,32 @@ bool qHashEquals(const T1 &a, const T2 &b) } namespace QtPrivate { -template <typename Mixer> struct QHashCombiner : private Mixer +template <typename Mixer> struct QHashCombinerWithSeed : private Mixer { - using result_type = typename Mixer::result_type ; + using result_type = typename Mixer::result_type; + size_t seed; + constexpr QHashCombinerWithSeed(result_type s) noexcept : seed(s) {} + + template <typename T> + constexpr result_type operator()(result_type result, const T &t) const + noexcept(noexcept(qHash(t, seed))) + { + return Mixer::operator()(result, qHash(t, seed)); + } +}; #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED) - // Qt 6.x didn't use to pass the seed; bootstrap has no seed +// Earlier Qt 6.x versions of qHashMulti() failed to pass the seed as the seed +// argument of qHash(), so this class exists for compatibility with user and +// inline code that relies on the old behavior. For Qt 7, we'll replace with +// the above version, except for the bootstrapped tools (which have no seed). +template <typename Mixer> struct QHashCombiner : private Mixer +{ + using result_type = typename Mixer::result_type; + static constexpr size_t seed = 0; constexpr QHashCombiner(result_type) noexcept {} Q_DECL_DEPRECATED_X("pass the seed argument") constexpr QHashCombiner() noexcept {} -#else - size_t seed; - constexpr QHashCombiner(result_type s) : seed(s) noexcept {} -#endif template <typename T> constexpr result_type operator()(result_type result, const T &t) const @@ -319,6 +332,9 @@ template <typename Mixer> struct QHashCombiner : private Mixer return Mixer::operator()(result, qHash(t, seed)); } }; +#else +template <typename Mixer> using QHashCombiner = QHashCombinerWithSeed<Mixer>; +#endif struct QHashCombineMixer { @@ -330,6 +346,7 @@ struct QHashCombineMixer } }; using QHashCombine = QHashCombiner<QHashCombineMixer>; +using QHashCombineWithSeed = QHashCombinerWithSeed<QHashCombineMixer>; struct QHashCombineCommutativeMixer : std::plus<size_t> { @@ -341,6 +358,7 @@ struct QHashCombineCommutativeMixer : std::plus<size_t> typedef size_t result_type; }; using QHashCombineCommutative = QHashCombiner<QHashCombineCommutativeMixer>; +using QHashCombineCommutativeWithSeed = QHashCombinerWithSeed<QHashCombineCommutativeMixer>; template <typename... T> using QHashMultiReturnType = decltype( diff --git a/src/gui/compat/removed_api.cpp b/src/gui/compat/removed_api.cpp index 6a39d8b8615..33549a06504 100644 --- a/src/gui/compat/removed_api.cpp +++ b/src/gui/compat/removed_api.cpp @@ -88,3 +88,16 @@ void QWindowSystemInterface::handleContextMenuEvent(QWindow *window, bool mouseT // order sections alphabetically #endif // QT_GUI_REMOVED_SINCE(6, 8) + +#if QT_GUI_REMOVED_SINCE(6, 11) + +#include "qpainter.h" // inlined API + +#include "qquaternion.h" // inlined API + + +// #include "qotherheader.h" +// // implement removed functions from qotherheader.h +// order sections alphabetically + +#endif // QT_GUI_REMOVED_SINCE(6, 11) diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp index 1768cd8aa1a..f965a5a30e9 100644 --- a/src/gui/kernel/qaction.cpp +++ b/src/gui/kernel/qaction.cpp @@ -1325,4 +1325,6 @@ Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAction *action) QT_END_NAMESPACE +#undef QAPP_CHECK + #include "moc_qaction.cpp" diff --git a/src/gui/kernel/qguivariant.cpp b/src/gui/kernel/qguivariant.cpp index c6462dfed7b..6da0c4d387b 100644 --- a/src/gui/kernel/qguivariant.cpp +++ b/src/gui/kernel/qguivariant.cpp @@ -52,14 +52,13 @@ QT_BEGIN_NAMESPACE namespace { - -// NOLINTNEXTLINE(cppcoreguidelines-virtual-class-destructor): this is not a base class struct QVariantGuiHelper : QMetaTypeModuleHelper { #define QT_IMPL_METATYPEINTERFACE_GUI_TYPES(MetaTypeName, MetaTypeId, RealName) \ QT_METATYPE_INTERFACE_INIT(RealName), - const QtPrivate::QMetaTypeInterface *interfaceForType(int type) const override { + static const QtPrivate::QMetaTypeInterface *interfaceForType(int type) + { switch (type) { QT_FOR_EACH_STATIC_GUI_CLASS(QT_METATYPE_CONVERT_ID_TO_TYPE) default: return nullptr; @@ -67,7 +66,7 @@ struct QVariantGuiHelper : QMetaTypeModuleHelper } #undef QT_IMPL_METATYPEINTERFACE_GUI_TYPES - bool convert(const void *from, int fromTypeId, void *to, int toTypeId) const override + static bool convert(const void *from, int fromTypeId, void *to, int toTypeId) { Q_ASSERT(fromTypeId != toTypeId); @@ -133,14 +132,14 @@ struct QVariantGuiHelper : QMetaTypeModuleHelper return false; } }; - -static constexpr QVariantGuiHelper qVariantGuiHelper; - } // namespace used to hide QVariant handler void qRegisterGuiVariant() { - qMetaTypeGuiHelper = &qVariantGuiHelper; + qMetaTypeGuiHelper = QMetaTypeModuleHelper{ + &QVariantGuiHelper::interfaceForType, + &QVariantGuiHelper::convert, + }; } Q_CONSTRUCTOR_FUNCTION(qRegisterGuiVariant) diff --git a/src/gui/kernel/qshortcut.cpp b/src/gui/kernel/qshortcut.cpp index 3f6822cb031..e730b5f9e8b 100644 --- a/src/gui/kernel/qshortcut.cpp +++ b/src/gui/kernel/qshortcut.cpp @@ -577,4 +577,6 @@ bool QShortcut::event(QEvent *e) QT_END_NAMESPACE +#undef QAPP_CHECK + #include "moc_qshortcut.cpp" diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp index b4dccfc42fe..99061fb7163 100644 --- a/src/gui/math3d/qquaternion.cpp +++ b/src/gui/math3d/qquaternion.cpp @@ -336,6 +336,9 @@ QVector3D QQuaternion::rotatedVector(const QVector3D &vector) const Extracts a 3D axis \a axis and a rotating angle \a angle (in degrees) that corresponds to this quaternion. + Both \a axis and \a angle must be valid, non-\nullptr pointers, + otherwise the behavior is undefined. + \sa fromAxisAndAngle() */ @@ -366,6 +369,9 @@ QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D &axis, float angle) Extracts a 3D axis (\a x, \a y, \a z) and a rotating angle \a angle (in degrees) that corresponds to this quaternion. + All of \a x, \a y, \a z, and \a angle must be valid, non-\nullptr pointers, + otherwise the behavior is undefined. + \sa fromAxisAndAngle() */ void QQuaternion::getAxisAndAngle(float *x, float *y, float *z, float *angle) const @@ -447,6 +453,9 @@ QQuaternion QQuaternion::fromAxisAndAngle Calculates \a roll, \a pitch, and \a yaw Euler angles (in degrees) that corresponds to this quaternion. + All of \a pitch, \a yaw, and \a roll must be valid, non-\nullptr pointers, + otherwise the behavior is undefined. + \sa fromEulerAngles() */ void QQuaternion::getEulerAngles(float *pitch, float *yaw, float *roll) const @@ -548,7 +557,7 @@ QQuaternion QQuaternion::fromEulerAngles(float pitch, float yaw, float roll) \note If this quaternion is not normalized, the resulting rotation matrix will contain scaling information. - \sa fromRotationMatrix(), getAxes() + \sa fromRotationMatrix(), toAxes() */ QMatrix3x3 QQuaternion::toRotationMatrix() const { @@ -631,23 +640,71 @@ QQuaternion QQuaternion::fromRotationMatrix(const QMatrix3x3 &rot3x3) #ifndef QT_NO_VECTOR3D /*! - \since 5.5 + \since 6.11 + \class QQuaternion::Axes + \ingroup painting-3D + \inmodule QtGui - Returns the 3 orthonormal axes (\a xAxis, \a yAxis, \a zAxis) defining the quaternion. + A struct containing the three orthonormal axes that define a + \l{QQuaternion}{quaternion}. - \sa fromAxes(), toRotationMatrix() + + \sa QQuaternion::toAxes(), QQuaternion::fromAxes(Axes) */ -void QQuaternion::getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const -{ - Q_ASSERT(xAxis && yAxis && zAxis); +/*! + \variable QQuaternion::Axes::x + + The x orthonormal axis that, together with \l{y} and \l{z}, defines a + quaternion. +*/ + +/*! + \variable QQuaternion::Axes::y + + The y orthonormal axis that, together with \l{x} and \l{z}, defines a + quaternion. +*/ + +/*! + \variable QQuaternion::Axes::z + + The z orthonormal axis that, together with \l{x} and \l{y}, defines a + quaternion. +*/ + +/*! + \since 6.11 + + Returns the three orthonormal axes that define this quaternion. + + \sa QQuaternion::Axes, fromAxes(QQuaternion::Axes), toRotationMatrix() +*/ +auto QQuaternion::toAxes() const -> Axes +{ const QMatrix3x3 rot3x3(toRotationMatrix()); - *xAxis = QVector3D(rot3x3(0, 0), rot3x3(1, 0), rot3x3(2, 0)); - *yAxis = QVector3D(rot3x3(0, 1), rot3x3(1, 1), rot3x3(2, 1)); - *zAxis = QVector3D(rot3x3(0, 2), rot3x3(1, 2), rot3x3(2, 2)); + return { {rot3x3(0, 0), rot3x3(1, 0), rot3x3(2, 0)}, + {rot3x3(0, 1), rot3x3(1, 1), rot3x3(2, 1)}, + {rot3x3(0, 2), rot3x3(1, 2), rot3x3(2, 2)} }; } + +/*! + \fn void QQuaternion::getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const + \since 5.5 + + \obsolete + Use toAxes() instead. + + Returns the 3 orthonormal axes (\a xAxis, \a yAxis, \a zAxis) defining the quaternion. + + All of \a xAxis, \a yAxis, and \a zAxis must be valid, non-\nullptr pointers, + otherwise the behavior is undefined. + + \sa fromAxes(), toRotationMatrix() +*/ + /*! \since 5.5 @@ -655,7 +712,7 @@ void QQuaternion::getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) \note The axes are assumed to be orthonormal. - \sa getAxes(), fromRotationMatrix() + \sa toAxes(), fromRotationMatrix() */ QQuaternion QQuaternion::fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis) { @@ -674,6 +731,17 @@ QQuaternion QQuaternion::fromAxes(const QVector3D &xAxis, const QVector3D &yAxis } /*! + \since 6.11 + \overload + + \sa toAxes(), fromRotationMatrix() +*/ +QQuaternion QQuaternion::fromAxes(Axes axes) // clazy:exclude=function-args-by-ref +{ + return fromAxes(axes.x, axes.y, axes.z); +} + +/*! \since 5.5 Constructs the quaternion using specified forward direction \a direction diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h index 0ea844ae41f..ffc95a852ce 100644 --- a/src/gui/math3d/qquaternion.h +++ b/src/gui/math3d/qquaternion.h @@ -118,7 +118,14 @@ QT_WARNING_POP QT7_ONLY(Q_GUI_EXPORT) static QQuaternion fromRotationMatrix(const QMatrix3x3 &rot3x3); #ifndef QT_NO_VECTOR3D - QT7_ONLY(Q_GUI_EXPORT) void getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const; + struct Axes + { + QVector3D x, y, z; + }; + QT7_ONLY(Q_GUI_EXPORT) Axes toAxes() const; + QT7_ONLY(Q_GUI_EXPORT) static QQuaternion fromAxes(Axes axes); // clazy:exclude=function-args-by-ref + QT_GUI_INLINE_SINCE(6, 11) + void getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const; QT7_ONLY(Q_GUI_EXPORT) static QQuaternion fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis); @@ -330,6 +337,19 @@ QQuaternion QQuaternion::fromEulerAngles(const QVector3D &angles) return QQuaternion::fromEulerAngles(angles.x(), angles.y(), angles.z()); } +#if QT_GUI_INLINE_IMPL_SINCE(6, 11) +void QQuaternion::getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const +{ + Q_PRE(xAxis); + Q_PRE(yAxis); + Q_PRE(zAxis); + const Axes axes = toAxes(); + *xAxis = axes.x; + *yAxis = axes.y; + *zAxis = axes.z; +} +#endif // QT_GUI_INLINE_IMPL_SINCE(6, 11) + #endif // QT_NO_VECTOR3D constexpr void QQuaternion::setVector(float aX, float aY, float aZ) noexcept diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 5013e96f740..344bb8f1bef 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -41,6 +41,8 @@ #include <private/qrawfont_p.h> #include <private/qfont_p.h> +#include <QtCore/private/qtclasshelper_p.h> + QT_BEGIN_NAMESPACE using namespace Qt::StringLiterals; @@ -3652,6 +3654,8 @@ void QPainter::setPen(const QColor &color) } /*! + \fn void QPainter::setPen(const QPen &pen) + Sets the painter's pen to be the given \a pen. The \a pen defines how to draw lines and outlines, and it also @@ -3660,7 +3664,13 @@ void QPainter::setPen(const QColor &color) \sa pen(), {QPainter#Settings}{Settings} */ -void QPainter::setPen(const QPen &pen) +/*! + \fn void QPainter::setPen(QPen &&pen) + \since 6.11 + \overload +*/ + +void QPainter::doSetPen(const QPen &pen, QPen *rvalue) { #ifdef QT_DEBUG_DRAW @@ -3677,7 +3687,7 @@ void QPainter::setPen(const QPen &pen) if (d->state->pen == pen) return; - d->state->pen = pen; + q_choose_assign(d->state->pen, pen, rvalue); if (d->extended) { d->checkEmulation(); @@ -3733,6 +3743,8 @@ const QPen &QPainter::pen() const /*! + \fn void QPainter::setBrush(const QBrush &brush) + Sets the painter's brush to the given \a brush. The painter's brush defines how shapes are filled. @@ -3740,7 +3752,13 @@ const QPen &QPainter::pen() const \sa brush(), {QPainter#Settings}{Settings} */ -void QPainter::setBrush(const QBrush &brush) +/*! + \fn void QPainter::setBrush(QBrush &&brush) + \since 6.11 + \overload +*/ + +void QPainter::doSetBrush(const QBrush &brush, QBrush *rvalue) { #ifdef QT_DEBUG_DRAW if constexpr (qt_show_painter_debug_output) @@ -3756,13 +3774,13 @@ void QPainter::setBrush(const QBrush &brush) return; if (d->extended) { - d->state->brush = brush; + q_choose_assign(d->state->brush, brush, rvalue); d->checkEmulation(); d->extended->brushChanged(); return; } - d->state->brush = brush; + q_choose_assign(d->state->brush, brush, rvalue); d->state->dirtyFlags |= QPaintEngine::DirtyBrush; } diff --git a/src/gui/painting/qpainter.h b/src/gui/painting/qpainter.h index 3c09b632364..83bde3b8cad 100644 --- a/src/gui/painting/qpainter.h +++ b/src/gui/painting/qpainter.h @@ -150,11 +150,15 @@ public: QFontInfo fontInfo() const; void setPen(const QColor &color); + QT_GUI_INLINE_SINCE(6, 11) void setPen(const QPen &pen); + void setPen(QPen &&pen) { doSetPen(pen, &pen); } void setPen(Qt::PenStyle style); const QPen &pen() const; + QT_GUI_INLINE_SINCE(6, 11) void setBrush(const QBrush &brush); + void setBrush(QBrush &&brush) { doSetBrush(brush, &brush); } void setBrush(Qt::BrushStyle style); void setBrush(QColor color); void setBrush(Qt::GlobalColor color) { setBrush(QColor(color)); } @@ -419,6 +423,9 @@ public: private: Q_DISABLE_COPY(QPainter) + void doSetPen(const QPen &lvalue, QPen *rvalue); + void doSetBrush(const QBrush &lvalue, QBrush *rvalue); + std::unique_ptr<QPainterPrivate> d_ptr; friend class QWidget; @@ -700,6 +707,21 @@ inline void QPainter::fillRect(const QRectF &r, QGradient::Preset p) fillRect(r, QGradient(p)); } +#if QT_GUI_INLINE_IMPL_SINCE(6, 11) + +void QPainter::setPen(const QPen &p) +{ + doSetPen(p, nullptr); +} + +void QPainter::setBrush(const QBrush &b) +{ + doSetBrush(b, nullptr); +} + +#endif // QT_GUI_INLINE_IMPL_SINCE(6, 11) + + inline void QPainter::setBrushOrigin(int x, int y) { setBrushOrigin(QPoint(x, y)); diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 66f1cf2a985..148d40b8361 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -784,7 +784,7 @@ bool QTransform::operator==(const QTransform &o) const */ size_t qHash(const QTransform &key, size_t seed) noexcept { - QtPrivate::QHashCombine hash(seed); + QtPrivate::QHashCombineWithSeed hash(seed); seed = hash(seed, key.m11()); seed = hash(seed, key.m12()); seed = hash(seed, key.m21()); diff --git a/src/gui/rhi/qrhi.cpp b/src/gui/rhi/qrhi.cpp index b9312f6b304..7a3d4974e53 100644 --- a/src/gui/rhi/qrhi.cpp +++ b/src/gui/rhi/qrhi.cpp @@ -6543,7 +6543,7 @@ bool operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBind size_t qHash(const QRhiShaderResourceBinding &b, size_t seed) noexcept { const QRhiShaderResourceBinding::Data *d = QRhiImplementation::shaderResourceBindingData(b); - QtPrivate::QHashCombine hash(seed); + QtPrivate::QHashCombineWithSeed hash(seed); seed = hash(seed, d->binding); seed = hash(seed, d->stage); seed = hash(seed, d->type); diff --git a/src/gui/rhi/qshader.cpp b/src/gui/rhi/qshader.cpp index 5e967c62e40..1234d01b6ec 100644 --- a/src/gui/rhi/qshader.cpp +++ b/src/gui/rhi/qshader.cpp @@ -812,7 +812,7 @@ bool operator==(const QShader &lhs, const QShader &rhs) noexcept size_t qHash(const QShader &s, size_t seed) noexcept { if (s.d) { - QtPrivate::QHashCombine hash(seed); + QtPrivate::QHashCombineWithSeed hash(seed); seed = hash(seed, s.stage()); if (!s.d->shaders.isEmpty()) { seed = hash(seed, s.d->shaders.firstKey()); diff --git a/src/gui/text/qfontdatabase_p.h b/src/gui/text/qfontdatabase_p.h index 4cd6996aab8..27fb34aecdd 100644 --- a/src/gui/text/qfontdatabase_p.h +++ b/src/gui/text/qfontdatabase_p.h @@ -51,7 +51,7 @@ inline bool operator!=(const QtFontFallbacksCacheKey &lhs, const QtFontFallbacks inline size_t qHash(const QtFontFallbacksCacheKey &key, size_t seed = 0) noexcept { - QtPrivate::QHashCombine hash(seed); + QtPrivate::QHashCombineWithSeed hash(seed); seed = hash(seed, key.family); seed = hash(seed, int(key.style)); seed = hash(seed, int(key.styleHint)); diff --git a/src/plugins/platforms/CMakeLists.txt b/src/plugins/platforms/CMakeLists.txt index f30c27c24be..498a0772bc9 100644 --- a/src/plugins/platforms/CMakeLists.txt +++ b/src/plugins/platforms/CMakeLists.txt @@ -4,10 +4,10 @@ if(ANDROID) add_subdirectory(android) endif() -if(NOT ANDROID AND NOT WASM) +if(NOT WASM) add_subdirectory(minimal) endif() -if(QT_FEATURE_freetype AND NOT ANDROID AND NOT WASM) +if(QT_FEATURE_freetype AND NOT WASM) add_subdirectory(offscreen) endif() if(QT_FEATURE_xcb) diff --git a/src/plugins/platforms/android/CMakeLists.txt b/src/plugins/platforms/android/CMakeLists.txt index 0160e12c26c..0d2a048abde 100644 --- a/src/plugins/platforms/android/CMakeLists.txt +++ b/src/plugins/platforms/android/CMakeLists.txt @@ -51,7 +51,12 @@ qt_internal_add_plugin(QAndroidIntegrationPlugin qandroidplatformdialoghelpers.cpp # Conflicting JNI classes, and types androidcontentfileengine.cpp + qandroidplatformforeignwindow.cpp qandroidplatformintegration.cpp + qandroidplatformscreen.cpp + qandroidplatformservices.cpp + qandroidplatformwindow.cpp + qandroidsystemlocale.cpp INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR} ${QtBase_SOURCE_DIR}/src/3rdparty/android diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp index 200c2f7a47b..b3ff0a4f06e 100644 --- a/src/plugins/platforms/android/androidjniaccessibility.cpp +++ b/src/plugins/platforms/android/androidjniaccessibility.cpp @@ -28,6 +28,7 @@ using namespace Qt::StringLiterals; namespace QtAndroidAccessibility { + static jmethodID m_setClassNameMethodID = 0; static jmethodID m_addActionMethodID = 0; static jmethodID m_setCheckableMethodID = 0; static jmethodID m_setCheckedMethodID = 0; @@ -421,6 +422,130 @@ namespace QtAndroidAccessibility return jstr; } + static QString classNameForRole(QAccessible::Role role, QAccessible::State state) { + switch (role) { + case QAccessible::Role::Button: + case QAccessible::Role::Link: + { + if (state.checkable) + // There is also a android.widget.Switch for which we have no match. + return QStringLiteral("android.widget.ToggleButton"); + return QStringLiteral("android.widget.Button"); + } + case QAccessible::Role::CheckBox: + // As of android/accessibility/utils/Role.java::getRole a CheckBox + // is NOT android.widget.CheckBox + return QStringLiteral("android.widget.CompoundButton"); + case QAccessible::Role::Clock: + return QStringLiteral("android.widget.TextClock"); + case QAccessible::Role::ComboBox: + return QStringLiteral("android.widget.Spinner"); + case QAccessible::Role::Graphic: + // QQuickImage does not provide this role it inherits Client from QQuickItem + return QStringLiteral("android.widget.ImageView"); + case QAccessible::Role::Grouping: + return QStringLiteral("android.view.ViewGroup"); + case QAccessible::Role::List: + // As of android/accessibility/utils/Role.java::getRole a List + // is NOT android.widget.ListView + return QStringLiteral("android.widget.AbsListView"); + case QAccessible::Role::MenuItem: + return QStringLiteral("android.view.MenuItem"); + case QAccessible::Role::PopupMenu: + return QStringLiteral("android.widget.PopupMenu"); + case QAccessible::Role::Separator: + return QStringLiteral("android.widget.Space"); + case QAccessible::Role::ToolBar: + return QStringLiteral("android.view.Toolbar"); + case QAccessible::Role::Heading: [[fallthrough]]; + case QAccessible::Role::StaticText: + // Heading vs. regular Text is finally determined by AccessibilityNodeInfo.isHeading() + return QStringLiteral("android.widget.TextView"); + case QAccessible::Role::EditableText: + return QStringLiteral("android.widget.EditText"); + case QAccessible::Role::RadioButton: + return QStringLiteral("android.widget.RadioButton"); + case QAccessible::Role::ProgressBar: + return QStringLiteral("android.widget.ProgressBar"); + // Range information need to be filled to announce percentages + case QAccessible::Role::SpinBox: + return QStringLiteral("android.widget.NumberPicker"); + case QAccessible::Role::WebDocument: + return QStringLiteral("android.webkit.WebView"); + case QAccessible::Role::Dialog: + return QStringLiteral("android.app.AlertDialog"); + case QAccessible::Role::PageTab: + return QStringLiteral("android.app.ActionBar.Tab"); + case QAccessible::Role::PageTabList: + return QStringLiteral("android.widget.TabWidget"); + case QAccessible::Role::ScrollBar: [[fallthrough]]; + case QAccessible::Role::Slider: + return QStringLiteral("android.widget.SeekBar"); + case QAccessible::Role::Table: + // #TODO Evaluate the usage of AccessibleNodeInfo.setCollectionItemInfo() to provide + // infos about colums, rows und items. + return QStringLiteral("android.widget.GridView"); + case QAccessible::Role::Pane: + // #TODO QQuickScrollView, QQuickListView (see QTBUG-137806) + return QStringLiteral("android.view.ViewGroup"); + case QAccessible::Role::AlertMessage: + case QAccessible::Role::Animation: + case QAccessible::Role::Application: + case QAccessible::Role::Assistant: + case QAccessible::Role::BlockQuote: + case QAccessible::Role::Border: + case QAccessible::Role::ButtonDropGrid: + case QAccessible::Role::ButtonDropDown: + case QAccessible::Role::ButtonMenu: + case QAccessible::Role::Canvas: + case QAccessible::Role::Caret: + case QAccessible::Role::Cell: + case QAccessible::Role::Chart: + case QAccessible::Role::Client: + case QAccessible::Role::ColorChooser: + case QAccessible::Role::Column: + case QAccessible::Role::ColumnHeader: + case QAccessible::Role::ComplementaryContent: + case QAccessible::Role::Cursor: + case QAccessible::Role::Desktop: + case QAccessible::Role::Dial: + case QAccessible::Role::Document: + case QAccessible::Role::Equation: + case QAccessible::Role::Footer: + case QAccessible::Role::Form: + case QAccessible::Role::Grip: + case QAccessible::Role::HelpBalloon: + case QAccessible::Role::HotkeyField: + case QAccessible::Role::Indicator: + case QAccessible::Role::LayeredPane: + case QAccessible::Role::ListItem: + case QAccessible::Role::MenuBar: + case QAccessible::Role::NoRole: + case QAccessible::Role::Note: + case QAccessible::Role::Notification: + case QAccessible::Role::Paragraph: + case QAccessible::Role::PropertyPage: + case QAccessible::Role::Row: + case QAccessible::Role::RowHeader: + case QAccessible::Role::Section: + case QAccessible::Role::Sound: + case QAccessible::Role::Splitter: + case QAccessible::Role::StatusBar: + case QAccessible::Role::Terminal: + case QAccessible::Role::TitleBar: + case QAccessible::Role::ToolTip: + case QAccessible::Role::Tree: + case QAccessible::Role::TreeItem: + case QAccessible::Role::UserRole: + case QAccessible::Role::Whitespace: + case QAccessible::Role::Window: + // If unsure, every visible or interactive element in Android + // inherits android.view.View and by many extends also TextView. + // Android itself does a similar thing e.g. in its Settings-App. + return QStringLiteral("android.view.TextView"); + } + } + static QString descriptionForInterface(QAccessibleInterface *iface) { QString desc; @@ -513,6 +638,10 @@ namespace QtAndroidAccessibility return false; } + const QString role = classNameForRole(info.role, info.state); + jstring jrole = env->NewString((jchar*)role.constData(), (jsize)role.size()); + env->CallVoidMethod(node, m_setClassNameMethodID, jrole); + const bool hasClickableAction = info.actions.contains(QAccessibleActionInterface::pressAction()) || info.actions.contains(QAccessibleActionInterface::toggleAction()); @@ -590,6 +719,7 @@ namespace QtAndroidAccessibility } jclass nodeInfoClass = env->FindClass("android/view/accessibility/AccessibilityNodeInfo"); + GET_AND_CHECK_STATIC_METHOD(m_setClassNameMethodID, nodeInfoClass, "setClassName", "(Ljava/lang/CharSequence;)V"); GET_AND_CHECK_STATIC_METHOD(m_addActionMethodID, nodeInfoClass, "addAction", "(I)V"); GET_AND_CHECK_STATIC_METHOD(m_setCheckableMethodID, nodeInfoClass, "setCheckable", "(Z)V"); GET_AND_CHECK_STATIC_METHOD(m_setCheckedMethodID, nodeInfoClass, "setChecked", "(Z)V"); diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp index 3f40dea5eb9..82e978862f8 100644 --- a/src/plugins/styles/modernwindows/qwindows11style.cpp +++ b/src/plugins/styles/modernwindows/qwindows11style.cpp @@ -1662,128 +1662,123 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op } case CE_ItemViewItem: { if (const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option)) { - if (qobject_cast<const QAbstractItemView *>(widget)) { - QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget); - QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt, widget); - QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, widget); + QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget); + QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt, widget); + QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, widget); - // draw the background - proxy()->drawPrimitive(PE_PanelItemViewItem, option, painter, widget); + // draw the background + proxy()->drawPrimitive(PE_PanelItemViewItem, option, painter, widget); - const QRect &rect = vopt->rect; - const bool isRtl = option->direction == Qt::RightToLeft; - bool onlyOne = vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || - vopt->viewItemPosition == QStyleOptionViewItem::Invalid; - bool isFirst = vopt->viewItemPosition == QStyleOptionViewItem::Beginning; - bool isLast = vopt->viewItemPosition == QStyleOptionViewItem::End; + const QRect &rect = vopt->rect; + const bool isRtl = option->direction == Qt::RightToLeft; + bool onlyOne = vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || + vopt->viewItemPosition == QStyleOptionViewItem::Invalid; + bool isFirst = vopt->viewItemPosition == QStyleOptionViewItem::Beginning; + bool isLast = vopt->viewItemPosition == QStyleOptionViewItem::End; - // the tree decoration already painted the left side of the rounded rect - if (vopt->features.testFlag(QStyleOptionViewItem::IsDecoratedRootColumn) && - vopt->showDecorationSelected) { - isFirst = false; - if (onlyOne) { - onlyOne = false; - isLast = true; - } + // the tree decoration already painted the left side of the rounded rect + if (vopt->features.testFlag(QStyleOptionViewItem::IsDecoratedRootColumn) && + vopt->showDecorationSelected) { + isFirst = false; + if (onlyOne) { + onlyOne = false; + isLast = true; } + } - if (isRtl) { - if (isFirst) { - isFirst = false; - isLast = true; - } else if (isLast) { - isFirst = true; - isLast = false; - } + if (isRtl) { + if (isFirst) { + isFirst = false; + isLast = true; + } else if (isLast) { + isFirst = true; + isLast = false; } - const bool highlightCurrent = vopt->state.testAnyFlags(State_Selected | State_MouseOver); - if (highlightCurrent) { - const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget); - if (highContrastTheme) - painter->setBrush(vopt->palette.highlight()); - else - painter->setBrush(view->alternatingRowColors() ? vopt->palette.highlight() : WINUI3Colors[colorSchemeIndex][subtleHighlightColor]); - QWidget *editorWidget = view ? view->indexWidget(view->currentIndex()) : nullptr; - if (editorWidget) { - QPalette pal = editorWidget->palette(); - QColor editorBgColor = vopt->backgroundBrush == Qt::NoBrush ? vopt->palette.color(widget->backgroundRole()) : vopt->backgroundBrush.color(); - editorBgColor.setAlpha(255); - pal.setColor(editorWidget->backgroundRole(), editorBgColor); - editorWidget->setPalette(pal); - } - } else { - painter->setBrush(vopt->backgroundBrush); + } + const bool highlightCurrent = vopt->state.testAnyFlags(State_Selected | State_MouseOver); + if (highlightCurrent) { + const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget); + if (highContrastTheme) + painter->setBrush(vopt->palette.highlight()); + else + painter->setBrush(view->alternatingRowColors() ? vopt->palette.highlight() : WINUI3Colors[colorSchemeIndex][subtleHighlightColor]); + QWidget *editorWidget = view ? view->indexWidget(view->currentIndex()) : nullptr; + if (editorWidget) { + QPalette pal = editorWidget->palette(); + QColor editorBgColor = vopt->backgroundBrush == Qt::NoBrush ? vopt->palette.color(widget->backgroundRole()) : vopt->backgroundBrush.color(); + editorBgColor.setAlpha(255); + pal.setColor(editorWidget->backgroundRole(), editorBgColor); + editorWidget->setPalette(pal); } - painter->setPen(Qt::NoPen); + } else { + painter->setBrush(vopt->backgroundBrush); + } + painter->setPen(Qt::NoPen); - if (onlyOne) { - painter->drawRoundedRect(rect.marginsRemoved(QMargins(2, 2, 2, 2)), - secondLevelRoundingRadius, secondLevelRoundingRadius); - } else if (isFirst) { - painter->save(); - painter->setClipRect(rect); - painter->drawRoundedRect(rect.marginsRemoved(QMargins(2, 2, -secondLevelRoundingRadius, 2)), - secondLevelRoundingRadius, secondLevelRoundingRadius); - painter->restore(); - } else if (isLast) { - painter->save(); - painter->setClipRect(rect); - painter->drawRoundedRect(rect.marginsRemoved(QMargins(-secondLevelRoundingRadius, 2, 2, 2)), - secondLevelRoundingRadius, secondLevelRoundingRadius); - painter->restore(); - } else { - painter->drawRect(rect.marginsRemoved(QMargins(0, 2, 0, 2))); - } + if (onlyOne) { + painter->drawRoundedRect(rect.marginsRemoved(QMargins(2, 2, 2, 2)), + secondLevelRoundingRadius, secondLevelRoundingRadius); + } else if (isFirst) { + painter->save(); + painter->setClipRect(rect); + painter->drawRoundedRect(rect.marginsRemoved(QMargins(2, 2, -secondLevelRoundingRadius, 2)), + secondLevelRoundingRadius, secondLevelRoundingRadius); + painter->restore(); + } else if (isLast) { + painter->save(); + painter->setClipRect(rect); + painter->drawRoundedRect(rect.marginsRemoved(QMargins(-secondLevelRoundingRadius, 2, 2, 2)), + secondLevelRoundingRadius, secondLevelRoundingRadius); + painter->restore(); + } else { + painter->drawRect(rect.marginsRemoved(QMargins(0, 2, 0, 2))); + } - // draw the check mark - if (vopt->features & QStyleOptionViewItem::HasCheckIndicator) { - QStyleOptionViewItem option(*vopt); - option.rect = checkRect; - option.state = option.state & ~QStyle::State_HasFocus; + // draw the check mark + if (vopt->features & QStyleOptionViewItem::HasCheckIndicator) { + QStyleOptionViewItem option(*vopt); + option.rect = checkRect; + option.state = option.state & ~QStyle::State_HasFocus; - switch (vopt->checkState) { - case Qt::Unchecked: - option.state |= QStyle::State_Off; - break; - case Qt::PartiallyChecked: - option.state |= QStyle::State_NoChange; - break; - case Qt::Checked: - option.state |= QStyle::State_On; - break; - } - proxy()->drawPrimitive(QStyle::PE_IndicatorItemViewItemCheck, &option, painter, widget); + switch (vopt->checkState) { + case Qt::Unchecked: + option.state |= QStyle::State_Off; + break; + case Qt::PartiallyChecked: + option.state |= QStyle::State_NoChange; + break; + case Qt::Checked: + option.state |= QStyle::State_On; + break; } + proxy()->drawPrimitive(QStyle::PE_IndicatorItemViewItemCheck, &option, painter, widget); + } - // draw the icon - QIcon::Mode mode = QIcon::Normal; - if (!(vopt->state & QStyle::State_Enabled)) - mode = QIcon::Disabled; - else if (vopt->state & QStyle::State_Selected) - mode = QIcon::Selected; - QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off; - vopt->icon.paint(painter, iconRect, vopt->decorationAlignment, mode, state); - - painter->setPen(highlightCurrent && highContrastTheme ? vopt->palette.base().color() - : vopt->palette.text().color()); - d->viewItemDrawText(painter, vopt, textRect); - - // paint a vertical marker for QListView - if (vopt->state & State_Selected) { - if (const QListView *lv = qobject_cast<const QListView *>(widget); - lv && lv->viewMode() != QListView::IconMode && !highContrastTheme) { - painter->setPen(vopt->palette.accent().color()); - const auto xPos = isRtl ? rect.right() - 1 : rect.left(); - const QLineF lines[2] = { - QLineF(xPos, rect.y() + 2, xPos, rect.y() + rect.height() - 2), - QLineF(xPos + 1, rect.y() + 2, xPos + 1, rect.y() + rect.height() - 2), - }; - painter->drawLines(lines, 2); - } + // draw the icon + QIcon::Mode mode = QIcon::Normal; + if (!(vopt->state & QStyle::State_Enabled)) + mode = QIcon::Disabled; + else if (vopt->state & QStyle::State_Selected) + mode = QIcon::Selected; + QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off; + vopt->icon.paint(painter, iconRect, vopt->decorationAlignment, mode, state); + + painter->setPen(highlightCurrent && highContrastTheme ? vopt->palette.base().color() + : vopt->palette.text().color()); + d->viewItemDrawText(painter, vopt, textRect); + + // paint a vertical marker for QListView + if (vopt->state & State_Selected) { + if (const QListView *lv = qobject_cast<const QListView *>(widget); + lv && lv->viewMode() != QListView::IconMode && !highContrastTheme) { + painter->setPen(vopt->palette.accent().color()); + const auto xPos = isRtl ? rect.right() - 1 : rect.left(); + const QLineF lines[2] = { + QLineF(xPos, rect.y() + 2, xPos, rect.y() + rect.height() - 2), + QLineF(xPos + 1, rect.y() + 2, xPos + 1, rect.y() + rect.height() - 2), + }; + painter->drawLines(lines, 2); } - } else { - QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, widget); - d->viewItemDrawText(painter, vopt, textRect); } } break; diff --git a/src/sql/models/qsqlquerymodel.cpp b/src/sql/models/qsqlquerymodel.cpp index d8e10343854..6f4611d9139 100644 --- a/src/sql/models/qsqlquerymodel.cpp +++ b/src/sql/models/qsqlquerymodel.cpp @@ -561,9 +561,9 @@ QSqlError QSqlQueryModel::lastError() const \sa lastError() */ -void QSqlQueryModel::setLastError(const QSqlError &error) +void QSqlQueryModel::setLastError(const QSqlError &error) const { - Q_D(QSqlQueryModel); + Q_D(const QSqlQueryModel); d->error = error; } diff --git a/src/sql/models/qsqlquerymodel.h b/src/sql/models/qsqlquerymodel.h index 72b9b053f03..24877118865 100644 --- a/src/sql/models/qsqlquerymodel.h +++ b/src/sql/models/qsqlquerymodel.h @@ -79,7 +79,7 @@ protected: virtual void queryChange(); virtual QModelIndex indexInQuery(const QModelIndex &item) const; - void setLastError(const QSqlError &error); + void setLastError(const QSqlError &error) const; QSqlQueryModel(QSqlQueryModelPrivate &dd, QObject *parent = nullptr); }; diff --git a/src/testlib/3rdparty/valgrind/qt_attribution.json b/src/testlib/3rdparty/valgrind/qt_attribution.json index 3146fd82c57..262bc8380b4 100644 --- a/src/testlib/3rdparty/valgrind/qt_attribution.json +++ b/src/testlib/3rdparty/valgrind/qt_attribution.json @@ -11,7 +11,7 @@ "Description": "An instrumentation framework for building dynamic analysis tools.", "Homepage": "http://valgrind.org/", - "Version": "3.24.0", + "Version": "3.25.1", "PURL": "pkg:generic/valgrind@$<VERSION>?download_url=https://valgrind.org/", "License": "BSD 4-clause \"Original\" or \"Old\" License", "LicenseId": "BSD-4-Clause", diff --git a/src/testlib/3rdparty/valgrind/valgrind_p.h b/src/testlib/3rdparty/valgrind/valgrind_p.h index 77ca3ad8692..ab49937ccd4 100644 --- a/src/testlib/3rdparty/valgrind/valgrind_p.h +++ b/src/testlib/3rdparty/valgrind/valgrind_p.h @@ -89,7 +89,7 @@ || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6)) */ #define __VALGRIND_MAJOR__ 3 -#define __VALGRIND_MINOR__ 24 +#define __VALGRIND_MINOR__ 25 #include <stdarg.h> @@ -126,6 +126,7 @@ #undef PLAT_mips32_linux #undef PLAT_mips64_linux #undef PLAT_nanomips_linux +#undef PLAT_riscv64_linux #undef PLAT_x86_solaris #undef PLAT_amd64_solaris @@ -172,6 +173,8 @@ # define PLAT_mips32_linux 1 #elif defined(__linux__) && defined(__nanomips__) # define PLAT_nanomips_linux 1 +#elif defined(__linux__) && defined(__riscv) && (__riscv_xlen == 64) +# define PLAT_riscv64_linux 1 #elif defined(__sun) && defined(__i386__) # define PLAT_x86_solaris 1 #elif defined(__sun) && defined(__x86_64__) @@ -1129,6 +1132,87 @@ typedef } while (0) #endif + +/* ----------------------- riscv64-linux ------------------------ */ + +#if defined(PLAT_riscv64_linux) + +typedef + struct { + unsigned long int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + ".option push\n\t" \ + ".option norvc\n\t" \ + "srli zero, zero, 3\n\t" \ + "srli zero, zero, 13\n\t" \ + "srli zero, zero, 51\n\t" \ + "srli zero, zero, 61\n\t" + +#define __SPECIAL_INSTRUCTION_POSTAMBLE \ + ".option pop\n\t" \ + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({volatile unsigned long int _zzq_args[6]; \ + volatile unsigned long int _zzq_result; \ + _zzq_args[0] = (unsigned long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ + __asm__ volatile("mv a3, %1\n\t" /*default*/ \ + "mv a4, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* a3 = client_request ( a4 ) */ \ + "or a0, a0, a0\n\t" \ + __SPECIAL_INSTRUCTION_POSTAMBLE \ + "mv %0, a3" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" ((unsigned long int)(_zzq_default)), \ + "r" (&_zzq_args[0]) \ + : "memory", "a3", "a4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* a3 = guest_NRADDR */ \ + "or a1, a1, a1\n\t" \ + __SPECIAL_INSTRUCTION_POSTAMBLE \ + "mv %0, a3" \ + : "=r" (__addr) \ + : \ + : "memory", "a3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir t0 */ \ + "or a2, a2, a2\n\t" \ + __SPECIAL_INSTRUCTION_POSTAMBLE + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or a3, a3, a3\n\t" \ + __SPECIAL_INSTRUCTION_POSTAMBLE \ + : : : "memory" \ + ); \ + } while (0) + +#endif /* PLAT_riscv64_linux */ + /* Insert assembly code for other platforms here... */ #endif /* NVALGRIND */ @@ -6606,6 +6690,456 @@ typedef #endif /* PLAT_mips64_linux */ +/* ----------------------- riscv64-linux ----------------------- */ + +#if defined(PLAT_riscv64_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "ra", \ + "t0", "t1", "t2", "t3", "t4", "t5", "t6", \ + "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", \ + "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", \ + "ft8", "ft9", "ft10", "ft11", \ + "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", "fa6", "fa7" + +/* s11 is callee-saved, so we can use it to save and restore sp around + the hidden call. */ +#define VALGRIND_ALIGN_STACK \ + "mv s11, sp\n\t" \ + "andi sp, sp, 0xfffffffffffffff0\n\t" +#define VALGRIND_RESTORE_STACK \ + "mv sp, s11\n\t" + +/* These CALL_FN_ macros assume that on riscv64-linux, + sizeof(unsigned long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld a5, 48(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld a5, 48(%1) \n\t" \ + "ld a6, 56(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld a5, 48(%1) \n\t" \ + "ld a6, 56(%1) \n\t" \ + "ld a7, 64(%1) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "addi sp, sp, -16 \n\t" \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld a5, 48(%1) \n\t" \ + "ld a6, 56(%1) \n\t" \ + "ld a7, 64(%1) \n\t" \ + "ld t0, 72(%1) \n\t" \ + "sd t0, 0(sp) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "addi sp, sp, -16 \n\t" \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld a5, 48(%1) \n\t" \ + "ld a6, 56(%1) \n\t" \ + "ld a7, 64(%1) \n\t" \ + "ld t0, 72(%1) \n\t" \ + "sd t0, 0(sp) \n\t" \ + "ld t0, 80(%1) \n\t" \ + "sd t0, 8(sp) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "addi sp, sp, -32 \n\t" \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld a5, 48(%1) \n\t" \ + "ld a6, 56(%1) \n\t" \ + "ld a7, 64(%1) \n\t" \ + "ld t0, 72(%1) \n\t" \ + "sd t0, 0(sp) \n\t" \ + "ld t0, 80(%1) \n\t" \ + "sd t0, 8(sp) \n\t" \ + "ld t0, 88(%1) \n\t" \ + "sd t0, 16(sp) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11, \ + arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "addi sp, sp, -32 \n\t" \ + "ld a0, 8(%1) \n\t" \ + "ld a1, 16(%1) \n\t" \ + "ld a2, 24(%1) \n\t" \ + "ld a3, 32(%1) \n\t" \ + "ld a4, 40(%1) \n\t" \ + "ld a5, 48(%1) \n\t" \ + "ld a6, 56(%1) \n\t" \ + "ld a7, 64(%1) \n\t" \ + "ld t0, 72(%1) \n\t" \ + "sd t0, 0(sp) \n\t" \ + "ld t0, 80(%1) \n\t" \ + "sd t0, 8(sp) \n\t" \ + "ld t0, 88(%1) \n\t" \ + "sd t0, 16(sp) \n\t" \ + "ld t0, 96(%1) \n\t" \ + "sd t0, 24(sp) \n\t" \ + "ld t0, 0(%1) \n\t" /* target->t0 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_T0 \ + VALGRIND_RESTORE_STACK \ + "mv %0, a0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS, "s11" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_riscv64_linux */ + /* ------------------------------------------------------------------ */ /* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ /* */ @@ -7162,6 +7696,7 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...) #undef PLAT_mips32_linux #undef PLAT_mips64_linux #undef PLAT_nanomips_linux +#undef PLAT_riscv64_linux #undef PLAT_x86_solaris #undef PLAT_amd64_solaris diff --git a/src/widgets/kernel/qwidgetsvariant.cpp b/src/widgets/kernel/qwidgetsvariant.cpp index 17a19aa780d..c843927d366 100644 --- a/src/widgets/kernel/qwidgetsvariant.cpp +++ b/src/widgets/kernel/qwidgetsvariant.cpp @@ -11,18 +11,16 @@ QT_BEGIN_NAMESPACE namespace { - -// NOLINTNEXTLINE(cppcoreguidelines-virtual-class-destructor): this is not a base class -static constexpr struct : QMetaTypeModuleHelper +struct QVariantWidgetsHelper : QMetaTypeModuleHelper { - const QtPrivate::QMetaTypeInterface *interfaceForType(int type) const override { + static const QtPrivate::QMetaTypeInterface *interfaceForType(int type) + { switch (type) { QT_FOR_EACH_STATIC_WIDGETS_CLASS(QT_METATYPE_CONVERT_ID_TO_TYPE) default: return nullptr; } } -} qVariantWidgetsHelper; - +}; #undef QT_IMPL_METATYPEINTERFACE_WIDGETS_TYPES @@ -30,7 +28,9 @@ static constexpr struct : QMetaTypeModuleHelper void qRegisterWidgetsVariant() { - qMetaTypeWidgetsHelper = &qVariantWidgetsHelper; + qMetaTypeWidgetsHelper = QMetaTypeModuleHelper{ + &QVariantWidgetsHelper::interfaceForType, + }; } Q_CONSTRUCTOR_FUNCTION(qRegisterWidgetsVariant) diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index e9cc250c517..c341a025115 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -591,7 +591,7 @@ void QFusionStyle::drawPrimitive(PrimitiveElement elem, if (option->state & State_HasFocus && option->state & State_KeyboardFocusChange) painter->setPen(highlightedOutline); else - painter->setPen(colorScheme() == Qt::ColorScheme::Dark ? outline.lighter(150) + painter->setPen(colorScheme() == Qt::ColorScheme::Dark ? outline.lighter(240) : outline.lighter(110)); painter->drawRect(rect); diff --git a/src/widgets/styles/qfusionstyle_p_p.h b/src/widgets/styles/qfusionstyle_p_p.h index 67abdd74dc8..62641609d59 100644 --- a/src/widgets/styles/qfusionstyle_p_p.h +++ b/src/widgets/styles/qfusionstyle_p_p.h @@ -70,10 +70,7 @@ public: } if (pal.window().style() == Qt::TexturePattern) return QColor(0, 0, 0, 160); - if (colorScheme() == Qt::ColorScheme::Dark) - return pal.window().color().lighter(140); - else - return pal.window().color().darker(140); + return pal.window().color().darker(140); } QColor highlightedOutline(const QPalette &pal) const { diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 87c33932a8d..a1a4cfc2ce0 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -2673,8 +2673,10 @@ void QMainWindowLayout::animationFinished(QWidget *widget) parentWidget()->update(layoutState.dockAreaLayout.separatorRegion()); #if QT_CONFIG(tabbar) const auto usedTabBarsCopy = usedTabBars; // list potentially modified by animations - for (QTabBar *tab_bar : usedTabBarsCopy) - tab_bar->show(); + for (QTabBar *tab_bar : usedTabBarsCopy) { + if (usedTabBars.contains(tab_bar)) // Showing a tab bar can cause another to be deleted. + tab_bar->show(); + } #endif // QT_CONFIG(tabbar) #endif // QT_CONFIG(dockwidget) } diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp index 1e423f21bec..0ea2be1b147 100644 --- a/tests/auto/corelib/io/qdir/tst_qdir.cpp +++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp @@ -430,7 +430,7 @@ void tst_QDir::mkdirRmdir() void tst_QDir::mkdirOnSymlink() { -#if !defined(Q_OS_UNIX) || defined(Q_NO_SYMLINKS) || defined(Q_OS_INTEGRITY) || defined(Q_OS_WASM) +#if !defined(Q_OS_UNIX) || defined(Q_NO_SYMLINKS) || defined(Q_OS_INTEGRITY) QSKIP("Test only valid on an OS that supports symlinks"); #else // Create the structure: @@ -477,9 +477,6 @@ void tst_QDir::mkdirOnSymlink() #if defined(Q_OS_QNX) QSKIP("Fails on QNX QTBUG-98561"); #endif -#if defined (Q_OS_WASM) - QEXPECT_FAIL("", "fails on wasm, see bug: QTBUG-127766", Continue); -#endif QVERIFY2(fi.exists() && fi.isDir(), msgDoesNotExist(path).constData()); #endif } diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index 781f64a31ab..66c3db2e2f0 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -228,6 +228,7 @@ private slots: void getCharFF(); void remove_and_exists(); void removeOpenFile(); + void removedFileDoesntExist(); void fullDisk(); void writeLargeDataBlock_data(); void writeLargeDataBlock(); @@ -2526,6 +2527,37 @@ void tst_QFile::removeOpenFile() } } +void tst_QFile::removedFileDoesntExist() +{ +#ifdef Q_OS_WIN + QSKIP("Not relevant for Windows - can't remove still-open files"); +#endif + QFile::remove("remove_unclosed.txt"); + QFile f("remove_unclosed.txt"); + QVERIFY(!f.exists()); + bool opened = f.open(QIODevice::ReadWrite | QIODevice::Unbuffered); + QVERIFY(opened); + f.write("blah blah blah"); + + QVERIFY(f.exists()); + + // delete by path, not using f.remove() (that's tested above) + QVERIFY(QFile::remove(f.fileName())); + QVERIFY(!QFile::exists(f.fileName())); + QVERIFY(!f.exists()); + +#ifdef Q_OS_LINUX + QString procPath = u"/proc/self/fd/"_s; + if (QFile::exists(procPath)) { + // reopen the deleted file + procPath += QString::number(f.handle()); + QFile f2(procPath); + QVERIFY(f2.open(QIODevice::ReadOnly)); + QVERIFY(!f2.exists()); + } +#endif +} + void tst_QFile::fullDisk() { QFile file("/dev/full"); diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp index 761f0552eec..e2190477441 100644 --- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp @@ -141,6 +141,7 @@ private slots: void exists_data(); void exists(); + void deletedFileLinuxProcExists(); void absolutePath_data(); void absolutePath(); @@ -615,6 +616,34 @@ void tst_QFileInfo::exists() QVERIFY(!exists); } +void tst_QFileInfo::deletedFileLinuxProcExists() +{ +#ifdef Q_OS_LINUX + static const char msg[] = "Hello, World\n"; + QFileInfo fi("/proc/self/fd/"); + if (!fi.isDir()) + QSKIP("/proc appears not to be mounted"); + + QFile f("removed_file.txt"); + QVERIFY(f.open(QIODevice::ReadWrite | QIODevice::Unbuffered)); + f.write(msg, strlen(msg)); + + fi.setFile(fi.filePath() + QString::number(f.handle())); + QVERIFY(fi.exists()); + QCOMPARE(fi.size(), strlen(msg)); + + QFile::remove("removed_file.txt"); + fi.refresh(); + QVERIFY(fi.exists()); + + fi.refresh(); + QCOMPARE(fi.size(), strlen(msg)); // this stats, so may change flags + QVERIFY(fi.exists()); +#else + QSKIP("Linux-only test"); +#endif +} + void tst_QFileInfo::absolutePath_data() { QTest::addColumn<QString>("file"); diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index 282c7f2e360..71389abc976 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -513,6 +513,7 @@ void tst_QUrl::comparison2() QCOMPARE(url1.toString(), url2.toString()); QCOMPARE(url1, url2); QCOMPARE(qHash(url1), qHash(url2)); + QCOMPARE(qHash(url1, 1), qHash(url2, 1)); } else if (ordering < 0) { QCOMPARE_LT(url1.toString(), url2.toString()); QCOMPARE_NE(url1, url2); @@ -1387,12 +1388,14 @@ void tst_QUrl::toString_constructed() QUrl parsed(asString); QCOMPARE(url, parsed); QCOMPARE(qHash(url), qHash(parsed)); + QCOMPARE(qHash(url, 1), qHash(parsed, 1)); } // clear it and ensure no memory of the previous state remains url.setUrl(QString()); QCOMPARE(url, QUrl()); QCOMPARE(qHash(url), qHash(QUrl())); + QCOMPARE(qHash(url, 1), qHash(QUrl(), 1)); } void tst_QUrl::toDisplayString_PreferLocalFile_data() @@ -4265,6 +4268,7 @@ void tst_QUrl::setComponents() QUrl recreated(toString); QCOMPARE(copy, recreated); QCOMPARE(qHash(copy), qHash(recreated)); + QCOMPARE(qHash(copy, 1), qHash(recreated, 1)); } else { QVERIFY(copy.toString().isEmpty()); } diff --git a/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp b/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp index 5a49d9cf024..878fd173675 100644 --- a/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp +++ b/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp @@ -286,6 +286,7 @@ private slots: void ranges(); void json(); void ownership(); + void overrideRoleNames(); void dimensions_data() { createTestData(); } void dimensions(); @@ -1008,6 +1009,45 @@ void tst_QRangeModel::ownership() } } +void tst_QRangeModel::overrideRoleNames() +{ + // verify that an overridden roleNames() gets called consistently + class RoleModel : public QRangeModel + { + public: + RoleModel() : QRangeModel(QList<SingleColumn<Object *>>{ + new Object, + new Object, + new Object, + }) { + } + + QHash<int, QByteArray> roleNames() const override + { + return { + {Qt::UserRole, "string"}, + {Qt::UserRole + 1, "number"} + }; + } + }; + + RoleModel model; + const QList<int> expectedKeys = {Qt::UserRole, Qt::UserRole + 1}; + QCOMPARE(model.roleNames().size(), expectedKeys.size()); + + const QModelIndex index = model.index(0, 0); + QVERIFY(model.setData(index, "string value", Qt::UserRole)); + QVERIFY(model.setData(index, 42, Qt::UserRole + 1)); + QVERIFY(!model.setData(index, "display")); + + const auto itemData = model.itemData(index); + QCOMPARE(itemData.keys(), expectedKeys); + QCOMPARE(itemData.value(Qt::UserRole), "string value"); + QCOMPARE(itemData.value(Qt::UserRole + 1), 42); + + QVERIFY(model.setItemData(model.index(1, 0), itemData)); +} + void tst_QRangeModel::dimensions() { QFETCH(Factory, factory); diff --git a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp index b1e2e8164af..f2d281ae0a4 100644 --- a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp +++ b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp @@ -708,6 +708,8 @@ void tst_QMetaObjectBuilder::property() prop2.setEnumOrFlag(false); \ prop2.setConstant(false); \ prop2.setFinal(false); \ + prop2.setBindable(false); \ + prop2.setRequired(false); \ } while (0) #define COUNT_FLAGS() \ ((prop2.isReadable() ? 1 : 0) + \ @@ -720,7 +722,9 @@ void tst_QMetaObjectBuilder::property() (prop2.hasStdCppSet() ? 1 : 0) + \ (prop2.isEnumOrFlag() ? 1 : 0) + \ (prop2.isConstant() ? 1 : 0) + \ - (prop2.isFinal() ? 1 : 0)) + (prop2.isFinal() ? 1 : 0) + \ + (prop2.isBindable() ? 1 : 0) + \ + (prop2.isRequired() ? 1 : 0)) #define CHECK_FLAG(setFunc,isFunc) \ do { \ CLEAR_FLAGS(); \ diff --git a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp index f66bea72828..d53d0d1713d 100644 --- a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp +++ b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp @@ -16,6 +16,23 @@ using namespace std::chrono_literals; +class Interface +{ +public: + virtual ~Interface() = default; + virtual void meep() const = 0; +}; + +class ObjectImplementingInterface : public QObject, public Interface +{ + Q_OBJECT +public: + using QObject::QObject; + +public Q_SLOTS: + void meep() const override {} +}; + class tst_QPointer : public QObject { Q_OBJECT @@ -31,6 +48,7 @@ private slots: void assignment_operators(); void compareCompiles(); void equality_operators(); + void equality_operators_interface(); void swap(); void isNull(); void dereference_operators(); @@ -218,6 +236,7 @@ void tst_QPointer::compareCompiles() QTestPrivate::testEqualityOperatorsCompile<QPointer<QObject>, QWidget*>(); QTestPrivate::testEqualityOperatorsCompile<QPointer<QObject>, QPointer<QWidget>>(); QTestPrivate::testEqualityOperatorsCompile<QPointer<QObject>, std::nullptr_t>(); + QTestPrivate::testEqualityOperatorsCompile<QPointer<ObjectImplementingInterface>, Interface*>(); } void tst_QPointer::equality_operators() @@ -259,6 +278,25 @@ void tst_QPointer::equality_operators() #endif } +void tst_QPointer::equality_operators_interface() +{ + QObject reaper; + QPointer<ObjectImplementingInterface> p(new ObjectImplementingInterface(&reaper)); + Interface *i = p.get(); + + ObjectImplementingInterface otherP; + Interface *otherI = &otherP; + + // things that are equal + QT_TEST_EQUALITY_OPS(p, p, true); + QT_TEST_EQUALITY_OPS(p, i, true); + + // things that are not equal + QT_TEST_EQUALITY_OPS(p, nullptr, false); + QT_TEST_EQUALITY_OPS(p, &otherP, false); + QT_TEST_EQUALITY_OPS(p, otherI, false); +} + void tst_QPointer::swap() { QPointer<QObject> c1, c2; diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index 35eda3ad709..bfc6074689b 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -445,14 +445,16 @@ void tst_QLocale::defaulted_ctor() TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates); TEST_CTOR(English, France, QLocale::English, QLocale::France); TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom); + // Used in tests below to check we pick the likely-best substitute consistently: + TEST_CTOR(Arabic, UnitedStates, QLocale::Arabic, QLocale::Egypt); TEST_CTOR(French, France, QLocale::French, QLocale::France); TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory); TEST_CTOR(Spanish, LatinAmerica, QLocale::Spanish, QLocale::LatinAmerica); - QLocale::setDefault(QLocale(QLocale::English, QLocale::France)); - CHECK_DEFAULT(QLocale::English, QLocale::France); + QLocale::setDefault(QLocale(QLocale::Arabic, QLocale::UnitedStates)); + CHECK_DEFAULT(QLocale::Arabic, QLocale::Egypt); TEST_CTOR(French, France, QLocale::French, QLocale::France); TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom); @@ -460,7 +462,7 @@ void tst_QLocale::defaulted_ctor() TEST_CTOR(French, France, QLocale::French, QLocale::France); TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory); TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory); - TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::France); + TEST_CTOR(Aymara, AnyTerritory, QLocale::Arabic, QLocale::Egypt); QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedKingdom)); CHECK_DEFAULT(QLocale::English, QLocale::UnitedKingdom); @@ -481,6 +483,7 @@ void tst_QLocale::defaulted_ctor() TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates); TEST_CTOR(English, France, QLocale::English, QLocale::France); TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom); + TEST_CTOR(Arabic, UnitedStates, QLocale::Arabic, QLocale::Egypt); TEST_CTOR(French, France, QLocale::French, QLocale::France); TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory); @@ -496,6 +499,7 @@ void tst_QLocale::defaulted_ctor() TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates); TEST_CTOR(English, France, QLocale::English, QLocale::France); TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom); + TEST_CTOR(Arabic, UnitedStates, QLocale::Arabic, QLocale::Egypt); TEST_CTOR(French, France, QLocale::French, QLocale::France); TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory); @@ -2466,7 +2470,8 @@ void tst_QLocale::formatTimeZone() // Time definitely in Standard Time const QStringList knownCETus = { u"GMT+1"_s, // ICU - u"CET"_s // Standard abbreviation + u"CET"_s, // Standard abbreviation + u"UTC+0100"_s, // used by Emscripten }; const QString cet = enUS.toString(QDate(2013, 1, 1).startOfDay(), u"t"); QVERIFY2(knownCETus.contains(cet), cet.isEmpty() ? "[empty]" : qPrintable(cet)); @@ -2474,7 +2479,8 @@ void tst_QLocale::formatTimeZone() // Time definitely in Daylight Time const QStringList knownCESTus = { u"GMT+2"_s, // ICU - u"CEST"_s // Standard abbreviation + u"CEST"_s, // Standard abbreviation + u"UTC+0200"_s, // used by Emscripten }; const QString cest = enUS.toString(QDate(2013, 6, 1).startOfDay(), u"t"); QVERIFY2(knownCESTus.contains(cest), cest.isEmpty() ? "[empty]" : qPrintable(cest)); diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp index 5804aeeb1e5..87d48d56e6b 100644 --- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp +++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp @@ -73,22 +73,22 @@ void tst_QArrayData::referenceCounting() // Reference counting initialized to 1 (owned) QArrayData array = { Q_BASIC_ATOMIC_INITIALIZER(1), {}, 0 }; - QCOMPARE(array.ref_.loadRelaxed(), 1); + QCOMPARE(array.m_ref.loadRelaxed(), 1); QVERIFY(array.ref()); - QCOMPARE(array.ref_.loadRelaxed(), 2); + QCOMPARE(array.m_ref.loadRelaxed(), 2); QVERIFY(array.deref()); - QCOMPARE(array.ref_.loadRelaxed(), 1); + QCOMPARE(array.m_ref.loadRelaxed(), 1); QVERIFY(array.ref()); - QCOMPARE(array.ref_.loadRelaxed(), 2); + QCOMPARE(array.m_ref.loadRelaxed(), 2); QVERIFY(array.deref()); - QCOMPARE(array.ref_.loadRelaxed(), 1); + QCOMPARE(array.m_ref.loadRelaxed(), 1); QVERIFY(!array.deref()); - QCOMPARE(array.ref_.loadRelaxed(), 0); + QCOMPARE(array.m_ref.loadRelaxed(), 0); // Now would be a good time to free/release allocated data } diff --git a/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp index 89bd1d7ff61..b53362b43e9 100644 --- a/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp +++ b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp @@ -5,6 +5,10 @@ #include <QTest> +#include <chrono> + +using namespace std::chrono_literals; + class tst_QAtomicScopedValueRollback : public QObject { Q_OBJECT @@ -15,6 +19,7 @@ private Q_SLOTS: void rollbackToPreviousCommit(); void exceptions(); void earlyExitScope(); + void mixedTypes(); private: void earlyExitScope_helper(int exitpoint, std::atomic<int> &member); }; @@ -132,6 +137,90 @@ void tst_QAtomicScopedValueRollback::earlyExitScope() } } +template <typename T> +struct Wrap { +#if __cpp_deduction_guides < 201907L // no CTAD for aggregates + Q_IMPLICIT Wrap(T &t) : t{t} {} + Q_IMPLICIT Wrap(T &&t) : t{std::move(t)} {} +#endif + T t; + Q_IMPLICIT operator T() const { return t; } +}; + +void tst_QAtomicScopedValueRollback::mixedTypes() +{ + const auto relaxed = std::memory_order_relaxed; + { + std::atomic a{10'000ms}; + { + QAtomicScopedValueRollback rb(a, 5s); + QCOMPARE(a.load(relaxed), 5s); + } + QCOMPARE(a.load(relaxed), 10s); + { + QAtomicScopedValueRollback rb(a, 5s, relaxed); + QCOMPARE(a.load(relaxed), 5s); + } + QCOMPARE(a.load(relaxed), 10s); + } + { + QBasicAtomicInteger a{10'000}; + { + QAtomicScopedValueRollback rb(a, Wrap{5'000}); + QCOMPARE(a.loadRelaxed(), 5'000); + } + QCOMPARE(a.loadRelaxed(), 10'000); + { + QAtomicScopedValueRollback rb(a, Wrap{5'000}, relaxed); + QCOMPARE(a.loadRelaxed(), 5'000); + } + QCOMPARE(a.loadRelaxed(), 10'000); + } + { + QAtomicInteger a{10'000}; + { + QAtomicScopedValueRollback rb(a, Wrap{5'000}); + QCOMPARE(a.loadRelaxed(), 5'000); + } + QCOMPARE(a.loadRelaxed(), 10'000); + { + QAtomicScopedValueRollback rb(a, Wrap{5'000}, relaxed); + QCOMPARE(a.loadRelaxed(), 5'000); + } + QCOMPARE(a.loadRelaxed(), 10'000); + } + { + int i = 10'000; + int j = 5'000; + QBasicAtomicPointer a{&i}; + { + QAtomicScopedValueRollback rb(a, Wrap{&j}); + QCOMPARE(a.loadRelaxed(), &j); + } + QCOMPARE(a.loadRelaxed(), &i); + { + QAtomicScopedValueRollback rb(a, Wrap{&j}, relaxed); + QCOMPARE(a.loadRelaxed(), &j); + } + QCOMPARE(a.loadRelaxed(), &i); + } + { + int i = 10'000; + int j = 5'000; + QAtomicPointer a{&i}; + { + QAtomicScopedValueRollback rb(a, Wrap{&j}); + QCOMPARE(a.loadRelaxed(), &j); + } + QCOMPARE(a.loadRelaxed(), &i); + { + QAtomicScopedValueRollback rb(a, Wrap{&j}, relaxed); + QCOMPARE(a.loadRelaxed(), &j); + } + QCOMPARE(a.loadRelaxed(), &i); + } +} + static void operator*=(std::atomic<int> &lhs, int rhs) { int expected = lhs.load(); diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index 39051276371..1c8dd14eba4 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -3264,12 +3264,14 @@ void tst_QWindow::windowExposedAfterReparent() QVERIFY(QTest::qWaitForWindowExposed(&parent)); QVERIFY(QTest::qWaitForWindowExposed(&child)); + // Close the child before reparenting it to ensure it is correctly converted + // to a toplevel window by the window manager. + child.close(); child.setParent(nullptr); - QCoreApplication::processEvents(); + child.show(); QVERIFY(QTest::qWaitForWindowExposed(&child)); child.setParent(&parent); - QCoreApplication::processEvents(); QVERIFY(QTest::qWaitForWindowExposed(&child)); } diff --git a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp index bd4a230b78a..d4dc6544a0e 100644 --- a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp +++ b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp @@ -894,6 +894,13 @@ void tst_QQuaternion::fromAxes() QQuaternion result = QQuaternion::fromAxisAndAngle(QVector3D(x1, y1, z1), angle); + { + const auto axes = result.toAxes(); + QVERIFY(myFuzzyCompare(axes.x, xAxis)); + QVERIFY(myFuzzyCompare(axes.y, yAxis)); + QVERIFY(myFuzzyCompare(axes.z, zAxis)); + } + QVector3D axes[3]; result.getAxes(&axes[0], &axes[1], &axes[2]); QVERIFY(myFuzzyCompare(axes[0], xAxis)); @@ -985,8 +992,7 @@ void tst_QQuaternion::fromDirection_data() // othonormal up and dir for (QQuaternion q : orientations) { - QVector3D xAxis, yAxis, zAxis; - q.getAxes(&xAxis, &yAxis, &zAxis); + const auto [xAxis, yAxis, zAxis] = q.toAxes(); QTest::addRow("ortho dirs: (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f)", xAxis.x(), xAxis.y(), xAxis.z(), @@ -1007,8 +1013,7 @@ void tst_QQuaternion::fromDirection_data() // invalid up for (QQuaternion q : orientations) { - QVector3D xAxis, yAxis, zAxis; - q.getAxes(&xAxis, &yAxis, &zAxis); + const auto [xAxis, yAxis, zAxis] = q.toAxes(); QTest::addRow("bad dirs: (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f)", xAxis.x(), xAxis.y(), xAxis.z(), @@ -1029,16 +1034,14 @@ void tst_QQuaternion::fromDirection() QQuaternion result = QQuaternion::fromDirection(direction, up); QVERIFY(myFuzzyCompare(result, result.normalized())); - QVector3D xAxis, yAxis, zAxis; - result.getAxes(&xAxis, &yAxis, &zAxis); - - QVERIFY(myFuzzyCompare(zAxis, expectedZ)); + const auto axes = result.toAxes(); + QVERIFY(myFuzzyCompare(axes.z, expectedZ)); const QVector3D expectedX = QVector3D::crossProduct(expectedY, expectedZ); if (!qFuzzyIsNull(expectedX.lengthSquared())) { - QVERIFY(myFuzzyCompare(xAxis, expectedX)); - QVERIFY(myFuzzyCompare(yAxis, expectedY)); + QVERIFY(myFuzzyCompare(axes.x, expectedX)); + QVERIFY(myFuzzyCompare(axes.y, expectedY)); } } diff --git a/tests/auto/testlib/selftests/expected_threewaycompare.junitxml b/tests/auto/testlib/selftests/expected_threewaycompare.junitxml index e10872ef1ba..37551ecd23d 100644 --- a/tests/auto/testlib/selftests/expected_threewaycompare.junitxml +++ b/tests/auto/testlib/selftests/expected_threewaycompare.junitxml @@ -25,8 +25,8 @@ </testcase> <testcase name="compareFloats(Qt::partial_ordering::equivalent)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 1 - Right (rhs): 1 + <![CDATA[ Left (lhs): 1 (0x1p+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::less]]> </failure> @@ -34,24 +34,24 @@ <testcase name="compareFloats(Qt::partial_ordering::less)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"/> <testcase name="compareFloats(Qt::partial_ordering::greater)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 1.1 - Right (rhs): 1 + <![CDATA[ Left (lhs): 1.1 (0x1.19999ap+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): Qt::partial_ordering::less]]> </failure> </testcase> <testcase name="compareDoubles(Qt::partial_ordering::equivalent)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 0 - Right (rhs): 0 + <![CDATA[ Left (lhs): 0 (0x0p+0) + Right (rhs): 0 (0x0p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::greater]]> </failure> </testcase> <testcase name="compareDoubles(Qt::partial_ordering::less)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 0 - Right (rhs): 0.1 + <![CDATA[ Left (lhs): 0 (0x0p+0) + Right (rhs): 0.1 (0x1.999999999999ap-4) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): Qt::partial_ordering::greater]]> </failure> @@ -161,16 +161,16 @@ </testcase> <testcase name="stdCompareFloats(std::partial_ordering::equivalent)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 2 - Right (rhs): 2 + <![CDATA[ Left (lhs): 2 (0x1p+1) + Right (rhs): 2 (0x1p+1) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::less]]> </failure> </testcase> <testcase name="stdCompareFloats(std::partial_ordering::less)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 2 - Right (rhs): 1.1 + <![CDATA[ Left (lhs): 2 (0x1p+1) + Right (rhs): 1.1 (0x1.19999ap+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): std::partial_ordering::less]]> </failure> @@ -178,16 +178,16 @@ <testcase name="stdCompareFloats(std::partial_ordering::greater)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"/> <testcase name="stdCompareDoubles(std::partial_ordering::equivalent)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 0.15 - Right (rhs): 0.15 + <![CDATA[ Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.15 (0x1.3333333333333p-3) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::greater]]> </failure> </testcase> <testcase name="stdCompareDoubles(std::partial_ordering::less)" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (lhs): 0.15 - Right (rhs): 0.25 + <![CDATA[ Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.25 (0x1p-2) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): std::partial_ordering::greater]]> </failure> @@ -288,8 +288,8 @@ </testcase> <testcase name="checkWeakComparison" classname="tst_ThreeWayCompare" time="@TEST_DURATION@"> <failure type="fail" message="The result of operator<=>() is not what was expected"> - <![CDATA[ Left (june) : 2012/06/20 14:33:02.500[CEST] - Right (juneLater): 2012/06/20 14:33:02.501[CEST] + <![CDATA[ Left (june) : 2012/06/20 14:33:02.500[UTC] + Right (juneLater): 2012/06/20 14:33:02.501[UTC] Actual (june <=> juneLater) : std::weak_ordering::less Expected (Qt::weak_ordering::greater): Qt::weak_ordering::greater]]> </failure> diff --git a/tests/auto/testlib/selftests/expected_threewaycompare.lightxml b/tests/auto/testlib/selftests/expected_threewaycompare.lightxml index 75679c5e374..082255a2c41 100644 --- a/tests/auto/testlib/selftests/expected_threewaycompare.lightxml +++ b/tests/auto/testlib/selftests/expected_threewaycompare.lightxml @@ -33,8 +33,8 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 1 - Right (rhs): 1 + Left (lhs): 1 (0x1p+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::less]]></Description> </Incident> @@ -44,8 +44,8 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::greater]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 1.1 - Right (rhs): 1 + Left (lhs): 1.1 (0x1.19999ap+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): Qt::partial_ordering::less]]></Description> </Incident> @@ -55,16 +55,16 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0 (0x0p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::greater]]></Description> </Incident> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::less]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0.1 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0.1 (0x1.999999999999ap-4) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): Qt::partial_ordering::greater]]></Description> </Incident> @@ -209,16 +209,16 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 2 + Left (lhs): 2 (0x1p+1) + Right (rhs): 2 (0x1p+1) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::less]]></Description> </Incident> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::less]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 1.1 + Left (lhs): 2 (0x1p+1) + Right (rhs): 1.1 (0x1.19999ap+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): std::partial_ordering::less]]></Description> </Incident> @@ -231,16 +231,16 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.15 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.15 (0x1.3333333333333p-3) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::greater]]></Description> </Incident> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::less]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.25 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.25 (0x1p-2) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): std::partial_ordering::greater]]></Description> </Incident> @@ -372,8 +372,8 @@ <TestFunction name="checkWeakComparison"> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (june) : 2012/06/20 14:33:02.500[CEST] - Right (juneLater): 2012/06/20 14:33:02.501[CEST] + Left (june) : 2012/06/20 14:33:02.500[UTC] + Right (juneLater): 2012/06/20 14:33:02.501[UTC] Actual (june <=> juneLater) : std::weak_ordering::less Expected (Qt::weak_ordering::greater): Qt::weak_ordering::greater]]></Description> </Incident> diff --git a/tests/auto/testlib/selftests/expected_threewaycompare.tap b/tests/auto/testlib/selftests/expected_threewaycompare.tap index daeae42c06f..5d464e0e648 100644 --- a/tests/auto/testlib/selftests/expected_threewaycompare.tap +++ b/tests/auto/testlib/selftests/expected_threewaycompare.tap @@ -27,8 +27,8 @@ not ok 4 - compareInts(Qt::strong_ordering::greater) not ok 5 - compareFloats(Qt::partial_ordering::equivalent) --- # The result of operator<=>() is not what was expected - Left (lhs): 1 - Right (rhs): 1 + Left (lhs): 1 (0x1p+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::less at: tst_ThreeWayCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -39,8 +39,8 @@ ok 6 - compareFloats(Qt::partial_ordering::less) not ok 7 - compareFloats(Qt::partial_ordering::greater) --- # The result of operator<=>() is not what was expected - Left (lhs): 1.1 - Right (rhs): 1 + Left (lhs): 1.1 (0x1.19999ap+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): Qt::partial_ordering::less at: tst_ThreeWayCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -50,8 +50,8 @@ not ok 7 - compareFloats(Qt::partial_ordering::greater) not ok 8 - compareDoubles(Qt::partial_ordering::equivalent) --- # The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0 (0x0p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::greater at: tst_ThreeWayCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -61,8 +61,8 @@ not ok 8 - compareDoubles(Qt::partial_ordering::equivalent) not ok 9 - compareDoubles(Qt::partial_ordering::less) --- # The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0.1 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0.1 (0x1.999999999999ap-4) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): Qt::partial_ordering::greater at: tst_ThreeWayCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -211,8 +211,8 @@ not ok 28 - stdCompareInts(std::strong_ordering::greater) not ok 29 - stdCompareFloats(std::partial_ordering::equivalent) --- # The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 2 + Left (lhs): 2 (0x1p+1) + Right (rhs): 2 (0x1p+1) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::less at: tst_ThreeWayCompare::stdCompareFloats() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -222,8 +222,8 @@ not ok 29 - stdCompareFloats(std::partial_ordering::equivalent) not ok 30 - stdCompareFloats(std::partial_ordering::less) --- # The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 1.1 + Left (lhs): 2 (0x1p+1) + Right (rhs): 1.1 (0x1.19999ap+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): std::partial_ordering::less at: tst_ThreeWayCompare::stdCompareFloats() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -234,8 +234,8 @@ ok 31 - stdCompareFloats(std::partial_ordering::greater) not ok 32 - stdCompareDoubles(std::partial_ordering::equivalent) --- # The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.15 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.15 (0x1.3333333333333p-3) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::greater at: tst_ThreeWayCompare::stdCompareDoubles() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -245,8 +245,8 @@ not ok 32 - stdCompareDoubles(std::partial_ordering::equivalent) not ok 33 - stdCompareDoubles(std::partial_ordering::less) --- # The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.25 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.25 (0x1p-2) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): std::partial_ordering::greater at: tst_ThreeWayCompare::stdCompareDoubles() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) @@ -383,8 +383,8 @@ not ok 50 - checkComparisonForTemporaryObjects() not ok 51 - checkWeakComparison() --- # The result of operator<=>() is not what was expected - Left (june) : 2012/06/20 14:33:02.500[CEST] - Right (juneLater): 2012/06/20 14:33:02.501[CEST] + Left (june) : 2012/06/20 14:33:02.500[UTC] + Right (juneLater): 2012/06/20 14:33:02.501[UTC] Actual (june <=> juneLater) : std::weak_ordering::less Expected (Qt::weak_ordering::greater): Qt::weak_ordering::greater at: tst_ThreeWayCompare::checkWeakComparison() (qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp:0) diff --git a/tests/auto/testlib/selftests/expected_threewaycompare.teamcity b/tests/auto/testlib/selftests/expected_threewaycompare.teamcity index 2eed5bdb422..6b92880418e 100644 --- a/tests/auto/testlib/selftests/expected_threewaycompare.teamcity +++ b/tests/auto/testlib/selftests/expected_threewaycompare.teamcity @@ -10,18 +10,18 @@ ##teamcity[testFailed name='compareInts(Qt::strong_ordering::greater)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 2|n Right (rhs): 1|n Actual (lhs <=> rhs) : std::strong_ordering::greater|n Expected (expectedOrder): Qt::strong_ordering::equal' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='compareInts(Qt::strong_ordering::greater)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='compareFloats(Qt::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='compareFloats(Qt::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 1|n Right (rhs): 1|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): Qt::partial_ordering::less' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='compareFloats(Qt::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 1 (0x1p+0)|n Right (rhs): 1 (0x1p+0)|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): Qt::partial_ordering::less' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='compareFloats(Qt::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='compareFloats(Qt::partial_ordering::less)' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='compareFloats(Qt::partial_ordering::less)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='compareFloats(Qt::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='compareFloats(Qt::partial_ordering::greater)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 1.1|n Right (rhs): 1|n Actual (lhs <=> rhs) : std::partial_ordering::greater|n Expected (expectedOrder): Qt::partial_ordering::less' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='compareFloats(Qt::partial_ordering::greater)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 1.1 (0x1.19999ap+0)|n Right (rhs): 1 (0x1p+0)|n Actual (lhs <=> rhs) : std::partial_ordering::greater|n Expected (expectedOrder): Qt::partial_ordering::less' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='compareFloats(Qt::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='compareDoubles(Qt::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='compareDoubles(Qt::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0|n Right (rhs): 0|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): Qt::partial_ordering::greater' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='compareDoubles(Qt::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0 (0x0p+0)|n Right (rhs): 0 (0x0p+0)|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): Qt::partial_ordering::greater' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='compareDoubles(Qt::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='compareDoubles(Qt::partial_ordering::less)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='compareDoubles(Qt::partial_ordering::less)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0|n Right (rhs): 0.1|n Actual (lhs <=> rhs) : std::partial_ordering::less|n Expected (expectedOrder): Qt::partial_ordering::greater' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='compareDoubles(Qt::partial_ordering::less)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0 (0x0p+0)|n Right (rhs): 0.1 (0x1.999999999999ap-4)|n Actual (lhs <=> rhs) : std::partial_ordering::less|n Expected (expectedOrder): Qt::partial_ordering::greater' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='compareDoubles(Qt::partial_ordering::less)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='compareDoubles(Qt::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='compareDoubles(Qt::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] @@ -74,18 +74,18 @@ ##teamcity[testFailed name='stdCompareInts(std::strong_ordering::greater)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): -2|n Right (rhs): 1|n Actual (lhs <=> rhs) : std::strong_ordering::less|n Expected (expectedOrder): std::strong_ordering::equal' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='stdCompareInts(std::strong_ordering::greater)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='stdCompareFloats(std::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='stdCompareFloats(std::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 2|n Right (rhs): 2|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): std::partial_ordering::less' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='stdCompareFloats(std::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 2 (0x1p+1)|n Right (rhs): 2 (0x1p+1)|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): std::partial_ordering::less' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='stdCompareFloats(std::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='stdCompareFloats(std::partial_ordering::less)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='stdCompareFloats(std::partial_ordering::less)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 2|n Right (rhs): 1.1|n Actual (lhs <=> rhs) : std::partial_ordering::greater|n Expected (expectedOrder): std::partial_ordering::less' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='stdCompareFloats(std::partial_ordering::less)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 2 (0x1p+1)|n Right (rhs): 1.1 (0x1.19999ap+0)|n Actual (lhs <=> rhs) : std::partial_ordering::greater|n Expected (expectedOrder): std::partial_ordering::less' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='stdCompareFloats(std::partial_ordering::less)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='stdCompareFloats(std::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='stdCompareFloats(std::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='stdCompareDoubles(std::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='stdCompareDoubles(std::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0.15|n Right (rhs): 0.15|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): std::partial_ordering::greater' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='stdCompareDoubles(std::partial_ordering::equivalent)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0.15 (0x1.3333333333333p-3)|n Right (rhs): 0.15 (0x1.3333333333333p-3)|n Actual (lhs <=> rhs) : std::partial_ordering::equivalent|n Expected (expectedOrder): std::partial_ordering::greater' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='stdCompareDoubles(std::partial_ordering::equivalent)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='stdCompareDoubles(std::partial_ordering::less)' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='stdCompareDoubles(std::partial_ordering::less)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0.15|n Right (rhs): 0.25|n Actual (lhs <=> rhs) : std::partial_ordering::less|n Expected (expectedOrder): std::partial_ordering::greater' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='stdCompareDoubles(std::partial_ordering::less)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (lhs): 0.15 (0x1.3333333333333p-3)|n Right (rhs): 0.25 (0x1p-2)|n Actual (lhs <=> rhs) : std::partial_ordering::less|n Expected (expectedOrder): std::partial_ordering::greater' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='stdCompareDoubles(std::partial_ordering::less)' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='stdCompareDoubles(std::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='stdCompareDoubles(std::partial_ordering::greater)' flowId='tst_ThreeWayCompare'] @@ -133,7 +133,7 @@ ##teamcity[testFailed name='checkComparisonForTemporaryObjects()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0|n Right (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1|n Actual (getClassForValue(0).getValuePointer() <=> getClassForValue(1).getValuePointer()): std::strong_ordering::less|n Expected (std::strong_ordering::equal) : std::strong_ordering::equal' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='checkComparisonForTemporaryObjects()' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='checkWeakComparison()' flowId='tst_ThreeWayCompare'] -##teamcity[testFailed name='checkWeakComparison()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (june) : 2012/06/20 14:33:02.500|[CEST|]|n Right (juneLater): 2012/06/20 14:33:02.501|[CEST|]|n Actual (june <=> juneLater) : std::weak_ordering::less|n Expected (Qt::weak_ordering::greater): Qt::weak_ordering::greater' flowId='tst_ThreeWayCompare'] +##teamcity[testFailed name='checkWeakComparison()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)|]' details='The result of operator<=>() is not what was expected|n Left (june) : 2012/06/20 14:33:02.500|[UTC|]|n Right (juneLater): 2012/06/20 14:33:02.501|[UTC|]|n Actual (june <=> juneLater) : std::weak_ordering::less|n Expected (Qt::weak_ordering::greater): Qt::weak_ordering::greater' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='checkWeakComparison()' flowId='tst_ThreeWayCompare'] ##teamcity[testStarted name='cleanupTestCase()' flowId='tst_ThreeWayCompare'] ##teamcity[testFinished name='cleanupTestCase()' flowId='tst_ThreeWayCompare'] diff --git a/tests/auto/testlib/selftests/expected_threewaycompare.txt b/tests/auto/testlib/selftests/expected_threewaycompare.txt index 896cec72819..45496e4420c 100644 --- a/tests/auto/testlib/selftests/expected_threewaycompare.txt +++ b/tests/auto/testlib/selftests/expected_threewaycompare.txt @@ -15,27 +15,27 @@ FAIL! : tst_ThreeWayCompare::compareInts(Qt::strong_ordering::greater) The resu Expected (expectedOrder): Qt::strong_ordering::equal Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] FAIL! : tst_ThreeWayCompare::compareFloats(Qt::partial_ordering::equivalent) The result of operator<=>() is not what was expected - Left (lhs): 1 - Right (rhs): 1 + Left (lhs): 1 (0x1p+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::less Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] PASS : tst_ThreeWayCompare::compareFloats(Qt::partial_ordering::less) FAIL! : tst_ThreeWayCompare::compareFloats(Qt::partial_ordering::greater) The result of operator<=>() is not what was expected - Left (lhs): 1.1 - Right (rhs): 1 + Left (lhs): 1.1 (0x1.19999ap+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): Qt::partial_ordering::less Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] FAIL! : tst_ThreeWayCompare::compareDoubles(Qt::partial_ordering::equivalent) The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0 (0x0p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::greater Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] FAIL! : tst_ThreeWayCompare::compareDoubles(Qt::partial_ordering::less) The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0.1 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0.1 (0x1.999999999999ap-4) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): Qt::partial_ordering::greater Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] @@ -119,27 +119,27 @@ FAIL! : tst_ThreeWayCompare::stdCompareInts(std::strong_ordering::greater) The Expected (expectedOrder): std::strong_ordering::equal Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] FAIL! : tst_ThreeWayCompare::stdCompareFloats(std::partial_ordering::equivalent) The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 2 + Left (lhs): 2 (0x1p+1) + Right (rhs): 2 (0x1p+1) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::less Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] FAIL! : tst_ThreeWayCompare::stdCompareFloats(std::partial_ordering::less) The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 1.1 + Left (lhs): 2 (0x1p+1) + Right (rhs): 1.1 (0x1.19999ap+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): std::partial_ordering::less Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] PASS : tst_ThreeWayCompare::stdCompareFloats(std::partial_ordering::greater) FAIL! : tst_ThreeWayCompare::stdCompareDoubles(std::partial_ordering::equivalent) The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.15 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.15 (0x1.3333333333333p-3) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::greater Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] FAIL! : tst_ThreeWayCompare::stdCompareDoubles(std::partial_ordering::less) The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.25 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.25 (0x1p-2) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): std::partial_ordering::greater Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] @@ -216,8 +216,8 @@ FAIL! : tst_ThreeWayCompare::checkComparisonForTemporaryObjects() The result of Expected (std::strong_ordering::equal) : std::strong_ordering::equal Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] FAIL! : tst_ThreeWayCompare::checkWeakComparison() The result of operator<=>() is not what was expected - Left (june) : 2012/06/20 14:33:02.500[CEST] - Right (juneLater): 2012/06/20 14:33:02.501[CEST] + Left (june) : 2012/06/20 14:33:02.500[UTC] + Right (juneLater): 2012/06/20 14:33:02.501[UTC] Actual (june <=> juneLater) : std::weak_ordering::less Expected (Qt::weak_ordering::greater): Qt::weak_ordering::greater Loc: [qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp(0)] diff --git a/tests/auto/testlib/selftests/expected_threewaycompare.xml b/tests/auto/testlib/selftests/expected_threewaycompare.xml index 5e8f1f93bac..a3f4d38ee5a 100644 --- a/tests/auto/testlib/selftests/expected_threewaycompare.xml +++ b/tests/auto/testlib/selftests/expected_threewaycompare.xml @@ -35,8 +35,8 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 1 - Right (rhs): 1 + Left (lhs): 1 (0x1p+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::less]]></Description> </Incident> @@ -46,8 +46,8 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::greater]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 1.1 - Right (rhs): 1 + Left (lhs): 1.1 (0x1.19999ap+0) + Right (rhs): 1 (0x1p+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): Qt::partial_ordering::less]]></Description> </Incident> @@ -57,16 +57,16 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0 (0x0p+0) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): Qt::partial_ordering::greater]]></Description> </Incident> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[Qt::partial_ordering::less]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0 - Right (rhs): 0.1 + Left (lhs): 0 (0x0p+0) + Right (rhs): 0.1 (0x1.999999999999ap-4) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): Qt::partial_ordering::greater]]></Description> </Incident> @@ -211,16 +211,16 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 2 + Left (lhs): 2 (0x1p+1) + Right (rhs): 2 (0x1p+1) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::less]]></Description> </Incident> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::less]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 2 - Right (rhs): 1.1 + Left (lhs): 2 (0x1p+1) + Right (rhs): 1.1 (0x1.19999ap+0) Actual (lhs <=> rhs) : std::partial_ordering::greater Expected (expectedOrder): std::partial_ordering::less]]></Description> </Incident> @@ -233,16 +233,16 @@ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::equivalent]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.15 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.15 (0x1.3333333333333p-3) Actual (lhs <=> rhs) : std::partial_ordering::equivalent Expected (expectedOrder): std::partial_ordering::greater]]></Description> </Incident> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <DataTag><![CDATA[std::partial_ordering::less]]></DataTag> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (lhs): 0.15 - Right (rhs): 0.25 + Left (lhs): 0.15 (0x1.3333333333333p-3) + Right (rhs): 0.25 (0x1p-2) Actual (lhs <=> rhs) : std::partial_ordering::less Expected (expectedOrder): std::partial_ordering::greater]]></Description> </Incident> @@ -374,8 +374,8 @@ <TestFunction name="checkWeakComparison"> <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp" line="0"> <Description><![CDATA[The result of operator<=>() is not what was expected - Left (june) : 2012/06/20 14:33:02.500[CEST] - Right (juneLater): 2012/06/20 14:33:02.501[CEST] + Left (june) : 2012/06/20 14:33:02.500[UTC] + Right (juneLater): 2012/06/20 14:33:02.501[UTC] Actual (june <=> juneLater) : std::weak_ordering::less Expected (Qt::weak_ordering::greater): Qt::weak_ordering::greater]]></Description> </Incident> diff --git a/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp b/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp index bcc544d33a1..4a290f9f2fb 100644 --- a/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp +++ b/tests/auto/testlib/selftests/threewaycompare/tst_threewaycompare.cpp @@ -231,7 +231,7 @@ void tst_ThreeWayCompare::checkWeakComparison() QCOMPARE_3WAY(example_left, example_right, std::weak_ordering::less); - QDateTime june(QDate(2012, 6, 20), QTime(14, 33, 2, 500)); + QDateTime june(QDate(2012, 6, 20), QTime(14, 33, 2, 500), QTimeZone::UTC); QDateTime juneLater = june.addMSecs(1); QCOMPARE_3WAY(june, juneLater, Qt::weak_ordering::greater); #endif diff --git a/tests/auto/tools/qmake/testdata/invalid-info-plist/Info.plist b/tests/auto/tools/qmake/testdata/invalid-info-plist/Info.plist new file mode 100644 index 00000000000..5468597e2b4 --- /dev/null +++ b/tests/auto/tools/qmake/testdata/invalid-info-plist/Info.plist @@ -0,0 +1 @@ +<invalid> diff --git a/tests/auto/tools/qmake/testdata/invalid-info-plist/invalid-info-plist.pro b/tests/auto/tools/qmake/testdata/invalid-info-plist/invalid-info-plist.pro new file mode 100644 index 00000000000..0230f9c6736 --- /dev/null +++ b/tests/auto/tools/qmake/testdata/invalid-info-plist/invalid-info-plist.pro @@ -0,0 +1,2 @@ +SOURCES += main.cpp +QMAKE_INFO_PLIST = Info.plist diff --git a/tests/auto/tools/qmake/testdata/invalid-info-plist/main.cpp b/tests/auto/tools/qmake/testdata/invalid-info-plist/main.cpp new file mode 100644 index 00000000000..905869dfa38 --- /dev/null +++ b/tests/auto/tools/qmake/testdata/invalid-info-plist/main.cpp @@ -0,0 +1,4 @@ +int main() +{ + return 0; +} diff --git a/tests/auto/tools/qmake/tst_qmake.cpp b/tests/auto/tools/qmake/tst_qmake.cpp index 278cf4ad232..080f0abbdaa 100644 --- a/tests/auto/tools/qmake/tst_qmake.cpp +++ b/tests/auto/tools/qmake/tst_qmake.cpp @@ -47,6 +47,7 @@ private slots: void rawString(); #if defined(Q_OS_DARWIN) void bundle_spaces(); + void invalid_info_plist(); #elif defined(Q_OS_WIN) void windowsResources(); #endif @@ -534,6 +535,23 @@ void tst_qmake::bundle_spaces() QVERIFY( test_compiler.removeMakefile(workDir) ); } +void tst_qmake::invalid_info_plist() +{ + QString workDir = base_path + "/testdata/invalid-info-plist"; + + // We set up alternate arguments here, to make sure we're testing Mac + // Bundles. We need to actually run make to check whether the failing + // plutil invocation breaks the build. + + test_compiler.setArguments(QStringList(), + QStringList() << "-spec" << "macx-clang"); + + QVERIFY( test_compiler.qmake(workDir, "invalid-info-plist") ); + + // Make fails: plutil fails to parse the Info.plist file + QVERIFY( test_compiler.make(workDir, QString(), true) ); +} + #elif defined(Q_OS_WIN) // defined(Q_OS_DARWIN) void tst_qmake::windowsResources() diff --git a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST index aca3147b2d6..fde971443d4 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST +++ b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST @@ -1,3 +1,2 @@ [layoutDirection] ubuntu-22.04 -ubuntu-24.04 diff --git a/tests/auto/widgets/kernel/qapplication/BLACKLIST b/tests/auto/widgets/kernel/qapplication/BLACKLIST deleted file mode 100644 index c68c7d6b149..00000000000 --- a/tests/auto/widgets/kernel/qapplication/BLACKLIST +++ /dev/null @@ -1,3 +0,0 @@ -[touchEventPropagation] -# QTBUG-66745 -opensuse-leap diff --git a/util/locale_database/cldr2qlocalexml.py b/util/locale_database/cldr2qlocalexml.py index d4ba6960517..0aa04b64b05 100755 --- a/util/locale_database/cldr2qlocalexml.py +++ b/util/locale_database/cldr2qlocalexml.py @@ -83,7 +83,7 @@ def main(argv: list[str], out: TextIO, err: TextIO) -> int: parser.error(f'Please use a .xml extension on your output file name, not {xml}') else: try: - emit = open(xml, 'w') + emit = open(xml, 'w', encoding="utf-8") except IOError as e: parser.error(f'Failed to open "{xml}" to write output to it') diff --git a/util/locale_database/localetools.py b/util/locale_database/localetools.py index 10937df5485..818880d6efa 100644 --- a/util/locale_database/localetools.py +++ b/util/locale_database/localetools.py @@ -110,7 +110,7 @@ def AtomicRenameTemporaryFile(originalLocation: Path, *, prefix: str, dir: Path) On success closes the temporary file and moves its content to the original location. On error, removes temporary file, without disturbing the original. """ - tempFile = NamedTemporaryFile('w', prefix=prefix, dir=dir, delete=False) + tempFile = NamedTemporaryFile('w', prefix=prefix, dir=dir, delete=False, encoding='utf-8') try: yield tempFile tempFile.close() @@ -174,7 +174,7 @@ class Transcriber: self.writer = resources.enter_context( AtomicRenameTemporaryFile(self.path, prefix=self.path.name, dir=self.tempDir)) # Open the old file - self.reader = resources.enter_context(open(self.path)) + self.reader = resources.enter_context(open(self.path, encoding='utf-8')) self.onEnter() |