summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorfukachan <fukachan>2002-05-28 15:07:57 +0000
committerfukachan <fukachan>2002-05-28 15:07:57 +0000
commitffc7d84e72347531208f77b4cd063f532e0027b7 (patch)
tree8427b9dcc58198ff6cbbcd0c213b735839f28aac /Documentation
parent95e9c12aecc83f66f468500d7ea6f079ad502851 (diff)
downloadfml8-ffc7d84e72347531208f77b4cd063f532e0027b7.tar.gz
fml8-ffc7d84e72347531208f77b4cd063f532e0027b7.tar.bz2
fml8-ffc7d84e72347531208f77b4cd063f532e0027b7.zip
Preparation of Internationalized Strings
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/en/I-D/draft-hoffman-stringprep-03.txt3570
1 files changed, 3570 insertions, 0 deletions
diff --git a/Documentation/en/I-D/draft-hoffman-stringprep-03.txt b/Documentation/en/I-D/draft-hoffman-stringprep-03.txt
new file mode 100644
index 00000000..dff01f3e
--- /dev/null
+++ b/Documentation/en/I-D/draft-hoffman-stringprep-03.txt
@@ -0,0 +1,3570 @@
+Internet Draft Paul Hoffman
+draft-hoffman-stringprep-03.txt IMC & VPNC
+May 17, 2002 Marc Blanchet
+Expires in six months ViaGenie
+
+ Preparation of Internationalized Strings ("stringprep")
+
+Status of this memo
+
+This document is an Internet-Draft and is in full conformance with all
+provisions of Section 10 of RFC2026.
+
+Internet-Drafts are working documents of the Internet Engineering Task
+Force (IETF), its areas, and its working groups. Note that other groups
+may also distribute working documents as Internet-Drafts.
+
+Internet-Drafts are draft documents valid for a maximum of six months
+and may be updated, replaced, or obsoleted by other documents at any
+time. It is inappropriate to use Internet-Drafts as reference material
+or to cite them other than as "work in progress."
+
+To view the list Internet-Draft Shadow Directories, see
+http://www.ietf.org/shadow.html.
+
+
+Abstract
+
+This document describes a framework for preparing text strings in order
+to increase the likelihood that string input and string comparison work
+in ways that make sense for typical users throughout the world. The
+stringprep protocol is useful for protocol identifier values, company
+and personal names, internationalized domain names, and other text
+strings.
+
+This document does not specify how protocols should prepare text
+strings. Protocols must create profiles of stringprep in order to fully
+specify the processing options.
+
+Table of contents
+
+1. Introduction
+ 1.1 Terminology
+ 1.2 Using stringprep in protocols
+2. Preparation Overview
+3. Mapping
+ 3.1 Commonly mapped to nothing
+ 3.2 Case folding
+4. Normalization
+5. Prohibited Output
+ 5.1 Space characters
+ 5.2 Control characters
+ 5.3 Private use and replacement characters
+ 5.4 Non-character code points
+ 5.5 Surrogate codes
+ 5.6 Inappropriate for plain text
+ 5.7 Inappropriate for canonical representation
+ 5.8 Change display properties
+ 5.9 Tagging characters
+6. Unassigned Code Points in Stringprep Profiles
+ 6.1 Categories of code points
+ 6.2 Reasons for difference between stored strings and queries
+ 6.3 Versions of applications and stored strings
+7. Security Considerations
+8. References
+A. Unicode repertoires
+ A.1 Unassigned code points in Unicode 3.1
+B. Mapping Tables
+ B.1 Commonly mapped to nothing
+ B.2 Mapping for lowercase used with NFKC
+ B.3 Mapping for lowercase used with no normalization
+C. Prohibition tables
+ C.1 Space characters
+ C.2 Control characters
+ C.3 Private use and replacement characters
+ C.4 Non-character code points
+ C.5 Surrogate codes
+ C.6 Inappropriate for plain text
+ C.7 Inappropriate for canonical representation
+ C.8 Change display properties
+ C.9 Tagging characters
+D. Acknowledgements
+E. IANA Considerations
+F. Author Contact Information
+
+
+1. Introduction
+
+Application programs can display text in many different ways. Similarly,
+a user can enter text into an application program in a myriad of
+fashions. Internationalized text (that is, text that is not restricted
+to the narrow set of US-ASCII characters) has many input and display
+behaviors that make it difficult to compare text in a consistent
+fashion.
+
+This document specifies a framework of text processing rules. Other
+protocols can create profiles of these rules; these profiles will
+allow users to enter internationalized text strings in applications and
+have the highest chance of getting the content of the strings correct.
+In this case, "correct" means that if two different people enter what
+they think is the same string into two different input mechanisms, the
+strings should match on a character-by-character basis.
+
+In addition to helping string matching, profiles of stringprep can also
+exclude characters that should not normally appear in text that is used
+in the protocol. The profile can prevent such characters by changing the
+characters to be excluded to other characters, by removing those
+characters, or by causing an error if the characters would appear in the
+output. For example, because the backspace character can cause
+unpredictable display results, a profile can specify that a string that
+would have a backspace character in it would cause an error.
+
+A profile of stringprep converts a single string of input characters to
+a string of output characters, or returns an error if the output string
+would contain a prohibited character. Stringprep profiles cannot both
+emit a string and return an error.
+
+Stringprep profiles cannot account for all of the variations that might
+occur or that a user might expect. In particular, a profile will not be
+able to account for choice of spellings in all languages for all scripts
+because the number of alternative spellings of words and phrases is
+immense. Users would probably expect all spelling equivalents to be made
+equivalent, or none of them to be. Examples of spelling equivalents
+include "theater" vs. "theatre", and "hemoglobin" vs.
+"h<U+00E6>moglobin" in American vs. British English. Other examples are
+simplified Chinese spellings of names (for example,
+"<U+7EDF><U+4E00><U+7801>") vs. the equivalent traditional Chinese
+spelling (for example, "<U+7D71><U+4E00><U+78BC>"). Language-specific
+equivalences such as "Aepfel" vs. "<U+00C4>pfel", which are sometimes
+considered equivalent in German, may not be considered equivalent in
+other languages.
+
+1.1 Terminology
+
+The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+document are to be interpreted as described in RFC 2119.
+
+Note: A glossary of terms used in Unicode and ISO/IEC 10646 can be found
+in [Glossary]. Information on the 10646/Unicode character encoding model
+can be found in [CharModel].
+
+Character names in this document use the notation for code points and
+names from the Unicode Standard [Unicode3.1] and ISO/IEC 10646
+[ISO10646]. For example, the letter "a" may be represented as either
+"U+0061" or "LATIN SMALL LETTER A". In the lists of mappings and the
+prohibited characters, the "U+" is left off to make the lists easier to
+read. The comments for character ranges are shown in square brackets
+(such as "[CONTROL CHARACTERS]") and do not come from the standards.
+
+1.2 Using stringprep in protocols
+
+The stringprep protocol does not stand on its own; it has to be used by
+other protocols at precisely-defined places in those other protocols.
+For example, a protocol that has names that come from the entire ISO/IEC
+10646 [ISO10646] character repertoire might specify that only names that
+have been processed with a particular profile of stringprep are legal.
+Another example would be a protocol that does string comparison as a
+step in the protocol; that protocol might specify that such comparison
+is done only after processing the strings with a specific profile of
+stringprep.
+
+When developers wish to allow users as wide of a range of characters as
+possible in input text strings, they should, where possible, cause
+stringprep to convert characters from the input string to a canonical
+form instead of prohibiting them.
+
+Although it would be easy to use the stringprep process to "correct"
+perceived mis-features or bugs in the current character standards,
+stringprep profiles SHOULD NOT do so.
+
+A profile of stringprep can create tables different from those in the
+appendixes of this document, but it will be an exception when they do.
+The intention of stringprep is to define the tables and have the
+profiles of stringprep select among those defined tables.
+
+A profile of stringprep MUST include all of the following:
+
+- The intended applicability of the profile
+
+- The character repertoire that is the input and output to stringprep
+
+- The mapping tables from this document used (as described in Section 3)
+
+- Any additional mapping tables specific to the profile
+
+- The Unicode normalization used, if any (as described in Section 4)
+
+- The tables from this document of characters that are prohibited as
+output (as described in Section 5)
+
+- Any additional characters that are prohibited as output specific to
+the profile
+
+Each profile MUST state the character repertoire on which the profile
+will operate. Appendix A lists the Unicode repertoires that can be
+selected. No repertoire is ever complete, and it is expected that
+characters will be added to the Unicode repertoire for the foreseeable
+future. Section 6 of this document describes how to handle characters
+that are assigned in later versions of the Unicode repertories.
+Subsections of Appendix A also list unassigned code points for each
+repertoire.
+
+This profile lists the unassigned code points in the range 0 to 10FFFF
+for Unicode 3.1 in Appendix A. The list in Appendix A MUST be used by
+implementations of this specification. If there are any discrepancies
+between the list in Appendix A and the Unicode 3.1 specification, the
+list in Appendix A always takes precedence.
+
+Each profile of stringprep MUST be registered with IANA. The
+registration procedure is described in the IANA Considerations appendix;
+basically, the IESG must review each profile of stringprep. Protocol
+developers are strongly encouraged to look through the IANA profile
+registry when creating new profiles for stringprep, and to re-use logic
+from earlier profiles where possible in new profiles. In some cases, an
+existing profile can be reused by a different protocol.
+
+
+2. Preparation Overview
+
+The steps for preparing strings are:
+
+1) Map -- For each character in the input, check if it has a mapping
+and, if so, replace it with its mapping. This is described in Section 3.
+
+2) Normalize -- Possibly normalize the result of step 1 using Unicode
+normalization. This is described in Section 4.
+
+3) Look for prohibited output -- Check for any characters that are not
+allowed in the output. If any are found, return an error. This is
+described in Section 5.
+
+The above steps MUST be performed in the order given to comply with this
+specification.
+
+The mappings described in Section 3, and the optional Unicode
+normalization described in Section 4, can be one-to-none, one-to-one, or
+one-to-many. That is, some characters might be eliminated or replaced by
+more than one character, and the output of this step might be shorter or
+longer than the input. Because of this, the system using stringprep MUST
+be prepared to receive a longer or shorter string than the one input in
+the stringprep algorithm.
+
+
+3. Mapping
+
+Each character in the input stream MUST be checked against a mapping
+table. The mapping table SHOULD come from this document, although the
+mapping table MAY be added to or altered by the profile. The mapping
+tables are subsections of Appendix B.
+
+The lists in Appendix B MUST be used by implementations of this
+specification. If there are any discrepancies between the lists in
+Appendix B and subsections below, the lists in Appendix B always takes
+precedence.
+
+For any individual character, the mapping table MAY specify that a
+character be mapped to nothing, or mapped to one other character, or
+mapped to a string of other characters.
+
+Mapped characters are not re-scanned during the mapping step. That is,
+if character A at position X is mapped to character B, character B which
+is now at position X is not checked against the mapping table.
+
+3.1 Commonly mapped to nothing
+
+The following characters are simply deleted from the input (that is,
+they are mapped to nothing) because their presence or absence
+in protocol identifiers should not
+make two strings different. They are listed in Table B.1.
+
+Some characters are only useful in line-based text, and are otherwise
+invisible and ignored.
+
+00AD; SOFT HYPHEN
+1806; MONGOLIAN TODO SOFT HYPHEN
+200B; ZERO WIDTH SPACE
+FEFF; ZERO WIDTH NO-BREAK SPACE
+
+Variation selectors and cursive connectors select different glyphs, but
+do not bear semantics.
+
+180B; MONGOLIAN FREE VARIATION SELECTOR ONE
+180C; MONGOLIAN FREE VARIATION SELECTOR TWO
+180D; MONGOLIAN FREE VARIATION SELECTOR THREE
+200C; ZERO WIDTH NON-JOINER
+200D; ZERO WIDTH JOINER
+
+3.2 Case folding
+
+If a profile is going to map characters for case-insensitive comparison,
+that profile SHOULD map using either Appendix B.2 or Appendix B.3.
+Appendix B.2 is for profiles that also use Unicode normalization form
+KC, while Appendix B.3 is for profiles that do not use Unicode
+normalization. These tables map from uppercase to lowercase character.
+Note that this could have been "change all lowercase characters into
+uppercase characters". However, the upper-to-lower folding was chosen
+because there is a tradition of using lowercase in current Internet
+applications and protocols.
+
+If a profile creates its own mapping tables for case folding, they
+SHOULD based on [UTR21], and SHOULD map from uppercase characters to
+lowercase. The "CaseFolding.txt" file from the Unicode database SHOULD
+be used to prepare the mapping table. The profile SHOULD do full case
+mapping (that is, using statuses C, F, and I).
+
+If the profile is using Unicode normalization form KC (as described in
+Section 4 of this document), it is important to note that there are some
+characters that do not have mappings in [UTR21] but still need
+processing. These characters include a few Greek characters and many
+symbols that contain Latin characters. The list of characters to add to
+the mapping table can determined by the following algorithm:
+
+b = NormalizeWithKC(Fold(a));
+c = NormalizeWithKC(Fold(b));
+if c is not the same as b, add a mapping for "a to c".
+
+Because NormalizeWithKC(Fold(c)) always equals c, the table is stable
+from that point on.
+
+Appendix B.3 is derived from the CaseFolding-3.txt file associated with
+Unicode 3.1; Appendix B.2 is based on Appendix B.3 with the additional
+characters added from the algorithm above.
+
+Authors of profiles of this document need to consider the effects of
+changing the mapping of any currently-assigned character when updating
+their profiles. Adding a new mapping for a currently-assigned character,
+or changing an existing mapping, could change the behavior that users
+see in both systems that have been updated and systems that have not
+been updated.
+
+4. Normalization
+
+The output of the mapping step is optionally normalized using one of the
+Unicode normalization forms, as described in [UAX15]. A profile can
+specify one of two options for Unicode normalization:
+
+- no normalization
+
+- Unicode normalization with form KC
+
+A profile MAY choose to do no normalization. However, such a profile can
+easily yield results that will be surprising to typical users, depending
+on the input mechanism they use. For example, some input mechanisms
+enter compatibility characters that look exactly like the underlying
+characters, but have different code points. Another example of where
+Unicode normalization helps create predictable results is with
+characters that have multiple combining diacritics: normalization orders
+those diacritics in a predictable fashion.
+
+On the other hand, Unicode normalization requires fairly large tables
+and somewhat complicated character reordering logic. The size and
+complexity should not be considered daunting except in the most
+restricted of environments, and needs to be weighed against the problems
+of user surprise from comparing unnormalized strings.
+Note that the tables used for normalization are not given in this
+document, but instead must be derived from the Unicode database, as
+described in [UAX15].
+
+There is a third form of normalization, Unicode normalization with form
+C. If a profile is going to use a Unicode normalization, it MUST use
+Unicode normalization form KC. Form KC maps many "compatibility
+characters" to their equivalents. Some user interface systems make it
+possible to enter compatibility characters instead of the base
+equivalents. Thus, using form KC instead of form C will cause more
+strings that users would expect to match to actually match.
+
+A profile that specifies Unicode normalization MUST use the
+normalization in [UAX15] that is associated with the version of the
+Unicode character set specified for the protocol.
+
+The composition process described in [UAX15] requires a fixed
+composition version of Unicode to ensure that strings normalized under
+one version of Unicode remain normalized under all future versions of
+Unicode.
+
+The IETF is relying on Unicode not to change the normalization of
+currently-assigned characters in future versions of normalization. If a
+future version of the normalization tables changes the normalized value
+of an existing character, authors of profiles of this document have to
+look at the changes very carefully before they update their
+normalization tables. Such a change could change the behavior that users
+see in both systems that have been updated and systems that have not
+been updated.
+
+5. Prohibited Output
+
+Before the text can be emitted, it MUST be checked for prohibited code
+points. There is a variety of prohibited code points, as described in
+this section. A profile of this document MAY use all or some of the
+tables in Appendix C.
+
+The stringprep process never emits both an error and a string. If an
+error is detected during the checking for prohibited code points, only
+an error is returned.
+
+Note that the subsections below describe how the tables in Appendix C
+were formed. They are here for people who want to understand more, but
+they should be ignored by implementors. Implementations that use tables
+MUST map based on the tables themselves, not based on the descriptions
+in this section of how the tables were created.
+
+The lists in Appendix C MUST be used by implementations of this
+specification. If there are any discrepancies between the lists in
+Appendix C and subsections below, the lists in Appendix C always takes
+precedence.
+
+Some code points listed in one section would also appear in other
+sections.
+
+It is important to note that a profile of this document MAY prohibit
+additional characters. For example, a protocol might treat an ASCII
+character as special and therefore not allow it in names. Specifically,
+the tables in Appendix C do not contain any ASCII characters, so it is
+very likely that profiles will either add those characters to the tables
+as they are used in the profile, or that the protocols themselves will
+prohibit the characters.
+
+Each subsection of this section has a matching subsection in Appendix
+C. For example, the characters listed in section 5.1 are listed in
+Appendix C.1.
+
+5.1 Space characters
+
+Space characters can make accurate visual transcription of names nearly
+impossible and could lead to user entry errors in many ways. Note that
+the ASCII space character (U+0020) is not included in the list below.
+
+00A0; NO-BREAK SPACE
+1680; OGHAM SPACE MARK
+2000; EN QUAD
+2001; EM QUAD
+2002; EN SPACE
+2003; EM SPACE
+2004; THREE-PER-EM SPACE
+2005; FOUR-PER-EM SPACE
+2006; SIX-PER-EM SPACE
+2007; FIGURE SPACE
+2008; PUNCTUATION SPACE
+2009; THIN SPACE
+200A; HAIR SPACE
+202F; NARROW NO-BREAK SPACE
+3000; IDEOGRAPHIC SPACE
+
+5.2 Control characters
+
+Control characters (or characters with control function) cannot be seen
+and can cause unpredictable results when displayed. Note that additional
+control characters (U+0000 through U+001F, and U+007F) are not listed
+below.
+
+0080-009F; [CONTROL CHARACTERS]
+070F; SYRIAC ABBREVIATION MARK
+180E; MONGOLIAN VOWEL SEPARATOR
+2028; LINE SEPARATOR
+2029; PARAGRAPH SEPARATOR
+206A-206F; [CONTROL CHARACTERS]
+FFF9-FFFC; [CONTROL CHARACTERS]
+1D173-1D17A; [MUSICAL CONTROL CHARACTERS]
+
+5.3 Private use and replacement characters
+
+Because private-use characters do not have defined meanings, they are
+likely to be prohibited. The private-use characters are:
+
+E000-F8FF; [PRIVATE USE, PLANE 0]
+F0000-FFFFD; [PRIVATE USE, PLANE 15]
+100000-10FFFD; [PRIVATE USE, PLANE 16]
+
+Although the replacement character (U+FFFD) might be used when a name is
+displayed, it doesn't make sense for it to be part of the name itself.
+It is often displayed by renderers to indicate "there would be
+some character here, but it cannot be rendered". For example, on a
+computer with no Asian fonts, a name with three ideographs might be
+rendered with three replacement characters.
+
+
+FFFD; REPLACEMENT CHARACTER
+
+5.4 Non-character code points
+
+Non-character code points are code points that have been allocated in
+ISO/IEC 10646 but are not characters. Because they are already assigned,
+they are guaranteed not to later change into characters.
+
+FDD0-FDEF; [NONCHARACTER CODE POINTS]
+FFFE-FFFF; [NONCHARACTER CODE POINTS]
+1FFFE-1FFFF; [NONCHARACTER CODE POINTS]
+2FFFE-2FFFF; [NONCHARACTER CODE POINTS]
+3FFFE-3FFFF; [NONCHARACTER CODE POINTS]
+4FFFE-4FFFF; [NONCHARACTER CODE POINTS]
+5FFFE-5FFFF; [NONCHARACTER CODE POINTS]
+6FFFE-6FFFF; [NONCHARACTER CODE POINTS]
+7FFFE-7FFFF; [NONCHARACTER CODE POINTS]
+8FFFE-8FFFF; [NONCHARACTER CODE POINTS]
+9FFFE-9FFFF; [NONCHARACTER CODE POINTS]
+AFFFE-AFFFF; [NONCHARACTER CODE POINTS]
+BFFFE-BFFFF; [NONCHARACTER CODE POINTS]
+CFFFE-CFFFF; [NONCHARACTER CODE POINTS]
+DFFFE-DFFFF; [NONCHARACTER CODE POINTS]
+EFFFE-EFFFF; [NONCHARACTER CODE POINTS]
+FFFFE-FFFFF; [NONCHARACTER CODE POINTS]
+10FFFE-10FFFF; [NONCHARACTER CODE POINTS]
+
+The non-character code points are listed in the PropList.txt file from the
+Unicode database.
+
+5.5 Surrogate codes
+
+The following code points are permanently reserved for use as surrogate
+code values in the UTF-16 encoding, will never be assigned to
+characters in the Unicode repertoire, and are therefore prohibited:
+
+D800-DFFF; [SURROGATE CODES]
+
+5.6 Inappropriate for plain text
+
+The following characters do not appear in regular text.
+
+FFF9; INTERLINEAR ANNOTATION ANCHOR
+FFFA; INTERLINEAR ANNOTATION SEPARATOR
+FFFB; INTERLINEAR ANNOTATION TERMINATOR
+FFFC; OBJECT REPLACEMENT CHARACTER
+
+5.7 Inappropriate for canonical representation
+
+The ideographic description characters allow different sequences of
+characters to be rendered the same way, which makes them inappropriate
+for names that have to have a single canonical representation.
+
+2FF0-2FFB; [IDEOGRAPHIC DESCRIPTION CHARACTERS]
+
+5.8 Change display properties
+
+The following characters, some of which are deprecated in Unicode,
+can cause changes in display or the order in which characters appear
+when rendered.
+
+200E; LEFT-TO-RIGHT MARK
+200F; RIGHT-TO-LEFT MARK
+202A; LEFT-TO-RIGHT EMBEDDING
+202B; RIGHT-TO-LEFT EMBEDDING
+202C; POP DIRECTIONAL FORMATTING
+202D; LEFT-TO-RIGHT OVERRIDE
+202E; RIGHT-TO-LEFT OVERRIDE
+206A; INHIBIT SYMMETRIC SWAPPING
+206B; ACTIVATE SYMMETRIC SWAPPING
+206C; INHIBIT ARABIC FORM SHAPING
+206D; ACTIVATE ARABIC FORM SHAPING
+206E; NATIONAL DIGIT SHAPES
+206F; NOMINAL DIGIT SHAPES
+
+5.9 Tagging characters
+
+The following characters are used for tagging text and are invisible.
+
+E0001; LANGUAGE TAG
+E0020-E007F; [TAGGING CHARACTERS]
+
+
+6. Unassigned Code Points in Stringprep Profiles
+
+This section describes two different types of strings in typical
+protocols where internationalized strings are used: "stored strings" and
+"queries". Of course, different Internet protocols use strings very
+differently, so these terms cannot be used exactly in every protocol
+that needs to use stringprep. In general, "stored strings" are strings
+that are used in protocol identifiers and named entities, such as names
+in digital certificates and DNS domain name parts.
+"Queries" are strings that are used to match against strings that are
+stored identifiers, such as user-entered names for digital certificate
+authorities and DNS lookups.
+
+All code points not assigned in the character repertoire named in a
+stringprep profile are called "unassigned code points". Stored strings
+using the profile MUST NOT contain any unassigned code points. Queries
+for matching strings MAY contain unassigned code points. Note that this
+is the only part of this document where the requirements for queries
+differs from the requirements for stored strings.
+
+Using two different policies for where unassigned code points can appear
+removes the need for versioning in protocols that use stringprep
+profiles. This is very useful since it makes the overall processing
+simpler and does not impose a "protocol" to handle versioning. It is
+expected that the ISO/IEC 10646 and Unicode repertoires will be updated
+fairly frequently; at the time that this document is being written, it
+has happened approximately once a year. Each time a new version of a
+repertoire appears, a new version of a profile MAY be created. Some end
+users will want to use the new code points as soon as they are defined.
+
+The list of unassigned code points MUST be given in a profile, and that
+list MUST be used by implementations of the profile.
+
+The goal of the requirements in this section is to prevent comparisons
+between two strings that were both permitted to contain unassigned code
+points. When two strings X and Y are compared and string X was prepared
+in a way that permits unassigned code points, a negative result to the
+comparison is not definitive; it's possible that the strings don't match
+even though they would match if a more recent version of the profile
+were used for Y. However, if both X and Y were prepared in a way that
+permits unassigned code points, something worse can happen: even a
+positive result for the comparison is not definitive. It is possible
+that the strings do match even though they would not match if a more
+recent version of the profile were used (one that prohibits a code point
+appearing in both X and Y).
+
+Due to the way that versioning is handled in this section, stored
+strings that are embedded in structures that cannot be changed (such as
+the signed parts of digital certificates) MUST NOT contain any
+unassigned code points.
+
+6.1 Categories of code points
+
+Each code point in a repertoire named by a profile of stringprep can be
+categorized by how it acts in the process described in earlier sections
+of this document:
+
+AO Code points that can be in the output
+
+MN Code points that cannot be in the output because they never
+ appear as output from mapping or normalization
+
+D Code points that cannot be in the output because they are
+ disallowed in the prohibition step
+
+U Unassigned code points
+
+A subsequent version of a profile that references a newer version of a
+repertoire with new code points will inherently have some code points
+move from category U to either D, MN, or AO. For backwards
+compatibility, a subsequent version of a profile MUST NOT move code
+points from any other category. That is, current AO, MN, or D code
+points MUST NOT ever change to a different category.
+
+Stored strings MUST NOT contain any code points outside of
+AO for the latest version of a profile. That is, they are forbidden to
+contain code points from the MN, D, or U categories.
+
+Applications creating queries MUST treat U code points as if they were
+AO when preparing the query to be entered in the process described by a
+profile of stringprep. Those applications MAY optionally have a
+preprocessor that provide stricter checks: treating unassigned code
+points in the input as errors, or warning the user about the fact that
+the code point is unassigned in the version of a profile that the
+software is based on; such a choice is a local matter for the software.
+
+6.2 Reasons for difference between stored strings and queries
+
+Different software using different versions of a stringprep profile need
+to interoperate with maximal compatibility. The scheme described in this
+section (stored strings MUST NOT contain unassigned code points,
+queries MAY include unassigned code points) allows that compatibility
+without introducing any known security or interoperability issues.
+
+The list below shows what happens if a query contains a code point
+from category U that is allowed in a newer version of a profile. The
+query either matches the string that was intended, or matches no
+string at all. In this list, the query comes from an application using
+version "oldVersion" of a profile, the stored string was created using
+version "newVersion" of the same profile, and the code point X was in
+category U in oldVersion, and has changed category to AO, MN, or D.
+There are 3 possible scenarios:
+
+1. X is assigned to AO -- In newVersion, X is in category AO. Because
+the application passed X through, it gets back a positive match with the
+stored string. There is one exceptional case, where X is a combining
+mark.
+
+The order of combining marks is normalized, so if another combining mark
+Y has a lower combining class than X then XY will be put in the
+canonical order YX. (Unassigned code points are never reordered, so this
+doesn't happen in oldVersion). If the query contains YX, the query
+will get positive match with the stored string. However, no string can be
+stored with XY, so a query with XY will get a negative
+answer to the test for matching.
+
+2. X is assigned to MN -- In newVersion, X is normalized to code point
+"nX" and therefore X is now put in category MN. This cannot exist in any
+stored string, so any query containing X will get a negative
+answer to the test for matching. Note, however, if the query had
+contained the letter nX, it would have positively matched.
+
+3. X is assigned to D -- In newVersion, X is in category D. This cannot
+exist in any stored string, so any query containing X will
+get a negative answer to the test for matching.
+
+In none of the cases does the query get data for a stored string other
+than the one it actually tried to match against.
+
+The processing in this document is always stable. If a string S is the
+result of processing on newVersion, then it will remain the same when
+processed on oldVersion.
+
+6.3 Versions of applications and stored strings
+
+Another way to see that this versioning system works is to compare what
+happens when an application uses a newer or older version of this
+document.
+
+Newer query application -- Suppose that a querying application is
+using version newVersion and the stored string was created using version
+oldVersion. This case is simple: there will be no characters in the
+stored string that cannot be queried by the application because the
+new profile uses a superset of the code points used for making the
+stored string.
+
+Newer stored string -- Suppose that an querying application is using
+oldVersion and the stored string was created using a profile that uses
+newVersion. Because the querying application passed through any
+unassigned code points, the user can query on stored strings that use
+code points in newVersion. No stored strings can have code points that
+are unassigned in newVersion, since that is illegal. In this case, the
+querying application has to enter the unassigned code points in the
+proper order, and has to use unassigned code points that would make it
+through both the mapping and the normalization steps.
+
+
+7. References
+
+7.1 Normative references
+
+[UAX15] Mark Davis and Martin Duerst. Unicode Standard Annex #15:
+Unicode Normalization Forms, Version 3.1.0.
+<http://www.unicode.org/unicode/reports/tr15/tr15-21.html>.
+
+7.2 Informative references
+
+[CharModel] Unicode Technical Report;17, Character Encoding Model.
+<http://www.unicode.org/unicode/reports/tr17/>.
+
+[Glossary] Unicode Glossary, <http://www.unicode.org/glossary/>.
+
+[RFC2119] Scott Bradner, "Key words for use in RFCs to Indicate
+Requirement Levels", March 1997, RFC 2119.
+
+[RFC2434] Thomas Narten and Harald Alvestrand, "Guidelines for IANA
+Considerations", October 1998, RFC 2434.
+
+[Unicode3.1] The Unicode Standard, Version 3.1.0: The Unicode
+Consortium. The Unicode Standard, Version 3.0. Reading, MA,
+Addison-Wesley Developers Press, 2000. ISBN 0-201-61633-5, as amended
+by: Unicode Standard Annex #27: Unicode 3.1
+<http://www.unicode.org/unicode/reports/tr27/tr27-4.html>.
+
+[UTR21] Mark Davis. Case Mappings. Unicode Technical Report 21.
+<http://www.unicode.org/unicode/reports/tr21/>.
+
+
+8. Security Considerations
+
+The Unicode and ISO/IEC 10646 repertoires have many characters that look
+similar. In many cases, users of security protocols might do visual
+matching, such as when comparing the names of trusted third parties.
+Because it is impossible to map similar-looking characters without a
+great deal of context such as knowing the fonts used,
+stringprep does nothing to map similar-looking characters together nor
+to prohibit some characters because they look like others.
+
+
+9. IANA Considerations
+
+Stringprep profiles MUST have IETF consensus as described in [RFC 2434].
+Each profile MUST be reviewed by the IESG before it is registered. The
+IESG MAY change a profile before registration.
+
+IANA will start a registry of stringprep profiles. The registry will be
+a single text file that lists the known profiles. Each entry in the
+registry will have three fields:
+
+- Profile name
+
+- RFC in which the profile is defined
+
+- Indicator whether or not this is the most current version of the
+profile
+
+Each version of a profile will remain listed in the registry forever.
+That is, if a new version of a profile supersedes an earlier version,
+both versions will continue to be listed in the registry, but the
+current version indicator will be turned off for the earlier version and
+turned on for the newer version.
+
+
+10. Acknowledgements
+
+Many people from the IETF IDN Working Group and the Unicode Technical
+Committee contributed ideas that went into the first draft of this
+document. Mark Davis and Patrik Faltstrom were particularly helpful in
+some of the ideas, such as the versioning description.
+
+The IDN namprep design team made many useful changes to the first
+draft. That team and its advisors include:
+
+Asmus Freytag
+Cathy Wissink
+Francois Yergeau
+James Seng
+Marc Blanchet
+Mark Davis
+Martin Duerst
+Patrik Faltstrom
+Paul Hoffman
+
+Additional significant improvements were proposed by:
+
+Jonathan Rosenne
+Kent Karlsson
+Scott Hollenbeck
+Dave Crocker
+Erik Nordmark
+
+
+11. Author Contact Information
+
+Paul Hoffman
+Internet Mail Consortium and VPN Consortium
+127 Segre Place
+Santa Cruz, CA 95060 USA
+paul.hoffman@imc.org and paul.hoffman@vpnc.org
+
+Marc Blanchet
+Viagenie inc.
+2875 boul. Laurier, bur. 300
+Ste-Foy, Quebec, Canada, G1V 2M2
+Marc.Blanchet@viagenie.qc.ca
+
+
+A. Unicode repertoires
+
+The following is the only repertoire covered in this document:
+
+Unicode 3.1, as defined in [Unicode3.1].
+
+A.1 Unassigned code points in Unicode 3.1
+
+----- Start Table A.1 -----
+0220-0221
+0234-024F
+02AE-02AF
+02EF-02FF
+034F-035F
+0363-0373
+0376-0379
+037B-037D
+037F-0383
+038B
+038D
+03A2
+03CF
+03D8-03D9
+03F6-03FF
+0487
+048A-048B
+04C5-04C6
+04C9-04CA
+04CD-04CF
+04F6-04F7
+04FA-0530
+0557-0558
+0560
+0588
+058B-0590
+05A2
+05BA
+05C5-05CF
+05EB-05EF
+05F5-060B
+060D-061A
+061C-061E
+0620
+063B-063F
+0656-065F
+066E-066F
+06EE-06EF
+06FF
+070E
+072D-072F
+074B-077F
+07B1-0900
+0904
+093A-093B
+094E-094F
+0955-0957
+0971-0980
+0984
+098D-098E
+0991-0992
+09A9
+09B1
+09B3-09B5
+09BA-09BB
+09BD
+09C5-09C6
+09C9-09CA
+09CE-09D6
+09D8-09DB
+09DE
+09E4-09E5
+09FB-0A01
+0A03-0A04
+0A0B-0A0E
+0A11-0A12
+0A29
+0A31
+0A34
+0A37
+0A3A-0A3B
+0A3D
+0A43-0A46
+0A49-0A4A
+0A4E-0A58
+0A5D
+0A5F-0A65
+0A75-0A80
+0A84
+0A8C
+0A8E
+0A92
+0AA9
+0AB1
+0AB4
+0ABA-0ABB
+0AC6
+0ACA
+0ACE-0ACF
+0AD1-0ADF
+0AE1-0AE5
+0AF0-0B00
+0B04
+0B0D-0B0E
+0B11-0B12
+0B29
+0B31
+0B34-0B35
+0B3A-0B3B
+0B44-0B46
+0B49-0B4A
+0B4E-0B55
+0B58-0B5B
+0B5E
+0B62-0B65
+0B71-0B81
+0B84
+0B8B-0B8D
+0B91
+0B96-0B98
+0B9B
+0B9D
+0BA0-0BA2
+0BA5-0BA7
+0BAB-0BAD
+0BB6
+0BBA-0BBD
+0BC3-0BC5
+0BC9
+0BCE-0BD6
+0BD8-0BE6
+0BF3-0C00
+0C04
+0C0D
+0C11
+0C29
+0C34
+0C3A-0C3D
+0C45
+0C49
+0C4E-0C54
+0C57-0C5F
+0C62-0C65
+0C70-0C81
+0C84
+0C8D
+0C91
+0CA9
+0CB4
+0CBA-0CBD
+0CC5
+0CC9
+0CCE-0CD4
+0CD7-0CDD
+0CDF
+0CE2-0CE5
+0CF0-0D01
+0D04
+0D0D
+0D11
+0D29
+0D3A-0D3D
+0D44-0D45
+0D49
+0D4E-0D56
+0D58-0D5F
+0D62-0D65
+0D70-0D81
+0D84
+0D97-0D99
+0DB2
+0DBC
+0DBE-0DBF
+0DC7-0DC9
+0DCB-0DCE
+0DD5
+0DD7
+0DE0-0DF1
+0DF5-0E00
+0E3B-0E3E
+0E5C-0E80
+0E83
+0E85-0E86
+0E89
+0E8B-0E8C
+0E8E-0E93
+0E98
+0EA0
+0EA4
+0EA6
+0EA8-0EA9
+0EAC
+0EBA
+0EBE-0EBF
+0EC5
+0EC7
+0ECE-0ECF
+0EDA-0EDB
+0EDE-0EFF
+0F48
+0F6B-0F70
+0F8C-0F8F
+0F98
+0FBD
+0FCD-0FCE
+0FD0-0FFF
+1022
+1028
+102B
+1033-1035
+103A-103F
+105A-109F
+10C6-10CF
+10F7-10FA
+10FC-10FF
+115A-115E
+11A3-11A7
+11FA-11FF
+1207
+1247
+1249
+124E-124F
+1257
+1259
+125E-125F
+1287
+1289
+128E-128F
+12AF
+12B1
+12B6-12B7
+12BF
+12C1
+12C6-12C7
+12CF
+12D7
+12EF
+130F
+1311
+1316-1317
+131F
+1347
+135B-1360
+137D-139F
+13F5-1400
+1677-167F
+169D-169F
+16F1-177F
+17DD-17DF
+17EA-17FF
+180F
+181A-181F
+1878-187F
+18AA-1DFF
+1E9C-1E9F
+1EFA-1EFF
+1F16-1F17
+1F1E-1F1F
+1F46-1F47
+1F4E-1F4F
+1F58
+1F5A
+1F5C
+1F5E
+1F7E-1F7F
+1FB5
+1FC5
+1FD4-1FD5
+1FDC
+1FF0-1FF1
+1FF5
+1FFF
+2047
+204E-2069
+2071-2073
+208F-209F
+20B0-20CF
+20E4-20FF
+213B-2152
+2184-218F
+21F4-21FF
+22F2-22FF
+237C
+239B-23FF
+2427-243F
+244B-245F
+24EB-24FF
+2596-259F
+25F8-25FF
+2614-2618
+2672-2700
+2705
+270A-270B
+2728
+274C
+274E
+2753-2755
+2757
+275F-2760
+2768-2775
+2795-2797
+27B0
+27BF-27FF
+2900-2E7F
+2E9A
+2EF4-2EFF
+2FD6-2FEF
+2FFC-2FFF
+303B-303D
+3040
+3095-3098
+309F-30A0
+30FF-3104
+312D-3130
+318F
+31B8-31FF
+321D-321F
+3244-325F
+327C-327E
+32B1-32BF
+32CC-32CF
+32FF
+3377-337A
+33DE-33DF
+33FF
+4DB6-4DFF
+9FA6-9FFF
+A48D-A48F
+A4A2-A4A3
+A4B4
+A4C1
+A4C5
+A4C7-ABFF
+D7A4-D7FF
+FA2E-FAFF
+FB07-FB12
+FB18-FB1C
+FB37
+FB3D
+FB3F
+FB42
+FB45
+FBB2-FBD2
+FD40-FD4F
+FD90-FD91
+FDC8-FDCF
+FDFC-FE1F
+FE24-FE2F
+FE45-FE48
+FE53
+FE67
+FE6C-FE6F
+FE73
+FE75
+FEFD-FEFE
+FF00
+FF5F-FF60
+FFBF-FFC1
+FFC8-FFC9
+FFD0-FFD1
+FFD8-FFD9
+FFDD-FFDF
+FFE7
+FFEF-FFF8
+10000-102FF
+1031F
+10324-1032F
+1034B-103FF
+10426-10427
+1044E-1CFFF
+1D0F6-1D0FF
+1D127-1D129
+1D1DE-1D3FF
+1D455
+1D49D
+1D4A0-1D4A1
+1D4A3-1D4A4
+1D4A7-1D4A8
+1D4AD
+1D4BA
+1D4BC
+1D4C1
+1D4C4
+1D506
+1D50B-1D50C
+1D515
+1D51D
+1D53A
+1D53F
+1D545
+1D547-1D549
+1D551
+1D6A4-1D6A7
+1D7CA-1D7CD
+1D800-1FFFD
+2A6D7-2F7FF
+2FA1E-2FFFD
+30000-3FFFD
+40000-4FFFD
+50000-5FFFD
+60000-6FFFD
+70000-7FFFD
+80000-8FFFD
+90000-9FFFD
+A0000-AFFFD
+B0000-BFFFD
+C0000-CFFFD
+D0000-DFFFD
+E0000
+E0002-E001F
+E0080-EFFFD
+----- End Table A.1 -----
+
+B. Mapping Tables
+
+The following is the mapping table from Section 3. The table has three
+columns:
+- the code point that is mapped from
+- the zero or more code points that it is mapped to
+- the reason for the mapping
+The columns are separated by semicolons. Note that the second column may
+be empty, or it may have one code point, or it may have more than one
+code point, with each code point separated by a space.
+
+B.1 Commonly mapped to nothing
+
+----- Start Table B.1 -----
+00AD; ; Map to nothing
+1806; ; Map to nothing
+180B; ; Map to nothing
+180C; ; Map to nothing
+180D; ; Map to nothing
+200B; ; Map to nothing
+200C; ; Map to nothing
+200D; ; Map to nothing
+FEFF; ; Map to nothing
+----- End Table B.1 -----
+
+B.2 Mapping for lowercase used with NFKC
+
+----- Start Table B.2 -----
+0041; 0061; Case map
+0042; 0062; Case map
+0043; 0063; Case map
+0044; 0064; Case map
+0045; 0065; Case map
+0046; 0066; Case map
+0047; 0067; Case map
+0048; 0068; Case map
+0049; 0069; Case map
+004A; 006A; Case map
+004B; 006B; Case map
+004C; 006C; Case map
+004D; 006D; Case map
+004E; 006E; Case map
+004F; 006F; Case map
+0050; 0070; Case map
+0051; 0071; Case map
+0052; 0072; Case map
+0053; 0073; Case map
+0054; 0074; Case map
+0055; 0075; Case map
+0056; 0076; Case map
+0057; 0077; Case map
+0058; 0078; Case map
+0059; 0079; Case map
+005A; 007A; Case map
+00B5; 03BC; Case map
+00C0; 00E0; Case map
+00C1; 00E1; Case map
+00C2; 00E2; Case map
+00C3; 00E3; Case map
+00C4; 00E4; Case map
+00C5; 00E5; Case map
+00C6; 00E6; Case map
+00C7; 00E7; Case map
+00C8; 00E8; Case map
+00C9; 00E9; Case map
+00CA; 00EA; Case map
+00CB; 00EB; Case map
+00CC; 00EC; Case map
+00CD; 00ED; Case map
+00CE; 00EE; Case map
+00CF; 00EF; Case map
+00D0; 00F0; Case map
+00D1; 00F1; Case map
+00D2; 00F2; Case map
+00D3; 00F3; Case map
+00D4; 00F4; Case map
+00D5; 00F5; Case map
+00D6; 00F6; Case map
+00D8; 00F8; Case map
+00D9; 00F9; Case map
+00DA; 00FA; Case map
+00DB; 00FB; Case map
+00DC; 00FC; Case map
+00DD; 00FD; Case map
+00DE; 00FE; Case map
+00DF; 0073 0073; Case map
+0100; 0101; Case map
+0102; 0103; Case map
+0104; 0105; Case map
+0106; 0107; Case map
+0108; 0109; Case map
+010A; 010B; Case map
+010C; 010D; Case map
+010E; 010F; Case map
+0110; 0111; Case map
+0112; 0113; Case map
+0114; 0115; Case map
+0116; 0117; Case map
+0118; 0119; Case map
+011A; 011B; Case map
+011C; 011D; Case map
+011E; 011F; Case map
+0120; 0121; Case map
+0122; 0123; Case map
+0124; 0125; Case map
+0126; 0127; Case map
+0128; 0129; Case map
+012A; 012B; Case map
+012C; 012D; Case map
+012E; 012F; Case map
+0130; 0069; Case map
+0131; 0069; Case map
+0132; 0133; Case map
+0134; 0135; Case map
+0136; 0137; Case map
+0139; 013A; Case map
+013B; 013C; Case map
+013D; 013E; Case map
+013F; 0140; Case map
+0141; 0142; Case map
+0143; 0144; Case map
+0145; 0146; Case map
+0147; 0148; Case map
+0149; 02BC 006E; Case map
+014A; 014B; Case map
+014C; 014D; Case map
+014E; 014F; Case map
+0150; 0151; Case map
+0152; 0153; Case map
+0154; 0155; Case map
+0156; 0157; Case map
+0158; 0159; Case map
+015A; 015B; Case map
+015C; 015D; Case map
+015E; 015F; Case map
+0160; 0161; Case map
+0162; 0163; Case map
+0164; 0165; Case map
+0166; 0167; Case map
+0168; 0169; Case map
+016A; 016B; Case map
+016C; 016D; Case map
+016E; 016F; Case map
+0170; 0171; Case map
+0172; 0173; Case map
+0174; 0175; Case map
+0176; 0177; Case map
+0178; 00FF; Case map
+0179; 017A; Case map
+017B; 017C; Case map
+017D; 017E; Case map
+017F; 0073; Case map
+0181; 0253; Case map
+0182; 0183; Case map
+0184; 0185; Case map
+0186; 0254; Case map
+0187; 0188; Case map
+0189; 0256; Case map
+018A; 0257; Case map
+018B; 018C; Case map
+018E; 01DD; Case map
+018F; 0259; Case map
+0190; 025B; Case map
+0191; 0192; Case map
+0193; 0260; Case map
+0194; 0263; Case map
+0196; 0269; Case map
+0197; 0268; Case map
+0198; 0199; Case map
+019C; 026F; Case map
+019D; 0272; Case map
+019F; 0275; Case map
+01A0; 01A1; Case map
+01A2; 01A3; Case map
+01A4; 01A5; Case map
+01A6; 0280; Case map
+01A7; 01A8; Case map
+01A9; 0283; Case map
+01AC; 01AD; Case map
+01AE; 0288; Case map
+01AF; 01B0; Case map
+01B1; 028A; Case map
+01B2; 028B; Case map
+01B3; 01B4; Case map
+01B5; 01B6; Case map
+01B7; 0292; Case map
+01B8; 01B9; Case map
+01BC; 01BD; Case map
+01C4; 01C6; Case map
+01C5; 01C6; Case map
+01C7; 01C9; Case map
+01C8; 01C9; Case map
+01CA; 01CC; Case map
+01CB; 01CC; Case map
+01CD; 01CE; Case map
+01CF; 01D0; Case map
+01D1; 01D2; Case map
+01D3; 01D4; Case map
+01D5; 01D6; Case map
+01D7; 01D8; Case map
+01D9; 01DA; Case map
+01DB; 01DC; Case map
+01DE; 01DF; Case map
+01E0; 01E1; Case map
+01E2; 01E3; Case map
+01E4; 01E5; Case map
+01E6; 01E7; Case map
+01E8; 01E9; Case map
+01EA; 01EB; Case map
+01EC; 01ED; Case map
+01EE; 01EF; Case map
+01F0; 006A 030C; Case map
+01F1; 01F3; Case map
+01F2; 01F3; Case map
+01F4; 01F5; Case map
+01F6; 0195; Case map
+01F7; 01BF; Case map
+01F8; 01F9; Case map
+01FA; 01FB; Case map
+01FC; 01FD; Case map
+01FE; 01FF; Case map
+0200; 0201; Case map
+0202; 0203; Case map
+0204; 0205; Case map
+0206; 0207; Case map
+0208; 0209; Case map
+020A; 020B; Case map
+020C; 020D; Case map
+020E; 020F; Case map
+0210; 0211; Case map
+0212; 0213; Case map
+0214; 0215; Case map
+0216; 0217; Case map
+0218; 0219; Case map
+021A; 021B; Case map
+021C; 021D; Case map
+021E; 021F; Case map
+0222; 0223; Case map
+0224; 0225; Case map
+0226; 0227; Case map
+0228; 0229; Case map
+022A; 022B; Case map
+022C; 022D; Case map
+022E; 022F; Case map
+0230; 0231; Case map
+0232; 0233; Case map
+0345; 03B9; Case map
+037A; 0020 03B9; Additional folding
+0386; 03AC; Case map
+0388; 03AD; Case map
+0389; 03AE; Case map
+038A; 03AF; Case map
+038C; 03CC; Case map
+038E; 03CD; Case map
+038F; 03CE; Case map
+0390; 03B9 0308 0301; Case map
+0391; 03B1; Case map
+0392; 03B2; Case map
+0393; 03B3; Case map
+0394; 03B4; Case map
+0395; 03B5; Case map
+0396; 03B6; Case map
+0397; 03B7; Case map
+0398; 03B8; Case map
+0399; 03B9; Case map
+039A; 03BA; Case map
+039B; 03BB; Case map
+039C; 03BC; Case map
+039D; 03BD; Case map
+039E; 03BE; Case map
+039F; 03BF; Case map
+03A0; 03C0; Case map
+03A1; 03C1; Case map
+03A3; 03C3; Case map
+03A4; 03C4; Case map
+03A5; 03C5; Case map
+03A6; 03C6; Case map
+03A7; 03C7; Case map
+03A8; 03C8; Case map
+03A9; 03C9; Case map
+03AA; 03CA; Case map
+03AB; 03CB; Case map
+03B0; 03C5 0308 0301; Case map
+03C2; 03C3; Case map
+03D0; 03B2; Case map
+03D1; 03B8; Case map
+03D2; 03C5; Additional folding
+03D3; 03CD; Additional folding
+03D4; 03CB; Additional folding
+03D5; 03C6; Case map
+03D6; 03C0; Case map
+03DA; 03DB; Case map
+03DC; 03DD; Case map
+03DE; 03DF; Case map
+03E0; 03E1; Case map
+03E2; 03E3; Case map
+03E4; 03E5; Case map
+03E6; 03E7; Case map
+03E8; 03E9; Case map
+03EA; 03EB; Case map
+03EC; 03ED; Case map
+03EE; 03EF; Case map
+03F0; 03BA; Case map
+03F1; 03C1; Case map
+03F2; 03C3; Case map
+03F4; 03B8; Case map
+03F5; 03B5; Case map
+0400; 0450; Case map
+0401; 0451; Case map
+0402; 0452; Case map
+0403; 0453; Case map
+0404; 0454; Case map
+0405; 0455; Case map
+0406; 0456; Case map
+0407; 0457; Case map
+0408; 0458; Case map
+0409; 0459; Case map
+040A; 045A; Case map
+040B; 045B; Case map
+040C; 045C; Case map
+040D; 045D; Case map
+040E; 045E; Case map
+040F; 045F; Case map
+0410; 0430; Case map
+0411; 0431; Case map
+0412; 0432; Case map
+0413; 0433; Case map
+0414; 0434; Case map
+0415; 0435; Case map
+0416; 0436; Case map
+0417; 0437; Case map
+0418; 0438; Case map
+0419; 0439; Case map
+041A; 043A; Case map
+041B; 043B; Case map
+041C; 043C; Case map
+041D; 043D; Case map
+041E; 043E; Case map
+041F; 043F; Case map
+0420; 0440; Case map
+0421; 0441; Case map
+0422; 0442; Case map
+0423; 0443; Case map
+0424; 0444; Case map
+0425; 0445; Case map
+0426; 0446; Case map
+0427; 0447; Case map
+0428; 0448; Case map
+0429; 0449; Case map
+042A; 044A; Case map
+042B; 044B; Case map
+042C; 044C; Case map
+042D; 044D; Case map
+042E; 044E; Case map
+042F; 044F; Case map
+0460; 0461; Case map
+0462; 0463; Case map
+0464; 0465; Case map
+0466; 0467; Case map
+0468; 0469; Case map
+046A; 046B; Case map
+046C; 046D; Case map
+046E; 046F; Case map
+0470; 0471; Case map
+0472; 0473; Case map
+0474; 0475; Case map
+0476; 0477; Case map
+0478; 0479; Case map
+047A; 047B; Case map
+047C; 047D; Case map
+047E; 047F; Case map
+0480; 0481; Case map
+048C; 048D; Case map
+048E; 048F; Case map
+0490; 0491; Case map
+0492; 0493; Case map
+0494; 0495; Case map
+0496; 0497; Case map
+0498; 0499; Case map
+049A; 049B; Case map
+049C; 049D; Case map
+049E; 049F; Case map
+04A0; 04A1; Case map
+04A2; 04A3; Case map
+04A4; 04A5; Case map
+04A6; 04A7; Case map
+04A8; 04A9; Case map
+04AA; 04AB; Case map
+04AC; 04AD; Case map
+04AE; 04AF; Case map
+04B0; 04B1; Case map
+04B2; 04B3; Case map
+04B4; 04B5; Case map
+04B6; 04B7; Case map
+04B8; 04B9; Case map
+04BA; 04BB; Case map
+04BC; 04BD; Case map
+04BE; 04BF; Case map
+04C1; 04C2; Case map
+04C3; 04C4; Case map
+04C7; 04C8; Case map
+04CB; 04CC; Case map
+04D0; 04D1; Case map
+04D2; 04D3; Case map
+04D4; 04D5; Case map
+04D6; 04D7; Case map
+04D8; 04D9; Case map
+04DA; 04DB; Case map
+04DC; 04DD; Case map
+04DE; 04DF; Case map
+04E0; 04E1; Case map
+04E2; 04E3; Case map
+04E4; 04E5; Case map
+04E6; 04E7; Case map
+04E8; 04E9; Case map
+04EA; 04EB; Case map
+04EC; 04ED; Case map
+04EE; 04EF; Case map
+04F0; 04F1; Case map
+04F2; 04F3; Case map
+04F4; 04F5; Case map
+04F8; 04F9; Case map
+0531; 0561; Case map
+0532; 0562; Case map
+0533; 0563; Case map
+0534; 0564; Case map
+0535; 0565; Case map
+0536; 0566; Case map
+0537; 0567; Case map
+0538; 0568; Case map
+0539; 0569; Case map
+053A; 056A; Case map
+053B; 056B; Case map
+053C; 056C; Case map
+053D; 056D; Case map
+053E; 056E; Case map
+053F; 056F; Case map
+0540; 0570; Case map
+0541; 0571; Case map
+0542; 0572; Case map
+0543; 0573; Case map
+0544; 0574; Case map
+0545; 0575; Case map
+0546; 0576; Case map
+0547; 0577; Case map
+0548; 0578; Case map
+0549; 0579; Case map
+054A; 057A; Case map
+054B; 057B; Case map
+054C; 057C; Case map
+054D; 057D; Case map
+054E; 057E; Case map
+054F; 057F; Case map
+0550; 0580; Case map
+0551; 0581; Case map
+0552; 0582; Case map
+0553; 0583; Case map
+0554; 0584; Case map
+0555; 0585; Case map
+0556; 0586; Case map
+0587; 0565 0582; Case map
+1E00; 1E01; Case map
+1E02; 1E03; Case map
+1E04; 1E05; Case map
+1E06; 1E07; Case map
+1E08; 1E09; Case map
+1E0A; 1E0B; Case map
+1E0C; 1E0D; Case map
+1E0E; 1E0F; Case map
+1E10; 1E11; Case map
+1E12; 1E13; Case map
+1E14; 1E15; Case map
+1E16; 1E17; Case map
+1E18; 1E19; Case map
+1E1A; 1E1B; Case map
+1E1C; 1E1D; Case map
+1E1E; 1E1F; Case map
+1E20; 1E21; Case map
+1E22; 1E23; Case map
+1E24; 1E25; Case map
+1E26; 1E27; Case map
+1E28; 1E29; Case map
+1E2A; 1E2B; Case map
+1E2C; 1E2D; Case map
+1E2E; 1E2F; Case map
+1E30; 1E31; Case map
+1E32; 1E33; Case map
+1E34; 1E35; Case map
+1E36; 1E37; Case map
+1E38; 1E39; Case map
+1E3A; 1E3B; Case map
+1E3C; 1E3D; Case map
+1E3E; 1E3F; Case map
+1E40; 1E41; Case map
+1E42; 1E43; Case map
+1E44; 1E45; Case map
+1E46; 1E47; Case map
+1E48; 1E49; Case map
+1E4A; 1E4B; Case map
+1E4C; 1E4D; Case map
+1E4E; 1E4F; Case map
+1E50; 1E51; Case map
+1E52; 1E53; Case map
+1E54; 1E55; Case map
+1E56; 1E57; Case map
+1E58; 1E59; Case map
+1E5A; 1E5B; Case map
+1E5C; 1E5D; Case map
+1E5E; 1E5F; Case map
+1E60; 1E61; Case map
+1E62; 1E63; Case map
+1E64; 1E65; Case map
+1E66; 1E67; Case map
+1E68; 1E69; Case map
+1E6A; 1E6B; Case map
+1E6C; 1E6D; Case map
+1E6E; 1E6F; Case map
+1E70; 1E71; Case map
+1E72; 1E73; Case map
+1E74; 1E75; Case map
+1E76; 1E77; Case map
+1E78; 1E79; Case map
+1E7A; 1E7B; Case map
+1E7C; 1E7D; Case map
+1E7E; 1E7F; Case map
+1E80; 1E81; Case map
+1E82; 1E83; Case map
+1E84; 1E85; Case map
+1E86; 1E87; Case map
+1E88; 1E89; Case map
+1E8A; 1E8B; Case map
+1E8C; 1E8D; Case map
+1E8E; 1E8F; Case map
+1E90; 1E91; Case map
+1E92; 1E93; Case map
+1E94; 1E95; Case map
+1E96; 0068 0331; Case map
+1E97; 0074 0308; Case map
+1E98; 0077 030A; Case map
+1E99; 0079 030A; Case map
+1E9A; 0061 02BE; Case map
+1E9B; 1E61; Case map
+1EA0; 1EA1; Case map
+1EA2; 1EA3; Case map
+1EA4; 1EA5; Case map
+1EA6; 1EA7; Case map
+1EA8; 1EA9; Case map
+1EAA; 1EAB; Case map
+1EAC; 1EAD; Case map
+1EAE; 1EAF; Case map
+1EB0; 1EB1; Case map
+1EB2; 1EB3; Case map
+1EB4; 1EB5; Case map
+1EB6; 1EB7; Case map
+1EB8; 1EB9; Case map
+1EBA; 1EBB; Case map
+1EBC; 1EBD; Case map
+1EBE; 1EBF; Case map
+1EC0; 1EC1; Case map
+1EC2; 1EC3; Case map
+1EC4; 1EC5; Case map
+1EC6; 1EC7; Case map
+1EC8; 1EC9; Case map
+1ECA; 1ECB; Case map
+1ECC; 1ECD; Case map
+1ECE; 1ECF; Case map
+1ED0; 1ED1; Case map
+1ED2; 1ED3; Case map
+1ED4; 1ED5; Case map
+1ED6; 1ED7; Case map
+1ED8; 1ED9; Case map
+1EDA; 1EDB; Case map
+1EDC; 1EDD; Case map
+1EDE; 1EDF; Case map
+1EE0; 1EE1; Case map
+1EE2; 1EE3; Case map
+1EE4; 1EE5; Case map
+1EE6; 1EE7; Case map
+1EE8; 1EE9; Case map
+1EEA; 1EEB; Case map
+1EEC; 1EED; Case map
+1EEE; 1EEF; Case map
+1EF0; 1EF1; Case map
+1EF2; 1EF3; Case map
+1EF4; 1EF5; Case map
+1EF6; 1EF7; Case map
+1EF8; 1EF9; Case map
+1F08; 1F00; Case map
+1F09; 1F01; Case map
+1F0A; 1F02; Case map
+1F0B; 1F03; Case map
+1F0C; 1F04; Case map
+1F0D; 1F05; Case map
+1F0E; 1F06; Case map
+1F0F; 1F07; Case map
+1F18; 1F10; Case map
+1F19; 1F11; Case map
+1F1A; 1F12; Case map
+1F1B; 1F13; Case map
+1F1C; 1F14; Case map
+1F1D; 1F15; Case map
+1F28; 1F20; Case map
+1F29; 1F21; Case map
+1F2A; 1F22; Case map
+1F2B; 1F23; Case map
+1F2C; 1F24; Case map
+1F2D; 1F25; Case map
+1F2E; 1F26; Case map
+1F2F; 1F27; Case map
+1F38; 1F30; Case map
+1F39; 1F31; Case map
+1F3A; 1F32; Case map
+1F3B; 1F33; Case map
+1F3C; 1F34; Case map
+1F3D; 1F35; Case map
+1F3E; 1F36; Case map
+1F3F; 1F37; Case map
+1F48; 1F40; Case map
+1F49; 1F41; Case map
+1F4A; 1F42; Case map
+1F4B; 1F43; Case map
+1F4C; 1F44; Case map
+1F4D; 1F45; Case map
+1F50; 03C5 0313; Case map
+1F52; 03C5 0313 0300; Case map
+1F54; 03C5 0313 0301; Case map
+1F56; 03C5 0313 0342; Case map
+1F59; 1F51; Case map
+1F5B; 1F53; Case map
+1F5D; 1F55; Case map
+1F5F; 1F57; Case map
+1F68; 1F60; Case map
+1F69; 1F61; Case map
+1F6A; 1F62; Case map
+1F6B; 1F63; Case map
+1F6C; 1F64; Case map
+1F6D; 1F65; Case map
+1F6E; 1F66; Case map
+1F6F; 1F67; Case map
+1F80; 1F00 03B9; Case map
+1F81; 1F01 03B9; Case map
+1F82; 1F02 03B9; Case map
+1F83; 1F03 03B9; Case map
+1F84; 1F04 03B9; Case map
+1F85; 1F05 03B9; Case map
+1F86; 1F06 03B9; Case map
+1F87; 1F07 03B9; Case map
+1F88; 1F00 03B9; Case map
+1F89; 1F01 03B9; Case map
+1F8A; 1F02 03B9; Case map
+1F8B; 1F03 03B9; Case map
+1F8C; 1F04 03B9; Case map
+1F8D; 1F05 03B9; Case map
+1F8E; 1F06 03B9; Case map
+1F8F; 1F07 03B9; Case map
+1F90; 1F20 03B9; Case map
+1F91; 1F21 03B9; Case map
+1F92; 1F22 03B9; Case map
+1F93; 1F23 03B9; Case map
+1F94; 1F24 03B9; Case map
+1F95; 1F25 03B9; Case map
+1F96; 1F26 03B9; Case map
+1F97; 1F27 03B9; Case map
+1F98; 1F20 03B9; Case map
+1F99; 1F21 03B9; Case map
+1F9A; 1F22 03B9; Case map
+1F9B; 1F23 03B9; Case map
+1F9C; 1F24 03B9; Case map
+1F9D; 1F25 03B9; Case map
+1F9E; 1F26 03B9; Case map
+1F9F; 1F27 03B9; Case map
+1FA0; 1F60 03B9; Case map
+1FA1; 1F61 03B9; Case map
+1FA2; 1F62 03B9; Case map
+1FA3; 1F63 03B9; Case map
+1FA4; 1F64 03B9; Case map
+1FA5; 1F65 03B9; Case map
+1FA6; 1F66 03B9; Case map
+1FA7; 1F67 03B9; Case map
+1FA8; 1F60 03B9; Case map
+1FA9; 1F61 03B9; Case map
+1FAA; 1F62 03B9; Case map
+1FAB; 1F63 03B9; Case map
+1FAC; 1F64 03B9; Case map
+1FAD; 1F65 03B9; Case map
+1FAE; 1F66 03B9; Case map
+1FAF; 1F67 03B9; Case map
+1FB2; 1F70 03B9; Case map
+1FB3; 03B1 03B9; Case map
+1FB4; 03AC 03B9; Case map
+1FB6; 03B1 0342; Case map
+1FB7; 03B1 0342 03B9; Case map
+1FB8; 1FB0; Case map
+1FB9; 1FB1; Case map
+1FBA; 1F70; Case map
+1FBB; 1F71; Case map
+1FBC; 03B1 03B9; Case map
+1FBE; 03B9; Case map
+1FC2; 1F74 03B9; Case map
+1FC3; 03B7 03B9; Case map
+1FC4; 03AE 03B9; Case map
+1FC6; 03B7 0342; Case map
+1FC7; 03B7 0342 03B9; Case map
+1FC8; 1F72; Case map
+1FC9; 1F73; Case map
+1FCA; 1F74; Case map
+1FCB; 1F75; Case map
+1FCC; 03B7 03B9; Case map
+1FD2; 03B9 0308 0300; Case map
+1FD3; 03B9 0308 0301; Case map
+1FD6; 03B9 0342; Case map
+1FD7; 03B9 0308 0342; Case map
+1FD8; 1FD0; Case map
+1FD9; 1FD1; Case map
+1FDA; 1F76; Case map
+1FDB; 1F77; Case map
+1FE2; 03C5 0308 0300; Case map
+1FE3; 03C5 0308 0301; Case map
+1FE4; 03C1 0313; Case map
+1FE6; 03C5 0342; Case map
+1FE7; 03C5 0308 0342; Case map
+1FE8; 1FE0; Case map
+1FE9; 1FE1; Case map
+1FEA; 1F7A; Case map
+1FEB; 1F7B; Case map
+1FEC; 1FE5; Case map
+1FF2; 1F7C 03B9; Case map
+1FF3; 03C9 03B9; Case map
+1FF4; 03CE 03B9; Case map
+1FF6; 03C9 0342; Case map
+1FF7; 03C9 0342 03B9; Case map
+1FF8; 1F78; Case map
+1FF9; 1F79; Case map
+1FFA; 1F7C; Case map
+1FFB; 1F7D; Case map
+1FFC; 03C9 03B9; Case map
+20A8; 0072 0073; Additional folding
+2102; 0063; Additional folding
+2103; 00B0 0063; Additional folding
+2107; 025B; Additional folding
+2109; 00B0 0066; Additional folding
+210B; 0068; Additional folding
+210C; 0068; Additional folding
+210D; 0068; Additional folding
+2110; 0069; Additional folding
+2111; 0069; Additional folding
+2112; 006C; Additional folding
+2115; 006E; Additional folding
+2116; 006E 006F; Additional folding
+2119; 0070; Additional folding
+211A; 0071; Additional folding
+211B; 0072; Additional folding
+211C; 0072; Additional folding
+211D; 0072; Additional folding
+2120; 0073 006D; Additional folding
+2121; 0074 0065 006C; Additional folding
+2122; 0074 006D; Additional folding
+2124; 007A; Additional folding
+2126; 03C9; Case map
+2128; 007A; Additional folding
+212A; 006B; Case map
+212B; 00E5; Case map
+212C; 0062; Additional folding
+212D; 0063; Additional folding
+2130; 0065; Additional folding
+2131; 0066; Additional folding
+2133; 006D; Additional folding
+2160; 2170; Case map
+2161; 2171; Case map
+2162; 2172; Case map
+2163; 2173; Case map
+2164; 2174; Case map
+2165; 2175; Case map
+2166; 2176; Case map
+2167; 2177; Case map
+2168; 2178; Case map
+2169; 2179; Case map
+216A; 217A; Case map
+216B; 217B; Case map
+216C; 217C; Case map
+216D; 217D; Case map
+216E; 217E; Case map
+216F; 217F; Case map
+24B6; 24D0; Case map
+24B7; 24D1; Case map
+24B8; 24D2; Case map
+24B9; 24D3; Case map
+24BA; 24D4; Case map
+24BB; 24D5; Case map
+24BC; 24D6; Case map
+24BD; 24D7; Case map
+24BE; 24D8; Case map
+24BF; 24D9; Case map
+24C0; 24DA; Case map
+24C1; 24DB; Case map
+24C2; 24DC; Case map
+24C3; 24DD; Case map
+24C4; 24DE; Case map
+24C5; 24DF; Case map
+24C6; 24E0; Case map
+24C7; 24E1; Case map
+24C8; 24E2; Case map
+24C9; 24E3; Case map
+24CA; 24E4; Case map
+24CB; 24E5; Case map
+24CC; 24E6; Case map
+24CD; 24E7; Case map
+24CE; 24E8; Case map
+24CF; 24E9; Case map
+3371; 0068 0070 0061; Additional folding
+3373; 0061 0075; Additional folding
+3375; 006F 0076; Additional folding
+3380; 0070 0061; Additional folding
+3381; 006E 0061; Additional folding
+3382; 03BC 0061; Additional folding
+3383; 006D 0061; Additional folding
+3384; 006B 0061; Additional folding
+3385; 006B 0062; Additional folding
+3386; 006D 0062; Additional folding
+3387; 0067 0062; Additional folding
+338A; 0070 0066; Additional folding
+338B; 006E 0066; Additional folding
+338C; 03BC 0066; Additional folding
+3390; 0068 007A; Additional folding
+3391; 006B 0068 007A; Additional folding
+3392; 006D 0068 007A; Additional folding
+3393; 0067 0068 007A; Additional folding
+3394; 0074 0068 007A; Additional folding
+33A9; 0070 0061; Additional folding
+33AA; 006B 0070 0061; Additional folding
+33AB; 006D 0070 0061; Additional folding
+33AC; 0067 0070 0061; Additional folding
+33B4; 0070 0076; Additional folding
+33B5; 006E 0076; Additional folding
+33B6; 03BC 0076; Additional folding
+33B7; 006D 0076; Additional folding
+33B8; 006B 0076; Additional folding
+33B9; 006D 0076; Additional folding
+33BA; 0070 0077; Additional folding
+33BB; 006E 0077; Additional folding
+33BC; 03BC 0077; Additional folding
+33BD; 006D 0077; Additional folding
+33BE; 006B 0077; Additional folding
+33BF; 006D 0077; Additional folding
+33C0; 006B 03C9; Additional folding
+33C1; 006D 03C9; Additional folding
+33C3; 0062 0071; Additional folding
+33C6; 0063 2215 006B 0067; Additional folding
+33C7; 0063 006F 002E; Additional folding
+33C8; 0064 0062; Additional folding
+33C9; 0067 0079; Additional folding
+33CB; 0068 0070; Additional folding
+33CD; 006B 006B; Additional folding
+33CE; 006B 006D; Additional folding
+33D7; 0070 0068; Additional folding
+33D9; 0070 0070 006D; Additional folding
+33DA; 0070 0072; Additional folding
+33DC; 0073 0076; Additional folding
+33DD; 0077 0062; Additional folding
+FB00; 0066 0066; Case map
+FB01; 0066 0069; Case map
+FB02; 0066 006C; Case map
+FB03; 0066 0066 0069; Case map
+FB04; 0066 0066 006C; Case map
+FB05; 0073 0074; Case map
+FB06; 0073 0074; Case map
+FB13; 0574 0576; Case map
+FB14; 0574 0565; Case map
+FB15; 0574 056B; Case map
+FB16; 057E 0576; Case map
+FB17; 0574 056D; Case map
+FF21; FF41; Case map
+FF22; FF42; Case map
+FF23; FF43; Case map
+FF24; FF44; Case map
+FF25; FF45; Case map
+FF26; FF46; Case map
+FF27; FF47; Case map
+FF28; FF48; Case map
+FF29; FF49; Case map
+FF2A; FF4A; Case map
+FF2B; FF4B; Case map
+FF2C; FF4C; Case map
+FF2D; FF4D; Case map
+FF2E; FF4E; Case map
+FF2F; FF4F; Case map
+FF30; FF50; Case map
+FF31; FF51; Case map
+FF32; FF52; Case map
+FF33; FF53; Case map
+FF34; FF54; Case map
+FF35; FF55; Case map
+FF36; FF56; Case map
+FF37; FF57; Case map
+FF38; FF58; Case map
+FF39; FF59; Case map
+FF3A; FF5A; Case map
+10400; 10428; Case map
+10401; 10429; Case map
+10402; 1042A; Case map
+10403; 1042B; Case map
+10404; 1042C; Case map
+10405; 1042D; Case map
+10406; 1042E; Case map
+10407; 1042F; Case map
+10408; 10430; Case map
+10409; 10431; Case map
+1040A; 10432; Case map
+1040B; 10433; Case map
+1040C; 10434; Case map
+1040D; 10435; Case map
+1040E; 10436; Case map
+1040F; 10437; Case map
+10410; 10438; Case map
+10411; 10439; Case map
+10412; 1043A; Case map
+10413; 1043B; Case map
+10414; 1043C; Case map
+10415; 1043D; Case map
+10416; 1043E; Case map
+10417; 1043F; Case map
+10418; 10440; Case map
+10419; 10441; Case map
+1041A; 10442; Case map
+1041B; 10443; Case map
+1041C; 10444; Case map
+1041D; 10445; Case map
+1041E; 10446; Case map
+1041F; 10447; Case map
+10420; 10448; Case map
+10421; 10449; Case map
+10422; 1044A; Case map
+10423; 1044B; Case map
+10424; 1044C; Case map
+10425; 1044D; Case map
+1D400; 0061; Additional folding
+1D401; 0062; Additional folding
+1D402; 0063; Additional folding
+1D403; 0064; Additional folding
+1D404; 0065; Additional folding
+1D405; 0066; Additional folding
+1D406; 0067; Additional folding
+1D407; 0068; Additional folding
+1D408; 0069; Additional folding
+1D409; 006A; Additional folding
+1D40A; 006B; Additional folding
+1D40B; 006C; Additional folding
+1D40C; 006D; Additional folding
+1D40D; 006E; Additional folding
+1D40E; 006F; Additional folding
+1D40F; 0070; Additional folding
+1D410; 0071; Additional folding
+1D411; 0072; Additional folding
+1D412; 0073; Additional folding
+1D413; 0074; Additional folding
+1D414; 0075; Additional folding
+1D415; 0076; Additional folding
+1D416; 0077; Additional folding
+1D417; 0078; Additional folding
+1D418; 0079; Additional folding
+1D419; 007A; Additional folding
+1D434; 0061; Additional folding
+1D435; 0062; Additional folding
+1D436; 0063; Additional folding
+1D437; 0064; Additional folding
+1D438; 0065; Additional folding
+1D439; 0066; Additional folding
+1D43A; 0067; Additional folding
+1D43B; 0068; Additional folding
+1D43C; 0069; Additional folding
+1D43D; 006A; Additional folding
+1D43E; 006B; Additional folding
+1D43F; 006C; Additional folding
+1D440; 006D; Additional folding
+1D441; 006E; Additional folding
+1D442; 006F; Additional folding
+1D443; 0070; Additional folding
+1D444; 0071; Additional folding
+1D445; 0072; Additional folding
+1D446; 0073; Additional folding
+1D447; 0074; Additional folding
+1D448; 0075; Additional folding
+1D449; 0076; Additional folding
+1D44A; 0077; Additional folding
+1D44B; 0078; Additional folding
+1D44C; 0079; Additional folding
+1D44D; 007A; Additional folding
+1D468; 0061; Additional folding
+1D469; 0062; Additional folding
+1D46A; 0063; Additional folding
+1D46B; 0064; Additional folding
+1D46C; 0065; Additional folding
+1D46D; 0066; Additional folding
+1D46E; 0067; Additional folding
+1D46F; 0068; Additional folding
+1D470; 0069; Additional folding
+1D471; 006A; Additional folding
+1D472; 006B; Additional folding
+1D473; 006C; Additional folding
+1D474; 006D; Additional folding
+1D475; 006E; Additional folding
+1D476; 006F; Additional folding
+1D477; 0070; Additional folding
+1D478; 0071; Additional folding
+1D479; 0072; Additional folding
+1D47A; 0073; Additional folding
+1D47B; 0074; Additional folding
+1D47C; 0075; Additional folding
+1D47D; 0076; Additional folding
+1D47E; 0077; Additional folding
+1D47F; 0078; Additional folding
+1D480; 0079; Additional folding
+1D481; 007A; Additional folding
+1D49C; 0061; Additional folding
+1D49E; 0063; Additional folding
+1D49F; 0064; Additional folding
+1D4A2; 0067; Additional folding
+1D4A5; 006A; Additional folding
+1D4A6; 006B; Additional folding
+1D4A9; 006E; Additional folding
+1D4AA; 006F; Additional folding
+1D4AB; 0070; Additional folding
+1D4AC; 0071; Additional folding
+1D4AE; 0073; Additional folding
+1D4AF; 0074; Additional folding
+1D4B0; 0075; Additional folding
+1D4B1; 0076; Additional folding
+1D4B2; 0077; Additional folding
+1D4B3; 0078; Additional folding
+1D4B4; 0079; Additional folding
+1D4B5; 007A; Additional folding
+1D4D0; 0061; Additional folding
+1D4D1; 0062; Additional folding
+1D4D2; 0063; Additional folding
+1D4D3; 0064; Additional folding
+1D4D4; 0065; Additional folding
+1D4D5; 0066; Additional folding
+1D4D6; 0067; Additional folding
+1D4D7; 0068; Additional folding
+1D4D8; 0069; Additional folding
+1D4D9; 006A; Additional folding
+1D4DA; 006B; Additional folding
+1D4DB; 006C; Additional folding
+1D4DC; 006D; Additional folding
+1D4DD; 006E; Additional folding
+1D4DE; 006F; Additional folding
+1D4DF; 0070; Additional folding
+1D4E0; 0071; Additional folding
+1D4E1; 0072; Additional folding
+1D4E2; 0073; Additional folding
+1D4E3; 0074; Additional folding
+1D4E4; 0075; Additional folding
+1D4E5; 0076; Additional folding
+1D4E6; 0077; Additional folding
+1D4E7; 0078; Additional folding
+1D4E8; 0079; Additional folding
+1D4E9; 007A; Additional folding
+1D504; 0061; Additional folding
+1D505; 0062; Additional folding
+1D507; 0064; Additional folding
+1D508; 0065; Additional folding
+1D509; 0066; Additional folding
+1D50A; 0067; Additional folding
+1D50D; 006A; Additional folding
+1D50E; 006B; Additional folding
+1D50F; 006C; Additional folding
+1D510; 006D; Additional folding
+1D511; 006E; Additional folding
+1D512; 006F; Additional folding
+1D513; 0070; Additional folding
+1D514; 0071; Additional folding
+1D516; 0073; Additional folding
+1D517; 0074; Additional folding
+1D518; 0075; Additional folding
+1D519; 0076; Additional folding
+1D51A; 0077; Additional folding
+1D51B; 0078; Additional folding
+1D51C; 0079; Additional folding
+1D538; 0061; Additional folding
+1D539; 0062; Additional folding
+1D53B; 0064; Additional folding
+1D53C; 0065; Additional folding
+1D53D; 0066; Additional folding
+1D53E; 0067; Additional folding
+1D540; 0069; Additional folding
+1D541; 006A; Additional folding
+1D542; 006B; Additional folding
+1D543; 006C; Additional folding
+1D544; 006D; Additional folding
+1D546; 006F; Additional folding
+1D54A; 0073; Additional folding
+1D54B; 0074; Additional folding
+1D54C; 0075; Additional folding
+1D54D; 0076; Additional folding
+1D54E; 0077; Additional folding
+1D54F; 0078; Additional folding
+1D550; 0079; Additional folding
+1D56C; 0061; Additional folding
+1D56D; 0062; Additional folding
+1D56E; 0063; Additional folding
+1D56F; 0064; Additional folding
+1D570; 0065; Additional folding
+1D571; 0066; Additional folding
+1D572; 0067; Additional folding
+1D573; 0068; Additional folding
+1D574; 0069; Additional folding
+1D575; 006A; Additional folding
+1D576; 006B; Additional folding
+1D577; 006C; Additional folding
+1D578; 006D; Additional folding
+1D579; 006E; Additional folding
+1D57A; 006F; Additional folding
+1D57B; 0070; Additional folding
+1D57C; 0071; Additional folding
+1D57D; 0072; Additional folding
+1D57E; 0073; Additional folding
+1D57F; 0074; Additional folding
+1D580; 0075; Additional folding
+1D581; 0076; Additional folding
+1D582; 0077; Additional folding
+1D583; 0078; Additional folding
+1D584; 0079; Additional folding
+1D585; 007A; Additional folding
+1D5A0; 0061; Additional folding
+1D5A1; 0062; Additional folding
+1D5A2; 0063; Additional folding
+1D5A3; 0064; Additional folding
+1D5A4; 0065; Additional folding
+1D5A5; 0066; Additional folding
+1D5A6; 0067; Additional folding
+1D5A7; 0068; Additional folding
+1D5A8; 0069; Additional folding
+1D5A9; 006A; Additional folding
+1D5AA; 006B; Additional folding
+1D5AB; 006C; Additional folding
+1D5AC; 006D; Additional folding
+1D5AD; 006E; Additional folding
+1D5AE; 006F; Additional folding
+1D5AF; 0070; Additional folding
+1D5B0; 0071; Additional folding
+1D5B1; 0072; Additional folding
+1D5B2; 0073; Additional folding
+1D5B3; 0074; Additional folding
+1D5B4; 0075; Additional folding
+1D5B5; 0076; Additional folding
+1D5B6; 0077; Additional folding
+1D5B7; 0078; Additional folding
+1D5B8; 0079; Additional folding
+1D5B9; 007A; Additional folding
+1D5D4; 0061; Additional folding
+1D5D5; 0062; Additional folding
+1D5D6; 0063; Additional folding
+1D5D7; 0064; Additional folding
+1D5D8; 0065; Additional folding
+1D5D9; 0066; Additional folding
+1D5DA; 0067; Additional folding
+1D5DB; 0068; Additional folding
+1D5DC; 0069; Additional folding
+1D5DD; 006A; Additional folding
+1D5DE; 006B; Additional folding
+1D5DF; 006C; Additional folding
+1D5E0; 006D; Additional folding
+1D5E1; 006E; Additional folding
+1D5E2; 006F; Additional folding
+1D5E3; 0070; Additional folding
+1D5E4; 0071; Additional folding
+1D5E5; 0072; Additional folding
+1D5E6; 0073; Additional folding
+1D5E7; 0074; Additional folding
+1D5E8; 0075; Additional folding
+1D5E9; 0076; Additional folding
+1D5EA; 0077; Additional folding
+1D5EB; 0078; Additional folding
+1D5EC; 0079; Additional folding
+1D5ED; 007A; Additional folding
+1D608; 0061; Additional folding
+1D609; 0062; Additional folding
+1D60A; 0063; Additional folding
+1D60B; 0064; Additional folding
+1D60C; 0065; Additional folding
+1D60D; 0066; Additional folding
+1D60E; 0067; Additional folding
+1D60F; 0068; Additional folding
+1D610; 0069; Additional folding
+1D611; 006A; Additional folding
+1D612; 006B; Additional folding
+1D613; 006C; Additional folding
+1D614; 006D; Additional folding
+1D615; 006E; Additional folding
+1D616; 006F; Additional folding
+1D617; 0070; Additional folding
+1D618; 0071; Additional folding
+1D619; 0072; Additional folding
+1D61A; 0073; Additional folding
+1D61B; 0074; Additional folding
+1D61C; 0075; Additional folding
+1D61D; 0076; Additional folding
+1D61E; 0077; Additional folding
+1D61F; 0078; Additional folding
+1D620; 0079; Additional folding
+1D621; 007A; Additional folding
+1D63C; 0061; Additional folding
+1D63D; 0062; Additional folding
+1D63E; 0063; Additional folding
+1D63F; 0064; Additional folding
+1D640; 0065; Additional folding
+1D641; 0066; Additional folding
+1D642; 0067; Additional folding
+1D643; 0068; Additional folding
+1D644; 0069; Additional folding
+1D645; 006A; Additional folding
+1D646; 006B; Additional folding
+1D647; 006C; Additional folding
+1D648; 006D; Additional folding
+1D649; 006E; Additional folding
+1D64A; 006F; Additional folding
+1D64B; 0070; Additional folding
+1D64C; 0071; Additional folding
+1D64D; 0072; Additional folding
+1D64E; 0073; Additional folding
+1D64F; 0074; Additional folding
+1D650; 0075; Additional folding
+1D651; 0076; Additional folding
+1D652; 0077; Additional folding
+1D653; 0078; Additional folding
+1D654; 0079; Additional folding
+1D655; 007A; Additional folding
+1D670; 0061; Additional folding
+1D671; 0062; Additional folding
+1D672; 0063; Additional folding
+1D673; 0064; Additional folding
+1D674; 0065; Additional folding
+1D675; 0066; Additional folding
+1D676; 0067; Additional folding
+1D677; 0068; Additional folding
+1D678; 0069; Additional folding
+1D679; 006A; Additional folding
+1D67A; 006B; Additional folding
+1D67B; 006C; Additional folding
+1D67C; 006D; Additional folding
+1D67D; 006E; Additional folding
+1D67E; 006F; Additional folding
+1D67F; 0070; Additional folding
+1D680; 0071; Additional folding
+1D681; 0072; Additional folding
+1D682; 0073; Additional folding
+1D683; 0074; Additional folding
+1D684; 0075; Additional folding
+1D685; 0076; Additional folding
+1D686; 0077; Additional folding
+1D687; 0078; Additional folding
+1D688; 0079; Additional folding
+1D689; 007A; Additional folding
+1D6A8; 03B1; Additional folding
+1D6A9; 03B2; Additional folding
+1D6AA; 03B3; Additional folding
+1D6AB; 03B4; Additional folding
+1D6AC; 03B5; Additional folding
+1D6AD; 03B6; Additional folding
+1D6AE; 03B7; Additional folding
+1D6AF; 03B8; Additional folding
+1D6B0; 03B9; Additional folding
+1D6B1; 03BA; Additional folding
+1D6B2; 03BB; Additional folding
+1D6B3; 03BC; Additional folding
+1D6B4; 03BD; Additional folding
+1D6B5; 03BE; Additional folding
+1D6B6; 03BF; Additional folding
+1D6B7; 03C0; Additional folding
+1D6B8; 03C1; Additional folding
+1D6B9; 03B8; Additional folding
+1D6BA; 03C3; Additional folding
+1D6BB; 03C4; Additional folding
+1D6BC; 03C5; Additional folding
+1D6BD; 03C6; Additional folding
+1D6BE; 03C7; Additional folding
+1D6BF; 03C8; Additional folding
+1D6C0; 03C9; Additional folding
+1D6D3; 03C3; Additional folding
+1D6E2; 03B1; Additional folding
+1D6E3; 03B2; Additional folding
+1D6E4; 03B3; Additional folding
+1D6E5; 03B4; Additional folding
+1D6E6; 03B5; Additional folding
+1D6E7; 03B6; Additional folding
+1D6E8; 03B7; Additional folding
+1D6E9; 03B8; Additional folding
+1D6EA; 03B9; Additional folding
+1D6EB; 03BA; Additional folding
+1D6EC; 03BB; Additional folding
+1D6ED; 03BC; Additional folding
+1D6EE; 03BD; Additional folding
+1D6EF; 03BE; Additional folding
+1D6F0; 03BF; Additional folding
+1D6F1; 03C0; Additional folding
+1D6F2; 03C1; Additional folding
+1D6F3; 03B8; Additional folding
+1D6F4; 03C3; Additional folding
+1D6F5; 03C4; Additional folding
+1D6F6; 03C5; Additional folding
+1D6F7; 03C6; Additional folding
+1D6F8; 03C7; Additional folding
+1D6F9; 03C8; Additional folding
+1D6FA; 03C9; Additional folding
+1D70D; 03C3; Additional folding
+1D71C; 03B1; Additional folding
+1D71D; 03B2; Additional folding
+1D71E; 03B3; Additional folding
+1D71F; 03B4; Additional folding
+1D720; 03B5; Additional folding
+1D721; 03B6; Additional folding
+1D722; 03B7; Additional folding
+1D723; 03B8; Additional folding
+1D724; 03B9; Additional folding
+1D725; 03BA; Additional folding
+1D726; 03BB; Additional folding
+1D727; 03BC; Additional folding
+1D728; 03BD; Additional folding
+1D729; 03BE; Additional folding
+1D72A; 03BF; Additional folding
+1D72B; 03C0; Additional folding
+1D72C; 03C1; Additional folding
+1D72D; 03B8; Additional folding
+1D72E; 03C3; Additional folding
+1D72F; 03C4; Additional folding
+1D730; 03C5; Additional folding
+1D731; 03C6; Additional folding
+1D732; 03C7; Additional folding
+1D733; 03C8; Additional folding
+1D734; 03C9; Additional folding
+1D747; 03C3; Additional folding
+1D756; 03B1; Additional folding
+1D757; 03B2; Additional folding
+1D758; 03B3; Additional folding
+1D759; 03B4; Additional folding
+1D75A; 03B5; Additional folding
+1D75B; 03B6; Additional folding
+1D75C; 03B7; Additional folding
+1D75D; 03B8; Additional folding
+1D75E; 03B9; Additional folding
+1D75F; 03BA; Additional folding
+1D760; 03BB; Additional folding
+1D761; 03BC; Additional folding
+1D762; 03BD; Additional folding
+1D763; 03BE; Additional folding
+1D764; 03BF; Additional folding
+1D765; 03C0; Additional folding
+1D766; 03C1; Additional folding
+1D767; 03B8; Additional folding
+1D768; 03C3; Additional folding
+1D769; 03C4; Additional folding
+1D76A; 03C5; Additional folding
+1D76B; 03C6; Additional folding
+1D76C; 03C7; Additional folding
+1D76D; 03C8; Additional folding
+1D76E; 03C9; Additional folding
+1D781; 03C3; Additional folding
+1D790; 03B1; Additional folding
+1D791; 03B2; Additional folding
+1D792; 03B3; Additional folding
+1D793; 03B4; Additional folding
+1D794; 03B5; Additional folding
+1D795; 03B6; Additional folding
+1D796; 03B7; Additional folding
+1D797; 03B8; Additional folding
+1D798; 03B9; Additional folding
+1D799; 03BA; Additional folding
+1D79A; 03BB; Additional folding
+1D79B; 03BC; Additional folding
+1D79C; 03BD; Additional folding
+1D79D; 03BE; Additional folding
+1D79E; 03BF; Additional folding
+1D79F; 03C0; Additional folding
+1D7A0; 03C1; Additional folding
+1D7A1; 03B8; Additional folding
+1D7A2; 03C3; Additional folding
+1D7A3; 03C4; Additional folding
+1D7A4; 03C5; Additional folding
+1D7A5; 03C6; Additional folding
+1D7A6; 03C7; Additional folding
+1D7A7; 03C8; Additional folding
+1D7A8; 03C9; Additional folding
+1D7BB; 03C3; Additional folding
+----- End Table B.2 -----
+
+B.3 Mapping for lowercase used with no normalization
+
+----- Start Table B.3 -----
+0041; 0061; Case map
+0042; 0062; Case map
+0043; 0063; Case map
+0044; 0064; Case map
+0045; 0065; Case map
+0046; 0066; Case map
+0047; 0067; Case map
+0048; 0068; Case map
+0049; 0069; Case map
+004A; 006A; Case map
+004B; 006B; Case map
+004C; 006C; Case map
+004D; 006D; Case map
+004E; 006E; Case map
+004F; 006F; Case map
+0050; 0070; Case map
+0051; 0071; Case map
+0052; 0072; Case map
+0053; 0073; Case map
+0054; 0074; Case map
+0055; 0075; Case map
+0056; 0076; Case map
+0057; 0077; Case map
+0058; 0078; Case map
+0059; 0079; Case map
+005A; 007A; Case map
+00B5; 03BC; Case map
+00C0; 00E0; Case map
+00C1; 00E1; Case map
+00C2; 00E2; Case map
+00C3; 00E3; Case map
+00C4; 00E4; Case map
+00C5; 00E5; Case map
+00C6; 00E6; Case map
+00C7; 00E7; Case map
+00C8; 00E8; Case map
+00C9; 00E9; Case map
+00CA; 00EA; Case map
+00CB; 00EB; Case map
+00CC; 00EC; Case map
+00CD; 00ED; Case map
+00CE; 00EE; Case map
+00CF; 00EF; Case map
+00D0; 00F0; Case map
+00D1; 00F1; Case map
+00D2; 00F2; Case map
+00D3; 00F3; Case map
+00D4; 00F4; Case map
+00D5; 00F5; Case map
+00D6; 00F6; Case map
+00D8; 00F8; Case map
+00D9; 00F9; Case map
+00DA; 00FA; Case map
+00DB; 00FB; Case map
+00DC; 00FC; Case map
+00DD; 00FD; Case map
+00DE; 00FE; Case map
+00DF; 0073 0073; Case map
+0100; 0101; Case map
+0102; 0103; Case map
+0104; 0105; Case map
+0106; 0107; Case map
+0108; 0109; Case map
+010A; 010B; Case map
+010C; 010D; Case map
+010E; 010F; Case map
+0110; 0111; Case map
+0112; 0113; Case map
+0114; 0115; Case map
+0116; 0117; Case map
+0118; 0119; Case map
+011A; 011B; Case map
+011C; 011D; Case map
+011E; 011F; Case map
+0120; 0121; Case map
+0122; 0123; Case map
+0124; 0125; Case map
+0126; 0127; Case map
+0128; 0129; Case map
+012A; 012B; Case map
+012C; 012D; Case map
+012E; 012F; Case map
+0130; 0069; Case map
+0131; 0069; Case map
+0132; 0133; Case map
+0134; 0135; Case map
+0136; 0137; Case map
+0139; 013A; Case map
+013B; 013C; Case map
+013D; 013E; Case map
+013F; 0140; Case map
+0141; 0142; Case map
+0143; 0144; Case map
+0145; 0146; Case map
+0147; 0148; Case map
+0149; 02BC 006E; Case map
+014A; 014B; Case map
+014C; 014D; Case map
+014E; 014F; Case map
+0150; 0151; Case map
+0152; 0153; Case map
+0154; 0155; Case map
+0156; 0157; Case map
+0158; 0159; Case map
+015A; 015B; Case map
+015C; 015D; Case map
+015E; 015F; Case map
+0160; 0161; Case map
+0162; 0163; Case map
+0164; 0165; Case map
+0166; 0167; Case map
+0168; 0169; Case map
+016A; 016B; Case map
+016C; 016D; Case map
+016E; 016F; Case map
+0170; 0171; Case map
+0172; 0173; Case map
+0174; 0175; Case map
+0176; 0177; Case map
+0178; 00FF; Case map
+0179; 017A; Case map
+017B; 017C; Case map
+017D; 017E; Case map
+017F; 0073; Case map
+0181; 0253; Case map
+0182; 0183; Case map
+0184; 0185; Case map
+0186; 0254; Case map
+0187; 0188; Case map
+0189; 0256; Case map
+018A; 0257; Case map
+018B; 018C; Case map
+018E; 01DD; Case map
+018F; 0259; Case map
+0190; 025B; Case map
+0191; 0192; Case map
+0193; 0260; Case map
+0194; 0263; Case map
+0196; 0269; Case map
+0197; 0268; Case map
+0198; 0199; Case map
+019C; 026F; Case map
+019D; 0272; Case map
+019F; 0275; Case map
+01A0; 01A1; Case map
+01A2; 01A3; Case map
+01A4; 01A5; Case map
+01A6; 0280; Case map
+01A7; 01A8; Case map
+01A9; 0283; Case map
+01AC; 01AD; Case map
+01AE; 0288; Case map
+01AF; 01B0; Case map
+01B1; 028A; Case map
+01B2; 028B; Case map
+01B3; 01B4; Case map
+01B5; 01B6; Case map
+01B7; 0292; Case map
+01B8; 01B9; Case map
+01BC; 01BD; Case map
+01C4; 01C6; Case map
+01C5; 01C6; Case map
+01C7; 01C9; Case map
+01C8; 01C9; Case map
+01CA; 01CC; Case map
+01CB; 01CC; Case map
+01CD; 01CE; Case map
+01CF; 01D0; Case map
+01D1; 01D2; Case map
+01D3; 01D4; Case map
+01D5; 01D6; Case map
+01D7; 01D8; Case map
+01D9; 01DA; Case map
+01DB; 01DC; Case map
+01DE; 01DF; Case map
+01E0; 01E1; Case map
+01E2; 01E3; Case map
+01E4; 01E5; Case map
+01E6; 01E7; Case map
+01E8; 01E9; Case map
+01EA; 01EB; Case map
+01EC; 01ED; Case map
+01EE; 01EF; Case map
+01F0; 006A 030C; Case map
+01F1; 01F3; Case map
+01F2; 01F3; Case map
+01F4; 01F5; Case map
+01F6; 0195; Case map
+01F7; 01BF; Case map
+01F8; 01F9; Case map
+01FA; 01FB; Case map
+01FC; 01FD; Case map
+01FE; 01FF; Case map
+0200; 0201; Case map
+0202; 0203; Case map
+0204; 0205; Case map
+0206; 0207; Case map
+0208; 0209; Case map
+020A; 020B; Case map
+020C; 020D; Case map
+020E; 020F; Case map
+0210; 0211; Case map
+0212; 0213; Case map
+0214; 0215; Case map
+0216; 0217; Case map
+0218; 0219; Case map
+021A; 021B; Case map
+021C; 021D; Case map
+021E; 021F; Case map
+0222; 0223; Case map
+0224; 0225; Case map
+0226; 0227; Case map
+0228; 0229; Case map
+022A; 022B; Case map
+022C; 022D; Case map
+022E; 022F; Case map
+0230; 0231; Case map
+0232; 0233; Case map
+0345; 03B9; Case map
+0386; 03AC; Case map
+0388; 03AD; Case map
+0389; 03AE; Case map
+038A; 03AF; Case map
+038C; 03CC; Case map
+038E; 03CD; Case map
+038F; 03CE; Case map
+0390; 03B9 0308 0301; Case map
+0391; 03B1; Case map
+0392; 03B2; Case map
+0393; 03B3; Case map
+0394; 03B4; Case map
+0395; 03B5; Case map
+0396; 03B6; Case map
+0397; 03B7; Case map
+0398; 03B8; Case map
+0399; 03B9; Case map
+039A; 03BA; Case map
+039B; 03BB; Case map
+039C; 03BC; Case map
+039D; 03BD; Case map
+039E; 03BE; Case map
+039F; 03BF; Case map
+03A0; 03C0; Case map
+03A1; 03C1; Case map
+03A3; 03C3; Case map
+03A4; 03C4; Case map
+03A5; 03C5; Case map
+03A6; 03C6; Case map
+03A7; 03C7; Case map
+03A8; 03C8; Case map
+03A9; 03C9; Case map
+03AA; 03CA; Case map
+03AB; 03CB; Case map
+03B0; 03C5 0308 0301; Case map
+03C2; 03C3; Case map
+03D0; 03B2; Case map
+03D1; 03B8; Case map
+03D5; 03C6; Case map
+03D6; 03C0; Case map
+03DA; 03DB; Case map
+03DC; 03DD; Case map
+03DE; 03DF; Case map
+03E0; 03E1; Case map
+03E2; 03E3; Case map
+03E4; 03E5; Case map
+03E6; 03E7; Case map
+03E8; 03E9; Case map
+03EA; 03EB; Case map
+03EC; 03ED; Case map
+03EE; 03EF; Case map
+03F0; 03BA; Case map
+03F1; 03C1; Case map
+03F2; 03C3; Case map
+03F4; 03B8; Case map
+03F5; 03B5; Case map
+0400; 0450; Case map
+0401; 0451; Case map
+0402; 0452; Case map
+0403; 0453; Case map
+0404; 0454; Case map
+0405; 0455; Case map
+0406; 0456; Case map
+0407; 0457; Case map
+0408; 0458; Case map
+0409; 0459; Case map
+040A; 045A; Case map
+040B; 045B; Case map
+040C; 045C; Case map
+040D; 045D; Case map
+040E; 045E; Case map
+040F; 045F; Case map
+0410; 0430; Case map
+0411; 0431; Case map
+0412; 0432; Case map
+0413; 0433; Case map
+0414; 0434; Case map
+0415; 0435; Case map
+0416; 0436; Case map
+0417; 0437; Case map
+0418; 0438; Case map
+0419; 0439; Case map
+041A; 043A; Case map
+041B; 043B; Case map
+041C; 043C; Case map
+041D; 043D; Case map
+041E; 043E; Case map
+041F; 043F; Case map
+0420; 0440; Case map
+0421; 0441; Case map
+0422; 0442; Case map
+0423; 0443; Case map
+0424; 0444; Case map
+0425; 0445; Case map
+0426; 0446; Case map
+0427; 0447; Case map
+0428; 0448; Case map
+0429; 0449; Case map
+042A; 044A; Case map
+042B; 044B; Case map
+042C; 044C; Case map
+042D; 044D; Case map
+042E; 044E; Case map
+042F; 044F; Case map
+0460; 0461; Case map
+0462; 0463; Case map
+0464; 0465; Case map
+0466; 0467; Case map
+0468; 0469; Case map
+046A; 046B; Case map
+046C; 046D; Case map
+046E; 046F; Case map
+0470; 0471; Case map
+0472; 0473; Case map
+0474; 0475; Case map
+0476; 0477; Case map
+0478; 0479; Case map
+047A; 047B; Case map
+047C; 047D; Case map
+047E; 047F; Case map
+0480; 0481; Case map
+048C; 048D; Case map
+048E; 048F; Case map
+0490; 0491; Case map
+0492; 0493; Case map
+0494; 0495; Case map
+0496; 0497; Case map
+0498; 0499; Case map
+049A; 049B; Case map
+049C; 049D; Case map
+049E; 049F; Case map
+04A0; 04A1; Case map
+04A2; 04A3; Case map
+04A4; 04A5; Case map
+04A6; 04A7; Case map
+04A8; 04A9; Case map
+04AA; 04AB; Case map
+04AC; 04AD; Case map
+04AE; 04AF; Case map
+04B0; 04B1; Case map
+04B2; 04B3; Case map
+04B4; 04B5; Case map
+04B6; 04B7; Case map
+04B8; 04B9; Case map
+04BA; 04BB; Case map
+04BC; 04BD; Case map
+04BE; 04BF; Case map
+04C1; 04C2; Case map
+04C3; 04C4; Case map
+04C7; 04C8; Case map
+04CB; 04CC; Case map
+04D0; 04D1; Case map
+04D2; 04D3; Case map
+04D4; 04D5; Case map
+04D6; 04D7; Case map
+04D8; 04D9; Case map
+04DA; 04DB; Case map
+04DC; 04DD; Case map
+04DE; 04DF; Case map
+04E0; 04E1; Case map
+04E2; 04E3; Case map
+04E4; 04E5; Case map
+04E6; 04E7; Case map
+04E8; 04E9; Case map
+04EA; 04EB; Case map
+04EC; 04ED; Case map
+04EE; 04EF; Case map
+04F0; 04F1; Case map
+04F2; 04F3; Case map
+04F4; 04F5; Case map
+04F8; 04F9; Case map
+0531; 0561; Case map
+0532; 0562; Case map
+0533; 0563; Case map
+0534; 0564; Case map
+0535; 0565; Case map
+0536; 0566; Case map
+0537; 0567; Case map
+0538; 0568; Case map
+0539; 0569; Case map
+053A; 056A; Case map
+053B; 056B; Case map
+053C; 056C; Case map
+053D; 056D; Case map
+053E; 056E; Case map
+053F; 056F; Case map
+0540; 0570; Case map
+0541; 0571; Case map
+0542; 0572; Case map
+0543; 0573; Case map
+0544; 0574; Case map
+0545; 0575; Case map
+0546; 0576; Case map
+0547; 0577; Case map
+0548; 0578; Case map
+0549; 0579; Case map
+054A; 057A; Case map
+054B; 057B; Case map
+054C; 057C; Case map
+054D; 057D; Case map
+054E; 057E; Case map
+054F; 057F; Case map
+0550; 0580; Case map
+0551; 0581; Case map
+0552; 0582; Case map
+0553; 0583; Case map
+0554; 0584; Case map
+0555; 0585; Case map
+0556; 0586; Case map
+0587; 0565 0582; Case map
+1E00; 1E01; Case map
+1E02; 1E03; Case map
+1E04; 1E05; Case map
+1E06; 1E07; Case map
+1E08; 1E09; Case map
+1E0A; 1E0B; Case map
+1E0C; 1E0D; Case map
+1E0E; 1E0F; Case map
+1E10; 1E11; Case map
+1E12; 1E13; Case map
+1E14; 1E15; Case map
+1E16; 1E17; Case map
+1E18; 1E19; Case map
+1E1A; 1E1B; Case map
+1E1C; 1E1D; Case map
+1E1E; 1E1F; Case map
+1E20; 1E21; Case map
+1E22; 1E23; Case map
+1E24; 1E25; Case map
+1E26; 1E27; Case map
+1E28; 1E29; Case map
+1E2A; 1E2B; Case map
+1E2C; 1E2D; Case map
+1E2E; 1E2F; Case map
+1E30; 1E31; Case map
+1E32; 1E33; Case map
+1E34; 1E35; Case map
+1E36; 1E37; Case map
+1E38; 1E39; Case map
+1E3A; 1E3B; Case map
+1E3C; 1E3D; Case map
+1E3E; 1E3F; Case map
+1E40; 1E41; Case map
+1E42; 1E43; Case map
+1E44; 1E45; Case map
+1E46; 1E47; Case map
+1E48; 1E49; Case map
+1E4A; 1E4B; Case map
+1E4C; 1E4D; Case map
+1E4E; 1E4F; Case map
+1E50; 1E51; Case map
+1E52; 1E53; Case map
+1E54; 1E55; Case map
+1E56; 1E57; Case map
+1E58; 1E59; Case map
+1E5A; 1E5B; Case map
+1E5C; 1E5D; Case map
+1E5E; 1E5F; Case map
+1E60; 1E61; Case map
+1E62; 1E63; Case map
+1E64; 1E65; Case map
+1E66; 1E67; Case map
+1E68; 1E69; Case map
+1E6A; 1E6B; Case map
+1E6C; 1E6D; Case map
+1E6E; 1E6F; Case map
+1E70; 1E71; Case map
+1E72; 1E73; Case map
+1E74; 1E75; Case map
+1E76; 1E77; Case map
+1E78; 1E79; Case map
+1E7A; 1E7B; Case map
+1E7C; 1E7D; Case map
+1E7E; 1E7F; Case map
+1E80; 1E81; Case map
+1E82; 1E83; Case map
+1E84; 1E85; Case map
+1E86; 1E87; Case map
+1E88; 1E89; Case map
+1E8A; 1E8B; Case map
+1E8C; 1E8D; Case map
+1E8E; 1E8F; Case map
+1E90; 1E91; Case map
+1E92; 1E93; Case map
+1E94; 1E95; Case map
+1E96; 0068 0331; Case map
+1E97; 0074 0308; Case map
+1E98; 0077 030A; Case map
+1E99; 0079 030A; Case map
+1E9A; 0061 02BE; Case map
+1E9B; 1E61; Case map
+1EA0; 1EA1; Case map
+1EA2; 1EA3; Case map
+1EA4; 1EA5; Case map
+1EA6; 1EA7; Case map
+1EA8; 1EA9; Case map
+1EAA; 1EAB; Case map
+1EAC; 1EAD; Case map
+1EAE; 1EAF; Case map
+1EB0; 1EB1; Case map
+1EB2; 1EB3; Case map
+1EB4; 1EB5; Case map
+1EB6; 1EB7; Case map
+1EB8; 1EB9; Case map
+1EBA; 1EBB; Case map
+1EBC; 1EBD; Case map
+1EBE; 1EBF; Case map
+1EC0; 1EC1; Case map
+1EC2; 1EC3; Case map
+1EC4; 1EC5; Case map
+1EC6; 1EC7; Case map
+1EC8; 1EC9; Case map
+1ECA; 1ECB; Case map
+1ECC; 1ECD; Case map
+1ECE; 1ECF; Case map
+1ED0; 1ED1; Case map
+1ED2; 1ED3; Case map
+1ED4; 1ED5; Case map
+1ED6; 1ED7; Case map
+1ED8; 1ED9; Case map
+1EDA; 1EDB; Case map
+1EDC; 1EDD; Case map
+1EDE; 1EDF; Case map
+1EE0; 1EE1; Case map
+1EE2; 1EE3; Case map
+1EE4; 1EE5; Case map
+1EE6; 1EE7; Case map
+1EE8; 1EE9; Case map
+1EEA; 1EEB; Case map
+1EEC; 1EED; Case map
+1EEE; 1EEF; Case map
+1EF0; 1EF1; Case map
+1EF2; 1EF3; Case map
+1EF4; 1EF5; Case map
+1EF6; 1EF7; Case map
+1EF8; 1EF9; Case map
+1F08; 1F00; Case map
+1F09; 1F01; Case map
+1F0A; 1F02; Case map
+1F0B; 1F03; Case map
+1F0C; 1F04; Case map
+1F0D; 1F05; Case map
+1F0E; 1F06; Case map
+1F0F; 1F07; Case map
+1F18; 1F10; Case map
+1F19; 1F11; Case map
+1F1A; 1F12; Case map
+1F1B; 1F13; Case map
+1F1C; 1F14; Case map
+1F1D; 1F15; Case map
+1F28; 1F20; Case map
+1F29; 1F21; Case map
+1F2A; 1F22; Case map
+1F2B; 1F23; Case map
+1F2C; 1F24; Case map
+1F2D; 1F25; Case map
+1F2E; 1F26; Case map
+1F2F; 1F27; Case map
+1F38; 1F30; Case map
+1F39; 1F31; Case map
+1F3A; 1F32; Case map
+1F3B; 1F33; Case map
+1F3C; 1F34; Case map
+1F3D; 1F35; Case map
+1F3E; 1F36; Case map
+1F3F; 1F37; Case map
+1F48; 1F40; Case map
+1F49; 1F41; Case map
+1F4A; 1F42; Case map
+1F4B; 1F43; Case map
+1F4C; 1F44; Case map
+1F4D; 1F45; Case map
+1F50; 03C5 0313; Case map
+1F52; 03C5 0313 0300; Case map
+1F54; 03C5 0313 0301; Case map
+1F56; 03C5 0313 0342; Case map
+1F59; 1F51; Case map
+1F5B; 1F53; Case map
+1F5D; 1F55; Case map
+1F5F; 1F57; Case map
+1F68; 1F60; Case map
+1F69; 1F61; Case map
+1F6A; 1F62; Case map
+1F6B; 1F63; Case map
+1F6C; 1F64; Case map
+1F6D; 1F65; Case map
+1F6E; 1F66; Case map
+1F6F; 1F67; Case map
+1F80; 1F00 03B9; Case map
+1F81; 1F01 03B9; Case map
+1F82; 1F02 03B9; Case map
+1F83; 1F03 03B9; Case map
+1F84; 1F04 03B9; Case map
+1F85; 1F05 03B9; Case map
+1F86; 1F06 03B9; Case map
+1F87; 1F07 03B9; Case map
+1F88; 1F00 03B9; Case map
+1F89; 1F01 03B9; Case map
+1F8A; 1F02 03B9; Case map
+1F8B; 1F03 03B9; Case map
+1F8C; 1F04 03B9; Case map
+1F8D; 1F05 03B9; Case map
+1F8E; 1F06 03B9; Case map
+1F8F; 1F07 03B9; Case map
+1F90; 1F20 03B9; Case map
+1F91; 1F21 03B9; Case map
+1F92; 1F22 03B9; Case map
+1F93; 1F23 03B9; Case map
+1F94; 1F24 03B9; Case map
+1F95; 1F25 03B9; Case map
+1F96; 1F26 03B9; Case map
+1F97; 1F27 03B9; Case map
+1F98; 1F20 03B9; Case map
+1F99; 1F21 03B9; Case map
+1F9A; 1F22 03B9; Case map
+1F9B; 1F23 03B9; Case map
+1F9C; 1F24 03B9; Case map
+1F9D; 1F25 03B9; Case map
+1F9E; 1F26 03B9; Case map
+1F9F; 1F27 03B9; Case map
+1FA0; 1F60 03B9; Case map
+1FA1; 1F61 03B9; Case map
+1FA2; 1F62 03B9; Case map
+1FA3; 1F63 03B9; Case map
+1FA4; 1F64 03B9; Case map
+1FA5; 1F65 03B9; Case map
+1FA6; 1F66 03B9; Case map
+1FA7; 1F67 03B9; Case map
+1FA8; 1F60 03B9; Case map
+1FA9; 1F61 03B9; Case map
+1FAA; 1F62 03B9; Case map
+1FAB; 1F63 03B9; Case map
+1FAC; 1F64 03B9; Case map
+1FAD; 1F65 03B9; Case map
+1FAE; 1F66 03B9; Case map
+1FAF; 1F67 03B9; Case map
+1FB2; 1F70 03B9; Case map
+1FB3; 03B1 03B9; Case map
+1FB4; 03AC 03B9; Case map
+1FB6; 03B1 0342; Case map
+1FB7; 03B1 0342 03B9; Case map
+1FB8; 1FB0; Case map
+1FB9; 1FB1; Case map
+1FBA; 1F70; Case map
+1FBB; 1F71; Case map
+1FBC; 03B1 03B9; Case map
+1FBE; 03B9; Case map
+1FC2; 1F74 03B9; Case map
+1FC3; 03B7 03B9; Case map
+1FC4; 03AE 03B9; Case map
+1FC6; 03B7 0342; Case map
+1FC7; 03B7 0342 03B9; Case map
+1FC8; 1F72; Case map
+1FC9; 1F73; Case map
+1FCA; 1F74; Case map
+1FCB; 1F75; Case map
+1FCC; 03B7 03B9; Case map
+1FD2; 03B9 0308 0300; Case map
+1FD3; 03B9 0308 0301; Case map
+1FD6; 03B9 0342; Case map
+1FD7; 03B9 0308 0342; Case map
+1FD8; 1FD0; Case map
+1FD9; 1FD1; Case map
+1FDA; 1F76; Case map
+1FDB; 1F77; Case map
+1FE2; 03C5 0308 0300; Case map
+1FE3; 03C5 0308 0301; Case map
+1FE4; 03C1 0313; Case map
+1FE6; 03C5 0342; Case map
+1FE7; 03C5 0308 0342; Case map
+1FE8; 1FE0; Case map
+1FE9; 1FE1; Case map
+1FEA; 1F7A; Case map
+1FEB; 1F7B; Case map
+1FEC; 1FE5; Case map
+1FF2; 1F7C 03B9; Case map
+1FF3; 03C9 03B9; Case map
+1FF4; 03CE 03B9; Case map
+1FF6; 03C9 0342; Case map
+1FF7; 03C9 0342 03B9; Case map
+1FF8; 1F78; Case map
+1FF9; 1F79; Case map
+1FFA; 1F7C; Case map
+1FFB; 1F7D; Case map
+1FFC; 03C9 03B9; Case map
+2126; 03C9; Case map
+212A; 006B; Case map
+212B; 00E5; Case map
+2160; 2170; Case map
+2161; 2171; Case map
+2162; 2172; Case map
+2163; 2173; Case map
+2164; 2174; Case map
+2165; 2175; Case map
+2166; 2176; Case map
+2167; 2177; Case map
+2168; 2178; Case map
+2169; 2179; Case map
+216A; 217A; Case map
+216B; 217B; Case map
+216C; 217C; Case map
+216D; 217D; Case map
+216E; 217E; Case map
+216F; 217F; Case map
+24B6; 24D0; Case map
+24B7; 24D1; Case map
+24B8; 24D2; Case map
+24B9; 24D3; Case map
+24BA; 24D4; Case map
+24BB; 24D5; Case map
+24BC; 24D6; Case map
+24BD; 24D7; Case map
+24BE; 24D8; Case map
+24BF; 24D9; Case map
+24C0; 24DA; Case map
+24C1; 24DB; Case map
+24C2; 24DC; Case map
+24C3; 24DD; Case map
+24C4; 24DE; Case map
+24C5; 24DF; Case map
+24C6; 24E0; Case map
+24C7; 24E1; Case map
+24C8; 24E2; Case map
+24C9; 24E3; Case map
+24CA; 24E4; Case map
+24CB; 24E5; Case map
+24CC; 24E6; Case map
+24CD; 24E7; Case map
+24CE; 24E8; Case map
+24CF; 24E9; Case map
+FB00; 0066 0066; Case map
+FB01; 0066 0069; Case map
+FB02; 0066 006C; Case map
+FB03; 0066 0066 0069; Case map
+FB04; 0066 0066 006C; Case map
+FB05; 0073 0074; Case map
+FB06; 0073 0074; Case map
+FB13; 0574 0576; Case map
+FB14; 0574 0565; Case map
+FB15; 0574 056B; Case map
+FB16; 057E 0576; Case map
+FB17; 0574 056D; Case map
+FF21; FF41; Case map
+FF22; FF42; Case map
+FF23; FF43; Case map
+FF24; FF44; Case map
+FF25; FF45; Case map
+FF26; FF46; Case map
+FF27; FF47; Case map
+FF28; FF48; Case map
+FF29; FF49; Case map
+FF2A; FF4A; Case map
+FF2B; FF4B; Case map
+FF2C; FF4C; Case map
+FF2D; FF4D; Case map
+FF2E; FF4E; Case map
+FF2F; FF4F; Case map
+FF30; FF50; Case map
+FF31; FF51; Case map
+FF32; FF52; Case map
+FF33; FF53; Case map
+FF34; FF54; Case map
+FF35; FF55; Case map
+FF36; FF56; Case map
+FF37; FF57; Case map
+FF38; FF58; Case map
+FF39; FF59; Case map
+FF3A; FF5A; Case map
+10400; 10428; Case map
+10401; 10429; Case map
+10402; 1042A; Case map
+10403; 1042B; Case map
+10404; 1042C; Case map
+10405; 1042D; Case map
+10406; 1042E; Case map
+10407; 1042F; Case map
+10408; 10430; Case map
+10409; 10431; Case map
+1040A; 10432; Case map
+1040B; 10433; Case map
+1040C; 10434; Case map
+1040D; 10435; Case map
+1040E; 10436; Case map
+1040F; 10437; Case map
+10410; 10438; Case map
+10411; 10439; Case map
+10412; 1043A; Case map
+10413; 1043B; Case map
+10414; 1043C; Case map
+10415; 1043D; Case map
+10416; 1043E; Case map
+10417; 1043F; Case map
+10418; 10440; Case map
+10419; 10441; Case map
+1041A; 10442; Case map
+1041B; 10443; Case map
+1041C; 10444; Case map
+1041D; 10445; Case map
+1041E; 10446; Case map
+1041F; 10447; Case map
+10420; 10448; Case map
+10421; 10449; Case map
+10422; 1044A; Case map
+10423; 1044B; Case map
+10424; 1044C; Case map
+10425; 1044D; Case map
+----- End Table B.3 -----
+
+C. Prohibition tables
+
+The tables in this appendix consist of lines with one prohibited code
+point per line. The format of the lines are the value of the code point,
+a semicolon, and a comment which is the name of the code point.
+
+C.1 Space characters
+
+----- Start Table C.1 -----
+00A0; NO-BREAK SPACE
+1680; OGHAM SPACE MARK
+2000; EN QUAD
+2001; EM QUAD
+2002; EN SPACE
+2003; EM SPACE
+2004; THREE-PER-EM SPACE
+2005; FOUR-PER-EM SPACE
+2006; SIX-PER-EM SPACE
+2007; FIGURE SPACE
+2008; PUNCTUATION SPACE
+2009; THIN SPACE
+200A; HAIR SPACE
+202F; NARROW NO-BREAK SPACE
+3000; IDEOGRAPHIC SPACE
+----- End Table C.1 -----
+
+C.2 Control characters
+
+----- Start Table C.2 -----
+0080-009F; [CONTROL CHARACTERS]
+070F; SYRIAC ABBREVIATION MARK
+180E; MONGOLIAN VOWEL SEPARATOR
+2028; LINE SEPARATOR
+2029; PARAGRAPH SEPARATOR
+206A-206F; [CONTROL CHARACTERS]
+FFF9-FFFC; [CONTROL CHARACTERS]
+1D173-1D17A; [MUSICAL CONTROL CHARACTERS]
+----- End Table C.2 -----
+
+C.3 Private use and replacement characters
+
+----- Start Table C.3 -----
+E000-F8FF; [PRIVATE USE, PLANE 0]
+F0000-FFFFD; [PRIVATE USE, PLANE 15]
+100000-10FFFD; [PRIVATE USE, PLANE 16]
+FFFD; REPLACEMENT CHARACTER
+----- End Table C.3 -----
+
+C.4 Non-character code points
+
+----- Start Table C.4 -----
+FDD0-FDEF; [NONCHARACTER CODE POINTS]
+FFFE-FFFF; [NONCHARACTER CODE POINTS]
+1FFFE-1FFFF; [NONCHARACTER CODE POINTS]
+2FFFE-2FFFF; [NONCHARACTER CODE POINTS]
+3FFFE-3FFFF; [NONCHARACTER CODE POINTS]
+4FFFE-4FFFF; [NONCHARACTER CODE POINTS]
+5FFFE-5FFFF; [NONCHARACTER CODE POINTS]
+6FFFE-6FFFF; [NONCHARACTER CODE POINTS]
+7FFFE-7FFFF; [NONCHARACTER CODE POINTS]
+8FFFE-8FFFF; [NONCHARACTER CODE POINTS]
+9FFFE-9FFFF; [NONCHARACTER CODE POINTS]
+AFFFE-AFFFF; [NONCHARACTER CODE POINTS]
+BFFFE-BFFFF; [NONCHARACTER CODE POINTS]
+CFFFE-CFFFF; [NONCHARACTER CODE POINTS]
+DFFFE-DFFFF; [NONCHARACTER CODE POINTS]
+EFFFE-EFFFF; [NONCHARACTER CODE POINTS]
+FFFFE-FFFFF; [NONCHARACTER CODE POINTS]
+10FFFE-10FFFF; [NONCHARACTER CODE POINTS]
+----- End Table C.4 -----
+
+C.5 Surrogate codes
+
+----- Start Table C.5 -----
+D800-DFFF; [SURROGATE CODES]
+----- End Table C.5 -----
+
+C.6 Inappropriate for plain text
+
+----- Start Table C.6 -----
+FFF9; INTERLINEAR ANNOTATION ANCHOR
+FFFA; INTERLINEAR ANNOTATION SEPARATOR
+FFFB; INTERLINEAR ANNOTATION TERMINATOR
+FFFC; OBJECT REPLACEMENT CHARACTER
+----- End Table C.6 -----
+
+C.7 Inappropriate for canonical representation
+
+----- Start Table C.7 -----
+2FF0-2FFB; [IDEOGRAPHIC DESCRIPTION CHARACTERS]
+----- End Table C.7 -----
+
+C.8 Change display properties
+
+----- Start Table C.8 -----
+200E; LEFT-TO-RIGHT MARK
+200F; RIGHT-TO-LEFT MARK
+202A; LEFT-TO-RIGHT EMBEDDING
+202B; RIGHT-TO-LEFT EMBEDDING
+202C; POP DIRECTIONAL FORMATTING
+202D; LEFT-TO-RIGHT OVERRIDE
+202E; RIGHT-TO-LEFT OVERRIDE
+206A; INHIBIT SYMMETRIC SWAPPING
+206B; ACTIVATE SYMMETRIC SWAPPING
+206C; INHIBIT ARABIC FORM SHAPING
+206D; ACTIVATE ARABIC FORM SHAPING
+206E; NATIONAL DIGIT SHAPES
+206F; NOMINAL DIGIT SHAPES
+----- End Table C.8 -----
+
+C.9 Tagging characters
+
+----- Start Table C.9 -----
+E0001; LANGUAGE TAG
+E0020-E007F; [TAGGING CHARACTERS]
+----- End Table C.9 -----
+