[libcxx-commits] [libcxx] [libc++][format] Improves escaping. (PR #88283)
Mark de Wever via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Apr 24 11:37:08 PDT 2024
https://github.com/mordante updated https://github.com/llvm/llvm-project/pull/88283
>From 359b961231510e31a4fdfc9d96abd48539f49e5b Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Sat, 3 Feb 2024 17:08:59 +0100
Subject: [PATCH] [libc++][format] Improves escaping.
The change increments the size of the lookup table considerably. The table
has an "upper boundary" check. The removal of the code units with the
property Grapheme_Extend=Yes removes the range E0100..E01EF. This breaks
the trailing large continues section in two parts. This will be improved
in a followup patch.
Implements:
- P2713R1 Escaping improvements in std::format
- LWG3965 Incorrect example in [format.string.escaped] p3 for formatting of combining characters
Before
-----------------------------------------------------------------------
Benchmark Time CPU Iterations
-----------------------------------------------------------------------
BM_ascii_escaped<char> 95696 ns 95459 ns 7341
BM_unicode_escaped<char> 89311 ns 89088 ns 7835
BM_cyrillic_escaped<char> 58633 ns 58494 ns 11964
BM_japanese_escaped<char> 44500 ns 44382 ns 15780
BM_emoji_escaped<char> 99156 ns 98911 ns 7075
BM_ascii_escaped<wchar_t> 92245 ns 92017 ns 7592
BM_unicode_escaped<wchar_t> 80970 ns 80747 ns 8651
BM_cyrillic_escaped<wchar_t> 51253 ns 51112 ns 13729
BM_japanese_escaped<wchar_t> 37252 ns 37156 ns 18758
BM_emoji_escaped<wchar_t> 96226 ns 95961 ns 7270
After
-----------------------------------------------------------------------
Benchmark Time CPU Iterations
-----------------------------------------------------------------------
BM_ascii_escaped<char> 110704 ns 110696 ns 6206
BM_unicode_escaped<char> 101371 ns 101374 ns 6862
BM_cyrillic_escaped<char> 63329 ns 63327 ns 11013
BM_japanese_escaped<char> 41223 ns 41225 ns 16938
BM_emoji_escaped<char> 111022 ns 111021 ns 6304
BM_ascii_escaped<wchar_t> 112441 ns 112443 ns 6231
BM_unicode_escaped<wchar_t> 102776 ns 102779 ns 6813
BM_cyrillic_escaped<wchar_t> 58977 ns 58975 ns 11868
BM_japanese_escaped<wchar_t> 36885 ns 36886 ns 18975
BM_emoji_escaped<wchar_t> 115885 ns 115881 ns 6051
---
libcxx/docs/ReleaseNotes/19.rst | 1 +
libcxx/docs/Status/Cxx23Papers.csv | 2 +-
libcxx/docs/Status/Cxx2cIssues.csv | 2 +-
libcxx/docs/Status/FormatIssues.csv | 2 +-
.../include/__format/escaped_output_table.h | 1983 +++++++++--------
libcxx/include/__format/write_escaped.h | 28 +-
.../escaped_output.unicode.pass.cpp | 42 +-
libcxx/utils/generate_escaped_output_table.py | 49 +-
8 files changed, 1149 insertions(+), 960 deletions(-)
diff --git a/libcxx/docs/ReleaseNotes/19.rst b/libcxx/docs/ReleaseNotes/19.rst
index 8724f321a9d1175..938ab76c6ecbdd7 100644
--- a/libcxx/docs/ReleaseNotes/19.rst
+++ b/libcxx/docs/ReleaseNotes/19.rst
@@ -50,6 +50,7 @@ Implemented Papers
- P1659R3 - ``std::ranges::starts_with`` and ``std::ranges::ends_with``
- P3029R1 - Better ``mdspan``'s CTAD
- P2387R3 - Pipe support for user-defined range adaptors
+- P2713R1 - Escaping improvements in ``std::format``
Improvements and New Features
-----------------------------
diff --git a/libcxx/docs/Status/Cxx23Papers.csv b/libcxx/docs/Status/Cxx23Papers.csv
index f75dd288304b270..01387a404f5d673 100644
--- a/libcxx/docs/Status/Cxx23Papers.csv
+++ b/libcxx/docs/Status/Cxx23Papers.csv
@@ -108,7 +108,7 @@
"`P2164R9 <https://wg21.link/P2164R9>`__","LWG", "``views::enumerate``","February 2023","","","|ranges|"
"`P2711R1 <https://wg21.link/P2711R1>`__","LWG", "Making multi-param constructors of ``views`` ``explicit``","February 2023","|In Progress| [#note-P2711R1]_","","|ranges|"
"`P2609R3 <https://wg21.link/P2609R3>`__","LWG", "Relaxing Ranges Just A Smidge","February 2023","","","|ranges|"
-"`P2713R1 <https://wg21.link/P2713R1>`__","LWG", "Escaping improvements in ``std::format``","February 2023","","","|format|"
+"`P2713R1 <https://wg21.link/P2713R1>`__","LWG", "Escaping improvements in ``std::format``","February 2023","|Complete|","19.0","|format|"
"`P2675R1 <https://wg21.link/P2675R1>`__","LWG", "``format``'s width estimation is too approximate and not forward compatible","February 2023","|Complete|","17.0","|format|"
"`P2572R1 <https://wg21.link/P2572R1>`__","LWG", "``std::format`` fill character allowances","February 2023","|Complete|","17.0","|format|"
"`P2693R1 <https://wg21.link/P2693R1>`__","LWG", "Formatting ``thread::id`` and ``stacktrace``","February 2023","|Partial| [#note-P2693R1]_","","|format|"
diff --git a/libcxx/docs/Status/Cxx2cIssues.csv b/libcxx/docs/Status/Cxx2cIssues.csv
index 008f7418ab9c057..b768470898f2b25 100644
--- a/libcxx/docs/Status/Cxx2cIssues.csv
+++ b/libcxx/docs/Status/Cxx2cIssues.csv
@@ -32,7 +32,7 @@
"`3951 <https://wg21.link/LWG3951>`__","[expected.object.swap]: Using ``value()`` instead of ``has_value()``","Kona November 2023","","",""
"`3953 <https://wg21.link/LWG3953>`__","``iter_move`` for ``common_iterator`` and ``counted_iterator`` should return ``decltype(auto)``","Kona November 2023","","","|ranges|"
"`3957 <https://wg21.link/LWG3957>`__","[container.alloc.reqmts] The value category of v should be claimed","Kona November 2023","","",""
-"`3965 <https://wg21.link/LWG3965>`__","Incorrect example in [format.string.escaped] p3 for formatting of combining characters","Kona November 2023","","","|format|"
+"`3965 <https://wg21.link/LWG3965>`__","Incorrect example in [format.string.escaped] p3 for formatting of combining characters","Kona November 2023","|Complete|","19.0","|format|"
"`3970 <https://wg21.link/LWG3970>`__","[mdspan.syn] Missing definition of ``full_extent_t`` and ``full_extent``","Kona November 2023","","",""
"`3973 <https://wg21.link/LWG3973>`__","Monadic operations should be ADL-proof","Kona November 2023","","",""
"`3974 <https://wg21.link/LWG3974>`__","``mdspan::operator[]`` should not copy ``OtherIndexTypes``","Kona November 2023","","",""
diff --git a/libcxx/docs/Status/FormatIssues.csv b/libcxx/docs/Status/FormatIssues.csv
index 7da77def92daa21..3780c1ed5c1279f 100644
--- a/libcxx/docs/Status/FormatIssues.csv
+++ b/libcxx/docs/Status/FormatIssues.csv
@@ -10,7 +10,7 @@ Number,Name,Standard,Assignee,Status,First released version
"`P2508R1 <https://wg21.link/P2508R1>`__","Exposing ``std::basic-format-string``","C++23","Mark de Wever","|Complete|",15.0
"`P2585R0 <https://wg21.link/P2585R0>`__","Improving default container formatting","C++23","Mark de Wever","|Complete|",17.0
"`P2539R4 <https://wg21.link/P2539R4>`__","Should the output of ``std::print`` to a terminal be synchronized with the underlying stream?","C++23","Mark de Wever","|Complete|","18.0"
-"`P2713R1 <https://wg21.link/P2713R1>`__","Escaping improvements in ``std::format``","C++23","Mark de Wever",""
+"`P2713R1 <https://wg21.link/P2713R1>`__","Escaping improvements in ``std::format``","C++23","Mark de Wever","|Complete|",19.0
"`P2675R1 <https://wg21.link/P2675R1>`__","``format``'s width estimation is too approximate and not forward compatible","C++23","Mark de Wever","|Complete|",17.0
"`P2572R1 <https://wg21.link/P2572R1>`__","``std::format`` fill character allowances","C++23","Mark de Wever","|Complete|",17.0
"`P2693R1 <https://wg21.link/P2693R1>`__","Formatting ``thread::id`` and ``stacktrace``","C++23","Mark de Wever","|In Progress|"
diff --git a/libcxx/include/__format/escaped_output_table.h b/libcxx/include/__format/escaped_output_table.h
index b194f9431c3be33..a4c4c366cf24147 100644
--- a/libcxx/include/__format/escaped_output_table.h
+++ b/libcxx/include/__format/escaped_output_table.h
@@ -80,10 +80,9 @@ namespace __escaped_output_table {
/// The entries of the characters to escape in format's debug string.
///
/// Contains the entries for [format.string.escaped]/2.2.1.2.1
-/// CE is a Unicode encoding and C corresponds to either a UCS scalar value
-/// whose Unicode property General_Category has a value in the groups
-/// Separator (Z) or Other (C) or to a UCS scalar value which has the Unicode
-/// property Grapheme_Extend=Yes, as described by table 12 of UAX #44
+/// CE is a Unicode encoding and C corresponds to a UCS scalar value whose
+/// Unicode property General_Category has a value in the groups Separator (Z)
+/// or Other (C), as described by table 12 of UAX #44
///
/// Separator (Z) consists of General_Category
/// - Space_Separator,
@@ -98,7 +97,6 @@ namespace __escaped_output_table {
/// - Unassigned.
///
/// The data is generated from
-/// - https://www.unicode.org/Public/UCD/latest/ucd/DerivedCoreProperties.txt
/// - https://www.unicode.org/Public/UCD/latest/ucd/extracted/DerivedGeneralCategory.txt
///
/// The table is similar to the table
@@ -110,908 +108,1091 @@ namespace __escaped_output_table {
/// - bits [0, 10] The size of the range, allowing 2048 elements.
/// - bits [11, 31] The lower bound code point of the range. The upper bound of
/// the range is lower bound + size.
-_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[894] = {
- 0x00000020,
- 0x0003f821,
- 0x00056800,
- 0x0018006f,
- 0x001bc001,
- 0x001c0003,
- 0x001c5800,
- 0x001c6800,
- 0x001d1000,
- 0x00241806,
- 0x00298000,
- 0x002ab801,
- 0x002c5801,
- 0x002c802d,
- 0x002df800,
- 0x002e0801,
- 0x002e2001,
- 0x002e3808,
- 0x002f5803,
- 0x002fa810,
- 0x0030800a,
- 0x0030e000,
- 0x00325814,
- 0x00338000,
- 0x0036b007,
- 0x0036f805,
- 0x00373801,
- 0x00375003,
- 0x00387001,
- 0x00388800,
- 0x0039801c,
- 0x003d300a,
- 0x003d900d,
- 0x003f5808,
- 0x003fd802,
- 0x0040b003,
- 0x0040d808,
- 0x00412802,
- 0x00414806,
- 0x0041f800,
- 0x0042c804,
- 0x0042f800,
- 0x00435804,
- 0x00447810,
- 0x00465038,
- 0x0049d000,
- 0x0049e000,
- 0x004a0807,
- 0x004a6800,
- 0x004a8806,
- 0x004b1001,
- 0x004c0800,
- 0x004c2000,
- 0x004c6801,
- 0x004c8801,
- 0x004d4800,
- 0x004d8800,
- 0x004d9802,
- 0x004dd002,
- 0x004df000,
- 0x004e0805,
- 0x004e4801,
- 0x004e6800,
- 0x004e780c,
- 0x004ef000,
- 0x004f1003,
- 0x004ff004,
- 0x00502000,
- 0x00505803,
- 0x00508801,
- 0x00514800,
- 0x00518800,
- 0x0051a000,
- 0x0051b800,
- 0x0051d003,
- 0x00520817,
- 0x0052e800,
- 0x0052f806,
- 0x00538001,
- 0x0053a800,
- 0x0053b80b,
- 0x00542000,
- 0x00547000,
- 0x00549000,
- 0x00554800,
- 0x00558800,
- 0x0055a000,
- 0x0055d002,
- 0x00560807,
- 0x00565000,
- 0x00566802,
- 0x0056880e,
- 0x00571003,
- 0x00579006,
- 0x0057d007,
- 0x00582000,
- 0x00586801,
- 0x00588801,
- 0x00594800,
- 0x00598800,
- 0x0059a000,
- 0x0059d002,
- 0x0059f001,
- 0x005a0805,
- 0x005a4801,
- 0x005a680e,
- 0x005af000,
- 0x005b1003,
- 0x005bc00a,
- 0x005c2000,
- 0x005c5802,
- 0x005c8800,
- 0x005cb002,
- 0x005cd800,
- 0x005ce800,
- 0x005d0002,
- 0x005d2802,
- 0x005d5802,
- 0x005dd004,
- 0x005e0000,
- 0x005e1802,
- 0x005e4800,
- 0x005e6802,
- 0x005e8814,
- 0x005fd805,
- 0x00602000,
- 0x00606800,
- 0x00608800,
- 0x00614800,
- 0x0061d002,
- 0x0061f002,
- 0x00622812,
- 0x0062d801,
- 0x0062f001,
- 0x00631003,
- 0x00638006,
- 0x00640800,
- 0x00646800,
- 0x00648800,
- 0x00654800,
- 0x0065a000,
- 0x0065d002,
- 0x0065f800,
- 0x00661000,
- 0x00662801,
- 0x00664800,
- 0x00666010,
- 0x0066f800,
- 0x00671003,
- 0x00678000,
- 0x0067a00d,
- 0x00686800,
- 0x00688800,
- 0x0069d801,
- 0x0069f000,
- 0x006a0804,
- 0x006a4800,
- 0x006a6800,
- 0x006a8003,
- 0x006ab800,
- 0x006b1003,
- 0x006c0001,
- 0x006c2000,
- 0x006cb802,
- 0x006d9000,
- 0x006de000,
- 0x006df001,
- 0x006e3808,
- 0x006e9005,
- 0x006ef806,
- 0x006f8001,
- 0x006fa80b,
- 0x00718800,
- 0x0071a00a,
- 0x00723807,
- 0x0072e024,
- 0x00741800,
- 0x00742800,
- 0x00745800,
- 0x00752000,
- 0x00753000,
- 0x00758800,
- 0x0075a008,
- 0x0075f001,
- 0x00762800,
- 0x00763808,
- 0x0076d001,
- 0x0077001f,
- 0x0078c001,
- 0x0079a800,
- 0x0079b800,
- 0x0079c800,
- 0x007a4000,
- 0x007b6811,
- 0x007c0004,
- 0x007c3001,
- 0x007c6830,
- 0x007e3000,
- 0x007e6800,
- 0x007ed824,
- 0x00816803,
- 0x00819005,
- 0x0081c801,
- 0x0081e801,
- 0x0082c001,
- 0x0082f002,
- 0x00838803,
- 0x00841000,
- 0x00842801,
- 0x00846800,
- 0x0084e800,
- 0x00863000,
- 0x00864004,
- 0x00867001,
- 0x00924800,
- 0x00927001,
- 0x0092b800,
- 0x0092c800,
- 0x0092f001,
- 0x00944800,
- 0x00947001,
- 0x00958800,
- 0x0095b001,
- 0x0095f800,
- 0x00960800,
- 0x00963001,
- 0x0096b800,
- 0x00988800,
- 0x0098b001,
- 0x009ad804,
- 0x009be802,
- 0x009cd005,
- 0x009fb001,
- 0x009ff001,
- 0x00b40000,
- 0x00b4e802,
- 0x00b7c806,
- 0x00b89002,
- 0x00b8b008,
- 0x00b99001,
- 0x00b9b808,
- 0x00ba900d,
- 0x00bb6800,
- 0x00bb880e,
- 0x00bda001,
- 0x00bdb806,
- 0x00be3000,
- 0x00be480a,
- 0x00bee802,
- 0x00bf5005,
- 0x00bfd005,
- 0x00c05804,
- 0x00c0d005,
- 0x00c3c806,
- 0x00c42801,
- 0x00c54800,
- 0x00c55804,
- 0x00c7b009,
- 0x00c8f803,
- 0x00c93801,
- 0x00c96003,
- 0x00c99000,
- 0x00c9c806,
- 0x00ca0802,
- 0x00cb7001,
- 0x00cba80a,
- 0x00cd6003,
- 0x00ce5005,
- 0x00ced802,
- 0x00d0b801,
- 0x00d0d802,
- 0x00d2b000,
- 0x00d2c008,
- 0x00d31000,
- 0x00d32807,
- 0x00d3980c,
- 0x00d45005,
- 0x00d4d005,
- 0x00d57055,
- 0x00d9a006,
- 0x00d9e000,
- 0x00da1000,
- 0x00da6802,
- 0x00db5808,
- 0x00dbf802,
- 0x00dd1003,
- 0x00dd4001,
- 0x00dd5802,
- 0x00df3000,
- 0x00df4001,
- 0x00df6800,
- 0x00df7802,
- 0x00dfa007,
- 0x00e16007,
- 0x00e1b004,
- 0x00e25002,
- 0x00e44806,
- 0x00e5d801,
- 0x00e6400a,
- 0x00e6a00c,
- 0x00e71006,
- 0x00e76800,
- 0x00e7a000,
- 0x00e7c001,
- 0x00e7d804,
- 0x00ee003f,
- 0x00f8b001,
- 0x00f8f001,
- 0x00fa3001,
- 0x00fa7001,
- 0x00fac000,
- 0x00fad000,
- 0x00fae000,
- 0x00faf000,
- 0x00fbf001,
- 0x00fda800,
- 0x00fe2800,
- 0x00fea001,
- 0x00fee000,
- 0x00ff8001,
- 0x00ffa800,
- 0x00fff810,
- 0x01014007,
- 0x0102f810,
- 0x01039001,
- 0x01047800,
- 0x0104e802,
- 0x0106083e,
- 0x010c6003,
- 0x01213818,
- 0x01225814,
- 0x015ba001,
- 0x015cb000,
- 0x01677802,
- 0x0167a004,
- 0x01693000,
- 0x01694004,
- 0x01697001,
- 0x016b4006,
- 0x016b880e,
- 0x016cb808,
- 0x016d3800,
- 0x016d7800,
- 0x016db800,
- 0x016df800,
- 0x016e3800,
- 0x016e7800,
- 0x016eb800,
- 0x016ef820,
- 0x0172f021,
- 0x0174d000,
- 0x0177a00b,
- 0x017eb019,
- 0x01800000,
- 0x01815005,
- 0x01820000,
- 0x0184b803,
- 0x01880004,
- 0x01898000,
- 0x018c7800,
- 0x018f200a,
- 0x0190f800,
- 0x05246802,
- 0x05263808,
- 0x05316013,
- 0x05337803,
- 0x0533a009,
- 0x0534f001,
- 0x05378001,
- 0x0537c007,
- 0x053e5804,
- 0x053e9000,
- 0x053ea000,
- 0x053ed017,
- 0x05401000,
- 0x05403000,
- 0x05405800,
- 0x05412801,
- 0x05416003,
- 0x0541d005,
- 0x0543c007,
- 0x05462009,
- 0x0546d017,
- 0x0547f800,
- 0x05493007,
- 0x054a380a,
- 0x054aa00a,
- 0x054be805,
- 0x054d9800,
- 0x054db003,
- 0x054de001,
- 0x054e7000,
- 0x054ed003,
- 0x054f2800,
- 0x054ff800,
- 0x05514805,
- 0x05518801,
- 0x0551a80a,
- 0x05521800,
- 0x05526000,
- 0x05527001,
- 0x0552d001,
- 0x0553e000,
- 0x05558000,
- 0x05559002,
- 0x0555b801,
- 0x0555f001,
- 0x05560800,
- 0x05561817,
- 0x05576001,
- 0x0557b00a,
- 0x05583801,
- 0x05587801,
- 0x0558b808,
- 0x05593800,
- 0x05597800,
- 0x055b6003,
- 0x055f2800,
- 0x055f4000,
- 0x055f6802,
- 0x055fd005,
- 0x06bd200b,
- 0x06be3803,
- 0x06bfe7ff,
- 0x06ffe7ff,
- 0x073fe7ff,
- 0x077fe7ff,
- 0x07bfe103,
- 0x07d37001,
- 0x07d6d025,
- 0x07d8380b,
- 0x07d8c004,
- 0x07d8f000,
- 0x07d9b800,
- 0x07d9e800,
- 0x07d9f800,
- 0x07da1000,
- 0x07da2800,
- 0x07de180f,
- 0x07ec8001,
- 0x07ee4006,
- 0x07ee801f,
- 0x07f0000f,
- 0x07f0d015,
- 0x07f29800,
- 0x07f33800,
- 0x07f36003,
- 0x07f3a800,
- 0x07f7e803,
- 0x07fcf001,
- 0x07fdf802,
- 0x07fe4001,
- 0x07fe8001,
- 0x07fec001,
- 0x07fee802,
- 0x07ff3800,
- 0x07ff780c,
- 0x07fff001,
- 0x08006000,
- 0x08013800,
- 0x0801d800,
- 0x0801f000,
- 0x08027001,
- 0x0802f021,
- 0x0807d804,
- 0x08081803,
- 0x0809a002,
- 0x080c7800,
- 0x080ce802,
- 0x080d082e,
- 0x080fe882,
- 0x0814e802,
- 0x0816880f,
- 0x0817e003,
- 0x08192008,
- 0x081a5804,
- 0x081bb009,
- 0x081cf000,
- 0x081e2003,
- 0x081eb029,
- 0x0824f001,
- 0x08255005,
- 0x0826a003,
- 0x0827e003,
- 0x08294007,
- 0x082b200a,
- 0x082bd800,
- 0x082c5800,
- 0x082c9800,
- 0x082cb000,
- 0x082d1000,
- 0x082d9000,
- 0x082dd000,
- 0x082de842,
- 0x0839b808,
- 0x083ab009,
- 0x083b4017,
- 0x083c3000,
- 0x083d8800,
- 0x083dd844,
- 0x08403001,
- 0x08404800,
- 0x0841b000,
- 0x0841c802,
- 0x0841e801,
- 0x0842b000,
- 0x0844f807,
- 0x0845802f,
- 0x08479800,
- 0x0847b004,
- 0x0848e002,
- 0x0849d004,
- 0x084a003f,
- 0x084dc003,
- 0x084e8001,
- 0x0850080e,
- 0x0850a000,
- 0x0850c000,
- 0x0851b009,
- 0x08524806,
- 0x0852c806,
- 0x0855001f,
- 0x08572805,
- 0x0857b808,
- 0x0859b002,
- 0x085ab001,
- 0x085b9804,
- 0x085c9006,
- 0x085ce80b,
- 0x085d804f,
- 0x08624836,
- 0x0865980c,
- 0x08679806,
- 0x0869200b,
- 0x0869d125,
- 0x0873f800,
- 0x08755002,
- 0x08757001,
- 0x0875904d,
- 0x08794007,
- 0x087a300a,
- 0x087ad015,
- 0x087c1003,
- 0x087c5025,
- 0x087e6013,
- 0x087fb808,
- 0x08800800,
- 0x0881c00e,
- 0x08827003,
- 0x08838000,
- 0x08839801,
- 0x0883b00b,
- 0x08859803,
- 0x0885c801,
- 0x0885e800,
- 0x0886100d,
- 0x08874806,
- 0x0887d008,
- 0x08893804,
- 0x08896808,
- 0x088a4007,
- 0x088b9800,
- 0x088bb80a,
- 0x088db008,
- 0x088e4803,
- 0x088e7800,
- 0x088f0000,
- 0x088fa80a,
- 0x08909000,
- 0x08917802,
- 0x0891a000,
- 0x0891b001,
- 0x0891f000,
- 0x0892083e,
- 0x08943800,
- 0x08944800,
- 0x08947000,
- 0x0894f000,
- 0x08955005,
- 0x0896f800,
- 0x0897180c,
- 0x0897d007,
- 0x08982000,
- 0x08986801,
- 0x08988801,
- 0x08994800,
- 0x08998800,
- 0x0899a000,
- 0x0899d002,
- 0x0899f000,
- 0x089a0000,
- 0x089a2801,
- 0x089a4801,
- 0x089a7001,
- 0x089a880b,
- 0x089b209b,
- 0x08a1c007,
- 0x08a21002,
- 0x08a23000,
- 0x08a2e000,
- 0x08a2f000,
- 0x08a3101d,
- 0x08a58000,
- 0x08a59805,
- 0x08a5d000,
- 0x08a5e800,
- 0x08a5f801,
- 0x08a61001,
- 0x08a64007,
- 0x08a6d0a5,
- 0x08ad7800,
- 0x08ad9005,
- 0x08ade001,
- 0x08adf801,
- 0x08aee023,
- 0x08b19807,
- 0x08b1e800,
- 0x08b1f801,
- 0x08b2280a,
- 0x08b2d005,
- 0x08b36812,
- 0x08b55800,
- 0x08b56800,
- 0x08b58005,
- 0x08b5b800,
- 0x08b5d005,
- 0x08b65035,
- 0x08b8d804,
- 0x08b91003,
- 0x08b93808,
- 0x08ba38b8,
- 0x08c17808,
- 0x08c1c801,
- 0x08c1e063,
- 0x08c7980b,
- 0x08c83801,
- 0x08c85001,
- 0x08c8a000,
- 0x08c8b800,
- 0x08c98000,
- 0x08c9b000,
- 0x08c9c803,
- 0x08c9f000,
- 0x08ca1800,
- 0x08ca3808,
- 0x08cad045,
- 0x08cd4001,
- 0x08cea007,
- 0x08cf0000,
- 0x08cf281a,
- 0x08d00809,
- 0x08d19805,
- 0x08d1d803,
- 0x08d23808,
- 0x08d28805,
- 0x08d2c802,
- 0x08d4500c,
- 0x08d4c001,
- 0x08d5180c,
- 0x08d7c806,
- 0x08d850f5,
- 0x08e04800,
- 0x08e1800d,
- 0x08e1f800,
- 0x08e23009,
- 0x08e36802,
- 0x08e48018,
- 0x08e55006,
- 0x08e59001,
- 0x08e5a84a,
- 0x08e83800,
- 0x08e85000,
- 0x08e98814,
- 0x08ea3808,
- 0x08ead005,
- 0x08eb3000,
- 0x08eb4800,
- 0x08ec7803,
- 0x08eca800,
- 0x08ecb800,
- 0x08ecc806,
- 0x08ed5135,
- 0x08f79801,
- 0x08f7c808,
- 0x08f88800,
- 0x08f9b007,
- 0x08fa0000,
- 0x08fa1000,
- 0x08fad055,
- 0x08fd880e,
- 0x08ff900c,
- 0x091cd065,
- 0x09237800,
- 0x0923a80a,
- 0x092a27ff,
- 0x096a224b,
- 0x097f980c,
- 0x09a18010,
- 0x09a23fff,
- 0x09e23fb8,
- 0x0a323fff,
- 0x0a723fff,
- 0x0ab23fff,
- 0x0af23fff,
- 0x0b3239b8,
- 0x0b51c806,
- 0x0b52f800,
- 0x0b535003,
- 0x0b55f800,
- 0x0b565005,
- 0x0b577006,
- 0x0b57b009,
- 0x0b598006,
- 0x0b5a3009,
- 0x0b5ad000,
- 0x0b5b1000,
- 0x0b5bc004,
- 0x0b5c82af,
- 0x0b74d864,
- 0x0b7a5804,
- 0x0b7c400a,
- 0x0b7d003f,
- 0x0b7f200b,
- 0x0b7f900d,
- 0x0c3fc007,
- 0x0c66b029,
- 0x0c684fff,
- 0x0ca84fff,
- 0x0ce84fff,
- 0x0d284fff,
- 0x0d684ae6,
- 0x0d7fa000,
- 0x0d7fe000,
- 0x0d7ff800,
- 0x0d89180e,
- 0x0d89981c,
- 0x0d8a9801,
- 0x0d8ab00d,
- 0x0d8b4007,
- 0x0d97e7ff,
- 0x0dd7e103,
- 0x0de35804,
- 0x0de3e802,
- 0x0de44806,
- 0x0de4d001,
- 0x0de4e801,
- 0x0de507ff,
- 0x0e2507ff,
- 0x0e6502af,
- 0x0e7e203b,
- 0x0e87b009,
- 0x0e893801,
- 0x0e8b2800,
- 0x0e8b3802,
- 0x0e8b7014,
- 0x0e8c2806,
- 0x0e8d5003,
- 0x0e8f5814,
- 0x0e921002,
- 0x0e923079,
- 0x0e96a00b,
- 0x0e97a00b,
- 0x0e9ab808,
- 0x0e9bc886,
- 0x0ea2a800,
- 0x0ea4e800,
- 0x0ea50001,
- 0x0ea51801,
- 0x0ea53801,
- 0x0ea56800,
- 0x0ea5d000,
- 0x0ea5e000,
- 0x0ea62000,
- 0x0ea83000,
- 0x0ea85801,
- 0x0ea8a800,
- 0x0ea8e800,
- 0x0ea9d000,
- 0x0ea9f800,
- 0x0eaa2800,
- 0x0eaa3802,
- 0x0eaa8800,
- 0x0eb53001,
- 0x0ebe6001,
- 0x0ed00036,
- 0x0ed1d831,
- 0x0ed3a800,
- 0x0ed42000,
- 0x0ed46473,
- 0x0ef8f805,
- 0x0ef95904,
- 0x0f037091,
- 0x0f096809,
- 0x0f09f001,
- 0x0f0a5003,
- 0x0f0a813f,
- 0x0f157011,
- 0x0f176003,
- 0x0f17d004,
- 0x0f1801cf,
- 0x0f276003,
- 0x0f27d2e5,
- 0x0f3f3800,
- 0x0f3f6000,
- 0x0f3f7800,
- 0x0f3ff800,
- 0x0f462801,
- 0x0f46802f,
- 0x0f4a2006,
- 0x0f4a6003,
- 0x0f4ad003,
- 0x0f4b0310,
- 0x0f65a84b,
- 0x0f69f0c1,
- 0x0f702000,
- 0x0f710000,
- 0x0f711800,
- 0x0f712801,
- 0x0f714000,
- 0x0f719800,
- 0x0f71c000,
- 0x0f71d000,
- 0x0f71e005,
- 0x0f721803,
- 0x0f724000,
- 0x0f725000,
- 0x0f726000,
- 0x0f728000,
- 0x0f729800,
- 0x0f72a801,
- 0x0f72c000,
- 0x0f72d000,
- 0x0f72e000,
- 0x0f72f000,
- 0x0f730000,
- 0x0f731800,
- 0x0f732801,
- 0x0f735800,
- 0x0f739800,
- 0x0f73c000,
- 0x0f73e800,
- 0x0f73f800,
- 0x0f745000,
- 0x0f74e004,
- 0x0f752000,
- 0x0f755000,
- 0x0f75e033,
- 0x0f77910d,
- 0x0f816003,
- 0x0f84a00b,
- 0x0f857801,
- 0x0f860000,
- 0x0f868000,
- 0x0f87b009,
- 0x0f8d7037,
- 0x0f90180c,
- 0x0f91e003,
- 0x0f924806,
- 0x0f92900d,
- 0x0f933099,
- 0x0fb6c003,
- 0x0fb76802,
- 0x0fb7e802,
- 0x0fbbb803,
- 0x0fbed005,
- 0x0fbf6003,
- 0x0fbf880e,
- 0x0fc06003,
- 0x0fc24007,
- 0x0fc2d005,
- 0x0fc44007,
- 0x0fc57001,
- 0x0fc5904d,
- 0x0fd2a00b,
- 0x0fd37001,
- 0x0fd3e802,
- 0x0fd44806,
- 0x0fd5f000,
- 0x0fd63007,
- 0x0fd6e003,
- 0x0fd74806,
- 0x0fd7c806,
- 0x0fdc9800,
- 0x0fde5824,
- 0x0fdfd405,
- 0x1537001f,
- 0x15b9d005,
- 0x15c0f001,
- 0x1675100d,
- 0x175f080e,
- 0x1772f7ff,
- 0x17b2f1a1,
- 0x17d0f5e1,
- 0x189a5804};
+_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[1077] = {
+ 0x00000020 /* 00000000 - 00000020 [ 33] */,
+ 0x0003f821 /* 0000007f - 000000a0 [ 34] */,
+ 0x00056800 /* 000000ad - 000000ad [ 1] */,
+ 0x001bc001 /* 00000378 - 00000379 [ 2] */,
+ 0x001c0003 /* 00000380 - 00000383 [ 4] */,
+ 0x001c5800 /* 0000038b - 0000038b [ 1] */,
+ 0x001c6800 /* 0000038d - 0000038d [ 1] */,
+ 0x001d1000 /* 000003a2 - 000003a2 [ 1] */,
+ 0x00298000 /* 00000530 - 00000530 [ 1] */,
+ 0x002ab801 /* 00000557 - 00000558 [ 2] */,
+ 0x002c5801 /* 0000058b - 0000058c [ 2] */,
+ 0x002c8000 /* 00000590 - 00000590 [ 1] */,
+ 0x002e4007 /* 000005c8 - 000005cf [ 8] */,
+ 0x002f5803 /* 000005eb - 000005ee [ 4] */,
+ 0x002fa810 /* 000005f5 - 00000605 [ 17] */,
+ 0x0030e000 /* 0000061c - 0000061c [ 1] */,
+ 0x0036e800 /* 000006dd - 000006dd [ 1] */,
+ 0x00387001 /* 0000070e - 0000070f [ 2] */,
+ 0x003a5801 /* 0000074b - 0000074c [ 2] */,
+ 0x003d900d /* 000007b2 - 000007bf [ 14] */,
+ 0x003fd801 /* 000007fb - 000007fc [ 2] */,
+ 0x00417001 /* 0000082e - 0000082f [ 2] */,
+ 0x0041f800 /* 0000083f - 0000083f [ 1] */,
+ 0x0042e001 /* 0000085c - 0000085d [ 2] */,
+ 0x0042f800 /* 0000085f - 0000085f [ 1] */,
+ 0x00435804 /* 0000086b - 0000086f [ 5] */,
+ 0x00447808 /* 0000088f - 00000897 [ 9] */,
+ 0x00471000 /* 000008e2 - 000008e2 [ 1] */,
+ 0x004c2000 /* 00000984 - 00000984 [ 1] */,
+ 0x004c6801 /* 0000098d - 0000098e [ 2] */,
+ 0x004c8801 /* 00000991 - 00000992 [ 2] */,
+ 0x004d4800 /* 000009a9 - 000009a9 [ 1] */,
+ 0x004d8800 /* 000009b1 - 000009b1 [ 1] */,
+ 0x004d9802 /* 000009b3 - 000009b5 [ 3] */,
+ 0x004dd001 /* 000009ba - 000009bb [ 2] */,
+ 0x004e2801 /* 000009c5 - 000009c6 [ 2] */,
+ 0x004e4801 /* 000009c9 - 000009ca [ 2] */,
+ 0x004e7807 /* 000009cf - 000009d6 [ 8] */,
+ 0x004ec003 /* 000009d8 - 000009db [ 4] */,
+ 0x004ef000 /* 000009de - 000009de [ 1] */,
+ 0x004f2001 /* 000009e4 - 000009e5 [ 2] */,
+ 0x004ff801 /* 000009ff - 00000a00 [ 2] */,
+ 0x00502000 /* 00000a04 - 00000a04 [ 1] */,
+ 0x00505803 /* 00000a0b - 00000a0e [ 4] */,
+ 0x00508801 /* 00000a11 - 00000a12 [ 2] */,
+ 0x00514800 /* 00000a29 - 00000a29 [ 1] */,
+ 0x00518800 /* 00000a31 - 00000a31 [ 1] */,
+ 0x0051a000 /* 00000a34 - 00000a34 [ 1] */,
+ 0x0051b800 /* 00000a37 - 00000a37 [ 1] */,
+ 0x0051d001 /* 00000a3a - 00000a3b [ 2] */,
+ 0x0051e800 /* 00000a3d - 00000a3d [ 1] */,
+ 0x00521803 /* 00000a43 - 00000a46 [ 4] */,
+ 0x00524801 /* 00000a49 - 00000a4a [ 2] */,
+ 0x00527002 /* 00000a4e - 00000a50 [ 3] */,
+ 0x00529006 /* 00000a52 - 00000a58 [ 7] */,
+ 0x0052e800 /* 00000a5d - 00000a5d [ 1] */,
+ 0x0052f806 /* 00000a5f - 00000a65 [ 7] */,
+ 0x0053b809 /* 00000a77 - 00000a80 [ 10] */,
+ 0x00542000 /* 00000a84 - 00000a84 [ 1] */,
+ 0x00547000 /* 00000a8e - 00000a8e [ 1] */,
+ 0x00549000 /* 00000a92 - 00000a92 [ 1] */,
+ 0x00554800 /* 00000aa9 - 00000aa9 [ 1] */,
+ 0x00558800 /* 00000ab1 - 00000ab1 [ 1] */,
+ 0x0055a000 /* 00000ab4 - 00000ab4 [ 1] */,
+ 0x0055d001 /* 00000aba - 00000abb [ 2] */,
+ 0x00563000 /* 00000ac6 - 00000ac6 [ 1] */,
+ 0x00565000 /* 00000aca - 00000aca [ 1] */,
+ 0x00567001 /* 00000ace - 00000acf [ 2] */,
+ 0x0056880e /* 00000ad1 - 00000adf [ 15] */,
+ 0x00572001 /* 00000ae4 - 00000ae5 [ 2] */,
+ 0x00579006 /* 00000af2 - 00000af8 [ 7] */,
+ 0x00580000 /* 00000b00 - 00000b00 [ 1] */,
+ 0x00582000 /* 00000b04 - 00000b04 [ 1] */,
+ 0x00586801 /* 00000b0d - 00000b0e [ 2] */,
+ 0x00588801 /* 00000b11 - 00000b12 [ 2] */,
+ 0x00594800 /* 00000b29 - 00000b29 [ 1] */,
+ 0x00598800 /* 00000b31 - 00000b31 [ 1] */,
+ 0x0059a000 /* 00000b34 - 00000b34 [ 1] */,
+ 0x0059d001 /* 00000b3a - 00000b3b [ 2] */,
+ 0x005a2801 /* 00000b45 - 00000b46 [ 2] */,
+ 0x005a4801 /* 00000b49 - 00000b4a [ 2] */,
+ 0x005a7006 /* 00000b4e - 00000b54 [ 7] */,
+ 0x005ac003 /* 00000b58 - 00000b5b [ 4] */,
+ 0x005af000 /* 00000b5e - 00000b5e [ 1] */,
+ 0x005b2001 /* 00000b64 - 00000b65 [ 2] */,
+ 0x005bc009 /* 00000b78 - 00000b81 [ 10] */,
+ 0x005c2000 /* 00000b84 - 00000b84 [ 1] */,
+ 0x005c5802 /* 00000b8b - 00000b8d [ 3] */,
+ 0x005c8800 /* 00000b91 - 00000b91 [ 1] */,
+ 0x005cb002 /* 00000b96 - 00000b98 [ 3] */,
+ 0x005cd800 /* 00000b9b - 00000b9b [ 1] */,
+ 0x005ce800 /* 00000b9d - 00000b9d [ 1] */,
+ 0x005d0002 /* 00000ba0 - 00000ba2 [ 3] */,
+ 0x005d2802 /* 00000ba5 - 00000ba7 [ 3] */,
+ 0x005d5802 /* 00000bab - 00000bad [ 3] */,
+ 0x005dd003 /* 00000bba - 00000bbd [ 4] */,
+ 0x005e1802 /* 00000bc3 - 00000bc5 [ 3] */,
+ 0x005e4800 /* 00000bc9 - 00000bc9 [ 1] */,
+ 0x005e7001 /* 00000bce - 00000bcf [ 2] */,
+ 0x005e8805 /* 00000bd1 - 00000bd6 [ 6] */,
+ 0x005ec00d /* 00000bd8 - 00000be5 [ 14] */,
+ 0x005fd804 /* 00000bfb - 00000bff [ 5] */,
+ 0x00606800 /* 00000c0d - 00000c0d [ 1] */,
+ 0x00608800 /* 00000c11 - 00000c11 [ 1] */,
+ 0x00614800 /* 00000c29 - 00000c29 [ 1] */,
+ 0x0061d001 /* 00000c3a - 00000c3b [ 2] */,
+ 0x00622800 /* 00000c45 - 00000c45 [ 1] */,
+ 0x00624800 /* 00000c49 - 00000c49 [ 1] */,
+ 0x00627006 /* 00000c4e - 00000c54 [ 7] */,
+ 0x0062b800 /* 00000c57 - 00000c57 [ 1] */,
+ 0x0062d801 /* 00000c5b - 00000c5c [ 2] */,
+ 0x0062f001 /* 00000c5e - 00000c5f [ 2] */,
+ 0x00632001 /* 00000c64 - 00000c65 [ 2] */,
+ 0x00638006 /* 00000c70 - 00000c76 [ 7] */,
+ 0x00646800 /* 00000c8d - 00000c8d [ 1] */,
+ 0x00648800 /* 00000c91 - 00000c91 [ 1] */,
+ 0x00654800 /* 00000ca9 - 00000ca9 [ 1] */,
+ 0x0065a000 /* 00000cb4 - 00000cb4 [ 1] */,
+ 0x0065d001 /* 00000cba - 00000cbb [ 2] */,
+ 0x00662800 /* 00000cc5 - 00000cc5 [ 1] */,
+ 0x00664800 /* 00000cc9 - 00000cc9 [ 1] */,
+ 0x00667006 /* 00000cce - 00000cd4 [ 7] */,
+ 0x0066b805 /* 00000cd7 - 00000cdc [ 6] */,
+ 0x0066f800 /* 00000cdf - 00000cdf [ 1] */,
+ 0x00672001 /* 00000ce4 - 00000ce5 [ 2] */,
+ 0x00678000 /* 00000cf0 - 00000cf0 [ 1] */,
+ 0x0067a00b /* 00000cf4 - 00000cff [ 12] */,
+ 0x00686800 /* 00000d0d - 00000d0d [ 1] */,
+ 0x00688800 /* 00000d11 - 00000d11 [ 1] */,
+ 0x006a2800 /* 00000d45 - 00000d45 [ 1] */,
+ 0x006a4800 /* 00000d49 - 00000d49 [ 1] */,
+ 0x006a8003 /* 00000d50 - 00000d53 [ 4] */,
+ 0x006b2001 /* 00000d64 - 00000d65 [ 2] */,
+ 0x006c0000 /* 00000d80 - 00000d80 [ 1] */,
+ 0x006c2000 /* 00000d84 - 00000d84 [ 1] */,
+ 0x006cb802 /* 00000d97 - 00000d99 [ 3] */,
+ 0x006d9000 /* 00000db2 - 00000db2 [ 1] */,
+ 0x006de000 /* 00000dbc - 00000dbc [ 1] */,
+ 0x006df001 /* 00000dbe - 00000dbf [ 2] */,
+ 0x006e3802 /* 00000dc7 - 00000dc9 [ 3] */,
+ 0x006e5803 /* 00000dcb - 00000dce [ 4] */,
+ 0x006ea800 /* 00000dd5 - 00000dd5 [ 1] */,
+ 0x006eb800 /* 00000dd7 - 00000dd7 [ 1] */,
+ 0x006f0005 /* 00000de0 - 00000de5 [ 6] */,
+ 0x006f8001 /* 00000df0 - 00000df1 [ 2] */,
+ 0x006fa80b /* 00000df5 - 00000e00 [ 12] */,
+ 0x0071d803 /* 00000e3b - 00000e3e [ 4] */,
+ 0x0072e024 /* 00000e5c - 00000e80 [ 37] */,
+ 0x00741800 /* 00000e83 - 00000e83 [ 1] */,
+ 0x00742800 /* 00000e85 - 00000e85 [ 1] */,
+ 0x00745800 /* 00000e8b - 00000e8b [ 1] */,
+ 0x00752000 /* 00000ea4 - 00000ea4 [ 1] */,
+ 0x00753000 /* 00000ea6 - 00000ea6 [ 1] */,
+ 0x0075f001 /* 00000ebe - 00000ebf [ 2] */,
+ 0x00762800 /* 00000ec5 - 00000ec5 [ 1] */,
+ 0x00763800 /* 00000ec7 - 00000ec7 [ 1] */,
+ 0x00767800 /* 00000ecf - 00000ecf [ 1] */,
+ 0x0076d001 /* 00000eda - 00000edb [ 2] */,
+ 0x0077001f /* 00000ee0 - 00000eff [ 32] */,
+ 0x007a4000 /* 00000f48 - 00000f48 [ 1] */,
+ 0x007b6803 /* 00000f6d - 00000f70 [ 4] */,
+ 0x007cc000 /* 00000f98 - 00000f98 [ 1] */,
+ 0x007de800 /* 00000fbd - 00000fbd [ 1] */,
+ 0x007e6800 /* 00000fcd - 00000fcd [ 1] */,
+ 0x007ed824 /* 00000fdb - 00000fff [ 37] */,
+ 0x00863000 /* 000010c6 - 000010c6 [ 1] */,
+ 0x00864004 /* 000010c8 - 000010cc [ 5] */,
+ 0x00867001 /* 000010ce - 000010cf [ 2] */,
+ 0x00924800 /* 00001249 - 00001249 [ 1] */,
+ 0x00927001 /* 0000124e - 0000124f [ 2] */,
+ 0x0092b800 /* 00001257 - 00001257 [ 1] */,
+ 0x0092c800 /* 00001259 - 00001259 [ 1] */,
+ 0x0092f001 /* 0000125e - 0000125f [ 2] */,
+ 0x00944800 /* 00001289 - 00001289 [ 1] */,
+ 0x00947001 /* 0000128e - 0000128f [ 2] */,
+ 0x00958800 /* 000012b1 - 000012b1 [ 1] */,
+ 0x0095b001 /* 000012b6 - 000012b7 [ 2] */,
+ 0x0095f800 /* 000012bf - 000012bf [ 1] */,
+ 0x00960800 /* 000012c1 - 000012c1 [ 1] */,
+ 0x00963001 /* 000012c6 - 000012c7 [ 2] */,
+ 0x0096b800 /* 000012d7 - 000012d7 [ 1] */,
+ 0x00988800 /* 00001311 - 00001311 [ 1] */,
+ 0x0098b001 /* 00001316 - 00001317 [ 2] */,
+ 0x009ad801 /* 0000135b - 0000135c [ 2] */,
+ 0x009be802 /* 0000137d - 0000137f [ 3] */,
+ 0x009cd005 /* 0000139a - 0000139f [ 6] */,
+ 0x009fb001 /* 000013f6 - 000013f7 [ 2] */,
+ 0x009ff001 /* 000013fe - 000013ff [ 2] */,
+ 0x00b40000 /* 00001680 - 00001680 [ 1] */,
+ 0x00b4e802 /* 0000169d - 0000169f [ 3] */,
+ 0x00b7c806 /* 000016f9 - 000016ff [ 7] */,
+ 0x00b8b008 /* 00001716 - 0000171e [ 9] */,
+ 0x00b9b808 /* 00001737 - 0000173f [ 9] */,
+ 0x00baa00b /* 00001754 - 0000175f [ 12] */,
+ 0x00bb6800 /* 0000176d - 0000176d [ 1] */,
+ 0x00bb8800 /* 00001771 - 00001771 [ 1] */,
+ 0x00bba00b /* 00001774 - 0000177f [ 12] */,
+ 0x00bef001 /* 000017de - 000017df [ 2] */,
+ 0x00bf5005 /* 000017ea - 000017ef [ 6] */,
+ 0x00bfd005 /* 000017fa - 000017ff [ 6] */,
+ 0x00c07000 /* 0000180e - 0000180e [ 1] */,
+ 0x00c0d005 /* 0000181a - 0000181f [ 6] */,
+ 0x00c3c806 /* 00001879 - 0000187f [ 7] */,
+ 0x00c55804 /* 000018ab - 000018af [ 5] */,
+ 0x00c7b009 /* 000018f6 - 000018ff [ 10] */,
+ 0x00c8f800 /* 0000191f - 0000191f [ 1] */,
+ 0x00c96003 /* 0000192c - 0000192f [ 4] */,
+ 0x00c9e003 /* 0000193c - 0000193f [ 4] */,
+ 0x00ca0802 /* 00001941 - 00001943 [ 3] */,
+ 0x00cb7001 /* 0000196e - 0000196f [ 2] */,
+ 0x00cba80a /* 00001975 - 0000197f [ 11] */,
+ 0x00cd6003 /* 000019ac - 000019af [ 4] */,
+ 0x00ce5005 /* 000019ca - 000019cf [ 6] */,
+ 0x00ced802 /* 000019db - 000019dd [ 3] */,
+ 0x00d0e001 /* 00001a1c - 00001a1d [ 2] */,
+ 0x00d2f800 /* 00001a5f - 00001a5f [ 1] */,
+ 0x00d3e801 /* 00001a7d - 00001a7e [ 2] */,
+ 0x00d45005 /* 00001a8a - 00001a8f [ 6] */,
+ 0x00d4d005 /* 00001a9a - 00001a9f [ 6] */,
+ 0x00d57001 /* 00001aae - 00001aaf [ 2] */,
+ 0x00d67830 /* 00001acf - 00001aff [ 49] */,
+ 0x00da6802 /* 00001b4d - 00001b4f [ 3] */,
+ 0x00dbf800 /* 00001b7f - 00001b7f [ 1] */,
+ 0x00dfa007 /* 00001bf4 - 00001bfb [ 8] */,
+ 0x00e1c002 /* 00001c38 - 00001c3a [ 3] */,
+ 0x00e25002 /* 00001c4a - 00001c4c [ 3] */,
+ 0x00e44806 /* 00001c89 - 00001c8f [ 7] */,
+ 0x00e5d801 /* 00001cbb - 00001cbc [ 2] */,
+ 0x00e64007 /* 00001cc8 - 00001ccf [ 8] */,
+ 0x00e7d804 /* 00001cfb - 00001cff [ 5] */,
+ 0x00f8b001 /* 00001f16 - 00001f17 [ 2] */,
+ 0x00f8f001 /* 00001f1e - 00001f1f [ 2] */,
+ 0x00fa3001 /* 00001f46 - 00001f47 [ 2] */,
+ 0x00fa7001 /* 00001f4e - 00001f4f [ 2] */,
+ 0x00fac000 /* 00001f58 - 00001f58 [ 1] */,
+ 0x00fad000 /* 00001f5a - 00001f5a [ 1] */,
+ 0x00fae000 /* 00001f5c - 00001f5c [ 1] */,
+ 0x00faf000 /* 00001f5e - 00001f5e [ 1] */,
+ 0x00fbf001 /* 00001f7e - 00001f7f [ 2] */,
+ 0x00fda800 /* 00001fb5 - 00001fb5 [ 1] */,
+ 0x00fe2800 /* 00001fc5 - 00001fc5 [ 1] */,
+ 0x00fea001 /* 00001fd4 - 00001fd5 [ 2] */,
+ 0x00fee000 /* 00001fdc - 00001fdc [ 1] */,
+ 0x00ff8001 /* 00001ff0 - 00001ff1 [ 2] */,
+ 0x00ffa800 /* 00001ff5 - 00001ff5 [ 1] */,
+ 0x00fff810 /* 00001fff - 0000200f [ 17] */,
+ 0x01014007 /* 00002028 - 0000202f [ 8] */,
+ 0x0102f810 /* 0000205f - 0000206f [ 17] */,
+ 0x01039001 /* 00002072 - 00002073 [ 2] */,
+ 0x01047800 /* 0000208f - 0000208f [ 1] */,
+ 0x0104e802 /* 0000209d - 0000209f [ 3] */,
+ 0x0106080e /* 000020c1 - 000020cf [ 15] */,
+ 0x0107880e /* 000020f1 - 000020ff [ 15] */,
+ 0x010c6003 /* 0000218c - 0000218f [ 4] */,
+ 0x01213818 /* 00002427 - 0000243f [ 25] */,
+ 0x01225814 /* 0000244b - 0000245f [ 21] */,
+ 0x015ba001 /* 00002b74 - 00002b75 [ 2] */,
+ 0x015cb000 /* 00002b96 - 00002b96 [ 1] */,
+ 0x0167a004 /* 00002cf4 - 00002cf8 [ 5] */,
+ 0x01693000 /* 00002d26 - 00002d26 [ 1] */,
+ 0x01694004 /* 00002d28 - 00002d2c [ 5] */,
+ 0x01697001 /* 00002d2e - 00002d2f [ 2] */,
+ 0x016b4006 /* 00002d68 - 00002d6e [ 7] */,
+ 0x016b880d /* 00002d71 - 00002d7e [ 14] */,
+ 0x016cb808 /* 00002d97 - 00002d9f [ 9] */,
+ 0x016d3800 /* 00002da7 - 00002da7 [ 1] */,
+ 0x016d7800 /* 00002daf - 00002daf [ 1] */,
+ 0x016db800 /* 00002db7 - 00002db7 [ 1] */,
+ 0x016df800 /* 00002dbf - 00002dbf [ 1] */,
+ 0x016e3800 /* 00002dc7 - 00002dc7 [ 1] */,
+ 0x016e7800 /* 00002dcf - 00002dcf [ 1] */,
+ 0x016eb800 /* 00002dd7 - 00002dd7 [ 1] */,
+ 0x016ef800 /* 00002ddf - 00002ddf [ 1] */,
+ 0x0172f021 /* 00002e5e - 00002e7f [ 34] */,
+ 0x0174d000 /* 00002e9a - 00002e9a [ 1] */,
+ 0x0177a00b /* 00002ef4 - 00002eff [ 12] */,
+ 0x017eb019 /* 00002fd6 - 00002fef [ 26] */,
+ 0x01800000 /* 00003000 - 00003000 [ 1] */,
+ 0x01820000 /* 00003040 - 00003040 [ 1] */,
+ 0x0184b801 /* 00003097 - 00003098 [ 2] */,
+ 0x01880004 /* 00003100 - 00003104 [ 5] */,
+ 0x01898000 /* 00003130 - 00003130 [ 1] */,
+ 0x018c7800 /* 0000318f - 0000318f [ 1] */,
+ 0x018f200a /* 000031e4 - 000031ee [ 11] */,
+ 0x0190f800 /* 0000321f - 0000321f [ 1] */,
+ 0x05246802 /* 0000a48d - 0000a48f [ 3] */,
+ 0x05263808 /* 0000a4c7 - 0000a4cf [ 9] */,
+ 0x05316013 /* 0000a62c - 0000a63f [ 20] */,
+ 0x0537c007 /* 0000a6f8 - 0000a6ff [ 8] */,
+ 0x053e5804 /* 0000a7cb - 0000a7cf [ 5] */,
+ 0x053e9000 /* 0000a7d2 - 0000a7d2 [ 1] */,
+ 0x053ea000 /* 0000a7d4 - 0000a7d4 [ 1] */,
+ 0x053ed017 /* 0000a7da - 0000a7f1 [ 24] */,
+ 0x05416802 /* 0000a82d - 0000a82f [ 3] */,
+ 0x0541d005 /* 0000a83a - 0000a83f [ 6] */,
+ 0x0543c007 /* 0000a878 - 0000a87f [ 8] */,
+ 0x05463007 /* 0000a8c6 - 0000a8cd [ 8] */,
+ 0x0546d005 /* 0000a8da - 0000a8df [ 6] */,
+ 0x054aa00a /* 0000a954 - 0000a95e [ 11] */,
+ 0x054be802 /* 0000a97d - 0000a97f [ 3] */,
+ 0x054e7000 /* 0000a9ce - 0000a9ce [ 1] */,
+ 0x054ed003 /* 0000a9da - 0000a9dd [ 4] */,
+ 0x054ff800 /* 0000a9ff - 0000a9ff [ 1] */,
+ 0x0551b808 /* 0000aa37 - 0000aa3f [ 9] */,
+ 0x05527001 /* 0000aa4e - 0000aa4f [ 2] */,
+ 0x0552d001 /* 0000aa5a - 0000aa5b [ 2] */,
+ 0x05561817 /* 0000aac3 - 0000aada [ 24] */,
+ 0x0557b809 /* 0000aaf7 - 0000ab00 [ 10] */,
+ 0x05583801 /* 0000ab07 - 0000ab08 [ 2] */,
+ 0x05587801 /* 0000ab0f - 0000ab10 [ 2] */,
+ 0x0558b808 /* 0000ab17 - 0000ab1f [ 9] */,
+ 0x05593800 /* 0000ab27 - 0000ab27 [ 1] */,
+ 0x05597800 /* 0000ab2f - 0000ab2f [ 1] */,
+ 0x055b6003 /* 0000ab6c - 0000ab6f [ 4] */,
+ 0x055f7001 /* 0000abee - 0000abef [ 2] */,
+ 0x055fd005 /* 0000abfa - 0000abff [ 6] */,
+ 0x06bd200b /* 0000d7a4 - 0000d7af [ 12] */,
+ 0x06be3803 /* 0000d7c7 - 0000d7ca [ 4] */,
+ 0x06bfe7ff /* 0000d7fc - 0000dffb [ 2048] */,
+ 0x06ffe7ff /* 0000dffc - 0000e7fb [ 2048] */,
+ 0x073fe7ff /* 0000e7fc - 0000effb [ 2048] */,
+ 0x077fe7ff /* 0000effc - 0000f7fb [ 2048] */,
+ 0x07bfe103 /* 0000f7fc - 0000f8ff [ 260] */,
+ 0x07d37001 /* 0000fa6e - 0000fa6f [ 2] */,
+ 0x07d6d025 /* 0000fada - 0000faff [ 38] */,
+ 0x07d8380b /* 0000fb07 - 0000fb12 [ 12] */,
+ 0x07d8c004 /* 0000fb18 - 0000fb1c [ 5] */,
+ 0x07d9b800 /* 0000fb37 - 0000fb37 [ 1] */,
+ 0x07d9e800 /* 0000fb3d - 0000fb3d [ 1] */,
+ 0x07d9f800 /* 0000fb3f - 0000fb3f [ 1] */,
+ 0x07da1000 /* 0000fb42 - 0000fb42 [ 1] */,
+ 0x07da2800 /* 0000fb45 - 0000fb45 [ 1] */,
+ 0x07de180f /* 0000fbc3 - 0000fbd2 [ 16] */,
+ 0x07ec8001 /* 0000fd90 - 0000fd91 [ 2] */,
+ 0x07ee4006 /* 0000fdc8 - 0000fdce [ 7] */,
+ 0x07ee801f /* 0000fdd0 - 0000fdef [ 32] */,
+ 0x07f0d005 /* 0000fe1a - 0000fe1f [ 6] */,
+ 0x07f29800 /* 0000fe53 - 0000fe53 [ 1] */,
+ 0x07f33800 /* 0000fe67 - 0000fe67 [ 1] */,
+ 0x07f36003 /* 0000fe6c - 0000fe6f [ 4] */,
+ 0x07f3a800 /* 0000fe75 - 0000fe75 [ 1] */,
+ 0x07f7e803 /* 0000fefd - 0000ff00 [ 4] */,
+ 0x07fdf802 /* 0000ffbf - 0000ffc1 [ 3] */,
+ 0x07fe4001 /* 0000ffc8 - 0000ffc9 [ 2] */,
+ 0x07fe8001 /* 0000ffd0 - 0000ffd1 [ 2] */,
+ 0x07fec001 /* 0000ffd8 - 0000ffd9 [ 2] */,
+ 0x07fee802 /* 0000ffdd - 0000ffdf [ 3] */,
+ 0x07ff3800 /* 0000ffe7 - 0000ffe7 [ 1] */,
+ 0x07ff780c /* 0000ffef - 0000fffb [ 13] */,
+ 0x07fff001 /* 0000fffe - 0000ffff [ 2] */,
+ 0x08006000 /* 0001000c - 0001000c [ 1] */,
+ 0x08013800 /* 00010027 - 00010027 [ 1] */,
+ 0x0801d800 /* 0001003b - 0001003b [ 1] */,
+ 0x0801f000 /* 0001003e - 0001003e [ 1] */,
+ 0x08027001 /* 0001004e - 0001004f [ 2] */,
+ 0x0802f021 /* 0001005e - 0001007f [ 34] */,
+ 0x0807d804 /* 000100fb - 000100ff [ 5] */,
+ 0x08081803 /* 00010103 - 00010106 [ 4] */,
+ 0x0809a002 /* 00010134 - 00010136 [ 3] */,
+ 0x080c7800 /* 0001018f - 0001018f [ 1] */,
+ 0x080ce802 /* 0001019d - 0001019f [ 3] */,
+ 0x080d082e /* 000101a1 - 000101cf [ 47] */,
+ 0x080ff081 /* 000101fe - 0001027f [ 130] */,
+ 0x0814e802 /* 0001029d - 0001029f [ 3] */,
+ 0x0816880e /* 000102d1 - 000102df [ 15] */,
+ 0x0817e003 /* 000102fc - 000102ff [ 4] */,
+ 0x08192008 /* 00010324 - 0001032c [ 9] */,
+ 0x081a5804 /* 0001034b - 0001034f [ 5] */,
+ 0x081bd804 /* 0001037b - 0001037f [ 5] */,
+ 0x081cf000 /* 0001039e - 0001039e [ 1] */,
+ 0x081e2003 /* 000103c4 - 000103c7 [ 4] */,
+ 0x081eb029 /* 000103d6 - 000103ff [ 42] */,
+ 0x0824f001 /* 0001049e - 0001049f [ 2] */,
+ 0x08255005 /* 000104aa - 000104af [ 6] */,
+ 0x0826a003 /* 000104d4 - 000104d7 [ 4] */,
+ 0x0827e003 /* 000104fc - 000104ff [ 4] */,
+ 0x08294007 /* 00010528 - 0001052f [ 8] */,
+ 0x082b200a /* 00010564 - 0001056e [ 11] */,
+ 0x082bd800 /* 0001057b - 0001057b [ 1] */,
+ 0x082c5800 /* 0001058b - 0001058b [ 1] */,
+ 0x082c9800 /* 00010593 - 00010593 [ 1] */,
+ 0x082cb000 /* 00010596 - 00010596 [ 1] */,
+ 0x082d1000 /* 000105a2 - 000105a2 [ 1] */,
+ 0x082d9000 /* 000105b2 - 000105b2 [ 1] */,
+ 0x082dd000 /* 000105ba - 000105ba [ 1] */,
+ 0x082de842 /* 000105bd - 000105ff [ 67] */,
+ 0x0839b808 /* 00010737 - 0001073f [ 9] */,
+ 0x083ab009 /* 00010756 - 0001075f [ 10] */,
+ 0x083b4017 /* 00010768 - 0001077f [ 24] */,
+ 0x083c3000 /* 00010786 - 00010786 [ 1] */,
+ 0x083d8800 /* 000107b1 - 000107b1 [ 1] */,
+ 0x083dd844 /* 000107bb - 000107ff [ 69] */,
+ 0x08403001 /* 00010806 - 00010807 [ 2] */,
+ 0x08404800 /* 00010809 - 00010809 [ 1] */,
+ 0x0841b000 /* 00010836 - 00010836 [ 1] */,
+ 0x0841c802 /* 00010839 - 0001083b [ 3] */,
+ 0x0841e801 /* 0001083d - 0001083e [ 2] */,
+ 0x0842b000 /* 00010856 - 00010856 [ 1] */,
+ 0x0844f807 /* 0001089f - 000108a6 [ 8] */,
+ 0x0845802f /* 000108b0 - 000108df [ 48] */,
+ 0x08479800 /* 000108f3 - 000108f3 [ 1] */,
+ 0x0847b004 /* 000108f6 - 000108fa [ 5] */,
+ 0x0848e002 /* 0001091c - 0001091e [ 3] */,
+ 0x0849d004 /* 0001093a - 0001093e [ 5] */,
+ 0x084a003f /* 00010940 - 0001097f [ 64] */,
+ 0x084dc003 /* 000109b8 - 000109bb [ 4] */,
+ 0x084e8001 /* 000109d0 - 000109d1 [ 2] */,
+ 0x08502000 /* 00010a04 - 00010a04 [ 1] */,
+ 0x08503804 /* 00010a07 - 00010a0b [ 5] */,
+ 0x0850a000 /* 00010a14 - 00010a14 [ 1] */,
+ 0x0850c000 /* 00010a18 - 00010a18 [ 1] */,
+ 0x0851b001 /* 00010a36 - 00010a37 [ 2] */,
+ 0x0851d803 /* 00010a3b - 00010a3e [ 4] */,
+ 0x08524806 /* 00010a49 - 00010a4f [ 7] */,
+ 0x0852c806 /* 00010a59 - 00010a5f [ 7] */,
+ 0x0855001f /* 00010aa0 - 00010abf [ 32] */,
+ 0x08573803 /* 00010ae7 - 00010aea [ 4] */,
+ 0x0857b808 /* 00010af7 - 00010aff [ 9] */,
+ 0x0859b002 /* 00010b36 - 00010b38 [ 3] */,
+ 0x085ab001 /* 00010b56 - 00010b57 [ 2] */,
+ 0x085b9804 /* 00010b73 - 00010b77 [ 5] */,
+ 0x085c9006 /* 00010b92 - 00010b98 [ 7] */,
+ 0x085ce80b /* 00010b9d - 00010ba8 [ 12] */,
+ 0x085d804f /* 00010bb0 - 00010bff [ 80] */,
+ 0x08624836 /* 00010c49 - 00010c7f [ 55] */,
+ 0x0865980c /* 00010cb3 - 00010cbf [ 13] */,
+ 0x08679806 /* 00010cf3 - 00010cf9 [ 7] */,
+ 0x08694007 /* 00010d28 - 00010d2f [ 8] */,
+ 0x0869d125 /* 00010d3a - 00010e5f [ 294] */,
+ 0x0873f800 /* 00010e7f - 00010e7f [ 1] */,
+ 0x08755000 /* 00010eaa - 00010eaa [ 1] */,
+ 0x08757001 /* 00010eae - 00010eaf [ 2] */,
+ 0x0875904a /* 00010eb2 - 00010efc [ 75] */,
+ 0x08794007 /* 00010f28 - 00010f2f [ 8] */,
+ 0x087ad015 /* 00010f5a - 00010f6f [ 22] */,
+ 0x087c5025 /* 00010f8a - 00010faf [ 38] */,
+ 0x087e6013 /* 00010fcc - 00010fdf [ 20] */,
+ 0x087fb808 /* 00010ff7 - 00010fff [ 9] */,
+ 0x08827003 /* 0001104e - 00011051 [ 4] */,
+ 0x0883b008 /* 00011076 - 0001107e [ 9] */,
+ 0x0885e800 /* 000110bd - 000110bd [ 1] */,
+ 0x0886180c /* 000110c3 - 000110cf [ 13] */,
+ 0x08874806 /* 000110e9 - 000110ef [ 7] */,
+ 0x0887d005 /* 000110fa - 000110ff [ 6] */,
+ 0x0889a800 /* 00011135 - 00011135 [ 1] */,
+ 0x088a4007 /* 00011148 - 0001114f [ 8] */,
+ 0x088bb808 /* 00011177 - 0001117f [ 9] */,
+ 0x088f0000 /* 000111e0 - 000111e0 [ 1] */,
+ 0x088fa80a /* 000111f5 - 000111ff [ 11] */,
+ 0x08909000 /* 00011212 - 00011212 [ 1] */,
+ 0x0892103d /* 00011242 - 0001127f [ 62] */,
+ 0x08943800 /* 00011287 - 00011287 [ 1] */,
+ 0x08944800 /* 00011289 - 00011289 [ 1] */,
+ 0x08947000 /* 0001128e - 0001128e [ 1] */,
+ 0x0894f000 /* 0001129e - 0001129e [ 1] */,
+ 0x08955005 /* 000112aa - 000112af [ 6] */,
+ 0x08975804 /* 000112eb - 000112ef [ 5] */,
+ 0x0897d005 /* 000112fa - 000112ff [ 6] */,
+ 0x08982000 /* 00011304 - 00011304 [ 1] */,
+ 0x08986801 /* 0001130d - 0001130e [ 2] */,
+ 0x08988801 /* 00011311 - 00011312 [ 2] */,
+ 0x08994800 /* 00011329 - 00011329 [ 1] */,
+ 0x08998800 /* 00011331 - 00011331 [ 1] */,
+ 0x0899a000 /* 00011334 - 00011334 [ 1] */,
+ 0x0899d000 /* 0001133a - 0001133a [ 1] */,
+ 0x089a2801 /* 00011345 - 00011346 [ 2] */,
+ 0x089a4801 /* 00011349 - 0001134a [ 2] */,
+ 0x089a7001 /* 0001134e - 0001134f [ 2] */,
+ 0x089a8805 /* 00011351 - 00011356 [ 6] */,
+ 0x089ac004 /* 00011358 - 0001135c [ 5] */,
+ 0x089b2001 /* 00011364 - 00011365 [ 2] */,
+ 0x089b6802 /* 0001136d - 0001136f [ 3] */,
+ 0x089ba88a /* 00011375 - 000113ff [ 139] */,
+ 0x08a2e000 /* 0001145c - 0001145c [ 1] */,
+ 0x08a3101d /* 00011462 - 0001147f [ 30] */,
+ 0x08a64007 /* 000114c8 - 000114cf [ 8] */,
+ 0x08a6d0a5 /* 000114da - 0001157f [ 166] */,
+ 0x08adb001 /* 000115b6 - 000115b7 [ 2] */,
+ 0x08aef021 /* 000115de - 000115ff [ 34] */,
+ 0x08b2280a /* 00011645 - 0001164f [ 11] */,
+ 0x08b2d005 /* 0001165a - 0001165f [ 6] */,
+ 0x08b36812 /* 0001166d - 0001167f [ 19] */,
+ 0x08b5d005 /* 000116ba - 000116bf [ 6] */,
+ 0x08b65035 /* 000116ca - 000116ff [ 54] */,
+ 0x08b8d801 /* 0001171b - 0001171c [ 2] */,
+ 0x08b96003 /* 0001172c - 0001172f [ 4] */,
+ 0x08ba38b8 /* 00011747 - 000117ff [ 185] */,
+ 0x08c1e063 /* 0001183c - 0001189f [ 100] */,
+ 0x08c7980b /* 000118f3 - 000118fe [ 12] */,
+ 0x08c83801 /* 00011907 - 00011908 [ 2] */,
+ 0x08c85001 /* 0001190a - 0001190b [ 2] */,
+ 0x08c8a000 /* 00011914 - 00011914 [ 1] */,
+ 0x08c8b800 /* 00011917 - 00011917 [ 1] */,
+ 0x08c9b000 /* 00011936 - 00011936 [ 1] */,
+ 0x08c9c801 /* 00011939 - 0001193a [ 2] */,
+ 0x08ca3808 /* 00011947 - 0001194f [ 9] */,
+ 0x08cad045 /* 0001195a - 0001199f [ 70] */,
+ 0x08cd4001 /* 000119a8 - 000119a9 [ 2] */,
+ 0x08cec001 /* 000119d8 - 000119d9 [ 2] */,
+ 0x08cf281a /* 000119e5 - 000119ff [ 27] */,
+ 0x08d24007 /* 00011a48 - 00011a4f [ 8] */,
+ 0x08d5180c /* 00011aa3 - 00011aaf [ 13] */,
+ 0x08d7c806 /* 00011af9 - 00011aff [ 7] */,
+ 0x08d850f5 /* 00011b0a - 00011bff [ 246] */,
+ 0x08e04800 /* 00011c09 - 00011c09 [ 1] */,
+ 0x08e1b800 /* 00011c37 - 00011c37 [ 1] */,
+ 0x08e23009 /* 00011c46 - 00011c4f [ 10] */,
+ 0x08e36802 /* 00011c6d - 00011c6f [ 3] */,
+ 0x08e48001 /* 00011c90 - 00011c91 [ 2] */,
+ 0x08e54000 /* 00011ca8 - 00011ca8 [ 1] */,
+ 0x08e5b848 /* 00011cb7 - 00011cff [ 73] */,
+ 0x08e83800 /* 00011d07 - 00011d07 [ 1] */,
+ 0x08e85000 /* 00011d0a - 00011d0a [ 1] */,
+ 0x08e9b802 /* 00011d37 - 00011d39 [ 3] */,
+ 0x08e9d800 /* 00011d3b - 00011d3b [ 1] */,
+ 0x08e9f000 /* 00011d3e - 00011d3e [ 1] */,
+ 0x08ea4007 /* 00011d48 - 00011d4f [ 8] */,
+ 0x08ead005 /* 00011d5a - 00011d5f [ 6] */,
+ 0x08eb3000 /* 00011d66 - 00011d66 [ 1] */,
+ 0x08eb4800 /* 00011d69 - 00011d69 [ 1] */,
+ 0x08ec7800 /* 00011d8f - 00011d8f [ 1] */,
+ 0x08ec9000 /* 00011d92 - 00011d92 [ 1] */,
+ 0x08ecc806 /* 00011d99 - 00011d9f [ 7] */,
+ 0x08ed5135 /* 00011daa - 00011edf [ 310] */,
+ 0x08f7c806 /* 00011ef9 - 00011eff [ 7] */,
+ 0x08f88800 /* 00011f11 - 00011f11 [ 1] */,
+ 0x08f9d802 /* 00011f3b - 00011f3d [ 3] */,
+ 0x08fad055 /* 00011f5a - 00011faf [ 86] */,
+ 0x08fd880e /* 00011fb1 - 00011fbf [ 15] */,
+ 0x08ff900c /* 00011ff2 - 00011ffe [ 13] */,
+ 0x091cd065 /* 0001239a - 000123ff [ 102] */,
+ 0x09237800 /* 0001246f - 0001246f [ 1] */,
+ 0x0923a80a /* 00012475 - 0001247f [ 11] */,
+ 0x092a27ff /* 00012544 - 00012d43 [ 2048] */,
+ 0x096a224b /* 00012d44 - 00012f8f [ 588] */,
+ 0x097f980c /* 00012ff3 - 00012fff [ 13] */,
+ 0x09a1800f /* 00013430 - 0001343f [ 16] */,
+ 0x09a2b7ff /* 00013456 - 00013c55 [ 2048] */,
+ 0x09e2b7a9 /* 00013c56 - 000143ff [ 1962] */,
+ 0x0a323fff /* 00014647 - 00014e46 [ 2048] */,
+ 0x0a723fff /* 00014e47 - 00015646 [ 2048] */,
+ 0x0ab23fff /* 00015647 - 00015e46 [ 2048] */,
+ 0x0af23fff /* 00015e47 - 00016646 [ 2048] */,
+ 0x0b3239b8 /* 00016647 - 000167ff [ 441] */,
+ 0x0b51c806 /* 00016a39 - 00016a3f [ 7] */,
+ 0x0b52f800 /* 00016a5f - 00016a5f [ 1] */,
+ 0x0b535003 /* 00016a6a - 00016a6d [ 4] */,
+ 0x0b55f800 /* 00016abf - 00016abf [ 1] */,
+ 0x0b565005 /* 00016aca - 00016acf [ 6] */,
+ 0x0b577001 /* 00016aee - 00016aef [ 2] */,
+ 0x0b57b009 /* 00016af6 - 00016aff [ 10] */,
+ 0x0b5a3009 /* 00016b46 - 00016b4f [ 10] */,
+ 0x0b5ad000 /* 00016b5a - 00016b5a [ 1] */,
+ 0x0b5b1000 /* 00016b62 - 00016b62 [ 1] */,
+ 0x0b5bc004 /* 00016b78 - 00016b7c [ 5] */,
+ 0x0b5c82af /* 00016b90 - 00016e3f [ 688] */,
+ 0x0b74d864 /* 00016e9b - 00016eff [ 101] */,
+ 0x0b7a5803 /* 00016f4b - 00016f4e [ 4] */,
+ 0x0b7c4006 /* 00016f88 - 00016f8e [ 7] */,
+ 0x0b7d003f /* 00016fa0 - 00016fdf [ 64] */,
+ 0x0b7f280a /* 00016fe5 - 00016fef [ 11] */,
+ 0x0b7f900d /* 00016ff2 - 00016fff [ 14] */,
+ 0x0c3fc007 /* 000187f8 - 000187ff [ 8] */,
+ 0x0c66b029 /* 00018cd6 - 00018cff [ 42] */,
+ 0x0c684fff /* 00018d09 - 00019508 [ 2048] */,
+ 0x0ca84fff /* 00019509 - 00019d08 [ 2048] */,
+ 0x0ce84fff /* 00019d09 - 0001a508 [ 2048] */,
+ 0x0d284fff /* 0001a509 - 0001ad08 [ 2048] */,
+ 0x0d684ae6 /* 0001ad09 - 0001afef [ 743] */,
+ 0x0d7fa000 /* 0001aff4 - 0001aff4 [ 1] */,
+ 0x0d7fe000 /* 0001affc - 0001affc [ 1] */,
+ 0x0d7ff800 /* 0001afff - 0001afff [ 1] */,
+ 0x0d89180e /* 0001b123 - 0001b131 [ 15] */,
+ 0x0d89981c /* 0001b133 - 0001b14f [ 29] */,
+ 0x0d8a9801 /* 0001b153 - 0001b154 [ 2] */,
+ 0x0d8ab00d /* 0001b156 - 0001b163 [ 14] */,
+ 0x0d8b4007 /* 0001b168 - 0001b16f [ 8] */,
+ 0x0d97e7ff /* 0001b2fc - 0001bafb [ 2048] */,
+ 0x0dd7e103 /* 0001bafc - 0001bbff [ 260] */,
+ 0x0de35804 /* 0001bc6b - 0001bc6f [ 5] */,
+ 0x0de3e802 /* 0001bc7d - 0001bc7f [ 3] */,
+ 0x0de44806 /* 0001bc89 - 0001bc8f [ 7] */,
+ 0x0de4d001 /* 0001bc9a - 0001bc9b [ 2] */,
+ 0x0de507ff /* 0001bca0 - 0001c49f [ 2048] */,
+ 0x0e2507ff /* 0001c4a0 - 0001cc9f [ 2048] */,
+ 0x0e65025f /* 0001cca0 - 0001ceff [ 608] */,
+ 0x0e797001 /* 0001cf2e - 0001cf2f [ 2] */,
+ 0x0e7a3808 /* 0001cf47 - 0001cf4f [ 9] */,
+ 0x0e7e203b /* 0001cfc4 - 0001cfff [ 60] */,
+ 0x0e87b009 /* 0001d0f6 - 0001d0ff [ 10] */,
+ 0x0e893801 /* 0001d127 - 0001d128 [ 2] */,
+ 0x0e8b9807 /* 0001d173 - 0001d17a [ 8] */,
+ 0x0e8f5814 /* 0001d1eb - 0001d1ff [ 21] */,
+ 0x0e923079 /* 0001d246 - 0001d2bf [ 122] */,
+ 0x0e96a00b /* 0001d2d4 - 0001d2df [ 12] */,
+ 0x0e97a00b /* 0001d2f4 - 0001d2ff [ 12] */,
+ 0x0e9ab808 /* 0001d357 - 0001d35f [ 9] */,
+ 0x0e9bc886 /* 0001d379 - 0001d3ff [ 135] */,
+ 0x0ea2a800 /* 0001d455 - 0001d455 [ 1] */,
+ 0x0ea4e800 /* 0001d49d - 0001d49d [ 1] */,
+ 0x0ea50001 /* 0001d4a0 - 0001d4a1 [ 2] */,
+ 0x0ea51801 /* 0001d4a3 - 0001d4a4 [ 2] */,
+ 0x0ea53801 /* 0001d4a7 - 0001d4a8 [ 2] */,
+ 0x0ea56800 /* 0001d4ad - 0001d4ad [ 1] */,
+ 0x0ea5d000 /* 0001d4ba - 0001d4ba [ 1] */,
+ 0x0ea5e000 /* 0001d4bc - 0001d4bc [ 1] */,
+ 0x0ea62000 /* 0001d4c4 - 0001d4c4 [ 1] */,
+ 0x0ea83000 /* 0001d506 - 0001d506 [ 1] */,
+ 0x0ea85801 /* 0001d50b - 0001d50c [ 2] */,
+ 0x0ea8a800 /* 0001d515 - 0001d515 [ 1] */,
+ 0x0ea8e800 /* 0001d51d - 0001d51d [ 1] */,
+ 0x0ea9d000 /* 0001d53a - 0001d53a [ 1] */,
+ 0x0ea9f800 /* 0001d53f - 0001d53f [ 1] */,
+ 0x0eaa2800 /* 0001d545 - 0001d545 [ 1] */,
+ 0x0eaa3802 /* 0001d547 - 0001d549 [ 3] */,
+ 0x0eaa8800 /* 0001d551 - 0001d551 [ 1] */,
+ 0x0eb53001 /* 0001d6a6 - 0001d6a7 [ 2] */,
+ 0x0ebe6001 /* 0001d7cc - 0001d7cd [ 2] */,
+ 0x0ed4600e /* 0001da8c - 0001da9a [ 15] */,
+ 0x0ed50000 /* 0001daa0 - 0001daa0 [ 1] */,
+ 0x0ed5844f /* 0001dab0 - 0001deff [ 1104] */,
+ 0x0ef8f805 /* 0001df1f - 0001df24 [ 6] */,
+ 0x0ef958d4 /* 0001df2b - 0001dfff [ 213] */,
+ 0x0f003800 /* 0001e007 - 0001e007 [ 1] */,
+ 0x0f00c801 /* 0001e019 - 0001e01a [ 2] */,
+ 0x0f011000 /* 0001e022 - 0001e022 [ 1] */,
+ 0x0f012800 /* 0001e025 - 0001e025 [ 1] */,
+ 0x0f015804 /* 0001e02b - 0001e02f [ 5] */,
+ 0x0f037020 /* 0001e06e - 0001e08e [ 33] */,
+ 0x0f04806f /* 0001e090 - 0001e0ff [ 112] */,
+ 0x0f096802 /* 0001e12d - 0001e12f [ 3] */,
+ 0x0f09f001 /* 0001e13e - 0001e13f [ 2] */,
+ 0x0f0a5003 /* 0001e14a - 0001e14d [ 4] */,
+ 0x0f0a813f /* 0001e150 - 0001e28f [ 320] */,
+ 0x0f157810 /* 0001e2af - 0001e2bf [ 17] */,
+ 0x0f17d004 /* 0001e2fa - 0001e2fe [ 5] */,
+ 0x0f1801cf /* 0001e300 - 0001e4cf [ 464] */,
+ 0x0f27d2e5 /* 0001e4fa - 0001e7df [ 742] */,
+ 0x0f3f3800 /* 0001e7e7 - 0001e7e7 [ 1] */,
+ 0x0f3f6000 /* 0001e7ec - 0001e7ec [ 1] */,
+ 0x0f3f7800 /* 0001e7ef - 0001e7ef [ 1] */,
+ 0x0f3ff800 /* 0001e7ff - 0001e7ff [ 1] */,
+ 0x0f462801 /* 0001e8c5 - 0001e8c6 [ 2] */,
+ 0x0f46b828 /* 0001e8d7 - 0001e8ff [ 41] */,
+ 0x0f4a6003 /* 0001e94c - 0001e94f [ 4] */,
+ 0x0f4ad003 /* 0001e95a - 0001e95d [ 4] */,
+ 0x0f4b0310 /* 0001e960 - 0001ec70 [ 785] */,
+ 0x0f65a84b /* 0001ecb5 - 0001ed00 [ 76] */,
+ 0x0f69f0c1 /* 0001ed3e - 0001edff [ 194] */,
+ 0x0f702000 /* 0001ee04 - 0001ee04 [ 1] */,
+ 0x0f710000 /* 0001ee20 - 0001ee20 [ 1] */,
+ 0x0f711800 /* 0001ee23 - 0001ee23 [ 1] */,
+ 0x0f712801 /* 0001ee25 - 0001ee26 [ 2] */,
+ 0x0f714000 /* 0001ee28 - 0001ee28 [ 1] */,
+ 0x0f719800 /* 0001ee33 - 0001ee33 [ 1] */,
+ 0x0f71c000 /* 0001ee38 - 0001ee38 [ 1] */,
+ 0x0f71d000 /* 0001ee3a - 0001ee3a [ 1] */,
+ 0x0f71e005 /* 0001ee3c - 0001ee41 [ 6] */,
+ 0x0f721803 /* 0001ee43 - 0001ee46 [ 4] */,
+ 0x0f724000 /* 0001ee48 - 0001ee48 [ 1] */,
+ 0x0f725000 /* 0001ee4a - 0001ee4a [ 1] */,
+ 0x0f726000 /* 0001ee4c - 0001ee4c [ 1] */,
+ 0x0f728000 /* 0001ee50 - 0001ee50 [ 1] */,
+ 0x0f729800 /* 0001ee53 - 0001ee53 [ 1] */,
+ 0x0f72a801 /* 0001ee55 - 0001ee56 [ 2] */,
+ 0x0f72c000 /* 0001ee58 - 0001ee58 [ 1] */,
+ 0x0f72d000 /* 0001ee5a - 0001ee5a [ 1] */,
+ 0x0f72e000 /* 0001ee5c - 0001ee5c [ 1] */,
+ 0x0f72f000 /* 0001ee5e - 0001ee5e [ 1] */,
+ 0x0f730000 /* 0001ee60 - 0001ee60 [ 1] */,
+ 0x0f731800 /* 0001ee63 - 0001ee63 [ 1] */,
+ 0x0f732801 /* 0001ee65 - 0001ee66 [ 2] */,
+ 0x0f735800 /* 0001ee6b - 0001ee6b [ 1] */,
+ 0x0f739800 /* 0001ee73 - 0001ee73 [ 1] */,
+ 0x0f73c000 /* 0001ee78 - 0001ee78 [ 1] */,
+ 0x0f73e800 /* 0001ee7d - 0001ee7d [ 1] */,
+ 0x0f73f800 /* 0001ee7f - 0001ee7f [ 1] */,
+ 0x0f745000 /* 0001ee8a - 0001ee8a [ 1] */,
+ 0x0f74e004 /* 0001ee9c - 0001eea0 [ 5] */,
+ 0x0f752000 /* 0001eea4 - 0001eea4 [ 1] */,
+ 0x0f755000 /* 0001eeaa - 0001eeaa [ 1] */,
+ 0x0f75e033 /* 0001eebc - 0001eeef [ 52] */,
+ 0x0f77910d /* 0001eef2 - 0001efff [ 270] */,
+ 0x0f816003 /* 0001f02c - 0001f02f [ 4] */,
+ 0x0f84a00b /* 0001f094 - 0001f09f [ 12] */,
+ 0x0f857801 /* 0001f0af - 0001f0b0 [ 2] */,
+ 0x0f860000 /* 0001f0c0 - 0001f0c0 [ 1] */,
+ 0x0f868000 /* 0001f0d0 - 0001f0d0 [ 1] */,
+ 0x0f87b009 /* 0001f0f6 - 0001f0ff [ 10] */,
+ 0x0f8d7037 /* 0001f1ae - 0001f1e5 [ 56] */,
+ 0x0f90180c /* 0001f203 - 0001f20f [ 13] */,
+ 0x0f91e003 /* 0001f23c - 0001f23f [ 4] */,
+ 0x0f924806 /* 0001f249 - 0001f24f [ 7] */,
+ 0x0f92900d /* 0001f252 - 0001f25f [ 14] */,
+ 0x0f933099 /* 0001f266 - 0001f2ff [ 154] */,
+ 0x0fb6c003 /* 0001f6d8 - 0001f6db [ 4] */,
+ 0x0fb76802 /* 0001f6ed - 0001f6ef [ 3] */,
+ 0x0fb7e802 /* 0001f6fd - 0001f6ff [ 3] */,
+ 0x0fbbb803 /* 0001f777 - 0001f77a [ 4] */,
+ 0x0fbed005 /* 0001f7da - 0001f7df [ 6] */,
+ 0x0fbf6003 /* 0001f7ec - 0001f7ef [ 4] */,
+ 0x0fbf880e /* 0001f7f1 - 0001f7ff [ 15] */,
+ 0x0fc06003 /* 0001f80c - 0001f80f [ 4] */,
+ 0x0fc24007 /* 0001f848 - 0001f84f [ 8] */,
+ 0x0fc2d005 /* 0001f85a - 0001f85f [ 6] */,
+ 0x0fc44007 /* 0001f888 - 0001f88f [ 8] */,
+ 0x0fc57001 /* 0001f8ae - 0001f8af [ 2] */,
+ 0x0fc5904d /* 0001f8b2 - 0001f8ff [ 78] */,
+ 0x0fd2a00b /* 0001fa54 - 0001fa5f [ 12] */,
+ 0x0fd37001 /* 0001fa6e - 0001fa6f [ 2] */,
+ 0x0fd3e802 /* 0001fa7d - 0001fa7f [ 3] */,
+ 0x0fd44806 /* 0001fa89 - 0001fa8f [ 7] */,
+ 0x0fd5f000 /* 0001fabe - 0001fabe [ 1] */,
+ 0x0fd63007 /* 0001fac6 - 0001facd [ 8] */,
+ 0x0fd6e003 /* 0001fadc - 0001fadf [ 4] */,
+ 0x0fd74806 /* 0001fae9 - 0001faef [ 7] */,
+ 0x0fd7c806 /* 0001faf9 - 0001faff [ 7] */,
+ 0x0fdc9800 /* 0001fb93 - 0001fb93 [ 1] */,
+ 0x0fde5824 /* 0001fbcb - 0001fbef [ 37] */,
+ 0x0fdfd405 /* 0001fbfa - 0001ffff [ 1030] */,
+ 0x1537001f /* 0002a6e0 - 0002a6ff [ 32] */,
+ 0x15b9d005 /* 0002b73a - 0002b73f [ 6] */,
+ 0x15c0f001 /* 0002b81e - 0002b81f [ 2] */,
+ 0x1675100d /* 0002cea2 - 0002ceaf [ 14] */,
+ 0x175f080e /* 0002ebe1 - 0002ebef [ 15] */,
+ 0x1772f7ff /* 0002ee5e - 0002f65d [ 2048] */,
+ 0x17b2f1a1 /* 0002f65e - 0002f7ff [ 418] */,
+ 0x17d0f5e1 /* 0002fa1e - 0002ffff [ 1506] */,
+ 0x189a5804 /* 0003134b - 0003134f [ 5] */,
+ 0x191d87ff /* 000323b0 - 00032baf [ 2048] */,
+ 0x195d87ff /* 00032bb0 - 000333af [ 2048] */,
+ 0x199d87ff /* 000333b0 - 00033baf [ 2048] */,
+ 0x19dd87ff /* 00033bb0 - 000343af [ 2048] */,
+ 0x1a1d87ff /* 000343b0 - 00034baf [ 2048] */,
+ 0x1a5d87ff /* 00034bb0 - 000353af [ 2048] */,
+ 0x1a9d87ff /* 000353b0 - 00035baf [ 2048] */,
+ 0x1add87ff /* 00035bb0 - 000363af [ 2048] */,
+ 0x1b1d87ff /* 000363b0 - 00036baf [ 2048] */,
+ 0x1b5d87ff /* 00036bb0 - 000373af [ 2048] */,
+ 0x1b9d87ff /* 000373b0 - 00037baf [ 2048] */,
+ 0x1bdd87ff /* 00037bb0 - 000383af [ 2048] */,
+ 0x1c1d87ff /* 000383b0 - 00038baf [ 2048] */,
+ 0x1c5d87ff /* 00038bb0 - 000393af [ 2048] */,
+ 0x1c9d87ff /* 000393b0 - 00039baf [ 2048] */,
+ 0x1cdd87ff /* 00039bb0 - 0003a3af [ 2048] */,
+ 0x1d1d87ff /* 0003a3b0 - 0003abaf [ 2048] */,
+ 0x1d5d87ff /* 0003abb0 - 0003b3af [ 2048] */,
+ 0x1d9d87ff /* 0003b3b0 - 0003bbaf [ 2048] */,
+ 0x1ddd87ff /* 0003bbb0 - 0003c3af [ 2048] */,
+ 0x1e1d87ff /* 0003c3b0 - 0003cbaf [ 2048] */,
+ 0x1e5d87ff /* 0003cbb0 - 0003d3af [ 2048] */,
+ 0x1e9d87ff /* 0003d3b0 - 0003dbaf [ 2048] */,
+ 0x1edd87ff /* 0003dbb0 - 0003e3af [ 2048] */,
+ 0x1f1d87ff /* 0003e3b0 - 0003ebaf [ 2048] */,
+ 0x1f5d87ff /* 0003ebb0 - 0003f3af [ 2048] */,
+ 0x1f9d87ff /* 0003f3b0 - 0003fbaf [ 2048] */,
+ 0x1fdd87ff /* 0003fbb0 - 000403af [ 2048] */,
+ 0x201d87ff /* 000403b0 - 00040baf [ 2048] */,
+ 0x205d87ff /* 00040bb0 - 000413af [ 2048] */,
+ 0x209d87ff /* 000413b0 - 00041baf [ 2048] */,
+ 0x20dd87ff /* 00041bb0 - 000423af [ 2048] */,
+ 0x211d87ff /* 000423b0 - 00042baf [ 2048] */,
+ 0x215d87ff /* 00042bb0 - 000433af [ 2048] */,
+ 0x219d87ff /* 000433b0 - 00043baf [ 2048] */,
+ 0x21dd87ff /* 00043bb0 - 000443af [ 2048] */,
+ 0x221d87ff /* 000443b0 - 00044baf [ 2048] */,
+ 0x225d87ff /* 00044bb0 - 000453af [ 2048] */,
+ 0x229d87ff /* 000453b0 - 00045baf [ 2048] */,
+ 0x22dd87ff /* 00045bb0 - 000463af [ 2048] */,
+ 0x231d87ff /* 000463b0 - 00046baf [ 2048] */,
+ 0x235d87ff /* 00046bb0 - 000473af [ 2048] */,
+ 0x239d87ff /* 000473b0 - 00047baf [ 2048] */,
+ 0x23dd87ff /* 00047bb0 - 000483af [ 2048] */,
+ 0x241d87ff /* 000483b0 - 00048baf [ 2048] */,
+ 0x245d87ff /* 00048bb0 - 000493af [ 2048] */,
+ 0x249d87ff /* 000493b0 - 00049baf [ 2048] */,
+ 0x24dd87ff /* 00049bb0 - 0004a3af [ 2048] */,
+ 0x251d87ff /* 0004a3b0 - 0004abaf [ 2048] */,
+ 0x255d87ff /* 0004abb0 - 0004b3af [ 2048] */,
+ 0x259d87ff /* 0004b3b0 - 0004bbaf [ 2048] */,
+ 0x25dd87ff /* 0004bbb0 - 0004c3af [ 2048] */,
+ 0x261d87ff /* 0004c3b0 - 0004cbaf [ 2048] */,
+ 0x265d87ff /* 0004cbb0 - 0004d3af [ 2048] */,
+ 0x269d87ff /* 0004d3b0 - 0004dbaf [ 2048] */,
+ 0x26dd87ff /* 0004dbb0 - 0004e3af [ 2048] */,
+ 0x271d87ff /* 0004e3b0 - 0004ebaf [ 2048] */,
+ 0x275d87ff /* 0004ebb0 - 0004f3af [ 2048] */,
+ 0x279d87ff /* 0004f3b0 - 0004fbaf [ 2048] */,
+ 0x27dd87ff /* 0004fbb0 - 000503af [ 2048] */,
+ 0x281d87ff /* 000503b0 - 00050baf [ 2048] */,
+ 0x285d87ff /* 00050bb0 - 000513af [ 2048] */,
+ 0x289d87ff /* 000513b0 - 00051baf [ 2048] */,
+ 0x28dd87ff /* 00051bb0 - 000523af [ 2048] */,
+ 0x291d87ff /* 000523b0 - 00052baf [ 2048] */,
+ 0x295d87ff /* 00052bb0 - 000533af [ 2048] */,
+ 0x299d87ff /* 000533b0 - 00053baf [ 2048] */,
+ 0x29dd87ff /* 00053bb0 - 000543af [ 2048] */,
+ 0x2a1d87ff /* 000543b0 - 00054baf [ 2048] */,
+ 0x2a5d87ff /* 00054bb0 - 000553af [ 2048] */,
+ 0x2a9d87ff /* 000553b0 - 00055baf [ 2048] */,
+ 0x2add87ff /* 00055bb0 - 000563af [ 2048] */,
+ 0x2b1d87ff /* 000563b0 - 00056baf [ 2048] */,
+ 0x2b5d87ff /* 00056bb0 - 000573af [ 2048] */,
+ 0x2b9d87ff /* 000573b0 - 00057baf [ 2048] */,
+ 0x2bdd87ff /* 00057bb0 - 000583af [ 2048] */,
+ 0x2c1d87ff /* 000583b0 - 00058baf [ 2048] */,
+ 0x2c5d87ff /* 00058bb0 - 000593af [ 2048] */,
+ 0x2c9d87ff /* 000593b0 - 00059baf [ 2048] */,
+ 0x2cdd87ff /* 00059bb0 - 0005a3af [ 2048] */,
+ 0x2d1d87ff /* 0005a3b0 - 0005abaf [ 2048] */,
+ 0x2d5d87ff /* 0005abb0 - 0005b3af [ 2048] */,
+ 0x2d9d87ff /* 0005b3b0 - 0005bbaf [ 2048] */,
+ 0x2ddd87ff /* 0005bbb0 - 0005c3af [ 2048] */,
+ 0x2e1d87ff /* 0005c3b0 - 0005cbaf [ 2048] */,
+ 0x2e5d87ff /* 0005cbb0 - 0005d3af [ 2048] */,
+ 0x2e9d87ff /* 0005d3b0 - 0005dbaf [ 2048] */,
+ 0x2edd87ff /* 0005dbb0 - 0005e3af [ 2048] */,
+ 0x2f1d87ff /* 0005e3b0 - 0005ebaf [ 2048] */,
+ 0x2f5d87ff /* 0005ebb0 - 0005f3af [ 2048] */,
+ 0x2f9d87ff /* 0005f3b0 - 0005fbaf [ 2048] */,
+ 0x2fdd87ff /* 0005fbb0 - 000603af [ 2048] */,
+ 0x301d87ff /* 000603b0 - 00060baf [ 2048] */,
+ 0x305d87ff /* 00060bb0 - 000613af [ 2048] */,
+ 0x309d87ff /* 000613b0 - 00061baf [ 2048] */,
+ 0x30dd87ff /* 00061bb0 - 000623af [ 2048] */,
+ 0x311d87ff /* 000623b0 - 00062baf [ 2048] */,
+ 0x315d87ff /* 00062bb0 - 000633af [ 2048] */,
+ 0x319d87ff /* 000633b0 - 00063baf [ 2048] */,
+ 0x31dd87ff /* 00063bb0 - 000643af [ 2048] */,
+ 0x321d87ff /* 000643b0 - 00064baf [ 2048] */,
+ 0x325d87ff /* 00064bb0 - 000653af [ 2048] */,
+ 0x329d87ff /* 000653b0 - 00065baf [ 2048] */,
+ 0x32dd87ff /* 00065bb0 - 000663af [ 2048] */,
+ 0x331d87ff /* 000663b0 - 00066baf [ 2048] */,
+ 0x335d87ff /* 00066bb0 - 000673af [ 2048] */,
+ 0x339d87ff /* 000673b0 - 00067baf [ 2048] */,
+ 0x33dd87ff /* 00067bb0 - 000683af [ 2048] */,
+ 0x341d87ff /* 000683b0 - 00068baf [ 2048] */,
+ 0x345d87ff /* 00068bb0 - 000693af [ 2048] */,
+ 0x349d87ff /* 000693b0 - 00069baf [ 2048] */,
+ 0x34dd87ff /* 00069bb0 - 0006a3af [ 2048] */,
+ 0x351d87ff /* 0006a3b0 - 0006abaf [ 2048] */,
+ 0x355d87ff /* 0006abb0 - 0006b3af [ 2048] */,
+ 0x359d87ff /* 0006b3b0 - 0006bbaf [ 2048] */,
+ 0x35dd87ff /* 0006bbb0 - 0006c3af [ 2048] */,
+ 0x361d87ff /* 0006c3b0 - 0006cbaf [ 2048] */,
+ 0x365d87ff /* 0006cbb0 - 0006d3af [ 2048] */,
+ 0x369d87ff /* 0006d3b0 - 0006dbaf [ 2048] */,
+ 0x36dd87ff /* 0006dbb0 - 0006e3af [ 2048] */,
+ 0x371d87ff /* 0006e3b0 - 0006ebaf [ 2048] */,
+ 0x375d87ff /* 0006ebb0 - 0006f3af [ 2048] */,
+ 0x379d87ff /* 0006f3b0 - 0006fbaf [ 2048] */,
+ 0x37dd87ff /* 0006fbb0 - 000703af [ 2048] */,
+ 0x381d87ff /* 000703b0 - 00070baf [ 2048] */,
+ 0x385d87ff /* 00070bb0 - 000713af [ 2048] */,
+ 0x389d87ff /* 000713b0 - 00071baf [ 2048] */,
+ 0x38dd87ff /* 00071bb0 - 000723af [ 2048] */,
+ 0x391d87ff /* 000723b0 - 00072baf [ 2048] */,
+ 0x395d87ff /* 00072bb0 - 000733af [ 2048] */,
+ 0x399d87ff /* 000733b0 - 00073baf [ 2048] */,
+ 0x39dd87ff /* 00073bb0 - 000743af [ 2048] */,
+ 0x3a1d87ff /* 000743b0 - 00074baf [ 2048] */,
+ 0x3a5d87ff /* 00074bb0 - 000753af [ 2048] */,
+ 0x3a9d87ff /* 000753b0 - 00075baf [ 2048] */,
+ 0x3add87ff /* 00075bb0 - 000763af [ 2048] */,
+ 0x3b1d87ff /* 000763b0 - 00076baf [ 2048] */,
+ 0x3b5d87ff /* 00076bb0 - 000773af [ 2048] */,
+ 0x3b9d87ff /* 000773b0 - 00077baf [ 2048] */,
+ 0x3bdd87ff /* 00077bb0 - 000783af [ 2048] */,
+ 0x3c1d87ff /* 000783b0 - 00078baf [ 2048] */,
+ 0x3c5d87ff /* 00078bb0 - 000793af [ 2048] */,
+ 0x3c9d87ff /* 000793b0 - 00079baf [ 2048] */,
+ 0x3cdd87ff /* 00079bb0 - 0007a3af [ 2048] */,
+ 0x3d1d87ff /* 0007a3b0 - 0007abaf [ 2048] */,
+ 0x3d5d87ff /* 0007abb0 - 0007b3af [ 2048] */,
+ 0x3d9d87ff /* 0007b3b0 - 0007bbaf [ 2048] */,
+ 0x3ddd87ff /* 0007bbb0 - 0007c3af [ 2048] */,
+ 0x3e1d87ff /* 0007c3b0 - 0007cbaf [ 2048] */,
+ 0x3e5d87ff /* 0007cbb0 - 0007d3af [ 2048] */,
+ 0x3e9d87ff /* 0007d3b0 - 0007dbaf [ 2048] */,
+ 0x3edd87ff /* 0007dbb0 - 0007e3af [ 2048] */,
+ 0x3f1d87ff /* 0007e3b0 - 0007ebaf [ 2048] */,
+ 0x3f5d87ff /* 0007ebb0 - 0007f3af [ 2048] */,
+ 0x3f9d87ff /* 0007f3b0 - 0007fbaf [ 2048] */,
+ 0x3fdd87ff /* 0007fbb0 - 000803af [ 2048] */,
+ 0x401d87ff /* 000803b0 - 00080baf [ 2048] */,
+ 0x405d87ff /* 00080bb0 - 000813af [ 2048] */,
+ 0x409d87ff /* 000813b0 - 00081baf [ 2048] */,
+ 0x40dd87ff /* 00081bb0 - 000823af [ 2048] */,
+ 0x411d87ff /* 000823b0 - 00082baf [ 2048] */,
+ 0x415d87ff /* 00082bb0 - 000833af [ 2048] */,
+ 0x419d87ff /* 000833b0 - 00083baf [ 2048] */,
+ 0x41dd87ff /* 00083bb0 - 000843af [ 2048] */,
+ 0x421d87ff /* 000843b0 - 00084baf [ 2048] */,
+ 0x425d87ff /* 00084bb0 - 000853af [ 2048] */,
+ 0x429d87ff /* 000853b0 - 00085baf [ 2048] */,
+ 0x42dd87ff /* 00085bb0 - 000863af [ 2048] */,
+ 0x431d87ff /* 000863b0 - 00086baf [ 2048] */,
+ 0x435d87ff /* 00086bb0 - 000873af [ 2048] */,
+ 0x439d87ff /* 000873b0 - 00087baf [ 2048] */,
+ 0x43dd87ff /* 00087bb0 - 000883af [ 2048] */,
+ 0x441d87ff /* 000883b0 - 00088baf [ 2048] */,
+ 0x445d87ff /* 00088bb0 - 000893af [ 2048] */,
+ 0x449d87ff /* 000893b0 - 00089baf [ 2048] */,
+ 0x44dd87ff /* 00089bb0 - 0008a3af [ 2048] */,
+ 0x451d87ff /* 0008a3b0 - 0008abaf [ 2048] */,
+ 0x455d87ff /* 0008abb0 - 0008b3af [ 2048] */,
+ 0x459d87ff /* 0008b3b0 - 0008bbaf [ 2048] */,
+ 0x45dd87ff /* 0008bbb0 - 0008c3af [ 2048] */,
+ 0x461d87ff /* 0008c3b0 - 0008cbaf [ 2048] */,
+ 0x465d87ff /* 0008cbb0 - 0008d3af [ 2048] */,
+ 0x469d87ff /* 0008d3b0 - 0008dbaf [ 2048] */,
+ 0x46dd87ff /* 0008dbb0 - 0008e3af [ 2048] */,
+ 0x471d87ff /* 0008e3b0 - 0008ebaf [ 2048] */,
+ 0x475d87ff /* 0008ebb0 - 0008f3af [ 2048] */,
+ 0x479d87ff /* 0008f3b0 - 0008fbaf [ 2048] */,
+ 0x47dd87ff /* 0008fbb0 - 000903af [ 2048] */,
+ 0x481d87ff /* 000903b0 - 00090baf [ 2048] */,
+ 0x485d87ff /* 00090bb0 - 000913af [ 2048] */,
+ 0x489d87ff /* 000913b0 - 00091baf [ 2048] */,
+ 0x48dd87ff /* 00091bb0 - 000923af [ 2048] */,
+ 0x491d87ff /* 000923b0 - 00092baf [ 2048] */,
+ 0x495d87ff /* 00092bb0 - 000933af [ 2048] */,
+ 0x499d87ff /* 000933b0 - 00093baf [ 2048] */,
+ 0x49dd87ff /* 00093bb0 - 000943af [ 2048] */,
+ 0x4a1d87ff /* 000943b0 - 00094baf [ 2048] */,
+ 0x4a5d87ff /* 00094bb0 - 000953af [ 2048] */,
+ 0x4a9d87ff /* 000953b0 - 00095baf [ 2048] */,
+ 0x4add87ff /* 00095bb0 - 000963af [ 2048] */,
+ 0x4b1d87ff /* 000963b0 - 00096baf [ 2048] */,
+ 0x4b5d87ff /* 00096bb0 - 000973af [ 2048] */,
+ 0x4b9d87ff /* 000973b0 - 00097baf [ 2048] */,
+ 0x4bdd87ff /* 00097bb0 - 000983af [ 2048] */,
+ 0x4c1d87ff /* 000983b0 - 00098baf [ 2048] */,
+ 0x4c5d87ff /* 00098bb0 - 000993af [ 2048] */,
+ 0x4c9d87ff /* 000993b0 - 00099baf [ 2048] */,
+ 0x4cdd87ff /* 00099bb0 - 0009a3af [ 2048] */,
+ 0x4d1d87ff /* 0009a3b0 - 0009abaf [ 2048] */,
+ 0x4d5d87ff /* 0009abb0 - 0009b3af [ 2048] */,
+ 0x4d9d87ff /* 0009b3b0 - 0009bbaf [ 2048] */,
+ 0x4ddd87ff /* 0009bbb0 - 0009c3af [ 2048] */,
+ 0x4e1d87ff /* 0009c3b0 - 0009cbaf [ 2048] */,
+ 0x4e5d87ff /* 0009cbb0 - 0009d3af [ 2048] */,
+ 0x4e9d87ff /* 0009d3b0 - 0009dbaf [ 2048] */,
+ 0x4edd87ff /* 0009dbb0 - 0009e3af [ 2048] */,
+ 0x4f1d87ff /* 0009e3b0 - 0009ebaf [ 2048] */,
+ 0x4f5d87ff /* 0009ebb0 - 0009f3af [ 2048] */,
+ 0x4f9d87ff /* 0009f3b0 - 0009fbaf [ 2048] */,
+ 0x4fdd87ff /* 0009fbb0 - 000a03af [ 2048] */,
+ 0x501d87ff /* 000a03b0 - 000a0baf [ 2048] */,
+ 0x505d87ff /* 000a0bb0 - 000a13af [ 2048] */,
+ 0x509d87ff /* 000a13b0 - 000a1baf [ 2048] */,
+ 0x50dd87ff /* 000a1bb0 - 000a23af [ 2048] */,
+ 0x511d87ff /* 000a23b0 - 000a2baf [ 2048] */,
+ 0x515d87ff /* 000a2bb0 - 000a33af [ 2048] */,
+ 0x519d87ff /* 000a33b0 - 000a3baf [ 2048] */,
+ 0x51dd87ff /* 000a3bb0 - 000a43af [ 2048] */,
+ 0x521d87ff /* 000a43b0 - 000a4baf [ 2048] */,
+ 0x525d87ff /* 000a4bb0 - 000a53af [ 2048] */,
+ 0x529d87ff /* 000a53b0 - 000a5baf [ 2048] */,
+ 0x52dd87ff /* 000a5bb0 - 000a63af [ 2048] */,
+ 0x531d87ff /* 000a63b0 - 000a6baf [ 2048] */,
+ 0x535d87ff /* 000a6bb0 - 000a73af [ 2048] */,
+ 0x539d87ff /* 000a73b0 - 000a7baf [ 2048] */,
+ 0x53dd87ff /* 000a7bb0 - 000a83af [ 2048] */,
+ 0x541d87ff /* 000a83b0 - 000a8baf [ 2048] */,
+ 0x545d87ff /* 000a8bb0 - 000a93af [ 2048] */,
+ 0x549d87ff /* 000a93b0 - 000a9baf [ 2048] */,
+ 0x54dd87ff /* 000a9bb0 - 000aa3af [ 2048] */,
+ 0x551d87ff /* 000aa3b0 - 000aabaf [ 2048] */,
+ 0x555d87ff /* 000aabb0 - 000ab3af [ 2048] */,
+ 0x559d87ff /* 000ab3b0 - 000abbaf [ 2048] */,
+ 0x55dd87ff /* 000abbb0 - 000ac3af [ 2048] */,
+ 0x561d87ff /* 000ac3b0 - 000acbaf [ 2048] */,
+ 0x565d87ff /* 000acbb0 - 000ad3af [ 2048] */,
+ 0x569d87ff /* 000ad3b0 - 000adbaf [ 2048] */,
+ 0x56dd87ff /* 000adbb0 - 000ae3af [ 2048] */,
+ 0x571d87ff /* 000ae3b0 - 000aebaf [ 2048] */,
+ 0x575d87ff /* 000aebb0 - 000af3af [ 2048] */,
+ 0x579d87ff /* 000af3b0 - 000afbaf [ 2048] */,
+ 0x57dd87ff /* 000afbb0 - 000b03af [ 2048] */,
+ 0x581d87ff /* 000b03b0 - 000b0baf [ 2048] */,
+ 0x585d87ff /* 000b0bb0 - 000b13af [ 2048] */,
+ 0x589d87ff /* 000b13b0 - 000b1baf [ 2048] */,
+ 0x58dd87ff /* 000b1bb0 - 000b23af [ 2048] */,
+ 0x591d87ff /* 000b23b0 - 000b2baf [ 2048] */,
+ 0x595d87ff /* 000b2bb0 - 000b33af [ 2048] */,
+ 0x599d87ff /* 000b33b0 - 000b3baf [ 2048] */,
+ 0x59dd87ff /* 000b3bb0 - 000b43af [ 2048] */,
+ 0x5a1d87ff /* 000b43b0 - 000b4baf [ 2048] */,
+ 0x5a5d87ff /* 000b4bb0 - 000b53af [ 2048] */,
+ 0x5a9d87ff /* 000b53b0 - 000b5baf [ 2048] */,
+ 0x5add87ff /* 000b5bb0 - 000b63af [ 2048] */,
+ 0x5b1d87ff /* 000b63b0 - 000b6baf [ 2048] */,
+ 0x5b5d87ff /* 000b6bb0 - 000b73af [ 2048] */,
+ 0x5b9d87ff /* 000b73b0 - 000b7baf [ 2048] */,
+ 0x5bdd87ff /* 000b7bb0 - 000b83af [ 2048] */,
+ 0x5c1d87ff /* 000b83b0 - 000b8baf [ 2048] */,
+ 0x5c5d87ff /* 000b8bb0 - 000b93af [ 2048] */,
+ 0x5c9d87ff /* 000b93b0 - 000b9baf [ 2048] */,
+ 0x5cdd87ff /* 000b9bb0 - 000ba3af [ 2048] */,
+ 0x5d1d87ff /* 000ba3b0 - 000babaf [ 2048] */,
+ 0x5d5d87ff /* 000babb0 - 000bb3af [ 2048] */,
+ 0x5d9d87ff /* 000bb3b0 - 000bbbaf [ 2048] */,
+ 0x5ddd87ff /* 000bbbb0 - 000bc3af [ 2048] */,
+ 0x5e1d87ff /* 000bc3b0 - 000bcbaf [ 2048] */,
+ 0x5e5d87ff /* 000bcbb0 - 000bd3af [ 2048] */,
+ 0x5e9d87ff /* 000bd3b0 - 000bdbaf [ 2048] */,
+ 0x5edd87ff /* 000bdbb0 - 000be3af [ 2048] */,
+ 0x5f1d87ff /* 000be3b0 - 000bebaf [ 2048] */,
+ 0x5f5d87ff /* 000bebb0 - 000bf3af [ 2048] */,
+ 0x5f9d87ff /* 000bf3b0 - 000bfbaf [ 2048] */,
+ 0x5fdd87ff /* 000bfbb0 - 000c03af [ 2048] */,
+ 0x601d87ff /* 000c03b0 - 000c0baf [ 2048] */,
+ 0x605d87ff /* 000c0bb0 - 000c13af [ 2048] */,
+ 0x609d87ff /* 000c13b0 - 000c1baf [ 2048] */,
+ 0x60dd87ff /* 000c1bb0 - 000c23af [ 2048] */,
+ 0x611d87ff /* 000c23b0 - 000c2baf [ 2048] */,
+ 0x615d87ff /* 000c2bb0 - 000c33af [ 2048] */,
+ 0x619d87ff /* 000c33b0 - 000c3baf [ 2048] */,
+ 0x61dd87ff /* 000c3bb0 - 000c43af [ 2048] */,
+ 0x621d87ff /* 000c43b0 - 000c4baf [ 2048] */,
+ 0x625d87ff /* 000c4bb0 - 000c53af [ 2048] */,
+ 0x629d87ff /* 000c53b0 - 000c5baf [ 2048] */,
+ 0x62dd87ff /* 000c5bb0 - 000c63af [ 2048] */,
+ 0x631d87ff /* 000c63b0 - 000c6baf [ 2048] */,
+ 0x635d87ff /* 000c6bb0 - 000c73af [ 2048] */,
+ 0x639d87ff /* 000c73b0 - 000c7baf [ 2048] */,
+ 0x63dd87ff /* 000c7bb0 - 000c83af [ 2048] */,
+ 0x641d87ff /* 000c83b0 - 000c8baf [ 2048] */,
+ 0x645d87ff /* 000c8bb0 - 000c93af [ 2048] */,
+ 0x649d87ff /* 000c93b0 - 000c9baf [ 2048] */,
+ 0x64dd87ff /* 000c9bb0 - 000ca3af [ 2048] */,
+ 0x651d87ff /* 000ca3b0 - 000cabaf [ 2048] */,
+ 0x655d87ff /* 000cabb0 - 000cb3af [ 2048] */,
+ 0x659d87ff /* 000cb3b0 - 000cbbaf [ 2048] */,
+ 0x65dd87ff /* 000cbbb0 - 000cc3af [ 2048] */,
+ 0x661d87ff /* 000cc3b0 - 000ccbaf [ 2048] */,
+ 0x665d87ff /* 000ccbb0 - 000cd3af [ 2048] */,
+ 0x669d87ff /* 000cd3b0 - 000cdbaf [ 2048] */,
+ 0x66dd87ff /* 000cdbb0 - 000ce3af [ 2048] */,
+ 0x671d87ff /* 000ce3b0 - 000cebaf [ 2048] */,
+ 0x675d87ff /* 000cebb0 - 000cf3af [ 2048] */,
+ 0x679d87ff /* 000cf3b0 - 000cfbaf [ 2048] */,
+ 0x67dd87ff /* 000cfbb0 - 000d03af [ 2048] */,
+ 0x681d87ff /* 000d03b0 - 000d0baf [ 2048] */,
+ 0x685d87ff /* 000d0bb0 - 000d13af [ 2048] */,
+ 0x689d87ff /* 000d13b0 - 000d1baf [ 2048] */,
+ 0x68dd87ff /* 000d1bb0 - 000d23af [ 2048] */,
+ 0x691d87ff /* 000d23b0 - 000d2baf [ 2048] */,
+ 0x695d87ff /* 000d2bb0 - 000d33af [ 2048] */,
+ 0x699d87ff /* 000d33b0 - 000d3baf [ 2048] */,
+ 0x69dd87ff /* 000d3bb0 - 000d43af [ 2048] */,
+ 0x6a1d87ff /* 000d43b0 - 000d4baf [ 2048] */,
+ 0x6a5d87ff /* 000d4bb0 - 000d53af [ 2048] */,
+ 0x6a9d87ff /* 000d53b0 - 000d5baf [ 2048] */,
+ 0x6add87ff /* 000d5bb0 - 000d63af [ 2048] */,
+ 0x6b1d87ff /* 000d63b0 - 000d6baf [ 2048] */,
+ 0x6b5d87ff /* 000d6bb0 - 000d73af [ 2048] */,
+ 0x6b9d87ff /* 000d73b0 - 000d7baf [ 2048] */,
+ 0x6bdd87ff /* 000d7bb0 - 000d83af [ 2048] */,
+ 0x6c1d87ff /* 000d83b0 - 000d8baf [ 2048] */,
+ 0x6c5d87ff /* 000d8bb0 - 000d93af [ 2048] */,
+ 0x6c9d87ff /* 000d93b0 - 000d9baf [ 2048] */,
+ 0x6cdd87ff /* 000d9bb0 - 000da3af [ 2048] */,
+ 0x6d1d87ff /* 000da3b0 - 000dabaf [ 2048] */,
+ 0x6d5d87ff /* 000dabb0 - 000db3af [ 2048] */,
+ 0x6d9d87ff /* 000db3b0 - 000dbbaf [ 2048] */,
+ 0x6ddd87ff /* 000dbbb0 - 000dc3af [ 2048] */,
+ 0x6e1d87ff /* 000dc3b0 - 000dcbaf [ 2048] */,
+ 0x6e5d87ff /* 000dcbb0 - 000dd3af [ 2048] */,
+ 0x6e9d87ff /* 000dd3b0 - 000ddbaf [ 2048] */,
+ 0x6edd87ff /* 000ddbb0 - 000de3af [ 2048] */,
+ 0x6f1d87ff /* 000de3b0 - 000debaf [ 2048] */,
+ 0x6f5d87ff /* 000debb0 - 000df3af [ 2048] */,
+ 0x6f9d87ff /* 000df3b0 - 000dfbaf [ 2048] */,
+ 0x6fdd854f /* 000dfbb0 - 000e00ff [ 1360] */};
/// At the end of the valid Unicode code points space a lot of code points are
/// either reserved or a noncharacter. Adding all these entries to the
/// lookup table would add 446 entries to the table (in Unicode 14).
/// Instead the only the start of the region is stored, every code point in
/// this region needs to be escaped.
-inline constexpr uint32_t __unallocated_region_lower_bound = 0x000323b0;
+_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __unallocated_region_lower_bound = 0x000e01f0;
/// Returns whether the code unit needs to be escaped.
///
diff --git a/libcxx/include/__format/write_escaped.h b/libcxx/include/__format/write_escaped.h
index 43a074dd8d70025..052ea98c3c3b8c5 100644
--- a/libcxx/include/__format/write_escaped.h
+++ b/libcxx/include/__format/write_escaped.h
@@ -101,15 +101,27 @@ _LIBCPP_HIDE_FROM_ABI void __write_escape_ill_formed_code_unit(basic_string<_Cha
}
template <class _CharT>
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool __is_escaped_sequence_written(basic_string<_CharT>& __str, char32_t __value) {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool
+__is_escaped_sequence_written(basic_string<_CharT>& __str, bool __last_escaped, char32_t __value) {
# ifdef _LIBCPP_HAS_NO_UNICODE
// For ASCII assume everything above 127 is printable.
if (__value > 127)
return false;
# endif
+ // [format.string.escaped]/2.2.1.2.1
+ // CE is UTF-8, UTF-16, or UTF-32 and C corresponds to a Unicode scalar
+ // value whose Unicode property General_Category has a value in the groups
+ // Separator (Z) or Other (C), as described by UAX #44 of the Unicode Standard,
if (!__escaped_output_table::__needs_escape(__value))
- return false;
+ // [format.string.escaped]/2.2.1.2.2
+ // CE is UTF-8, UTF-16, or UTF-32 and C corresponds to a Unicode scalar
+ // value with the Unicode property Grapheme_Extend=Yes as described by UAX
+ // #44 of the Unicode Standard and C is not immediately preceded in S by a
+ // character P appended to E without translation to an escape sequence,
+ if (!__last_escaped || __extended_grapheme_custer_property_boundary::__get_property(__value) !=
+ __extended_grapheme_custer_property_boundary::__property::__Extend)
+ return false;
__formatter::__write_well_formed_escaped_code_unit(__str, __value);
return true;
@@ -124,8 +136,8 @@ enum class __escape_quotation_mark { __apostrophe, __double_quote };
// [format.string.escaped]/2
template <class _CharT>
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool
-__is_escaped_sequence_written(basic_string<_CharT>& __str, char32_t __value, __escape_quotation_mark __mark) {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool __is_escaped_sequence_written(
+ basic_string<_CharT>& __str, char32_t __value, bool __last_escaped, __escape_quotation_mark __mark) {
// 2.2.1.1 - Mapped character in [tab:format.escape.sequences]
switch (__value) {
case _CharT('\t'):
@@ -167,7 +179,7 @@ __is_escaped_sequence_written(basic_string<_CharT>& __str, char32_t __value, __e
// TODO FMT determine what to do with shift sequences.
// 2.2.1.2.1 and 2.2.1.2.2 - Escape
- return __formatter::__is_escaped_sequence_written(__str, __formatter::__to_char32(__value));
+ return __formatter::__is_escaped_sequence_written(__str, __last_escaped, __formatter::__to_char32(__value));
}
template <class _CharT>
@@ -175,11 +187,15 @@ _LIBCPP_HIDE_FROM_ABI void
__escape(basic_string<_CharT>& __str, basic_string_view<_CharT> __values, __escape_quotation_mark __mark) {
__unicode::__code_point_view<_CharT> __view{__values.begin(), __values.end()};
+ // When the first code unit has the property Grapheme_Extend=Yes it needs to
+ // be escaped. This happens when the previous code unit was also escaped.
+ bool __escape = true;
while (!__view.__at_end()) {
auto __first = __view.__position();
typename __unicode::__consume_result __result = __view.__consume();
if (__result.__status == __unicode::__consume_result::__ok) {
- if (!__formatter::__is_escaped_sequence_written(__str, __result.__code_point, __mark))
+ __escape = __formatter::__is_escaped_sequence_written(__str, __result.__code_point, __escape, __mark);
+ if (!__escape)
// 2.2.1.3 - Add the character
ranges::copy(__first, __view.__position(), std::back_insert_iterator(__str));
} else {
diff --git a/libcxx/test/std/utilities/format/format.functions/escaped_output.unicode.pass.cpp b/libcxx/test/std/utilities/format/format.functions/escaped_output.unicode.pass.cpp
index bf5c0a51f944aed..96c1e2664f7a648 100644
--- a/libcxx/test/std/utilities/format/format.functions/escaped_output.unicode.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.functions/escaped_output.unicode.pass.cpp
@@ -223,7 +223,7 @@ void test_char() {
static_assert(sizeof(CharT) == 4, "add support for unexpected size");
// Unicode fitting in a 32-bit wchar_t
- constexpr wchar_t x = 0x1ffff;
+ constexpr wchar_t x = 0x1ffff;
constexpr std::uint32_t y = 0x1ffff;
static_assert(x == y);
@@ -290,7 +290,7 @@ void test_string() {
test_format(SV("[\"\ud7ff\"]"), SV("[{:?}]"), "\xed\x9f\xbf"); // U+D7FF last valid
#else
/* U+D800..D+DFFFF surrogate range */
- test_format(SV(R"(["\u{d7ff}"])"), SV("[{:?}]"), "\xed\x9f\xbf"); // U+D7FF last valid
+ test_format(SV(R"(["\u{d7ff}"])"), SV("[{:?}]"), "\xed\x9f\xbf"); // U+D7FF last valid
#endif
test_format(SV(R"(["\x{ed}\x{a0}\x{80}"])"), SV("[{:?}]"), "\xed\xa0\x80"); // U+D800
test_format(SV(R"(["\x{ed}\x{af}\x{bf}"])"), SV("[{:?}]"), "\xed\xaf\xbf"); // U+DBFF
@@ -319,7 +319,8 @@ void test_string() {
test_format(SV("[\"\u00c3(\"]"), SV("[{:?}]"), L"\xc3\x28");
}
- test_format(SV(R"(["π€·π»\u{200d}β\u{fe0f}"])"), SV("[{:?}]"), SV("π€·π»ββοΈ"));
+ // LWG-3965
+ test_format(SV(R"(["π€·π»\u{200d}βοΈ"])"), SV("[{:?}]"), SV("π€·π»ββοΈ"));
// *** Special cases ***
test_format(SV(R"("\t\n\r\\'\" ")"), SV("{:?}"), SV("\t\n\r\\'\" "));
@@ -336,6 +337,11 @@ void test_string() {
if constexpr (sizeof(CharT) == 1)
test_format(SV(R"("\x{80}")"), SV("{:?}"), SV("\x80"));
+ // *** P2713R1 examples ***
+ test_format(SV(R"(["\u{301}"])"), SV("[{:?}]"), SV("\u0301"));
+ test_format(SV(R"(["\\\u{301}"])"), SV("[{:?}]"), SV("\\\u0301"));
+ test_format(SV(R"(["eΜΜ£"])"), SV("[{:?}]"), SV("e\u0301\u0323"));
+
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
if constexpr (sizeof(CharT) > 1) {
using V = std::basic_string_view<CharT>;
@@ -373,7 +379,7 @@ void test_string() {
static_assert(sizeof(CharT) == 4, "add support for unexpected size");
// Unicode fitting in a 32-bit wchar_t
- constexpr wchar_t x = 0x1ffff;
+ constexpr wchar_t x = 0x1ffff;
constexpr std::uint32_t y = 0x1ffff;
static_assert(x == y);
@@ -406,20 +412,18 @@ void test_format_functions(TestFunction check) {
check(SV(R"(*"hellΓΆ"**)"), SV("{:*^10?}"), SV("hellΓΆ"));
check(SV(R"("hellΓΆ"***)"), SV("{:*<10?}"), SV("hellΓΆ"));
- check(SV(R"("hello\u{308}")"), SV("{:*>10?}"), SV("hello\u0308"));
- check(SV(R"(***"hello\u{308}")"), SV("{:*>17?}"), SV("hello\u0308"));
- check(SV(R"(*"hello\u{308}"**)"), SV("{:*^17?}"), SV("hello\u0308"));
- check(SV(R"("hello\u{308}"***)"), SV("{:*<17?}"), SV("hello\u0308"));
+ check(SV(R"(***"helloΜ")"), SV("{:*>10?}"), SV("hello\u0308"));
+ check(SV(R"(*"helloΜ"**)"), SV("{:*^10?}"), SV("hello\u0308"));
+ check(SV(R"("helloΜ"***)"), SV("{:*<10?}"), SV("hello\u0308"));
- check(SV(R"("hello π€·π»\u{200d}β\u{fe0f}")"), SV("{:*>10?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"(***"hello π€·π»\u{200d}β\u{fe0f}")"), SV("{:*>30?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"(*"hello π€·π»\u{200d}β\u{fe0f}"**)"), SV("{:*^30?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"("hello π€·π»\u{200d}β\u{fe0f}"***)"), SV("{:*<30?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"(***"hello π€·π»\u{200d}βοΈ")"), SV("{:*>22?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"(*"hello π€·π»\u{200d}βοΈ"**)"), SV("{:*^22?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"("hello π€·π»\u{200d}βοΈ"***)"), SV("{:*<22?}"), SV("hello π€·π»ββοΈ"));
// *** width ***
check(SV(R"("hellΓΆ" )"), SV("{:10?}"), SV("hellΓΆ"));
- check(SV(R"("hello\u{308}" )"), SV("{:17?}"), SV("hello\u0308"));
- check(SV(R"("hello π€·π»\u{200d}β\u{fe0f}" )"), SV("{:30?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"("helloΜ" )"), SV("{:10?}"), SV("hello\u0308"));
+ check(SV(R"("hello π€·π»\u{200d}βοΈ" )"), SV("{:22?}"), SV("hello π€·π»ββοΈ"));
// *** precision ***
check(SV(R"("hell)"), SV("{:.5?}"), SV("hellΓΆ"));
@@ -431,9 +435,8 @@ void test_format_functions(TestFunction check) {
check(SV(R"("hello π€·π»)"), SV("{:.9?}"), SV("hello π€·π»ββοΈ"));
check(SV(R"("hello π€·π»\)"), SV("{:.10?}"), SV("hello π€·π»ββοΈ"));
check(SV(R"("hello π€·π»\u{200d})"), SV("{:.17?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"("hello π€·π»\u{200d}β)"), SV("{:.18?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"("hello π€·π»\u{200d}β\)"), SV("{:.19?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"("hello π€·π»\u{200d}β\u{fe0f}")"), SV("{:.28?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"("hello π€·π»\u{200d}βοΈ)"), SV("{:.18?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"("hello π€·π»\u{200d}βοΈ")"), SV("{:.19?}"), SV("hello π€·π»ββοΈ"));
// *** width & precision ***
check(SV(R"("hell#########################)"), SV("{:#<30.5?}"), SV("hellΓΆ"));
@@ -445,9 +448,8 @@ void test_format_functions(TestFunction check) {
check(SV(R"("hello π€·π»#####################)"), SV("{:#<30.9?}"), SV("hello π€·π»ββοΈ"));
check(SV(R"("hello π€·π»\####################)"), SV("{:#<30.10?}"), SV("hello π€·π»ββοΈ"));
check(SV(R"("hello π€·π»\u{200d}#############)"), SV("{:#<30.17?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"("hello π€·π»\u{200d}β############)"), SV("{:#<30.18?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"("hello π€·π»\u{200d}β\###########)"), SV("{:#<30.19?}"), SV("hello π€·π»ββοΈ"));
- check(SV(R"("hello π€·π»\u{200d}β\u{fe0f}"###)"), SV("{:#<30.28?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"("hello π€·π»\u{200d}βοΈ############)"), SV("{:#<30.18?}"), SV("hello π€·π»ββοΈ"));
+ check(SV(R"("hello π€·π»\u{200d}βοΈ"###########)"), SV("{:#<30.19?}"), SV("hello π€·π»ββοΈ"));
}
template <class CharT>
diff --git a/libcxx/utils/generate_escaped_output_table.py b/libcxx/utils/generate_escaped_output_table.py
index c6bde8f2411cf6c..a11ce259096d5a4 100755
--- a/libcxx/utils/generate_escaped_output_table.py
+++ b/libcxx/utils/generate_escaped_output_table.py
@@ -39,12 +39,6 @@ class Entry:
)
-def filterCoreProperty(element: PropertyRange) -> Optional[PropertyRange]:
- if element.prop == "Grapheme_Extend":
- return element
- return None
-
-
# https://www.unicode.org/reports/tr44/#GC_Values_Table
def filterGeneralProperty(element: PropertyRange) -> Optional[PropertyRange]:
if element.prop in ["Zs", "Zl", "Zp", "Cc", "Cf", "Cs", "Co", "Cn"]:
@@ -94,10 +88,9 @@ def compactPropertyRanges(input: list[PropertyRange]) -> list[PropertyRange]:
/// The entries of the characters to escape in format's debug string.
///
/// Contains the entries for [format.string.escaped]/2.2.1.2.1
-/// CE is a Unicode encoding and C corresponds to either a UCS scalar value
-/// whose Unicode property General_Category has a value in the groups
-/// Separator (Z) or Other (C) or to a UCS scalar value which has the Unicode
-/// property Grapheme_Extend=Yes, as described by table 12 of UAX #44
+/// CE is a Unicode encoding and C corresponds to a UCS scalar value whose
+/// Unicode property General_Category has a value in the groups Separator (Z)
+/// or Other (C), as described by table 12 of UAX #44
///
/// Separator (Z) consists of General_Category
/// - Space_Separator,
@@ -112,7 +105,6 @@ def compactPropertyRanges(input: list[PropertyRange]) -> list[PropertyRange]:
/// - Unassigned.
///
/// The data is generated from
-/// - https://www.unicode.org/Public/UCD/latest/ucd/DerivedCoreProperties.txt
/// - https://www.unicode.org/Public/UCD/latest/ucd/extracted/DerivedGeneralCategory.txt
///
/// The table is similar to the table
@@ -132,7 +124,7 @@ def compactPropertyRanges(input: list[PropertyRange]) -> list[PropertyRange]:
/// lookup table would add 446 entries to the table (in Unicode 14).
/// Instead the only the start of the region is stored, every code point in
/// this region needs to be escaped.
-inline constexpr uint32_t __unallocated_region_lower_bound = 0x{unallocated:08x};
+_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __unallocated_region_lower_bound = 0x{unallocated:08x};
/// Returns whether the code unit needs to be escaped.
///
@@ -262,7 +254,7 @@ def property_ranges_to_table(ranges: list[PropertyRange]) -> list[Entry]:
return result
-cpp_entrytemplate = " 0x{:08x}"
+cpp_entrytemplate = " 0x{:08x} /* {:08x} - {:08x} [{:>5}] */"
def generate_cpp_data(ranges: list[PropertyRange], unallocated: int) -> str:
@@ -272,7 +264,15 @@ def generate_cpp_data(ranges: list[PropertyRange], unallocated: int) -> str:
DATA_ARRAY_TEMPLATE.format(
size=len(table),
entries=",\n".join(
- [cpp_entrytemplate.format(x.lower << 11 | x.offset) for x in table]
+ [
+ cpp_entrytemplate.format(
+ x.lower << 11 | x.offset,
+ x.lower,
+ x.lower + x.offset,
+ x.offset + 1,
+ )
+ for x in table
+ ]
),
unallocated=unallocated,
)
@@ -291,12 +291,6 @@ def generate_data_tables() -> str:
/ "unicode"
/ "DerivedGeneralCategory.txt"
)
- derived_core_catagory_path = (
- Path(__file__).absolute().parent
- / "data"
- / "unicode"
- / "DerivedCoreProperties.txt"
- )
properties = list()
with derived_general_catagory_path.open(encoding="utf-8") as f:
@@ -308,15 +302,6 @@ def generate_data_tables() -> str:
)
)
)
- with derived_core_catagory_path.open(encoding="utf-8") as f:
- properties.extend(
- list(
- filter(
- filterCoreProperty,
- [x for line in f if (x := parsePropertyLine(line))],
- )
- )
- )
data = compactPropertyRanges(sorted(properties, key=lambda x: x.lower))
@@ -328,8 +313,12 @@ def generate_data_tables() -> str:
#
# When this region becomes substantially smaller we need to investigate
# this design.
+ #
+ # Due to P2713R1 Escaping improvements in std::format the range
+ # E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+ # is no longer part of these entries. This causes an increase in the size
+ # of the table.
assert data[-1].upper == 0x10FFFF
- assert data[-1].upper - data[-1].lower > 900000
return "\n".join([generate_cpp_data(data[:-1], data[-1].lower)])
More information about the libcxx-commits
mailing list