/*-
* Copyright (C) 2006-2007 Erik Larsson
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.catacombae.hfs;
import java.nio.CharBuffer;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import org.catacombae.util.Util;
/**
* A class implementing a table for handling the decomposition of characters that's necessary when
* creating Unicode filenames for an HFS+ file system.
* Created from http://developer.apple.com/technotes/tn/tn1150table.html and verified against it.
* Also including a Hangul decomposition algorithm from the Unicode Book.
*
* @author <a href="http://www.catacombae.org/" target="_top">Erik Larsson</a>
*/
public class UnicodeNormalizationToolkit {
/**
* The maximum number of decomposed UTF-16 code units for each composed
* UTF-16 code unit.
*/
private static final int MAX_DECOMPOSED_LENGTH = 4;
private static final UnicodeNormalizationToolkit defaultInstance = new UnicodeNormalizationToolkit();
private Map<Character, char[]> decompositionTable;
private TrieNode compositionTrie;
/** This class encapsulates code copied from http://unicode.org/reports/tr15/#Hangul in order
to deal with Hangul decomposition algorithmically. No indication of any copyright issues.
The same algorithm is presented in section 3.11 of the Unicode standard 3.0. */
private static class HangulDecomposition {
static final int
SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7,
LCount = 19, VCount = 21, TCount = 28,
NCount = VCount * TCount, // 588
SCount = LCount * NCount; // 11172
public static String decomposeHangul(char c) {
CharBuffer result = CharBuffer.allocate(3);
decomposeHangul(c, result);
return new String(result.array());
}
public static void decomposeHangul(char c, CharBuffer result) {
int SIndex = c - SBase;
if (SIndex < 0 || SIndex >= SCount) {
result.put(c);
return;
}
int L = LBase + SIndex / NCount;
int V = VBase + (SIndex % NCount) / TCount;
int T = TBase + SIndex % TCount;
result.put((char)L);
result.put((char)V);
if (T != TBase) result.put((char)T);
}
public static String composeHangul(String source) {
int len = source.length();
if (len == 0) return "";
StringBuilder result = new StringBuilder();
char last = source.charAt(0); // copy first char
result.append(last);
for (int i = 1; i < len; ++i) {
char ch = source.charAt(i);
// 1. check to see if two current characters are L and V
int LIndex = last - LBase;
if (0 <= LIndex && LIndex < LCount) {
int VIndex = ch - VBase;
if (0 <= VIndex && VIndex < VCount) {
// make syllable of form LV
last = (char)(SBase + (LIndex * VCount + VIndex) * TCount);
result.setCharAt(result.length()-1, last); // reset last
continue; // discard ch
}
}
// 2. check to see if two current characters are LV and T
int SIndex = last - SBase;
if (0 <= SIndex && SIndex < SCount && (SIndex % TCount) == 0) {
int TIndex = ch - TBase;
if (0 < TIndex && TIndex < TCount) {
// make syllable of form LVT
last += TIndex;
result.setCharAt(result.length()-1, last); // reset last
continue; // discard ch
}
}
// if neither case was true, just add the character
last = ch;
result.append(ch);
}
return result.toString();
}
}
private static long nextID = 0;
private static class TrieNode {
private final HashMap<Character, TrieNode> childNodes =
new HashMap<Character, TrieNode>();
private char[] replacementSequence = null;
private char trig;
private long id;
public TrieNode(char trig) { this.trig = trig; this.id = nextID++; }
public void addChild(char nextChar, TrieNode childNode) {
childNodes.put(nextChar, childNode);
}
public TrieNode getChild(char nextChar) {
return childNodes.get(nextChar);
}
public Collection<TrieNode> getChildren() {
return childNodes.values();
}
public void setReplacementSequence(char[] seq) {
this.replacementSequence = seq;
}
public char[] getReplacementSequence() { return replacementSequence; }
@Override
public String toString() {
return "{" + id + "} 0x" + Util.toHexStringBE(trig) +
(replacementSequence == null?"":(" -> 0x" + Util.toHexStringBE(replacementSequence)));
}
}
private UnicodeNormalizationToolkit() {
this(new HashMap<Character, char[]>());
}
/** This method can be used in order to tune which Map implementation is used (default is HashMap). */
private UnicodeNormalizationToolkit(Map<Character, char[]> decompositionTable) {
this.decompositionTable = decompositionTable;
buildDecompositionTable(decompositionTable);
this.compositionTrie = buildCompositionTrie(decompositionTable);
//checkTrie(compositionTrie);
}
public static UnicodeNormalizationToolkit getDefaultInstance() {
return defaultInstance;
}
public static UnicodeNormalizationToolkit getCustomInstance(Map<Character, char[]> decompositionTable) {
return new UnicodeNormalizationToolkit(decompositionTable);
}
/**
* Breaks down composed UTF-16 code unit <code>c</code> into one or more
* decomposed UTF-16 code units, putting the result in
* <code>decomposedBuffer</code>.
*/
public void decompose(char c, CharBuffer decomposedBuffer) {
int codepoint = c & 0xFFFF;
if(codepoint >= 0xAC00 && codepoint <= 0xD7A3) {
// We have a Hangul character
HangulDecomposition.decomposeHangul(c, decomposedBuffer);
}
else {
char[] subst = decompositionTable.get(c);
if(subst == null) {
decomposedBuffer.put(c);
}
else {
for(char sc : subst) {
decomposedBuffer.put(sc);
}
}
}
}
/**
* Breaks down composed UTF-16 code unit <code>c</code> into one or more
* decomposed UTF-16 code units, returning the result as a
* {@link java.lang.String}.
*/
public String decompose(char c) {
final CharBuffer decomposedBuffer =
CharBuffer.allocate(MAX_DECOMPOSED_LENGTH);
decompose(c, decomposedBuffer);
decomposedBuffer.limit(decomposedBuffer.position());
decomposedBuffer.rewind();
return decomposedBuffer.toString();
}
/**
* Breaks down each composed Unicode character in array
* <code>composedArray</code> into one or more decomposed characters,
* returning the result as a {@link java.lang.String}.
*/
public String decompose(char[] composedArray) {
final CharBuffer decomposedBuffer =
CharBuffer.allocate(composedArray.length *
MAX_DECOMPOSED_LENGTH);
for(char c : composedArray) {
decompose(c, decomposedBuffer);
}
decomposedBuffer.limit(decomposedBuffer.position());
decomposedBuffer.rewind();
return decomposedBuffer.toString();
}
/**
* Breaks down each composed Unicode character in buffer
* <code>composedBuffer</code> into one or more decomposed characters,
* returning the result as a {@link java.lang.String}.
*/
public String decompose(CharBuffer composedBuffer) {
final CharBuffer decomposedBuffer =
CharBuffer.allocate(composedBuffer.length() *
MAX_DECOMPOSED_LENGTH);
while(composedBuffer.hasRemaining()) {
decompose(composedBuffer.get(), decomposedBuffer);
}
decomposedBuffer.limit(decomposedBuffer.position());
decomposedBuffer.rewind();
return decomposedBuffer.toString();
}
public String compose(String decomposedString) {
//System.err.println("compose");
StringBuilder sb = new StringBuilder();
LinkedList<TrieNode> matchSequence = new LinkedList<TrieNode>();
for(int i = 0; i < decomposedString.length(); ++i) {
//System.err.println("i = " + i);
char[] replacementSequence = null;
matchSequence.clear();
/* First, we loop through the characters, starting at i, and matches characters in the
trie until no more match is found. We push each node in a stack for later processing. */
TrieNode tn = compositionTrie;
int charsRead = 0;
while(tn != null && i+charsRead < decomposedString.length()) {
char current = decomposedString.charAt(i+charsRead);
tn = tn.getChild(current);
if(tn != null) {
matchSequence.addFirst(tn);
++charsRead;
}
//System.err.print(" -> 0x" + Util.toHexStringBE(nextChar));
}
//System.err.println(" <BREAK>");
/* To find the longest matching substring, we must loop from the back of the match
sequence and find the first (last) TrieNode with a replacement sequence. We have
conveniently arranged the match sequence in a LIFO manner, so we just have to loop. */
//System.err.print(" {read:" + charsRead + "}");
for(TrieNode cur : matchSequence) {
//System.err.print(cur.toString() + " > ");
if(cur.getReplacementSequence() != null) {
//System.err.println("<REPLACEMENT FOUND: " + Util.toHexStringBE(cur.getReplacementSequence()) + ">{read:" + charsRead + "}");
replacementSequence = cur.getReplacementSequence();
break;
}
else
--charsRead;
}
// if(replacementSequence == null)
// System.err.println("<NOTHING FOUND>{read:" + charsRead + "}");
if(replacementSequence != null) {
sb.append(replacementSequence);
i += charsRead - 1;
}
else
sb.append(decomposedString.charAt(i));
}
return HangulDecomposition.composeHangul(sb.toString());
}
public Map<Character, char[]> getDecompositionTable() {
return decompositionTable;
}
/** Throws a RuntimeException if the trie contains non-leaf nodes with replacement sequences. */
private void checkTrie(TrieNode root) {
checkTrie(root, " ");
}
private void checkTrie(TrieNode root, String prefix) {
Collection<TrieNode> children = root.getChildren();
//if(children.size() > 0 && root.getReplacementSequence() != null)
//throw new RuntimeException("Inconsistent trie.");
if(root.getReplacementSequence() != null) {
System.err.print(prefix + root.toString());// + " -> 0x" + Util.toHexStringBE(root.getReplacementSequence()));
if(children.size() > 0)
System.err.println(" <INCONSISTENCY!>");
else
System.err.println();
}
else
System.err.println(prefix + root.toString());
for(TrieNode tn : children)
checkTrie(tn, prefix + " ");
}
/**
* Test main method that takes an output file as args[0], and prints the decomposition
* table to that file, in the same form as doc/decomposition_ref.txt (a cut and paste
* text file from the table at http://developer.apple.com/technotes/tn/tn1150table.html).
* Use org.catacombae.hfsexplorer.testcode.LineCompare to compare the generated text
* file to decomposition_ref.txt (ignores empty lines and different line endings).
*/
/*
public static void main(String[] args) throws IOException {
// Useage of TreeMap is essential to produce a sorted output.
UnicodeNormalizationToolkit ud = new UnicodeNormalizationToolkit(new TreeMap<Character, char[]>());
PrintStream out = new PrintStream(new FileOutputStream(args[0]), true, "US-ASCII");
for(Map.Entry<Character, char[]> cur : ud.decompositionTable.entrySet()) {
out.println("0x" + Util.toHexStringBE((short)cur.getKey().charValue()).toUpperCase());
char[] subst = cur.getValue();
out.print("0x" + Util.toHexStringBE((short)subst[0]).toUpperCase());
for(int i = 1; i < subst.length; ++i) {
out.print(" 0x" + Util.toHexStringBE((short)subst[i]).toUpperCase());
}
out.println();
}
}
*/
private static TrieNode buildCompositionTrie(Map<Character, char[]> decompositionTable) {
final TrieNode rootNode = new TrieNode('\0');
for(Map.Entry<Character, char[]> entry : decompositionTable.entrySet()) {
char key = entry.getKey();
char[] value = entry.getValue();
TrieNode currentNode = rootNode;
for(char c : value) {
TrieNode nextNode = currentNode.getChild(c);
if(nextNode == null) {
nextNode = new TrieNode(c);
currentNode.addChild(c, nextNode);
}
currentNode = nextNode;
}
currentNode.setReplacementSequence(new char[] { key });
}
return rootNode;
}
private static void buildDecompositionTable(Map<Character, char[]> decompositionTable) {
char key;
char[] subst;
key = (char)0x00C0;
subst = new char[] { (char)0x0041, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00C1;
subst = new char[] { (char)0x0041, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00C2;
subst = new char[] { (char)0x0041, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00C3;
subst = new char[] { (char)0x0041, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x00C4;
subst = new char[] { (char)0x0041, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00C5;
subst = new char[] { (char)0x0041, (char)0x030A };
decompositionTable.put(key, subst);
key = (char)0x00C7;
subst = new char[] { (char)0x0043, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x00C8;
subst = new char[] { (char)0x0045, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00C9;
subst = new char[] { (char)0x0045, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00CA;
subst = new char[] { (char)0x0045, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00CB;
subst = new char[] { (char)0x0045, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00CC;
subst = new char[] { (char)0x0049, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00CD;
subst = new char[] { (char)0x0049, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00CE;
subst = new char[] { (char)0x0049, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00CF;
subst = new char[] { (char)0x0049, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00D1;
subst = new char[] { (char)0x004E, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x00D2;
subst = new char[] { (char)0x004F, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00D3;
subst = new char[] { (char)0x004F, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00D4;
subst = new char[] { (char)0x004F, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00D5;
subst = new char[] { (char)0x004F, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x00D6;
subst = new char[] { (char)0x004F, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00D9;
subst = new char[] { (char)0x0055, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00DA;
subst = new char[] { (char)0x0055, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00DB;
subst = new char[] { (char)0x0055, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00DC;
subst = new char[] { (char)0x0055, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00DD;
subst = new char[] { (char)0x0059, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00E0;
subst = new char[] { (char)0x0061, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00E1;
subst = new char[] { (char)0x0061, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00E2;
subst = new char[] { (char)0x0061, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00E3;
subst = new char[] { (char)0x0061, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x00E4;
subst = new char[] { (char)0x0061, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00E5;
subst = new char[] { (char)0x0061, (char)0x030A };
decompositionTable.put(key, subst);
key = (char)0x00E7;
subst = new char[] { (char)0x0063, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x00E8;
subst = new char[] { (char)0x0065, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00E9;
subst = new char[] { (char)0x0065, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00EA;
subst = new char[] { (char)0x0065, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00EB;
subst = new char[] { (char)0x0065, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00EC;
subst = new char[] { (char)0x0069, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00ED;
subst = new char[] { (char)0x0069, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00EE;
subst = new char[] { (char)0x0069, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00EF;
subst = new char[] { (char)0x0069, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00F1;
subst = new char[] { (char)0x006E, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x00F2;
subst = new char[] { (char)0x006F, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00F3;
subst = new char[] { (char)0x006F, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00F4;
subst = new char[] { (char)0x006F, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00F5;
subst = new char[] { (char)0x006F, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x00F6;
subst = new char[] { (char)0x006F, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00F9;
subst = new char[] { (char)0x0075, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x00FA;
subst = new char[] { (char)0x0075, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00FB;
subst = new char[] { (char)0x0075, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x00FC;
subst = new char[] { (char)0x0075, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x00FD;
subst = new char[] { (char)0x0079, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x00FF;
subst = new char[] { (char)0x0079, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x0100;
subst = new char[] { (char)0x0041, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x0101;
subst = new char[] { (char)0x0061, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x0102;
subst = new char[] { (char)0x0041, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0103;
subst = new char[] { (char)0x0061, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0104;
subst = new char[] { (char)0x0041, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x0105;
subst = new char[] { (char)0x0061, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x0106;
subst = new char[] { (char)0x0043, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0107;
subst = new char[] { (char)0x0063, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0108;
subst = new char[] { (char)0x0043, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0109;
subst = new char[] { (char)0x0063, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x010A;
subst = new char[] { (char)0x0043, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x010B;
subst = new char[] { (char)0x0063, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x010C;
subst = new char[] { (char)0x0043, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x010D;
subst = new char[] { (char)0x0063, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x010E;
subst = new char[] { (char)0x0044, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x010F;
subst = new char[] { (char)0x0064, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0112;
subst = new char[] { (char)0x0045, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x0113;
subst = new char[] { (char)0x0065, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x0114;
subst = new char[] { (char)0x0045, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0115;
subst = new char[] { (char)0x0065, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0116;
subst = new char[] { (char)0x0045, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x0117;
subst = new char[] { (char)0x0065, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x0118;
subst = new char[] { (char)0x0045, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x0119;
subst = new char[] { (char)0x0065, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x011A;
subst = new char[] { (char)0x0045, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x011B;
subst = new char[] { (char)0x0065, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x011C;
subst = new char[] { (char)0x0047, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x011D;
subst = new char[] { (char)0x0067, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x011E;
subst = new char[] { (char)0x0047, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x011F;
subst = new char[] { (char)0x0067, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0120;
subst = new char[] { (char)0x0047, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x0121;
subst = new char[] { (char)0x0067, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x0122;
subst = new char[] { (char)0x0047, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0123;
subst = new char[] { (char)0x0067, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0124;
subst = new char[] { (char)0x0048, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0125;
subst = new char[] { (char)0x0068, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0128;
subst = new char[] { (char)0x0049, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x0129;
subst = new char[] { (char)0x0069, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x012A;
subst = new char[] { (char)0x0049, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x012B;
subst = new char[] { (char)0x0069, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x012C;
subst = new char[] { (char)0x0049, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x012D;
subst = new char[] { (char)0x0069, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x012E;
subst = new char[] { (char)0x0049, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x012F;
subst = new char[] { (char)0x0069, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x0130;
subst = new char[] { (char)0x0049, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x0134;
subst = new char[] { (char)0x004A, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0135;
subst = new char[] { (char)0x006A, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0136;
subst = new char[] { (char)0x004B, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0137;
subst = new char[] { (char)0x006B, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0139;
subst = new char[] { (char)0x004C, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x013A;
subst = new char[] { (char)0x006C, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x013B;
subst = new char[] { (char)0x004C, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x013C;
subst = new char[] { (char)0x006C, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x013D;
subst = new char[] { (char)0x004C, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x013E;
subst = new char[] { (char)0x006C, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0143;
subst = new char[] { (char)0x004E, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0144;
subst = new char[] { (char)0x006E, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0145;
subst = new char[] { (char)0x004E, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0146;
subst = new char[] { (char)0x006E, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0147;
subst = new char[] { (char)0x004E, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0148;
subst = new char[] { (char)0x006E, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x014C;
subst = new char[] { (char)0x004F, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x014D;
subst = new char[] { (char)0x006F, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x014E;
subst = new char[] { (char)0x004F, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x014F;
subst = new char[] { (char)0x006F, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0150;
subst = new char[] { (char)0x004F, (char)0x030B };
decompositionTable.put(key, subst);
key = (char)0x0151;
subst = new char[] { (char)0x006F, (char)0x030B };
decompositionTable.put(key, subst);
key = (char)0x0154;
subst = new char[] { (char)0x0052, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0155;
subst = new char[] { (char)0x0072, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0156;
subst = new char[] { (char)0x0052, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0157;
subst = new char[] { (char)0x0072, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0158;
subst = new char[] { (char)0x0052, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0159;
subst = new char[] { (char)0x0072, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x015A;
subst = new char[] { (char)0x0053, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x015B;
subst = new char[] { (char)0x0073, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x015C;
subst = new char[] { (char)0x0053, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x015D;
subst = new char[] { (char)0x0073, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x015E;
subst = new char[] { (char)0x0053, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x015F;
subst = new char[] { (char)0x0073, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0160;
subst = new char[] { (char)0x0053, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0161;
subst = new char[] { (char)0x0073, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0162;
subst = new char[] { (char)0x0054, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0163;
subst = new char[] { (char)0x0074, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x0164;
subst = new char[] { (char)0x0054, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0165;
subst = new char[] { (char)0x0074, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x0168;
subst = new char[] { (char)0x0055, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x0169;
subst = new char[] { (char)0x0075, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x016A;
subst = new char[] { (char)0x0055, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x016B;
subst = new char[] { (char)0x0075, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x016C;
subst = new char[] { (char)0x0055, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x016D;
subst = new char[] { (char)0x0075, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x016E;
subst = new char[] { (char)0x0055, (char)0x030A };
decompositionTable.put(key, subst);
key = (char)0x016F;
subst = new char[] { (char)0x0075, (char)0x030A };
decompositionTable.put(key, subst);
key = (char)0x0170;
subst = new char[] { (char)0x0055, (char)0x030B };
decompositionTable.put(key, subst);
key = (char)0x0171;
subst = new char[] { (char)0x0075, (char)0x030B };
decompositionTable.put(key, subst);
key = (char)0x0172;
subst = new char[] { (char)0x0055, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x0173;
subst = new char[] { (char)0x0075, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x0174;
subst = new char[] { (char)0x0057, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0175;
subst = new char[] { (char)0x0077, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0176;
subst = new char[] { (char)0x0059, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0177;
subst = new char[] { (char)0x0079, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x0178;
subst = new char[] { (char)0x0059, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x0179;
subst = new char[] { (char)0x005A, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x017A;
subst = new char[] { (char)0x007A, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x017B;
subst = new char[] { (char)0x005A, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x017C;
subst = new char[] { (char)0x007A, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x017D;
subst = new char[] { (char)0x005A, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x017E;
subst = new char[] { (char)0x007A, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01A0;
subst = new char[] { (char)0x004F, (char)0x031B };
decompositionTable.put(key, subst);
key = (char)0x01A1;
subst = new char[] { (char)0x006F, (char)0x031B };
decompositionTable.put(key, subst);
key = (char)0x01AF;
subst = new char[] { (char)0x0055, (char)0x031B };
decompositionTable.put(key, subst);
key = (char)0x01B0;
subst = new char[] { (char)0x0075, (char)0x031B };
decompositionTable.put(key, subst);
key = (char)0x01CD;
subst = new char[] { (char)0x0041, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01CE;
subst = new char[] { (char)0x0061, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01CF;
subst = new char[] { (char)0x0049, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01D0;
subst = new char[] { (char)0x0069, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01D1;
subst = new char[] { (char)0x004F, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01D2;
subst = new char[] { (char)0x006F, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01D3;
subst = new char[] { (char)0x0055, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01D4;
subst = new char[] { (char)0x0075, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01D5;
subst = new char[] { (char)0x0055, (char)0x0308, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01D6;
subst = new char[] { (char)0x0075, (char)0x0308, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01D7;
subst = new char[] { (char)0x0055, (char)0x0308, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01D8;
subst = new char[] { (char)0x0075, (char)0x0308, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01D9;
subst = new char[] { (char)0x0055, (char)0x0308, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01DA;
subst = new char[] { (char)0x0075, (char)0x0308, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01DB;
subst = new char[] { (char)0x0055, (char)0x0308, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x01DC;
subst = new char[] { (char)0x0075, (char)0x0308, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x01DE;
subst = new char[] { (char)0x0041, (char)0x0308, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01DF;
subst = new char[] { (char)0x0061, (char)0x0308, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01E0;
subst = new char[] { (char)0x0041, (char)0x0307, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01E1;
subst = new char[] { (char)0x0061, (char)0x0307, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01E2;
subst = new char[] { (char)0x00C6, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01E3;
subst = new char[] { (char)0x00E6, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01E6;
subst = new char[] { (char)0x0047, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01E7;
subst = new char[] { (char)0x0067, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01E8;
subst = new char[] { (char)0x004B, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01E9;
subst = new char[] { (char)0x006B, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01EA;
subst = new char[] { (char)0x004F, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x01EB;
subst = new char[] { (char)0x006F, (char)0x0328 };
decompositionTable.put(key, subst);
key = (char)0x01EC;
subst = new char[] { (char)0x004F, (char)0x0328, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01ED;
subst = new char[] { (char)0x006F, (char)0x0328, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x01EE;
subst = new char[] { (char)0x01B7, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01EF;
subst = new char[] { (char)0x0292, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01F0;
subst = new char[] { (char)0x006A, (char)0x030C };
decompositionTable.put(key, subst);
key = (char)0x01F4;
subst = new char[] { (char)0x0047, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01F5;
subst = new char[] { (char)0x0067, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01FA;
subst = new char[] { (char)0x0041, (char)0x030A, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01FB;
subst = new char[] { (char)0x0061, (char)0x030A, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01FC;
subst = new char[] { (char)0x00C6, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01FD;
subst = new char[] { (char)0x00E6, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01FE;
subst = new char[] { (char)0x00D8, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x01FF;
subst = new char[] { (char)0x00F8, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0200;
subst = new char[] { (char)0x0041, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0201;
subst = new char[] { (char)0x0061, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0202;
subst = new char[] { (char)0x0041, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0203;
subst = new char[] { (char)0x0061, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0204;
subst = new char[] { (char)0x0045, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0205;
subst = new char[] { (char)0x0065, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0206;
subst = new char[] { (char)0x0045, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0207;
subst = new char[] { (char)0x0065, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0208;
subst = new char[] { (char)0x0049, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0209;
subst = new char[] { (char)0x0069, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x020A;
subst = new char[] { (char)0x0049, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x020B;
subst = new char[] { (char)0x0069, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x020C;
subst = new char[] { (char)0x004F, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x020D;
subst = new char[] { (char)0x006F, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x020E;
subst = new char[] { (char)0x004F, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x020F;
subst = new char[] { (char)0x006F, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0210;
subst = new char[] { (char)0x0052, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0211;
subst = new char[] { (char)0x0072, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0212;
subst = new char[] { (char)0x0052, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0213;
subst = new char[] { (char)0x0072, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0214;
subst = new char[] { (char)0x0055, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0215;
subst = new char[] { (char)0x0075, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0216;
subst = new char[] { (char)0x0055, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0217;
subst = new char[] { (char)0x0075, (char)0x0311 };
decompositionTable.put(key, subst);
key = (char)0x0310;
subst = new char[] { (char)0x0306, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x0340;
subst = new char[] { (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x0341;
subst = new char[] { (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0343;
subst = new char[] { (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x0344;
subst = new char[] { (char)0x0308, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x0374;
subst = new char[] { (char)0x02B9 };
decompositionTable.put(key, subst);
key = (char)0x037E;
subst = new char[] { (char)0x003B };
decompositionTable.put(key, subst);
key = (char)0x0385;
subst = new char[] { (char)0x00A8, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x0386;
subst = new char[] { (char)0x0391, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x0387;
subst = new char[] { (char)0x00B7 };
decompositionTable.put(key, subst);
key = (char)0x0388;
subst = new char[] { (char)0x0395, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x0389;
subst = new char[] { (char)0x0397, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x038A;
subst = new char[] { (char)0x0399, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x038C;
subst = new char[] { (char)0x039F, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x038E;
subst = new char[] { (char)0x03A5, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x038F;
subst = new char[] { (char)0x03A9, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x0390;
subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03AA;
subst = new char[] { (char)0x0399, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x03AB;
subst = new char[] { (char)0x03A5, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x03AC;
subst = new char[] { (char)0x03B1, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03AD;
subst = new char[] { (char)0x03B5, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03AE;
subst = new char[] { (char)0x03B7, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03AF;
subst = new char[] { (char)0x03B9, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03B0;
subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03CA;
subst = new char[] { (char)0x03B9, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x03CB;
subst = new char[] { (char)0x03C5, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x03CC;
subst = new char[] { (char)0x03BF, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03CD;
subst = new char[] { (char)0x03C5, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03CE;
subst = new char[] { (char)0x03C9, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03D3;
subst = new char[] { (char)0x03D2, (char)0x030D };
decompositionTable.put(key, subst);
key = (char)0x03D4;
subst = new char[] { (char)0x03D2, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x0401;
subst = new char[] { (char)0x0415, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x0403;
subst = new char[] { (char)0x0413, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0407;
subst = new char[] { (char)0x0406, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x040C;
subst = new char[] { (char)0x041A, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x040E;
subst = new char[] { (char)0x0423, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0419;
subst = new char[] { (char)0x0418, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0439;
subst = new char[] { (char)0x0438, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0451;
subst = new char[] { (char)0x0435, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x0453;
subst = new char[] { (char)0x0433, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x0457;
subst = new char[] { (char)0x0456, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x045C;
subst = new char[] { (char)0x043A, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x045E;
subst = new char[] { (char)0x0443, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x0476;
subst = new char[] { (char)0x0474, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x0477;
subst = new char[] { (char)0x0475, (char)0x030F };
decompositionTable.put(key, subst);
key = (char)0x04C1;
subst = new char[] { (char)0x0416, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x04C2;
subst = new char[] { (char)0x0436, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x04D0;
subst = new char[] { (char)0x0410, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x04D1;
subst = new char[] { (char)0x0430, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x04D2;
subst = new char[] { (char)0x0410, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04D3;
subst = new char[] { (char)0x0430, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04D4;
subst = new char[] { (char)0x00C6 };
decompositionTable.put(key, subst);
key = (char)0x04D5;
subst = new char[] { (char)0x00E6 };
decompositionTable.put(key, subst);
key = (char)0x04D6;
subst = new char[] { (char)0x0415, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x04D7;
subst = new char[] { (char)0x0435, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x04D8;
subst = new char[] { (char)0x018F };
decompositionTable.put(key, subst);
key = (char)0x04D9;
subst = new char[] { (char)0x0259 };
decompositionTable.put(key, subst);
key = (char)0x04DA;
subst = new char[] { (char)0x018F, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04DB;
subst = new char[] { (char)0x0259, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04DC;
subst = new char[] { (char)0x0416, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04DD;
subst = new char[] { (char)0x0436, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04DE;
subst = new char[] { (char)0x0417, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04DF;
subst = new char[] { (char)0x0437, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04E0;
subst = new char[] { (char)0x01B7 };
decompositionTable.put(key, subst);
key = (char)0x04E1;
subst = new char[] { (char)0x0292 };
decompositionTable.put(key, subst);
key = (char)0x04E2;
subst = new char[] { (char)0x0418, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x04E3;
subst = new char[] { (char)0x0438, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x04E4;
subst = new char[] { (char)0x0418, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04E5;
subst = new char[] { (char)0x0438, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04E6;
subst = new char[] { (char)0x041E, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04E7;
subst = new char[] { (char)0x043E, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04E8;
subst = new char[] { (char)0x019F };
decompositionTable.put(key, subst);
key = (char)0x04E9;
subst = new char[] { (char)0x0275 };
decompositionTable.put(key, subst);
key = (char)0x04EA;
subst = new char[] { (char)0x019F, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04EB;
subst = new char[] { (char)0x0275, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04EE;
subst = new char[] { (char)0x0423, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x04EF;
subst = new char[] { (char)0x0443, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x04F0;
subst = new char[] { (char)0x0423, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04F1;
subst = new char[] { (char)0x0443, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04F2;
subst = new char[] { (char)0x0423, (char)0x030B };
decompositionTable.put(key, subst);
key = (char)0x04F3;
subst = new char[] { (char)0x0443, (char)0x030B };
decompositionTable.put(key, subst);
key = (char)0x04F4;
subst = new char[] { (char)0x0427, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04F5;
subst = new char[] { (char)0x0447, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04F8;
subst = new char[] { (char)0x042B, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x04F9;
subst = new char[] { (char)0x044B, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x0929;
subst = new char[] { (char)0x0928, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x0931;
subst = new char[] { (char)0x0930, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x0934;
subst = new char[] { (char)0x0933, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x0958;
subst = new char[] { (char)0x0915, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x0959;
subst = new char[] { (char)0x0916, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x095A;
subst = new char[] { (char)0x0917, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x095B;
subst = new char[] { (char)0x091C, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x095C;
subst = new char[] { (char)0x0921, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x095D;
subst = new char[] { (char)0x0922, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x095E;
subst = new char[] { (char)0x092B, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x095F;
subst = new char[] { (char)0x092F, (char)0x093C };
decompositionTable.put(key, subst);
key = (char)0x09B0;
subst = new char[] { (char)0x09AC, (char)0x09BC };
decompositionTable.put(key, subst);
key = (char)0x09CB;
subst = new char[] { (char)0x09C7, (char)0x09BE };
decompositionTable.put(key, subst);
key = (char)0x09CC;
subst = new char[] { (char)0x09C7, (char)0x09D7 };
decompositionTable.put(key, subst);
key = (char)0x09DC;
subst = new char[] { (char)0x09A1, (char)0x09BC };
decompositionTable.put(key, subst);
key = (char)0x09DD;
subst = new char[] { (char)0x09A2, (char)0x09BC };
decompositionTable.put(key, subst);
key = (char)0x09DF;
subst = new char[] { (char)0x09AF, (char)0x09BC };
decompositionTable.put(key, subst);
key = (char)0x0A59;
subst = new char[] { (char)0x0A16, (char)0x0A3C };
decompositionTable.put(key, subst);
key = (char)0x0A5A;
subst = new char[] { (char)0x0A17, (char)0x0A3C };
decompositionTable.put(key, subst);
key = (char)0x0A5B;
subst = new char[] { (char)0x0A1C, (char)0x0A3C };
decompositionTable.put(key, subst);
key = (char)0x0A5C;
subst = new char[] { (char)0x0A21, (char)0x0A3C };
decompositionTable.put(key, subst);
key = (char)0x0A5E;
subst = new char[] { (char)0x0A2B, (char)0x0A3C };
decompositionTable.put(key, subst);
key = (char)0x0B48;
subst = new char[] { (char)0x0B47, (char)0x0B56 };
decompositionTable.put(key, subst);
key = (char)0x0B4B;
subst = new char[] { (char)0x0B47, (char)0x0B3E };
decompositionTable.put(key, subst);
key = (char)0x0B4C;
subst = new char[] { (char)0x0B47, (char)0x0B57 };
decompositionTable.put(key, subst);
key = (char)0x0B5C;
subst = new char[] { (char)0x0B21, (char)0x0B3C };
decompositionTable.put(key, subst);
key = (char)0x0B5D;
subst = new char[] { (char)0x0B22, (char)0x0B3C };
decompositionTable.put(key, subst);
key = (char)0x0B5F;
subst = new char[] { (char)0x0B2F, (char)0x0B3C };
decompositionTable.put(key, subst);
key = (char)0x0B94;
subst = new char[] { (char)0x0B92, (char)0x0BD7 };
decompositionTable.put(key, subst);
key = (char)0x0BCA;
subst = new char[] { (char)0x0BC6, (char)0x0BBE };
decompositionTable.put(key, subst);
key = (char)0x0BCB;
subst = new char[] { (char)0x0BC7, (char)0x0BBE };
decompositionTable.put(key, subst);
key = (char)0x0BCC;
subst = new char[] { (char)0x0BC6, (char)0x0BD7 };
decompositionTable.put(key, subst);
key = (char)0x0C48;
subst = new char[] { (char)0x0C46, (char)0x0C56 };
decompositionTable.put(key, subst);
key = (char)0x0CC0;
subst = new char[] { (char)0x0CBF, (char)0x0CD5 };
decompositionTable.put(key, subst);
key = (char)0x0CC7;
subst = new char[] { (char)0x0CC6, (char)0x0CD5 };
decompositionTable.put(key, subst);
key = (char)0x0CC8;
subst = new char[] { (char)0x0CC6, (char)0x0CD6 };
decompositionTable.put(key, subst);
key = (char)0x0CCA;
subst = new char[] { (char)0x0CC6, (char)0x0CC2 };
decompositionTable.put(key, subst);
key = (char)0x0CCB;
subst = new char[] { (char)0x0CC6, (char)0x0CC2, (char)0x0CD5 };
decompositionTable.put(key, subst);
key = (char)0x0D4A;
subst = new char[] { (char)0x0D46, (char)0x0D3E };
decompositionTable.put(key, subst);
key = (char)0x0D4B;
subst = new char[] { (char)0x0D47, (char)0x0D3E };
decompositionTable.put(key, subst);
key = (char)0x0D4C;
subst = new char[] { (char)0x0D46, (char)0x0D57 };
decompositionTable.put(key, subst);
key = (char)0x0E33;
subst = new char[] { (char)0x0E4D, (char)0x0E32 };
decompositionTable.put(key, subst);
key = (char)0x0EB3;
subst = new char[] { (char)0x0ECD, (char)0x0EB2 };
decompositionTable.put(key, subst);
key = (char)0x0F43;
subst = new char[] { (char)0x0F42, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0F4D;
subst = new char[] { (char)0x0F4C, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0F52;
subst = new char[] { (char)0x0F51, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0F57;
subst = new char[] { (char)0x0F56, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0F5C;
subst = new char[] { (char)0x0F5B, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0F69;
subst = new char[] { (char)0x0F40, (char)0x0FB5 };
decompositionTable.put(key, subst);
key = (char)0x0F73;
subst = new char[] { (char)0x0F72, (char)0x0F71 };
decompositionTable.put(key, subst);
key = (char)0x0F75;
subst = new char[] { (char)0x0F74, (char)0x0F71 };
decompositionTable.put(key, subst);
key = (char)0x0F76;
subst = new char[] { (char)0x0FB2, (char)0x0F80 };
decompositionTable.put(key, subst);
key = (char)0x0F77;
subst = new char[] { (char)0x0FB2, (char)0x0F80, (char)0x0F71 };
decompositionTable.put(key, subst);
key = (char)0x0F78;
subst = new char[] { (char)0x0FB3, (char)0x0F80 };
decompositionTable.put(key, subst);
key = (char)0x0F79;
subst = new char[] { (char)0x0FB3, (char)0x0F80, (char)0x0F71 };
decompositionTable.put(key, subst);
key = (char)0x0F81;
subst = new char[] { (char)0x0F80, (char)0x0F71 };
decompositionTable.put(key, subst);
key = (char)0x0F93;
subst = new char[] { (char)0x0F92, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0F9D;
subst = new char[] { (char)0x0F9C, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0FA2;
subst = new char[] { (char)0x0FA1, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0FA7;
subst = new char[] { (char)0x0FA6, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0FAC;
subst = new char[] { (char)0x0FAB, (char)0x0FB7 };
decompositionTable.put(key, subst);
key = (char)0x0FB9;
subst = new char[] { (char)0x0F90, (char)0x0FB5 };
decompositionTable.put(key, subst);
key = (char)0x1E00;
subst = new char[] { (char)0x0041, (char)0x0325 };
decompositionTable.put(key, subst);
key = (char)0x1E01;
subst = new char[] { (char)0x0061, (char)0x0325 };
decompositionTable.put(key, subst);
key = (char)0x1E02;
subst = new char[] { (char)0x0042, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E03;
subst = new char[] { (char)0x0062, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E04;
subst = new char[] { (char)0x0042, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E05;
subst = new char[] { (char)0x0062, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E06;
subst = new char[] { (char)0x0042, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E07;
subst = new char[] { (char)0x0062, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E08;
subst = new char[] { (char)0x0043, (char)0x0327, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E09;
subst = new char[] { (char)0x0063, (char)0x0327, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E0A;
subst = new char[] { (char)0x0044, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E0B;
subst = new char[] { (char)0x0064, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E0C;
subst = new char[] { (char)0x0044, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E0D;
subst = new char[] { (char)0x0064, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E0E;
subst = new char[] { (char)0x0044, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E0F;
subst = new char[] { (char)0x0064, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E10;
subst = new char[] { (char)0x0044, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x1E11;
subst = new char[] { (char)0x0064, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x1E12;
subst = new char[] { (char)0x0044, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E13;
subst = new char[] { (char)0x0064, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E14;
subst = new char[] { (char)0x0045, (char)0x0304, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1E15;
subst = new char[] { (char)0x0065, (char)0x0304, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1E16;
subst = new char[] { (char)0x0045, (char)0x0304, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E17;
subst = new char[] { (char)0x0065, (char)0x0304, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E18;
subst = new char[] { (char)0x0045, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E19;
subst = new char[] { (char)0x0065, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E1A;
subst = new char[] { (char)0x0045, (char)0x0330 };
decompositionTable.put(key, subst);
key = (char)0x1E1B;
subst = new char[] { (char)0x0065, (char)0x0330 };
decompositionTable.put(key, subst);
key = (char)0x1E1C;
subst = new char[] { (char)0x0045, (char)0x0327, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1E1D;
subst = new char[] { (char)0x0065, (char)0x0327, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1E1E;
subst = new char[] { (char)0x0046, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E1F;
subst = new char[] { (char)0x0066, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E20;
subst = new char[] { (char)0x0047, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1E21;
subst = new char[] { (char)0x0067, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1E22;
subst = new char[] { (char)0x0048, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E23;
subst = new char[] { (char)0x0068, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E24;
subst = new char[] { (char)0x0048, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E25;
subst = new char[] { (char)0x0068, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E26;
subst = new char[] { (char)0x0048, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E27;
subst = new char[] { (char)0x0068, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E28;
subst = new char[] { (char)0x0048, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x1E29;
subst = new char[] { (char)0x0068, (char)0x0327 };
decompositionTable.put(key, subst);
key = (char)0x1E2A;
subst = new char[] { (char)0x0048, (char)0x032E };
decompositionTable.put(key, subst);
key = (char)0x1E2B;
subst = new char[] { (char)0x0068, (char)0x032E };
decompositionTable.put(key, subst);
key = (char)0x1E2C;
subst = new char[] { (char)0x0049, (char)0x0330 };
decompositionTable.put(key, subst);
key = (char)0x1E2D;
subst = new char[] { (char)0x0069, (char)0x0330 };
decompositionTable.put(key, subst);
key = (char)0x1E2E;
subst = new char[] { (char)0x0049, (char)0x0308, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E2F;
subst = new char[] { (char)0x0069, (char)0x0308, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E30;
subst = new char[] { (char)0x004B, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E31;
subst = new char[] { (char)0x006B, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E32;
subst = new char[] { (char)0x004B, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E33;
subst = new char[] { (char)0x006B, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E34;
subst = new char[] { (char)0x004B, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E35;
subst = new char[] { (char)0x006B, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E36;
subst = new char[] { (char)0x004C, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E37;
subst = new char[] { (char)0x006C, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E38;
subst = new char[] { (char)0x004C, (char)0x0323, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1E39;
subst = new char[] { (char)0x006C, (char)0x0323, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1E3A;
subst = new char[] { (char)0x004C, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E3B;
subst = new char[] { (char)0x006C, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E3C;
subst = new char[] { (char)0x004C, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E3D;
subst = new char[] { (char)0x006C, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E3E;
subst = new char[] { (char)0x004D, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E3F;
subst = new char[] { (char)0x006D, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E40;
subst = new char[] { (char)0x004D, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E41;
subst = new char[] { (char)0x006D, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E42;
subst = new char[] { (char)0x004D, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E43;
subst = new char[] { (char)0x006D, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E44;
subst = new char[] { (char)0x004E, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E45;
subst = new char[] { (char)0x006E, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E46;
subst = new char[] { (char)0x004E, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E47;
subst = new char[] { (char)0x006E, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E48;
subst = new char[] { (char)0x004E, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E49;
subst = new char[] { (char)0x006E, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E4A;
subst = new char[] { (char)0x004E, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E4B;
subst = new char[] { (char)0x006E, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E4C;
subst = new char[] { (char)0x004F, (char)0x0303, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E4D;
subst = new char[] { (char)0x006F, (char)0x0303, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E4E;
subst = new char[] { (char)0x004F, (char)0x0303, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E4F;
subst = new char[] { (char)0x006F, (char)0x0303, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E50;
subst = new char[] { (char)0x004F, (char)0x0304, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1E51;
subst = new char[] { (char)0x006F, (char)0x0304, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1E52;
subst = new char[] { (char)0x004F, (char)0x0304, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E53;
subst = new char[] { (char)0x006F, (char)0x0304, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E54;
subst = new char[] { (char)0x0050, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E55;
subst = new char[] { (char)0x0070, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E56;
subst = new char[] { (char)0x0050, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E57;
subst = new char[] { (char)0x0070, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E58;
subst = new char[] { (char)0x0052, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E59;
subst = new char[] { (char)0x0072, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E5A;
subst = new char[] { (char)0x0052, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E5B;
subst = new char[] { (char)0x0072, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E5C;
subst = new char[] { (char)0x0052, (char)0x0323, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1E5D;
subst = new char[] { (char)0x0072, (char)0x0323, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1E5E;
subst = new char[] { (char)0x0052, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E5F;
subst = new char[] { (char)0x0072, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E60;
subst = new char[] { (char)0x0053, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E61;
subst = new char[] { (char)0x0073, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E62;
subst = new char[] { (char)0x0053, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E63;
subst = new char[] { (char)0x0073, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E64;
subst = new char[] { (char)0x0053, (char)0x0301, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E65;
subst = new char[] { (char)0x0073, (char)0x0301, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E66;
subst = new char[] { (char)0x0053, (char)0x030C, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E67;
subst = new char[] { (char)0x0073, (char)0x030C, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E68;
subst = new char[] { (char)0x0053, (char)0x0323, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E69;
subst = new char[] { (char)0x0073, (char)0x0323, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E6A;
subst = new char[] { (char)0x0054, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E6B;
subst = new char[] { (char)0x0074, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E6C;
subst = new char[] { (char)0x0054, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E6D;
subst = new char[] { (char)0x0074, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E6E;
subst = new char[] { (char)0x0054, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E6F;
subst = new char[] { (char)0x0074, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E70;
subst = new char[] { (char)0x0054, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E71;
subst = new char[] { (char)0x0074, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E72;
subst = new char[] { (char)0x0055, (char)0x0324 };
decompositionTable.put(key, subst);
key = (char)0x1E73;
subst = new char[] { (char)0x0075, (char)0x0324 };
decompositionTable.put(key, subst);
key = (char)0x1E74;
subst = new char[] { (char)0x0055, (char)0x0330 };
decompositionTable.put(key, subst);
key = (char)0x1E75;
subst = new char[] { (char)0x0075, (char)0x0330 };
decompositionTable.put(key, subst);
key = (char)0x1E76;
subst = new char[] { (char)0x0055, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E77;
subst = new char[] { (char)0x0075, (char)0x032D };
decompositionTable.put(key, subst);
key = (char)0x1E78;
subst = new char[] { (char)0x0055, (char)0x0303, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E79;
subst = new char[] { (char)0x0075, (char)0x0303, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E7A;
subst = new char[] { (char)0x0055, (char)0x0304, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E7B;
subst = new char[] { (char)0x0075, (char)0x0304, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E7C;
subst = new char[] { (char)0x0056, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1E7D;
subst = new char[] { (char)0x0076, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1E7E;
subst = new char[] { (char)0x0056, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E7F;
subst = new char[] { (char)0x0076, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E80;
subst = new char[] { (char)0x0057, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1E81;
subst = new char[] { (char)0x0077, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1E82;
subst = new char[] { (char)0x0057, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E83;
subst = new char[] { (char)0x0077, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1E84;
subst = new char[] { (char)0x0057, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E85;
subst = new char[] { (char)0x0077, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E86;
subst = new char[] { (char)0x0057, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E87;
subst = new char[] { (char)0x0077, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E88;
subst = new char[] { (char)0x0057, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E89;
subst = new char[] { (char)0x0077, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E8A;
subst = new char[] { (char)0x0058, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E8B;
subst = new char[] { (char)0x0078, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E8C;
subst = new char[] { (char)0x0058, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E8D;
subst = new char[] { (char)0x0078, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E8E;
subst = new char[] { (char)0x0059, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E8F;
subst = new char[] { (char)0x0079, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1E90;
subst = new char[] { (char)0x005A, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1E91;
subst = new char[] { (char)0x007A, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1E92;
subst = new char[] { (char)0x005A, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E93;
subst = new char[] { (char)0x007A, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1E94;
subst = new char[] { (char)0x005A, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E95;
subst = new char[] { (char)0x007A, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E96;
subst = new char[] { (char)0x0068, (char)0x0331 };
decompositionTable.put(key, subst);
key = (char)0x1E97;
subst = new char[] { (char)0x0074, (char)0x0308 };
decompositionTable.put(key, subst);
key = (char)0x1E98;
subst = new char[] { (char)0x0077, (char)0x030A };
decompositionTable.put(key, subst);
key = (char)0x1E99;
subst = new char[] { (char)0x0079, (char)0x030A };
decompositionTable.put(key, subst);
key = (char)0x1E9B;
subst = new char[] { (char)0x017F, (char)0x0307 };
decompositionTable.put(key, subst);
key = (char)0x1EA0;
subst = new char[] { (char)0x0041, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EA1;
subst = new char[] { (char)0x0061, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EA2;
subst = new char[] { (char)0x0041, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EA3;
subst = new char[] { (char)0x0061, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EA4;
subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EA5;
subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EA6;
subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EA7;
subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EA8;
subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EA9;
subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EAA;
subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EAB;
subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EAC;
subst = new char[] { (char)0x0041, (char)0x0323, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1EAD;
subst = new char[] { (char)0x0061, (char)0x0323, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1EAE;
subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EAF;
subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EB0;
subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EB1;
subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EB2;
subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EB3;
subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EB4;
subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EB5;
subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EB6;
subst = new char[] { (char)0x0041, (char)0x0323, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1EB7;
subst = new char[] { (char)0x0061, (char)0x0323, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1EB8;
subst = new char[] { (char)0x0045, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EB9;
subst = new char[] { (char)0x0065, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EBA;
subst = new char[] { (char)0x0045, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EBB;
subst = new char[] { (char)0x0065, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EBC;
subst = new char[] { (char)0x0045, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EBD;
subst = new char[] { (char)0x0065, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EBE;
subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EBF;
subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EC0;
subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EC1;
subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EC2;
subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EC3;
subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EC4;
subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EC5;
subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EC6;
subst = new char[] { (char)0x0045, (char)0x0323, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1EC7;
subst = new char[] { (char)0x0065, (char)0x0323, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1EC8;
subst = new char[] { (char)0x0049, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EC9;
subst = new char[] { (char)0x0069, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1ECA;
subst = new char[] { (char)0x0049, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1ECB;
subst = new char[] { (char)0x0069, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1ECC;
subst = new char[] { (char)0x004F, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1ECD;
subst = new char[] { (char)0x006F, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1ECE;
subst = new char[] { (char)0x004F, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1ECF;
subst = new char[] { (char)0x006F, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1ED0;
subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1ED1;
subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1ED2;
subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1ED3;
subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1ED4;
subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1ED5;
subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1ED6;
subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1ED7;
subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1ED8;
subst = new char[] { (char)0x004F, (char)0x0323, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1ED9;
subst = new char[] { (char)0x006F, (char)0x0323, (char)0x0302 };
decompositionTable.put(key, subst);
key = (char)0x1EDA;
subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EDB;
subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EDC;
subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EDD;
subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EDE;
subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EDF;
subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EE0;
subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EE1;
subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EE2;
subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EE3;
subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EE4;
subst = new char[] { (char)0x0055, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EE5;
subst = new char[] { (char)0x0075, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EE6;
subst = new char[] { (char)0x0055, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EE7;
subst = new char[] { (char)0x0075, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EE8;
subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EE9;
subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1EEA;
subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EEB;
subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EEC;
subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EED;
subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EEE;
subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EEF;
subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EF0;
subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EF1;
subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EF2;
subst = new char[] { (char)0x0059, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EF3;
subst = new char[] { (char)0x0079, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1EF4;
subst = new char[] { (char)0x0059, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EF5;
subst = new char[] { (char)0x0079, (char)0x0323 };
decompositionTable.put(key, subst);
key = (char)0x1EF6;
subst = new char[] { (char)0x0059, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EF7;
subst = new char[] { (char)0x0079, (char)0x0309 };
decompositionTable.put(key, subst);
key = (char)0x1EF8;
subst = new char[] { (char)0x0059, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1EF9;
subst = new char[] { (char)0x0079, (char)0x0303 };
decompositionTable.put(key, subst);
key = (char)0x1F00;
subst = new char[] { (char)0x03B1, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F01;
subst = new char[] { (char)0x03B1, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F02;
subst = new char[] { (char)0x03B1, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F03;
subst = new char[] { (char)0x03B1, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F04;
subst = new char[] { (char)0x03B1, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F05;
subst = new char[] { (char)0x03B1, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F06;
subst = new char[] { (char)0x03B1, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F07;
subst = new char[] { (char)0x03B1, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F08;
subst = new char[] { (char)0x0391, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F09;
subst = new char[] { (char)0x0391, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F0A;
subst = new char[] { (char)0x0391, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F0B;
subst = new char[] { (char)0x0391, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F0C;
subst = new char[] { (char)0x0391, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F0D;
subst = new char[] { (char)0x0391, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F0E;
subst = new char[] { (char)0x0391, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F0F;
subst = new char[] { (char)0x0391, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F10;
subst = new char[] { (char)0x03B5, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F11;
subst = new char[] { (char)0x03B5, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F12;
subst = new char[] { (char)0x03B5, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F13;
subst = new char[] { (char)0x03B5, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F14;
subst = new char[] { (char)0x03B5, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F15;
subst = new char[] { (char)0x03B5, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F18;
subst = new char[] { (char)0x0395, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F19;
subst = new char[] { (char)0x0395, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F1A;
subst = new char[] { (char)0x0395, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F1B;
subst = new char[] { (char)0x0395, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F1C;
subst = new char[] { (char)0x0395, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F1D;
subst = new char[] { (char)0x0395, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F20;
subst = new char[] { (char)0x03B7, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F21;
subst = new char[] { (char)0x03B7, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F22;
subst = new char[] { (char)0x03B7, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F23;
subst = new char[] { (char)0x03B7, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F24;
subst = new char[] { (char)0x03B7, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F25;
subst = new char[] { (char)0x03B7, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F26;
subst = new char[] { (char)0x03B7, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F27;
subst = new char[] { (char)0x03B7, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F28;
subst = new char[] { (char)0x0397, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F29;
subst = new char[] { (char)0x0397, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F2A;
subst = new char[] { (char)0x0397, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F2B;
subst = new char[] { (char)0x0397, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F2C;
subst = new char[] { (char)0x0397, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F2D;
subst = new char[] { (char)0x0397, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F2E;
subst = new char[] { (char)0x0397, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F2F;
subst = new char[] { (char)0x0397, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F30;
subst = new char[] { (char)0x03B9, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F31;
subst = new char[] { (char)0x03B9, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F32;
subst = new char[] { (char)0x03B9, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F33;
subst = new char[] { (char)0x03B9, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F34;
subst = new char[] { (char)0x03B9, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F35;
subst = new char[] { (char)0x03B9, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F36;
subst = new char[] { (char)0x03B9, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F37;
subst = new char[] { (char)0x03B9, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F38;
subst = new char[] { (char)0x0399, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F39;
subst = new char[] { (char)0x0399, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F3A;
subst = new char[] { (char)0x0399, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F3B;
subst = new char[] { (char)0x0399, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F3C;
subst = new char[] { (char)0x0399, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F3D;
subst = new char[] { (char)0x0399, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F3E;
subst = new char[] { (char)0x0399, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F3F;
subst = new char[] { (char)0x0399, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F40;
subst = new char[] { (char)0x03BF, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F41;
subst = new char[] { (char)0x03BF, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F42;
subst = new char[] { (char)0x03BF, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F43;
subst = new char[] { (char)0x03BF, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F44;
subst = new char[] { (char)0x03BF, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F45;
subst = new char[] { (char)0x03BF, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F48;
subst = new char[] { (char)0x039F, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F49;
subst = new char[] { (char)0x039F, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F4A;
subst = new char[] { (char)0x039F, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F4B;
subst = new char[] { (char)0x039F, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F4C;
subst = new char[] { (char)0x039F, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F4D;
subst = new char[] { (char)0x039F, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F50;
subst = new char[] { (char)0x03C5, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F51;
subst = new char[] { (char)0x03C5, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F52;
subst = new char[] { (char)0x03C5, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F53;
subst = new char[] { (char)0x03C5, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F54;
subst = new char[] { (char)0x03C5, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F55;
subst = new char[] { (char)0x03C5, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F56;
subst = new char[] { (char)0x03C5, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F57;
subst = new char[] { (char)0x03C5, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F59;
subst = new char[] { (char)0x03A5, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F5B;
subst = new char[] { (char)0x03A5, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F5D;
subst = new char[] { (char)0x03A5, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F5F;
subst = new char[] { (char)0x03A5, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F60;
subst = new char[] { (char)0x03C9, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F61;
subst = new char[] { (char)0x03C9, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F62;
subst = new char[] { (char)0x03C9, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F63;
subst = new char[] { (char)0x03C9, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F64;
subst = new char[] { (char)0x03C9, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F65;
subst = new char[] { (char)0x03C9, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F66;
subst = new char[] { (char)0x03C9, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F67;
subst = new char[] { (char)0x03C9, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F68;
subst = new char[] { (char)0x03A9, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F69;
subst = new char[] { (char)0x03A9, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F6A;
subst = new char[] { (char)0x03A9, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F6B;
subst = new char[] { (char)0x03A9, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F6C;
subst = new char[] { (char)0x03A9, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F6D;
subst = new char[] { (char)0x03A9, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F6E;
subst = new char[] { (char)0x03A9, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F6F;
subst = new char[] { (char)0x03A9, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F70;
subst = new char[] { (char)0x03B1, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F71;
subst = new char[] { (char)0x03B1, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F72;
subst = new char[] { (char)0x03B5, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F73;
subst = new char[] { (char)0x03B5, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F74;
subst = new char[] { (char)0x03B7, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F75;
subst = new char[] { (char)0x03B7, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F76;
subst = new char[] { (char)0x03B9, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F77;
subst = new char[] { (char)0x03B9, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F78;
subst = new char[] { (char)0x03BF, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F79;
subst = new char[] { (char)0x03BF, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F7A;
subst = new char[] { (char)0x03C5, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F7B;
subst = new char[] { (char)0x03C5, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F7C;
subst = new char[] { (char)0x03C9, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F7D;
subst = new char[] { (char)0x03C9, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F80;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F81;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F82;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F83;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F84;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F85;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F86;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F87;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F88;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F89;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F8A;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F8B;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F8C;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F8D;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F8E;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F8F;
subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F90;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F91;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F92;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F93;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F94;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F95;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F96;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F97;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F98;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1F99;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1F9A;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F9B;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1F9C;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F9D;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1F9E;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1F9F;
subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FA0;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1FA1;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1FA2;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FA3;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FA4;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FA5;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FA6;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FA7;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FA8;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1FA9;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1FAA;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FAB;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FAC;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FAD;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FAE;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FAF;
subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FB0;
subst = new char[] { (char)0x03B1, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1FB1;
subst = new char[] { (char)0x03B1, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1FB2;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FB3;
subst = new char[] { (char)0x03B1, (char)0x0345 };
decompositionTable.put(key, subst);
key = (char)0x1FB4;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FB6;
subst = new char[] { (char)0x03B1, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FB7;
subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FB8;
subst = new char[] { (char)0x0391, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1FB9;
subst = new char[] { (char)0x0391, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1FBA;
subst = new char[] { (char)0x0391, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FBB;
subst = new char[] { (char)0x0391, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FBC;
subst = new char[] { (char)0x0391, (char)0x0345 };
decompositionTable.put(key, subst);
key = (char)0x1FBE;
subst = new char[] { (char)0x03B9 };
decompositionTable.put(key, subst);
key = (char)0x1FC1;
subst = new char[] { (char)0x00A8, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FC2;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FC3;
subst = new char[] { (char)0x03B7, (char)0x0345 };
decompositionTable.put(key, subst);
key = (char)0x1FC4;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FC6;
subst = new char[] { (char)0x03B7, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FC7;
subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FC8;
subst = new char[] { (char)0x0395, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FC9;
subst = new char[] { (char)0x0395, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FCA;
subst = new char[] { (char)0x0397, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FCB;
subst = new char[] { (char)0x0397, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FCC;
subst = new char[] { (char)0x0397, (char)0x0345 };
decompositionTable.put(key, subst);
key = (char)0x1FCD;
subst = new char[] { (char)0x1FBF, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FCE;
subst = new char[] { (char)0x1FBF, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FCF;
subst = new char[] { (char)0x1FBF, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FD0;
subst = new char[] { (char)0x03B9, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1FD1;
subst = new char[] { (char)0x03B9, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1FD2;
subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FD3;
subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FD6;
subst = new char[] { (char)0x03B9, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FD7;
subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FD8;
subst = new char[] { (char)0x0399, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1FD9;
subst = new char[] { (char)0x0399, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1FDA;
subst = new char[] { (char)0x0399, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FDB;
subst = new char[] { (char)0x0399, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FDD;
subst = new char[] { (char)0x1FFE, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FDE;
subst = new char[] { (char)0x1FFE, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FDF;
subst = new char[] { (char)0x1FFE, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FE0;
subst = new char[] { (char)0x03C5, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1FE1;
subst = new char[] { (char)0x03C5, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1FE2;
subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FE3;
subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FE4;
subst = new char[] { (char)0x03C1, (char)0x0313 };
decompositionTable.put(key, subst);
key = (char)0x1FE5;
subst = new char[] { (char)0x03C1, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1FE6;
subst = new char[] { (char)0x03C5, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FE7;
subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FE8;
subst = new char[] { (char)0x03A5, (char)0x0306 };
decompositionTable.put(key, subst);
key = (char)0x1FE9;
subst = new char[] { (char)0x03A5, (char)0x0304 };
decompositionTable.put(key, subst);
key = (char)0x1FEA;
subst = new char[] { (char)0x03A5, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FEB;
subst = new char[] { (char)0x03A5, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FEC;
subst = new char[] { (char)0x03A1, (char)0x0314 };
decompositionTable.put(key, subst);
key = (char)0x1FED;
subst = new char[] { (char)0x00A8, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FEE;
subst = new char[] { (char)0x00A8, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FEF;
subst = new char[] { (char)0x0060 };
decompositionTable.put(key, subst);
key = (char)0x1FF2;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FF3;
subst = new char[] { (char)0x03C9, (char)0x0345 };
decompositionTable.put(key, subst);
key = (char)0x1FF4;
subst = new char[] { (char)0x03BF, (char)0x0345, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FF6;
subst = new char[] { (char)0x03C9, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FF7;
subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0342 };
decompositionTable.put(key, subst);
key = (char)0x1FF8;
subst = new char[] { (char)0x039F, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FF9;
subst = new char[] { (char)0x039F, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FFA;
subst = new char[] { (char)0x03A9, (char)0x0300 };
decompositionTable.put(key, subst);
key = (char)0x1FFB;
subst = new char[] { (char)0x03A9, (char)0x0301 };
decompositionTable.put(key, subst);
key = (char)0x1FFC;
subst = new char[] { (char)0x03A9, (char)0x0345 };
decompositionTable.put(key, subst);
key = (char)0x1FFD;
subst = new char[] { (char)0x00B4 };
decompositionTable.put(key, subst);
key = (char)0x304C;
subst = new char[] { (char)0x304B, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x304E;
subst = new char[] { (char)0x304D, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3050;
subst = new char[] { (char)0x304F, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3052;
subst = new char[] { (char)0x3051, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3054;
subst = new char[] { (char)0x3053, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3056;
subst = new char[] { (char)0x3055, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3058;
subst = new char[] { (char)0x3057, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x305A;
subst = new char[] { (char)0x3059, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x305C;
subst = new char[] { (char)0x305B, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x305E;
subst = new char[] { (char)0x305D, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3060;
subst = new char[] { (char)0x305F, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3062;
subst = new char[] { (char)0x3061, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3065;
subst = new char[] { (char)0x3064, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3067;
subst = new char[] { (char)0x3066, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3069;
subst = new char[] { (char)0x3068, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3070;
subst = new char[] { (char)0x306F, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3071;
subst = new char[] { (char)0x306F, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x3073;
subst = new char[] { (char)0x3072, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3074;
subst = new char[] { (char)0x3072, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x3076;
subst = new char[] { (char)0x3075, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x3077;
subst = new char[] { (char)0x3075, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x3079;
subst = new char[] { (char)0x3078, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x307A;
subst = new char[] { (char)0x3078, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x307C;
subst = new char[] { (char)0x307B, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x307D;
subst = new char[] { (char)0x307B, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x3094;
subst = new char[] { (char)0x3046, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x309E;
subst = new char[] { (char)0x309D, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30AC;
subst = new char[] { (char)0x30AB, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30AE;
subst = new char[] { (char)0x30AD, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30B0;
subst = new char[] { (char)0x30AF, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30B2;
subst = new char[] { (char)0x30B1, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30B4;
subst = new char[] { (char)0x30B3, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30B6;
subst = new char[] { (char)0x30B5, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30B8;
subst = new char[] { (char)0x30B7, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30BA;
subst = new char[] { (char)0x30B9, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30BC;
subst = new char[] { (char)0x30BB, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30BE;
subst = new char[] { (char)0x30BD, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30C0;
subst = new char[] { (char)0x30BF, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30C2;
subst = new char[] { (char)0x30C1, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30C5;
subst = new char[] { (char)0x30C4, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30C7;
subst = new char[] { (char)0x30C6, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30C9;
subst = new char[] { (char)0x30C8, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30D0;
subst = new char[] { (char)0x30CF, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30D1;
subst = new char[] { (char)0x30CF, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x30D3;
subst = new char[] { (char)0x30D2, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30D4;
subst = new char[] { (char)0x30D2, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x30D6;
subst = new char[] { (char)0x30D5, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30D7;
subst = new char[] { (char)0x30D5, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x30D9;
subst = new char[] { (char)0x30D8, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30DA;
subst = new char[] { (char)0x30D8, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x30DC;
subst = new char[] { (char)0x30DB, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30DD;
subst = new char[] { (char)0x30DB, (char)0x309A };
decompositionTable.put(key, subst);
key = (char)0x30F4;
subst = new char[] { (char)0x30A6, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30F7;
subst = new char[] { (char)0x30EF, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30F8;
subst = new char[] { (char)0x30F0, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30F9;
subst = new char[] { (char)0x30F1, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30FA;
subst = new char[] { (char)0x30F2, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0x30FE;
subst = new char[] { (char)0x30FD, (char)0x3099 };
decompositionTable.put(key, subst);
key = (char)0xFB1F;
subst = new char[] { (char)0x05F2, (char)0x05B7 };
decompositionTable.put(key, subst);
key = (char)0xFB2A;
subst = new char[] { (char)0x05E9, (char)0x05C1 };
decompositionTable.put(key, subst);
key = (char)0xFB2B;
subst = new char[] { (char)0x05E9, (char)0x05C2 };
decompositionTable.put(key, subst);
key = (char)0xFB2C;
subst = new char[] { (char)0x05E9, (char)0x05BC, (char)0x05C1 };
decompositionTable.put(key, subst);
key = (char)0xFB2D;
subst = new char[] { (char)0x05E9, (char)0x05BC, (char)0x05C2 };
decompositionTable.put(key, subst);
key = (char)0xFB2E;
subst = new char[] { (char)0x05D0, (char)0x05B7 };
decompositionTable.put(key, subst);
key = (char)0xFB2F;
subst = new char[] { (char)0x05D0, (char)0x05B8 };
decompositionTable.put(key, subst);
key = (char)0xFB30;
subst = new char[] { (char)0x05D0, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB31;
subst = new char[] { (char)0x05D1, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB32;
subst = new char[] { (char)0x05D2, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB33;
subst = new char[] { (char)0x05D3, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB34;
subst = new char[] { (char)0x05D4, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB35;
subst = new char[] { (char)0x05D5, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB36;
subst = new char[] { (char)0x05D6, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB38;
subst = new char[] { (char)0x05D8, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB39;
subst = new char[] { (char)0x05D9, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB3A;
subst = new char[] { (char)0x05DA, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB3B;
subst = new char[] { (char)0x05DB, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB3C;
subst = new char[] { (char)0x05DC, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB3E;
subst = new char[] { (char)0x05DE, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB40;
subst = new char[] { (char)0x05E0, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB41;
subst = new char[] { (char)0x05E1, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB43;
subst = new char[] { (char)0x05E3, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB44;
subst = new char[] { (char)0x05E4, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB46;
subst = new char[] { (char)0x05E6, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB47;
subst = new char[] { (char)0x05E7, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB48;
subst = new char[] { (char)0x05E8, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB49;
subst = new char[] { (char)0x05E9, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB4A;
subst = new char[] { (char)0x05EA, (char)0x05BC };
decompositionTable.put(key, subst);
key = (char)0xFB4B;
subst = new char[] { (char)0x05D5, (char)0x05B9 };
decompositionTable.put(key, subst);
key = (char)0xFB4C;
subst = new char[] { (char)0x05D1, (char)0x05BF };
decompositionTable.put(key, subst);
key = (char)0xFB4D;
subst = new char[] { (char)0x05DB, (char)0x05BF };
decompositionTable.put(key, subst);
key = (char)0xFB4E;
subst = new char[] { (char)0x05E4, (char)0x05BF };
decompositionTable.put(key, subst);
}
}